Précédent: \wlog, Monter: \write [Table des matières][Index]
\write18
Synopsis :
\write18{commande_shell}
Émet une commande vers l’interpréteur du système d’exploitation. Le système d’exploitation exécute la commande et l’exécution de LaTeX est bloquée jusqu’à ce que cela soit fini.
La séquence suivante (sur Unix)
\usepackage{graphicx} % dans le préambule ... \newcommand{\numerofig}{1} \immediate\write18{cd pix && asy figure\numerofig} \includegraphics{pix/figure\numerofig.pdf}
exécute Asymptote (le programme asy
) sur le fichier
pix/figure1.asy, de sorte que le document peut par la suite lire
le graphique en résultant (voir \includegraphics). Comme pour tout
\write
, ici LaTeX développe les macros contenues dans
commande_shell de sorte que \numerofig
est remplacé par
‘1’.
Un autre exemple est que vous pouvez exécuter automatiquement BibTeX
au début de chaque exécution de LaTeX (voir Using BibTeX) en
incluant \immediate\write18{bibtex8 \jobname}
comme première
ligne du fichier. Notez que \jobname
se développe par défaut en
le nom de base du fichier racine, ou bien l’argument de l’option
--jobname
si celle-ci est passée sur la ligne de commande.
Il peut arriver que vous ayez besoin de plusieurs étapes pour obtenir
l’information désirée. L’exemple suivant insère en entrée une liste de
tous les fichiers PDF du répertoire courant (voir aussi
texosquery
plus bas) :
\immediate\write18{ls *.pdf > tmp.dat} \input{tmp.dat}
Le comportement standard de tout \write
est d’attendre jusqu’à la
prochaine éjection de page avant de développer les macros ou d’écrire
dans le flux (voir \write). Mais il se peut que vous désiriez que
cela soit immédiat. Pour cela, utilisez
\immediate\write18{commande_shell}
.
Autoriser l’usage de commandes système au sein d’un fichier LaTeX
pose des problèmes de sécurité évidents. Si vous télécharger un fichier
depuis la Toile et qu’il contient des commandes pour détruire tous vos
fichiers, cela vous rendrait bien malheureux. Le réglage standard dans
les distributions modernes est d’interdire l’accès complet à
l’interpréteur de commande du système d’exploitation. Vous pouvez
l’autoriser, si vous êtes sûr qu’il n’y a pas de danger, en compilant
avec latex --enable-write18 nomfichier
(voir Command line options). (L’option --shell-escape
est un synonyme dans TeX
Live.)
Au lieu de l’accès complet, les distributions modernes par défaut
utilisent une version restreinte qui permet à certaines commandes de
fonctionner, telles que celles qui font tourner Metafont pour générer
les polices manquantes, même si vous n’utilisez pas l’option
enable-write18
. Par défaut cette liste de commandes autorisées
est courte et ne fait figurer que les commandes qui sont sous contrôle
des mainteneurs de la distribution (voir Command line options).
Certains paquetages ont besoin d’exécuter des commandes système
externes. Par exemple sagetex vous permet de faire faire des
calculs ou tracer des graphiques au logiciel de mathématiques Sage,
puis d’incorporer ces sorties dans votre document. Pour cela vous devez
exécuter LaTeX avec la fonction \write18
pleinement débridée.
Le texte commande_shell est toujours passé à /bin/sh sur
les systèmes d’exploitation unixiens, et à l’interpréteur de commande DOS
cmd.exe sur Windows. LaTeX ignore tout réglage d’un autre
interpréteur de commande par l’utilisateur, ainsi que la variable
d’environnement SHELL
.
Si votre besoin c’est d’avoir de l’information sur le système, comme le
nom du système d’exploitation, celui de la locale, ou le contenu d’un
répertoire, alors jeter un coup d’œil au paquetage texosquery
qui
fournit une interface commode et sûre pour cela, contrairement aux
exemples donnés plus haut utilisant \write18
à l’état brut :
https://ctan.org/pkg/texosquery.
Précédent: \wlog, Monter: \write [Table des matières][Index]