Иногда нужно визуально выделить содержимое конкретной ячейки, например, создать эффект «вложенности» или красной строки для всего блока текста. Речь идет о ячейке типа «параграф» p{...}, которая поддерживает перенос строк.
Простое добавление \hspace в начале строки недостаточно, при переносе вторая и последующие строки будут прибиты к левому краю. Цель: сделать так, чтобы все строки были немного сдвинуты.
Для этого воспользуемся комбинацией \hspace* и \parbox:
\newcommand{\colwidth}{\dimexpr\linewidth-2\tabcolsep-\arrayrulewidth}
\newcommand{\cellspace}[1]{\hspace*{0.4cm}\parbox[t]{\colwidth}{#1}}
\begin{tabular}{|p{5cm}|c|c|} \hline
\textbf{Название списка} & \textbf{Ячейка 1} & \textbf{Ячейка 2} \\ \hline
\cellspace{Содержимое первого элемента списка на несколько строк}\par & Ячейка 3 & Ячейка 4 \\ \hline
\cellspace{Содержимое второго элемента списка на несколько строк} & Ячейка 5 & Ячейка 6 \\ \hline
\cellspace{Третий элемент} & Ячейка 7 & Ячейка 8 \\ \hline
\end{tabular}
В результате получим следующую таблицу:

Для упрощения записи повторяющиеся команды переопределили как отдельные новые команды. Команда \cellspace — новая команда, которая задает комбинацию сдвига. Команда \colwidth использует расчетную ширину столбца, ее в данном примере можно просто заменить на 4.6cm (5 см минус сдвиг 0.4 см). Определение \colwidth через расчетное значение удобно использовать для ячеек разной ширины, не задумываясь над расчетами ширины.
Команду \hspace*{} используем именно со звездочкой, это гарантирует, что отступ не будет удален в начале ячейки, так как иногда Latex игнорирует такие пробелы.
Есть нюанс с использованием \par в конце ячейки. Если текст многострочный, добавление \par добавляет стандартный отступ снизу (первая строка). Без него текст может выглядеть прижатым к нижней линии (вторая строка). Если текст выводится в одну строку, \par использовать не нужно, иначе появится лишняя строка.
\textwidth — это глобальная константа. Она определяет полную ширину текстового блока страницы (расстояние между левым и правым полями). Это значение задается классом документа или пакетом геометрии и не меняется в зависимости от того, где находится курсор.\linewidth — это локальная переменная. Она определяет ширину текущей строки набора в конкретном контексте. Это значение меняется динамически при входе в списки, цитаты, мини-страницы или многоколоночную верстку.\linewidth равен \textwidth.itemize, enumerate): \textwidth остается равным ширине страницы.\linewidth уменьшается на величину отступа списка.quote, quotation): \linewidth сужается согласно отступам цитаты.minipage, parbox): \linewidth автоматически принимает ширину созданного блока.twocolumn): \textwidth равен суммарной ширине обеих колонок плюс промежуток.\linewidth равен ширине только одной текущей колонки.\textwidth, когда необходимо растянуть объект (рисунок, таблицу) на всю ширину текстового поля страницы или колонки, независимо от текущего уровня вложенности.\linewidth, когда объект должен занимать всю доступную ширину текущего контейнера. Это вариант для: minipage.Приведем пример, демонстрирующий разницу внутри нумерованного списка:
Длинный текст для демонстрации ширины страницы, сколько занимает текст в обычном абзаце, чтобы были видны обе границы.
\begin{enumerate}
\item Пункт списка.
% linewidth: изображение впишется в отступ пункта
\includegraphics[width=\linewidth]{image.png}
% textwidth: изображение может вылезти за границы пункта,
% так как оно попытается занять всю ширину страницы
\includegraphics[width=\textwidth]{image.png}
\end{enumerate}

