マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

TeX で花火を打ち上げてアニメーションする件について

TeX ユーザの間では正月といえば TeX で花火を打ち上げるのが恒例の行事となっている*1が、どうも今年は花火をアニメーションにしなければいけないらしい。

(どちらも元ネタは TeX.SE への例のページへの新たな投稿(末尾)である。)

しかし、作業内容をよく見ると、どちらも「LaTeX(+ TikZ)で複数ページの PDF を作る」→「それをアニメ GIF に ImageMagick で変換する」という手順を踏んでいる。つまり肝心のアニメーションする部分が TeX になっていない。

この事態は非常にいただけないので、animate パッケージを用いてアニメーションを含んだ PDF 文書を作成するように修正してみた。

最初の絵(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 製品で見ないとアニメーションが動作しないだろう。)

*1:ただしこの習慣が始まったのは意外に新しく 2012 年からであるらしい。

*2:後の firework-kumar も最初のものと構造は全く同じである。