PythonTeX, graphique et LaTeX

PythonTeX graphique LaTeX

PythonTeX, graphique et LaTeX

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.

Stéphane Pasquet
Stéphane Pasquet

Laissez votre message