我试图在用 种植树的过程中中途改变生长方向forest
。以下是 MWE:
\documentclass{standalone}
\usepackage{forest}
\useforestlibrary{edges}
\forestapplylibrarydefaults{edges}
\begin{document}
\begin{forest}
forked edges,
for tree={grow'=east}
[R
[1 [a] [b]]
[2 [c] [d]]
[3 [e] [f]]
[4 [g] [h]]
[5 [i] [j]]
[6 [k] [l]]]
\end{forest}
\end{document}
结果:
我希望将子节点4
、5
和6
移到R
左侧。这样每侧就有 3-3 个子节点。有没有办法做到这一点,而无需3
使用before ...
选项来修改子节点的位置?我希望左侧是对称的。
答案1
更新 2:
一个更通用的解决方案是将其包装成一个名为的新选项multiple directions
,它不需要手动放置节点可以在这里找到。
更新的解决方案:
经过进一步思考,我意识到,这可以通过在R
根使用处放置两个空子节点before computing xy={l=0,s=0}
并设置grow
其子树的方向来实现,而无需手动调整。这可以放入主for tree
使用中if level=1{<do this>}{<else do this>}
以下是代码:
\documentclass{article}
\usepackage{forest}
\useforestlibrary{edges}
\begin{document}
\begin{forest}
for tree={forked edge, minimum height=3.7ex, minimum width=1em, anchor=center,
if level=1{no edge, before computing xy={l=0,s=0}}{}}
[R,
[, for tree={grow'=east}
[1 [a] [b]]
[2 [c] [d]]
[3 [e] [f]]]
[, for tree={grow=west}
[4 [g] [h]]
[5 [i] [j]]
[6 [k] [l]]]]
\end{forest}
\end{document}
旧解决方案:
不幸的是,forest
并非设计为grow
在不同方向上有子树。必须进行一些手动调整才能使其工作。您需要1
、2
、3
节点具有与4
、5
、6
节点不同的父节点。因此,为R
节点提供两个空子节点,一个在grow
西边,一个在grow'
东边,并将 设置s sep
为 0。请注意,您需要设置grow'=south
节点R
,以便第二个子树 (4,5,6) 在左侧,第一个子树 (1,2,3) 在右侧。
R
然后通过使用 降低节点位置来调整节点的位置y-=3cm
。为了使左子树中的节点与右子树中的节点对齐,所有节点必须具有相同的高度,因此将 添加minimum height=3.5ex
到每个节点。
\documentclass{article}
\usepackage{forest}
\useforestlibrary{edges}
\begin{document}
\begin{forest}
grow'=south, for tree={forked edge, minimum height=3.7ex,anchor=center}
[R, s sep=0cm, before drawing tree={y-=3cm}
[, for tree={grow'=east}, no edge
[1 [a] [b]]
[2 [c] [d]]
[3 [e] [f]]]
[, for tree={grow=west}, no edge
[4 [g] [h]]
[5 [i] [j]]
[6 [k] [l]]]]
\end{forest}
\end{document}