如何在 TikZ 矩阵中将 NewExpandableDocumentCommand 与 foreach 结合使用

如何在 TikZ 矩阵中将 NewExpandableDocumentCommand 与 foreach 结合使用

后续问题https://tex.stackexchange.com/a/714853/46023


我有命令

\NewExpandableDocumentCommand{\test}{O{} m}{%
\foreach[count=\no from 0] \No in {1,...,#2}{%%
\node[draw, yshift=-5.5mm*\no, #1]{\No};
}%%
}

并且它在里面工作{tikzpicture}

但如果我把它放入 TikZ 矩阵中,它就不起作用。
我需要做什么?

在此处输入图片描述

\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}

\NewExpandableDocumentCommand{\test}{O{} m}{%
\foreach[count=\no from 0] \No in {1,...,#2}{%%
\node[draw, yshift=-5.5mm*\no, #1]{\No};
}%%
}

\begin{document}
\begin{tikzpicture}[]
\test{3} 
\test[red, xshift=1cm]{5} 
\node[yshift=6mm, xshift=5mm] {works here};

\matrix (m) [matrix of nodes, nodes in empty cells, draw, 
xshift=3cm, label={[align=left, font=\slshape]but not here \\ in the matrix},
]{
a & b \\
%\test{3}   &  \test[red, xshift=1cm]{5} \\ % Does not work
};
\end{tikzpicture}
\end{document}

答案1

节点矩阵意味着每个单元都像 a 的内容\node,因此您的“在这里工作”比较应该是\node {\test{e}}(也会失败)

无关,但您应该使用\NewDocumentCommandnot \NewExpandableDocumentCommand,因为 pgf\foreach无论如何都是不可扩展的,所以为其声明可扩展的参数处理器没有任何优势(并且有一些缺点)。

相关内容