我正在尝试使用 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}}}
该代码处理程序使用了两个东西:- 当 开启时,执行
\alt<overlay>{arg1}{arg2}
提供的宏,否则执行;并且beamer
arg1
overlay
arg2
\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}