Как правильно присвоить одной команде псевдоним другой?
\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
не всегда удается охватить всю мощь команды, которая былаблагословенный/проклятыйс необязательными аргументами. На этом сайте есть много постов о том, как справляться с такими ситуациями, поэтому я укажу вам здесь лишь на несколько:
- ВидетьВ чем разница между \let и \def?для основной сути.
- ВидетьКогда использовать \LetLtxMacro?для подробного объяснения того,
\let
как решать проблемы, связанные с опционами. - Также смСимвол «закрытого» (квадратного) корня(хотя изначальный вопрос на самом деле не о
\let
тинге.)