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 tex
: blog.cpierquet.frdata/medias/tuto_piton_pyluatex.tex
Lien du fichier pdf
: tuto_piton_pyluatex.pdf (cpierquet.fr)