Beamer:动画包和覆盖

Beamer:动画包和覆盖

我正在尝试使用以下设置在 Beamer 中运行动画:

\documentclass[]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{tikz}
\usepackage{blindtext}
\usepackage{calligra}
\usepackage[]{animate}
\usetikzlibrary{arrows,positioning,trees,decorations.pathmorphing,shapes,backgrounds,calc,shadows,decorations.pathreplacing}
\usetikzlibrary{fadings}
 \usetikzlibrary[shadings]
\mode<presentation>
{
\usetheme{default}
\useoutertheme{default}
\usecolortheme{default}
}
\setbeamersize{text margin left=3pt,text margin right=3pt}
\DeclareGraphicsExtensions{.eps,.jpg,.png}
\graphicspath{ {./Pictures/} }
\begin{document}
\begin{frame}
\begin{columns}
\column{0.5\textwidth}
\centering
  \animategraphics[width=0.9\textwidth,keepaspectratio,autopause,autoresume,autoplay,loop]{0.5}{pp_}{1}{54}
\column{0.5\textwidth}
\begin{columns}
  \column{0.9\textwidth}
  \begin{tikzpicture}[remember picture,overlay]
   \node at (2.5,-0.6) [rectangle,draw=white,fill=black,fill opacity=0.7,
   rounded corners, text width=0.9\textwidth, text height=0.9\paperheight] (aa) {};
   \node at (aa) [rectangle,text width=0.8\textwidth, text=white] () {
     \only<1>{\calligra \blindtext}
     \only<2>{\calligra \blindtext}
     \only<3-4>{\calligra \blindtext}
   };
  \end{tikzpicture}
 \end{columns}
\end{columns}
\end{frame}
\end{document}

这个想法是让左栏显示一个连续的幻灯片(图片),同时在右栏中浏览一些文本。由于文本相当大,因此必须显示连续的块。这可以通过“only”命令实现。现在“only”使 beamer 生成(在本例中)四张幻灯片。问题是,当一个人继续播放下一张幻灯片时,左栏中的动画将从第 0 帧重新开始。每帧都在运行自己的动画。但我想要的是左栏中单个连续的动画,始终是我当前正在播放的 beamer 幻灯片。

任何想法都将不胜感激。

答案1

Beamer带有叠加层和animate生成动画的框架存在问题。(见↗错误请参阅文档中的部分内容animate。)

正如 OP 所正确观察到的,Beamer在幻灯片带有叠加层的情况下,会产生多个具有独立动画的 PDF 页面。当前帧号和播放状态、方向和速度必须在页面切换时从一个动画转移到下一个动画,以给人一种单个动画正在运行的感觉。

可以通过使用↗JavaScript 接口animate。在隐藏的 PDF 注释的页面打开和关闭事件期间执行必要的代码。

编辑:为了进一步增强动画的叠加意识,可以使用该beamer命令在“静音”幻灯片上保留空间(请注意备选条款中的选项)。如果不需要,可以将动画放入:\alt<>{}{}draft\only<>{...}

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{kantlipsum}
\usepackage{animate}

\ExplSyntaxOn
  \let\myPdfAnnot\pbs_pdfannot:nnnn
\ExplSyntaxOff

\def\putBeforeAnim#1{%
  \myPdfAnnot{1ex}{1ex}{0pt}{%
    /Subtype/Screen/F 2%
    /AA <<%
      /PC << % exec on page-close
        /S/JavaScript /JS (
          try{
            var #1CurFrame  =anim.#1_\thepage.frameNum;
            var #1CurSpeed  =anim.#1_\thepage.speed;
            var #1PlayingFwd=anim.#1_\thepage.isPlaying&&anim.#1_\thepage.playsFwd;
            var #1PlayingBwd=anim.#1_\thepage.isPlaying&&(!anim.#1_\thepage.playsFwd);
          } catch(e){}
        )
      >>
    >>%
  }%
}

\def\putAfterAnim#1{%
  \myPdfAnnot{1ex}{1ex}{0pt}{%
    /Subtype/Screen/F 2%
    /AA <<%
      /PO << % exec on page-open
        /S/JavaScript /JS (
          try{
            anim.#1_\thepage.frameNum=#1CurFrame;
            anim.#1_\thepage.speed=#1CurSpeed;
            if(#1PlayingFwd){ anim.#1_\thepage.playFwd(); }
            if(#1PlayingBwd){ anim.#1_\thepage.playBwd(); }
          } catch(e){}
        )
      >>
    >>
  }%
}

\begin{document}
\begin{frame}
\begin{columns}
\column{0.25\textwidth}
  Bla, bla\dots

  \alt<2->{%
      %%%%%%%%%%%%%%%%%%%%%%%
      \putBeforeAnim{myAnim}%
      %%%%%%%%%%%%%%%%%%%%%%%
      \begin{animateinline}[
        label=myAnim_\thepage,
        width=\linewidth,loop,
        controls={play,stop,speed},
        buttonsize=1em
      ]{1}
        \multiframe{54}{i=1+1}{\Huge\framebox[1.4em][r]{\i}}
      \end{animateinline}%
      %%%%%%%%%%%%%%%%%%%%%%%
      \putAfterAnim{myAnim}%
      %%%%%%%%%%%%%%%%%%%%%%%
  }{%
    \phantom{\begin{animateinline}[
        draft,
        width=\linewidth,loop,
        controls={play,stop,speed},
        buttonsize=1em
      ]{1}
        \multiframe{54}{i=1+1}{\Huge\framebox[1.4em][r]{\i}}
    \end{animateinline}}%
  }

  More bla, bla\dots
\column{0.75\textwidth}\tiny
  \begin{enumerate}[<+->]
    \item \kant[1]
    \item {\Huge\color{alert} Animation appears!} 
    \item \kant[3]
  \end{enumerate}
\end{columns}
\end{frame}
\end{document}

相关内容