Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 27
Текст из файла (страница 27)
Перед выполнением деклараций в decls выполняется однаиз команд \@listi, \@listii, \@listiii, \@listiv в зависимости от того, сколько перед этим было вложений. Эти команды определяются классом печатногодокумента. Они устанавливают значения деклараций по умолчанию. Явное использование какой-либо декларации в decls, таким образом, переопределяет еёзначение.
Все декларации, которые могут появляться в decls, перечислены нижеи показаны на рис. 5.1, иллюстрирующем расположение записей на странице. Всевертикальные размеры — растяжимые длины, а горизонтальные — нерастяжимые (раздел 2.10).\topsep — величина вертикального пробела (дополнительно к обычному пробелу между абзацами \parskip, см. раздел 17.2), который вставляется междупредшествующим текстом и первой записью списка, а также между последнейзаписью и последующим текстом.
Значение по умолчанию устанавливаетсякомандой \@listcmd соответствующего уровня, то есть \@listi, \@listii,\@listiii или \@listiv.122Глава 5. Форматирование абзацевПредшествующий абзац6\topsep + \parskip [+ \partopsep]?\itemindentМеткаЗапись 1Абзац 1\labelwidth\listparindent -6\parsep?Запись 1Абзац 26\itemsep + \parsep?\labelsepМеткаЗапись 2\leftmargin \rightmargin\topsep + \parskip [+ \partopsep]?6Последующий абзацРис. 5.1. Формат списка\partopsep — дополнительный вертикальный пробел (в дополнение к \topsep+\parskip), который вставляется между предшествующим текстом и первымпунктом списка, если перед процедурой стоит пустая строка, или между последним пунктом и последующим текстом, если имеется пустая строка послепроцедуры.
Значение по умолчанию устанавливается командой \@listcmd.\parsep — величина вертикального пробела между абзацами в записи, к которому приравнивается \parskip (раздел 17.2) внутри списка. Значение поумолчанию устанавливается командой \@listcmd.\itemsep — величина дополнительного вертикального пробела (в дополнениек \parsep), вставляемая между последовательными записями в списке. Значение по умолчанию устанавливается командой \@listcmd.\leftmargin — горизонтальное расстояние между левыми границами списка ивнешнего текста. Оно должно быть неотрицательным.
В стандартных классахпечатных документов \leftmargin приравнивается к \leftmargini командой5.4. Списки123\@listi, к \leftmarginii — командой \@listii и т. д.\rightmargin — горизонтальное расстояние между правыми границами списка и внешнего текста. Оно должно быть неотрицательным. Значение по умолчанию равно нулю, если не установлено командой \@listcmd.\listparindent — величина дополнительного отступа, добавляемая к первойстроке каждого абзаца, за исключением первой строки пункта.
Может иметьотрицательное значение. Значение по умолчанию равно нулю, если не установлено командой \@listcmd.\itemindent — величина дополнительного отступа, добавляемая к каждой записи перед меткой. Может иметь отрицательное значение. По умолчанию равна нулю, если не установлена командой \@listcmd.\labelsep — расстояние между боксом, содержащим метку, и текстом записи.Может иметь отрицательное значение. В печатном документе стандартногокласса не изменяется командами \@listcmd, чтобы обеспечить одно и то жезначение для всех уровней вложенности.\labelwidth — ширина бокса, содержащего метку; должна быть неотрицательной. Команда \@listcmd соответствующего уровня приравнивает её к\leftmargincmd − \labelsep, так что левый край бокса метки выравнивается по левой границе внешнего текста. Если ширина метки больше, чем\labelwidth, то бокс расширяется до ширины метки.\makelabel{mark} — команда, формирующая метку, которая будет напечатана командой \item при наличии у неё необязательного аргумента [mark].Если команда \makelabel не переопределена в \@listcmd, то метка по умолчанию сдвигается к правому краю бокса.
Команда \makelabel может бытьпереопределена командой \renewcommand.В decls в дополнение к вышеперечисленным может появиться следующая декларация:\usecounter{ctr} указывает счётчик ctr (глава 7), который будет использован для нумерации записей. Обычно новый счётчик определяется командой\newcounter, при этом его значение инициализируется нулем и наращиваетсякомандой \refstepcounter при выполнении каждой команды \item, не имеющей необязательного аргумента. Одновременно значение счётчика назначается текущим ref-значением для организации перекрёстного цитирования(раздел 3.7).В заключение приведём пример, показывающий, как определить список пронумерованных записей.124Глава 5.
Форматирование абзацев\newcounter{N}...текст, предшествующий списку.\begin{list}{\#\arabic{N}}{\usecounter{N}}\item Это первая запись списка. Обратитевнимание на правую границу списка.\item Это вторая запись.\end{list}. . . текст, предшествующий списку.#1 Это первая запись списка.Обратите внимание на правую границу списка.#2 Это вторая запись.Процедура\begin{trivlist} item-list \end{trivlist}действует подобно процедуре list, используя текущие значения деклараций,управляющих списком, за исключением того, что \parsep приравнивается к текущему значению \parskip (а не наоборот, как в процедуре list), а \leftmargin,\labelwidth, \itemindent приравниваются к нулю. Команды \@listcmd не выполняются.Каждая команда \item в item-list должна иметь необязательный аргумент.Процедура trivlist обычно используется при создании процедур, состоящих изодной записи, с командой \item[], появляющейся как часть определения процедуры.
Например, процедура center определена как\begin{trivlist}\centering\item[] ... \end{trivlist}5.5.Неформатированный текстПроцедуры\begin{verbatim}\begin{verbatim*}......\end{verbatim}\end{verbatim*}печатают текст в точности так, как он записан во входном файле, включая пробелы, специальные символы и команды. При этом команды не исполняются, заисключением \end{verbatim} или \end{verbatim*}, которые завершают исполнение процедур.
В печатном документе соответствующая часть входного файлабудет напечатана прямым машинописным шрифтом:\begin{verbatim}Добро пожаловать в {#}%љ&$_^~!Выражайтесь яснее, \TeX{}перт!\end{verbatim}Добро пожаловать в {#}%љ&$_^~!Выражайтесь яснее, \TeX{}перт!Процедура verbatim* отличается от verbatim тем, что пробел печатается каксимвол ␣.
Процедуры verbatim и verbatim* не должны появляться в аргументахлюбых команд, а между \end и {verbatim*} или {verbatim} не должно бытьпробела.1255.6. Расширенные процедуры форматированияКоманды\verbctextc\verb*ctextcдействуют аналогично процедурам verbatim и verbatim*, но используются дляпечати небольших фрагментов текста внутри абзацев. Здесь c — любой символ (исключая пробел и звёздочку), который отсутствует в text, а text — любаяпоследовательность символов, не содержащая c (а также невидимого символаконца строки). В печатном документе text будет воспроизведен машинописнымшрифтом.
Как и процедура verbatim*, команда \verb* печатает пробел символом ␣:Команда \␣ вставляет принудительный пробел.Команда \verb*"\ " вставляетпринудительный пробел.Команды \verb и \verb* также не должны появляться в аргументах любых других команд.5.6.Расширенные процедуры форматированияВозможности рассмотренных выше процедур форматирования абзацев расширяются при загрузке дополнительных пакетов. Напомним, что соответствующиепакеты должны быть загружены в преамбуле командой \usepackage.5.6.1.Пакет enumerateПакет enumerate из коллекции tools переопределяет одноимённую процедуру, упрощая способ изменения формата меток записей, который теперь можно указать вопции процедуры:\begin{enumerate}[marks]item-list\end{enumerate}(enumerate)Опция marks специфицирует формат меток записей.
Она может содержать одиниз символов A, a, I, i или 1, которые отвечают представлению счётчика ctr, нумерующего записи, соответственно при помощи команд \Alph{ctr}, \alph{ctr},\Roman{ctr}, \roman{ctr} или \arabic{ctr}. Более того, marks может содержатьлюбые другие символы или команды LATEX’а, допустимые в необязательном аргументе команды \item; однако символы A, a, I, i и 1 должны быть окруженыфигурными скобками, если их не следует интерпретировать как представлениесчётчика. Следующий пример показывает, как оформить процедуру enumerate сопцией и создать перекрёстные ссылки на её записи.\begin{enumerate}[{A}I.]\item Первая запись первого уровня.\item Вторая запись первого уровня.\begin{enumerate}[Абзац a)]\label{La}126Глава 5. Форматирование абзацев\item Первая запись второго уровня.\item Вторая запись второго уровня.\label{Lb}\end{enumerate}\begin{enumerate}[Абзац a]\renewcommand{\alph}[1]{\asbuk{#1}}\item Первая запись второго списка.\item Вторая запись второго списка.\label{Lc}\end{enumerate}\end{enumerate}Здесь помечены записи: \ref{La}, \ref{Lb}, \ref{Lc}.И вот что из этого должно получиться:AI.
Первая запись первого уровня.AII. Вторая запись первого уровня.Абзац a) Первая запись второго уровня.Абзац b) Вторая запись второго уровня.Абзац а) Первая запись второго списка.Абзац б) Вторая запись второго списка.Здесь помечены записи II, IIb, IIб.Существенно, что команда \ref, печатающая ссылки, использует только заданное символами A, a, I, i, 1 представление счётчика, не обращая внимание на другие «украшения» в необязательном аргументе процедуры enumerate, в том числена идентичные латинским по начертанию русские буквы А и а, как в слове «Абзац». Обратите внимание, как мы подменили латинские буквы русскими во втором списке, заменив команду \alph командой \asbuk при помощи \renewcommand.Поскольку подмена произведена внутри тела процедуры enumerate, сразу вследза \begin{enumerate}, то после \end{enumerate} команда \alph вновь будет печатать буквы латинского алфавита, как ей и положено.5.6.2.Пакет allttПакет alltt, поставляемый вместе с LATEX’ом, вводит одноимённую процедуру:\begin{alltt}...\end{alltt}(alltt)Она очень похожа на процедуру verbatim, но в ней \, {, } сохраняют своё обычноезначение.