TikZ 间谍和 Beamer 揭露

TikZ 间谍和 Beamer 揭露

我正在尝试使用 TikZ 的功能来发现放大镜\spy,但是,正如您在下面的最小工作示例中看到的那样,玻璃从第 1 帧开始就存在了。有人知道如何解决这个问题吗?

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{shadows,spy,fixedpointarithmetic,patterns,arrows,decorations.text,decorations.pathmorphing,backgrounds,fit,positioning,shapes.symbols,chains}
\begin{document}

\begin{frame}
    Space
    \begin{center}
        \begin{tikzpicture}[spy scope={magnification=1.5, size=2cm},every spy in node/.style={remember picture,overlay,magnifying glass,circular drop shadow,fill=white,draw,ultra thick, cap=round}]
            \node[rectangle, draw, minimum width=1cm, minimum height=1cm] (N) {};
            \uncover<2->{\spy on (N) in node;}
            % \only<2>{\spy on (N) in node;}
        \end{tikzpicture}
    \end{center}
\end{frame}
\end{document}

答案1

我不知道为什么\uncover<2->\visible<2->不起作用,但这里有两种解决方法:

解决方法 1:\alt+\pgfkeysalso

有两个/.style和一个/.code可以帮助beamer

  • invisible/.style={opacity=0,text opacity=0}
    这种样式并不beamer特别,因为它仅将每个不透明度(绘制、填充、文本)设置为零,这意味着:它在那里,但你看不到它。它占据相同的空间,就像 一样\phantom
  • alt/.code args={<#1>#2#3}{\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}}
    该代码处理程序使用了两个东西:

    1. 当 开启时,执行\alt<overlay>{arg1}{arg2}提供的宏,否则执行;并且beamerarg1overlayarg2
    2. \pgfkeysalso它将 TikZ 键添加到路径而不进行其他更改。这类似于添加[some keys=values]到路径。
  • visible on/.style={alt={#1{}{invisible}}}
    这种风格更像是 的捷径alt。它对 上的路径不做任何处理<#1>,但在 中隐藏起来。

如果您想要使用带有 的覆盖规范,,例如<2,4>,则必须将其括在{ }:中visible on={<2,4>}。(出于同样的原因,alt参数括在括号中。)

代码

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shadows,spy,shapes.symbols}
\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}} 
    },
}
\begin{document}

\begin{frame}
    Space
    \begin{center}
        \begin{tikzpicture}[spy scope={magnification=1.5, size=2cm},every spy in node/.style={remember picture,overlay,magnifying glass,circular drop shadow,fill=white,draw,ultra thick, cap=round}]
            \node[rectangle, draw, minimum width=1cm, minimum height=1cm] (N) {};
            \spy[visible on=<2->] on (N) in node;
        \end{tikzpicture}
    \end{center}
\end{frame}
\end{document}

解决方法2:overlay

TikZ 键overlay可防止边界框更新。内容只是简单地覆盖在页面上,不考虑所有内容。

在这种情况下这确实有效……

代码

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shadows,spy,shapes.symbols}
\begin{document}

\begin{frame}
  Space
  \begin{center}
    \begin{tikzpicture}[spy scope={magnification=1.5, size=2cm},every spy in node/.style={remember picture,overlay,magnifying glass,circular drop shadow,fill=white,draw,ultra thick, cap=round}]
      \node[rectangle, draw, minimum width=1cm, minimum height=1cm] (N) {};
      \only<2->{\spy[overlay] on (N) in node;}
    \end{tikzpicture}
  \end{center}
\end{frame}
\end{document}

相关内容