info###latexinfo.ru

Ответы на вопросы: Вопросы вёрстки

Основное различие

Разница между командами заключается в области их действия и изменяемости:

  • \textwidth — это глобальная константа. Она определяет полную ширину текстового блока страницы (расстояние между левым и правым полями). Это значение задается классом документа или пакетом геометрии и не меняется в зависимости от того, где находится курсор.
  • \linewidth — это локальная переменная. Она определяет ширину текущей строки набора в конкретном контексте. Это значение меняется динамически при входе в списки, цитаты, мини-страницы или многоколоночную верстку.

Поведение в различных окружениях

  • Обычный текст: \linewidth равен \textwidth.
  • Списки (itemize, enumerate):
    • \textwidth остается равным ширине страницы.
    • \linewidth уменьшается на величину отступа списка.
  • Цитаты (quote, quotation):
    • \linewidth сужается согласно отступам цитаты.
  • Мини-страницы (minipage, parbox):
    • \linewidth автоматически принимает ширину созданного блока.
  • Две колонки (twocolumn):
    • \textwidth равен суммарной ширине обеих колонок плюс промежуток.
    • \linewidth равен ширине только одной текущей колонки.

Что использовать

  1. Используйте \textwidth, когда необходимо растянуть объект (рисунок, таблицу) на всю ширину текстового поля страницы или колонки, независимо от текущего уровня вложенности.
  2. Используйте \linewidth, когда объект должен занимать всю доступную ширину текущего контейнера. Это вариант для:
    • вставки изображений внутри списков и цитат;
    • создания универсальных макросов и окружений;
    • верстки внутри ячеек таблиц или блоков minipage.

Пример

Приведем пример, демонстрирующий разницу внутри нумерованного списка:

Длинный текст для демонстрации ширины страницы, сколько занимает текст в обычном абзаце, чтобы были видны обе границы.
\begin{enumerate}
\item Пункт списка.

% linewidth: изображение впишется в отступ пункта
\includegraphics[width=\linewidth]{image.png}

% textwidth: изображение может вылезти за границы пункта,
% так как оно попытается занять всю ширину страницы
\includegraphics[width=\textwidth]{image.png}
\end{enumerate}
Пример
Рисунок 1: Пример

Вывод: Если есть сомнения, какую команду использовать, безопаснее выбрать \linewidth, так как она гарантирует, что контент не выйдет за границы текущего блока.



Подробнее

В стандартном тексте на русском языке в 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.

