我在绘图中有许多重叠的路径,它们最终会越过标签(我并不反对路径越过路径)。我怎样才能将标签放在前景中,但又保持其在路径上的位置并倾斜?有没有办法用图层或背景库来实现?
例如:
\node at (0,0) (1) {x};
\node at (2,2) (2) {y};
\node at (0,2) (3) {m};
\node at (2,0) (4) {n};
\begin{scope}[on background layer]
\draw[->] (1) -- node[midway, sloped, fill=white] {-} (2);
\draw[->] (3) -- node[near start, sloped, fill=white] {+} (4);
\end{scope}
在这里,我希望它node[midway, sloped, fill=white] {-}
进入前台,这样它就不会被下一条路径覆盖。
理想情况下,能否通过某种方式实现这一点,即每个节点都受到一些简单操作的影响?例如usetikzlibrary{all paths in background}
?
答案1
使用代码从这个很棒的答案,您可以反过来将节点放在前景层上。然后,您可以every node
在范围的选项列表中使用此键将此键应用于范围内的每个节点:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\pgfdeclarelayer{front}
\pgfsetlayers{main, front}
\makeatletter
\pgfkeys{%
/tikz/node on layer/.code={
\gdef\node@@on@layer{%
\setbox\tikz@tempbox=%
\hbox\bgroup\pgfonlayer{#1}\unhbox%
\tikz@tempbox\endpgfonlayer\egroup%
}%
\aftergroup\node@on@layer
}
}
\def\node@on@layer{\aftergroup\node@@on@layer}
\makeatother
\begin{document}
\begin{tikzpicture}
\node at (0,0) (1) {x};
\node at (2,2) (2) {y};
\node at (0,2) (3) {m};
\node at (2,0) (4) {n};
\begin{scope}[every node/.append style={node on layer={front}}]
\draw[->] (1) to node[midway, sloped, fill=white] {$-$} (2);
\draw[->] (3) to node[near start, sloped, fill=white] {$+$} (4);
\end{scope}
\end{tikzpicture}
\end{document}
但我必须承认我并不完全理解该代码,因此功劳应该归功于安德鲁·斯泰西 (Andrew Stacey)!