覆盖从每个节点样式继承的节点绘制样式会弄乱定位

覆盖从每个节点样式继承的节点绘制样式会弄乱定位

我一直在尝试使用 TikZ 绘制一棵树。所有节点都应该是圆形,所以我使用样式every node。有些节点上有一些额外的标签,这些标签必须是例外。我试过这个:

\documentclass{article} 
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
  \begin{tikzpicture}[every node/.style={draw,circle}]
    \node {A}
      child { node (b) {B} }
      child { node {C} };
    \node[draw=none,below=1mm of b] {hint};  
  \end{tikzpicture}
\end{document}

但暗示距离太远B

失败的例子

当我删除every node样式时,定位是正确的:

定位固定,样式错误

我怎样才能解决这个问题?

答案1

除了我可能不应该将其用于every node此目的之外,潜在的问题很简单,但在文档中有所隐藏(根据我有限的努力)。

draw=none关闭形状的绘制,但不会消除形状本身!因此,提示节点保留导致定位的circle形状:every node

带有帮助行的失败示例

似乎没有null- 形。标准形状是rectangle,因此重置为此

\node[draw=none,rectangle,below=1mm of b] {some hint for B};  

提供所需的结果:

固定的

答案2

拉斐尔自己的答案当然是正确的:提示节点继承了every node样式。

如果你只想更改树的节点,你可以every node使用以下方法将样式本地设置为树:

\path[options] node {parent node} child …

反而。

虽然positioning很棒,但可以借助选项放置这样的简单提示label。不再需要命名节点(b),并且可以轻松更改文本,而无需研究哪个提示属于哪个节点。

请注意,我使用了.append style处理程序,尤其是对于every label样式。放置标签(也只是一个节点)时,它也会继承样式every node,但every label样式会覆盖任何可能的设置。

every label/.style如果您使用而不是 ,就会看到这种情况。由于处理程序覆盖了样式中已经存在的.append style,因此形状的边框突然可见。.styledraw=noneevery label

代码

\documentclass[tikz]{standalone} 
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
  \path[every node/.append style={draw,circle}] node {A}
    child { node (b) {B} }
    child { node {C} };
  \node[draw=none,below=1mm of b] {some hint for B};
\end{tikzpicture}

\begin{tikzpicture}[
  every label/.append style={shape=rectangle},% these three options could have
  label distance=1mm,                         % been assigned to a \path
  every node/.append style={draw,circle},     % like in the example above.
]
  \node {A}
    child { node[label=below:some hint for B] {B} }
    child { node {C} };
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容