Работа в системе LaTeX
de301fb4

Окружения list и trivlist


Все LaTeX'овские перечни являются на самом деле частными случаями одной общей конструкции — окружения list. Рассмотрим, как это окружение работает.

Окружение list имеет два обязательных аргумента. Общий вид этого окружения в исходном тексте будет такой:

\begin{list}{заголовок\_по\_умолчанию}{команды} ... \end{list}

Аргументы окружения list означают следующее. "Заголовок по умолчанию — это заголовок элемента перечня, печатающийся в том случае, когда этот элемент перечня вводится командой \item без аргумента. Пример:

\begin{list}{И какой-то}{} \item малыш показал ему шиш. \item барбос укусил его в нос. Нехороший барбос, невоспитанный! \end{list}

Аргумент команды окружения list содержит те команды, которые будут исполнены после входа в перечень. Поэтому в нем можно задать команды, присваивающие новые значения параметрам оформления перечня (в частности, отбивкам, описанным в лекции 5: эти команды будут выполнены после команды \@list..., выполняющейся при входе в перечень). Кроме этого, во втором аргументе окружения list можно поместить команду \usecounter. Эта последняя требует одного обязательного аргумента — имени счетчика (счетчик должен быть определен). Если \usecounter присутствует во втором аргументе окружения list, то при входе в окружение значение счетчика, являющегося аргументом \usecounter, будет установлено в нуль, а каждая команда \item без аргумента будет увеличивать его на единицу с помощью \refstepcounter (так что на значения этого счетчика можно будет ссылаться с помощью \label и \ref). Вот пример c \usecounter (подразумевается, что у нас определен счетчик tmp):

Вот как выглядят первые буквы латинского алфавита: \begin{list}{\Alph{tmp}:}% {\usecounter{tmp}} \item Выглядит так же, как соответствующая русская буква, и читается так же. \item Читается не так, как похожая на нее русская буква. \item И с ней та же история. \end{list}

Чтобы заголовки элементов перечня выравнивались по левому краю, а не по правому, можно завершить "заголовок по умолчанию" командой \hfill; чтобы по левому краю выравнивались заголовки, заданные в явном виде в необязательном аргументе команд \item, нужно завершить командой \hfill этот необязательный аргумент.


Окружением list разумно пользоваться не непосредственно, как в приведенных примерах, а для определения нового окружения с помощью \newenvironment. Вот, например, как в стандарте определяется окружение {quote}:

\newenvironment{\quote}% {\begin{list}{}{\rightmargin=\leftmargin}\item[]}}% {\end{list}} Команда \item с пустым аргументом необходима, поскольку до команды \item в перечне не должно быть никакого текста.

Наряду с окружением list в LaTeX'е определен его важный частный случай — окружение trivlist. Его отличия от list таковы:

  • это окружение не требует аргументов (так же, как и все окружения для создания перечней, с которыми мы имели дело раньше);
  • \leftmargin, \labelwidth и \itemindent для него всегда равны нулю (стало быть, текст печатается без втяжки); \parsep равно \parskip;
  • команда \item, употребленная внутри этого окружения, обязана иметь аргумент (хотя бы пустой).
Как видите, многие возможности перечней в этом окружении не работают, но сохраняются такие важные черты, как \topsep (дополнительный интервал перед и после) плюс обычное свойство первой строки после перечня: она делается без абзацного отступа тогда и только тогда, когда после окружения в исходном тексте не оставлено пустой строки. Окружение trivlist также применяют обычно не само по себе, а для определения новых окружений; при этом в "открывающие команды" \newenvironment добавляют команду \item[], а внутри окружения \item вообще не используют. Иногда используют и \item с аргументом (пример тому вы увидите ниже, в лекции 8).

Окружения list можно вкладывать друг в друга; максимальная глубина вложенности равна шести. В окружениях наподобие {itemize} предусмотрен "ограничитель", снижающий эту макимальную глубину до четырех. В личном стилевом файле, не рассчитанном на общее пользование, предусматривать такой ограничитель большого смысла нет: просто следите за тем, чтобы не вкладывать слишком много list'ов друг в друга.


Содержание раздела