PSfrag : remplacez le texte d’une figure dans un document LaTeX

Même si TikZ, c’est la vie, on est parfois tentés, en général par simplicité, de faire ses dessins vectoriels sous un logiciel tiers, tel qu’Inkscape. La problématique se pose alors d’avoir des notations cohérentes entre la figure et le corps de texte du document produit par $latex \LaTeX$. Une solution est donc de définir le texte de la figure depuis le code $latex \LaTeX$. Comment ? en demandant à $latex \LaTeX$ d’inclure une figure tout en remplaçant des chaînes de caractères quelconques par le texte que l’on souhaite voir apparaître.

Le package PSfrag

Ce miracle va être effectué grâce au package PSfrag, qui va parser la figure EPS et remplacer les chaînes de caractères par votre texte personnel. Oui, vous aurez noté que ce package ne fonctionne pas avec les pdf, donc impossible de compiler avec pdflatex…(impossible ? voir plus bas). On va donc se contenter de latex.

Fichier source

Un exemple minimal :

\documentclass{article}
\usepackage{psfrag}
\usepackage{graphicx}
 
\begin{document}
\pagestyle{empty}
 
\begin{psfrags}
  \psfrag{A}{$\overrightarrow{F_A}$}
  \psfrag{B}{$F_B$}
  \psfrag{C}{$\overrightarrow{P}$}
  \psfrag{K}{\overrightarrow{F_E}}
  \psfrag{L}{$L$}
    \includegraphics[width=0.5\textwidth]{figure.eps}
\end{psfrags}
\end{document}

Je pense que le fonctionnement est assez clair : on remplace « A » par un vecteur F_A , « B » par F_B etc. C’est tout.

Fichier figure

Comme je l’ai dit plus haut, il faut que le fichier soit au format EPS. Il suffit qu’il contienne les chaînes appelées plus haut (A, B, C… dans mon exemple). Suivant votre logiciel de dessin vectoriel, pensez à ne pas transformer le texte en chemin (sinon, forcément ça marche pas).

Voila, vous n’avez plus qu’à compiler (pour rappel : avec latex, il faut compiler avec latex, puis avec dvips pour obtenir du PostScript).

Utilisation d’Inkscape

[EDIT]
Si vous utilisez Inkscape et que vous compilez avec pdflatex, je vous conseille d’aller voir par ici.
[/EDIT]

Sachez que depuis la migration de Inscape vers le moteur Cairo (i.e. depuis la version 0.46), Inscape est incompatible avec PSfrag car il enregistre le texte en ASCII et non en texte clair, du coup PSfrag n’arrive pas à retrouver les chaînes de caractère. Ce bug a été reporté depuis longtemps, et il semble que la version 0.48 à venir le corrige.

En attendant, la solution est de modifier manuellement le fichier pour remplacer les occurrences. Ils ressemblent à des trucs du genre :

Tj

ou :

[-1-1-11129]TJ

Il faut donc les remplacer par :

(A)Tj

où A est le texte à parser.

Compilation avec pdflatex

Une solution pour rendre PSfrag compatible avec le compilateur pdflatex est proposée par un certain Marc Boyer sur sa page personnelle.

Pour aller plus loin

Vous pouvez consulter la page officielle du package sur CTAN.

Bonne compilation !