我想要一个新命令:\myfunc{string},其中字符串类似于:“a,b,x,y,x”,命令的效果应如下:
\func{a}\func{b}\func{x}\func{y}\func{x}
,其中\func{}
是另一个预定义函数。如何做到这一点?
答案1
这非常容易xparse
:
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\myfunc}{ >{\SplitList{,}} m }{%
\ProcessList{#1}{\func}%
}
\NewDocumentCommand{\func}{m}{%
\fbox{#1} % a space follows
}
\begin{document}
\myfunc{a,b,c,x,y,z}
\end{document}
请注意,\func
可以按照您喜欢的任何方式定义,也可以使用\newcommand
。重要的是它有一个参数。
您还可以在\ProcessList{#1}{\func}
其前后添加代码。
请注意,您不限于使用逗号作为分隔符,因为您在定义时指定它。
另一个优点是\SplitList
自动修剪项目周围的前导和尾随空格,因此
\myfunc{ a , b,c ,x,y , z }
将是相同的,与其他较低级别的方法相反。
答案2
LaTeX 有一个内置命令,用于迭代逗号分隔的列表:
\documentclass{article}
\makeatletter
\newcommand\myfunc[1]{\@for\tmp:=#1\do{\func{\tmp}}}
\makeatother
\let\func\fbox
\begin{document}
\myfunc{a,b,c,d}
\end{document}