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
.
Table des matières
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} |
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} |
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 dimensioni
pour un entiern
our
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} |
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 !