在 Beamer 中为幻灯片上的部分移动/过渡制作动画吗?

在 Beamer 中为幻灯片上的部分移动/过渡制作动画吗?

我不确定在当前的 PDF 格式规范下这是否可行,但我想通过让幻灯片的一部分移动或“飞”到新位置来为幻灯片之间或幻灯片叠加之间的过渡添加动画效果。例如,

\documentclass{beamer}
\usepackage{tikz}
\begin{document}

\begin{frame}
  \only<1-2>{some text before}
  \begin{tikzpicture}
    \draw<1> (0,0) node [fill=blue!20] (a) {hello} -- (1, 1) node [fill=red!20] (b) {world};
    \draw<2-> (0,0) node [fill=blue!20] (a) {hello} -- (0, 1) node [fill=red!20] (b) {world};
    \draw<1-> (2,2) node [fill=violet!20] (c) {this stays put};
  \end{tikzpicture}
  \only<3->{some text after}
\end{frame}
\end{document}

理想情况下,应该有某种方式在叠加层 1 和 2 之间进行动画处理,以便观众获得一种连续感(对于熟悉 iOS 开发人员库的人,或者曾经研究过 iOS 用户界面设计的人,这个概念应该很熟悉)。更好的是,当文本“之前的一些文本”消失时(叠加层 3 及以后),整个 tikz 图形将向左滑动到新的位置。

使用当前的 PDF 标准(或 TeX/LaTeX/*TeX 可以输出的任何其他标准)是否可能实现这一点?是否有任何地方的包可以实现此行为?对于一个简单的 TeX/LaTeX/*TeX 文件来说,这听起来相当极端,但我已经学会了不要在tikz/pgf和之后添加任何内容beamer

答案1

动画通常不是一个好主意,因为它会分散观众对演示的注意力(参见 Beamer 手册)。

我读到过,至少使用 Acrobat 阅读器可以在帧之间实现动画(例如:溶解、移动到),但我没有尝试过,而且它们仅限于整个幻灯片。

可以使用该animate包预先计算流畅的动画,如下所示很好的例子。我认为您也可以用类似的方式在两点之间平滑移动文本的一部分。

编辑动画示例:交流电的产生

\documentclass{beamer}
\usepackage{animate}
\usepackage{tikz}

\usetikzlibrary{decorations.markings}

\newcounter{angle}
\setcounter{angle}{0}

\begin{document}

\begin{frame}[fragile]{Production of AC current}{Alternator}
\begin{center}
\begin{animateinline}[loop,poster=first,controls]{10}
    \whiledo{\theangle<720}{
        \begin{tikzpicture}[scale=.7]
        \path[use as bounding box] (-3.5,-4) -- (10,4);
        %\draw (-3.5,-4) rectangle (10,4);
        % 1/2 surface inf
        \draw[black!50,thick] (2,-1) 
            arc[start angle=-90,end angle=90,x radius=.2cm, y radius=1cm];
        \begin{scope}[rotate=\theangle]
        % lignes de champ
        \foreach \h/\X/\Y in {.85/1.6/.8, 1.1/2/1.1, 1.325/2.4/1.35,%
                1.525/2.8/1.6} {
            \draw [decoration={markings,
                    mark=between positions 0 and 1 step 1.5cm 
                        with {\arrow{stealth}}},    
                    postaction={decorate},color=brown!60] (0,\h) 
                circle[x radius=\X cm,y radius=\Y cm];
            \draw [decoration={markings,
                    mark=between positions 0 and 1 step 1.5cm 
                        with {\arrowreversed{stealth}}},    
                    postaction={decorate},color=brown!60] (0,-\h)
                circle[x radius=\X cm,y radius=\Y cm];
        }
        \end{scope}
        % 1/2 surface sup
        \draw[thick] (2,-1) 
            arc[start angle=-90,end angle=-270,x radius=.2cm,%
                    y radius=1cm];
        % aimant
        \begin{scope}[rotate=\theangle]
        \fill[color=cyan!70] (-1,-.25) rectangle (0,.25);
        \fill[color=red!70] (0,-.25) rectangle (1,.25);
        \draw (-1,-.25) rectangle (1,.25);
        \end{scope}

        % calculation of the position       
        \pgfmathrad{\theangle}
        \edef\myangle{\pgfmathresult}
        \pgfmathparse{4 + .4 * \myangle}
        \edef\myX{\pgfmathresult}
        \pgfmathparse{2 * cos(\theangle)}
        \edef\myY{\pgfmathresult}

        \coordinate (O) at (4,0);
        \begin{scope}
        % axes
        \draw[->] (O) -- ++(5.5,0) node[below]{$t$};
        \draw[->] ([yshift=-2.5cm]O) -- ([yshift=2.5cm]O) node[left]{$I$};
            \begin{scope}[xshift=4cm,xscale=0.4] % sinusoïde
            % calcul clip
            %\node at (1,1) { \myangle };
            \clip (0,-2.5) rectangle (\myangle,2.5);
            \draw[green,thick] (0,2) cos (1.5708,0) sin (3.1416,-2)
                    cos (4.7124,0) sin (6.2832,2) cos (7.8540,0)
                    sin (9.4248,-2) cos (10.9956,0) sin (12.5664,2); 
            \end{scope}

        \draw[fill=green!30,draw=green] (\myX,\myY) circle[radius=.5mm];
        \end{scope}
        \end{tikzpicture}       
        %
        %\addtocounter{angle}{720}
        \addtocounter{angle}{5}
        %\stepcounter{angle}
        \ifthenelse{\theangle<720}{%
            \newframe
        }{%
            \end{animateinline}
        }
    }
\end{center}
\end{frame}

\end{document}

答案2

在演示中移动物体而不添加信息通常会被认为会分散注意力。
这是可能的,但有限制。可能是因为它从来没有被认为值得付出努力,可能是因为底层 PDF 格式不是为它制作的。

动画软件包可让您在单张幻灯片上创建动画。但是,它将使用一定数量的离散步骤进行过渡。虽然这在您的笔记本电脑上看起来不错,但您的图像仍会在墙上的大型投影仪图像上跳跃/抖动。动画的示例可以在Texample - 动画
但是,由于转换使用了 Javascript,因此仅限于 Acrobat Reader。

使用 可以实现略高的兼容性\transduration<overlay specification>{time}。然后,您可以创建大量帧并让阅读器浏览它们,方法是指定时间为 0 秒。即使这在其他系统上不能自动运行,您仍然可以显示动画,然后过度使用点击器。

最佳用法是仅指定前帧和后帧,并让查看者创建有限数量的可用全页过渡。
通过使用

\begin{frame}
\transwipe
\only<1>{First}
\only<2>{Second}
\end{frame}

PDF 格式支持的转换的完整列表如下在此答案中列出
这些过渡即使不受支持也不会导致问题,而且是最流畅的,因为它们是由 Acrobat Reader 创建的。使用这些过渡,文件大小的增加也是最低的。
选项二和选项三可以组合使用。transduration 命令可能会在实际演示过程中导致问题,因为它使得很难返回上一张幻灯片。为了安全起见,我使用白色超链接。

相关内容