怎样才能在森林中的整棵树周围画一个圆圈?

怎样才能在森林中的整棵树周围画一个圆圈?

由于某些我无法辨别的原因,tikz={\node [draw,circle,fit to tree]{};}如果节点嵌入在一棵更大的树中,则使用在树中的节点周围画一个圆圈可以按预期工作。

但是,如果你想在整棵树周围画一个圆圈,这种方法就行不通了:

在此处输入图片描述

我怎样才能用 围绕整棵树绘制一个圆圈forest

平均能量损失

\documentclass{article}
\usepackage{forest}
\forestset{sn edges/.style={for tree={parent anchor=south, child anchor=north}}}
\begin{document}
\begin{forest} baseline, sn edges
[w
    [x]
    [y, s sep=20pt
        [z]
        [a,tikz={\node [draw,circle,fit to tree]{};}
            [b]
            [c,circle,draw]
        ]
    ]
]
\end{forest}
\vspace{5em}
\begin{forest} baseline, sn edges
[a,tikz={\node [draw,circle,fit to tree]{};}
    [b]
    [c,circle,draw]
]
\end{forest}
\end{document}

答案1

一种选择是命名\node树中的一些特殊 s (根和最低的 s ),然后使用fit带有循环的库\node

在此处输入图片描述

示例代码:

\documentclass{article}
\usepackage{forest}
\usetikzlibrary{fit}

\begin{document}

\begin{forest}
[a,name=root
  [b
    [c
      [d,name=lowestl]
      [e]
    ]
    [f ]
  ]
  [g
    [h]
    [i
      [j]
      [k,name=lowestr]
    ]
  ]
]
\node[draw,circle,fit={(root) (lowestl) (lowestr)}] {};
\end{forest}

\end{document}

答案2

您可以重新定义树的绘制阶段,将树保存在一个框中,然后在一个带圆圈的节点中绘制树。

这样做的好处是,您可以为此定义一次样式,然后将其应用于树,而不必考虑它们的布局来确定要命名哪些节点。

\usepackage{forest}
\forestset{
 sn edges/.style={for tree={parent anchor=south, child anchor=north}},
 circle tree/.style={
  draw tree stage/.style={
    for root'={
      draw tree box=0,
      draw tree,
      TeX={\tikz{\node [draw, circle] {\box0};}},
    }}}}
\begin{document}
\begin{forest} baseline, sn edges, circle tree
[w
    [x]
    [y, s sep=20pt
        [z]
        [a
            [b]
            [c,circle,draw]
        ]
    ]
]
\end{forest}
\vspace{5em}
\begin{forest} baseline, sn edges, circle tree
[a
    [b]
    [c,circle,draw]
]
\end{forest}
\end{document}

绕树

相关内容