定义命令,使用 xparse 定义名称使用参数的命令

定义命令,使用 xparse 定义名称使用参数的命令

我想创建一个定义其他命令的命令。但是xparse我希望第二个命令由文本组成,然后是第一个命令的参数。例如

例如以下

\documentclass{article}
\usepackage{xparse}
\begin{document}

\ExplSyntaxOn
\DeclareDocumentCommand{\DeclareTest}{m}{%
%
\DeclareDocumentCommand{\csname test#1\endcsname}{}{This is a #1 test}
}
\ExplSyntaxOff

\DeclareTest{work}
\testwork

\end{document}

我希望\testwork是一个计算结果为 的命令This is a work test。但是当我这样做时,我得到了一个"xparse/bad-arg-spec"错误,我不确定为什么。

答案1

就像的情况一样\newcommand\DeclareDocumentCommand亲戚被设计用来指挥姓名作为第一个参数。目前,如果你想构造名称,你需要使用\expandafter

\DeclareDocumentCommand\DeclareTest{m}{%
  \expandafter\DeclareDocumentCommand\csname test#1\endcsname{}{This is a test}%
}

目前没有可用的“变体”在内部执行此操作,原因是“动态”命令从概念角度来看存在问题。语法xparse旨在在代码中明确说明开始为文档创建哪些新命令,因此“动态”构建它们并不是真正的目的。然而,我认为这仍然是一个需要基于实际用例中的良好示例进行讨论的领域。

相关内容