如何将 PSTricks 动画纳入投影机?

如何将 PSTricks 动画纳入投影机?

我正在尝试创建一个动画并将其包含在投影机中。我认为(我天真地认为)实现此目的的方法是使用动画包创建一个 PDF,然后将 \includegraphics其放入投影机中。在 Mac Os X 10.5.8 上使用 Texlive 运行。

以下是我想要制作的动画:

\documentclass{article} 
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}
\usepackage{animate} 
\newcommand{\rotatingarrow}[1]{

\begin{pspicture}(0,0)(10,10)% 

\psaxes(0,0)(9,9)
\rput(6,1){\Huge{Temps = #1 s}}
\rput{#1}(4,4){

\psline[linecolor=blue,arrowsize=5pt]{->}(0,0)(2,1)\rput{#1}(2.3,1.3){\Huge{$\textcolor{blue}{\vec{v}}$}}
\psline[linecolor=red,arrowsize=5pt]{->}(2,1)(1,3)\rput{#1}(1.3,3.3){\Huge{$\textcolor{red}{\vec{a}}$}}
}

\end{pspicture}% 
} 
\begin{document} 
\begin{center} 
\begin{animateinline}[poster=last,loop,autoplay,width=5cm,height=5cm]{12}% 
\multiframe{36}{iAngle=0+10}{% 

\rotatingarrow{\iAngle}% 
}% 
\end{animateinline}% 
\end{center} 
\end{document}

然后用 LaTeX 进行编译。

当我用 Adob​​e 打开它时,它按照我的要求运行。但是,动画没有被裁剪。然后,pdfcrop 似乎杀死了文件。在它上运行 pdfcrop 后,它将只是空白的。

我的问题是:我该如何制作像每个教程中看到的裁剪动画?如何将该动画包含到 Beamer 中(我想我的想法是错误的)。

答案1

是什么导致带有动画的 PDF 不再起作用?

有 3 种情况可以在 PDF 文件中制作工作动画工作时间较长。为简单起见,我们将其设为animation.pdf带有工作动画的 PDF 文件。

  1. 我们animation.pdf用 压缩gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=animation-compressed.pdf animation.pdf
  2. 我们 animation.pdf用进行裁剪pdfcrop animation.pdf animation-cropped.pdf
  3. 我们animation.pdf使用从 LaTeX 输入文件中导入\includegraphics{animation.pdf}


\animateinline相对\animategraphics

回想起那个我们不能将带有动画的 PDF 嵌入到另一个文档中作为什么亚历克斯据说,我们有两种方法可以解决您的问题。只需选择以下方法之一即可。

  1. 使用animateinline环境来夹住您的动画代码,并将环境放入您的主机输入文件(beamer在您的情况下,这是一个带有文档类的输入文件)。但是这种方法有 3 个缺点:(a)pdflatex当动画代码使用 PSTricks 语言时,您无法使用它来编译您的主机输入文件。(b)您的主机输入文件包含文本和代码,因此它会变得很长、很拥挤、难以理解、难以维护等,(c)编译将花费更长的时间,因为每当您进行任何更改时,动画代码都会重新编译。这就是为什么我建议您执行下面的第二个选项。
  2. 使用\animategraphics而不是animateinline.\animategraphics允许您导入任何包含一页或多页要进行动画处理的 PDF。

理论已经足够了。现在下面将解释第二种选择(使用\animategraphics)。共有以下 2 个步骤:


解决方案

  1. 在我看来,最好从主机输入文件(在您的情况下使用 beamer 进行演示)中剪切动画代码,然后将动画代码粘贴到单个文件中,可特卡输入文件。将动画输入文件 TeX 以生成 PDF 输出。稍后,您可以使用此 PDF 创建许多其他项目,例如 GIF 动画、PDF 动画(在您的情况下)、PNG 图像等。这种分离方法还可以使您的主机输入文件更整洁、更清晰、更易读、更易理解等。

    设为Simple.texTeXable 动画输入文件如下:

    %Simple.tex  using standalone document class
    
    \documentclass[pstricks,border=0pt]{standalone}
    \usepackage{pstricks-add}
    
    \newcommand\RotatingArrow[1]{%
        \begin{pspicture}(-1,-1)(10,11)
            \psframe*[linecolor=cyan,opacity=0.3](-1,-1)(10,11)
            \psset{arrows=->}
            \psaxes(0,0)(-0.5,-0.5)(9,10)[$x$,0][$y$,90]
            \rput(4.5,0.6){\Huge{Temps = #1 s}}
            \rput{#1}(4.5,5.5){%
                \psset{arrowsize=5pt}
                \pnode(2,0){A}
                \pnode(2,3){B}
                \psline[linecolor=blue](A)
                \uput[0]{-#1}(A){\Huge{$\textcolor{blue}{\vec{a}}$}}
                \psline[linecolor=red](A)(B)
                \uput[90]{-#1}(B){\Huge{$\textcolor{red}{\vec{v}}$}}
            }
    \end{pspicture}} 
    
    \begin{document} 
        \multido{\i=0+10}{36}{\RotatingArrow{\i}}
    \end{document}
    

    对于那些不幸使用standalone文档类的人来说,最后的办法是使用preview如下方法。请注意,也在内部standalone使用。preview

    \documentclass{article}
    \usepackage{pstricks-add}
    
    
    \usepackage[active,tightpage]{preview}
    \PreviewBorder=0pt
    \PreviewEnvironment{pspicture}
    
    
    \newcommand\RotatingArrow[1]{%
        \begin{pspicture}(-1,-1)(10,11)
            \psframe*[linecolor=cyan,opacity=0.3](-1,-1)(10,11)
            \psset{arrows=->}
            \psaxes(0,0)(-0.5,-0.5)(9,10)[$x$,0][$y$,90]
            \rput(4.5,0.6){\Huge{Temps = #1 s}}
            \rput{#1}(4.5,5.5){%
                \psset{arrowsize=5pt}
                \pnode(2,0){A}
                \pnode(2,3){B}
                \psline[linecolor=blue](A)
                \uput[0]{-#1}(A){\Huge{$\textcolor{blue}{\vec{a}}$}}
                \psline[linecolor=red](A)(B)
                \uput[90]{-#1}(B){\Huge{$\textcolor{red}{\vec{v}}$}}}
    \end{pspicture}}
    
    \begin{document}
        \multido{\i=0+10}{36}{\RotatingArrow{\i}}
    \end{document}
    

    xelatex使用或对其进行 TeX 处理latex->dvips->ps2pdf以获取 PDF 文件。在我们的示例中,它将包含 36 页,以创建一个简单的动画,如下所示。

    在此处输入图片描述

  2. 现在,按如下方式创建投影仪。

    \documentclass{beamer}
    \usepackage{animate}
    
    \begin{document}
    \begin{frame}{Circular motion in action}
    \animategraphics[autoplay,loop,scale=0.5]{10}{Simple}{}{} % WARNING: the filename must not include its extension!
    \end{frame}
    \end{document}
    

    使用 TeX 进行编辑pdflatex(推荐)或xelatex下图显示了你的演示,其中在职的动画片。

最新编辑

我们还可以按如下方式将两个输入文件合并为单个输入文件。使用 进行编译pdflatex --shell-escape

\documentclass{beamer}
\usepackage{filecontents}

%====================== BEGIN FILE CONTENTS ==========================
\begin{filecontents*}{dummy.tex}
\documentclass{article}
\usepackage{pstricks-add}

\usepackage[active,tightpage]{preview}
\PreviewBorder=0pt
\PreviewEnvironment{pspicture}

\newcommand\RotatingArrow[1]{%
    \begin{pspicture}(-1,-1)(10,11)
        \psframe*[linecolor=cyan,opacity=0.3](-1,-1)(10,11)
        \psset{arrows=->}
        \psaxes(0,0)(-0.5,-0.5)(9,10)[$x$,0][$y$,90]
        \rput(4.5,0.6){\Huge{Temps = #1 s}}
        \rput{#1}(4.5,5.5){%
            \psset{arrowsize=5pt}
            \pnode(2,0){A}
            \pnode(2,3){B}
            \psline[linecolor=blue](A)
            \uput[0]{-#1}(A){\Huge{$\textcolor{blue}{\vec{a}}$}}
            \psline[linecolor=red](A)(B)
            \uput[90]{-#1}(B){\Huge{$\textcolor{red}{\vec{v}}$}}}
\end{pspicture}}

\begin{document}
    \multido{\i=0+10}{36}{\RotatingArrow{\i}}
\end{document}
\end{filecontents*}
%====================== END FILE CONTENTS =========================

\usepackage{animate}
\begin{document}
\immediate\write18{latex dummy}
\immediate\write18{dvips dummy}
\immediate\write18{ps2pdf dummy.ps}
\begin{frame}{Circular motion in action}
    \animategraphics[controls,scale=0.5]{10}{dummy}{}{}
\end{frame}
\end{document}

答案2

动画文档中的逐字代码是可以按原样编译的最小工作示例。您不能将带有动画的 PDF 嵌入到另一个文档中。只需将内容插入\begin{animateinline}...\end{animateinline}文档beamer源即可。

相关内容