# dynamic for loop

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?

-
 Please add a minimal working example (MWE). – percusse Jul 29 '12 at 17:34 Both your instances of \forinmacro have only one element. – egreg Jul 29 '12 at 21:31

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}

-