Представление {леса} дерева снизу вверх в проекторе

Представление {леса} дерева снизу вверх в проекторе

Я хотел бы представить дерево с помощью forestпроектора, но часть за частью, начинаяСнизу, а затем восхождение на вершину.

Давайте рассмотрим простое дерево, подобное следующему:

\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}

Сначала я хотел бы представить нижнюю часть дерева (то есть, по сути, «Т» с «мандж» внизу). Затем ветвь выше (ВП с ребенком справа), затем уровень выше и так далее до вершины дерева (надеюсь, я понятно излагаю).

На основеэто обсуждение, я знаю, как сделать наоборот (сверху вниз). Но как мне сделать так, чтобы получилось так, как я описал?

решение1

Вы можете использоватьvisible onстиль, определенный Qrrbrbirlbelно вместо того, чтобы использовать его for tree, сделайте это for ancestors'. for ancestors'Стиль применяется к фактическому узлу и родителям, следовательно, visible on=<1->этот узел, родители и ребра между ними будут видны со слайда 1, но при применении visible on=<2->к родительским узлам они не будут видны до слайда 2.

Ребра между узлами и родителями также видны, но я не знаю, как изменить значение слайда в определении стиля. Решение, которое я могу предоставить, чтобы показывать ребра только тогда, когда показаны предки, — это вручную исправить видимость ребер с помощью

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

Вот полный код

\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}

введите описание изображения здесь

Примечание: поскольку forest v2.0, ключ for ancestors'следует изменить на for current and ancestors.

решение2

Вот вариантОтвет Игнасикоторый обеспечивает show up treeстиль для постепенного раскрытия деревьев вверх. Этот стиль также иллюстрирует способ заставить края появляться вместе с их родителями при передаче одной спецификации наложения, а не вместе с их детьми, что Игнаси предложил обрабатывать путем передачи двух разных спецификаций наложения.

\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>показать дерево</code>

Связанный контент