动态 for 循环

动态 for 循环

我正在尝试创建一个动态 for 循环:

\def\forinmacro{{a,b,c,d}}
\iftb{SomeBool}{\def\forinmacro{{a}}}
\foreach \m in \forinmacro {...}

请注意,如果我将最后一行更改为

\foreach \m in {a,b,c,d} {...}

有用。

不幸的是,逗号似乎搞乱了 foreach 并导致错误(将 a、b、c、d 更改为 a 可以使其正常工作)。

为什么\def\forinmacro{{a,b,c,d}}打破了foreach却\def\forinmacro{{a}}没有呢?

答案1

您需要移除多余的括号。

\documentclass{article}
\usepackage{pgffor}
\usepackage{xparse, ifthen}
\DeclareDocumentCommand\iftb{m m G{\relax}}{\ifthenelse{\boolean{#1}}{#2}{#3}}
\begin{document}
\newboolean{SomeBool}\setboolean{SomeBool}{true}
\iftb{SomeBool}{\def\forinmacro{a}}
\foreach \m in \forinmacro {This is letter : \m\par}
\def\forinmacro{x,y,w,z}
\foreach \m in \forinmacro {This is letter : \m\par}
\end{document}

相关内容