有什么方法可以将我的森林树设计成圆锥形状吗?
这是我目前得到的:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{float}
\usepackage[linguistics]{forest}
\usetikzlibrary{positioning,fit,calc,cd}
\begin{document}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\draw[dashed] (0,0) arc (170:10:2cm and 0.4cm)coordinate[pos=0] (a);
\draw (0,0) arc (-170:-10:2cm and 0.4cm)coordinate (b);
\draw (a) -- ([yshift=4cm]$(a)!0.5!(b)$) -- (b);
\end{tikzpicture}
\begin{forest}
[0[1[0[1\\ \vdots][1\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]][1[0\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]]
\end{forest}
\end{figure}
\end{document}
现在,我只需要两个图形以某种方式重叠。
答案1
使用tikzmark
,您可以在森林根部放置一个节点,然后从那里绘制圆锥体,并带有选项remember picture, overlay]
。
请注意,我没有做任何数学运算,只是随意画的。您显然可以定义一个“真实”圆锥体,但这取决于您到底需要什么。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{float}
\usepackage[linguistics]{forest}
\usetikzlibrary{positioning,fit,calc,cd,tikzmark}
\begin{document}
\begin{figure}[H]
\centering
\begin{forest}
[\subnode{ROOT}{0}
[1
[0
[1\\ \vdots]
[1\\ \vdots]
[2\\ \vdots]]
[2[0\\ \vdots]
]
]
[1
[0\\ \vdots]
[2\\ \vdots]]
[2
[0\\ \vdots]
]
]
\end{forest}
\begin{tikzpicture}[remember picture,overlay]
\path ($(ROOT)+(0,2)$) coordinate (S);
\draw (S) --++ (-60:8) coordinate (rbase)
(S) --++ (-120:8);
\draw (rbase) arc (-5:-175:4.01cm and 0.8cm);
\draw[dashed] (rbase) arc (5:175:4.01cm and 0.8cm);
\end{tikzpicture}
\end{figure}
\end{document}
答案2
SebGlav 的解决方案效果很好,但它有两个缺点。首先,由于 ,我们需要两个编译周期tikzmark
。其次,周围的文本可能会与锥体重叠。下面的替代解决方案利用了这样一个事实:你可以在树的最后一个右括号和 之后放置任何 TikZ 代码\end{forest}
。为了在下面的树周围绘制锥体,我使用了 OP 的树代码和来自的经过最低限度调整的 TikZ 锥体代码SebGlav 的回答(我只需要ROOT
在锥体的第一行中删除。树后面的 TikZ 代码应用于根注释的上下文中,就好像它是键的参数一样tikz
,因此相对节点()
指的是根节点。)
\documentclass{article}
\usepackage{tikz}
\usepackage{float}
\usepackage[linguistics]{forest}
\begin{document}
\begin{figure}[H]
\centering
\begin{forest}
[0[1[0[1\\ \vdots][1\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]][1[0\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]]
\path ($()+(0,2)$) coordinate (S);
\draw (S) --++ (-60:8) coordinate (rbase)
(S) --++ (-120:8);
\draw (rbase) arc (-5:-175:4.01cm and 0.8cm);
\draw[dashed] (rbase) arc (5:175:4.01cm and 0.8cm);
\end{forest}
\end{figure}
\end{document}