# Adding Animations to LaTeX

I recently gave a departmental seminar of some of my most recent doctoral research here at the University of Saskatchewan. As a part of that presentation, to emphasize how a particular variation of sum rule worked, I included this animation in my presentation:

My presentation was built using LaTeX (using the presentation package `beamer`

),
and I created a lot of the figures and diagrams using either Inkscape (for diagrams)
or Mathematica (for the plots).

I played around for a while with different strategies to animate within LaTeX, and
this is a summary of what I finally came up with after some hours of searching and
experimenting. I generate the frames of my animation using Mathematica.
I then use the `\animategraphics`

command coming from the LaTeX package `animate`

to
animate the frames when compiling my `beamer`

presentation.

First, to produce the figure, I used a toy spectral function defined by a sum of Gaussians in Mathematica

```
spectralfunction[x_] := Exp[-(x - 3)^2] + Exp[-((x - 7)^2/2)]/Sqrt[2] + Exp[-((x - 11)^2/3)]/Sqrt[3]
```

For my purposes, I was interested in plotting this toy spectral function alongside a Gaussian function, as well as the product of the Gaussian function with the toy spectral function. The code for the animation within Mathematica would look something like this (I’ve eliminated some normalization factors from my own plot displayed above that shouldn’t change how the code works):

```
Animate[
Plot[{spectralfunction[x], Exp[-(s - x)^2/(4)], spectralfunction[x]Exp[-(s - x)^2/(4)]}, {x, 0, 15},
PlotRange -> Full,
Ticks -> None,
ImageSize -> Large,
PlotLegends -> Placed[{"\!\(\*SuperscriptBox[\(\[Rho]\), \(had\)]\)", "Gaussian kernel", "GSR"}, Below],
AxesLabel -> {"t", ""}
],
{s, 0, 14, 0.1}
]
```

To make this animation using the `\animategraphics`

LaTeX environment, we need to export this animation to a series of still frames.
To do this, instead of plotting the above animation above, I instead created a `Table`

holding each frame of the animation
(essentially switching out the `Animate`

command for a `Table`

command):

```
frameTable = Table[
Plot[{spectralfunction[x], Exp[-(s - x)^2/(4)], spectralfunction[x]Exp[-(s - x)^2/(4)]}, {x, 0, 15},
PlotRange -> Full,
Ticks -> None,
ImageSize -> Large,
PlotLegends -> Placed[{"\!\(\*SuperscriptBox[\(\[Rho]\), \(had\)]\)", "Gaussian kernel", "GSR"}, Below],
AxesLabel -> {"t", ""}
],
{s, 0, 14, 0.1}
];
```

Note that suppressing the output is useful here if you’re dealing with a large number of images.
To export these images, I iterate through each element of `frameTable`

, exporting to the filename `animation-GSRfit_{FRAMENO}.png`

, where `{FRAMENO}`

ranged from 001 to 141. This will be important in order to use the `animate`

package.

```
Table[
Export[
FileNameJoin[{StringJoin["animation-GSRfit_", StringTake[ToString[NumberForm[i, 2, NumberPadding -> {"0", ""}]], -3], ".png"]}],
table[[i]],
"PNG"],
{i, Length[table]}
]
```

I’ve coded in number padding into the filenaming convention above such that all files will have the same number of digits in their naming convention. In this case, my frame numbering runs from 001 to 141.

Finally, in LaTeX (using the `beamer`

package), I used this block of code to render all the images into an animated figures

```
\begin{frame}{Gaussian Sum Rules}
\centering
\animategraphics[autoplay,loop,height=5cm]{30}{animation-GSRfit_}{001}{141}
\end{frame}
```

The `frame`

environment is an element of beamer; the `\animategraphics`

command takes
the following syntax:

```
\animategraphics[options]{frames per second}{filename without frame number}{first frame number}{last frame number}
```

My figures were saved with the filename `animation-GSRfit_{FRAMENO}`

, where `{FRAMENO}`

ranged from 001 to 141, indicating the beginning and end of our animation that we would indicate here.
Many more options can be explored in the manual for the `animate`

package.

One note: I have noticed that not all PDF viewing programs have been able to handle these animations; the only reliable options I’ve found has been Adobe Acrobat Reader, though I’m sure there’s others.

I have to note that there are tools within Mathematica to export GIFs and video files. There are discussions around whether this is worthwhile; I personally like the control that exporting individual frames gives me. For the 140 frames I generated for this simple plot, it took a few minutes on my Lenovo X220 laptop (Intel® Core™ i5-2540M CPU @ 2.60GHz × 4), and the total size of all the files produced was only 1.5 MB. I don’t often use animations in my presentations, so it is possible I’d rethink this strategy if I were generating these figures more often.

#### Share on

Twitter Facebook Google+ LinkedInNo webmentions were found.