LaTeX & Cie

Petit blog perso à destination des LaTeXiens ;-)

[Tuto] Insertion de codes python et exécution de codes python (LuaLaTeX uniquement ;-))

Rédigé par C. Pierquet Aucun commentaire
Classé dans : Packages, Tutos Mots clés : Package, Tutos, Tutos Package

Un petit billet aujourd'hui pour présenter des capacités combinées intéressantes de deux packages, à savoir piton et pyluatex.

Le premier, développé par François Pantigny (CTAN: Package piton) permet d'insérer et mettre en forme du code Python (et même du pseudocode !) avec coloration syntaxique.
Le second, développé par Tobias Enderle (CTAN: Package PyLuaTeX) permet d'exécuter du code python, et d'émuler une console d'exécution !
À noter d'ailleurs que piton propose, en 'post-analyse', de formater du code exécuté avec coloration syntaxique, et que ProfLycee propose des environnements clés en main pour présenter codes et consoles avec un style particulier :-) 

Quelques points à savoir toutefois :

  • piton, tout comme pyluatex, demande d'utiliser le compilateur LuaLaTeX (que je conseille d'ailleurs, compte tenu de ses multiples atouts, tant au niveau des fontes que des capacités de programmation !) ;
  • pyluatex demande, en plus de compiler en --shell-escape (pour exécuter du code Python !).

Un préambule type (avec éventuellement arara comme script de compilation) pourra donc ressembler à :

% !TeX TXS-program:compile = txs:///arara
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}

\documentclass[french,a4paper,11pt]{article}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python,ignoreerrors]{pyluatex}

Passons aux différents environnements disponibles !

1/ Présentation de pseudo-code

piton, de manière un peu détournée, permet de présenter du pseudo-code, avec ou sans coloration syntaxique, et en partenariat avec ProfLycee on peut utiliser la structure suivante (les clés, entre [...] sont détaillées dans la documentation ^^) :

\begin{PseudoCodePiton}[Largeur=16cm,Filigrane]{}
Algorithme : calcul mental
Variables  : nb1, nb2, resultat_saisi

Début
    nb1 ← randint (1, 10)
    nb2 ← randint (1, 10)
    Afficher(nb1 , " * ", nb2 , " = ? ")
    Saisir(resultat_saisi)
    TantQue resultat_saisi (*$\mathtt{neq}$*) nb1 × nb2  #mode math avec (* *)
        Afficher("Le résultat est incorrect, essayez encore : ")
        Saisir(resultat_saisi)
    FinTantQue
    Afficher("Bravo !")
Fin
\end{PseudoCodePiton}

2/ Présentation de code Python

piton, de manière un logique, permet de présenter du code Python, avec coloration syntaxique, et en partenariat avec ProfLycee on peut utiliser la structure suivante (les clés, entre [...] sont détaillées dans la documentation ^^) :

\begin{CodePiton}[Largeur=16cm,Filigrane]{}
    def liste_diviseurs(n) :
        res = []
        for i in range(1, n+1) :
            if n%i == 0 :
                res.append(i)
        return res
\end{CodePiton}

3/ Exécution de code Python

piton et pyluatex permettent de présenter du code Python exécuté (on peut déclarer du code, une fonction par exemple, et l'exécuter dans la console !), avec coloration syntaxique, et en partenariat avec ProfLycee on peut utiliser la structure suivante (les clés, entre <...> sont détaillées dans la documentation ^^) :

%code python qui est chargé de manière silencieuse
\begin{python}
def liste_diviseurs(n) :
    res = []
    for i in range(1, n+1) :
        if n%i == 0 :
            res.append(i)
    return res
\end{python}

\begin{ConsolePiton}<Largeur=16cm,Alignement=center>{}
liste_diviseurs(14)
liste_diviseurs(1500)
\end{ConsolePiton}

Les environnements proposés par ProfLycee ne sont là qu'à titre indicatif, et l'utilisateur peut personnaliser ses environnements de présentations de codes ;-)

Voilà le code source de document tex qui m'a servi de support pour ce tuto :

% !TeX TXS-program:compile = txs:///arara
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}

\documentclass[french,a4paper,11pt]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python,ignoreerrors]{pyluatex}
\usepackage{babel}

\begin{document}

\begin{PseudoCodePiton}[Largeur=16cm,Filigrane]{}
Algorithme : calcul mental
Variables  : nb1, nb2, resultat_saisi

Début
    nb1 ← randint (1, 10)
    nb2 ← randint (1, 10)
    Afficher(nb1 , " * ", nb2 , " = ? ")
    Saisir(resultat_saisi)
    TantQue resultat_saisi (*$\mathtt{neq}$*) nb1 × nb2
        Afficher("Le résultat est incorrect, essayez encore : ")
        Saisir(resultat_saisi)
    FinTantQue
    Afficher("Bravo !")
Fin
\end{PseudoCodePiton}

\begin{CodePiton}[Largeur=16cm,Filigrane]{}
    def liste_diviseurs(n) :
        res = []
        for i in range(1, n+1) :
            if n%i == 0 :
                res.append(i)
        return res
\end{CodePiton}

\begin{python}
def liste_diviseurs(n) :
    res = []
    for i in range(1, n+1) :
        if n%i == 0 :
            res.append(i)
    return res
\end{python}

\bigskip

\begin{ConsolePiton}<Largeur=16cm,Alignement=center>{}
liste_diviseurs(14)
liste_diviseurs(1500)
end{ConsolePiton}

\end{document}

Lien du fichier texblog.cpierquet.frdata/medias/tuto_piton_pyluatex.tex

Lien du fichier pdftuto_piton_pyluatex.pdf (cpierquet.fr)