Open main menu

Changes

1,453 bytes added ,  13:27, 9 August 2020
m
Text replacement - "</cmd>" to "}}"
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.45/2.6'''
Create a Each application now has its own configuration file <code>[localtexmf PATH]\miktex\config\miktex.ini</code> and add the following line to it: write18=To enable''(Because of some unknown reason, <code>write18=enable</code> in <code>[localtexmf PATH]\miktex\run initexmf --edit-config\miktex.ini</code> may be ignored on some computers. In that case make the change in <code>[MikTeX PATH]\-file=miktex\config\miktexpdftex.ini</code>, but or (if 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 <code>write18</code> runor 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 set the environment variable <code>MIKTEX_ENABLEWRITE18=t</code>. === Windows/Linux/Mac - TexLive === '''TexLive 2008'''
Open the file 'path to TexLive'/texmf/web2c/texmf.cnf and search in the file for the following passage:
% Enable system commands via \write18{...}? Obviously insecure, despite
% being so useful.
shell_escape = f
change here the option from false to true so that the last line above looks like
shell_escape = t
After that you just have to recompile your formats. That is done by
texexec --make --all
or/and
texexec --make --all cont-xx
where xx stands for your needed countrycode.
Additionally if you're using MK IV already you have to do the following steps afterwards to get a running environment:
luatools --generate
context --make --all
context --make --all cont-xx
after that write18 sould be enabled and you sould be able to use it.
=== Linux/Mac ===
First try to figure out where your configuration file resides:
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
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 not. There are different ways in which this can be done.
 
* A new primitive in pdftex 1.30: {{cmd|pdfshellescape}} is a read-only integer that is 1 if {{cmd|write18}} is enabled, 0 otherwise.
* ConTeXt defines {{cmd|systemcommandmode}} that is 2 if {{cmd|write18}} is enabled, 1 otherwise.
* A primitive {{cmd|ifeof18}} that is <code>true</code> if {{cmd|write18}} is disabled, <code>false</code> otherwise.
 
{{cmd|ifeof18}} works with both pdfTeX and XeTeX, while {{cmd|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
 
<texcode>
\directlua 0 { os.execute("...") }
</texcode>
 
== See also ==
 
* [[Executesystemcommand]]
 
[[Category:Installation]]