Beamer 和“森林”:动态突出显示从根到树中节点的路径

Beamer 和“森林”:动态突出显示从根到树中节点的路径

我想在 Beamer 文档中动态突出显示从树的根部延伸的路径(使用forest动态突出显示从树的根(使用包定义)到特定节点的通过定义forest样式。下面是一个最小的非工作示例。

问题是该样式onslide是在 TikZ 中定义的,而 TikZ 无法识别path highlight我定义的森林样式。我也无法path highlight在 TikZ 中定义该样式,因为 TikZ 不认识和forest这样的样式。edgefor ancestor

后续问题:在突出显示的路径中,是否可以只保留根不突出显示?

例子:

平均能量损失

\documentclass{beamer}

\usepackage{tikz}

\tikzset{onslide/.code args={<#1>#2}{%
        \only<#1>{\pgfkeysalso{#2}} 
}} % use a style for a node/path only on certain slides 
%https://tex.stackexchange.com/q/253364/9789

\usepackage{forest}

\begin{document}

\forestset{path highlight/.style={edge=red,line width=2pt,
    for ancestors={edge=red, line width=2pt}}}

\begin{frame}{}
    \begin{forest}
        [VP
            [DP
                [V']
                [DP,onslide=<2->{path highlight}]
            ]
            [DP]
        ]
    \end{forest}
\end{frame}

\end{document}

答案1

您可能想要使用for tree,请参阅这个答案,并且需要使用\forestset,而不是\tikzset。排除根就像说一样简单if level=0{}{red}。我假设您想说edge={red, line width=2pt},,即向边缘添加线宽。

\documentclass{beamer}
\usepackage{forest}
\forestset{path highlight/.style={red,edge={red, line width=2pt},
for ancestors={edge={red,line width=2pt},
if level=0{}{red}}}}

% see https://tex.stackexchange.com/a/112471/121799
\forestset{alt/.code args={<#1>#2#3}{%
 \alt<#1>{\pgfkeysalso{for tree={#2}}}{\pgfkeysalso{for tree={#3}}}},
 onslide/.code args={<#1>#2}{%
        \only<#1>{\pgfkeysalso{for tree={#2}}} 
}}

\begin{document}


\begin{frame}{}
    \begin{forest}
        [VP
            [DP
                [V']
                [DP,onslide=<2->{path highlight}
                ]
            ]
            [DP]
        ]
    \end{forest}
\end{frame}
\end{document}

在此处输入图片描述

我要说的是,所有这些风格alt都是美好的 Ti 的一部分Z 库beamer-overlay-styles,但当然这里我们需要\forestset它的版本。

相关内容