森林中边缘相关形状的叠加

森林中边缘相关形状的叠加

我的问题在森林边缘绘制椭圆导致以下代码具有样式forestcircle edge我想在演示中显示和隐藏此边缘,beamer但不知道如何执行此操作。我已经找到了visible on,但我无法将其与森林风格相结合。

\documentclass{beamer}

\usepackage[linguistics]{forest}

\usetikzlibrary{shapes.geometric,fit}

\forestset{%
  circle edge/.style={
    tikz+={
          \node [fit=(.child anchor) (!u.parent anchor), draw=red, ellipse, inner ysep=1.5pt, line
            width=0.25mm] {};
        }
  },
}

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

\frame{

\begin{forest}
[S
  [NP$_x$ [he,tier=words]]
  [VP
    [V x z y
      [V x y, circle edge={/tikz/visible on=<3>}
        [baked]]]
    [NP$_z$ [her,tier=words]]
    [NP$_y$ [a cake,roof,tier=words]]]]
\end{forest}

\pause\pause\pause



}

\end{document}

编辑:下面我的解决方案适用于简单的情况,例如,<3->但由于逗号,它失败了<2,4>。有没有办法把逗号加到beamer

答案1

您可以使用花括号来处理覆盖规范中的逗号。

          [V x y, circle edge=<{2,4}>

您可以通过声明选项来控制椭圆的颜色,而无需使用第二个参数toks

例如,使用circle edge colour颜色,然后使用此选项作为draw绘制节点时的值。

\forestset{%
  circle edge/.style={
    tikz+={
      \node [fit=(.child anchor) (!u.parent anchor), visible on=#1, ellipse, inner ysep=1.5pt, line
      width=0.25mm, draw=\foresteoption{circle edge colour}] {};
    },
  },

声明选项并将默认值设置为红色椭圆。

  declare toks={circle edge colour}{red},
}

把它们放在一起,我们可以在幻灯片 2 和 4 上创建一个蓝色椭圆。

          [V x y, circle edge=<{2,4}>, circle edge colour=blue

第 2 张和第 4 张幻灯片上的椭圆采用非默认蓝色

完整代码(请注意,\pause\pause\pause据我所知是多余的):

% addaswyd o ateb (a chwestiwn) Stefan Müller: http://tex.stackexchange.com/a/355485/
\documentclass{beamer}
\usepackage[linguistics]{forest}
\usetikzlibrary{shapes.geometric,fit}
\forestset{%
  circle edge/.style={
    tikz+={
      \node [fit=(.child anchor) (!u.parent anchor), visible on=#1, ellipse, inner ysep=1.5pt, line
      width=0.25mm, draw=\foresteoption{circle edge colour}] {};
    },
  },
  declare toks={circle edge colour}{red},
}

\tikzset{% set up for transitions using tikz with beamer overlays - developed by Daniel (http://tex.stackexchange.com/a/55849/) and, in earlier form, by Matthew Leingang (http://tex.stackexchange.com/a/6155/) and modified for this use, I think by Qrrbrbirlbel (http://tex.stackexchange.com/a/112471/)
  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
  },
}
\begin{document}

\begin{frame}
  \centering
  \begin{forest}
    [S
      [NP$_x$ [he,tier=words]]
      [VP
        [V x z y
          [V x y, circle edge=<{2,4}>, circle edge colour=blue
            [baked]]]
        [NP$_z$, calign with current [her,tier=words]]
        [NP$_y$ [a cake,roof,tier=words]]]]
  \end{forest}
\end{frame}

\end{document}

答案2

在这里找到答案使用投影机叠加森林生成的树木。可以调用visible on样式circle edge并将信息作为参数传递<3->。一个悬而未决的问题是如何传递<2,4>。逗号是一个问题。

这样做的唯一缺点是如果没有两个参数就无法传递椭圆颜色的颜色参数。

\documentclass{beamer}

\usepackage[linguistics]{forest}

\usetikzlibrary{shapes.geometric,fit}

\forestset{%
  circle edge/.style={
    tikz+={
          \node [fit=(.child anchor) (!u.parent anchor), draw=red, visible on=#1, ellipse, inner ysep=1.5pt, line
            width=0.25mm] {};
        }
  },
}

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

\begin{document}

\frame{

\begin{forest}
[S
  [NP$_x$ [he,tier=words]]
  [VP
    [V x z y
      [V x y, circle edge=<3->
        [baked]]]
    [NP$_z$ [her,tier=words]]
    [NP$_y$ [a cake,roof,tier=words]]]]
\end{forest}

\pause\pause\pause



}

\end{document}

相关内容