Formats d’image et inclusion

Pour placer une photo, un graphique ou un schéma dans un article ou un livre, on importe un fichier image externe dans le document. La porte d’entrée est la commande \includegraphics du paquet graphicx. Cette page présente la syntaxe de base, les options de mise à l’échelle, de rotation et de recadrage, le réglage du chemin de recherche des images et, point essentiel, les formats que chaque moteur TeX peut lire. Deux idées structurent l’ensemble : la distinction entre images vectorielles et images matricielles, et le fait que les formats acceptés dépendent du moteur de compilation.

graphicx et \includegraphics

L’inclusion d’images est assurée par le paquet standard graphicx. Chargez-le dans le préambule avec \usepackage{graphicx}, puis écrivez dans le corps \includegraphics[options]{filename}. graphicx étend l’ancien paquet graphics; sa particularité est de fournir les options sous forme key=value. Les deux font partie du bundle standard latex-graphics de LaTeX, il n’y a donc rien d’autre à installer.

document.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.6\textwidth]{plot}
\end{document}

Le point à retenir est de ne pas écrire l’extension dans le nom de fichier. Dans l’exemple ci-dessus, si plot.pdf ou plot.png existe, LaTeX choisit automatiquement le bon format selon le moteur. Écrire l’extension rend les changements de format plus difficiles et peut poser problème avec des noms contenant un point, comme plot.tar.gz. Pour la même raison, il est plus sûr d’éviter les espaces et les points dans les noms de fichiers image.

Si les images se trouvent dans un autre dossier, ajoutez un chemin de recherche avec \graphicspath. Chaque nom de dossier doit être placé dans ses propres accolades, même s’il n’y en a qu’un, et se terminer par une barre oblique /, même sous Windows. LaTeX cherche d’abord dans le répertoire courant, puis dans les répertoires indiqués, dans l’ordre. Un chemin contenant des espaces se met entre guillemets, comme {"my figures/"}.

latex
\usepackage{graphicx}
\graphicspath{ {figures/} {../shared-figures/} }

Options de taille, de rotation et de recadrage

Dans les crochets de \includegraphics, les options se donnent sous forme key=value. En pratique, préciser la taille est presque indispensable. width= et height= définissent directement la largeur ou la hauteur produite ; les exprimer par rapport à \textwidth (largeur du texte) ou \linewidth, par exemple width=0.8\textwidth, permet d’adapter l’image à la page. scale= est un facteur appliqué à la taille naturelle de l’image.

Indiquer à la fois width= et height= déforme l’image en rompant son rapport d’aspect. keepaspectratio l’évite : l’image est alors mise à l’échelle pour tenir dans la largeur et la hauteur données tout en conservant ses proportions. Pour tourner l’image, donnez à angle= un angle en degrés mesuré dans le sens antihoraire ; par exemple, angle=90 effectue un quart de tour.

Pour rogner les bords d’une image, combinez trim= avec clip. trim reçoit quatre valeurs dans l’ordre gauche, bas, droite, haut (ce n’est pas l’ordre intuitif haut-bas-gauche-droite). L’unité par défaut est bp (big points). Et ajoutez toujours clip : sans lui, la partie censée disparaître n’est pas supprimée et déborde sur le texte voisin. Des valeurs négatives font l’inverse et ajoutent de la marge. viewport= permet aussi de définir la fenêtre de découpe en coordonnées absolues.

latex
% 幅を本文幅の半分に
\includegraphics[width=0.5\textwidth]{photo}

% 縦横比を保って枠に収める
\includegraphics[width=8cm,height=5cm,keepaspectratio]{photo}

% 反時計回りに 90 度回転
\includegraphics[angle=90,width=6cm]{diagram}

% 左20 下20 右30 上10(bp) を切り落として表示
\includegraphics[trim=20 20 30 10,clip,width=6cm]{scan}

Les principales options peuvent être résumées dans un tableau. En pratique, on en combine généralement plusieurs.

