结合 BEAMER 帧/幻灯片和 TIKZ 动画

结合 BEAMER 帧/幻灯片和 TIKZ 动画

我正在使用所述方法这里以 SVG 格式制作演示文稿。理想情况下,我希望一些框架包含多张幻灯片(例如使用 <1->、<2->...),其中一些会播放动画(我使用 TIKZ 的动画库)。我正在努力寻找一种方法来在幻灯片开始时触发这样的动画:基本上,我让框架中的所有动画同时开始(这也不是重点)。有没有人成功创建了一个由一系列幻灯片(触发)组成的框架,其中一些是静态的,一些是动画的?

这是一个包含 4 个文本块和两个动画箭头的最小示例。使用 ArrowDown 导航到幻灯片 2 时,第一个动画会播放第二次(与第二个动画一起播放)。

\documentclass[dvisvgm,aspectratio=169]{beamer}
    
\usepackage{tikz}
    \usetikzlibrary{calc,angles,animations,arrows,backgrounds,patterns,intersections,tikzmark,decorations.pathreplacing,calligraphy}
    
    
    %%%%%%% SO TIKZMARK WORKS WITH XETEX
    \makeatletter
    \def\pgfsys@hboxsynced#1{%
      {%
        \pgfsys@beginscope%
        \setbox\pgf@hbox=\hbox{%
          \hskip\pgf@pt@x%
          \raise\pgf@pt@y\hbox{%
            \pgf@pt@x=0pt%
            \pgf@pt@y=0pt%
            \special{pdf: content q}%
            \pgflowlevelsynccm%
            \pgfsys@invoke{q -1 0 0 -1 0 0 cm}%
            \special{pdf: content -1 0 0 -1 0 0 cm q}% translate to original coordinate system
            \pgfsys@invoke{0 J [] 0 d}% reset line cap and dash
            \wd#1=0pt%
            \ht#1=0pt%
            \dp#1=0pt%
            \box#1%
            \pgfsys@invoke{n Q Q Q}%
          }%
          \hss%
        }%
        \wd\pgf@hbox=0pt%
        \ht\pgf@hbox=0pt%
        \dp\pgf@hbox=0pt%
        \pgfsys@hbox\pgf@hbox%
        \pgfsys@endscope%
      }%
    }
    \makeatother
    
    %%%%%%% NAVIGATION WITH ARROWUP AND ARROWDOWN
    
    \usepackage[totpages]{zref}
    \usepackage{atbegshi}
    \usepackage{fontawesome}
    \setbeamertemplate{navigation symbols}{}
    \AtBeginShipout{%
      \AtBeginShipoutAddToBox{%
        \special{dvisvgm:raw
          <defs>
          <script type="text/javascript">
          <![CDATA[
            document.addEventListener('keydown', function(e){
              if(e.key=='ArrowDown'){
                \ifnum\thepage<\ztotpages
                  document.location.replace('\jobname-\the\numexpr\thepage+1\relax.svg');%
                \fi
              }else if(e.key=='ArrowUp'){
                \ifnum\thepage>1
                  document.location.replace('\jobname-\the\numexpr\thepage-1\relax.svg');%
                \fi%
              }
            });
          ]]>
          </script>
          </defs>
        }%
      }%
     
    }%
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%
    
    \begin{document}
    \begin{frame}[plain]
    \begin{tikzpicture}[remember picture]
    
    \huge
    
    \draw[thick] (0,0) rectangle (16,9);
    \clip (0,0) rectangle (16,9);
    
    %%%%%%% 1st slide
    \begin{onlyenv}<1->
    
    \draw (4,8) node[text width=7.2cm, align=left, anchor=base] 
    {Some text\subnode[inner sep=0pt]{a}{.}};
    
    \draw (12,8) node[text width=7.2cm, align=left, anchor=base] 
    {\subnode[inner sep=0pt]{b}{A}nd then some...};
    
    
    \draw[thick,->] :rotate = {base = "90",0s="90", 1s="0", forever, origin = {(0,0)}}  (a) --(b)  ;
    
    \end{onlyenv}
    
    %%%%%%% 2nd slide
    \begin{onlyenv}<2->
    
    \draw (4,6) node[text width=7.2cm, align=left, anchor=base] 
    {And so on \subnode[inner sep=0pt]{c}{.}};
    
    \draw (12,6) node[text width=7.2cm, align=left, anchor=base] 
    {\subnode[inner sep=0pt]{d}{.}.. and so forth...};
    
    
    \draw[thick,->] :rotate = {base = "90",0s="90", 1s="0", forever, origin = {(0,0)}}  (c) --(d)  ;
    
    \end{onlyenv}
    
    
    
    \end{tikzpicture}
    
    \end{frame}
    
    \end{document}

这是使用以下方式编译的

xelatex -no-pdf svgbeamer.tex && xelatex -no-pdf svgbeamer.tex && dvisvgm --font-format=ttf --exact --zoom=-1 -p1,- svgbeamer.xdv

我猜这是因为每张幻灯片上的时间线都重置为 0。所以,理想情况下,我想找到一种方法来制作一张可以暂停动画的单张幻灯片(例如使用一个键)。

相关内容