我想创建一个定义其他命令的命令。但是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
旨在在代码中明确说明开始为文档创建哪些新命令,因此“动态”构建它们并不是真正的目的。然而,我认为这仍然是一个需要基于实际用例中的良好示例进行讨论的领域。