Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 12
Текст из файла (страница 12)
Пробелы послеимени команды игнорируются. LATEX различает строчные и прописные буквы,поэтому \Omega и \omega есть прописная (Ω) и строчная (ω) буквы греческогоалфавита.Некоторые команды имеют особую *-форму, когда за именем команды стоитзнак * («звёздочка»). Пример такой команды имеется в следующем разделе.2.2.АргументыНекоторые команды имеют только один и только необязательный аргумент.
С одной такой командой Читатель уже знаком, хотя мы и не упоминали, что у \\ может быть аргумент. Если команда \\ просто начинает новую строку, то \\[2mm]ещё и увеличивает расстояние до новой строки на 2 миллиметра:альфа\\[2mm] бета\\ гаммаальфабетагаммаЕсли необязательный аргумент у такой команды опущен, а следующий отличныйот пробела символ есть [, то LATEX ошибочно примет эту квадратную скобку заначало необязательного аргумента.
Чтобы избежать этой редкой ошибки, символ[ достаточно заключить в фигурные скобки. В следующем примере слово [2mm]не является больше частью команды \\ и поэтому напечатано во второй строкеправой колонки, показывающей результат работы компилятора:альфа\\{[2mm]} бета\\ гаммаальфа[2mm] бетагаммаСреди команд, обладающих *-формой, некоторые (в их числе всё та же команда \\) не имеют обязательных аргументов. Чтобы отличить команду \\, закоторой следует текст, начинающийся со *, от команды \\*, звёздочку нужнозаключить в фигурные скобки:альфа\\* бета\\{*} гаммаальфабета* гаммаВ этом примере команда \\*, как и \\, создаёт новую строку, однако препятствует её переносу на следующую страницу (раздел 4.4).
Поэтому первая звёздочкав левой колонке является частью имени команды \\*, а вторая — частью текста,следующего за \\.50Глава 2. Команды и процедуры2.3.Командные скобки и процедурыПроцедура4 начинается с командной скобки \begin и закрывается команднойскобкой \end:\begin{env}...\end{env}Многоточие здесь символизирует тело процедуры. Аргумент env есть имя процедуры. Команда \begin может иметь дополнительные аргументы. Например,процедура tabular описана в главе 12 как\begin{tabular}[pos]{col}...\end{tabular}Она имеет необязательный аргумент pos и обязательный col. Если процедураимеет *-форму, звёздочка присоединяется к имени процедуры, а не к команде\begin. Например:\begin{table*}...\end{table*}где table* — процедура, описанная в главе 11.Процедуры могут быть вложены друг в друга. Иными словами, каждой открывающей командной скобке \begin{env1} должна соответствовать закрывающая командная скобка \end{env1}, и если внутри процедуры env1 имеется другая процедура env2, то её тело должно целиком находиться внутри тела первойпроцедуры.
Следовательно, чередование командных скобок должно быть следующим:\begin{env1}... \begin{env2} ... \end{env2} ...\end{env1}2.4.ГруппированиеВсякий раз, когда фрагмент исходного текста рассматривается как единый блок,нужно пометить его начало и конец. Для этой цели LATEX резервирует два символа группирования — фигурные скобки: { и }. Фигурным скобкам LATEX отводитособую роль. Можно было бы сказать, что фигурные скобки — это команды,но, строго говоря, это не совсем верно (см. главу 7 в [2]). Знаток TEX’а мог быназначить другие символы на роль фигурных скобок, но последние вполне справляются со своей задачей.Читатель уже имел возможность видеть во вводной главе, что изменениешрифта внутри блока не влияет на шрифт за его пределами.
Позже мы покажем,В книгах [12–14] употребляется термин «окружение», являющийся буквальным переводомслова environment, используемого в англоязычной литературе. В компьютерной литературезакрепился термин environment variable (переменная окружения), который имеет совершенно иной смысл, нежели термин procedure (процедура), более всего соответствующий понятиюenvironment в языке разметки LATEX.4512.5.
Декларациичто если определить новую команду внутри какого-нибудь блока, то её определение исчезает там, где блок заканчивается. Таким способом можно заставитьLATEX сделать что-то необычное, заменив его стандартные установки внутри блока. Поскольку определение невидимо снаружи, не нужно беспокоиться, что оноизменит остальную часть текста.Иногда, даже когда не нужно заботиться о структуре блока, полезно применять группирование просто для улучшения контроля за пробелами. Рассмотрим,к примеру, команду \LaTeX, которая печатает логос LATEX.
Мы отмечали в разделе 1.5.3, что пробел после команды-логоса исчезает, так как является всего лишьпризнаком конца команды. Чтобы вставить неудаляемый пробел, предлагалосьиспользовать команду \␣ после логоса: \LaTeX\␣. Однако неверным будет выражение \LaTeX\, если следующий символ не является пробелом. Если Читательпопробует написать, что он уже знаток \LaTeX\а, то получит от LATEX’а «неуд».Верное решение даёт простой блок:{\LaTeX}Тогда не имеет значения, будет следующий символ пробелом или нет. Другойпростой способ — добавить пустой блок после команды:\LaTeX{}Пустой блок {} (даже без пробела внутри) не производит никакого печатноготекста, но он предотвращает удаление пробелов, выполняя роль признака концакоманды.2.5.ДекларацииКоманда, которая изменяет значение или смысл параметра или другой команды, является декларацией.
В отличие от обычной команды декларация ничего непроизводит в печатном документе и поэтому может располагаться в преамбулевходного файла. Область действия декларации начинается от места её появления и заканчивается закрывающей фигурной скобкой }, которая соответствуетближайшей открывающей скобке { перед декларацией. Декларация может бытьотменена другой декларацией, действие которой противоречит действию первой.В следующем примере \itshape, \scshape и \slshape декларируют переход кшрифтам с разным начертанием, не меняя их насыщенность, гарнитуру или размер:text1 {text2 \itshape text3{text4} \scshape text5{\slshape text6} text7} text8text1 text2 text3 text4 text5 text6text7 text8Декларация \itshape отменяется декларацией \scshape, а та — декларацией\slshape, которая, в свою очередь, действует только до ближайшей закрывающей фигурной скобки.52Глава 2.
Команды и процедурыКомандные скобки \begin{env} и \end{env} ограничивают область действиядеклараций так же, как это делают фигурные скобки. В следующем примередекларация \em действует только внутри тела процедуры quote, описанной вразделе 5.2:Этот текст предшествуетпроцедуре \texttt{quote}:\begin{quote}\em Это тело процедуры.\end{quote} Этот текст следуетза процедурой.Этот текст предшествует процедуреquote:Это тело процедуры.Этот текст следует за процедурой.Декларации, находящиеся в аргументах команд LATEX’а, действуют только впределах этих аргументов. Иными словами, скобки } и ], закрывающие аргументы команд, закрывают и область действия деклараций.
Однако это не относится к командам, созданным самим Читателем при помощи \newcommand и\renewcommand (глава 7). При необходимости область действия деклараций в аргументах таких команд следует ограничивать дополнительными фигурными иликомандными скобками.Следующие декларации, описанные в разных частях этой книги, являютсяглобальными:\newcounter\setcounter\addtocounter\hyphenation\pagenumbering\thispagestyle\pagecolor\newlength\newsavebox\newtheoremОбласть их действия не ограничивается никакими фигурными или команднымискобками.2.6.Невидимые командыНекоторые команды и процедуры не производят никакого текста в том месте, гдеони стоят.
LATEX рассматривает такую «невидимую» команду в середине абзацакак невидимый текст.Вставка пробела или признака конца строки одновременно до и после невидимого слова может создать удвоенный пробел между видимыми словами. Так, впримере на странице 30 между словами «используют курсив» образовался удвоенный пробел из-за наличия пробелов до и после команды \begin{em}. В данномслучае пробел после {em} не является признаком конца имени команды (оно заканчивается фигурной скобкой) и поэтому не удаляется LATEX’ом.
Для командбез аргументов проблемы с пробелами возникают редко, так как следующий заименем команды пробел игнорируется. Перечисленные ниже невидимые командыи процедуры, имеющие аргументы, также удаляют следующий за ними пробел,если имеется пробел перед ними:532.7. Хрупкие команды\pagebreak\nopagebreak\label\linebreak\nolinebreak\index\vspace\marginpar\glossary\colorfiguretableЛюбые другие невидимые команды с аргументами, появляющиеся внутри абзаца,должны быть присоединены непосредственно к предыдущему слову. Полезно следовать этому правилу всегда, чтобы не задумываться о возможных нестандартных ситуациях, когда вышеперечисленные команды и процедуры могут удвоитьпробел.
В сложных случаях можно использовать команду\ignorespacesОна удаляет все пробелы, следующие за ней:абра\ignorespaces2.7.кадабраабракадабраХрупкие командыВ первой главе мы уже отмечали, что LATEX может переносить аргументы однихкоманд в аргументы других команд.
Аргументы, которые куда-либо передаются,называются подвижными. Над командой, находящейся в подвижном аргументе,LATEX проделывает ряд операций, которые могут расстроить механизм её работы.Команды, поддающиеся расстройке, называются хрупкими в отличие от устойчивых команд, которым ничего не страшно. Например, команды \begin, \end,\footnote являются хрупкими, а декларации и команды переключения шрифтатипа \Large, \bfseries, \textbf — устойчивыми.Хрупкой команде, помещённой в подвижном аргументе, должна предшествовать команда\protectОна действует только на следующую за ней команду, которую не нужно заключать в фигурные скобки:\protect\begin ...Хороший пример с \protect придумать трудно, так как обычно хрупким командам нечего делать в подвижных аргументах других команд.
Все нижеследующиекоманды и процедуры имеют подвижные аргументы.• Команды, аргументы которых могут быть вставлены в оглавление, список рисунков и таблиц, как-то: команды секционирования типа \chapter,\section и т. д. (раздел 3.5); команды \addcontentsline и \addtocontents,записывающие информацию в служебные файлы (раздел 3.10); \caption,формирующая подписи к рисункам и таблицам (глава 11). Если необязательный аргумент используется с \caption или с командами секционирования, то именно он является подвижным.54Глава 2.