Programas de propagação de (La)TeX: \write18

A TeX \write primitive instruction é usada para escrever em ‘streams’ de diferentes arquivos; o TeX mantém referência a cada arquivo aberto por meio de um número, não por um nome de arquivo (embora isso fique escondido a maior parte do tempo). Originalmente, o TeX escrevia em um arquivo conectado a um stream numerado de 0–15. Mais recentemente, um “stream 18” especial foi implementado: ele não escreve em um arquivo e, sim, diz para o TeX pedir ao sistema operacional fazer alguma coisa. Para executar um comando, nós o colocamos como o argumento para o \write18. Então, para executar o utilitário epstopdf em um arquivo com o nome armazenado como \epsfilename, escreveríamos:

\write18{epstopdf \epsfilename}
Ao usar algo como o pacote epstopdf, a operação de escrita de ‘stream’ fica oculta e você não precisa se preocupar com a maneira exata com que ela é feita.

No entanto, existe uma questão de segurança. Se você baixar algum código (La)TeX da Internet, você pode ter certeza de que não há algum comando nele (talvez de forma oculta) para fazer coisas que podem ser perigosas para o seu computador (digamos: apagar tudo do disco rígido!)? Em face desse problema, tanto o MiKTeX quanto o TeX Live, há algum tempo, desabilitaram o \write18 por padrão. Para ativar a facilidade, ambas as distribuições suportam um argumento adicional ao iniciar o TeX a partir da shell de comando:

(pdf)(la)tex --shell-escape 
O problema disso é que muitas pessoas usam (La)TeX através de um editor gráfico, de modo que, para usar o \write18 para um arquivo, as configurações do editor precisam ser alteradas. É claro que as configurações precisam ser restauradas após o processamento do arquivo: você derruba a ideia da proteção original dessa forma.

O MiKTeX mais recente (versão 2.9) e TeX Live recentes (desde o lançamento de 2010) contornam isso tendo uma versão especial “limitada” do \write18 já habilitado. A ideia é permitir apenas uma lista predefinida de comandos (por exemplo, BibTeX, epstopdf, o próprio TeX, e assim por diante). Aqueles que estão na lista são considerados seguros o suficiente para serem permitidos, ao passo que qualquer outra coisa (por exemplo, excluir arquivos) ainda precisa ser autorizada pelo usuário. Isso parece ser um bom equilíbrio: a maioria das pessoas na maioria das vezes simplesmente não precisa se preocupar com o \write18 , mas ele estará disponível para coisas como epstopdf.

Observe que o sistema TeX pode lhe dizer que o mecanismo está em uso:

This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010)
 restricted \write18 enabled.
quando estiver inicializando.
epstopdf.sty
Distribuído com os pacotes de Heiko Oberdiek oberdiek

This answer last edited: 2012-12-03


Do you have any question? Ask on: latex.net.br - we love qood questions!