別名,有或沒有參數?

別名,有或沒有參數?

將一個命令別名為另一個命令的正確方法是什麼?

\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命令的事情。

有時您想要變更 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並非總是能夠捕捉已被執行的命令的全部功能。祝福/詛咒帶有可選參數。該網站上有很多關於如何處理此類情況的帖子,因此我將在這裡向您介紹一些:

相關內容