Inkscape : de l’art subtil de l’exportation pour LaTeX

Que ce soit par flemme de se lancer dans TikZ ou dans pstrick, ou parce qu’on estime une figure trop difficile à coder dans ces deux langages, la solution Inkscape reste aussi noble qu’efficace pour le dessin vectoriel. Je vais donc donner ici une façon très simple et très robuste d’assurer une importation propre sous \LaTeX.

Quel format de fichier pour les figures ?

Tout dépend du compilateur que vous souhaitez utiliser. Avec latex, c’est naturellement le format PostScript qui sera à privilégier ; avec pdflatex, c’est le pdf.

Respect des fontes LaTeX

Pour avoir une intégration au poil de vos figures dans un document \LaTeX, il faut que les fontes utilisées dans ces figures soient identiques à celles du corps de texte. Si vous compilez sous latex, le package psfrag sera alors votre ami.
Si vous utilisez pdflatex, alors Inkscape pense à vous avec une option très intéressante, et qui justifie enfin la rédaction de ce billet.

Exportation en PDF avec prise en charge LaTeX

Cette option s’affiche lors de l’enregistrement d’un fichier au format PDF. Le principe est de ne pas enregistrer le texte dans le pdf, mais dans un fichier \LaTeX annexe. Lors de l’exportation, vous aurez donc deux fichiers :

  1. MaFigure.pdf
  2. MaFigure.pdf_tex

Pour inclure la figure, on utilise donc le script \LaTeX « MaFigure.pdf_tex », qui se chargera d’importer le pdf et d’y ajouter le texte.

Exemple

Voici ci-après un exemple de ce que l’on voudrait obtenir dans le document compilé :

Vous conviendrez que dessiner ça sous TikZ, c'est se faire mal ?
Vous conviendrez que dessiner ça sous TikZ, c’est se faire mal…

Utilisation

Dans le dessin, on écrit ce que l’on veut, comme si on rédigeait sous \LaTeX. On peut donc très facilement écrire des équations, ou même passer des commandes \LaTeX (\eqref, \cite, etc…). Peu importe la police utilisée dans le svg, elle ne sera enregistrée ni dans PDF ni dans le fichier \LaTeX.

Dessin sous Inkscape avant exportation
Dessin sous Inkscape avant exportation

Ensuite, lors de l’exportation PDF, il faut juste penser à cocher l’option ad hoc :

Option "PDF+LaTeX" cochée

Enfin, du côté de votre source .tex (dans le document où vous voulez importer la figure), il faut remplacer l’habituel :

\includegraphics{MaFigure.pdf}

par :

\input{MaFigure.pdf_tex}

Compilez, c’est gagné !

Changer la taille de la figure

Par défaut, la figure sera à l’échelle 1. Il est possible de définir la largeur de la figure via la commande \svgwidth avant d’invoquer le script. Exemple si on veut que la figure remplisse 50 % de la largeur la page :

\def\svgwidth{0.5\textwidth}
\input{MaFigure.pdf_tex}

Changer le texte de la figure

Encore une fois, rien de plus simple : il suffit d’éditer le script. En bas de celui-ci apparaît en clair le texte à afficher. Pratique pour corriger rapidement ou traduire vos figures !

Pour aller plus loin

C’est vraiment possible ? ;-)
Si oui, ce sera ici.

Si à l’avenir vous avez un trou de mémoire, et que vous avez peur ne pas retrouver le magnifique billet que vous êtes en train de lire, sachez que tout ce que je vous raconte ici est résumé dans le fichier .pdf_tex, en commentaire…

 

Bonne compilation !