Вывод: Если есть сомнения, какую команду использовать, безопаснее выбрать \linewidth, так как она гарантирует, что контент не выйдет за границы текущего блока.
Чтобы добавить более глубокие уровни в оглавление, измените значение tocdepth в преамбуле:
\setcounter{tocdepth}{4} % включает \paragraph{}
или
\setcounter{tocdepth}{5} % включает \paragraph{} и \subparagraph{}
Пример полного документа:
\documentclass{article}
\setcounter{tocdepth}{4} % теперь \paragraph{} в оглавлении
\begin{document}
\tableofcontents
\section{Основы}
\paragraph{Дополнительные замечания} % теперь этот пункт виден в оглавлении.
\end{document}
Также можно уменьшить количество разделов, входящих в оглавление, уменьшив аналогичным образом значение tocdepth до нужного уровня.
Все уровни разделов для разных классов документов Latex перечислены в таблице 1 в порядке вложенности уровней.
| Команда | Уровень | article | book | report |
|---|---|---|---|---|
\part{} | -1 | ✓ | ✓ | ✓ |
\chapter{} | 0 | ✗ | ✓ | ✓ |
\section{} | 1 | ✓ | ✓ | ✓ |
\subsection{} | 2 | ✓ | ✓ | ✓ |
\subsubsection{} | 3 | ✓ | ✓ | ✓ |
\paragraph{} | 4 | ✓ | ✓ | ✓ |
\subparagraph{} | 5 | ✓ | ✓ | ✓ |
В LaTeX можно организовать управляемое отображение определённых фрагментов текста — например, пояснений, черновиков, решений задач или методических комментариев. При этом содержимое остаётся в файле, но может быть временно скрыто из документа простым изменением нескольких строк в преамбуле.
Определим окружение mynote, предназначенное для вставки примечаний к тексту:
\newenvironment{mynote}{
\itshape\textbf{Примечание.}
}{}Вот так его можно использовать к тексте:
Некоторый фрагмент текста документа, в котором изложена основная информация.
\begin{mynote}
Пример примечания к тексту. Можно оформить длинное пояснение, охватывающее несколько абзацев.
Это второй абзац примечания.
\end{mynote}
Ещё один фрагмент основного текста, который может включать таблицы, изображения или формулы.
\begin{mynote}
И еще одно примечание.
\end{mynote}
Далее продолжается основной текст.В документе после компиляции все примечания будут отображены курсивом с заголовком Примечание:

Чтобы полностью исключить содержимое окружения mynote из документа PDF, добавьте в преамбулу (после определения окружения) следующие строки:
\usepackage{verbatim} % подключение пакета для работы с comment
\let\mynote=\comment
\let\endmynote=\endcommentЭти команды «переназначают» окружение mynote на comment из пакета verbatim, которое игнорирует весь текст между \begin{comment} и \end{comment}. После этого все блоки \begin{mynote}...\end{mynote} будут полностью пропущены при сборке PDF:

