宏 - 使用输入变量调用命令

宏 - 使用输入变量调用命令

在一个项目的过程中,我意识到如果我能做如下事情会很有帮助。假设我有一个不同的命令列表(简化):

\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未定义)

在此处输入图片描述

相关内容