使用另一个基于其输入的名称的命令声明新命令?

使用另一个基于其输入的名称的命令声明新命令?

我正在尝试编写一个命令,该命令将声明另一个命令,其名称将基于给予外部命令的输入:例如

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

我还在%定义的前两行末尾添加了以避免出现虚假空格,请参阅为什么宏定义中要用到行尾%?行末百分号(%)有什么用?以获得进一步的解释。

相关内容