
Я хотел бы представить дерево с помощью 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}