Comment créer une image indépendante en SVG ?#

Une fois que l’on a pris l’habitude d’utiliser pour dessiner ou représenter ses données, notamment avec les extensions TikZ et pgfplots, il est tentant d’y avoir recours dans d’autres contextes que la préparation d’un document

La classe standalone permet de produire facilement une image indépendante, contenue dans un document PDF faisant juste la taille de son contenu. Elle propose aussi des options pour générer des fichiers dans d’autres formats graphiques, comme SVG ou PNG.

D’autres logiciels du monde de dédiés à la production graphique vous permettent de créer des images dans d’autres format que le PDF.

1.  Comment créer une image indépendante ?#

Il suffit d’appeler la classe standalone. Il devient inutile de préciser la taille du papier : celle-ci sera ajustée exactement à la taille finale de l’image.

Avec l’option de classe tikz, le chargement de TikZ se fait automatiquement :

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \fill[orange] (0,0) circle (2cm);
  \node[font=\bfseries] at (0cm,0cm) {SVG};
\end{tikzpicture}
\end{document}

Si vous avez besoin de charger des bibliothèques TikZ, vous pouvez le faire avec \usetikzlibrary{...} dans le préambule de votre document :

\usetikzlibrary{arrows,snakes}

Avertissement

La classe standalone ne doit pas être confondue avec la classe « minimal » :

  • minimal est un simple exemple théorique d’une classe minimale, qui n’est pas destinée à être utilisée.

  • standalone vous fournit au contraire de nombreuses options pour produire des documents indépendants.

2.  Comment produire un fichier SVG à partir d’un fichier #

2.1.  Avec les options de l’extension « standalone »#

L’extension standalone peut se charger elle-même de la conversion du document produit en un autre format graphique. L’option de classe convert est faite pour cela. En utilisant en plus la primitive \jobname, le nom du fichier SVG créé pourra être le même que celui du document PDF :

\documentclass[tikz,convert={outfile=\jobname.svg}]{standalone}

La conversion de format n’est pas implémentée directement en La classe standalone appelle en fait des convertisseurs externes, comme ImageMagick ou pdf2svg, qui doivent être installés.

Si lors de la compilation, vous avez l’avertissement :

Class standalone Warning: Conversion failed! Please ensure that shell escape
(standalone)              is enabled (e.g. use '-shell-escape').

Cela veut dire que votre installation de empêche par défaut l’exécution de sous-programmes externes, pour des raisons de sécurité.

Comme indiqué dans le message d’avertissement, pour autoriser manuellement cette exécution, vous pouvez utiliser l’option de ligne de commande -shell-escape pour lancer la compilation :

pdflatex -shell-escape fichier.tex

Avertissement

Vous pouvez rencontrer d’autres messages d’avertissement lors de la compilation de votre document vers le format SVG :

Output written on fichier.pdf (1 page, 13115 bytes).
Transcript written on fichier.log.
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/422.
convert: no images defined `fichier.svg' @ error/convert.c/ConvertImageCommand/3285.
system returned with code 256

Class standalone Warning: Conversion unsuccessful!
(standalone)              There might be something wrong with your
(standalone)              conversation software or the file permissions!

Le problème est lié à une faille de sécurité dans le traitement des fichiers PDF par GhostScript pour les versions antérieures à 9.24 (repérée en 2018). Pour limiter les conséquences de cette faille de sécurité, les développeurs d’ImageMagick ont temporairement configuré leur logiciel pour refuser de traiter les fichiers PDF.

Ce problème a été résolu avec la version 9.24 de GhosScript.

2.2.  En ligne de commande#

Vous pouvez également appeler ImageMagick vous-même, en ligne de commande, sur le PDF généré avec en utilisant la ligne de commande suivante :

convert fichier.pdf fichier.svg

3.  Avec #

permet lui aussi de générer de fichiers PDF, SVG ou PNG. Par défaut, produit du Encapsulated PostScript (EPSF). Ainsi, la ligne de commande suivante

mpost fichier.mp

produira le fichier fichier.1 (si la figure est numérotée 1 dans le code qui sera un fichier PostScript.

3.1.  Fichier PDF#

Les distributions fournisse aussi le programme mptopdf qui permet de produire un fichier PDF. Ainsi, la commande suivante :

mptopdf fichier.mp

produira le fichier fichier-1.pdf.

3.2.  Fichier SVG#

Pour obtenir un fichier SVG, il faudra rajouter le code suivant dans le fichier

outputformat:="svg";

La ligne de commande suivante

mpost fichier.mp

produira alors le fichier SVG fichier.1.

Astuce

Si on souhaite un nommage de fichier plus standard, il suffira d’ajouter dans son code

outputtemplate:= "%j-%c.svg";

pour obtenir à la suite de la compilation par mpost le fichier fichier-1.svg.

3.3.  Fichier PNG#

Pour obtenir un fichier PNG, il faudra rajouter le code suivant dans le fichier

outputformat:="png";

La ligne de commande suivante

mpost fichier.mp

produira alors le fichier PNG fichier.1.

Astuce

Encore une fois, si on souhaite un nommage de fichier plus standard, il suffira d’ajouter dans son code

outputtemplate:= "%j-%c.png";

pour obtenir à la suite de la compilation par mpost le fichier fichier-1.png.

On pourra régler aussi la résolution du fichier PNG en modifiant les trois variables outputformatoptions, hppp et vppp. La résolution par défaut est de 72dpi (dots per inch). Les variables hppp et vppp permettent de définir le facteur d’échelle en points par pixel (points per pixel).