这是 TikZ 错误吗?

这是 TikZ 错误吗?

我有这个 TikZ 代码:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture} [
    level 1/.style={sibling distance = 2cm, level distance = 1cm},
    level 2/.style={sibling distance = 1cm},
    level 3/.style={sibling distance = 1cm},
    every node/.style={circle, draw=black, minimum size = 0.5cm},
    edge from parent/.style={red,thick,draw}
  ]

  \node{} 
  child { node {}
    child { node {} }
    child { node {}
      child { node {} }
      child { node {} }
    }
  }
  child { node {}
    child { node {} }
    child { node {} }
  }
  child { node {} }
  ;

\end{tikzpicture}
\end{document}

它产生了这样的图片:

渲染有问题

底部节点为什么较粗?

答案1

样式会继承到子节点。手册在第 18.6 节末尾的注释中提到了这一点。Tikz 的其他地方也存在这种情况。

在这种情况下,解决方案是通过指定“每个节点”的样式来覆盖它,即

every node/.style={circle, draw=black, thin, minimum size = 0.5cm}

请注意,“细”实际上是正常的线宽。

编辑:由于我在查找内容时收到了回复,所以我想通过引用手册中的相关部分来提供更多信息;

除了插入来自父路径的边之外,来自父路径的边操作还有另一个效果:选项直接插入到来自父路径的边之前,并且在插入路径之前还会安装以下样式:

注意:在添加父路径边之前插入的选项适用于整个子路径。因此,不可能用红色绘制一个圆圈作为子路径的一部分,然后用蓝色绘制父路径的边。但是,与往常一样,子节点是一个节点,可以用完全不同的方式绘制。

对于有关修改特定路径的后续问题。我会将手册解读为您必须手动将样式应用于节点。

\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture} [
    level 1/.style={sibling distance = 2cm, level distance = 1cm},
    level 2/.style={sibling distance = 1cm},
    level 3/.style={sibling distance = 1cm},
    every node/.style={circle, draw=black, minimum size = 0.5cm}
   ]
  \begin{scope}[xshift=6cm, edge from parent/.style={red,thin,draw}]
    \node{}
    child { node {}
      child { node {} }
      child { node {} edge from parent[thick]
        child { node[thin] {} } % Overriding the inherited thick property.
        child { node[thin] {} } % Overriding the inherited thick property.
       }
    }
    child { node {}
      child { node {} }
      child { node {} }
    }
    child { node {} }
    ;
  \end{scope}
\end{tikzpicture}
\end{document}

答案2

问题是由命令thick中的参数引起的edge from parent.style。如果你在样式thin规范中添加every node该参数,问题就会消失。

\begin{tikzpicture} [
    level 1/.style={sibling distance = 2cm, level distance = 1cm},
    level 2/.style={sibling distance = 1cm},
    level 3/.style={sibling distance = 1cm},
    every node/.style={circle, draw=black,thin, minimum size = 0.5cm}
  ]
...

相关内容