コマンドを別のコマンドにエイリアスする正しい方法は何ですか?
\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
常にコマンドの完全なパワーを捉えられるわけではない。祝福された/呪われたオプションの引数付き。このサイトにはこのような状況に対処する方法についての投稿が多数あるので、ここではいくつか紹介します。
- 見る\let と \def の違いは何ですか?基本的な概要については。
- 見る\LetLtxMacro はいつ使用すればよいですか?
\let
オプションに関する問題を回避する方法の詳細については、こちらをご覧ください。 - こちらもご覧ください「閉じた」(平方)ルート記号(元の質問は実際には
\let
tingに関するものではありませんが。)