别名,有或无参数?

别名,有或无参数?

将一个命令别名为另一个命令的正确方法是什么?

\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 我只是想说明“不仅仅是别名”的含义。)

出租

由于这已经在评论中出现,所以我会提到一些有关\letting 命令的事情。

有时你想改变 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并不总是能够捕捉到命令的全部力量祝福/诅咒带有可选参数。本网站上有许多关于如何处理此类情况的帖子,因此我在此仅向您指出其中几篇:

相关内容