TeX で花火を打ち上げてアニメーションする件について
TeX ユーザの間では正月といえば TeX で花火を打ち上げるのが恒例の行事となっている*1が、どうも今年は花火をアニメーションにしなければいけないらしい。
(どちらも元ネタは TeX.SE への例のページへの新たな投稿(末尾)である。)
しかし、作業内容をよく見ると、どちらも「LaTeX(+ TikZ)で複数ページの PDF を作る」→「それをアニメ GIF に ImageMagick で変換する」という手順を踏んでいる。つまり肝心のアニメーションする部分が TeX になっていない。
この事態は非常にいただけないので、animate パッケージを用いてアニメーションを含んだ PDF 文書を作成するように修正してみた。
- firework-cmhughes.tex & firework-kumar.tex (gist/zr-tex8r)
最初の絵(firework-cmhughes.tex)を例にとると、次のような修正を加えている。*2
(オリジナル)
% standalone クラスなので文書中に現れた各々の tikzpicture % 環境の出力が別箇のページとなる documentclass[tikz]{standalone} \usepackage{tikz} \usetikzlibrary{decorations.pathmorphing,decorations.shapes} \begin{document} % アニメーションは20フレームあり, パラメタ \radius が変化する. % (pgffor パッケージの \foreach 命令でループを実装.) \foreach \radius in {1,2,...,20} { \begin{tikzpicture} % background rectangle \filldraw[black] (-3,-3) rectangle (5,3); % …………(中略)………… \end{tikzpicture} } \end{document}
(修正後)
%% pdflatex でコンパイルすること %% standalone は animate と衝突しそうだからやめた. \documentclass[a4paper]{article} %% 代わりに絵の部分(8cm×6cm)のみで余白のないページ %% レイアウト設定を自力で行う. \usepackage[papersize={8cm,6cm}, margin=0mm,noheadfoot]{geometry} \setlength{\parindent}{0pt} \usepackage{tikz} \usetikzlibrary{decorations.pathmorphing,decorations.shapes} \usepackage{animate} % animate パッケージを利用する \begin{document} %% TeX 出力によるアニメーションを行う \begin{animateinline}[autoplay,loop]{5}% 5 fps %% \multiframe でパラメタを用いた複数フレームの %% 一括入力ができる \multiframe{20}{iFC=1+1}{% \iFC goes 1 to 20 \begin{tikzpicture} %% バウンディングボックスを明示指定する \useasboundingbox (-3,-3) rectangle (5,3); %% animate パラメタ \iFC の値を TikZ 内のパラメタ %% \radius に代入する. %% (※どちらも数値マクロだから実際は \let で十分だが.) \pgfmathtruncatemacro{\radius}{\iFC}% %% ↓↓あとはオリジナルと同じ % background rectangle \filldraw[black] (-3,-3) rectangle (5,3); % …………(中略)………… \end{tikzpicture}% %% ↑↑ここまでオリジナルと同じ }% \end{animateinline} \end{document}
出力の PDF 文書を公開しておく。(※一旦ダウンロードして Adobe 製品で見ないとアニメーションが動作しないだろう。)