Чтобы вернуть отображение комментариев, достаточно:
\let\mynote=\comment и \let\endmynote=\endcomment, илиПосле перекомпиляции документа все примечания снова появятся.
Такой приём удобен для:
Часто при оформлении документов возникает задача: чтобы подпись перед списком (например, «Задача» или «Задачи») автоматически менялась в зависимости от количества элементов. В LaTeX это можно реализовать с помощью условных проверок из пакета xstring.
Определим команду \autoPlural (макрос), которая анализирует аргумент: если в нём есть запятая, значит, перечислено несколько элементов — используем форму множественного числа.
\usepackage{xstring} % подключение пакета
\newcommand*{\autoPlural}[1]{%
\IfSubStr{#1}{,}{Задачи}{Задача}%
}
Звёздочка в \newcommand* означает, что команда не должна содержать разрывов строк в аргументе. Проверка \IfSubStr ищет запятую — простой способ определения множественности.
Пример использования:
\autoPlural{сделать тест, написать текст} % Задачи
\autoPlural{сделать тест} % Задача
В результате на странице получим текст:

Усложним задачу: пусть список выводится только при наличии элементов, а при пустом аргументе — ничего не появляется.
\newcommand{\taskList}[1]{%
\IfStrEq{#1}{}{}{% если #1 пустой — ничего, иначе:
\textit{\autoPlural{#1}:} #1.%
}%
}
Пример использования:
\taskList{сделать тест, написать текст}
\taskList{}
\taskList{сделать тест}
В результате в тексте получится:

Пустая строка для второго случая не выводится.
Такой подход удобен при автоматизации шаблонов:
Ограничения макроса: если в одном элементе есть дополнительные запятые (например, «настроить сервер, проверить доступ»), то команда ошибочно выведет множественное число.
pdfpages и команда \includepdf:\usepackage{pdfpages} % вставка pdf
...
\includepdf[pages=-]{3.pdf} % pages=- вставка всех страниц, 3.pdf - имя файла
Подробнее про вставку файлов pdf см. статью на нашем сайте: Добавление страниц pdf файла — пакет pdfpages.
Чтобы в оглавлении работали ссылки на страницы, в преамбулу нужно добавить пакет hyperref, а в текст команду создания оглавления:
\usepackage[unicode, pdftex]{hyperref} % появятся ссылки в оглавлении
\hypersetup{
unicode=true,
colorlinks=true,
linkcolor=blue, % цвет ссылок в оглавлении
pdfborder = {0 0 0}
}
...
\tableofcontents % оглавление
Чтобы в оглавление добавить ссылку на вставленный файл, вместо команды вставки файла из п. 1. нужно написать следующее (см. комментарии в коде):
\clearpage % новая страница
\phantomsection % установка ссылки на место в документе для оглавления
\addtocounter{chapter}{1} % увеличиваем счётчик глав
\addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}Имя главы} % добавляем пункт главы в оглавление, можно вставить не главу, а раздел section и т. п.
\label{mychapter} % какая-нибудь метка для ссылки
\includepdf[pages=-]{3.pdf} % вставка документа pdfПосле компиляции в оглавлении появится Глава 3, нажав на нее, перейдем на страницу 5:

Полный код со вставкой оглавления и файла pdf:
\usepackage{pdfpages} % вставка pdf
\usepackage[unicode, pdftex]{hyperref} % появятся ссылки в оглавлении
\hypersetup{
unicode=true,
colorlinks=true,
linkcolor=blue, % цвет ссылок в оглавлении
pdfborder = {0 0 0}
}
...
\begin{document}
\tableofcontents % оглавление
...
\clearpage % новая страница
\phantomsection % установка ссылки на место в документе для оглавления
\addtocounter{chapter}{1} % увеличиваем счётчик глав
\addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}Имя главы} % добавляем пункт главы в оглавление, можно вставить не главу, а раздел section и т. п.
\label{mychapter} % какая-нибудь метка для ссылки
\includepdf[pages=-]{3.pdf} % вставка документа pdf
...В документе Latex класса book оглавление с главами и разделами выглядит, например, следующим образом:

Убрать номера только у глав можно несколькими вариантами:
xpatch и следующие команды в преамбуле документа:\usepackage{xpatch}
\makeatletter
\AtBeginDocument{ % иногда без AtBeginDocument не работает, т.к. переопределяется другими пакетами
\xpretocmd{\l@chapter}{\begingroup\let\numberline\@gobble}{}{}
\xapptocmd{\l@chapter}{\endgroup}{}{}
}
\makeatother
titletoc и следующие команды в преамбуле документа:\usepackage{titletoc}
\titlecontents{chapter}
[0pt] % отступ слева
{\vspace{4pt}\bfseries} % формат для всего элемента
{} % метка (номер главы — оставляем пустым)
{} % метка без номера
{\hfill\contentspage} % страница и заполнитель
[\vspace{4pt}] % послеВ этом варианте нужно вручную настроить внешний вид каждого уровня оглавления, в примере приведена настройка глав.
В результате применения каждого из этих двух вариантов получится следующий вид оглавления:

Если же нужно убрать номера у всех уровней в оглавлении, то можно воспользоваться пакетом titletoc из второго примера и переопределить аналогичным образом все уровни вручную, или же можно пойти более коротким путем, воспользовавшись пакетом tocloft:
\usepackage{tocloft}
\renewcommand{\numberline}[1]{} % глобально убирает все номера (и глав, и секций, и подсекций и т.д.)Получится следующее оглавление:

