diff --git a/_posts/2021-03-05-latex-dvi-integrer-image.md b/_posts/2021-03-05-latex-dvi-integrer-image.md new file mode 100644 index 0000000..0a1aa6c --- /dev/null +++ b/_posts/2021-03-05-latex-dvi-integrer-image.md @@ -0,0 +1,104 @@ +--- +layout: post +slug: latex-dvi-integrer-image +status: published +sitemap: true +title: Intégrer des images dans des documents LaTeX supportant une sortie DVI-Tex +description: Grâce à ImageMagick +categories: +tags: +--- + +Pour les compilateurs LaTeX compilant vers le format DVI-Tex (DeVice Independent) / PostScript, +il n'est pas possible d'intégrer directement des images au format JPG, PNG ou autre. + +Si aujourd'hui le plus simple est d'utiliser un compilateur LaTeX qui produit des fichiers au format PDF et supporte les formats d'image précédents, +ce n'est pas toujours possible. + +Dans ce guide, nous supposons donc que nous souhaitons garder une sortie DVI-TEX / PostScript. +Pour ce faire, nous utiliserons l'outil `convert` du projet [ImageMagick](https://imagemagick.org/index.php) (fiche [Wikipedia](https://fr.wikipedia.org/wiki/ImageMagick)) +pour convertir préalablement les images au format EPS. + +## Installer ImageMagick + +Si la commande `convert` n'est pas disponible sur votre système, vous allez devoir installer ImageMagick. + +Sur Fedora : + +```bash +sudo dnf install ImageMagick +``` + +Sur Ubuntu : + +```bash +sudo apt update +sudo apt install imagemagick +``` + + +## Notre image de test + +Nous allons utiliser [une photo](https://quentin.dufour.io/assets/images/posts/dijkstra.jpg) de [Dijkstra](https://fr.wikipedia.org/wiki/Edsger_Dijkstra) pour nos tests, que l'on peut télécharger sur notre système comme suit : + +```bash +wget https://quentin.dufour.io/assets/images/posts/dijkstra.jpg +``` + +## L'outil convert + +`convert` peut être utilisé sans paramètre, mais dans notre cas le résultat de la conversion sera décevant : + +``` +convert dijkstra.jpg dijkstra.eps +``` + +L'outil `convert` de ImageMagick a de nombreux paramètres qui sont tous décrits en détails dans le manuel (`man convert`). +Ici nous nous penchons seulement sur les deux problèmes suivants : + - Les images sont trop grandes et pixelisées à cause d'une valeur par défaut inadéquate du paramètre `density` + - Les images sont trop lourdes car aucune compression n'est utilisée pour la sortie + +Les images sont représentées sous forme de pixels mais les sorties LaTeX raisonnent en centimètres: il faut donc choisir combien de pixels on met par centimètres. +On parle souvent de [DPI](https://fr.wikipedia.org/wiki/Point_par_pouce) pour ce problème, ImageMagick utilise le terme de densité. +La valeur de densité par défaut de `convert` est très basse (probablement autour de `96` pour des raisons historiques). +D'expérience, je recommande une valeur entre `172` et `300` pour éviter de se retrouver avec une image pixelisée. + +Ensuite, le format EPS historiquement ne supporte pas de compression, ce qui fait des images très larges par défaut. +Notre image originale, au format JPG, fait `846 ko`. Convertie sans compression, sa taille grimpe à `12 Mo`. +Au delà de la taille sur le disque, une telle taille est problématique car elle peut faire planter la compilation ou la visioneuse. +Heureusement, [StackOverflow](https://stackoverflow.com/questions/5350246/convert-jpg-to-eps-format) nous apprend que des évolutions du format qui supportent la compression existe, il suffit de préfixer notre fichier de sortie par `eps2:` ou `eps3:` (exemple: `eps2:dijkstra.eps`). +En choisissant l'un ou l'autre, on revient sur une taille similaire au JPG d'origine, de `841 ko`. + +La commande finale que je recommande donc pour la conversion : + +```bash +convert -density 300 dijkstra.jpg eps2:dijkstra.eps +``` + +## Intégrer l'image dans un document LaTeX + +Je créer un fichier LaTeX très simple nommé `trombi.tex` + +```latex +\documentclass{article} +\usepackage{graphicx} +\begin{document} +\includegraphics{dijkstra.eps} +\end{document} +``` + +Que je compile ensuite : + +``` +latex trombi.tex +``` + +Et que je peux ouvrir ensuite : + +``` +xdg-open trombi.dvi +``` + +Et voici le résultat ! + +![Dijkstra dans Evince](/assets/images/posts/dijkstra-res.png) diff --git a/assets/css/style.css b/assets/css/style.css index 9cdf7ac..f1bc24c 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -297,7 +297,12 @@ hr { background: #eee; } -span.code, code { font-family:Menlo, Monaco, Courier; color: #ffffff; padding: 6px 0px 3px 0px; background-color:#272b2d; font-size:14px; } +span.code, p code, ul code{ + font-family:Menlo, Monaco, Courier; + color: #ffffff; + padding: 6px 6px 3px 6px; + background-color:#272b2d; + font-size:14px; } pre { font-family:Menlo, Monaco, Courier; diff --git a/assets/images/posts/dijkstra-res.png b/assets/images/posts/dijkstra-res.png new file mode 100644 index 0000000..4e187b4 Binary files /dev/null and b/assets/images/posts/dijkstra-res.png differ diff --git a/assets/images/posts/dijkstra.jpg b/assets/images/posts/dijkstra.jpg new file mode 100644 index 0000000..16f2d77 Binary files /dev/null and b/assets/images/posts/dijkstra.jpg differ