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 \othercommand
ohne optionales Argument aufgerufen wird.
Im Fall von \emph
ist 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 \let
Eintippen 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 \somecommand
verhält es sich wie gewünscht, aber Ihnen steht auch \oldsomecommand
ein Befehl zur Verfügung, um das alte Verhalten wiederherzustellen.
Kurz gesagt, wenn Sie schreiben \newcommand\keyword{\emph}
, \keyword
wird zu erweitert \emph
. Wenn Sie schreiben \let\keyword\emph
, \keyword
wird nicht zu erweitert \emph
, sondern auf die Definition von \emph
.
Es ist jedoch \let
nicht 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:
- SehenWas ist der Unterschied zwischen \let und \def?für den wesentlichen Inhalt.
- SehenWann soll \LetLtxMacro verwendet werden?für eine detaillierte Erklärung zur
\let
Umgehung von Problemen mit Optionen. - Siehe auch„Geschlossenes“ (quadratisches) Wurzelsymbol(obwohl es in der ursprünglichen Frage nicht wirklich um
\let
Dinge geht.)