Есть несколько способов решения такой проблемы:

  1. Расставить переносы в таких слова вручную с помощью команды \-:

    ...
    В конце установки поставьте галочку возле пункта 2, нажмите на Con\-fi\-gu\-ra\-tion. Откроется новая страница.

    Получается результат с переносом в этом слове:


    Рис. 2.

    Если такие слова редко встречаются в тексте, то этого варианта достаточно.

  2. Если же слова в тексте встречаются постоянно, можно использовать следующий прием: обернуть их в команду \foreignlanguage{english}{слово}. В тексте это будет выглядеть следующим образом:

    ...
    В конце установки поставьте галочку возле пункта 2, нажмите на \foreignlanguage{english}{Configuration}. Откроется новая страница.

    Результат в файле PDF будет выглядеть точно так же, как на рис. 2. Для упрощения использования можно ввести свою команду:

    \newcommand{\engword}[1]{\foreignlanguage{english}{#1}} % добавьте в преамбулу
    ...
    % использование
    В конце установки поставьте галочку возле пункта 2, нажмите на \engword{Configuration}

Таким образом можно избежать переполнений строк, когда в тексте есть слова на иностранном языке, которые автоматически не переносятся.



Подробнее

Для вывода разных колонтитулов для разных страниц воспользуемся колонтитулами из пакета fancyhdr. Подключим пакет и зададим определение двух разных колонтитулов:
\usepackage{fancyhdr} % пакет для колонтитулов
\usepackage{xcolor} % пакет для задания цвета
...

% определим основной колонтитул как номер страницы внизу по центру. Цвет текста — красный.
\fancypagestyle{basicstyle}{
\fancyhead{}
\fancyfoot[C]{\textcolor{red}{\thepage}}
}

% определим дополнительный колонтитул также внизу страницы по центру, но цвет текста — синий.
\fancypagestyle{addstyle}{
\fancyhead{}
\fancyfoot[C]{\textcolor{blue}{\thepage}}
}
Теперь зададим вывод колонтитулов таким образом:
% В начале документа задаем основной колонтитул:
\pagestyle{basicstyle}

% Далее идет содержание документа до того момента, как нужно выдать дополнительный колонтитул
% Внизу на этих страницах будет выдаваться колонтитул красного цвета.

% Вызываем дополнительный колонтитул
\pagestyle{addstyle}

% На дальнейших страницах колонтитул будет синего цвета.

% Если нужна страница без колонтитула, вызываем команду:
\pagestyle{empty}

Первые страницы внизу будут выглядеть так:



Следующие страницы с дополнительным колонтитулом будут выглядеть так:



Подробнее

Чтобы отключить переносы слов в русском тексте в LaTeX, можно использовать несколько способов.

Отключить переносы глобально для всего документа можно с помощью пакета hyphenat:

\usepackage[none]{hyphenat}

Этот метод полностью отключает переносы для всех языков, включая русский.

Если используется пакет babel, то отключить переносы можно с помощью настройки переносов:

\usepackage[russian]{babel}
\hyphenpenalty=10000 % запрещает переносы
\exhyphenpenalty=10000 % запрещает переносы через явно указанные дефисы

Можно отключить переносы только в конкретных словах с помощью команды \mbox:

Это пример \mbox{без переноса}.


Замечания:

Полное отключения переносов лучше не использовать, так как текст может стать «перегруженным» пробелами или иметь неравномерные отступы. Лучше ограничить использование этого метода для небольших фрагментов.

Чтобы текст равномерно распределялся в отведенной области и не выходил за рамки, используйте команду \sloppy перед текстом. Отмена этой команды — команда \fussy.



Подробнее

При компиляции документов Latex сложные слова с дефисами (например, «снежно-ледовый», «северо-восток») автоматически переносятся только там, где стоит дефис. Можно использовать команду \- для принудительного указания места разрыва. Например:

снеж\-но-ле\-до\-вый

Полуавтоматическим решением является использование специального символа "=. Этот символ заменяет обычный дефис и позволяет LaTeX переносить обе части сложного слова по слогам. Например:

снежно"=ледовый

В этом случае слово может быть перенесено по любому из доступных слогов. Правда, такое решение все равно не является автоматическим, каждое слово нужно редактировать.

Есть вариант улучшения качества переносов в Latex — использование пакета microtype, например, следующим образом:

\usepackage[protrusion=true]{microtype}

В результате текст будет иметь более красивый вид, уменьшится количество переносов, в большинстве случаев не будет лишних выходов за пределы страницы.



Подробнее

Символ ^ можно записать несколькими разными способами:

  1. используя \textasciicircum;
  2. с помощью \verb+^+;
  3. в математическом режиме $\string^$.

Примеры записи в Latex документе:

Символ \verb+^+ можно записать несколькими разными способами:
\begin{enumerate}
\item используя \verb+\textasciicircum+: \textasciicircum;
\item с помощью \verb-\verb+^+-: \verb+^+;
\item в математическом режиме \verb+$\string^$+: $\string^$.
\end{enumerate}

Результат:

результат записи символа в latex




Подробнее

Чтобы автоматически отделять разряды в числах, можно использовать, например, команду \numprint из пакета numrint. Для этого нужно подключить пакет и задать символ отделения разрядов следующим образом:

\usepackage{numprint} % подключить пакет
\npthousandsep{\,} % задать символ разделения, например, небольшой пробел

Использование команды в тексте и в формулах:

Число 34000 в отформатированном виде \numprint{34000}.

Число 450345340 в отформатированном виде \numprint{450345340}.

Число 8923400 в формуле $\numprint{8923400}\cdot 5 = \numprint{49617000}$.

Результат:

Наглядно команда numprint latex


Подробнее

Находясь на нашем сайте, вы принимаете условия использования файлов cookies. Более подробная информация здесь.