Ceci est une ancienne révision du document !
Comment gérer la commande \write18 ?
La primitive
\write
est utilisée pour écrire dans différents « flux » de fichiers. 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 à
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 quelque chose comme l'extension epstopdf, 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.
Cependant, il y a un problème de sécurité. Si vous téléchargez du code ou
à partir d'Internet, pouvez-vous être sûr qu'il n'y a pas de commandes dans ce code (peut-être de manière cachée) pouvant nuire à votre ordinateur (tel supprimer tous les fichiers de votre disque dur) ? Face à ce problème, MiKTeX et
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 à 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 et
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…
The latest MiKTeX (version 2.9), and recent TeX Live (from the 2010 release) get around this by having a special “limited” version of \write18
enabled “out of the box”. The idea is to allow only a pre-set list of commands (for example, BibTeX, epstopdf
, TeX itself, and so on). Those on the list are regarded as safe enough to allow, whereas anything else (for example deleting files) still needs to be authorised by the user. This seems to be a good balance: most people most of the time will not need to worry about \write18
at all, but it will be available for things like epstopdf.
Depuis quelques années, ces distributions (MiKTeX à partir de la version 2.9 et 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
, 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 des choses comme epstopdf.
Notez que le système 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.