动画 animategraphics 以错误顺序输出帧

动画 animategraphics 以错误顺序输出帧

我尝试了 Asymptote pdfmovie.asy 示例,但帧的顺序错误。我尝试了许多其他示例,包括 wheel.asy,以及我自己的几次测试,结果总是相同。基本上,帧顺序始终是:

45 帧,1 到 45:1、2、13、24、35、41..45、3..12、14..23、25..34、36..40。

这会随着帧数而变化,但有一个模式(如下所示)。示例渐近线代码可生成 x 个帧(最多 45 个,但可轻松扩展到您想要测试的大小):

// Test Media9 Animate.

// Uncomment the following 2 lines to support pdf animations:
usepackage("animate");
settings.tex="pdflatex";

import graph;
import animation;

size(5cm,0);

// Draw axes.
xaxis( L="x", xmin = -1.0, xmax = 1.0, arrow=EndArrow(3));
yaxis( L="y", ymin = -0.2, ymax = 1.2, arrow=EndArrow(3));

// new array
int [] arrayr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};//, 32, 33, 34, 35, 36, 37, 38, 39,
//40, 41, 42, 43, 44, 45};

animation a;

// Process all radius entries
for(int j=0; j < arrayr.length; ++j)
{
  save();
  label(format("\small r= %d",arrayr[j]),(-.45,.45));  // So I know the frame number.
  a.add(); // Add current picture to animation.
  restore();
}

erase();

// Merge the images into a pdf animation.
label(a.pdf(BBox(0.25cm),delay=250,"controls",multipage=false));

起初我以为是这个代码。然后我以为是 animation.asy。但是,通过保存 pdf 文件,我能够用这个 LaTeX 文件生成相同的结果:

% Try to make Figure 4.
\documentclass{article}

\usepackage{graphicx}
\usepackage{animate}

\begin{document}
\animategraphics[controls]{4}{_fig4+}{00}{26}

\end{document}

此处的 pdf 文件的名称为 _fig4+00.pdf 至 _fig4+26.pdf。我添加了前导零以查看是否是导致问题的原因,但事实并非如此;这并不能解决问题。

于是我修改了 Asymptote 的 animation.asy 程序,使用时间轴文件调用动画图形,并构建了一个时间轴文件来指定帧的顺序。这 27 幅图像的时间轴文件如下所示:

::0
::1
::10
::11
::12
::13
::14
::15
::16
::17
::18
::19
::2
::20
::21
::22
::23
::24
::25
::26
::3
::4
::5
::6
::7
::8
::9

并在上面的 tex 文件中,将该行更改为:

\animategraphics[controls,timeline=_fig4.tl]{4}{_fig4+}{00}{26}

并且一切正常。

因此我可以通过改变 Asymptote 的 animation.asy 文件来解决这个问题:

// animation delay is in milliseconds
real animationdelay=50; // original line 9
string ftimename;       // [CW fix]
...
ftimename = prefix +".tl";             // [CW fix]
for(int i=0; i < fits.length; ++i) {   // original line 105
...
// [CW fix; autoload a timeline file to fix PDF ordering error]
//    string s="\animategraphics["+options+"]{"+format("%.18f",1000/delay,"C")+
string s="\animategraphics["+options+**", timeline="+ftimename+"**]{"+format("%.18f",1000/delay,"C")+
  "}{"+basename();    // original line 129

但这实际上不是一个解决方案,而只是一种变通方法。时间线文件中的帧编号模式非常清楚地表明了问题所在:帧编号的排序方式就像它们是左对齐的 ASCII 字符串一样,这显然是不正确的。

好的,我在 Windows 7 中执行此操作,使用 MinGW(4/26/12)、MiKTeX 2.9,所有软件包都是最新的(Asymptote v2.21、Animate 版本 2012/12/06)、ImageMagick v6.8.1-10 等。基本上,一切正常(嗯,制作 mp4 文件不起作用,但那是另一个问题);我可以使用 TeXworks、latexmk、biblatex、hyperref 等,并且几乎可以按照我的预期完成工作。

现在我可以在 Asymptote 的网页上看到这些示例的运行情况。因此我创建了一个 VirtualBox Debian 安装 (6.0.4),下载了 TeX Live 2012 并安装了整个安装包。我没有更新软件包,因此它是 Asymptote v2.16、Animate 版本 2012/05/04、ImageMagick v6.6.0-4 等。基本上比我在 Windows 上使用的版本早 9 个月。然后我尝试了各种示例。 而且它们运行良好。

因此,Animate 在 Windows 上的运行方式与在 Linux 上的运行方式有所不同。我对任何有关如何修复此问题的建议都很感兴趣。这是一个需要我报告的错误吗?我的 Win PC 上是不是出了什么问题?我可以根据需要创建时间线文件来获取我想要的输出,但这只是我宁愿避免的另一个步骤。

答案1

您描述的问题与media9包无关,只有animate包涉及此 Asymptote 脚本。

我在我的 Linux 机器上使用原始 TeXLive-2012 尝试了您的示例,并在运行您的代码tlmgr update --all之前使用 更新了软件包。是 2012 年 6 月 12 日,Asymptote 是 2.16。asyanimate

一切正常,r从 1 运行到 31。

在此处输入图片描述

我也尝试在 TeXLive 之外安装 Asymptote-2.21,得到了相同(正确)的结果。

相关内容