我想将三层扩展到在这里回答变成四层树。变成下图所示的内容。这是此处提供的 MWE。问题看起来很简单,但在发布此问题之前,我已经尝试了几乎所有我能尝试的
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
draw,
grow'=0,
},
forked edges,
where n children=0{}{rotate=90},
[Root
[Branch A
[Branch A1
]
[Branch A2
]
]
[Branch B
[Branch B1
]
[Branch B2
]
]
]
\end{forest}
\end{document}
答案1
像这样?
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
grow'=east,
draw,
anchor=west,
forked edges,
where n children=2{rotate=90, anchor=center}{}, % <---
}
[Root
[Branch A
[Branch A1
[Sub-branch a1]
]
[Branch A2
[Sub-branch a2]
]
]
[Branch B
[Branch B1
[Sub-branch b1]
]
[Branch B2
[Sub-branch b2]
]
]
]
\end{forest}
\end{document}
代码中(与你的相比)被where n children=0{}{rotate=90}
替换为where n children=2{rotate=90, anchor=center}{},
答案2
我原来的答案旋转除最后一个节点之外的所有节点的原因是因为它使用了
where n children=0{}{}
条件决定是否旋转。基本上,如果一个节点有子节点,它就会被旋转;如果它没有子节点(是叶子节点),它就不会被旋转。
有几种方法可以改变你的树。一种是旋转有 2 个或更多子节点的节点,如Zarko 建议。
另一种方法是旋转前两层(层0
和1
)中的节点。
where level<=1{}{}
第三种方法是创建一种样式,将其应用于您想要旋转的节点。
, <style name> % add to each node you want to apply <style name> to
在我的例子中,rot
定义为进行旋转,因此
, rot
被添加到三个要旋转的节点中。如果您希望能够扩展树并对要旋转的内容进行细粒度控制,这是最简单的解决方案。
下面的代码说明了这两种替代方法:
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\forestset{
rot/.style={rotate=90},
}
\begin{document}
\begin{forest}
for tree={
draw,
grow'=0,
},
forked edges,
where level<=1{rot}{},
[Root
[Branch A
[Branch A1 [Sub-branch A11]
]
[Branch A2 [Sub-branch A21]
]
]
[Branch B
[Branch B1 [Sub-branch B11]
]
[Branch B2 [Sub-branch B21]
]
]
]
\end{forest}
\begin{forest}
for tree={
draw,
grow'=0,
},
forked edges,
[Root, rot
[Branch A, rot
[Branch A1 [Sub-branch A11]
]
[Branch A2 [Sub-branch A21]
]
]
[Branch B, rot
[Branch B1 [Sub-branch B11]
]
[Branch B2 [Sub-branch B21]
]
]
]
\end{forest}
\end{document}
每种情况下的输出都是相同的: