巨集 - 使用輸入變數呼叫命令

巨集 - 使用輸入變數呼叫命令

在一個專案的過程中,我意識到如果我能做到以下幾點將會很有幫助。假設我有一個不同命令的清單(簡化):

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

現在我想要一個可以呼叫以下命令之一的命令(基於輸入):

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

上面的例子行不通,但是我要如何完成具有這樣功能的東西呢?

答案1

您必須使用 來建構巨集名稱\csname A#1\endcsname

事實上,許多套件或類別程式碼都使用這種\csname ...\endcsname構造,而且它不限於LaTeX,因為這兩個巨集TeX實際上都是原語。

請注意:\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未定義)

在此輸入影像描述

相關內容