![怎样才能在森林中的整棵树周围画一个圆圈?](https://linux22.com/image/302601/%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E5%9C%A8%E6%A3%AE%E6%9E%97%E4%B8%AD%E7%9A%84%E6%95%B4%E6%A3%B5%E6%A0%91%E5%91%A8%E5%9B%B4%E7%94%BB%E4%B8%80%E4%B8%AA%E5%9C%86%E5%9C%88%EF%BC%9F.png)
由于某些我无法辨别的原因,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}