Difference between revisions of "Write18"

From Wiki
Jump to navigation Jump to search
(How to check for write18)
Line 1: Line 1:
 
When write18 is turned on, it means that it's possible to execute external programs in the middle of a TeX run. This is required to make some modules such as those for R, lilypond, gnuplot, ... etc. to work properly, but may impose a security leak if you would be running TeX on a server with untrusted sources of TeX files, so it's turned off by default.
 
When write18 is turned on, it means that it's possible to execute external programs in the middle of a TeX run. This is required to make some modules such as those for R, lilypond, gnuplot, ... etc. to work properly, but may impose a security leak if you would be running TeX on a server with untrusted sources of TeX files, so it's turned off by default.
  
== Windows - MikTeX ==
+
== How to turn on write18 ==
 +
=== Windows - MikTeX ===
  
 
'''MikTeX 2.4'''
 
'''MikTeX 2.4'''
Line 18: Line 19:
  
  
== Linux/Mac ==
+
=== Linux/Mac ===
  
 
First try to figure out where your configuration file resides:
 
First try to figure out where your configuration file resides:
Line 29: Line 30:
  
 
Change that "f" (false) to "t" (true) to enable it.
 
Change that "f" (false) to "t" (true) to enable it.
 +
 +
== How to check if write18 is turned on ==
 +
Sometimes while writings a module, one needs to check if write18 is enabled or now. There are different ways in which this can be done.
 +
 +
* A new primitive in pdftex 1.30: <cmd>pdfshellescape</cmd> is a read-only integer that is 1 if <cmd>write18</cmd> is enabled, 0 otherwise.
 +
* ConTeXt defines <cmd>systemcommandmode</cmd> that is 2 if <cmd>write18</cmd> is enabled, 1 otherwise.
 +
* A primitive <cmd>ifeof18</cmd> that is <code>true</code> if <cmd>write18</cmd> is disabled, <code>false</code> otherwise.
 +
 +
<cmd>ifeof18</cmd> works with both pdfTeX and XeTeX, while <cmd>pdfshellescape</cmd> only works with pdfTeX.
 +
 +
Hans response on the mailing list
 +
 +
write 18 is a hack and pdfshellescape a sane replacement
 +
 +
in luatex it will probably be gone completely since there we have
 +
 +
<texcode>
 +
\directlua 0 { os.execute("...") }
 +
</texcode>

Revision as of 16:33, 28 December 2006

When write18 is turned on, it means that it's possible to execute external programs in the middle of a TeX run. This is required to make some modules such as those for R, lilypond, gnuplot, ... etc. to work properly, but may impose a security leak if you would be running TeX on a server with untrusted sources of TeX files, so it's turned off by default.

How to turn on write18

Windows - MikTeX

MikTeX 2.4

Create a file [localtexmf PATH]\miktex\config\miktex.ini and add the following line to it:

write18=enable

(Because of some unknown reason, write18=enable in [localtexmf PATH]\miktex\config\miktex.ini may be ignored on some computers. In that case make the change in [MikTeX PATH]\miktex\config\miktex.ini, but you may have to repeat this step every time you update MikTeX packages.)

MikTeX 2.5

Each application now has it's own configuration file. To enable write18 run

initexmf --edit-config-file=miktex\config\pdfetex.ini

and put

EnableWrite18=t

into it. An alternative is to se the environment variable MIKTEX_ENABLEWRITE18=t.


Linux/Mac

First try to figure out where your configuration file resides:

kpsewhich texmf.cnf

will should return you something like

/usr/local/teTeX/texmf.cnf

In that file you'll probably find a line reading

shell_escape = f

Change that "f" (false) to "t" (true) to enable it.

How to check if write18 is turned on

Sometimes while writings a module, one needs to check if write18 is enabled or now. There are different ways in which this can be done.

\ifeof18 works with both pdfTeX and XeTeX, while \pdfshellescape only works with pdfTeX.

Hans response on the mailing list

write 18 is a hack and pdfshellescape a sane replacement

in luatex it will probably be gone completely since there we have

\directlua 0 { os.execute("...") }