I stumbled upon an example, which needed to be compiled with the additional option --shell-escape
. Using this option it worked just fine, but I'm curious:
Why or when is this option needed and what does it actually do?
Sometimes, it is useful to be able to run external commands from inside the tex file : it allows for example to externalize some typesetting, or to use external tools like bibtex. This is available via the \write18
tex primitive.
The problem is that it allows for almost everything. A tex file is meant to be portable, and one shouldn't have to fear any security issue when compiling a third-party file. So by default, this primitive is disabled.
If an user needs to use it, he needs to explicitely tell the compiler that he trusts the author of the file with shell interaction, and that's exactly the point of the optional --shell-escape
argument.
\write18
to compile a .tex
into .dvi
and convert the .dvi
to .ps
to .pdf
.
Commented
Jun 29, 2016 at 19:44
\immediate
&\write18
and how does one use them?? In short: “No\write18
without--shell-escape
(minus a few safe exceptions).”-shell-escape
or--shell-escape
for TeXLive or-enable-write18
or--enable-write18
for MikTeX does the same thing.--shell-escape
is such way that it would be obvious to non-experienced users.