如何使用 tikz 和 animate 包生成烟花 pdf 文件?

如何使用 tikz 和 animate 包生成烟花 pdf 文件?

这里是一个关于如何展示烟花的问题,我非常喜欢 cmhughes 的答案。它生成 20 帧,然后使用它们生成文件gif。但我希望这 20 帧只显示在一帧中。我知道我应该使用该animate包,但我对这个包还不熟悉,我不知道如何将它与tikz包关联起来。这是代码,但它不起作用。有人能帮忙吗?提前谢谢,新年快乐。

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing,decorations.shapes}
\usepackage{animate}
\usepackage{ifthen}

\begin{document}
\begin{frame}
\begin{animateinline}[poster=first, controls]{8}%
    \multiframe{21}{radius=1+1}{%
    \begin{tikzpicture}
    % background rectangle
    \filldraw[black] (-3,-3) rectangle (5,3);
    % skyline
    \filldraw[black!80!blue](-3,-3)--(-3,-2)--(-2.5,-2)--(-2.5,-1)--(-2.25,-1)--(-2.25,-2)--(-2,-2) --(-2,-1)--(-1.75,-0.75)--(-1.5,-1) --(-1.5,-2)--(-1.1,-2)--(-1.1,0)--(-0.5,0)--(-0.5,-2) --(0,-2)--(0,-1.5)--(1,-1.5)--(1.25,-0.5)--(1.5,-1.5)--(1.5,-2) --(2,-2)--(2,0)--(2.5,0)--(2.5,-2) --(3,-2)--(3,-1)--(4,-1)--(4,-2)--(5,-2)--(5,-3)--cycle;
    % moon- what a hack!
    \filldraw[white] (4,2.5) arc (90:-90:20pt);
    \filldraw[black] (3.8,2.5) arc (90:-90:20pt);
    % fireworks
    \pgfmathparse{100-(\radius-1)*10};
    % red firework
    \ifnum\radius<11
    \draw[decorate,decoration={crosses},red!\pgfmathresult!black] (0,0) circle (\radius ex);
    \fi
    % orange firework
    \pgfmathparse{100-(\radius-6)*10};
    \ifnum\radius>5
    \ifnum\radius<16
    \draw[decorate,decoration={crosses},orange!\pgfmathresult!black] (1,1) circle ( \radius ex-5ex);
    \fi
    \fi
    % yellow firework
    \pgfmathparse{100-(\radius-11)*10};
    \ifnum\radius>10
    \draw[decorate,decoration={crosses},yellow!\pgfmathresult!black] (2.5,1) circle (\radius ex-10ex);
    \fi
    \end{tikzpicture}
    }
\end{animateinline}
\end{frame} 
\end{document}

编辑:上述代码是通过复制 cmhughes 的代码获得的(这里)放入示例中的代码中(这里),但是在编译时却不起作用。

答案1

cmhughes代码使用standalone类来生成多页 pdf 文件,您可以将其包含在beamer framewith 命令中\animategraphics而不是 中multiframe

假设这fireworks是由 cmhughes 代码生成的 pdf 文件,则代码如下:

\documentclass{beamer}
\usepackage{animate}
\begin{document}
\begin{frame}
\animategraphics{1}{fireworks}{}{}
\end{frame}
\end{document}

将生成一个包含整个动画的 pdf 文件frame。我必须使用 Adob​​e Reader 打开它才能观看,我不知道其他 pdf 阅读器是否可以重现它。

答案2

只是为了完整性,使用一体化文件版本\multiframe

问题的原始代码无法编译,因为 TeX 原语\ifnum比较整数但\multiframe{21}{radius=1+1}{...}定义\radius为实数。

只需替换radiusiRadius即可确保参数定义为整数:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing,decorations.shapes}
\usepackage{animate}
\usepackage{ifthen}

\begin{document}
\begin{frame}
\begin{animateinline}[poster=first, controls, loop]{8}%
    \multiframe{21}{iRadius=1+1}{%
    \begin{tikzpicture}
    % background rectangle
    \filldraw[black] (-3,-3) rectangle (5,3);
    % skyline
    \filldraw[black!80!blue](-3,-3)--(-3,-2)--(-2.5,-2)--(-2.5,-1)--(-2.25,-1)--(-2.25,-2)--(-2,-2) --(-2,-1)--(-1.75,-0.75)--(-1.5,-1) --(-1.5,-2)--(-1.1,-2)--(-1.1,0)--(-0.5,0)--(-0.5,-2) --(0,-2)--(0,-1.5)--(1,-1.5)--(1.25,-0.5)--(1.5,-1.5)--(1.5,-2) --(2,-2)--(2,0)--(2.5,0)--(2.5,-2) --(3,-2)--(3,-1)--(4,-1)--(4,-2)--(5,-2)--(5,-3)--cycle;
    % moon- what a hack!
    \filldraw[white] (4,2.5) arc (90:-90:20pt);
    \filldraw[black] (3.8,2.5) arc (90:-90:20pt);
    % fireworks
    \pgfmathparse{100-(\iRadius-1)*10};
    % red firework
    \ifnum\iRadius<11
    \draw[decorate,decoration={crosses},red!\pgfmathresult!black] (0,0) circle (\iRadius ex);
    \fi
    % orange firework
    \pgfmathparse{100-(\iRadius-6)*10};
    \ifnum\iRadius>5
    \ifnum\iRadius<16
    \draw[decorate,decoration={crosses},orange!\pgfmathresult!black] (1,1) circle ( \iRadius ex-5ex);
    \fi
    \fi
    % yellow firework
    \pgfmathparse{100-(\iRadius-11)*10};
    \ifnum\iRadius>10
    \draw[decorate,decoration={crosses},yellow!\pgfmathresult!black] (2.5,1) circle (\iRadius ex-10ex);
    \fi
    \end{tikzpicture}
    }
\end{animateinline}
\end{frame}
\end{document}

相关内容