Makros - Aufrufen eines Befehls mithilfe einer Eingabevariablen

Makros - Aufrufen eines Befehls mithilfe einer Eingabevariablen

Im Laufe eines Projekts wurde mir klar, dass es hilfreich wäre, wenn ich Folgendes tun könnte. Angenommen, ich habe eine Liste verschiedener Befehle (vereinfacht):

\newcommand{\AA}{...}
\newcommand{\AB}{...}
\newcommand{\AC}{...}
...
\newcommand{\AZ}{...}

Jetzt möchte ich einen Befehl, der einen dieser Befehle aufrufen kann (basierend auf der Eingabe):

\newcommand{\caller}[1]{\A#1}

Das obige Beispiel funktioniert nicht, aber wie würde ich etwas erreichen, das über eine solche Funktionalität verfügt?

Antwort1

Den Makronamen müssen Sie mit konstruieren \csname A#1\endcsname.

Tatsächlich wird diese Konstruktion in vielen Paket- oder Klassencodes verwendet. \csname ...\endcsnameSie ist nicht darauf beschränkt LaTeX, da es sich bei beiden Makros TeXtatsächlich um Primitive handelt.

Bitte beachten: \AAist bereits definiert und stellt ein skandinavisches Zeichen bereit, also so etwas wie Å (Aber da die Befehlsnamen vereinfacht zu sein scheinen, wird das, denke ich, kein Problem sein)

Wenn \A#1nicht definiert ist , \csname A#1\endcsnamewird es zu erweitert \relax, d. h. es geschieht nichts.

\documentclass{article}



\newcommand{\AB}{bar}
\newcommand{\AC}{foobar}

\newcommand{\caller}[1]{%
  \csname A#1\endcsname%
}


\begin{document}
\caller{A}

\caller{B}

\caller{C}

\caller{Z}
\end{document}

Wie Sie sehen, \caller{A}funktioniert es (da \AAes definiert ist) und \caller{Z}tut nichts (da \AZes nicht definiert ist).

Bildbeschreibung hier eingeben

verwandte Informationen