将孩子排列在森林的多个层级上

将孩子排列在森林的多个层级上

在下面的树中,我希望右下角的节点(在基础层中)直接位于其父节点下方,但它似乎会自动与上层中的兄弟节点对齐。我尝试了几种对齐选项,但我不想更改父节点的位置,只想更改底部子节点的位置。

有没有办法只调整这个孩子的水平定位?

\documentclass{beamer}
\usepackage{forest}

\begin{document}
\begin{frame}
  \begin{forest}
    for tree = {
        draw, circle,
        s sep = 6mm
      }
      [
        [ [[,tier=base]] [] ]
        [ [] [,tier=base] [] ]
      ]
  \end{forest}
\end{frame}
\end{document}

二叉树

答案1

子节点的水平位置(或者更准确地说,它相对于父节点在维度中的相对位置,垂直于树的生长方向)可以使用选项 进行调整s;请参阅森林手册第 3.7.2 节(节点位置)。特别是,s=0将它直接定位在父节点(锚点)下方。

但是,要使此选项生效,必须在 Forest 执行其定位魔法之后(在 中pack stage)和计算节点的绝对坐标之前(在 中compute xy stage)进行更改;请参阅第 3.4.1 节(阶段)。这可以使用时间传播器来实现before computing xy;请参阅第 3.4.2 节(时间传播器)。

为了实现 OP 的目标,我们必须为有问题的节点配备before computing xy={s=0},如下所示。

\documentclass{beamer}
\usepackage{forest}

\begin{document}
\begin{frame}
  \begin{forest}
    for tree = {
        draw, circle,
        s sep = 6mm
      }
      [
        [ [[,tier=base]] [] ]
        [ [] [,tier=base, before computing xy={s=0}] [] ]
      ]
  \end{forest}
\end{frame}
\end{document}

相关内容