在一棵树中,如何拥有一个也是一棵树的节点?

在一棵树中,如何拥有一个也是一棵树的节点?

一般来说,有什么好方法可以得到一棵树,其中节点也是一棵树?

这是我想在乳胶中制作的特定图像: 在此处输入图片描述

值得注意的是,左树有两个节点本身就是树,右树有一个节点。这些节点周围还有一个括号。如果用字母或数学对象替换这些节点,则可以直接使用 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}

第二个代码的输出

相关内容