tikz 树中级别之间的节点距离相同吗?

tikz 树中级别之间的节点距离相同吗?

我想使用 tikz 绘制一棵树,但我希望连续级别中的节点之间的垂直距离相同,而不管节点的大小。

例如:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[level distance=1cm]
\path node {a}
      child {
        node {b}
        child {
          node [align=center] {c \\ d}
          child {
            node {e}
          }
        }
      };
\end{tikzpicture}
\end{document}

我知道这是一个愚蠢的树的例子,因为它没有“分支”,但它更好地说明了我所指的问题。我必须制作的实际树最终分支。但无论如何,产生的输出如下所示:

在此处输入图片描述

其中 a—b 之间的边比 b-cd 之间的边长。

我希望父节点底部与其子节点顶部之间的距离在整个树中保持不变,无论节点的(垂直)大小如何。在此示例中,所有边都应显示相同的大小。

有没有办法使用 tikz 轻松实现这一点?

答案1

Tikz 以这样的方式构建树:其长度是点和子节点锚点level distance之间的距离。growth parent anchor

默认情况下, 为growth parent anchorcenter子节点的锚点是默认节点锚点,也是center。因此,节点中心之间的距离为 1cm。

为了按照您的要求使节点边缘之间的距离为 1cm,您必须设置growth parent anchor为,并将树的所有节点的south默认值设置为。以下代码实现了这个想法(并添加了一些蓝线来测试它是否有效)。anchornorth

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[level distance=1cm, growth parent anchor={south}, nodes={anchor=north}]
\path node (a) {a}
      child {
        node (b) {b}
        child {
          node [align=center] (cd) {c \\ d}
          child {
            node (e) {e}
          }
        }
      };
  % Testing
  \foreach \n in {a,b,cd} {
     \draw[blue,<->] (\n.south)  ++(2mm,0) -- ++(0, -1cm) node[midway, right]{1cm};
  }
\end{tikzpicture}
\end{document}

成功了!查看结果:

    输出

相关内容