由于某些我无法辨别的原因,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}