深度优先逐步构建森林树

深度优先逐步构建森林树

目前使用森林在投影仪上显示 Tableaux 树。在某些情况下,我希望以深度优先的逐步动画来构建树。

这个想法是从可见的根开始,然后在每个步骤中节点开始出现。

因此我正在使用相关解决方案进行一些测试像这样(使用投影仪覆盖森林生成的树)由@Qrrbrbirlbel 提出,我认为非常干净:

\documentclass[xcolor={table, dvipsnames}]{beamer}
\usepackage{forest}

\setbeamertemplate{navigation symbols}{} %Remove navigation bar
\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
    },
}
\forestset{
  closed/.style={      
   label=below:$\mathlarger{\mathlarger{\mathlarger{\times}}}$  
  },
  open/.style={      
   label=below:$\mathlarger{\mathlarger{\mathlarger{\odot}}}$
  },
  visible on/.style={
    for tree={
      /tikz/visible on={#1},
      edge+={/tikz/visible on={#1}}}}}
\begin{document}
\begin{frame}
\begin{forest}
  [A,for children={visible on=<2->}
    [B,for children={visible on=<3->}    % PROBLEM HERE, IT SHOULD BE ONLY FOR FIRST CHILD
      [C, for children={visible on=<4->}
        [D, open,for children={visible on=<5->}]
      ]
      [E,for children={visible on=<6->}
        [F, closed,for children={visible on=<7->}]
      ] 
    ]
  ]
\end{forest}
\end{frame}
\end{document}

问题是,在第二步中,“visible on”属性被传递给子节点 C 和 E,并且它们同时出现,但 E 应该只出现在左分支上的叶子 D 之后。我正在阅读手册的第 3.3.6 节 Propagators forest,我(天真的?)的想法是只传播到第一个子节点,但我看不出有任何方法可以做到这一点。

另一个问题是,我的树样式openclosed创建在树上的特殊叶子上放置标签应该与节点一起隐藏。

任何帮助定制的帮助都将不胜感激。

答案1

欢迎使用 TeX-SE!我添加了visible on=<5->,节点E并稍微更改了openclosed样式。

\documentclass[xcolor={table, dvipsnames}]{beamer}
\usepackage{forest}
\usepackage{relsize}
\setbeamertemplate{navigation symbols}{} %Remove navigation bar
\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
    },
    %label visible on/.code={\tikzset{every label/.append style={visible on=#1}}}
}
\forestset{
  closed/.style={      
   label={[#1]below:$\mathlarger{\mathlarger{\mathlarger{\times}}}$ } 
  },
  open/.style={      
   label={[#1]below:$\mathlarger{\mathlarger{\mathlarger{\odot}}}$}
  },
  visible on/.style={
    for tree={
      /tikz/visible on={#1},
      edge+={/tikz/visible on={#1}}}}}
\begin{document}
\begin{frame}
\begin{forest}
  [A,for children={visible on=<2->}
    [B,for children={visible on=<3->}    % PROBLEM HERE, IT SHOULD BE ONLY FOR FIRST CHILD
      [C, for children={visible on=<4->}
        [D,open={visible on=<4->},for children={visible on=<5->}]
      ]
      [E,visible on=<5->,for children={visible on=<6->}
        [F,visible on=<6->, closed={visible on=<6->},for children={visible on=<7->}]
      ] 
    ]
  ]
\end{forest}
\end{frame}
\end{document}

在此处输入图片描述

相关内容