Forest 包 - 将节点放到尽可能低的层

Forest 包 - 将节点放到尽可能低的层

我有以下forest代码:

\documentclass{article}
\usepackage[linguistics]{forest}

\begin{document}

\begin{forest}
    for tree={
        if n children=0{
            font=\scshape,
            tier=terminal,
        }{},
    }
[Ġentertainment
    [Ġen
        [Ġ]
        [en
            [e]
            [n]
        ]
    ]
    [tertainment
        [tert
            [ter
                [t]
                [er
                    [e]
                    [r]
                ]
            ]
            [t]
        ]
        [ainment
            [ain
                [a]
                [in
                    [i]
                    [n]
                ]
            ]
            [ment
                [m]
                [ent
                    [en
                        [e]
                        [n]
                    ]
                    [t]
                ]
            ]
        ]
    ]
]
\end{forest}
\end{document}

其结果为以下树:

森林图

很明显,这有一些很长的线,但这并不是绝对必要的:例如,请注意左上角有一个节点“en”,右下角也有一个节点。左边的节点显然太高了(这是由于它与根的距离较小造成的)。下面是我绘制的一个例子,表示我希望“en”节点的位置:

森林图

我想做这个自动地对于所有节点(“er” 和 “in” 也是如此),保持叶子对齐。 这可能吗?

答案1

以下代码根据节点的“反向级别”自动分配层名称。叶子节点分配给 tier 0,其父节点分配给 tier 1,依此类推。

我们用 遍历树for tree children-first,先处理子节点,再处理父节点。聚合函数.max是一种计算tier分支节点的 的简单方法:它遍历children节点的 ,并计算它们的 的最大值tier加一;因为它用作tier( tier/.max) 的 pfgkeys 处理程序,所以它将结果分配给父级“层”。

\documentclass{article}
\usepackage[linguistics]{forest}

\begin{document}

\begin{forest}
    for tree={
        if n children=0{
            font=\scshape,
        }{},
    },
    for tree children-first={
      if n children=0{
        tier=0,
      }{
        tier/.max={1+tier}{children},
      },
    },
[Ġentertainment
    [Ġen
        [Ġ]
        [en
            [e]
            [n]
        ]
    ]
    [tertainment
        [tert
            [ter
                [t]
                [er
                    [e]
                    [r]
                ]
            ]
            [t]
        ]
        [ainment
            [ain
                [a]
                [in
                    [i]
                    [n]
                ]
            ]
            [ment
                [m]
                [ent
                    [en
                        [e]
                        [n]
                    ]
                    [t]
                ]
            ]
        ]
    ]
]
\end{forest}
\end{document}

结果树

相关内容