Utilisation de Opytex

Écriture des documents - surcharge sur latex

Opytex ajoute deux commandes “latex” pour inclure du code Python interprété dans les documents.

Commande Var

Cette commande va exécuter du code python qui sera ensuite inclut dans le document tex produit.

Je peux afficher des nombres \Var{2}, \Var{2+3} ...
Et si j'ai enregistré une variable \Block{set a = 1}, je peux ensuite l'afficher \Var{a}.

Ce qui produira le document suivant

Je peux afficher des nombres 2, 5 ...
Et si j'ai enregistré une variable, je peux ensuite l'afficher 1.

Commande Block

Cette commande permet d’exécuter du code python qui ne sera pas afficher dans le document tex produit.

Je peux déclarer des variables
\Block{set a = 1}
\Block{set b = 2}
Et même faire des calculs
\Block{set c = a + b}
Mais rien ne sera affiché.

Ce qui produira le document suivant

Je peux déclarer des variables
Et même faire des calculs
Mais rien ne sera affiché.

La commande Block donne accès tag de jinja2.

  • Les boucles

    On peut faire des boucles et parcourir des listes
    \Block{set l = [1,2,3,4]}
    \Block{for i in l}
    i vaut \Var{i}
    \Block{endfor}
    

Ce qui produira

On peut faire des boucles et parcourir des listes
i vaut 1
i vaut 2
i vaut 3
i vaut 4

Quelques commandes supplémentaires

Comme Opytex utilise le moteur de template Jinja2, la notion de filtre peut être utilisée.

Filtres qui marchenet bien avec pyMath

  • “join”: Mettre en forme un calcul sur une seule ligne

    On commence par définir une expression,
    \Block{set e = Expression("1 + 2*3")}
    et on veut détailler sa simplification
    \begin{align*}
        \Var{e.simplify().explain()|join('=')}
    \end{align*}
    

    Ce qui produira le document suivant

    On commence par définir une expression,
    et on veut détailler sa simplification
    \begin{align*}
        1 + 2 \times 3 =  1 + 6 = 7
    \end{align*}
    
  • calculus: Mettre en forme un calcul sur plusieurs lignes

    On commence par définir une expression,
    \Block{set e = Expression("1 + 2*3")}
    et on veut détailler sa simplification
    \begin{eqnarray*}
        \Var{e.simplify().explain()|calculus(name = 'e')}
    \end{eqnarray*}
    

    Ce qui produira le document suivant

    On commence par définir une expression,
    et on veut détailler sa simplification
    \begin{eqnarray*}
        e & = & 1 + 2 \times 3 \\
        e & = & 1 + 6 \\
        e & = & 7
    \end{eqnarray*}
    

Compilation des documents

Pour créer ce DM on commence par rédiger le fichier template.

Puis on génère et compile les 3 sujets avec la commande

opytex -t tpl_DM.tex -N 3

Ce qui a crée les fichiers sources:

et les fichiers compilés ont été concaténés dans le fichier all_DM.pdf.

Pour obtenir la correction, on le demande poliement à Opytex

opytex -t tpl_DM.tex --only-corr

Ce qui a pour effet de décommenter la ligne avec printanswers, de recompiler les documents puis de les concatener dans corr_DM.pdf sans regénérer de nouveaux sujets.

Il est possible aussi de créer les sujets et les corrections en même temps avec

opytex -t tpl_DM.tex -c -N 60