Основное различие
Разница между командами заключается в области их действия и изменяемости:\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}

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