考虑一下这个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}