我正在尝试创建一个动画并将其包含在投影机中。我认为(我天真地认为)实现此目的的方法是使用动画包创建一个 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 进行编译。
当我用 Adobe 打开它时,它按照我的要求运行。但是,动画没有被裁剪。然后,pdfcrop 似乎杀死了文件。在它上运行 pdfcrop 后,它将只是空白的。
我的问题是:我该如何制作像每个教程中看到的裁剪动画?如何将该动画包含到 Beamer 中(我想我的想法是错误的)。
答案1
是什么导致带有动画的 PDF 不再起作用?
有 3 种情况可以在 PDF 文件中制作工作动画不工作时间较长。为简单起见,我们将其设为animation.pdf
带有工作动画的 PDF 文件。
- 我们
animation.pdf
用 压缩gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=animation-compressed.pdf animation.pdf
。 - 我们
animation.pdf
用进行裁剪pdfcrop animation.pdf animation-cropped.pdf
。 - 我们
animation.pdf
使用从 LaTeX 输入文件中导入\includegraphics{animation.pdf}
。
\animateinline
相对\animategraphics
回想起那个我们不能将带有动画的 PDF 嵌入到另一个文档中作为什么亚历克斯据说,我们有两种方法可以解决您的问题。只需选择以下方法之一即可。
- 使用
animateinline
环境来夹住您的动画代码,并将环境放入您的主机输入文件(beamer
在您的情况下,这是一个带有文档类的输入文件)。但是这种方法有 3 个缺点:(a)pdflatex
当动画代码使用 PSTricks 语言时,您无法使用它来编译您的主机输入文件。(b)您的主机输入文件包含文本和代码,因此它会变得很长、很拥挤、难以理解、难以维护等,(c)编译将花费更长的时间,因为每当您进行任何更改时,动画代码都会重新编译。这就是为什么我建议您执行下面的第二个选项。 - 使用
\animategraphics
而不是animateinline
.\animategraphics
允许您导入任何包含一页或多页要进行动画处理的 PDF。
理论已经足够了。现在下面将解释第二种选择(使用\animategraphics
)。共有以下 2 个步骤:
解决方案
在我看来,最好从主机输入文件(在您的情况下使用 beamer 进行演示)中剪切动画代码,然后将动画代码粘贴到单个文件中,可特卡输入文件。将动画输入文件 TeX 以生成 PDF 输出。稍后,您可以使用此 PDF 创建许多其他项目,例如 GIF 动画、PDF 动画(在您的情况下)、PNG 图像等。这种分离方法还可以使您的主机输入文件更整洁、更清晰、更易读、更易理解等。
设为
Simple.tex
TeXable 动画输入文件如下:%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 页,以创建一个简单的动画,如下所示。现在,按如下方式创建投影仪。
\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
源即可。