使用 TikZ 进行循环和链接

使用 TikZ 进行循环和链接

如何使用嵌套的 foreach 构建网格,为每次迭代定义一个节点?

如果我使用 Python 编写代码,我会写:

nodes = {}
for i in range(10):
    for j in range(5):
         node = nodes[(i, j)] = create_node(location=(i, j), text="node text")
         if (i-1, j) in nodes:
             add_path(nodes[(i-1, j)], node, style=hstyle)
         if (i, j-1) in nodes:
             add_path(nodes[(i, j-1)], node, style=vstyle)

我的代码需要比这更复杂(它不是一个简单的网格),但这样做将是一个很好的开始。

答案1

我不完全确定 Python 代码的作用(是否add_path(<node>)将当前节点链接到参数中指定的节点?),但我还是尝试了一下。

这是我的解释:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[
    every node/.style={draw,text width=0.5cm},
    x=1.1cm,
    y=1.1cm]
\foreach \i in {1,...,10} {
    \foreach \j [
        evaluate=\j as \jprev using int(\j-1),
        evaluate=\i as \iprev using int(\i-1)] in {1,...,5} {
        \node (\i-\j) at (\i,-\j) {\i\,\j};
        \ifnum \jprev = \i
            \draw [red, very thick] (\i-\jprev) -- (\i-\j);
        \fi
        \ifnum \iprev = \j
            \draw [red, very thick] (\iprev-\j) -- (\i-\j);
        \fi
    }
}
\end{tikzpicture}
\end{document}

相关内容