Tikz : illustrations avec latex
Dans cet article, je vais présenter comment j’utilise Tikz depuis peu ; tout au moins les grandes lignes. Tikz m’a été recommandé plusieurs fois, notamment par des lecteurs de ce blog. Les vacances de Noël m’ont permis de m’y mettre. J’utilisais auparavant pstricks mais j’avais abandonné l’idée d’écrire le code à la main. En effet, j’ai beaucoup de mal à retenir la syntaxe et il était fastidieux de chercher dans la documentation. J’utilisais alors Latexdraw. Le tracé est très rapide mais approximatif. Il faut retoucher les valeurs si on veut quelque chose de net. Très souvent, je ne le fais pas.
Tikz, mieux que PStricks ?
Dans un sens oui, car il est beaucoup plus facile de retenir la syntaxe. C’est toujours la même chose ! Par contre, il n’existe pas à la connaissance d’équivalent à latexdraw. La création d’une figure est donc plus longue et il faut être méthodique. Pour ma part, je la trace d’abord sur papier, puis je repère des points. je calcule les coordonnées de ces points en fonction de paramètres (le minimum possible). Ce calcul, je le fais avec un script python tout simple qui m’affiche quelque chose comme :
\\coordinate (A) at (3,19.05);
\\coordinate (A_sym) at (-3,19.05);
\\coordinate (B) at (3,18.45);
\\coordinate (B_sym) at (-3,18.45);
J’utilise ensuite ces alias dans mon code tikz. Ceci me permet une fois la figure réalisée, de pouvoir retoucher facilement les dimensions de tel ou tel élement car j’ai toujours un soucis de taille relative. Je n’ai trouvé que cette technique pour que ce ne soit pas l’horreur.
C’est sans doute plus long, mais le résultat est sans bavure. Pas mal de choses peuvent être reprises de codes existants.
ktikz : une interface graphique pour Tikz
L’une des principales difficultés est que l’on doit écrire un code pour obtenir un résultat graphique. Pour un texte, c’est assez simple avec un peu d’habitude. Pour une figure, ça l’est beaucoup moins. A l’image de gummi, KDE a sortie un petit programme permettant de visualiser en direct le résultat du code (le code est en fait compilé automatiquement à chaque modification). L’autre avantage d’un tel logiciel est qu’il fournit la complétion pour les commandes Tikz. Même si ces dernières sont assez simple, ça s’avère redoutable.
Installation de Gnuplot avec un terminal Tikz
Archlinux
Le paquet dans extra ne possède pas le support pour Tikz. Mais comme toujours, sous archlinux, c’est un jeu d’enfant car un paquet existe sur AUR. Comme dit dans les commentaires, si vous ne voulez pas des dépendances emacs, ajouter “–without-lisp-files” aux options. J’ai ouvert un rapport de bug afin que le support lua soit utilisé par défaut.
Debian
Sous debian (testing), il faut mettre les mains dans le camboui car le mainteneur n’a toujours pas ajouté le support malgré un rapport ouvert depuis un moment.
On commence par installer les paquets nécessaires à la compilation de gnuplot et à la construction de paquet :
aptitude install dpkg-dev devscripts build-essential debhelper fakeroot
aptitude build-dep gnuplot
Pour ma part, j’ai créé le paquet dans /tmp :
mkdir /tmp/gnuplot && cd /tmp/gnuplot && apt-get source gnuplot && cd
gnuplot-4.4.0/
La lecture du fichier INSTALL nous indique qu’il faut créer un lien symbolique après avoir installé la lib lua.
aptitude install liblua5.1-0 && ln -s /usr/lib/pkgconfig/lua5.1.pc /usr/lib/pkgconfig/lua.pc
on ajoute le support lua dans debian/rules (–with-lua)
et on crée le paquet
dpkg-buildpackage -rfakeroot -us -uc
Il le reste plus qu’à désinstaller la version fournie par debian de gnuplot et d’installer la votre. On aurait pu changer la version du paquet et aussi bloquer les mises à jour de ce dernier…
Dans gnuplot, il suffit ensuite de sélectionner le terminal tikz :
set term tikz
et le tour est joué ! Enfin, presque. Je me suis rendu compte plus tard que la bibliothèque gnuplot-lua-tikz.sty n’était pas présente sur mon système. N’ayant pas trop le temps ni le courage de lire la doc pour faire ça proprement dans la création du pauet debian, je l’ai placé à la main dans /usr/local/share/texfm-texlive/tex/latex/gnuplot-lua-tikz.
Ensuite, il faut lancer mktexlsr afin de prendre en compte l’ajout.
Standalone
Par ailleurs, j’utilise la classe standalone disponible sur CTAN. Sous archlinux, je n’ai rien eu à faire car déjà présent sur le système. Ce ne fût pas le cas sur ma debian testing. L’installation à la main se fait sans problème. make && make install. A noter que le Makefile installe dans ${home} par défaut.
Quel est le rapport entre standalone et tikz ? Aucun à la base. Mais comme vous allez le voir, cette classe va être très pratique pour nos images. En effet, le code tikz devient vite long, surtout pour des graphiques complexes. L’idée est donc de mettre le code des figures dans des fichiers séparés. De plus, j’aime aussi avoir mes figures dans un format compilé (pdf, eps, png…) afin de pouvoir les imprimer, les envoyer indépendament. Standalone va nous faciliter grandement la tâche.
figure.tex resemblera à ceci :
\\documentclass{standalone}
\\usepackage{tikz}
\\begin{document}
\\begin{tikzpicture}[scale=1]
% Du code…
\\end{tikzpicture}
\\end{document}
Et le document.tex sera :
\\documentclass{article}
\\usepackage{tikz}
\\begin{document}
\\begin{figure}
\\input{figure.tex}
\\end{figure}
\\end{document}
Vous pouvez donc compiler votre document (pdflatex document.tex) mais aussi votre figure (pdflatex figure.tex). Pour les graphiques avec gnuplot, je trouve que c’est très propre. Vous remarquerez que les caractères sont de la même taille que votre texte et qu’en jouant avec l’option scale de tikz, vous pouvez réduire ou augmenter la taille de votre graphique tout en gardant la même taille des caractères.
C’est beaucoup plus propre que mes arnaques sans nom, même si ces dernières fonctionnaient très bien. Il me reste plus qu’à faire un petit makefile coupler à un script de quelques lignes pour automatiser la compilation des figures produites à partir d’un fichier gnuplot.
Pour clôturer cet article, je vous laisse sur ce lien qui montre que l’on peut utiliser tikz afin de faire ce qui manque nativement à latex beamer : des flèches élégantes entre divers éléments.