PythonTeX, graphique et LaTeX: dans cet article, je vous donnais une astuce pour insérer des graphiques faits en Python dans un document LaTeX. Je vais vous présenter ici une autre façon de faire.

Cet article m’a été inspiré d’un post sur le forum de mathematex.

PythonTeX, graphique et LaTeX: objectif

Notre objectif est de créer un document \(\LaTeX\) dans lequel est mis un graphique créé en Python avec mathplotlib. Nous allons pour cela utiliser pythontex.

PythonTeX, graphique et LaTeX: le code \(LaTeX\)

\documentclass[12pt]{article}
\usepackage{graphicx}
\usepackage{pythontex}

\begin{document}

\begin{pycode}
from matplotlib.pylab import *

x = linspace(5,6,100)
# Les listes des abscisses et ordonnées :
xx = [5.13 , 5.7, 5.48, 5.7, 5.66, 5.84, 5.5, 5.69, 5.44, 5.84, 5.82, 5.88, 5.61, 5.65, 5.21, 5.37, 5.46, 5.33, 5.15, 5.74]
yy = [19.47, 21.67, 20.98, 21.46 , 21.6, 22.29, 20.84, 21.46, 20.8, 21.56, 22.02 , 22.54, 21.2, 21.39, 20.49, 20.46, 20.72, 20.07 , 20.24, 21.6]
figure(figsize=(4,4), dpi=100)
a,b = polyfit(xx , yy , 1)
plot(xx , yy , "o")
plot(x , a*x+b)
savefig('graphique.png',bbox_inches='tight')
\end{pycode}
\begin{center}
\IfFileExists{graphique.png}{\includegraphics{graphique.png}}{}
\end{center}

\end{document}

PythonTeX, graphique et LaTeX: compilation

Tout éditeur \(\LaTeX\) qui se respecte admet un champ dans lequel on peut insérer une suite de lignes de commandes. J’utilise personnellement TeXmaker, où je peux insérer la suite d’instructions suivante:

pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex|C:\Users\Stephane\AppData\Local\Programs\Python\Python38-32\python.exe "C:\Users\Stephane\AppData\Local\Programs\MiKTeX 2.9\scripts\pythontex\pythontex.py" %.tex|pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex|"C:/Program Files (x86)/Adobe/Acrobat 11.0/Acrobat/Acrobat.exe" %.pdf

Bien entendu, il faut adapter les chemins à votre configuration.

Explications du code et de la compilation

Le code \(\LaTeX\)

Il n’est pas très compliqué: j’insère les instructions Python entre les balises pycode, puis insère le graphique ainsi créé s’il existe (à l’aide de la commande \IfFileExists. C’est une native \(\LaTeX\) donc aucun package n’est nécessaire pour faire appel à cette macro.

La compilation

Je compile dans un premier temps via pdflatex avec l’option –shell-escape pour pouvoir exécuter des commandes externes (accéder momentanément au shell puis de revenir à la compilation \(\LaTeX\)). Cela a pour conséquence la création de fichiers externes dans un dossier nommé pythontex-files-temp. Dans ce dossier se trouvent plusieurs fichiers \(\TeX\) nécessaires à la compilation finale. Cette compilation créé un fichier dans le même dossier que le fichier compilé. Il contient le code Python.

Ensuite, j’exécute le fichier pythontex.py qui va exécuter le ou les codes Python. Cette exécution créé le graphique et le sauvegarde.

C’est la raison pour laquelle j’exécute encore une autre compilation pdflatex. En effet, le graphique existe donc je peux l’insérer dans le document.

Dans l’article dont le lien figure en introduction, j’avais introduit un booléen… mais j’étais jeune à l’époque! Cette solution est bien mieux et en plus, quelle que soit la compilation (pdfLaTeX, XeLaTeX ou LuaLaTeX), elle fonctionne.


0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
2 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
RAYMOND JOZWIAK

Bonsoir. D’abord un grand merci pour les débutants en latex comme moi; je m’y suis mis avec le COVID et un élève à suivre en cours particuliers (terminale maths expertes), bien qu’étant retraité depuis un peu plus de 10 ans, mais c’est comme le vélo…et là je connais…
Étant très intrigué par pythontex, et étant sous linux-mint(ou ubuntu) j’y suis arrivé ainsi :

  • avec synaptic (gestionnaire des progs), j’ai installé le paquet “texlive-extra-utils” qui comprend pythontex, et en regardant les propriétés des fichiers installés, on trouve où est python.py : chez moi c’est :
    /usr/share/texlive/texmf-dist/scripts/pythonte.py
  • Ensuite dans l’éditeur (texstudio pour moi), ajouter en précompilation dans options–>config–>production, la ligne :
    pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex|/usr/share/texlive/texmf-dist/scripts/pythontex/pythontex.py %.tex |pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex

Et curieusement, quand on fait une erreur dans le code Python, même si on supprime les lignes fautives, la compilation bloque sur cette même erreur . Une parade trouvée par hasard sur un forum : taper dans une console :
/adresseoùonest pythontex --interpreter "python:/usr/bin/python3.6" "le fichier à compiler.tex"
et alors (si plus d’erreurs) s’affiche OK pas d’erreurs et ça recompile sans problème dans l’éditeur. En plus s’il y a encore des erreurs, elles s’affichent et on comprend pourquoi. On peut rectifier, alors que dans l’éditeur, on sait qu’il y a des erreurs mais pas lesquelles.
Voila, et encore une fois je suis admiratif devant votre travail !

2
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x