让孩子在森林里围绕父母

让孩子在森林里围绕父母

我怎样才能将DanEveFrank放在母节点下?我尝试更改锚点和级别距离,但无法将这些子节点放在与父节点相同的水平面上。

我更喜欢本地解决此问题的解决方案,即向节点添加参数而不是更改森林的全局设置,因为我有一个基于此森林设置的预定义宏。

在此处输入图片描述

梅威瑟:

\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={  calign = first,
            grow=west,
            inner sep=0,
            outer sep=0,
            child anchor=east,
            l sep=5mm,
            s sep=8mm,
            anchor=north east
         }
[\begin{tabular}{l}A very wide and\\
tall parent node that\\ 
needs to have\\ 
its choldren surrounded\\
from left and bottom
\end{tabular}
 [Ann]
 [Bill]
 [Carl]
 [Dan]
 [Eve]
 [Frank]
]         
\end{forest}
\end{document}

答案1

如果这是一棵大树的一部分,那么用 Forest 来做这件事情也并不为过。但是,如果你的树仅限于这种结构,那么 TiZ 是一个更好的选择,因为无论如何你基本上都必须手动定位节点。

请注意,tabular森林树中永远不需要 。只需使用align=<tabular specification>。无论如何,您都会得到一个带有 的表格align

\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={
    calign child = 2,
    s sep'=8mm,
  },
  grow=-125,
  before drawing tree={
    for children={
      if={ > O_< {n}{4} }{x/.option=!u3.x}{y/.option=!u4.y}
    },
  },
  [A very wide and\\tallparent node that\\needs to be\\surrounded by its children\\from left and bottom, align=left
    [Ann]
    [Bill]
    [Carl]
    [Dan]
    [Eve]
    [Frank]
 ]         
\end{forest}
\end{document}

位于根周围的节点

您可以根据需要调整生长角度calign child和/或s sep'。如果您不想颠倒子项的顺序,请使用grow'而不是grow

就我个人而言,如果这是我所需要的结构,我会倾向于做更多类似的事情:

节点位于根部周围,另行设计

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \node [align=center] (r) {A very wide and\\tall parent node that\\needs to be surrounded\\by its children from\\left and bottom};
  \foreach \i  [count=\j from 0, evaluate=\j as \k using {180+(18*\j)}] in {Ann,Bill,Carl,Dan,Eve,Frank} \draw (r) -- +(\k:30mm) node [anchor={180+\k}] {\i};
\end{tikzpicture}
\end{document}

相关内容