# Foreach inside a TikZ matrix

Consider this MWE:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}
\matrix [matrix of nodes] {
a \\
b \\
c \\
};
\end{tikzpicture}
\end{document}


It might be convenient to fill the matrix with a foreach loop:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{tikzpicture}
\matrix [matrix of nodes] {
\foreach \c in {a,b,c}{
\c \\
}
};
\end{tikzpicture}
\end{document}


This however fails with the message

 ! Extra }, or forgotten
\endgroup.


It seems like the ending brace of \foreach bothers the matrix node. Can a matrix be populated with \foreach and how?

-

\foreach isn't expandable and the grouping is most likely causing some issues as well. I would recommend to use the loop outside the matrix and accumulate the rows in a macro which then only has to be expanded. The etoolbox package provides \gappto (global append to; \xappto would cause issues with fragile content) which can be used here. There is also \g@addto@macro provided by the LaTeX kernel, if you don't want to rely on e-TeX and don't mind to have to use \makeatletter/\makeatother.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{etoolbox}

\begin{document}

\begin{tikzpicture}
\let\mymatrixcontent\empty
\foreach \c in {a,b,c}{%
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{\c\\}%
% or
%\xappto\mymatrixcontent{\expandonce{\c\\}}
}
\matrix [matrix of nodes] {
\mymatrixcontent
};
\end{tikzpicture}

\end{document}

-