如何在 Beamer 中的两个幻灯片中使用不同的比例来显示一个 tikz 范围

如何在 Beamer 中的两个幻灯片中使用不同的比例来显示一个 tikz 范围

基本信息

我在 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}

在此处输入图片描述

相关内容