Presentando un árbol {bosque} de abajo hacia arriba en Beamer

Presentando un árbol {bosque} de abajo hacia arriba en Beamer

Me gustaría presentar un árbol con forestin beamer, pero partes tras partes, empezandodesde el fondo, y luego ascenso a la cima.

Entonces consideremos un árbol simple como el siguiente:

\documentclass{beamer}
\usepackage{forest}

\begin{document}

\begin{frame}
  \begin{forest}
    [VP, calign=last
      [{[ajout]}\\\textit{rapidement}, 
      align=center,
      base=top]
      [VP, calign=first
        [VP, calign=first
          [V\\\textit{mange}, align=center,base=top]
          [{[compl]}\\\textit{une orange}, align=center,base=top]
        ]
        [{[ajout]}\\\textit{dans la cuisine}, align=center,base=top]
      ]
    ]
  \end{forest}
\end{frame}

\end{document}

Primero me gustaría presentar la parte inferior del árbol (básicamente la "T" con la "sarna" debajo). Luego la rama de arriba (la VP con el niño a la derecha), luego el nivel de arriba, y así hasta la cima del árbol (espero haber sido claro).

Residencia enesta discusión, Sé hacerlo al revés (de arriba a abajo). Pero ¿cómo puedo hacer para lograrlo como lo describí?

Respuesta1

Puedes usarvisible onestilo definido por Qrrbrbirlbelpero, en lugar de usarlo for tree, hazlo for ancestors'. for ancestors'El estilo se aplica al nodo y a los padres reales, por lo tanto, visible on=<1->significa que este nodo, los padres y los bordes entre ellos serán visibles desde la diapositiva 1, pero si se aplica visible on=<2->a los nodos principales, no serán visibles hasta la diapositiva 2.

Los bordes entre los nodos y los padres también son visibles, pero no sé cómo cambiar el valor de la diapositiva en la definición de estilo. La solución que puedo proporcionar para mostrar los bordes solo cuando se muestran los antepasados ​​es corregir manualmente la visibilidad de los bordes con

[{[ajout]}\\\textit{dans la cuisine}, align=center, visible on=<2->,edge={/tikz/visible on=<3->}]

Aquí está el código completo.

\documentclass{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{
  visible on/.style={
    for ancestors'={
      /tikz/visible on={#1},
      edge={/tikz/visible on={#1}}}}}

\begin{document}
\begin{frame}[plain]{Same with forest}
  \begin{forest}
    [VP, calign=last, visible on=<4->
      [{[ajout]}\\\textit{rapidement}, 
      align=center,
      base=top, visible on=<3->, ]
      [VP, calign=first, visible on=<3->, 
        [VP, calign=first, visible on=<2->, 
          [V\\\textit{mange}, align=center,base=top, visible on=<1->, ]
          [{[compl]}\\\textit{une orange}, align=center,base=top, visible on=<1->, ]
        ]
        [{[ajout]}\\\textit{dans la cuisine}, align=center, visible on=<2->,]
      ]
    ]
  \end{forest}

\end{frame}
\end{document}

ingrese la descripción de la imagen aquí

Nota: desde forest v2.0, la clave for ancestors'debe cambiarse a for current and ancestors.

Respuesta2

Aquí hay una variación deLa respuesta de Ignaciolo que proporciona un show up treeestilo para revelar árboles de forma incremental hacia arriba. Este estilo también ilustra una forma de hacer que los bordes aparezcan con sus padres al pasar una única especificación de superposición, en lugar de con sus hijos, lo que Ignasi sugirió manejar pasando dos especificaciones de superposición diferentes.

\documentclass{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{
  show up tree/.style={
    before typesetting nodes={
      tempcounta/.max={level}{tree},
      tempcounta'+=1,
      for tree={
        /tikz/visible on/.process={ ROw2+nw {tempcounta}{level}{##1-##2}{<##1->} },
        edge+/.process={ ROw2+nw {tempcounta}{level}{(##1-##2)+1} {/tikz/visible on={ {<##1->} } }},
      }
    }
  }
}

\begin{document}
\begin{frame}[plain]{Same with forest}
  \begin{forest}
    show up tree
    [VP, calign=last, 
      [{[ajout]}\\\textit{rapidement}, 
      align=center,
      base=top,  ]
      [VP, calign=first,  
        [VP, calign=first,  
          [V\\\textit{mange}, align=center,base=top,  ]
          [{[compl]}\\\textit{une orange}, align=center,base=top,  ]
        ]
        [{[ajout]}\\\textit{dans la cuisine}, align=center, ]
      ]
    ]
  \end{forest}

\end{frame}
\end{document}

<code>mostrar árbol</code>

información relacionada