マクロ - 入力変数を使用してコマンドを呼び出す

マクロ - 入力変数を使用してコマンドを呼び出す

プロジェクトの過程で、次のようにできれば便利だと気づきました。たとえば、さまざまなコマンドのリストがあるとします (簡略化):

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

ここで、入力に基づいてこれらのコマンドのいずれかを呼び出すことができるコマンドが必要です。

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

上記の例は機能しませんが、そのような機能を実現するにはどうすればよいでしょうか?

答え1

マクロ名は で構築する必要があります\csname A#1\endcsname

実際、多くのパッケージまたはクラス コードがこの構造を利用しており、両方のマクロが実際にはプリミティブであるため、\csname ...\endcsnameに限定されません。LaTeXTeX

注意:\AAは既に定義されており、Å のようなスカンジナビア文字を提供します (ただし、コマンド名は簡略化されているように見えるため、これは問題にならないと思います)

\A#1が定義されていない場合\csname A#1\endcsnameは に展開され\relax、何も行われません。

\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}

ご覧のとおり、\caller{A}は動作します(\AA定義されているため)が、\caller{Z}何もしません(\AZ定義されていないため)

ここに画像の説明を入力してください

関連情報