Aliasing, mit oder ohne Argument?

Aliasing, mit oder ohne Argument?

Wie kann ich einem Befehl korrekt einen Alias ​​für einen anderen zuweisen?

\newcommand*{\keyword}{\emph}

oder:

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

Gibt es, abgesehen von der Tatsache, dass die zweite Variante expliziter ist, irgendwelche wirklichen Unterschiede?

Antwort1

Der Unterschied entsteht, wenn dieAliasDer Befehl nimmt ein optionales Argument an.

\newcommand*\keyword{\othercommand}

wird in der Lage sein, alle möglichen optionalen Argumente zu verarbeiten. Aber

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

kann nur die Situation verarbeiten, in der \othercommandohne optionales Argument aufgerufen wird.

Im Fall von \emphist dies kein Problem, da dort kein optionales Argument verwendet werden kann. Daher sollten beide Ansätze problemlos funktionieren.

Wenn Sie nur strengAliasing, meine persönliche Meinung wäre, die erste

\newcommand*\keyword{\othercommand}

In einer Situation, in der ich mehr mache als nur Aliasing, würde ich verwenden

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

Nur als Beispiel:

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

(obwohl andere wahrscheinlich einwenden werden, dass die Anführungszeichen unnötig sind; \emph ich meine dies nur als Veranschaulichung dessen, was „mehr als nur Aliasing“ bedeuten könnte.)

Vermietung

Da dies in den Kommentaren zur Sprache kam, werde ich ein paar Dinge zum \letEintippen eines Befehls erwähnen.

Manchmal möchten Sie das Standardverhalten eines LaTeX-Makros ändern. Nehmen wir beispielsweise an, es gibt ein Makro, das wie folgt definiert ist:

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

aber Sie möchten, dass es sich anders verhält. Dann könnten Sie es einfach wie folgt umschreiben:

\renewcommand*\somecommand[1]{\textbf{#1}}

Aber dann könnte es passieren, dass Sie die ursprüngliche Definition gerne hätten. In diesem Fall, bevorErneuerungden Befehl, könnten Sie etwas tun wie

\let\oldsomecommand\somecommand
\renewcommand*\somecommand[1]{\textbf{#1}}

Jetzt \somecommandverhält es sich wie gewünscht, aber Ihnen steht auch \oldsomecommandein Befehl zur Verfügung, um das alte Verhalten wiederherzustellen.

Kurz gesagt, wenn Sie schreiben \newcommand\keyword{\emph}, \keywordwird zu erweitert \emph. Wenn Sie schreiben \let\keyword\emph, \keywordwird nicht zu erweitert \emph, sondern auf die Definition von \emph.

Es ist jedoch \letnicht immer möglich, die volle Leistung eines Befehls zu erfassen, dergesegnet/verfluchtmit optionalen Argumenten. Auf dieser Site gibt es viele Beiträge zum Umgang mit solchen Situationen, daher verweise ich Sie hier nur auf einige:

verwandte Informationen