为与 animate 包不兼容的浏览器启用默认静态框架

为与 animate 包不兼容的浏览器启用默认静态框架

我正在编写一个文档,想使用该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) 图之间切换:

在此处输入图片描述

上面的图片是使用 Adob​​e Acrobat(acroread)显示的样子,但它在 Okular 或 Evince 上根本没有显示(我没有尝试其他的),只显示一张白页。

我知道动画本身不会在这些查看器上显示,我也不打算修复这个问题。我想知道的是如何设置“默认”静态图,例如本例中的 sin(2x),以便至少在 acroread 以外的查看器中显示。这可能吗?

答案1

[2014/11/27]动画版本扩展了选项poster,不仅接受从零开始的帧编号firstlast还接受从零开始的帧编号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 都会显示第一帧的(静态)内容(尽管动画仍未播放)。我仍然会接受带有配方的答案,该配方允许选择默认静态帧应该是哪一个。

相关内容