基本信息
我在 MBP 中使用 xelatex(尽管使用 pdflatex 时也会发生同样的事情)和 TeX Live 2019。
原始问题
我想在不同的幻灯片中对同一个 tizk 范围使用不同的比例。举个例子,我想将以下两个范围合并为一个,同时仍保留从幻灯片 1 到幻灯片 2 更改比例的功能。实际节点比这复杂得多,所以我不想复制和粘贴。
\documentclass[aspectratio=169]{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}[remember picture, overlay]
\begin{scope}[scale=1,transform shape]
\node<1> (test) at (current page) [circle,very thick, draw=black, fill=white, text width=0.3\textwidth, align=center, font=\huge\bfseries , inner sep=-1ex] {TEST};
\end{scope}
\begin{scope}[scale=2,transform shape]
\node<2> (test) at (current page) [circle,very thick, draw=black, fill=white, text width=0.3\textwidth, align=center, font=\huge\bfseries , inner sep=-1ex] {TEST};
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}
我尝试过以下策略
\begin{scope}[\alt<1>{scale=1}{scale=2},transform shape]
\node<1-2> ...
\begin{scope}[scale=\alt<1>{1}{2},transform shape]
\node<1-2> ...
\begin{scope}\alt<1>{[scale=1,transform shape]}{[scale=2,transform shape]}
\node<1-2> ...
但是前两个给了我一些错误消息并且停止编译,而最后一个根本不起作用。
那么,如何实现这一点呢?
扩展
其实这个问题几乎适用于 tikzpicture 中所有方括号 [] 内的参数。例如,如果我想将字体从 更改为,\huge
同时\normalsize
幻灯片编号从 1 更改为 2,该怎么办?
答案1
这是一个使用 TikZ 库的解决方案overlay-beamer-styles
,它定义了各种有用的键,其中最相关的是:
alt=<overlay specification>{first styles}{second styles}
适用于first styles
满足叠加规范的情况和second styles
不满足叠加规范的情况。在您的代码中,这可能看起来像:
\documentclass[aspectratio=169]{beamer}
%\url{https://tex.stackexchange.com/q/611127/86}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}<1-2> % <- needed to force a second frame
\begin{tikzpicture}[remember picture, overlay]
\begin{scope}[
alt=<1>{scale=1}{scale=2}, % <- overlay-aware styles
transform shape]
\node[
alt=<1>{at=(current page)}{at=(current page.north)},
circle,
very thick,
draw=black,
fill=white,
text width=0.3\textwidth,
align=center,
font=\huge\bfseries ,
inner sep=-1ex
]
(test) {TEST};
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}
这仅适用于在键中设置的内容,因此要使用它来定位节点,则需要使用键at
而不是内联at
语法,如上所示。
是因为并且<1-2>
本身并不强制进行第二次覆盖;如果幻灯片上的其他材料涉及更多覆盖,那么就没有必要了。\begin{frame}
\alt
答案2
语法
\begin{scope}[<options>]
基本上只是
\begin{scope}
\tikzset{<options>}
因此你可以将它与以下一起使用\alt
:
\documentclass[aspectratio=169]{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\begin{scope}[transform shape]
\alt<1>{%
\tikzset{scale=1,my font/.style={font=\itshape\LARGE}}%
}{%
\tikzset{scale=2,my font/.style={font=\huge\bfseries}}%
}
\node<1-2> (test) at (current page) [circle,very thick, draw=black, fill=white, text width=0.3\textwidth, align=center, my font, inner sep=-1ex] {TEST};
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}