是否可以改变这个使用森林包的 MWE 来生成树,类似于下一个不使用森林的 MWE 生成的树?最后一级子节点必须堆叠在一起,边缘从父节点画到south
子west
节点。
在阅读了 Forest 手册后,我觉得该键where n children=0
应该能够提供帮助,并添加了带有注释的行,但无论grow
我提供什么参数,例如北/南,或 0-45-90-120 等,增长方向都没有改变。
解决方案可能位于 Forest 手册的第 10-12 页,但我却找不到 :(
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
where n children=0{draw=red,grow=120}{}, %<============
edge path={
\noexpand\path[\forestoption{edge}]
(!u.parent anchor) -- +(0,-15pt) -|
(.child anchor)\forestoption{edge label};
},
l sep=10pt,
}
[P
[N1
[N1C1]
[N1C2]
]
[N2
[N2C1]
[N2C2]
]
]
\end{forest}
\end{document}
没有森林(最低级边缘不同且节点堆叠):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}[
children/.style={grow=down,xshift=-0.2cm,
edge from parent path={(\tikzparentnode.201) |- (\tikzchildnode.west)}
},
level1/.style ={level distance=4em,anchor=west},
level2/.style ={level distance=8em,anchor=west},
level 1/.style={edge from parent fork down,sibling distance=5em,level distance=4em
}
]
\node[anchor=south](super){P}[]
child{node {N1}
child[children,level1] {node {N1C1}}
child[children,level2] {node {N1C2}}
}
child{node {N2}
child[children,level1] {node {N2C1}}
child[children,level2] {node {N2C2}}};
\end{tikzpicture}
\end{document}
答案1
选项where n children
是正确的选择。但是,设置grow
会改变子节点的增长方向,而不是节点本身。因此:
where n children=0{draw=red,for parent={grow'=120}}{},
(grow'
颠倒孩子的顺序。)
毋庸置疑,需要进一步定制才能实现下面非森林示例中所示的结果。事实上,N1 和 N2 的子节点在所需的方向上生长,但放置在节点的右侧,而不是下方……