在 tikz 中设置边缘顶部所有节点的样式

在 tikz 中设置边缘顶部所有节点的样式

我有一些边缘,其“顶部”的节点定义为

\path (source) edge node {some text} (target);

但现在它只是打印some text直接打印在节点顶部,这使得读取起来很困难。

我想要的是白色背景。我知道我可以用

\path (source) edge node [fill=white] {some text} (target);

但我希望这发生在我所有位于边缘的节点上。

其中一种方法是使用

\tikzset{every node/.style={fill=white}}

但随后它将发生在我所有的节点上,而不仅仅是那些位于边缘之上的节点。

另一种方法是使用以下命令在所有节点上手动设置一个类

\tikzset{white bg/.style={fill=white}}
\path (source) edge node [white bg] {some text} (target);

但如果可以自动为所有节点完成此操作会更好。

是否有任何 tikz 键可以执行类似操作

\tikzset{every node on edge/.style={fill=white}}

答案1

有一个every edge样式,你可以every node在里面放一个样式定义,所以借用一些代码gernot 的回答

在此处输入图片描述

\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[every edge/.append style={every node/.style={fill=blue}}]
\node (source) {S};
\draw (4,0) node (target) {T}; % just to show that this isn't blue either
\path (source) edge node {some text} (target);
\end{tikzpicture}
\end{document}

答案2

我不认为路径上的节点有特定的键,因为据我所知,\node内部也变成了。但是,您可以在范围内node收集要影响的节点,并仅为它们定义。下面的示例表明,在范围之后,该选项不再有效。every nodeevery nodeevery node

在此处输入图片描述

\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (source) [fill=red] {S};
\node (target) [fill=blue] at (4,0) {T};
\begin{scope}[every node/.style={fill=white}]
  \path (source) edge node {some text} (target);
\end{scope}
\path (0,-1) edge node {some text} (4,-1);
\end{tikzpicture}
\end{document}

相关内容