我正在编写一个文档,想使用该animate
包嵌入动画。此类最小可编译示例如下:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.6}
\usepackage{tikz}
\usepackage{media9}
\usepackage{animate}
\usepackage{amsmath}
\begin{document}
\newenvironment{tikzframe}[2]{
\begin{tikzpicture}
\draw[very thin, color=white] (0,0) rectangle (#1,#2);
}
{
\end{tikzpicture}
}
\mediabutton[jsaction={anim['graph_switch'].frameNum=0;}]{
\fbox{$\text{sin}(x)$}
}
\mediabutton[jsaction={anim['graph_switch'].frameNum=1;}]{
\fbox{$\text{sin}(2x)$}
}
\mediabutton[jsaction={anim['graph_switch'].frameNum=2;}]{
\fbox{$\text{sin}(3x)$}
}
\begin{animateinline}[label=graph_switch,width=8cm,height=5cm,step]
\newframe{
\begin{tikzframe}{8}{5}
\begin{axis}[
xlabel={$x$},
ylabel={$\text{sin}(x)$},
xmin=-pi,xmax=pi,
]
\addplot[black,samples=101] {sin(x*180./pi)};
\end{axis}
\end{tikzframe}
}
\newframe{
\begin{tikzframe}{8}{5}
\begin{axis}[
xlabel={$x$},
ylabel={$\text{sin}(2x)$},
xmin=-pi,xmax=pi,
]
\addplot[black,samples=101] {sin(2.*x*180./pi)};
\end{axis}
\end{tikzframe}
}
\newframe{
\begin{tikzframe}{8}{5}
\begin{axis}[
xlabel={$x$},
ylabel={$\text{sin}(3x)$},
xmin=-pi,xmax=pi,
]
\addplot[black,samples=101] {sin(3.*x*180./pi)};
\end{axis}
\end{tikzframe}
}
\end{animateinline}
\end{document}
上述示例由三个按钮和一个图表组成。这些按钮允许在不同频率的 sin(x) 图之间切换:
上面的图片是使用 Adobe Acrobat(acroread)显示的样子,但它在 Okular 或 Evince 上根本没有显示(我没有尝试其他的),只显示一张白页。
我知道动画本身不会在这些查看器上显示,我也不打算修复这个问题。我想知道的是如何设置“默认”静态图,例如本例中的 sin(2x),以便至少在 acroread 以外的查看器中显示。这可能吗?
答案1
[2014/11/27]
动画版本扩展了选项poster
,不仅接受从零开始的帧编号first
,last
还接受从零开始的帧编号none
。因此,要将动画的第二帧显示为默认帧,即 sin(2x),如 OP 中所述,请将其放入poster=1
选项列表中。此帧也会显示在不支持基于 JavaScript 的动画的查看器中。
OP 的示例及更正:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.6}
\usepackage{tikz}
\usepackage{media9}
\usepackage{animate}[2014/11/27]
\usepackage{amsmath}
\begin{document}
\mediabutton[jsaction={anim['graph_switch'].frameNum=0;}]{%
\fbox{$\text{sin}(x)$}%
}
\mediabutton[jsaction={anim['graph_switch'].frameNum=1;}]{%
\fbox{$\text{sin}(2x)$}%
}
\mediabutton[jsaction={anim['graph_switch'].frameNum=2;}]{%
\fbox{$\text{sin}(3x)$}%
}
\begin{animateinline}[
poster=1, % sin 2x (frames are numbered in zero-based manner)
width=7.5cm,
label=graph_switch,
begin={\begin{tikzpicture}},
end={\end{tikzpicture}},
% nomouse,
step
]{0}
\begin{axis}[
xlabel={$x$},
ylabel={$\text{sin}(x)$},
xmin=-pi,xmax=pi]
\addplot[black,samples=101] {sin(x*180./pi)};
\end{axis}
\newframe
\begin{axis}[
xlabel={$x$},
ylabel={$\text{sin}(2x)$},
xmin=-pi,xmax=pi]
\addplot[black,samples=101] {sin(2.*x*180./pi)};
\end{axis}
\newframe
\begin{axis}[
xlabel={$x$},
ylabel={$\text{sin}(3x)$},
xmin=-pi,xmax=pi]
\addplot[black,samples=101] {sin(3.*x*180./pi)};
\end{axis}
\end{animateinline}
\end{document}
答案2
显然,这里的主要问题是我在环境\newframe
开始时使用了animateinline
。这是错误的,因为人们应该只\newframe
使用分离帧。因此,第一帧的内容前面不应有任何\newframe
命令。当我删除它时,Okular 和 Evince 都会显示第一帧的(静态)内容(尽管动画仍未播放)。我仍然会接受带有配方的答案,该配方允许选择默认静态帧应该是哪一个。