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

       

Команды с аргументами


Мы уже научились создавать новые команды, не требующие аргументов. Но мы хорошо знаем, что многие LaTeX'овские команды принимают аргументы, и часто возникает потребность создать новую команду с такими возможностями. Пусть, например, в вашем тексте часто встречается "символ Лежандра", выглядящий так:

. Для получения этого символа в исходном тексте надо написать (внутри формулы, естественно) так:

\left(\frac{a}{l}\right)

Хорошо бы создать команду \smb с двумя аргументами, чтобы можно было написать в формуле "\smb{a}{l}" и получить на печати

. Что ж, LaTeX предоставляет нам возможность сделать и это. Для создания команды с аргументами используется все та же команда \newcommand, но с необязательным аргументом2). Посмотрите, как можно определить команду \smb:

\newcommand{\smb}[2]{\left(\frac{#1}{#2}\right)}

Разберем, что означает эта запись. В квадратных скобках стоит количество аргументов в нашем макросе (в нашем случае 2). Далее, в самом "замещающем тексте" появились значки "#1" и "#2" . При развертывании макроса на их место будут подставляться соответственно первый и второй аргументы нашей новой команды \smb. Например, если в формуле написать

\smb{a+b}{c}

то будет напечатано

.

Теперь рассмотрим точные правила. Необязательный аргумент команды \newcommand, который должен быть расположен между двумя обязательными, указывает, сколько аргументов будет требовать создаваемая вами команда (макрос). Это количество аргументов не может быть более 9. В "замещающем тексте" места, на которые при развертывании макроса будут подставляться аргументы, обозначаются символами "#1" для первого аргумента, "#2" для второго аргумента и т.д. Эти символы могут идти в любом порядке и присутствовать любое количество раз (в том числе и ни разу). Когда мы будем использовать нашу новую команду в тексте, после ее имени в фигурных скобках должны будут следовать аргументы, ровно в том количестве и в том порядке, который мы указывали в необязательном аргументе команды \newcommand, каждый — в своей паре фигурных скобок (как обязательные аргументы любой другой LaTeX'овской команды).
При развертывании макроса на место его и его аргументов будет подставлен " замещающий текст", в котором вместо "#1" всюду стоит первый аргумент, вместо "#2" — второй аргумент и т.д.

Проиллюстрируем все сказанное примером. Пусть мы определили команду \shuffle следующим образом:

\newcommand{\shuffle}[4]{К#4к#2#1л} Тогда будет получаться, например, такое:

\shuffle{ди}{о}{го}{ро} Гена и его друзья.
В самом деле, первым аргументом команды \shuffle будет ди, вторым о, третьим го, четвертым ро; при развертывании появится сначала буква К, затем четвертый аргумент, затем буква к, затем второй, первый и наконец буква л — как если бы слово Крокодил присутствовало в исходном тексте.

Ни аргументы LaTeX'овских команд (в том числе и определенных вами), ни "замещающий текст" в \newcommand не должны содержать "несбалансированных" (не имеющих пары) фигурных скобок (это не относится к \{ и \}).

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

Приведем еще один пример практически полезного макроса с аргументами. При написании этой книги автор широко пользовался ссылками на страницу, автоматически генерируемыми с помощью команды \pageref. Например, если какое-то место в тексте было помечено с помощью команды \label{units}, то ссылка на соответствующую страницу выглядела так:

Как мы уже отмечали на с. \pageref{units}, ... После первого десятка таких ссылок возникает желание сократить число нажатий на клавиши. В результате в преамбуле появилась строка

\newcommand{\str}[1]{стр. \pageref{#1}} и ссылки на страницы стало возможно оформлять так:

Как мы уже отмечали на \str{units}, ... (Автор вначале не знал, что надо писать "с.", а не " стр.", но мгновенно исправился, всего лишь удалив две буквы из определения команды \str!)


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







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий