在 beamer 中,无法从 animate 包中获取 \animategraphics 并正常工作

在 beamer 中,无法从 animate 包中获取 \animategraphics 并正常工作

我最近发现animate包(实际上它在这里,寻找替代方案时我遇到了这个:https://tex.stackexchange.com/a/235180/212085),我想beamer为课程生成两个不同版本的幻灯片:

  • PDF(如果你像我一样使用免费软件查看器,则根本没有动画)
  • SVG(带动画,在浏览器中查看幻灯片)

当我尝试在幻灯片\animategraphics中运行最简单的示例时,我的问题就开始了beamer。我能够让standalone文档正常工作,但使用文档类时就会出现问题beamer。我尝试了几个我找到的示例\animateinline,它们运行完美(例如,svgbeamer.texAlexG 在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.texlatex 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.defdvisvgmbeamerxcolordvisvgmxetex.def

为了能够处理xelatex --no-pdf后端的输入dvisvgm,我们强制dvips.def使用xcolordvips.def使用与相同的颜色定义。我们可以通过使用正确的驱动程序选项dvisvgm.def进行加载来实现这一点xcolor文档类。从长远来看,xcolor应该更新 pkg 以了解dvisvgm

然后,raycasting_frame.pdf使用正确的低级命令(\specials)嵌入包含动画帧的多页 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

相关内容