# Generating PDF from xelatex

Given a LaTeX file, `foo.tex`, that requires xelatex, one can convert it to PDF in the following two ways:

1. Run `xelatex foo` (which directly generates `foo.pdf`)
2. Run `xelatex -no-pdf foo` (which generates `foo.xdv`) followed by `xdvipdfmx foo` (which converts the xdv file to `foo.pdf`)

Do the two approaches, in effect, produce the same pdf file? Or is there some advantage to (1) (or indeed (2))?

(The context for this is that in the past I had always assumed that with a latex file that does not require xelatex it was preferable to call `pdflatex` rather than calling `latex` and converting the DVI to PDF. Indeed, in the past `latexmk` with the `-xelatex` argument would follow route (1), however newer versions follow (2), which initially concerned me, in analogy with my pdflatex comment above. Having found "latexmk with xelatex xdv mode" I suspect that (1) and (2) are essentially equivalent, but I wanted to confirm this. In particular I want to be sure the two routes are equivalent even if one is using packages such as microtype or hyperref.)

xetex is not like pdftex or luatex that have a modified back end that generates pdf, it always generates (extended) dvi but it runs xdvipdfmx at the end and deletes the intermediate files unless `--no-pdf` option is given.
• Perfect! Is this fact (namely that `xelatex` is exactly equivalent to `xelatex -no-pdf`+`xdvipdfmx`) documented somewhere? – banbh Nov 15 '17 at 16:59
• @banbh er... I have the sources checked out, does that count?:-) if you go `xetex --help` then among the options is `-output-driver=CMD use CMD as the XDV-to-PDF driver instead of xdvipdfmx` which sort of hints that the default behaviour is to run xdvipdfmx but it isn't mentioned in the xetex manual as far as I can see. – David Carlisle Nov 15 '17 at 17:07
• Hey David, does `xelatex` calls `xdvipdfmx` with any flags? It seems that `xelatex` == `xelatex -no-pdf` + `xdvipdfmx -E`? – Ch'en Meng Apr 3 '18 at 7:21
• @Ch'enMeng Checking the XeTeX sources I found: `const char *outputdriver = "xdvipdfmx -q -E"; /* default to portable xdvipdfmx driver */`, so calling `xelatex` is essentially the same as calling `xelatex -output-driver='xdvipdfmx -q -E'` or `xelatex -no-pdf` + `xdvipdfmx -q -E`. – Phelype Oleinik Feb 7 at 18:19
• Hi @PhelypeOleinik, thanks for the information. `: )` – Ch'en Meng Feb 11 at 11:30