Команды без аргументов
Начнем с примера. Пусть вы пишете текст, в котором регулярно встречается математический значок

Часто писать такой длинный набор команд утомительно. Вот бы в LaTeX'е была предусмотрена команда, скажем, \eqdef, генерирующая символ бинарного отношения

После того как TeX прочтет эту строку, он всюду, встречая команду \eqdef, будет реагировать точно так же, как если бы он видел текст \stackrel{\mathrm{def}}{=}. Например, формула

Новая команда TeX'а, которую мы определили, называется макросом (еще говорят: макроопределение, макрокоманда, макро). Рассмотрим точные правила для создания макросов средствами LaTeX'а.
Для создания макросов используется команда \newcommand. Эта команда имеет два обязательных аргумента. Первый из них — имя, которое вы придумали для вашего макроса. Имена макросов должны подчиняться тем же правилам, что имена TeX'овских команд, либо backslash и после него одна не-буква, либо backslash и после него — последовательность букв. Второй обязательный аргумент команды \newcommand, называемый " замещающим текстом", сообщает TeX'у смысл макроса: на этот текст ваш макрос будет замещаться в процессе трансляции (как говорят, макрос будет "разворачиваться").
При пользовании командой \newcommand нельзя в качестве имени макроса выбирать имя уже существующей команды или окружения (если вы попробуете так сделать, LaTeX выдаст сообщение об ошибке).
Во втором аргументе команды \newcommand (иными словами, в "замещающем тексте") вместе с каждой открывающей фигурной скобкой должна присутствовать соответствующая ей закрывающая1), так что определения наподобие
\newcommand{\nachatkursiv}} \newcommand{\konchitkursiv}{}} приведут в лучшем случае к сообщению об ошибке (и желаемого эффекта не дадут). Если вам кажется, что такие ограничения стеснительны, можете изучить по книге [2], как их обходить; для большинства практических целей возможности создания макроопределений, предоставляемые LaTeX'ом, вполне достаточны.
К сожалению, некоторые русификации TeX'а не позволяют использовать в именах макросов русские буквы.
Еще одно ограничение: имя новой команды не должно начинаться на end.
Наконец, в замещающем тексте макроопределения нельзя пользоваться командой \verb или окружением {verbatim}.
Если команда \newcommand дана внутри группы, то смысл определяемой ею новой команды будет забыт TeX'ом по выходе из группы. Если новая команда определяется в преамбуле, то, естественно, она будет понятна TeX'у на протяжении всего документа.
Давайте теперь разберем несколько примеров, обращая внимание на типичные ошибки.
Макросы хороши как средство скорописи. Например, если в вашем тексте часто встречается знак

\newcommand{\btu}{\bigtriangleup} и вы сможете писать формулы наподобие

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

\newcommand{\Pn}{$\mathbf P^n$} Теперь можно писать, например, так:
... пространства~\Pn{} - основной объект... Однако для набора формулы

Причина проста: TeX исправно подставляет вместо \Pn тот "замещающий текст", который вы ему сообщили во втором аргументе команды \newcommand. В результате этого при развертывании макроса \Pn текст $x\in\Pn$ превращается в незаконный текст $x\in$\mathbf P^n$$, в котором математическая формула заканчивается со вторым из знаков доллара, а символ ^ оказывается посреди обычного текста. Чтобы можно было напечатать

\newcommand{\Pn}{\mathbf{P}^n} При этом придется, конечно, ставить знаки доллара вокруг \Pn в тех случаях, когда в тексте встречается просто