Inkscape  : de l’art subtil de l’exportation pour LaTeX
4.7 (94.55 %) 11 votes
  • sansoucis

    Un point de détail: suivant la version de pdflatex utilisée, et suivant la version de pdf désirée pour le document final, il risque de falloir changer la version de pdf utilisée au moment de l’exportation (les pdf 1.5 ne sont pas encore supporté par tous, alors que 1.4 oui).

    • Personnellement, je n’ai jamais eu de problème de compatibilité entre pdflatex et PDF, que ce soit avec les distributions TeXLive ou MikTeX (version actuelle sur mon MikTeX : 3.1415926, faudrait que je regarde sur mon TeXLive). Le problème de la version 1.5 est en effet évoqué ici, mais ce post date de 2007…
      J’ai l’impression que maintenant, les problèmes viennent plus souvent de la version 1.6 (exemple ici).

      • sansoucis

        marrant ce numéro de version de miktex!

      • nick

        est ce que ça fonctionne avec sharelatex? j’ai testé j’ai une erreur soucis de lecture du .pdf_tex

        • Bonjour,
          J’avoue ne pas avoir essayé, mais dans l’absolu, je vois pas trop pourquoi ça marcherait pas… C’est peut-être que le \input qui ne marche pas si l’extension du fichier n’est pas .tex, auquel cas il suffirait de renommer le fichier.

  • Pingback: PSfrag : remplacez le texte d'une figure dans un document LaTeX | Le Blog de DorianLe Blog de Dorian()

  • tJ’ai écrit un bout de script bash pour automatiser un peu l’export. Il est sur Github

    • Cool, merci !
      (je me suis permis d’éditer ton commentaire pour ajouter le lien vers le script)

  • Pingback: Gestion des gros documents sous LaTeX | Le Blog de Dorian()

  • Une solution que j’affectionne est l’extension texText pour inkscape: il permet de charger un preambule personnalisé, et donc d’utiliser les mêmes fontes que dans le document, avec l’avantage d’avoir le vrai rendu de la figure sous Inkscape: sympa quand la place est limitée et qu’il importe de bien maitriser les emplacement, la taille des caractères pour que le graphique soit lisible.
    Du coup, je crée juste un pdf que j’inclue directement dans mon doc.

    Avantages: – Wysiwyg précis dans Inkscape, insertion d’une simple figure, options d’\includegraphics directement applicables
    Inconvénients: – en cas de redimensionnenment (presque toujours pour moi pour s’adapter à la page quelle qu’en soit le format), la taille des fontes n’est plus dans le doc final une de celles du reste du doc

    • Djelouah

      malheureusement textext ne fonctionne pas avec la version 0.48 de Inkscape. Il semble y avoir une solution mais il faut manipuler python! Quelqu’un a-t-il une solution plus simple.

  • foudezic

    Petit problème avec cette solution chez moi : la modification de la taille de l’image via svgwidth décale complétement le texte :s

    • Pour éviter les mauvaise surprises, le mieux est de dessiner la figure à peu près à la même taille que désirée dans le document (en partant d’une zone de travaille au format A4 par exemple) et une police ressemblante à celle utilisée par LaTeX.
      De plus, je te conseille de toujours utiliser un alignement à gauche pour tes zones de texte, sans quoi les points d’ancrage partent dans tous les sens au moment de l’export…
      Pour finir, sache que l’on peut facilement corriger le placement directement dans le fichier pdf_tex (commande put), les coordonnées étant relatives à la figure : (0,0) pour en bas à gauche, (1,1) pour en haut à droite.

  • Thomas

    Salut !

    Je ne suis pas un pro en LaTeX… J’ai essayé la technique décrite dans cet article, mais j’ai des difficultés.
    Voici ce que j’obtiens avec le code :

    [code]
    Petit blabla d’intro sur cette problématique.

    svf{Montrer que le mouvement est plan}

    Blabla.

    input{planeite.pdf_tex}

    [/code]

    Quelqu’un pourrait m’aider ?
    Merci beaucoup !

    • Thomas

      Petit up pour mon commentaire qui n’apparaît pas en haut de la liste, je ne sais pas porquoi.
      Merci d’avance !

    • Salut !
      Es-tu sûr de la dimension du PDF généré par Inkscape ? Vu de loin, on dirait bien que certains éléments sont en dehors de la zone de travail.

    • Salut !
      Es-tu sûr de la dimension du PDF généré par Inkscape ? Vu de
      loin, on dirait bien que certains éléments sont en dehors de la zone de
      travail.

      • Thomas

        Euh, je sais pas… Je m’y connais pas trop (je suis en train de rédiger un livre pour une maison d’édition qui me demande de faire ca en Latex mais c’est nouveau pour moi…).
        Qu’est-ce que je dois vérifier précisément ?

        (Désolé pour le boulet…)

        • Dans Inkscape, va dans Fichier > Propriétés du documents. De là tu pourras définir les dimensions du document.

          Une bonne option est alors de cliquer sur « Redimensionner la page au contenu » puis « ajuster la page au dessin ou à la sélection ».

        • Dans Inkscape, une fois ton svg ouvert, va dans « Fichier > Propriétés du document ». De là, tu pourras éditer les dimensions dudit PDF.

          Une option intéressante est alors de cliquer sur « Redimensionner la page au contenu… » puis « Ajuster la page au dessin ou à la sélection ».

          Si ça ne marche toujours pas, envoie-moi un mail via le formulaire de contact, pour qu’on puisse continuer cette conversation par mails.

  • Pingback: LaTeX au collège : écrire de joli documents mathématiques()