我基本上是想重新创建鸟类分类图,如图所示这个维基百科页面。
尝试使用后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)
从父节点创建小水平线并|-
制作垂直线。
我还是不知道线的两端(从垂直线到子节点)是如何绘制的......