Есть, впрочем, и более удачный способ борьбы с этой проблемой: определите\Pn как
\newcommand{\Pn}{\ensuremath{\mathbf{P}^n}} (без всяких знаков доллара) — и вы сможете спокойно пользоваться своей новой командой \Pn как в тексте, так и в формулах:
Пусть \Pn~ — $n$---мерное проективное пространство, а $X\subset \Pn$~ — неприводимое многообразие... (знаки ~ мы поставили, чтобы строчка не смогла начаться с тире —c.103). Команда \ensuremath всегда обрабатывает свой аргумент как математическую формулу, независимо от того, в тексте или в формуле вы ее используете.
Создавать макросы полезно не только для сокращения числа нажатий на клавиши при наборе формул. Вот пример, когда макросы помогают и при наборе обычного текста. Предположим, в нашем тексте много задач, причем условие каждой из задач начинает новый абзац (как обычно и бывает). Предположим также (временно), что эти задачи никак не нумеруются. Слово "Задача", с которого начинается условие, хочется как-то выделить в тексте; предположим, мы решили выделять его жирным шрифтом. Давайте создадим макрос, который будет делать все это за нас, чтобы можно было не печатать каждый раз слово "Задача", а просто написать \z. Первым обычно приходит в голову что-нибудь такое:
\newcommand{\z}{\bfseries Задача} Посмотрите, что из этого выйдет:
![]() | \z. Пять парней за пять дней съели пять окуней. За сколько дней пятнадцать парней съедят пятнадцать окуней? |
p> Почему же жирным шрифтом напечаталось не только слово "Задача", но и весь дальнейший текст? Ответ: TeX опять пунктуально заменил \z на "замещающий текст", в результате чего получилось вот что:
\bfseries Задача. Пять парней ... Команда \bfseries оказалась не внутри группы, и весь текст напечатался жирным шрифтом. Чтобы не попадаться в такую ловушку, надо помнить, что при развертывании макроса фигурные скобки, ограничивающие замещающий текст в команде \newcommand, отбрасываются. Правильнее было бы дать такое определение:
\newcommand{\z}{\bfseries {Задача}}" На сей раз \z будет заменяться на {\bfseries Задача} (отбрасывается внешняя пара фигурных скобок, ограничивающая второй аргумент команды \newcommand, и только она!). А можно (это, пожалуй, даже лучше) написать и так:
newcommand{\z}{\textbf{Задача}} Впрочем, наш макрос \z еще не идеален. Во-первых, после слова, напечатанного жирным шрифтом, точку лучше поставить тоже жирным шрифтом, поэтому разумно и ее включить в макроопределение. Далее, согласно общему правилу игнорирования пробелов после имени команды, состоящего из букв, в тексте при этом нельзя будет написать
\z Пять парней... так как при этом пропадет пробел между словом "Задача." и следующим словом. Можно этот пробел, как водится, всякий раз специально организовывать и писать
\z{} Пять парней... но лучше вставить и пробел прямо в определение:
\newcommand{\z}{\textbf{Задача. }} Теперь запись \z Пять парней... даст то, что нужно. Впрочем, если угодно, вот еще один штрих. Если вы в какой-нибудь момент забудете оставить пустую строку перед очередной задачей, то слово "Задача" при этом будет не начинать абзац, а продолжать предшествующий текст. Чтобы этого раз и навсегда избежать, можно вставить команду "закончить абзац" в наше макроопределение. Как вы помните, эта команда называется \par:
\newcommand{\z}{\par\textbf{Задача. }} Если перед нашим макросом \z пустая строка все-таки будет, то лишняя команда \par ни на что не повлияет, а если ее не будет, то \par сыграет роль недостающей пустой строки.
Если какой-то элемент текста оформлен с помощью макроса, становится удобно менять это оформление. Например, если вдруг понадобилось оформлять все задачи так, чтобы соответствующие абзацы начинались без отступа, достаточно внести небольшое изменение в наше определение команды \z:
\newcommand{\z}{\par\noindent\textbf{Задача. }} Если бы каждую задачу мы оформляли вручную, нам пришлось бы перед каждым словом "Задача" вписывать команду \noindent. В дальнейшем, познакомившись с LaTeX'овскими " счетчиками", мы усовершенствуем наш макрос \z таким образом, чтобы он еще и автоматически нумеровал задачи.
Мы уже говорили, что переопределить значение уже существующей команды с помощью \newcommand невозможно. Иногда, однако, это бывает необходимо. Пример тому приведен в лекции 3 : если мы хотим, чтобы в заголовках глав печаталось именно слово "Глава", а не " Chapter", то необходимо определить по-новому команду \chaptername. Для такого рода целей используется команда \renewcommand. Она устроена точно так же, как \newcommand, с тем отличием, что в качестве ее первого аргумента надо указывать имя уже существующей команды; в этом случае по выполнении команды \newcommand значение этой команды изменится: она превратится в сокращенное обозначение для текста, указанного в качестве ее второго аргумента. Например, если написать
\renewcommand{\alpha}{Ку-ку} то команда \alpha будет генерировать не то, что обычно (букву

Если команда \renewcommand дана внутри группы, то созданное ею переопределение значения команды забудется по выходе из этой группы. Если в качестве первого аргумента команды \renewcommand указать имя несуществующей команды, то вы получите сообщение об ошибке.
Команда \renewcommand при неаккуратном обращении может привести к неприятностям. Дело в том, что нередко команды LaTeX'а определяются в терминах других команд LaTeX'а, причем знать эти сложные связи рядовой пользователь вовсе не обязан.
На практике такое незнание может привести к тому, что безобидное на первый взгляд использование в своих целях имени какой-нибудь команды, которая в вашем тексте ни разу не встречается, вызовет необъяснимо неправильную работу других команд. Поэтому используйте \renewcommand только тогда, когда вы полностью отдаете себе отчет в своих действиях.
Выше мы часто называли макросы просто командами, и это — не просто небрежность речи: на самом деле принципиальной разницы между макросами и TeX'овскими командами почти нет. В частности, почти все команды LaTeX'а, о которых говорилось и еще будет говориться в нашей книге, являются именно макросами; в отличие от макросов, создаваемых нами с помощью \newcommand, их смысл уже известен TeX'у к моменту запуска программы, так что определять их каждый раз не нужно. Макросы, в свою очередь, могут ссылаться на другие макросы (кстати, команда \stackrel, на которую ссылалась наша команда \eqdef, также является макросом) - и так далее, пока не дойдет до так называемых "примитивных команд" TeX'а. Из команд, о которых мы вам рассказывали, примитивными являются считанные единицы: \left, \right, \noindent и некоторые другие.