我是 LaTeX 和本网站的新用户。我看到本网站的很多答案都有动画。但我无法制作任何这些动画。例如,我问如何减少 tikz L 系统中的线的大小?并得到了这个答案,但是当我用它编译时pdflatex
,我得到这个 pdf没有任何动画。我做错了什么?
答案1
由于 OP 要求使用该animate
包创建动画 PDF,而无需将动画帧放在单独的(PDF)文件中,因此tikzpicture
可以直接将环境放入环境中animateinline
:
\documentclass{article}
\usepackage{animate}
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{A}{%
\symbol{F}{\pgflsystemstep=0.6\pgflsystemstep\pgflsystemdrawforward}
\rule{A->F[+A][-A]}
}
\begin{document}
\begin{animateinline}[controls,autoplay,loop]{2}
\multiframe{8}{n=1+1}{
\begin{tikzpicture}[scale=10,rotate=90]
\draw (-.1,-.2) rectangle (.4,0.2);
\draw [blue,opacity=0.5,line width=0.1cm,line cap=round]
l-system [l-system={A,axiom=A,order=\n,angle=45,step=0.25cm}];
\end{tikzpicture}
}
\end{animateinline}
\end{document}
答案2
这里有两件事,
- 生成一个 gif 文件(我们通常在这里做,在这个网站上上传)。
- 将动画放入 pdf 文件内。
首先,我选择 imagemagick。安装imagemagick
并确保它convert.exe
位于系统路径中。生成您的 pdf 文件(如您在 OP 中的链接中所示)。然后使用命令提示符从同一文件夹中发出此命令。
convert -delay 10 -loop 0 -density 400 -alpha remove lsystems.pdf lsystems.gif
根据需要更改参数。有关详细信息,请参阅 imagemagick 的文档。通常,我更喜欢使用批处理文件以便重复使用。将下面的内容保存到mygifbatch.bat
与您的 pdf 文件相同的文件夹中的文件中。
@ECHO ON
cls
REM convert to animated gif
CD /D %~dp0
mkdir gifs
SET Program="convert.exe"
for %%A in (*.pdf) do %Program% -delay 30 -loop 0 -density 200 -alpha remove %%A gifs/%%~nA.gif
Pause
要转换,双击mygifbatch.bat
文件即可转换全部将当前文件夹中的 pdf 文件转换为子目录内的 gif 文件gifs
。
现在是第二步。您可以animate
像以下代码一样使用包:
\documentclass[preview,border={10pt 0pt 10pt 10pt}]{standalone}
\usepackage{filecontents}
%% This is your file to be animated
\begin{filecontents*}{lsystems.tex}
\documentclass{article}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}\PreviewEnvironment{tikzpicture}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{A}{
\symbol{F}{\pgflsystemstep=0.6\pgflsystemstep\pgflsystemdrawforward}
\rule{A->F[+A][-A]}
}
\begin{document}
\foreach \n in {1,...,8} {
\begin{tikzpicture}[scale=10,rotate=90]
\draw (-.1,-.2) rectangle (.4,0.2);
\draw
[blue,opacity=0.5,line width=0.1cm,line cap=round]
l-system [l-system={A,axiom=A
,order=\n,angle=45,step=0.25cm}];
\end{tikzpicture}
}
\end{document}
\end{filecontents*}
%
\immediate\write18{pdflatex lsystems}
%% convert to GIF animation. Uncomment following line to have a gif animation in the same folder.
%\immediate\write18{convert -delay 10 -loop 0 -density 400 -alpha remove lsystems.pdf lsystems.gif}
%%
\usepackage{animate}
\begin{document}
\begin{preview}
%\animategraphics[controls,autoplay,loop,scale=<integer>]{<frame rate>}{<PDF filename without extension>}{<left blank>}{<left blank>}
\animategraphics[controls,autoplay,loop,scale=1]{2}{lsystems}{}{}
\end{preview}
\end{document}
在这里,我习惯于filecontents
编写.tex
文件并pdflatex
从主文档中编辑它。因此,您需要--shell-escape
在编译时使用。如果您已经有 pdf 文件,则不需要行3--32
。应使用 Adobe Reader 查看 pdf。有关更多详细信息,请参阅animate
文档(texdoc animate
或texdoc.net)。
有一个不错的阿拉拉规则由 Chris (cmhughes) 编写,可轻松从 pdf 生成 gif。从以下位置安装酷炫工具 araraPaulo 的 github存储库。它包含在 texlive 中。但是,如果您是 miktex 用户,则必须自行安装它。现在保存cmhughes代码按名称放入文件中animate.yaml
。将此文件放入某个文件夹C:\Users\<your name>\AppData\Roaming\Arara\rules
(例如,对于 Windows)。然后araraconfig.yaml
在主目录中创建一个文件(C:\Users\<your name>
通常),其中包含以下内容:
!config
paths:
- C:\Users\<your name>\AppData\Roaming\Arara\rules
您可以添加许多这样的路径。现在您可以开始了。在您的 tex 文件中添加以下内容
% arara: pdflatex
% arara: animate: {density: 200, delay: 20}
示例代码(lsystems.tex):
% arara: pdflatex
% arara: animate: {density: 200, delay: 20}
\documentclass[tikz]{standalone}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{A}{
\symbol{F}{\pgflsystemstep=0.6\pgflsystemstep\pgflsystemdrawforward}
\rule{A->F[+A][-A]}
}
\begin{document}
\foreach \n in {1,...,8} {
\begin{tikzpicture}[scale=10,rotate=90]
\draw (-.1,-.2) rectangle (.4,0.2);
\draw
[blue,opacity=0.5,line width=0.1cm,line cap=round]
l-system [l-system={A,axiom=A
,order=\n,angle=45,step=0.25cm}];
\end{tikzpicture}
}
%
\end{document}
lsystems.tex
用-编译arara lsystems.tex
。arara
还可以与很多编辑器集成。详情可参考漂亮的arara手册。
答案3
您可以创建.gif 动画通过以下步骤:
- 创建包含多页的 PDF。每页都是动画的一部分。最简单的方法可能是使用
beamer
文档类 - 使用
pdfcrop
和 imagemagicksconvert
创建动画。
对于 Linux 用户
为了使第 2 步简单易行,我对每个项目使用以下 Makefile:
SOURCE = bellman-ford-algorithm
DELAY = 80
DENSITY = 300
WIDTH = 512
make:
pdflatex $(SOURCE).tex -output-format=pdf
make clean
clean:
rm -rf $(TARGET) *.class *.html *.log *.aux *.toc *.snm *.out *.nav
gif:
pdfcrop $(SOURCE).pdf
convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif
make clean
animatedGif:
make
pdfcrop $(SOURCE).pdf
convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif
make clean
transparentGif:
convert $(SOURCE).pdf -transparent white result.gif
make clean
png:
make
make svg
inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png
svg:
make
#inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg
pdf2svg $(SOURCE).pdf $(SOURCE).svg
# Necessary, as pdf2svg does not always create valid svgs:
inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg
rsvg-convert -a -w $(WIDTH) -f svg $(SOURCE).svg -o $(SOURCE)2.svg
inkscape $(SOURCE)2.svg --export-plain-svg=$(SOURCE).svg
rm $(SOURCE)2.svg
- 只需将其保存为
Makefile
(请注意 Makefile 有制表符,而不是四个空格!因此复制粘贴可能不起作用) - 根据需要替换前 4 个变量
- 输入
make animatedGif
你选择的 shell(大多数人可能会使用bash
,但zsh
插件oh-my-zsh
提供了 Makefile 的选项卡式自动完成功能 :-))
例子
欧拉路径
参见我的文章“如何可视化图形算法“有关如何创建它的更多信息:
乔莱斯基分解
来源:LaTeX 示例
答案4
目前我不确定这有多大用处。不过,这里有我评论的一个稍微详细一点的版本,以及一个用 beamer 创建的动画示例。与其他示例不同,这个示例非常简单。
基本上PDF问题中链接的由可用于制作动画的单个帧组成,每页一帧。要真正让它们动起来,你需要一些支持它的东西。人们发布的动画往往是从 pdf 输出创建的 .gif。其他答案中提到了几种制作这些动画的方法。
beamer 还可以通过快速显示一张又一张图像来创建动画效果。一种方法是将不同的帧包含在不同的幻灯片上,并告诉 beamer 为它们制作动画。\includegraphics
例如,可以感知叠加规范。本质上,您将第一帧包含在第一张幻灯片上,将第二帧包含在第二张幻灯片上,依此类推。
beamer 还与 tikz 等软件包配合使用,拥有其他一些绝招。这些软件只需使用 TeX 代码即可创建动画效果。例如,您可以逐渐改变颜色来模拟运动。以下示例从一个文本淡入另一个文本。我在演示文稿中使用了此版本,以传达第二个文本正在解释第一个文本的想法。我只是将此处的文本更改为与 TeX 相关的内容。当您单击第一张幻灯片时,文本会淡出,并由最后一张幻灯片上的文本替换,该文本会淡入。正如我所说,这与其他人发布的复杂动画完全不同 - 我想,它只是动画最简单的形式。但它可以非常有效地完成所有这些。毕竟,我希望重点放在文本的内容上 - 真正令人印象深刻的动画只会分散人们对要点的注意力。(显然,这并不适用于我在此处使用的虚拟文本,但请考虑尝试传达关键概念的含义或学科的性质。)
这在 acroread 中对我有用,但在 Okular 中却不行。因此它在 Adobe Reader 中应该可以正常显示,但我不确定 Foxit Reader 或 Evince 是否能正常显示。
\documentclass{beamer}
\usepackage{fixltx2e}
\usepackage{texnames}
% lliwiau arbennig
\setbeamertemplate{background canvas}[default]
\setbeamercolor{background canvas}{bg=black}
\setbeamercolor{normal text}{fg=blue!40!white,bg=black}
\setbeamercolor{alerted test}{fg=blue!40!white,bg=black}
\setbeamercolor{quote}{fg=blue!40!white,bg=black}
%\title[]{}
\title{Animation with Beamer}
\subtitle{An Extremely Simple Example}
\date{}
\subject{} % PDF cat. only
\begin{document}
\begin{Form}
\setbeamertemplate{background}{}
\newcount\aopaqueness
\newcount\qopaqueness
\begin{frame}[plain]
\animate<2-19>
\animatevalue<1-10>{\aopaqueness}{100}{0}
\animatevalue<11-20>{\qopaqueness}{0}{100}
\begin{center}
\begin{overprint}[.65\paperwidth]
\onslide<1-10>
\begin{colormixin}{\the\aopaqueness!averagebackgroundcolor}
\mbox{ }\vspace*{\fill}\\
\begin{center}
\huge\bfseries
pdf\LaTeX\\[.5em]
with beamer and friends
\end{center}
\vspace*{\fill}\mbox{ }\\
\end{colormixin}
\onslide<11-20>
\begin{colormixin}{\the\qopaqueness!averagebackgroundcolor}
\begin{quote}
\usefont{T1}{pzc}{m}{n}\huge
Beautiful typography\dots\\[.5em]
for paper and screen.\\[.5em]
\end{quote}
{\hspace*{\fill}\small \emph{Presenting without Tears}, A.\ Typesetter}
\end{colormixin}
\end{overprint}
\end{center}
\end{frame}
\end{Form}
\end{document}
编辑:感谢一条有用的评论,我已捕获 acroread 中显示的动画。虽然这是一个 gif,但动画本身在 PDF 中。gif 只是录制屏幕截图。虽然录制似乎丢失了这一点,但动画实际上是通过单击第一张幻灯片触发的。但是,由于某种原因,在实际与 PDF 交互时,录制会丢失 acroread 中显示的指针的图片,因此您只能想象这一点。此外,在 PDF 中,动画只播放一次,正如您所期望的那样,它旨在传达两段文本之间的关系。
编辑:预览时效果很好,但现在我已发布,只看到最后一帧静止画面。不知道为什么...