我最近发现animate
包(实际上它在这里,寻找替代方案时我遇到了这个:https://tex.stackexchange.com/a/235180/212085),我想beamer
为课程生成两个不同版本的幻灯片:
- PDF(如果你像我一样使用免费软件查看器,则根本没有动画)
- SVG(带动画,在浏览器中查看幻灯片)
当我尝试在幻灯片\animategraphics
中运行最简单的示例时,我的问题就开始了beamer
。我能够让standalone
文档正常工作,但使用文档类时就会出现问题beamer
。我尝试了几个我找到的示例\animateinline
,它们运行完美(例如,svgbeamer.tex
AlexG 在https://tex.stackexchange.com/a/235180/212085)...但是我无法让它与一个非常简单的\animategraphics
原型一起工作。
对于我的第一个示例,我使用这个公共领域的动画 gif(https://upload.wikimedia.org/wikipedia/commons/e/e7/Simple_raycasting_with_fisheye_correction.gif) 然后使用 ImageMagick 将其切片到相应的 40 帧中convert
(我生成了 PNG 和 EPS 文件来尝试 LaTeX 和 XeLaTeX)。
使用作者在官方文档中提供的最小模板,我写了这个简单的beamer
例子(example.tex
):
\documentclass[dvisvgm,aspectratio=169]{beamer}
\usepackage{animate}
%\usepackage{graphicx} % already included by beamer
%\usepackage{tikz} % already included by beamer
\begin{document}
\begin{frame}{Simple raycasting animation}
\animategraphics[controls,loop,autoplay]{16}{tmp/raycasting_frame}{00}{39}
\end{frame}
\end{document}
然后
latex example
latex example
... DVI 文件看起来不错(静态的,但不错)。然后:
dvisvgm --font-format=woff --zoom=-1 -p1,- example
创建 SVG 文件并提供以下反馈:
pre-processing DVI file (format version 2)
processing page 1
graphic size: 455.24408pt x 256.074799pt (159.999995mm x 89.999998mm)
output written to example.svg
1 of 1 page converted in 2.84687 seconds
但是,动画似乎“超出”了 SVG 中的视口。在浏览器中渲染文件时,只有幻灯片的标题和控件可见,而使用 Inkscape 打开它会显示幻灯片下方的图片。在这里,您可以获取两个文件(DVI 和 SVG)以了解我的意思:
奇怪的是(或者不是),如果我从文档类中删除该dvisvgm
参数,最终的 SVG 会在视口中显示图片,并且只执行一次整个动画(而且非常快),但控件不起作用。在这种情况下,图片不会出现在之前的 DVI 文件中 :-?
更新:
在得到这些善意的回答后,我刚刚检查了多页 PDF 方法(我宁愿使用这种替代方案而不是使用 PNG 或 EPS 图像),当从浏览器打开 SVG 时我没有检测到任何变化,但是现在我用 Inkscape 打开它时根本看不到图片(所以我认为它没有嵌入到 SVG 中,因为文件大小证实了这一点)。
这些是我使用多 pdf 方法生成的新文件:
现在的流程是:
xelatex -no-pdf example2
xelatex -no-pdf example2
dvisvgm --font-format=woff --zoom=-1 -p1,- example2.xdv
dvisvgm
提供以下输出:
pre-processing DVI file (format version 7)
processing page 1
graphic size: 455.24408pt x 256.074799pt (159.999995mm x 89.999998mm)
output written to example2.svg
1 of 1 page converted in 0.283845 seconds
example.tex
(现在example2.tex
)中唯一的变化是\animategraphics
调用:
\animategraphics[controls,loop,autoplay,width=\linewidth]{16}{tmp/raycasting_frame}{}{}
dvisvgm
我还在前文中添加了输出(当使用latex
和 EPS 文件而不是xelatex
和多页 PDF 时)。
顺便说一句,我dvisvgm
在 Debian 系统中使用 TeXLive-2019 (2.9)。
更新2:
我已经将 TeXLive 从 2019 更新到 2020(我使用了 Debian 实验包),并且我下载并编译了dvisvgm 2.9.1
(来自https://dvisvgm.de)... 成功了!(至少对于 EPS 文件方法来说)
现在,生成example.svg
的文件可以完美运行动画。example.tex
latex example; latex example; dvisvgm --font-format=woff --zoom=-1 -p1,- example
不过,我仍然坚持使用多页 PDF 替代方案。根据 @AlexG 的建议,我\usepackage{pdfbase}
在 的序言中添加了以下内容example3.tex
(这是与 的唯一区别example2.tex
),在xelatex -no-pdf example3; xelatex -no-pdf example3; dvisvgm --font-format=woff --zoom=-1 -p1,- example3.xdv
获得这些文件后(我还附加了日志文件):
答案1
包xcolor
(被)加载了错误的图形和颜色beamer
驱动程序文件,尽管它作为全局选项传递给了文档类。不知道并用作默认值。xetex.def
dvisvgm
beamer
xcolor
dvisvgm
xetex.def
为了能够处理xelatex --no-pdf
后端的输入dvisvgm
,我们强制dvips.def
使用xcolor
。dvips.def
使用与相同的颜色定义。我们可以通过使用正确的驱动程序选项dvisvgm.def
进行加载来实现这一点xcolor
前文档类。从长远来看,xcolor
应该更新 pkg 以了解dvisvgm
。
然后,raycasting_frame.pdf
使用正确的低级命令(\special
s)嵌入包含动画帧的多页 PDF。
要编译的示例代码xelatex --no-pdf
(或另一个 DVI/XDV 制作引擎)+dvisvgm --zoom=-1 --font-formt=woff2 --page=- --bbox=papersize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Force graphicx/color driver `dvips.def'
\RequirePackage[dvips]{xcolor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[dvisvgm,aspectratio=169]{beamer}
\usepackage{animate}
%\usepackage{graphicx} % already included by beamer
%\usepackage{tikz} % already included by beamer
\graphicspath{{tmp/}}
\begin{document}
\begin{frame}{Simple raycasting animation}
\animategraphics[controls,loop,autoplay,width=\linewidth]{16}{raycasting_frame}{}{}
\end{frame}
\end{document}
raycasting_frame.pdf
从获得Simple_raycasting_with_fisheye_correction.gif
和:
convert -coalesce Simple_raycasting_with_fisheye_correction.gif raycasting_frame.pdf