按照文档,使用tikz-qtree
包裹。以下代码说明了这一点:
\documentclass{standalone}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\tikzset{
edge from parent/.style={
draw,
edge from parent path={
(\tikzparentnode.south) -- (\tikzparentnode.south |- 0,-10pt -| \tikzchildnode) -- (\tikzchildnode)
}
}
}
\Tree [.ZZ
[.Bax
[.X
[.Y [.A ] [.B ] ]
[.Z [.C ] [.D ] ] ]
[.F
[.M [.E ] [.F ] ]
[.G [.G ] [.H ] ] ] ]
[.A
[.B
[.S [.I P R T V U ] [.J ] ]
[.I [.K ] [.L ] ] ]
[.M
[.L [.M ] [.N ] ]
[.A [.O ] [.P ] ] ] ] ]
\end{tikzpicture}
\end{document}
其输出为:
如何用forest
包裹?
答案1
虽然我仍然对 感到疑惑(\tikzparentnode.south |- 0,-10pt -| \tikzchildnode)
,但通常的 TikZ (和 ) 中的方法forest
甚至更容易理解一些 (至少对我来说):
edge path={\noexpand\path[\forestoption{edge}]
(\forestOve{\forestove{@parent}}{name}.parent anchor)
-- ([shift={(0,-10pt)}]
\forestOve{\forestove{@parent}}{name} -| \forestove{name})
-- (\forestove{name}.child anchor)
\forestoption{edge label};
}
线的弯折处10pt
从 向下移动parent -| child
。
代码
\documentclass[tikz,convert=false]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={%
% re-establishing the defaults:
child anchor=north,
parent anchor=south,
edge path={\noexpand\path[\forestoption{edge}]
(\forestOve{\forestove{@parent}}{name}.parent anchor)
-- ([shift={(0,-10pt)}]
\forestOve{\forestove{@parent}}{name} -| \forestove{name})
-- (\forestove{name}.child anchor)
\forestoption{edge label};
}
}
[ZZ
[Bax
[X
[Y [A ] [B ] ]
[Z [C ] [D ] ] ]
[F
[M [E ] [F ] ]
[G [G ] [H ] ] ] ]
[A
[B
[S [I [P][R][T][V][U]] [J ] ]
[I [K ] [L ] ] ]
[M
[L [M ] [N ] ]
[A [O ] [P ] ] ] ] ] ]
\end{forest}
\end{document}