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

         

Команды с аргументами - часть 2


При развертывании макроса на место его и его аргументов будет подставлен " замещающий текст", в котором вместо "#1" всюду стоит первый аргумент, вместо "#2" — второй аргумент и т.д.

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

\newcommand{\shuffle}[4]{К#4к#2#1л}

Тогда будет получаться, например, такое:

 \parindent=0cm \newcommand{\shuffle}[4]{К#4к#2#1л}\shuffle{ди}{о}{го}{ро} Гена и его друзья.
\shuffle{ди}{о}{го}{ро} Гена и его друзья.

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

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

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

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

Как мы уже отмечали на с. \pageref{units}, ...

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

\newcommand{\str}[1]{стр. \pageref{#1}}

и ссылки на страницы стало возможно оформлять так:

Как мы уже отмечали на \str{units}, ...

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




Содержание  Назад  Вперед