放置节点并稍后插入其文本

放置节点并稍后插入其文本

我正在处理一个 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}

相关内容