write18
From ConTeXt wiki
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.
Contents |
[edit] How to turn on write18
[edit] Windows - MikTeX
MikTeX 2.5/2.6
Each application now has it's own configuration file. To enable write18 run
initexmf --edit-config-file=miktex\config\pdftex.ini
or (if you have MikTeX 2.5 or a version of ConTeXt from 2006)
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.
[edit] 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
or
/usr/local/gwTeX/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.
[edit] 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: \pdfshellescape is a read-only integer that is 1 if \write18 is enabled, 0 otherwise.
- ConTeXt defines \systemcommandmode that is 2 if \write18 is enabled, 1 otherwise.
- A primitive \ifeof18 that is
trueif \write18 is disabled,falseotherwise.
\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("...") }

