xetex-unsafe (1) - Linux Manuals

xetex-unsafe: run xe(la)latex unsafely


xetex-unsafe, xelatex-unsafe - run xe(la)latex unsafely


xetex-unsafe [xetex-options] xelatex-unsafe [xetex-options]


xetex-unsafe (xelatex-unsafe) runs XeTeX (XeLaTeX) unsafely; specifically, using the dvipdfmx-unsafe.cfg configuration file.

As of TeX Live 2022, doing this is necessary only when running XeTeX on documents using PSTricks features which require transparency. We strongly recommend using Lua(La)TeX with PSTricks instead of XeTeX in this case.

At all costs, avoid using this, or any, unsafe invocation with documents off the net or that are otherwise untrusted in any way.


You might well ask why using transparency features is unsafe in XeTeX. The answer lies in the implementation history of Ghostscript, starting as a PostScript interpreter before PDF was invented, when it was acceptable to abort on an error, whereas with PDF, it must keep going. The transparency operators, if abused in relation to this error recovery, can cause internal inconsistencies in Ghostscript's state.

Thus, to be safe, we must disallow transparency with Ghostscript by default. The xdvipdfmx backend for XeTeX calls Ghostscript under certain circumstances, notably when using PSTricks. (x)dvipdfmx itself is not a PostScript interpreter, which is exactly what PSTricks requires.

Thus, to enable transparency, xe(la)tex-unsafe run XeTeX with arguments to the xdvipdfmx backend (-output-driver="xdvipdfmx -i dvipdfmx-unsafe.cfg -q -E") to use dvipdfmx-unsafe.cfg, which in turn tells Ghostscript to enable the transparency operators (-dALLOWPSTRANSPARENCY). They're disabled by default.

There have been further complications related to reading from the filesystem, but as of TL22, these have been solved. The transparency issue cannot be solved without a different Ghostscript implementation, and the Ghostscript developers say they have no timeline for this.

To repeat the above: when using PSTricks and transparency, we strongly recommend playing it safe and using Lua(La)TeX instead of Xe(La)TeX.


All command-line arguments except --help and --version are passed to Xe(La)TeX.


For more about XeTeX: https://tug.org/xetex

For more about PSTricks: https://tug.org/PSTricks

Email for xe(la)tex-unsafe specifically: https://lists.tug.org/dvipdfmx