Using gnuplot to produce publication-quality figures with LaTeX and TikZ

L’information contenue ici a été trouvée en lisant les fichiers d’aide de gnuplot. Ces fichiers se trouvent un peu partout dans le répertoire de gnuplot et ne sont pas longs à lire. En gros, on peut décrire gnuplot comme ceci:

gnuplot is a command-line driven interactive function plotting utility.

Avant d’aller plus loin, il est utile de préciser que dans le jargon de gnuplot, ce qu’on appelle un terminal est simplement un type de sortie. Ca peut être par exemple un fichier png, mais aussi une fenêtre Windows, ou encore du code TikZ (ce qui nous intéresse ici).

Voici le chemin suivi par les données depuis les données brutes jusqu’à la figure PDF

  1. Données brutes.
  2. Ces données sont traitées par un script gnuplot (extension ”.gp”, mais ce n’est pas obligatoire).
  3. gnuplot produit du code TikZ via le terminal Lua -> TikZ.
  4. Ce code TikZ est traité par l’environnement TikZ de LaTeX (lui-même bâti sur PGF) pour tracer la figure avec TeX, le tout étant fait de manière transparente par pdflatex.
  5. Enfin, on obtient la figure en pdf.

Il y a encore une subtilité à comprendre pour savoir comment tout cela fonctionne vraiment. Il faut savoir que le créateur du terminal TikZ pour gnuplot (il s’agit de Peter Hedwig) avait envie de travailler en Lua plutôt que directement en C. Pour plus de détails sur ses motivations, consulter le fichier README présent dans le répertoire sharelua du répertoire d’installation de gnuplot.

Bref, Peter Hedwig a tout d’abord écrit un terminal générique en Lua emballant les fonctions d’output de gnuplot initialement écrites en C. Ensuite, il a écrit le terminal proprement dit en Lua. Ceci est expliqué dans l’en-tête du fichier README cité ci-dessus:

The PGF/TikZ terminal mainly consists of a generic Lua terminal to wrap
the gnuplot terminal C functions. This allows writing gnuplot terminals
in Lua instead of C. The first (and currently only) implemented *backend*
is the PGF/TikZ terminal for the use with TeX/LaTeX.

The actual terminal functionality is a provided by a separate Lua script
``gnuplot-tikz.lua``. The LaTeX style file is usually derived from
PGF/TikZ terminal script to keep things consistent.

La dernière phrase est importante ici: il faut, pour pouvoir compiler le code produit par le terminal Lua -> TikZ, avoir aussi le package LaTeX “gnuplot-lua-tikz.sty”. Ce package, pour des raisons de consistence du code, est produit par le même script qui sert de terminal TikZ et qui est écrit en Lua. Il faut donc un interpréteur Lua pour interpréter le script et générer le package “gnuplot-lua-tikz.sty” sans lequel on ne peut pas compiler le code produit par le terminal.

Ca tombe bien, la section suivante du fichier d’aide en parle:

To generate the style files and wrapper for the various TeX flavors enter

lua gnuplot-tikz.lua style

on the command line. The files generated should be

t-gnuplot-lua-tikz.tex                  (Context wrapper)
gnuplot-lua-tikz.tex                    (plain TeX wrapper)
gnuplot-lua-tikz.sty                    (LaTeX wrapper)
gnuplot-lua-tikz-common.tex             (common definitions)

and can be copied to the appropriate places.

Voici à présent comment générer ces fameux fichiers:

  1. Tout d’abord, télécharger un interpréteur Lua pour Windows: Lua for Windows convient parfaitement (https://code.google.com/p/luaforwindows/).

  2. Une fois ceci installé, lancer un terminal Windows. L’installeur aura bien fait les choses et la variable d’environnement PATH contiendra normalement l’emplacement de l’exécutable de l’interpréteur Lua.

    Note

    Il est important de lancer le terminal Windows (PowerShell p.ex.) avec des droits d’admin car l’interpréteur se trouve probalement dans un emplacement nécessitant de tels droits pour être exécuté.

  3. Aller se placer là où se trouve le fichier gnuplot-tikz.lua (dans <gnuplot>sharelua).

  4. Lancer la commande lua gnuplot-tikz.lua style pour générer les fichiers.

  5. Placer les fichiers dans un endroit où pdflatex pourra les trouver lors de la compilation du code TikZ.

Et voilà ! Il ne reste maintenant plus qu’à apprendre gnuplot et à compiler tout ça pour produire de belles figures. Pour cela, un script de compilation automatisé peut être utile. Voici un projet GitHub auquel je participe et qui héberge un tel script: https://github.com/delhayeben/gnuplotscript.