Списки: itemize, enumerate, description
Урок про три вида списков LaTeX: маркированный, нумерованный и список-описание, плюс вложенность.
Окружение — это блок
\begin{имя}...\end{имя}; списки строятся именно как окружения.
Списки — это уже знакомство с окружениями, главным строительным блоком LaTeX. Понять списки — значит понять, как устроены таблицы, формулы и рисунки.
Маркированный список
\begin{itemize}
\item Первый пункт
\item Второй пункт
\item Третий пункт
\end{itemize}Окружение itemize рисует маркеры-точки. Каждый пункт начинается с команды \item.
Нумерованный список
\begin{enumerate}
\item Шаг один
\item Шаг два
\item Шаг три
\end{enumerate}Окружение enumerate само проставляет номера 1, 2, 3. Вставите пункт в середину — нумерация пересчитается.
Список-описание
В description у каждого пункта есть «термин» в квадратных скобках:
\begin{description}
\item[CPU] центральный процессор
\item[RAM] оперативная память
\item[SSD] твердотельный накопитель
\end{description}Удобно для глоссариев и пояснений «термин — определение».
Вложенность
Списки можно вкладывать друг в друга до четырёх уровней; LaTeX сам меняет вид маркеров и номеров по уровням:
\begin{enumerate}
\item Раздел
\begin{itemize}
\item подпункт
\item подпункт
\end{itemize}
\item Следующий раздел
\end{enumerate}На втором уровне enumerate номера станут «(a) (b)», маркеры itemize сменятся с точки на тире. Это часть автоматики — вы не настраиваете вид вручную.
Глубина вложенности не случайно ограничена четырьмя уровнями. У LaTeX заранее определены ровно четыре набора счётчиков и меток для каждого типа списка (например, enumi, enumii, enumiii, enumiv), и пятый уровень упрётся в ошибку Too deeply nested. Это не техническая мелочь, а намёк от системы: список глубже четырёх уровней почти всегда означает, что структуру стоит переосмыслить. Глубоко вложенные перечисления тяжело читаются, а правый край съезжает всё дальше из-за нарастающих отступов. Чаще такую информацию лучше разбить на разделы с заголовками или вынести в таблицу.
Маркеры и формат номеров на каждом уровне заданы не «жёстко», а через переопределяемые команды: за вид меток itemize отвечают \labelitemi…\labelitemiv, а за формат номеров enumerate — связки \labelenumi и \theenumi. Поэтому стандартную последовательность «точка → тире → звёздочка → точка» или нумерацию «1 → a → i → A» можно переопределить, если требуется фирменный стиль. Но трогать эти внутренности руками громоздко — для настройки давно есть пакет, о котором ниже.
Как работает под капотом
Все три списка — это варианты одного общего механизма list. У каждого уровня вложенности есть свой счётчик (enumi, enumii, ...) и свой шаблон метки. Команда \item завершает предыдущий пункт, увеличивает счётчик (для нумерованных) и печатает метку. Пакет enumitem позволяет тонко настроить отступы, символы маркеров и нумерацию, если стандартного вида не хватает.
Пакет enumitem заслуживает отдельного слова, потому что закрывает почти все реальные потребности по оформлению списков. Параметры передают прямо в квадратных скобках при открытии окружения. Например, \begin{itemize}[noitemsep] убирает лишние вертикальные отступы между пунктами и делает список компактным; [label=\textbullet] задаёт свой символ маркера; а для нумерованных \begin{enumerate}[label=\arabic*)] печатает номера в виде «1) 2) 3)» вместо «1. 2. 3.». Доступны и продвинутые трюки: resume продолжает нумерацию прерванного списка после вставленного абзаца, а start=5 начинает отсчёт не с единицы. Всё это гораздо чище ручного переопределения внутренних команд.
Полезно понимать и пространство вокруг списка. Между \item разрешён обычный текст, дополнительные абзацы и даже вложенные окружения — пункт «тянется» до следующего \item или до \end. У enumerate есть удобная пара с командой \label и \ref: пометив пункт, можно потом сослаться на его номер из любого места документа, и при перенумерации ссылка обновится сама. А вот команду \item[...] с явной меткой в квадратных скобках стоит знать для всех трёх типов: в description она задаёт термин, а в itemize/enumerate разово подменяет маркер конкретного пункта — например, поставить «галочку» или прочерк у одного элемента, не трогая остальные.
Частые ошибки
- Текст между
\begin{itemize}и первым\item— ошибка «Something's wrong--perhaps a missing \item». - Незакрытое окружение (
\beginбез\end) — ошибка о незавершённом блоке. - Ручная нумерация пунктов вместо
enumerate— теряется автопересчёт.
Итоги
- Три списка-окружения:
itemize(маркеры),enumerate(номера),description(термины). - Каждый пункт —
\item; нумерация и вид маркеров автоматические. - Списки вкладываются; на разных уровнях метки меняются сами.