Page 1 sur 1

Insertion d'animation dans un document LaTeX

Posté : ven. 20 janv. 2017, 00:37
par boubamane
Bonsoir,

Avec l'aide de Chellier sur http://forum.mathematex.net/asymptote-f ... 16718.html, j'ai obtenu ce code que je veux introduire dans un document \LaTeX.

Code : Tout sélectionner

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{asymptote}
\usepackage{asymptote}
\begin{document}

Du texte \dots

\begin{figure}
\centering
\begin{asy}
    import geometry;
    import animate;
    settings.tex="pdflatex";
    settings.outformat="pdf";

    size(11cm);

    pen p = linetype("4 4"); // pointillés plus petits
    marker croix = marker(scale(4)*cross(4),linewidth(bp)); // croix des points

    transform ref = reflect(Ox); // symétrie axiale par rapport à (Ox)
    point O = (0,0), A = (3,1), B = ref*A;
    line om = line(O,false,(1,0)), // demi-droite (false en O)
         oa = line(O,false,A), ob = line(O,false,B);

    animation MonAnim;

    markangle(B,O,A,bp+deepgreen,Fill(palegreen));
    draw("$O$",O,1.5W,croix);
    draw(om, bp+red);
    draw(oa^^ob,linewidth(bp));
    draw((0,-2)--(5,2),invisible); // pour que la figure ait des dimensions fixes

    MonAnim.add();

    // jouer sur l'incrémentation de i et delay pour la fluidité et le poids du fichier
    for(real i=.6; i<4.5; i=i+.05) {
      save();
      point M=relpoint(Ox,i), A=projection(oa)*M, B=projection(ob)*M;
      draw(A--M--B,p+bp,StickIntervalMarker(2,2,linewidth(bp)));
      markrightangle(O,A,M,2bp+deepgreen,Fill(palegreen));
      markrightangle(M,B,O,2bp+deepgreen,Fill(palegreen));
      draw("$A$",A,1.5N,croix);
      draw("$B$",B,1.5S,croix);
      draw("$M$",M,1.5NE,croix);
      MonAnim.add();
      restore();
    }

    erase(); // pour éviter les "décalages"
    //MonAnim.movie(); // pdf multipage
    label(MonAnim.pdf("controls",delay=100)); // pdf avec boutons de contrôle
\end{asy}
\caption{Propriété de la bissectrice d'un angle}
\end{figure}

Du texte \dots
\end{document}
Comment fait-on pour avoir l'animation à partir du ficher d'extension tex ?

Re: Insertion d'animation dans un document LaTeX

Posté : mer. 25 janv. 2017, 18:33
par GM
Bonsoir,
je découvre ce problème vieux de 5 jours donc, comme je suis un peu débordé, je vais d'abord demander s'il est réglé avant de faire des tests.

Re: Insertion d'animation dans un document LaTeX

Posté : jeu. 26 janv. 2017, 01:52
par boubamane
Je suis inondé par des copies à corriger. Je n'ai malheureusement pas pu y revenir. Le problème demeure entier.

Re: Insertion d'animation dans un document LaTeX

Posté : jeu. 26 janv. 2017, 18:35
par OG
Bonsoir

Je n'ai pas de copies à corriger :) mais pas beaucoup de temps non plus (j'ai d'ailleurs une ou deux
figures asymptote à faire).

La doc contient cet exemple.

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{asymptote}
%\usepackage{asymptote}
\usepackage{animate}
\begin{document}

Here is an inline PDF movie, generated with the commands
\begin{verbatim}
pdflatex inlinemovie
asy inlinemovie-*.asy
pdflatex inlinemovie
\end{verbatim}
or equivalently,
\begin{verbatim}
latexmk -pdf inlinemovie
\end{verbatim}

