森林 – 一半的树朝另一个方向生长

森林 – 一半的树朝另一个方向生长

我试图在用 种植树的过程中中途改变生长方向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}

结果:

MWE 的输出

我希望将子节点456移到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在不同方向上有子树。必须进行一些手动调整才能使其工作。您需要123节点具有与456节点不同的父节点。因此,为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}

相关内容