使用 xparse 处理列表中的数学运算时的扩展

使用 xparse 处理列表中的数学运算时的扩展

我正在尝试“打印”一个以逗号分隔的字符串列表。实际用例更复杂,列表存储为键值,但下面的 MWE 显示了问题:当我将数学添加到列表中时,编译器会抱怨“命令未定义”。(不过像下面这样的东西\linetwo可以正常工作。)

有时\noexpand有帮助(例如,$\noexpand\bm{v}$可以工作,但$\bm{v}不会)。这让我想到,也许弄乱扩展会有所帮助,我仔细研究了 的选项\mycmd,最终选择了\exp_args:Nx,尽管这很可能是错误的选择。如果能得到对 expl3 更有经验的人的帮助,我将不胜感激。谢谢!

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\processline}{m}{#1\par}
\NewDocumentCommand{\processlist}{ >{\SplitList{,}} m }{\ProcessList{#1}{\processline}}
\NewDocumentCommand{\mycmd}{m}{\exp_args:Nx \processlist{#1}}
\ExplSyntaxOff

\NewDocumentCommand{\linetwo}{}{line 2}

\begin{document}

\mycmd{line 1, \linetwo, $\text{v}_\text{v}$}
    
\end{document}

答案1

expl3 有一个 clist 模块,用于映射逗号列表:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\mycmd}{m}{\clist_map_inline:nn{#1}{##1\par}}
\ExplSyntaxOff

\NewDocumentCommand{\linetwo}{}{line 2}

\begin{document}

\mycmd{line 1, \linetwo, $\text{v}_{\text{v}}$}
    
\end{document}

相关内容