Tex: подробное описание С. М. Львовский


Глава VII. Создание новых команд


Download 1.51 Mb.
Pdf ko'rish
bet98/143
Sana08.05.2023
Hajmi1.51 Mb.
#1444247
1   ...   94   95   96   97   98   99   100   101   ...   143
Bog'liq
LaTeX-Lvovsky

Глава VII.
Создание новых команд
Средства L
A
TEXа, описываемые в этой главе, позволяют значительно сократить писанину при
верстке сложных текстов. Именно, мы расскажем, как создавать новые команды (или, ес

ли угодно, сокращенные обозначения), заменяющие собой длинные фрагменты из текста и
TEXовских команд. По-ученому такие новые команды называются макроопределениями, а в
разговорной речи
— макросами.
1. Макроопределения
1.1. Команды без аргументов
Начнем с примера. Пусть Вы пишете текст, в котором регулярно встречается математиче

ский значок
def
=
(он означает
«равно по определению»). Пользуясь тем, что Вы узнали из гла
вы
II
, нетрудно понять, что генерируется этот значок внутри математической формулы такой
последовательностью команд:
\stackrel{\rm def}{=}
Часто писать такой длинный набор команд утомительно. Вот бы в L
A
TEXе была предусмотре
на команда, скажем, \eqdef, генерирующая символ бинарного отношения
def
=
! Правда, такой
команды нет, но мы ее можем создать. Для этого следует написать так:
\newcommand{\eqdef}{\stackrel{\rm def}{=}}
После того, как TEX прочтет эту строчку, он всюду, встречая команду \eqdef, будет реаги
ровать точно так же, как если бы он видел текст \stackrel{\rm def}{=}. Например, чтобы
получить формулу x
2 def
= x
· x, теперь достаточно написать
x^2\eqdef x\cdot x
Новая команда TEXа, которую мы определили, называется макросом (синонимы: макро
определение, макрокоманда). Рассмотрим теперь точные правила для создания макросов
средствами L
A
TEXа.
Для создания макросов используется команда \newcommand. Эта команда имеет два обя

зательных аргумента. Первый из них
— имя, которое Вы придумали для Вашего макроса.
Имена макросов должны подчиняться тем же правилам, что имена TEXовских команд (см.
раздел I.2.3): либо backslash и после него одна не-буква, либо backslash и после него
— по
следовательность букв. Второй обязательный аргумент команды \newcommand, называемый
137


VII.1. МАКРООПРЕДЕЛЕНИЯ
138
«замещающим текстом», сообщает TEXу смысл макроса: на этот текст Ваш макрос будет
замещаться в процессе трансляции (как говорят, макрос будет
«разворачиваться»).
При пользовании командой \newcommand нельзя в качестве имени макроса выбирать имя
уже существующей команды. Впрочем, если Вы и попробуете так сделать, L
A
TEX Вам этого
не позволит, выдав сообщение об ошибке. Если Ваша русификация TEXа позволяет исполь
зовать в именах макросов русские буквы, имеет смысл этим воспользоваться: при этом рез

ко снизится вероятность нарваться на запрещенное имя команды, не говоря уж о том, что
русские имена более мнемоничны. Мы в дальнейших примерах также будем использовать
русские буквы в именах макросов.
Если команда \newcommand дана внутри группы, то смысл определяемой ей новой коман

ды будет забыт TEXом по выходе из группы. Если новая команда определяется в преамбуле,
то, естественно, она будет понятна TEXу на протяжении всего документа.
В
«замещающем тексте» макроопределения не должно присутствовать команд \newcommand
(или \renewcommand, о которых пойдет речь ниже)
1
. И еще одно ограничение, которое надо
иметь в виду, создавая новые команды (макросы): во втором параметре команды \newcommand
(иными словами, в
«замещающем тексте») вместе с каждой открывающей фигурной скобкой
должна присутствовать соответствующая ей закрывающая
2
:
«несбалансированных» фигур
ных скобок в замещающем тексте быть не должно, так что макроопределения наподобие
\newcommand{\NAˆATXKURSIW}{{\it}
\newcommand{\KONˆITXKURSIW}{}}
являются незаконными и приведут лишь к сообщению об ошибке. Если Вам кажется, что та

кие ограничения стеснительны, можете изучить по книге [
2
], как их обходить; учтите, однако,
что тогда Вам придется стать TEXником. Для большинства практических целей возможности
по созданию макроопределений, предоставляемые L
A
TEXом, вполне достаточны.
Еще одно ограничение: в замещающем тексте макрооопределения нельзя пользоваться коман

