我正在使用 listings 包并进行语法名称映射。基本上我想这样做:
\NewDocumentCommand\syntaxnamefor{m}{
... % this command if given `xhtml` returns `html`, if given `py` returns `python`
}
\NewDocumentCommand\setsyntax{m}{
\lstset{language=\syntaxnamefor{#1}}
}
现在的问题是,在\lstset
调用中参数没有完全展开。我收到以下错误:
! Package Listings Error: language \syntaxnamefor {xhtml} undefined
例如 listings 包获取字符串\syntaxnamefor {xhtml}
作为其参数,而不是获取其扩展html
作为其参数。我尝试过使用\edev
和,\expandafter
但那真的太复杂了……
答案1
用 定义的命令\NewDocumentCommand
不可扩展,请使用\newcommand
或\NewExpandableDocumentCommand
。