我尝试了 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。asy
animate
一切正常,r从 1 运行到 31。
我也尝试在 TeXLive 之外安装 Asymptote-2.21,得到了相同(正确)的结果。