我有一个想法。我想循环遍历宏的字符串参数中的每个字符。例如:
\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}