我正在尝试编写一个命令,该命令将声明另一个命令,其名称将基于给予外部命令的输入:例如
\newcommand{\buildcommand}[1]{
\newcommand{\someprefix#1}{do stuff}
}
但这似乎不起作用,因为我一直收到错误。我该如何让它工作?
答案1
您需要先构建命令序列的名称,然后才能使用 定义命令\newcommand
。这是通过 完成的\csname <macro name without leading backslash>\endcsname
。由于\csname
需要扩展前 \newcommand
(你不想定义\csname
它自己)\expandafter
需要一个:
\newcommand{\buildcommand}[1]{%
\expandafter\newcommand\csname someprefix#1\endcsname{do stuff}%
}
如果要保留新命令名称周围的括号,则需要使用另一个“跨过它们” \expandafter
:
\newcommand{\buildcommand}[1]{%
\expandafter\newcommand\expandafter{\csname someprefix#1\endcsname}{do stuff}%
}
我还在%
定义的前两行末尾添加了以避免出现虚假空格,请参阅为什么宏定义中要用到行尾%?和行末百分号(%)有什么用?以获得进一步的解释。