OptionEffet
width=Largeur produite ; les valeurs relatives comme 0.8\textwidth sont pratiques
height=Hauteur produite
scale=Facteur appliqué à la taille naturelle (scale=0.5 donne la moitié)
angle=Angle de rotation antihoraire (degrés)
keepaspectratioConserve les proportions quand largeur et hauteur sont données
trim= … clipRogne gauche, bas, droite, haut ; nécessite clip, unité par défaut bp
page=Choisit la page à inclure dans un PDF multipage

Vectoriel et matriciel

Les images se répartissent en deux grandes familles, et ce choix influence le résultat. Les images vectorielles décrivent points, lignes, courbes et texte par des coordonnées mathématiques ; PDF, EPS et SVG en sont les exemples principaux. Comme les contours sont recalculés à partir des données mathématiques, ils restent nets à tout agrandissement, et le texte reste précis. Les images matricielles (bitmaps) sont une grille de pixels colorés, principalement PNG et JPEG. En les agrandissant, chaque pixel grossit, et les bords deviennent crénelés ou flous.

La règle pratique est la suivante : tout ce qui est composé de lignes et de texte, comme les graphes, dessins au trait, circuits ou figures avec équations, doit être vectoriel (PDF/EPS/SVG). Cela ne dépend pas de la résolution d’impression et donne toujours le meilleur résultat sur papier comme à l’écran. Les images à tons continus, comme les photos et les captures d’écran, doivent être matricielles (PNG/JPEG). Vectoriser une photo n’apporte rien et alourdit le fichier. Si vous utilisez du matriciel, partez de données à une résolution suffisante pour l’impression, généralement 300 dpi ou plus. Si vous générez les figures dans LaTeX (TikZ, pgfplots, etc.), la sortie est naturellement vectorielle.

Un mot aussi sur le choix entre PNG et JPEG. JPEG est une compression avec perte destinée aux photos : les fichiers sont petits, mais des artefacts apparaissent autour des lignes et du texte. PNG est sans perte et convient aux captures d’écran, aux graphiques en aplats et aux images nécessitant de la transparence. En cas de doute : JPEG pour les photos, PNG pour le reste des images matricielles.

Formats lisibles par chaque moteur

C’est le point où l’on se trompe le plus facilement. Les formats acceptés par \includegraphics dépendent du moteur TeX qui traite le fichier et du pilote qui produit finalement la sortie. Le flux moderne courant, pdfLaTeX, LuaLaTeX et XeLaTeX avec sortie PDF directe, lit PDF, PNG et JPEG nativement. Mais ces moteurs ne lisent pas EPS directement. À l’inverse, le flux classique latex + dvips, qui passe par DVI, gère EPS nativement, mais n’est pas adapté à PDF ou PNG.

Pour le japonais, pLaTeX / upLaTeX produit couramment du DVI, ensuite converti en PDF avec dvipdfmx. Ce flux gère PDF, PNG, JPEG et EPS. Pour PNG, JPEG et PDF, il peut falloir un fichier auxiliaire (.xbb) contenant les dimensions de l’image, c’est-à-dire sa boîte englobante, généré avec extractbb. Avec graphicx sous pLaTeX/upLaTeX, il est plus sûr d’indiquer explicitement le pilote de sortie, par exemple \usepackage[dvipdfmx]{graphicx} ; pdfLaTeX et autres le détectent automatiquement.

Flux de traitementFormats natifsEPS ?
pdfLaTeXPDF, PNG, JPEGNon ; convertir avec epstopdf
LuaLaTeXPDF, PNG, JPEGNon ; convertir avec epstopdf
XeLaTeXPDF, PNG, JPEGNon ; convertir avec epstopdf
pLaTeX/upLaTeX + dvipdfmxPDF, PNG, JPEG, EPSOui (boîte englobante nécessaire)
latex + dvipsEPS (famille PostScript)C’est son format natif

La conclusion pratique est simple : pour un nouveau document, fournissez les figures en PDF, PNG ou JPEG ; elles passent directement avec pdfLaTeX, LuaLaTeX, XeLaTeX ou dvipdfmx. Les conversions des deux sections suivantes ne sont nécessaires que si vous ne disposez que d’EPS ou de SVG. Pour les flux eux-mêmes, consultez la page « How processing works ».

