如何在 LaTeX 命令中拆分输入字符串?

如何在 LaTeX 命令中拆分输入字符串?

我想要一个新命令:\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}

相关内容