为森林中的儿童对齐边缘路径

为森林中的儿童对齐边缘路径

我正在尝试使用森林对齐分类法的边缘路径。我查看了很多示例和文档,但没有找到。我的知识tikz仍然非常有限。

平均能量损失

这是 MWE。重要的是,第 1 级的子元素具有不同的宽度,这导致路径具有这种不光彩的方面。

\documentclass{minimal}

\usepackage[edges]{forest}

\begin{document}
\begin{forest}
    forked edges,
    for tree={
        grow=east,
        parent anchor=east,
        child anchor=west,
        align=center,
        anchor=base west,
        l sep+=10pt,
        tier/.pgfmath=level(),
        for root={
            rectangle,
            draw,
            parent anchor=east,
            },
        }
    [Taxonomy of Blah
        [Blah
            [Blah blah blah]
            [Blah]
            [Blah]
        ]
        [Blah blah blah
            [Blah]
            [Blah]
        ]
    ]
\end{forest}

\end{document}

输出

这是我目前所拥有的,以及我尝试用红色实现的目标。

电流输出

答案1

edge path'这需要在 的定义上有所不同forked edge'(或手动应用)。我们希望从子节点开始,向左edge path'移动一点( ),然后垂直+水平移动到父节点。fork sep

我还擅自对代码进行了一些清理。首先,for root在 a 内部for tree没有任何意义,而且实际上很危险,因为给定的键会被执行多次;实际上,for root是多余的,因为树序言中给出的所有键都会自动应用于根节点。其次,没有必要设置parent anchorchild anchor。第三,align=center当每个节点都包含一行时,不需要 ;为了实现使节点更高的意外效果,请使用inner ysep(或s sep,以获得类似的效果)。最后,.option比 更快.pgfmath

\documentclass{minimal}

\usepackage[edges]{forest}

\forestset{
  forked edge'/.style={
    edge={rotate/.option=!parent.grow},
    edge path'={
      (.child anchor)
      -- ++(-\forestoption{fork sep},0)
      |- (!u.parent anchor)
    },
  },
}

\begin{document}
\begin{forest}
  forked edges,
  for tree={
    grow=east,
    inner ysep=1.2ex, 
    anchor=base west,
    l sep+=2em,
    fork sep=1.5em,
    tier/.option=level,
  },
  rectangle,
  draw,
  parent anchor=east,
  [Taxonomy of Blah
    [Blah
      [Blah blah blah]
      [Blah]
      [Blah]
    ]
    [Blah blah blah
      [Blah]
      [Blah]
    ]
  ]
\end{forest}

\end{document}

相关内容