Spec-Zone.ru › LaTeX

\newcommand & \renewcommand

Синопсисы, один из (трёх обычных форм, трёх форм с звёздочкой):

\newcommand{\cmd}{defn}
\newcommand{\cmd}[nargs]{defn}
\newcommand{\cmd}[nargs][optargdefault]{defn}
\newcommand*{\cmd}{defn}
\newcommand*{\cmd}[nargs]{defn}
\newcommand*{\cmd}[nargs][optargdefault]{defn}

или все те же возможности с \renewcommand вместо \newcommand:

\renewcommand{\cmd}{defn}
\renewcommand{\cmd}[nargs]{defn}
\renewcommand{\cmd}[nargs][optargdefault]{defn}
\renewcommand*{\cmd}{defn}
\renewcommand*{\cmd}[nargs]{defn}
\renewcommand*{\cmd}[nargs][optargdefault]{defn}

Определите или переопределите команду (см. также \DeclareRobustCommand в Команды классов и пакетов).

Звёздная форма этих двух запрещает аргументам содержать несколько абзацев текста (в терминах простого TeX: команды не \long). В стандартной форме аргументы могут быть многострочными.

Это параметры (примеры следуют):

cmd

Обязательно; \cmd - это имя команды. Оно должно начинаться с обратной косой черты, \, и не должно начинаться с четырёхсимвольной строки \end. Для \newcommand, оно не должно быть уже определено. Для \renewcommand, это имя должно быть уже определено.

nargs

Необязательно; целое число от 0 до 9, определяющее количество аргументов, которые принимает команда, включая любой необязательный аргумент. Пропуск этого аргумента эквивалентен указанию 0, что означает, что команда не имеет аргументов. Если вы переопределяете команду, новая версия может иметь другое количество аргументов, чем старая.

optargdefault ¶

Необязательно; если этот аргумент присутствует, то первый аргумент \cmd является необязательным, со значением по умолчанию optargdefault (которое может быть пустой строкой). Если optargdefault отсутствует, то \cmd не принимает необязательный аргумент.

То есть, если \cmd вызывается со следующим аргументом в квадратных скобках, как в \cmd[optval]{...}..., то внутри defn параметр #1 устанавливается в optval. С другой стороны, если \cmd вызывается без последующих квадратных скобок, то внутри defn параметр #1 устанавливается в optargdefault. В любом случае, обязательные аргументы начинаются с #2.

Пропуск [optargdefault] из определения совершенно отличается от ввода квадратных скобок с пустым содержимым, как в []. Первое указывает, что определяемая команда не принимает необязательный аргумент, поэтому #1 является первым обязательным аргументом (если nargs ≥ 1); последнее устанавливает необязательный аргумент #1 в пустую строку в качестве значения по умолчанию, если необязательный аргумент не был указан в вызове.

Аналогично, пропуск [optval] из вызова также совершенно отличается от ввода квадратных скобок с пустым содержимым. Первое устанавливает #1 в значение optval (предполагая, что команда была определена как принимающая необязательный аргумент); последнее устанавливает #1 в пустую строку, так же как и с любым другим значением.

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

defn ¶

Обязательно; текст, который должен быть заменён при каждом вхождении \cmd. Параметры #1, #2, …, #nargs заменяются на значения, предоставленные при вызове команды (или на optargdefault в случае необязательного аргумента, не указанного в вызове, как только что было объяснено).

TeX игнорирует пробелы в исходном коде после управляющего слова (см. Управляющая последовательность, управляющее слово и управляющий символ), как в ‘\cmd ’. Если вам нужен пробел, одно решение - ввести {} после команды (‘\cmd{} ’), а другое решение - использовать явный управляющий пробел (‘\cmd\ ’).

Простой пример определения новой команды: \newcommand{\RS}{Robin Smith} приводит к тому, что \RS заменяется более длинным текстом. Переопределение существующей команды аналогично: \renewcommand{\qedsymbol}{{\small QED}}.

Если вы используете \newcommand и имя команды уже использовалось, то вы получите что-то вроде ‘LaTeX Error: Command \fred already defined. Or name \end... illegal, see p.192 of the manual’. Аналогично, если вы используете \renewcommand и имя команды не определено, то вы получите что-то вроде ‘LaTeX Error: \hank undefined’.

Здесь первое определение создаёт команду без аргументов, а второе - команду с одним обязательным аргументом:

\newcommand{\student}{Ms~O'Leary}
\newcommand{\defref}[1]{Definition~\ref{#1}}

Используйте первое, как в I highly recommend \student{} to you. Во втором случае есть переменный аргумент, так что \defref{def:basis} раскрывается до Definition~\ref{def:basis}, что в конечном итоге раскрывается до чего-то вроде ‘Definition~3.14’.

Аналогично, но с двумя обязательными аргументами: \newcommand{\nbym}[2]{$#1 \times #2$} вызывается как \nbym{2}{k}.

В этом примере есть необязательный аргумент.

\newcommand{\salutation}[1][Sir or Madam]{Dear #1:}

Тогда \salutation даёт ‘Уважаемый господин или госпожа:’ , а \salutation[John] даёт ‘Уважаемый Иван:’. А \salutation[] даёт ‘Уважаемый :’.

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

\newcommand{\lawyers}[3][company]{#2, #3, and~#1}
I employ \lawyers[Howe]{Dewey}{Cheatem}.

Выходные данные - ‘Я сотрудничаю с «Дьюи, Читэм и Хоу».’. Необязательный аргумент, Howe, связан с #1, в то время как Dewey и Cheatem связаны с #2 и #3. Из-за необязательного аргумента, \lawyers{Dewey}{Cheatem} даст вывод ‘Я сотрудничаю с «Дьюи, Читэм и компанией».’.

Фигурные скобки вокруг defn не определяют группу, то есть они не ограничивают область действия результата расширения defn. Например, с \newcommand{\shipname}[1]{\it #1}, в этом предложении,

The \shipname{Monitor} met the \shipname{Merrimac}.

слова ‘встретили’, и точка, неправильно будут напечатаны курсивом. Решение состоит в том, чтобы поместить еще одну пару фигурных скобок внутри определения: \newcommand{\shipname}[1]{{\it #1}}.

  • Управляющая последовательность, управляющее слово и управляющий символ

© 2007–2018 Karl Berry
Public Domain Software
http://latexref.xyz/_005cnewcommand-_0026-_005crenewcommand.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API