Tikz,重叠路径绘制在标签上。如何将标签放在所有路径前面的前景中?

Tikz,重叠路径绘制在标签上。如何将标签放在所有路径前面的前景中?

我在绘图中有许多重叠的路径,它们最终会越过标签(我并不反对路径越过路径)。我怎样才能将标签放在前景中,但又保持其在路径上的位置并倾斜?有没有办法用图层或背景库来实现?

例如:

\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)!

在此处输入图片描述

相关内容