![放置节点并稍后插入其文本](https://linux22.com/image/366630/%E6%94%BE%E7%BD%AE%E8%8A%82%E7%82%B9%E5%B9%B6%E7%A8%8D%E5%90%8E%E6%8F%92%E5%85%A5%E5%85%B6%E6%96%87%E6%9C%AC.png)
我正在处理一个 tikz 图片,其中有一系列节点必须具有相同的文本,但位于不同的位置(由 for 循环放置)。
计划是,沿 x 轴(具有相同的 y)的所有节点都将具有相同的标签文本。
目前,我已经用空文本放置节点,并且根据内部 for 循环(y 轴)命名,并带有空标签文本。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,1,...,3}{
\foreach \y in {0,1,...,3}{
\draw (\x - 0.5, \y - 0.5) rectangle (\x + 0.5, \y + 0.5);
\node (node\y) at (\x, \y) {};
}
}
\end{tikzpicture}
\end{document}
那么有没有办法稍后设置给定的标签文本node\y
?
编辑:对此有很多好的答案,Torbjorn 的答案最简洁,提供了我需要的一切。
答案1
那么,\foreach [count=\y from 0] \txt in {foo,bar,baz}
就像内循环一样?
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,1,...,3}{
\foreach [count=\y from 0] \txt in {foo,bar,baz}{
\draw (\x - 0.5, \y - 0.5) rectangle (\x + 0.5, \y + 0.5);
\node (node\x\y) at (\x, \y) {\txt};
}
}
\end{tikzpicture}
\end{document}
如果您不需要 y 值的连续整数,则可以使用\foreach \y/\txt in {0/foo,1/bar}
来指定任意数字。当然,这不太方便:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,1,...,3}{
\foreach \y/\txt in {0/foo,1/bar,2/baz}{
\draw (\x - 0.5, \y - 0.5) rectangle (\x + 0.5, \y + 0.5);
\node (node\x\y) at (\x, \y) {\txt};
}
}
\end{tikzpicture}
\end{document}
答案2
像这样
可以,但你必须有足够的空间
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,1,...,3}{
\foreach \y in {0,1,...,3}{
\draw (\x - 0.5, \y - 0.5) rectangle (\x + 0.5, \y + 0.5);
\node (node\y) at (\x, \y) {};
}
}
\foreach \y in {0,1,...,3}{
\node at (node\y) { \y};
}
\end{tikzpicture}
\end{document}
答案3
如你所愿(但我不明白你为什么喜欢后者插入文本,更好的是Torbjørn T. 方法):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[box/.style={draw, minimum size=1cm, outer sep=0pt}]
\foreach \x in {0,...,3}{
\foreach \y in {0,...,3}{
\node[box,above right] (n\x\y) at (\x, \y) {};
}
}
\foreach \i in {0,...,3}
\node at (n\i 2) {y3};
\end{tikzpicture}
\end{document}