在 TikZ 中的节点背景中绘制边和路径

在 TikZ 中的节点背景中绘制边和路径

是否可以在节点的背景中绘制边或路径,无论它们是在节点定义之前还是之后构建的?

在下面的例子中,\draw指令在节点声明之后出现,因此从 到(foo)的路径(baz)穿过节点(bar)

\documentclass{article}

\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}
    \node [fill=gray!30] (foo) at (0,0) { foo };
    \node [fill=gray!30] (bar) at (2,0) { bar };
    \node [fill=gray!30] (baz) at (4,0) { baz };

    \draw (foo) -- (baz);
  \end{tikzpicture}
\end{document}

我希望实现的是路径(bar)在背景中交叉,因此节点在视觉上不会交叉。在不改变指令顺序的情况下(特别是不将创建移动到指令(bar)下方\draw)可以实现这一点吗?

上面的例子如下所示:

穿过前景节点的边

期望结果如下:

边缘穿越背景节点

答案1

TikZ/PGF 有图层的概念。它们在 (v2.10) 手册的第 82 章“分层图形”中进行了描述,可用于将后面的命令绘制在它们前面的内容下方。在您的示例中,您可以编写

\documentclass{article}
\usepackage{tikz}

\pgfdeclarelayer{bg}    % declare background layer
\pgfsetlayers{bg,main}  % set the order of the layers (main is the standard layer)

\begin{document}
  \begin{tikzpicture}
    \node [fill=gray!30] (foo) at (0,0) { foo };
    \node [fill=gray!30] (bar) at (2,0) { bar };
    \node [fill=gray!30] (baz) at (4,0) { baz };

    \begin{pgfonlayer}{bg}    % select the background layer
        \draw (foo) -- (baz);
    \end{pgfonlayer}
  \end{tikzpicture}
\end{document}

实际上,该backgrounds库(参见 v2.10 中的第 25 章)已经定义了一个背景层和一个必须用来scope选择该层的键:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\begin{document}
  \begin{tikzpicture}
    \node [fill=gray!30] (foo) at (0,0) { foo };
    \node [fill=gray!30] (bar) at (2,0) { bar };
    \node [fill=gray!30] (baz) at (4,0) { baz };

    \begin{scope}[on background layer]
        \draw (foo) -- (baz);
    \end{scope}
  \end{tikzpicture}
\end{document}

(这两个解决方案编译为相同的代码(除了backgrounds库调用层background)。)

相关内容