В стандартном тексте на русском языке в Latex слова на другом языке не имеют автоматических переносов. Рассмотрим пример такого текста со стандартной преамбулой:
\documentclass[a4paper,12pt]{book}
\usepackage[english, russian]{babel} % подключение english в babel вторым языком все равно не дает автоматические переносы в english
\usepackage[T2A]{fontenc}
...
Обычный текст для примера длины строки в абзаце с~достаточно длинными предложениями, чтобы было несколько строк в абзаце, еще немного текста с длинными словами, можно даже использовать формулы $ x_i = a_i \cdot 3 + 56$, $y_i = 47 + b_i$ и~что-нибудь еще, возможно.
В конце установки поставьте галочку возле пункта 2, нажмите на Configuration. Откроется новая страница.
Результат в PDF выглядит следующим образом:

Рис. 1.
Слово <<Configuration>> вышло за пределы строки и в логе появилось предупреждение: Overfull \hbox (38.96863pt too wide) in paragraph.
Есть несколько способов решения такой проблемы:
\-:Получается результат с переносом в этом слове:

Рис. 2.
Если такие слова редко встречаются в тексте, то этого варианта достаточно.
Если же слова в тексте встречаются постоянно, можно использовать следующий прием: обернуть их в команду \foreignlanguage{english}{слово}. В тексте это будет выглядеть следующим образом:
...
В конце установки поставьте галочку возле пункта 2, нажмите на \foreignlanguage{english}{Configuration}. Откроется новая страница.
Результат в файле PDF будет выглядеть точно так же, как на рис. 2. Для упрощения использования можно ввести свою команду:
\newcommand{\engword}[1]{\foreignlanguage{english}{#1}} % добавьте в преамбулу
...
% использование
В конце установки поставьте галочку возле пункта 2, нажмите на \engword{Configuration}
Таким образом можно избежать переполнений строк, когда в тексте есть слова на иностранном языке, которые автоматически не переносятся.
Иногда возникает ситуация, когда что-то нужно процитировать в тексте несколько раз. В таких случаях чтобы не ставить каждый раз новую сноску с идентичным текстом, можно использовать повторяющиеся сноски с одним и тем же номером. Оформить текст с такими сносками можно следующим образом:
\documentclass{article}
\usepackage[russian]{babel}
\begin{document}
Первая обычная сноска\footnote{Текст первой сноски.}
~
% Увеличиваем счетчик сносок вручную
\addtocounter{footnote}{1}
% Используем новый номер для повторяющейся сноски
Повторяющаяся сноска\footnotemark[\value{footnote}].
Ещё одно упоминание\footnotemark[\value{footnote}].
% Текст для повторяющейся сноски
\footnotetext[\value{footnote}]{Общий текст для повторяющейся сноски.}
~
% Последующие сноски продолжают правильную нумерацию
Третья обычная сноска\footnote{Ещё одна автонумерованная сноска.}
\end{document}В файле pdf после компиляции получим:

Это был вариант с неактивными ссылками.
Если же на сносках необходимы ссылки, то добавить их можно следующим образом:
\documentclass{article}
\usepackage[russian]{babel}
\usepackage{hyperref} % пакет для ссылок
\hypersetup{colorlinks=true,linkcolor=blue} % включить подсветку ссылок и указать цвет ссылок
\usepackage{footnotehyper} % пакет для ссылок в сносках
\begin{document}
Первая обычная сноска\footnote{Текст первой сноски.}
~
% Увеличиваем счётчик вручную
\addtocounter{footnote}{1}
\edef\currentfootnotemark{\the\value{footnote}} % Сохраняем текущий номер
% Создаём метку для сноски
\phantomsection % Важно для правильной привязки гиперссылки
\footnotetext[\currentfootnotemark]{%
\label{footnote:\currentfootnotemark}%
Общий текст для повторяющейся сноски.%
}
% Используем \hyperref для создания кликабельной ссылки
Повторяющаяся сноска\hyperref[footnote:\currentfootnotemark]{\textsuperscript{\currentfootnotemark}}.
Ещё одно упоминание\hyperref[footnote:\currentfootnotemark]{\textsuperscript{\currentfootnotemark}}.
~
% Последующие сноски продолжают правильную нумерацию
Еще одна обычная сноска\footnote{Ещё одна автонумерованная сноска.}.
\end{document}Результат в pdf выглядит следующим образом:

longtable добавляет небольшие вертикальные отступы до и после таблицы:\LTpre по умолчанию равен \bigskipamount.\LTpost также равен \bigskipamount.\bigskipamount обычно составляет 12pt ± 4pt, то есть базовое значение 12pt с возможностью растяжения или сжатия в пределах 4pt.longtable достаточно задать параметры \LTpre и \LTpost:\setlength{\LTpre}{0pt} % Убрать полностью отступ перед longtable
\setlength{\LTpost}{5pt} % Отступ после longtable будет равен 5ptРассмотрим пример стандартной таблицы с выравниванием текста по ширине (например, p{5cm}) в Latex:
\begin{tabular}{|c|p{3.5cm}|p{3.5cm}|}\hline
1 & Первое длинное предложение & Второе длинное предложение\\ \hline
2 & Первое длинное предложение во второй строке & Второе длинное предложение во второй строке таблицы\\ \hline
3 & Первое длинное предложение в третьей строке таблицы & Второе длинное предложение в третьей строке\\ \hline
\end{tabular}Результат в PDF после компиляции:

Получились длинные растянутые пробелы почти во всех ячейках таблицы. От них можно избавиться, сделав выравнивание текста по левому краю с помощью команды >{\raggedright\arraybackslash} следующим образом:
\usepackage{array} % добавить пакет для работы команды arraybackslash
...
\begin{tabular}{|c|>{\raggedright\arraybackslash}p{3.5cm}|>{\raggedright\arraybackslash}p{3.5cm}|}\hline
1 & Первое длинное предложение & Второе длинное предложение\\ \hline
2 & Первое длинное предложение во второй строке & Второе длинное предложение во второй строке таблицы\\ \hline
3 & Первое длинное предложение в третьей строке таблицы & Второе длинное предложение в третьей строке\\ \hline
\end{tabular}
Получим более красивый вариант таблицы без дополнительных пробелов между словами:

Хотелось бы еще убрать пробелы справа после слов. Это можно сделать, используя пакет ragged2e и команду >{\RaggedRight\hspace{0pt}}:
\usepackage{array} % для работы команды arraybackslash
\usepackage{ragged2e} % выравнивание по левому краю с переносами
...
\begin{tabular}{|c|>{\RaggedRight\hspace{0pt}}p{3.5cm}|>{\RaggedRight\hspace{0pt}}p{3.5cm}|}\hline
1 & Первое длинное предложение & Второе длинное предложение\\ \hline
2 & Первое длинное предложение во второй строке & Второе длинное предложение во второй строке таблицы\\ \hline
3 & Первое длинное предложение в третьей строке таблицы & Второе длинное предложение в третьей строке\\ \hline
\end{tabular}
В результате получим переносы в словах во всех ячейках, включая верхнюю строку:

По умолчанию в Latex в дробных числах внутри формул ставится лишний пробел после запятой, так как запятая не является десятичным разделителем по умолчанию, а используется при перечислении:
Числа $13,54$, $70,005$.
Переменные $x,y,z$.
Такой текст выведется следующим образом (т. е. в числах есть пробелы, при перечислении их нет):

Один из способов убрать пробел в числах — заключить запятую в фигурные скобки:
Числа $13{,}54$, $70{,}005$.
Такой способ можно использовать, если таких чисел в тексте крайне мало. В остальных случаях удобно подключить специально разработанный для этого пакет icomma:
\usepackage{icomma}
...
Числа $13,54$, $70,005$.
Переменные $x,y,z$.
Результат будет следующий:

В числах пробел после запятой убрался, но и в перечислении пробелов тоже нет. Для того, чтобы пробелы сохранялись в случаях перечислений, нужно их явным образом прописать:
\usepackage{icomma}
...
Числа $13,54$, $70,005$.
Переменные $x, y, z$.
Результат получаем правильный:
