带森林的方形边和水平树形图

带森林的方形边和水平树形图

我基本上是想重新创建鸟类分类图,如图所示这个维基百科页面

尝试使用后Newicktree 包裹有一段时间,我决定迁移到forest

我正在尝试制作一个水平和平方边树,结合来自的答案森林包中的方形边我们如何创建这个树形图?

这是我当前的代码:

\documentclass[tikz]{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
for tree={
    edge path={\noexpand\path[\forestoption{edge}](\forestOve{\forestove{@parent}}{name}.parent anchor) -- +(0,-12pt)-|     (\forestove{name}.child anchor)\forestoption{edge label};},
    grow=0,
    reversed, % tree direction
    parent anchor=east,
    child anchor=west, % edge anchors
}
[VP
    [DP,tier=word]
    [V’
        [V,tier=word]
        [DP,tier=word]
    ]
]
\end{forest}

\end{document}

正如预期的那样,结果并不理想:

图片

我猜我应该修改-- +(0,-12pt)-|,但我不知道该怎么做!非常感谢您的帮助!

答案1

您的答案会起作用,但不必要地冗长,因为您只需使用相对节点名称来指定即可edge path

      \noexpand\path[\forestoption{edge}](!u.parent anchor) -- +(5pt,0) |- (.child anchor)\forestoption{edge label};},

(!u)指的是当前节点的父节点。()指的是当前节点。

您还可以在序言中对齐整棵树的终端节点:

    if n children=0{tier=word}{}

但将节点固定在左侧可以使树更加整洁:

    anchor=west,

结果:

更整洁的树

完整代码:

\documentclass[tikz]{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
for tree={
    edge path={
      \noexpand\path[\forestoption{edge}](!u.parent anchor) -- +(5pt,0) |- (.child anchor)\forestoption{edge label};},
    grow=0,
    reversed, % tree direction
    parent anchor=east,
    child anchor=west, % edge anchors
    anchor=west,
    if n children=0{tier=word}{}
}
[VP
    [DP]
    [V’
        [V]
        [DP]
    ]
]
\end{forest}
\end{document}

答案2

其实,tikz并没有那么糟糕……

在仔细查看了手册并进行了一些测试之后,以下是-- +(8pt,0) |-完整版本:

edge path={\noexpand\path[\forestoption{edge}] (\forestOve{\forestove{@parent}}{name}.parent anchor) -- +(8pt,0) |- (\forestove{name}.child anchor)\forestoption{edge label};}

图片

据我所知,--是画线,+(x,y)是线的长度,-||-垂直线是垂直或水平的。因此,-- +(8pt,0)从父节点创建小水平线并|-制作垂直线。

我还是不知道线的两端(从垂直线到子节点)是如何绘制的......

相关内容