Cliquez pour télécharger le PDF correspondant

Les animations sous LaTeX

Sous LaTeX, il est possible d’inclure des vidéos, mais une approche plus élégante encore est de générer des animations, directement depuis le code source, grâce au package animate.

A partir d’une série d’images

$latex \LaTeX$  ne prend pas en charge les images GIF, mais on peut créer une animation directement à partir d’un lot d’images au format compatible (pour rappel : PNG, PDF et JPEG pour pdflatex, PS ou EPS pour latex).

Exemple minimal

\documentclass{minimal}
\usepackage{graphicx}
\usepackage{animate}
 
\begin{document}
	\animategraphics[autoplay,loop,width=\textwidth,controls]{5}{Images/Image_}{0}{99} 
\end{document}
Cliquez pour télécharger le PDF correspondant
Cliquez pour télécharger le PDF correspondant

Attention, il est fort probable que le lecteur PDF par défaut de votre navigateur ne gère pas les boutons d’action et animations (à ma connaissance, Adobe Reader et Foxit Reader le font).

Le principe du code ci-dessus est très simple : une boucle est opérée de façon à aller chercher l’image Images/Image_0.png, puis l’image Images/Image_1.png etc. jusqu’à 99. Comme on peut s’en douter, les options entre crochets servent dans l’ordre à :

  • lire automatiquement l’animation au chargement de la page,
  • lire l’animation en boucle,
  • définir la largeur des images,
  • afficher les boutons de contrôle.

L’argument « 5 » entre accolades indique le nombre d’images par seconde affichées par défaut (cette valeur pouvant être changée grâce aux boutons d’actions).

Conversion d’un GIF animé en un lot d’images JPEG/PNG

Si vous disposez à la base d’une animation GIF, il vous faut commencer par la décomposer en images disctinctes. Vous pouvez le faire à la main sous Gimp, en affichant chaque couche puis en l’enregistrant séparément. Si vous êtes sur une machine Linux, le plus rapide est d’utiliser la commande convert (dont j’ai déjà parlé ici) pour obtenir les images numérotées :

convert GIFanimé.gif Image_%d.png

Couplé avec TikZ

Paramétrer les coordonnées en fonction du temps

Là où ça devient vraiment intéressant, c’est quand on utilise animate avec TikZ, ce qui va nous permettre de coder de bout en bout l’animation. Exemple simple pour afficher une sorte d’horloge un peu moche :

\documentclass{minimal}
\usepackage{animate}
\usepackage{tikz}
 
\begin{document}
	\begin{animateinline}[autoplay,loop,controls]{10} 
		\multiframe{180}{rangle=0+30}{ 
			\begin{tikzpicture}[scale=1] 
				\draw (0,0) circle (1);
				\draw[thick,->] (0,0) -- ({cos(90-\rangle)},{sin(90-\rangle)});
				\draw[thick,->] (0,0) -- ({cos(90-\rangle/60)},{sin(90-\rangle/60)});
 			\end{tikzpicture} 
		} 
	\end{animateinline} 
\end{document}
Cliquez pour télécharger le PDF correspondant
Cliquez pour télécharger le PDF correspondant

Les différentes « frames » (qui n’ont pas de lien avec les frames de Beamer, rassurez-vous) sont gérées par cette espèce de compteur : rangle. Ces compteurs doivent nécessairement avoir un préfixe dans leur nom, définissant ainsi le type de variable :

  • d pour une dimension
  • i pour un entier
  • n ou r pour un réel

Dans mon exemple actuel, rangle va commencer à 0 et être incrémenté de 30 à chacune des 180 frames.

Affichage progressif d’un chemin

Il est de plus possible d’afficher progressivement un chemin à l’aide de ses ‘coordonnées curvilignes’, moyennant quelques lignes de code supplémentaires. Exemple pour afficher progressivement un carré :

\documentclass{minimal}
\usepackage{animate}
\usepackage{tikz}
\usetikzlibrary{calc,decorations,arrows,positioning,matrix}
 
\pgfdeclaredecoration{ignore}{final}{
	\state{final}{}
}
 
\pgfdeclaremetadecoration{start}{initial}{
    \state{initial}[width={0pt},next state=middle]{
    	\decoration{moveto}
    }
    \state{middle}[width={\pgfmetadecoratedpathlength*\pgfdecorationsegmentlength},next state=final]{
    	\decoration{curveto}
    }
    \state{final}{\decoration{ignore}}
}
 
\tikzset{
	start segment/.style={decoration={start,raise=2mm},decorate, segment length=#1},
}
 
\begin{document}
	\begin{animateinline}[autoplay,loop,controls]{3} 
		\multiframe{11}{rPos=0+0.1}{ 
			\begin{tikzpicture}
				\draw[start segment=\rPos,black!70, line width=2.5] (0,0) -- (1,0) -- (1,1) -- (0,1) --cycle ;
 			\end{tikzpicture} 
		} 
	\end{animateinline} 
\end{document}
Cliquez pour télécharger le PDF correspondant
Cliquez pour télécharger le PDF correspondant

Pour aller plus loin

Le plus simple est bien entendu d’aller jeter un œil sur la documentation officielle du package animate. Sinon, je vous conseille aussi de visiter la page de Texample sur les animations, où on peut y trouver quelques exemples assez bluffants !