如何在调用另一个宏之前“强制”宏扩展?

如何在调用另一个宏之前“强制”宏扩展?

我正在使用 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

相关内容