дой \verb или окружением verbatim.
Давайте теперь разберем несколько примеров, обращая внимание на типичные ошибки.
Макросы хороши как средство скорописи, если Вам приходится сталкиваться со сложными
наборами TEXовских команд в математических формулах. Их можно использовать и для со
всем бесхитростных целей. Например, если в Вашем тексте часто встречается знак
4, то Вам
может надоесть все время писать длинную команду \bigtriangleup. Коли так, придумайте
сокращенное обозначение (скажем, \btu), напишите в преамбуле
\newcommand{\btu}{\bigtriangleup}
и Вы сможете писать формулы наподобие
(A
4B)∩C = (A∩C)4(B ∩C)
$(A\btu B)\cap C=
(A\cap C)\btu (B\cap C)$
На стр.
32
было рассказано, что делать, чтобы создать согласующееся с нашими тради

циями обозначение для функции тангенс. Теперь мы понимаем, что это был пример макро

определения (если Вам интересно знать, что значит команда \mathop в замещающем тексте,
загляните в раздел II.4.4).
1
Если Вы понимаете, к ´ак можно было бы использовать такие экзотические макроопределения для дела, то
Вам воистину пора читать TEXbook.
2
Фигурные скобки, входящие в состав команд \{ и \}, в счет при этом не идут


VII.1. МАКРООПРЕДЕЛЕНИЯ
139
А вот пример, когда макрос заменяет длинную и сложную комбинацию из TEXовских ко
манд (в этом примере мы предполагаем, что читатель знаком с содержанием раздела II.4.4).
Итак, на стр.
57
мы объясняли, как получить формулу E

6=
F
, где

6=
— символ бинарного
отношения. Давайте создадим для этого символа специальную команду. Придумаем для нее
имя, скажем, \subsetne (по аналогии с \subseteq) и запишем в преамбуле:
\newcommand{\subsetne}{\mathrel
{\mathop{\subset}\limits_{\ne}}}
Теперь для получения формулы E

6=
F
достаточно написать просто E\subsetne F.
В последних разделах главы
II
Вы найдете массу других примеров громоздких конструк

ций, для которых имеет смысл создать макросы. Практически польза от макроса начинает
ощущаться, если конструкция, которую он заменяет, встречается в тексте не меньше четы

рех-пяти раз.
А вот пример типичной ошибки. Пусть в тексте, который Вы набираете, регулярно встре

чаются фразы наподобие
Подмногообразия проективного пространства P
n
— основной объект изучения
алгебраической геометрии.
и пусть для сокращения письма Вы написали в преамбуле
\newcommand{\Pn}{${\bf P}^n$}
Теперь можно писать, например, так:
... PROSTRANSTWA~\Pn{} --- OSNOWNOJ OB˙EKT...
Однако для набора формулы x
∈ P
n
написать $x\in\Pn$ не удастся: появится сообщение
о том, что символ ^ преступно употреблен вне математической формулы. Удивительного в
этом нет: TEX старательно подставляет вместо \Pn тот «замещающий текст», который Вы
ему сообщили во втором аргументе команды \newcommand. В результате этого при разверты

вании макроса \Pn текст $x\in\Pn$ превращается в незаконный текст $x\in ${\bf P}^n$$ ,
в котором математическая формула заканчивается со вторым из знаков доллара, а символ ^
оказывается посреди обычного текста. Чтобы можно было напечатать P
n
не только изоли

рованно, не надо включать знаки доллара в определение:
\newcommand{\Pn}{{\bf P}^n}
При этом придется, конечно, ставить знаки доллара вокруг \Pn в тех случаях, когда в тексте
встречается просто P
n
, но зато наш макрос можно будет использовать и как составную часть
более сложных формул.
Создавать макросы полезно не только для сокращения числа нажатий на клавиши при
наборе формул. Вот пример, когда макросы помогают и при наборе обычного текста. Предпо

ложим, в нашем тексте много задач, причем условие каждой из задач начинает новый абзац
(как обычно и бывает). Предположим также, что эти задачи никак не нумеруются (это пред

положение, в отличие от предыдущего, малореалистично, но оно сделано только для просто

ты и временно; в дальнейшем мы узнаем, как сделать так, чтоб L
A
TEX сам нумеровал задачи
для нас). Слово
«Задача», с которого начинается условие, хочется как-то выделить в тек
сте; предположим, мы решили выделять его жирным шрифтом. Давайте создадим макрос,
который будет делать все это за нас, чтобы можно было не печатать каждый раз {\bf... , а
просто написать \z. Первым обычно приходит в голову что-нибудь такое:


VII.1. МАКРООПРЕДЕЛЕНИЯ
140
\newcommand{\z}{\bf zADAˆA}
Посмотрите, что из этого выйдет:

Download 1.51 Mb.

Do'stlaringiz bilan baham:
1   ...   94   95   96   97   98   99   100   101   ...   143




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling