Псевдонимизация, с аргументом или без?

Псевдонимизация, с аргументом или без?

Как правильно присвоить одной команде псевдоним другой?

\newcommand*{\keyword}{\emph}

или:

\newcommand*{\keyword}[1]{\emph{#1}}

Помимо того, что второй вариант более очевиден, есть ли какие-то реальные различия?

решение1

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

\newcommand*\keyword{\othercommand}

сможет обработать любые возможные необязательные аргументы. Но

\newcommand*\keyword[1]{\othercommand{#1}}

сможет обработать только ситуацию, когда \othercommandвызывается без необязательного аргумента.

В случае \emphэто не проблема, так как там нет необязательного аргумента, который можно было бы принять. Так что любой подход должен работать нормально.

Когда вы просто строгопсевдонимы, мое личное мнение - использовать первый вариант

\newcommand*\keyword{\othercommand}

В ситуации, когда я делаю что-то большее, чем просто псевдоним, я бы использовал

\newcommand*\keyword[1]{\othercommand{#1}}

Чисто ради примера,

\newcommand*\keyword[1]{`\emph{#1}'}

(хотя другие, скорее всего, возразят, что кавычки излишни. \emph Я говорю это только как иллюстрацию того, что может означать «больше, чем просто псевдонимы».)

Сдача в аренду

Поскольку эта тема поднималась в комментариях, я упомяну несколько вещей о \letкоманде ting.

Иногда вы хотите изменить поведение макроса LaTeX по умолчанию. Например, предположим, что есть макрос, определенный как

\newcommand*\somecommand[1]{\emph{#1}}

но вы бы хотели, чтобы он вел себя по-другому. Тогда вы могли бы просто переписать его следующим образом:

\renewcommand*\somecommand[1]{\textbf{#1}}

Но тогда вы можете столкнуться с ситуацией, когда вам действительно хотелось бы иметь оригинальное определение. В этом случае, прежде чемобновлениекоманду, вы можете сделать что-то вроде

\let\oldsomecommand\somecommand
\renewcommand*\somecommand[1]{\textbf{#1}}

Теперь \somecommandвы будете вести себя так, как пожелаете, но у вас также есть \oldsomecommandдоступная команда вернуть вам старое поведение.

В двух словах, написав \newcommand\keyword{\emph}, \keywordрасширится до \emph. Написав \let\keyword\emph, \keywordрасширится не до \emph, а до определения \emph.

Однако \letне всегда удается охватить всю мощь команды, которая былаблагословенный/проклятыйс необязательными аргументами. На этом сайте есть много постов о том, как справляться с такими ситуациями, поэтому я укажу вам здесь лишь на несколько:

Связанный контент