TikZ 矩阵内的 Foreach

TikZ 矩阵内的 Foreach

考虑一下这个MWE:

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

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

使用 foreach 循环填充矩阵可能会很方便:

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

然而,这失败了,并显示以下消息

 ! Extra }, or forgotten
 \endgroup.

似乎 的结尾括号会\foreach干扰matrix节点。矩阵可以填充吗\foreach?如何填充?

答案1

\foreach不可扩展,分组也很可能导致一些问题。我建议在矩阵外部使用循环,并在宏中累积行,然后只需扩展即可。该etoolbox包提供了\gappto(全局附加到;\xappto会导致易碎内容出现问题)可以在这里使用。\g@addto@macro如果您不想依赖 e-TeX 并且不介意使用\makeatletter/ \makeatother, LaTeX 内核也提供了。

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

相关内容