\begin{center}
\begin{asy}
import animate;
animation A=animation("movie1");
real h=2pi/10;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < 10; ++i) {
  draw(pic,expi(i*h)--expi((i+1)*h));
  A.add(pic);
}
label(A.pdf("controls",delay=50,keep=!settings.inlinetex));
\end{asy}
%Uncomment the following line when not using the [inline] package option:
%\ASYanimategraphics[controls]{50}{movie1}{}{}
\end{center}
And here is another one, clickable but without the control panel:
\begin{center}
\begin{asy}
import animate;
animation A=animation("movie2");
real h=2pi/10;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < 10; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),red);
  A.add(pic);
}
label(A.pdf(keep=!settings.inlinetex));
\end{asy}
%Uncomment the following line when not using the [inline] package option:
%\ASYanimategraphics[controls]{10}{movie2}{}{}
\end{center}

\end{document}

Inclure le code directement de Christophe ne marchera pas (j'ai testé). Comme je n'ai pas Acrobat Reader
je ne peux pas tester plus. J'ai modifié le fichier pour avoir une cohérence avec inlinemovie.tex de la doc,
en ajoutant un picture pic.... Là j'ai un pdf avec le "panel control", mais je ne sais pas si l'animation est correcte.
Sous toute réserve (2nde essai) il faut
1) modifier le .asy de l'animation en spécifiant

Code : Tout sélectionner

label(MonAnim.pdf("controls",delay=100,keep=!settings.inlinetex));
cela permet en fait de garder certains fichiers, _nom_du_fichier.pdf

Ensuite il faut tout simplement placer dans le fichier LaTeX

Code : Tout sélectionner

\ASYanimategraphics[controls]{50}{nom_du_fichier}{}{}
Edit (2ème) : si on préfère que l'animation reste dans le fichier LaTeX, voici une solution. Si le document
contient plusieurs animations, il est utile de les nommer. Voici le code, il faut ajouter l'option
[inline] au paquet asymptote.

Code : Tout sélectionner

\documentclass{article}

\usepackage[inline]{asymptote}
\usepackage{animate}
\begin{document}


\begin{asy}
import geometry;
import animate;
//settings.tex="pdflatex";
//settings.outformat="pdf";

animation AA=animation("MonAnim");
//animation MonAnim ;
//picture pic;
size(11cm);

pen p = linetype("4 4"); // pointillés plus petits
marker croix = marker(scale(4)*cross(4),linewidth(bp)); // croix des points

transform ref = reflect(Ox); // symétrie axiale par rapport à (Ox)
point O = (0,0), A = (3,1), B = ref*A;
line om = line(O,false,(1,0)), // demi-droite (false en O)
oa = line(O,false,A), ob = line(O,false,B);



markangle(B,O,A,bp+deepgreen,Fill(palegreen));
draw("$O$",O,1.5W,croix);
draw(om, bp+red);
draw(oa^^ob,linewidth(bp));
draw((0,-2)--(5,2),invisible); // pour que la figure ait des dimensions fixes

AA.add();

// jouer sur l'incrémentation de i et delay pour la fluidité et le poids du fichier
for(real i=.6; i<4.5; i=i+.05) {
save();
point M=relpoint(Ox,i), A=projection(oa)*M, B=projection(ob)*M;
draw(A--M--B,p+bp,StickIntervalMarker(2,2,linewidth(bp)));
markrightangle(O,A,M,2bp+deepgreen,Fill(palegreen));
markrightangle(M,B,O,2bp+deepgreen,Fill(palegreen));
draw("$A$",A,1.5N,croix);
draw("$B$",B,1.5S,croix);
draw("$M$",M,1.5NE,croix);
AA.add();
restore();
}

erase(); // pour éviter les "décalages"
//MonAnim.movie(); // pdf multipage
label(AA.pdf("controls",delay=100,keep=!settings.inlinetex)); // pdf avec boutons de contrôle
\end{asy}
\end{document}

En fait une animation consiste juste en n fichiers pdf, chacun constituant une image. Le paquet animate
se charge de traduire en langage pdf. Le fichier _MonAnim.pdf contient ces n images.


Bon courage
O.G.