我正在尝试使用动画包制作一些 pdf,用时间轴控制循环。目的是有一个循环,但到达最后一帧时,点的颜色应该会改变。我的主要问题是:
- animateinline 环境不接受标签。在 Javascript 中我应该使用什么动画标签?
- 有没有简单的方法可以在最后一帧之后改变我的颜色然后转到第 1 帧?
我的 tex 文件是:
\documentclass{article}
\usepackage{multido,pstricks,xcolor}
\usepackage{animate}
\newwrite\OutFile%
\immediate\openout\OutFile=mytimeline.txt%
\multido{\iMyFrame=0+1}{5}{%
\immediate\write\OutFile{::\iMyFrame x0}}
\immediate\write\OutFile{::5x0:anim.pageNum=1}
\immediate\closeout\OutFile%
\begin{document}
\definecolor{mycolor}{RGB}{100,0,100}
\begin{center}
\begin{animateinline}[poster=first, controls, %
begin={\SpecialCoor\begin{pspicture}(-5,-5)(5,5)},
%
end={\end{pspicture}},%
timeline=mytimeline.txt]{2}%
\psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
\newframe
\multiframe{5}{iAngle=0+75}{%
\psdot[linecolor=mycolor](1;\iAngle)
\if iAngle=375 {\definecolor{mycolor}{RGB}{100,100,100}}\fi }
\end{animateinline}%
\end{center}
\end{document}
答案1
这是展示时间线文件和animate
JavaScript 编程接口基本用法的一个很好的例子。JavaScript 被用于循环播放动画帧的子范围。
我们不想从头开始重复动画,而是想跳回到第二个循环的开始处,该循环从零度位置的绿点开始。为了实现这一点,我们frameNum
在到达终点后设置动画对象的属性:
anim.myAnim.frameNum=18;
每当timeline
涉及选项时,我们必须区分透明度(在环境中创建animateinline
或嵌入\animategraphics
)和文件中定义的实际动画帧timeline
。
在下面的例子中,时间线文件将在和mytimeline.txt
之间创建的一组透明胶片组织成动画期间要显示的实际帧。\begin[...]{animateinline}{...}
\end{animateinline}
请注意,透明度和帧编号都是从零开始的。
关于文件内 JavaScript 的执行时间的最后说明timeline
:
JavaScript 在开始显示帧。在当前示例中,我们希望anim.myAnim.frameNum=18
在结尾序列中最后一帧的描述。为了实现这一点,我们重复最后一帧描述并添加 JavaScript。这个额外的帧实际上并没有显示,因为我们在它出现后就跳转了。
\documentclass{article}
\usepackage{pstricks,xcolor}
\usepackage{filecontents}
\usepackage{animate}
\SpecialCoor\psset{unit=2}
% mytimeline.txt
\begin{filecontents*}{mytimeline.txt}
%-------------------------------------------------------------------
%[*]:[new frame rate]:[<list of transparencies>][:<JavaScript>]
% `*' in the first column pauses animation
%-------------------------------------------------------------------
::0x0 , 1 % Frame #0: show axes (transparency #0) permanently (`x0'),
% overlay dot at starting position (transp. #1)
::2 % Frame #1: overlay next dot position (transp. #2) on axes
::3 % Frame #2: ... and so on ...
::4
::5
::6
::7
::8
::9
::10
::11
::12
::13
::14
::15 % Frame #14: uses transp. #15 with the first green dot
::16
::17
::18
::19 % Frame #18: the second cycle starts with a green dot at 0° position (transp. #19)
::20
::21
::22
::23
::24
::25
::26
::27
::28
::29
::30
::31
::32
::15 % Re-use the green dots from the first cycle
::16
::17
::18 % Last frame #34
::18: anim.myAnim.frameNum=18; %After last frame, return to frame #18
\end{filecontents*}
\begin{document}
\definecolor{mycolor}{RGB}{100,0,100}
\begin{center}
\begin{animateinline}[
label=myAnim,
controls, loop,
width=\linewidth,
begin={\SpecialCoor\begin{pspicture}(-2,-2)(2,2)},
end={\end{pspicture}},
timeline=mytimeline.txt
]{4}%
%create "transparencies", to be arranged according to timeline
%transparency #0: axes
\psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
\newframe
%transparencies #1 through #18: dots for the first cycle
\multiframe{18}{iAngle=0+20}{%
%green dots on transp. #15 trough #18
\psdot[linecolor=\ifnum\iAngle>275 green\else mycolor\fi,dotscale=5](1;\iAngle)
}
\newframe
%transparencies #19 through #32: green dots for the second cycle
\multiframe{14}{iAngle=0+20}{%
\psdot[linecolor=green,dotscale=5](1;\iAngle)
}
\end{animateinline}%
\end{center}
\end{document}
答案2
你所说的“标签”是什么意思?但是,我不明白为什么你要为这么简单的例子添加时间线。没有它也可以:
\documentclass{article}
\usepackage{multido,pstricks,xcolor}
\usepackage{animate}
\SpecialCoor\psset{unit=2}
\begin{document}
\definecolor{mycolor}{RGB}{100,0,100}
\begin{center}
\begin{animateinline}[poster=first, controls, palindrome,
begin={\begin{pspicture}(-2,-2)(2,2)},
end={\end{pspicture}},%
% timeline=mytimeline.txt
]{2}
\psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
\psdot[linecolor=mycolor,dotscale=5](1;0)
\newframe
\multiframe{18}{iAngle=20+20}{%
\psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
\psdot[linecolor=\ifnum\iAngle>275 green\else mycolor\fi,dotscale=5](1;\iAngle)
}
\end{animateinline}
\end{center}
\end{document}