エイリアシングは引数ありか引数なしか?

エイリアシングは引数ありか引数なしか?

コマンドを別のコマンドにエイリアスする正しい方法は何ですか?

\newcommand*{\keyword}{\emph}

または:

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

2 番目の方がより明確であるという事実以外に、実際の違いはありますか?

答え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常にコマンドの完全なパワーを捉えられるわけではない。祝福された/呪われたオプションの引数付き。このサイトにはこのような状況に対処する方法についての投稿が多数あるので、ここではいくつか紹介します。

関連情報