Ceci est une ancienne révision du document !


Comment lancer un sous-processus pendant la compilation?

Que fait la commande ”\write18” ?

La primitive \TeX \write est utilisée pour écrire dans différents « flux » de fichiers. \TeX fait référence à chaque fichier ouvert par un numéro, non par un nom de fichier. À l'origine, TeX écrivait dans un fichier connecté à un flux numéroté de 0 à 15. Plus récemment, un « flux 18 » spécial a été implémenté : il n'écrit pas dans un fichier mais indique à \TeX de demander au système d'exploitation de faire quelque chose. Pour exécuter une commande, il faut la placer comme argument de \write18. Ainsi, pour exécuter l'utilitaire epstopdf sur un fichier dont le nom est stocké sous la forme \epsfilename, nous écririons :

\write18{epstopdf \epsfilename}

Lorsque vous utilisez par exemple l'extension epstopdf (elle-même appelée quand vous utilisez pdftricks pour utiliser du code PStricks avec pdfLaTeX), l'opération d'écriture « des flux » est cachée et vous n'avez pas à vous soucier de la manière exacte dont elle est faite.

Cela pose-t-il des problèmes ?

Oui, il y a un problème de sécurité. Si vous téléchargez du code \TeX ou \LaTeX à partir d'Internet, il pourrait très bien contenir des commandes (peut-être cachées) pouvant nuire à votre ordinateur (comme supprimer tous les fichiers de votre disque dur ou envoyer son contenu à un serveur distant). Face à ce problème, MiKTeX et \TeX Live ont, depuis un certain temps, désactivé \write18 par défaut. Pour la réactiver, les deux distributions prennent en charge un argument supplémentaire lors du démarrage de \TeX à partir de la ligne de commande :

(pdf)(la)tex --shell-escape <file>

Le problème de cette méthode vient du fait que beaucoup d'utilisateurs utilisent \TeX et \LaTeX par le biais d'un éditeur graphique. Aussi, pour utiliser \write18 avec un fichier, les paramètres de l'éditeur doivent être modifiés. Mais il faut penser à modifier ces paramètres après le traitement du fichier : sans cela, les bénéfices de la protection d'origine sont perdus…

Dans leurs versions récentes, ces distributions (MiKTeX à partir de la version 2.9 et \TeX Live à partir de la version 2010) contournent ce problème en proposant une version « limitée » de \write18, prête à l'emploi. L'idée est de n'autoriser qu'une liste prédéfinie de commandes (par exemple, BibTeX, epstopdf, \TeX lui-même, etc.). Hors de cette liste, toute commande (telle la suppression de fichiers) doit encore être autorisé par l'utilisateur. Cela semble être un bon équilibre : la plupart du temps, la plupart des gens n'auront pas du tout à se soucier de \write18, mais il sera disponible pour epstopdf et autres.

Notez que le système \TeX peut vous dire que le mécanisme est en cours d'utilisation, en indiquant au démarrage :

This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010)
 restricted \write18 enabled.

Sources:

2_programmation/compilation/write18.1617661384.txt.gz · Dernière modification : 2021/04/05 22:23 de jejust
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0