2

I'm trying to create a dynamic for loop:

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

Note if I change the last line to

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

it works.

Unfortunately the comma's seem to screw up the foreach and it gives errors(changing a,b,c,d to a lets it work).

Why is \def\forinmacro{{a,b,c,d}} breaking the foreach but \def\forinmacro{{a}} not?

2

1 Answer 1

5

You need to remove the extra braces.

\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}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .