降低森林中的层高(以及水平间距)

降低森林中的层高(以及水平间距)

对于熟悉 TikZ 的人来说,这可能是一个愚蠢的问题,但我不熟悉 TikZ,只想创建一些简单的树结构。希望能快速解决。

我的树通常没有内部节点上的标签,只有叶子。我尝试了这样的 qtree:

{\newcommand{\qleafhook}{\scriptsize}
\Tree [.
[ [ 0 1 ] [ 2 3  ] ]
[ [ 4 [ 5 6 ] ] [ [ 7 8 ] [ 9 10 ] ] ]
]
}

非常好,几乎就是我想要的,除了我想让同一深度的节点水平对齐,即,我只想要这里两个叶级别:一个用于 0 到 4(深度为 3),另一个用于 5 到 10(深度为 4)。

qtree 版本

qtree 似乎不是为解决这个问题而设计的,所以我转而尝试使用 forest。我很快就得到了这个:

{\scriptsize
\begin{forest}
  [, for tree={parent anchor=north, child anchor=north}
  [ [ [0] [1] ] [ [2] [3]  ] ]
  [ [ [4] [ [5] [6] ] ] [ [ [7] [8] ] [ [9] [10] ] ] ]
  ]
\end{forest}
}

这正是我想要的,除了巨大的,为不存在的边缘标签提供了大量空间,并且水平空间也比我想要的更多。

在此处输入图片描述

有没有简单的方法可以解决这个问题?当我摆弄和ll sep,它会破坏我想要的垂直对齐,而且效果也不大。我知道如果我深入研究 Forest 和/或 TikZ 手册,我就能找到如何做到这一点,但我希望我遗漏了一些相对简单的东西,有人可以指出来。

答案1

减少水平距离最简单的方法可能是添加l+=<something negative>,但这不允许您任意缩小距离。为了改进这一点,您可以将这些选项传递给孩子

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={parent anchor=north, child anchor=north,font=\scriptsize,fit=tight,
for children={l sep-=1.5em,l-=1.5em}}
  [
  [ [ [0] [1] ] [ [2] [3]  ] ]
  [ [ [4] [ [5] [6] ] ] [ [ [7] [8] ] [ [9] [10] ] ] ]
  ]
\end{forest}
\end{document}

在此处输入图片描述

如果您想要更接近第一张照片,请修复边缘角度。

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={parent anchor=north, child anchor=north,font=\scriptsize,fit=tight,
calign=fixed edge angles,calign angle=70,
for children={l sep-=2em,l-=2em}}
  [
  [ [ [0] [1] ] [ [2] [3]  ] ]
  [ [ [4] [ [5] [6] ] ] [ [ [7] [8] ] [ [9] [10] ] ] ]
  ]
\end{forest}
\end{document}

在此处输入图片描述

相关内容