一般来说,有什么好方法可以得到一棵树,其中节点也是一棵树?
值得注意的是,左树有两个节点本身就是树,右树有一个节点。这些节点周围还有一个括号。如果用字母或数学对象替换这些节点,则可以直接使用 forest 包或 tikz。在 forest 手册中,似乎支持将节点作为表等,但我无法将节点作为 forest 对象。
这是左树的示例文档,其中树节点被 A 和 B 替换。首先用森林,然后是 tikzpicture。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{forest}
\begin{document}
\begin{forest}
[A
[{$(s_L,b_L)$}]
[B
[{$(s_R,b_R)$}]
]
]
\end{forest}
\begin{tikzpicture}
\node {A}
child {node {$(s_L,b_L)$} }
child {node {B}
child {node {$(s_R,b_R)$} }
};
\end{tikzpicture}
\end{document}
采取的方法:嵌入 tikz。请注意,必须在嵌入节点中修改比例参数。此外,我无法在树节点周围添加括号,而是选择了一个方框。
\begin{tikzpicture}
\node[draw] { \input{temp1.tikz} }
child {node (a) {$(s_L,b_L)$} }
child {node[draw] { \input{temp2.tikz} }
child {node {$(s_R,b_R)$} }
};
\end{tikzpicture}
% temp1.tikz
\begin{tikzpicture}[scale=0.4]
\node {$K_1$}
child {node {$s_L$} }
child {node {$s_R$} };
\end{tikzpicture}
% temp2.tikz
\begin{tikzpicture}[scale=0.4]
\node {$K_2$}
child {node {$s_R$} };
\end{tikzpicture}
答案1
这是使用 的方法\savebox
。感谢 Ulrike Fischer 在聊天中讨论数学基线。我将每个树子节点都放在单独的保存框中。可以为后续树重新分配这些子节点。
\documentclass{article}
\usepackage[linguistics]{forest}
\forestset{math tree/.style={for tree=math content},
saved tree/.style={math tree,baseline, anchor=center}}
\newsavebox{\Ki}
\newsavebox{\Kii}
\savebox{\Ki}{$\left[\raisebox{.5\depth}{\begin{forest},saved tree[K_1 [s_L ] [s_R ]]\end{forest}}\right]$}
\savebox{\Kii}{$\left[\raisebox{.5\depth}{\begin{forest},saved tree[K_2 [s_R ]]\end{forest}}\right]$}
\begin{document}
\begin{forest}math tree
[\usebox{\Ki}
[{(s_L,b_L)}]
[\usebox{\Kii}
[{(s_R,b_R)}]
]
]
\end{forest}
\end{document}
使用上面的代码,节点在中心对齐,这会导致分支不均匀。如果您希望它们在顶部均匀对齐,您可以saved tree
完全放弃样式,只需添加anchor=north
样式即可math tree
:
\documentclass{article}
\usepackage[linguistics]{forest}
\forestset{math tree/.style={for tree={math content,anchor=north}}}
\newsavebox{\Ki}
\newsavebox{\Kii}
\savebox{\Ki}{$\left[\raisebox{.5\depth}{\begin{forest},math tree[K_1 [s_L ] [s_R ]]\end{forest}}\right]$}
\savebox{\Kii}{$\left[\raisebox{.5\depth}{\begin{forest},math tree[K_2 [s_R ]]\end{forest}}\right]$}
\begin{document}
\begin{forest}math tree
[\usebox{\Ki}
[{(s_L,b_L)}]
[\usebox{\Kii}
[{(s_R,b_R)}]
]
]
\end{forest}
\end{document}