Sortir une formule ou une figure sous forme de fichier image est ce que LaTeX fait le moins bien, pour une raison toute simple : l'unité de sortie de LaTeX est la page. À la mesure, une feuille A4 fait 595 × 842 pt, alors que la ligne d'intégrale de Gauss qui s'y trouve n'occupe que 86 × 28 pt. Plus de 99 % de l'écart est du papier blanc dont personne ne veut. On voulait simplement coller une équation dans PowerPoint, Keynote, Word ou une page web, et c'est une bataille contre les marges qui commence. Cette page traite des trois outils qui gagnent cette bataille — la classe standalone, qui rogne à l'intérieur de LaTeX, pdfcrop, qui rogne un PDF déjà produit, et dvisvgm, qui convertit en SVG — ainsi que de TeX2img, l'application graphique qui enveloppe le tout.
La classe standalone : rogner au contenu depuis LaTeX
La réponse la plus directe est la classe standalone. Écrivez \documentclass{standalone} au lieu de \documentclass{article} et la page se réduit à la boîte englobante du corps, produisant un PDF d'une page rogné exactement au contenu. L'intégrale de Gauss du début, composée avec border=2pt, donne 85,8 × 28,0 pt : sur les 595 × 842 pt d'un A4, le papier inutile a totalement disparu. L'auteur est Martin Scharrer ; TeX Live 2024 contient la v1.3b (2022/10/10).
% pdflatex figure.tex -> a one-page PDF cropped to the formula
\documentclass[border=2pt]{standalone}
\usepackage{amsmath}
\begin{document}
$\displaystyle \int_{-\infty}^{\infty} e^{-x^2}\,dx = \sqrt{\pi}$
\end{document}Retirons ici une option très recopiée mais sans effet : \documentclass[preview]{standalone} ne change rien, car preview est le réglage par défaut de standalone. En lisant le fichier de classe, on voit que preview est déjà vrai avant le traitement des options ; c'est l'option inverse, crop, qui a du sens. (Demander crop désactive preview et bascule sur un rognage qui n'utilise pas le paquet preview — la porte de sortie lorsque preview fait des siennes sous XeLaTeX.) Les marges se donnent avec border= : une valeur vaut pour les quatre côtés, deux signifient « gauche-droite / haut-bas », quatre valent gauche, bas, droite, haut dans cet ordre. La valeur par défaut est 0,50001 bp : même par défaut, il reste un cheveu de marge.
L'origine de ce preview est plutôt savoureuse. standalone rogne en chargeant en interne le paquet preview — et preview.sty fait partie d'AUCTeX / preview-latex, précisément le code qui permet à Emacs d'afficher une formule composée directement dans le tampon que l'on édite. Une mécanique conçue pour extraire une formule d'un document au profit d'un éditeur se révèle être exactement celle qu'il faut pour l'extraire au profit d'une diapositive. TeX Live 2024 contient la v13.3 (2024/01/17).
Deux autres options de standalone méritent d'être connues. varwidth=<largeur> autorise le corps à passer à la ligne, ce qui permet de composer une légende sur plusieurs lignes (par défaut, le contenu s'étire indéfiniment sur une seule ligne). multi=<environnement> place chaque tikzpicture d'un fichier sur sa propre page : c'est ainsi qu'on garde toute une collection de figures dans une seule source en n'incluant que la page voulue. Et charger le paquet standalone — même nom — dans le document principal donne \includestandalone{figure}, qui insère une figure soit comme source, soit comme PDF déjà construit : le plus rapide pendant la rédaction, le plus sûr à la remise.
pdfcrop : rogner un PDF déjà produit (attention au folio)
Quand on ne peut pas toucher à la source, l'outil est pdfcrop. Donnez-lui un PDF fini : il mesure les marges de chaque page, les rogne et écrit un nouveau PDF. Utile pour un brouillon coécrit dont on n'a pas le droit de changer le \documentclass, ou pour un PDF de figure reçu de quelqu'un d'autre. Il est fourni avec TeX Live ; l'auteur est Heiko Oberdiek et la version dans TeX Live 2024 est la 1.42 (2023/04/15). Pour laisser un peu d'air autour du contenu, passez --margins "2", en big points.
pdfcrop page.pdf out.pdf # trim all margins
pdfcrop --margins "2" page.pdf out.pdf # leave 2 bp on every side
pdfcrop --margins "5 2 5 2" a.pdf b.pdf # left bottom right top
pdfcrop --hires --clip a.pdf b.pdf # HiResBoundingBox, and clip the contentConnaître son fonctionnement rend son comportement prévisible. pdfcrop n'analyse pas le PDF lui-même. Il demande la boîte englobante à Ghostscript, puis relance pdfTeX (ou XeTeX / LuaTeX avec --xetex / --luatex) pour réimposer la page au nouveau format de papier. Autrement dit, rogner un PDF fait tourner TeX. Sans Ghostscript installé, rien ne marche — d'où l'option --gscmd pour indiquer le nom de la commande.
Et voici la mine sur laquelle tout le monde marche. pdfcrop considère toute encre sur la page comme du contenu : si un folio figure en pied de page — comme par défaut avec article —, la boîte de rognage descend jusqu'à l'englober. Rognez une page A4 ne contenant que \[ E = mc^2 \] et vous obtenez 43 × 559 pt : la formule en haut, le folio en bas, du vide entre les deux. Ajoutez \pagestyle{empty} et recommencez : cela devient 43 × 13 pt. Neuf fois sur dix, « je l'ai rogné et c'est bizarrement haut » vient de là.
Exporter en SVG avec dvisvgm, et faut-il vectoriser le texte
Pour le web, ou pour une application de dessin qui comprend le SVG, dvisvgm est le choix principal. Il convertit DVI, EPS et PDF en SVG, est fourni avec TeX Live et est développé par Martin Gieseking depuis 2005 (TeX Live 2024 contient la 3.2.2). La voie la plus fiable consiste à produire un DVI avec latex et à le donner à dvisvgm. Passez-lui une seule formule et, pendant la conversion, il annonce la taille réelle — graphic size: 81.5pt x 23.4pt — : on sait aussitôt de combien il faudra l'agrandir à destination.
latex figure.tex # produce figure.dvi
dvisvgm --no-fonts --exact-bbox figure.dvi # glyphs as paths, tight box
dvisvgm --font-format=woff2 figure.dvi # keep real text, web font
dvisvgm --eps figure.eps # EPS input
dvisvgm --pdf figure.pdf # PDF input: needs gs or mutoolLe point de bascule est : vectoriser le texte ou non ? Avec --no-fonts, les glyphes sont tracés comme des éléments path, si bien que l'apparence se reproduit parfaitement même là où les fontes manquent ; en contrepartie, le texte du SVG n'est plus ni cherchable ni sélectionnable, et le fichier grossit un peu. Pour le conserver comme texte, on incorpore une fonte, par exemple avec --font-format=woff2. Pour des mathématiques sur le web, la vectorisation est le choix sûr ; si la formule doit être trouvable avec le texte alentour, incorporez la fonte. Et pour un rognage au plus juste, --exact-bbox calcule la boîte englobante à partir des contours réels des glyphes.
Une réserve : le mode d'entrée --pdf ne fonctionne pas avec dvisvgm seul. Interpréter un PDF exige Ghostscript ou le mutool de MuPDF ; en l'absence des deux, il s'arrête sur ERROR: can't retrieve number of pages from file. TeX Live ne fournit pas mutool : pour emprunter cette voie, installez l'un des deux, ou prenez tout simplement la voie DVI. (La page consacrée aux convertisseurs DVI est celle qui traite de dvisvgm lui-même.)
Quand il faut du PNG : résolution et transparence
Si la destination accepte un format vectoriel — PDF, SVG, EPS —, choisissez-le toujours. Les contours survivent à tout agrandissement : les traits restent nets à l'impression comme au vidéoprojecteur. Le matriciel (PNG, JPEG) s'impose quand la destination refuse le vectoriel, ou quand on veut garantir le même rendu sur la machine de quelqu'un d'autre. Si l'on passe au matriciel, la règle est de fixer d'abord la résolution : pour un objet qui remplira une diapositive projetée, comptez l'équivalent de 300 à 600 dpi. Agrandir après coup n'ajoute aucune information.
standalone propose pour cela une option convert, qui produit l'image matricielle au fil de la même compilation. Comme elle appelle un convertisseur externe, -shell-escape est requis. Pour un fond transparent, choisissez PNG et, plutôt que de ramener la marge à zéro, gardez un peu de border : l'image se fond alors naturellement dans la couleur d'arrière-plan de la diapositive. JPEG emploie une compression pensée pour la photographie et laisse, sur les formules et les traits, du bruit autour des contours — pas de JPEG pour les mathématiques.
TeX2img : compiler, rogner et exporter depuis une seule fenêtre
TeX2img rassemble tout ce qui précède dans une seule application. Collez dans sa fenêtre un fragment de mathématiques ou une figure, choisissez un moteur et un format de sortie, appuyez : compilation, rognage et export s'enchaînent d'un seul geste. L'outil vient de la communauté TeX japonaise : Yusuke Terada l'a développé jusqu'à la version 1.2, après quoi l'édition Windows est passée à Noriyuki Abe tandis que Terada poursuivait l'édition macOS, toutes deux développées indépendamment. C'est une application qui tourne sur votre machine, pas un service web : les fichiers de style et les fontes installés localement lui sont donc accessibles.
Ce qu'il fait en interne combine tout ce qui précède. Il compile d'abord le fragment avec le moteur choisi (pdflatex, platex, uplatex, lualatex, xelatex, etc.) ; pour les voies passant par DVI comme platex / uplatex, il intercale dvipdfmx ou dvips ; enfin, Ghostscript (version 9 ou plus) rogne à la boîte englobante et écrit le format demandé. Une installation TeX fonctionnelle et Ghostscript sont donc des prérequis. Sous Windows, produire du SVG réclame en plus MuPDF — la même situation que dvisvgm --pdf réclamant mutool à la section précédente. Le moteur étant au choix, un fragment contenant des mathématiques ou des fontes japonaises sort à la qualité habituelle.
La palette de formats de sortie est large : vectoriels EPS, PDF, SVG (et SVGZ), EMF, et matriciels PNG, JPEG, GIF, TIFF, BMP. EMF est le format vectoriel pour coller dans Office sous Windows et n'est disponible que dans l'édition Windows. Marges, résolution et transparence du fond se règlent séparément, et l'interface graphique permet d'ajuster face à un aperçu en direct. Pour convertir en lot de nombreuses équations ou intégrer l'outil à une chaîne de production, il existe une version en ligne de commande ; sous Windows, TeX2imgc.exe lance la GUI en mode CUI. Sa forme est : d'abord les options, puis les fichiers d'entrée et de sortie listés par paires.
TeX2imgc.exe /transparent /resolution=600 equation.tex equation.png
TeX2imgc.exe /latex=uplatex /gs=gswin64c formula.tex formula.svgTrois détails comptent une fois à l'usage. D'abord, il suffit de coller le corps, sans \documentclass : TeX2img l'enveloppe dans un modèle avant de compiler, si bien qu'essayer une ligne de mathématiques ne demande pas d'écrire l'échafaudage autour. On peut tout aussi bien lui donner un fragment complet avec son propre préambule, un fichier .tex existant, ou un PDF, PS ou EPS déjà produit à transformer en image. Ensuite, pour le PDF et le SVG, on choisit de vectoriser le texte ou de le garder comme vrai texte — la même décision que dvisvgm --no-fonts à la section précédente. Enfin, l'édition macOS sait coller le résultat directement dans Illustrator, Word ou PowerPoint, le posant sur la diapositive sans qu'aucun fichier ne touche le disque.
Laissez la destination décider : Word, PowerPoint, Keynote, web, impression
Le choix du format n'est pas affaire de goût mais de ce que la destination accepte. Le tableau ci-dessous en fait la carte. En règle générale, essayez d'abord un format vectoriel et ne repliez sur le matriciel que là où le vectoriel est refusé. Et une chose que l'on oublie facilement : une équation devenue image ne se corrige plus. Ce qui continuera de changer — les formules d'un article en cours d'écriture — doit rester du LaTeX ; l'export se réserve à ce qui est figé, ou à ce qui doit aller là où LaTeX ne va pas. Conservez toujours le fragment .tex d'origine.
| Format | Type | Destination adaptée |
|---|---|---|
PDF | vectoriel | réinclusion dans LaTeX, impression, Keynote ; premier choix |
SVG | vectoriel | pages web et applications de dessin comme Figma ou Illustrator |
EPS | vectoriel | flux d'impression anciens et éditeurs qui exigent l'EPS |
EMF | vectoriel | Word et PowerPoint sous Windows ; TeX2img ne le propose que là |
PNG | matriciel | diapositives en général, messagerie, tout ce qui exige la transparence ; fixez d'abord la résolution |
JPEG | matriciel | uniquement en présence de photographies ; jamais pour formules ou traits |
Pour finir, une répartition des rôles. Pour rester dans un document LaTeX, la classe standalone — chaque figure dans son propre fichier, rappelée par \includestandalone, est la pratique courante. Pour rogner un PDF dont la source est intouchable, pdfcrop. Quand le SVG s'impose, dvisvgm. Et pour essayer plusieurs versions et arrêter le format à l'œil, ou piloter un environnement japonais depuis une interface graphique, TeX2img est le chemin le plus court. Pour dessiner les figures elles-mêmes, c'est la page TikZ ; pour réintégrer les images obtenues dans un document, c'est la page sur l'inclusion d'images.