逐个字符解析宏参数并循环遍历这些字符

逐个字符解析宏参数并循环遍历这些字符

我有一个想法。我想循环遍历宏的字符串参数中的每个字符。例如:

\def\dowithchar#1{%
  % some actions with #1
}

\def\mymacro#1{%
  % further pseudocode
  for (every character \ch in #1)
    \dowithchar{\ch}
}

因此我想要

\mymacro{ABCDEFGH}

在 pdf 字符串中呈现如下

(A) (B) (C) (D) (E) (F) (G) (H)

在 LaTeX 中可以实现吗?如果可以,请告诉我如何实现。

答案1

使用递归宏和\nil-delimited 参数可以方便地完成此操作:

\documentclass{article}

\def\dowithchar#1{%
  \doWithCharRec#1\nil%
}

%recursive macro
\def\doWithCharRec#1#2\nil{%
  (#1)%
  \ifx\empty#2\empty\else%
    \space\doWithCharRec#2\nil%
  \fi%  
}

\begin{document}
  $\rightarrow$\dowithchar{ABCDEFGH}$\leftarrow$
\end{document}

或者,按照 egreg 的建议,使用\@tfor循环:

\documentclass{article}

\makeatletter
\def\dowithchar#1{%
  \begingroup%
  \def\myspace{}% defined with local scope
  \@tfor\elem:=#1\do{\myspace(\elem)\let\myspace\space}%
  \endgroup%
}
\makeatother

\begin{document}
  $\rightarrow$\dowithchar{ABCDEFGH}$\leftarrow$
\end{document}

相关内容