是否可以在节点的背景中绘制边或路径,无论它们是在节点定义之前还是之后构建的?
在下面的例子中,\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
)。)