Inclure EPS et SVG

EPS (Encapsulated PostScript) est un ancien format vectoriel, encore exigé par certaines anciennes consignes de revues. Pour l’utiliser avec pdfLaTeX et les flux similaires, il faut le convertir en PDF ; mais si vous chargez le epstopdf package, le fichier EPS est converti automatiquement en PDF à la compilation et inclus directement. Le mécanisme s’insère dans le traitement de graphicx, convertit avec Ghostscript et évite le travail si un PDF du même nom existe déjà. Comme cette conversion automatique exécute un programme externe, compilez avec --shell-escape (ou -shell-escape). Pour un EPS brut, la BoundingBox, la ligne du début qui indique l’étendue de l’image, doit être présente et correcte.

latex
\usepackage{graphicx}
\usepackage{epstopdf}  % EPS をコンパイル時に PDF へ自動変換
% コンパイル例: pdflatex --shell-escape main.tex

SVG est le format vectoriel standard du Web, mais aucun moteur TeX ne le lit directement. Pour l’inclure, utilisez le svg package. Il fournit \includesvg{file} et appelle en interne la ligne de commande d’Inkscape pour convertir le SVG en PDF (ou en EPS lors d’une sortie DVI). Il exporte aussi le texte du SVG dans un fichier séparé que LaTeX compose, ce qui donne des libellés nets avec la police du document. Comme il invoque Inkscape, il nécessite aussi --shell-escape et une installation fonctionnelle d’Inkscape. Sinon, convertir d’abord le SVG en PDF avec Inkscape ou un autre outil est la méthode la plus fiable.

Dans le sens inverse, pour produire du SVG à partir de la sortie TeX, on peut utiliser dvisvgm. Il convertit DVI (ainsi que EPS et PDF) en SVG, prend en charge le DVI vertical de pTeX et le XDV de XeTeX, et incorpore les contours des glyphes nécessaires dans le SVG. C’est pratique pour publier une équation ou une figure comme SVG autonome sur le Web.

Le flottant figure et les pièges courants

\includegraphics ne fait que poser l’image à cet endroit ; il n’ajoute ni numéro ni caption. Dans un article, on place normalement l’image dans un figure environment pour en faire une figure numérotée. LaTeX la fait alors flotter vers un emplacement adapté à la mise en page, \caption{…} lui donne une description numérotée, et \label/\ref permettent de la citer dans le texte, par exemple « voir figure 3 ».

latex
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{plot}
  \caption{測定値と理論曲線の比較。}
  \label{fig:plot}
\end{figure}

図~\ref{fig:plot} に示すように……

Le placement des flottants, le sens de [htbp] et la mise côte à côte de figures sont traités dans la page « Floats & placement » ; le style des caption et les sous-figures dans « Captions & subfigures ». Voici les problèmes que l’on rencontre souvent lors de l’inclusion d’images.

  • Format incompatible avec le moteur : donner un EPS à pdfLaTeX provoque des erreurs comme « Cannot determine size of graphic ». Préparez la figure en PDF/PNG/JPEG ou convertissez-la avec epstopdf.
  • EPS BoundingBox : une ligne BoundingBox absente ou fausse donne un mauvais placement. Corrigez-la avec ps2eps ou epstool.
  • PDF multipage : seule la première page est incluse par défaut. Choisissez une page avec page= ; pour un document entier, utilisez le pdfpages package.
  • Marges dans un PDF : de grandes marges dans un PDF de figure la font paraître petite. Rognez-les d’abord avec pdfcrop (CTAN).
  • Espaces ou points dans les noms de fichiers : les espaces ou points dans le chemin ou le nom cassent souvent l’inclusion. Renommez le fichier ou mettez entre guillemets un chemin contenant des espaces.
  • Extension écrite en dur : indiquer l’extension empêche de changer facilement de format. En règle générale, écrivez le nom sans extension.