我想使用 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 anchor
。center
子节点的锚点是默认节点锚点,也是center
。因此,节点中心之间的距离为 1cm。
为了按照您的要求使节点边缘之间的距离为 1cm,您必须设置growth parent anchor
为,并将树的所有节点的south
默认值设置为。以下代码实现了这个想法(并添加了一些蓝线来测试它是否有效)。anchor
north
\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}
成功了!查看结果: