2.3 TeX engines

LaTeX is a large set of commands (macros) that is executed by a TeX program (see Overview of LaTeX). Such a set of commands is called a format, and is embodied in a binary .fmt file, which can be read much more quickly than the corresponding TeX source.

This section gives a terse overview of the TeX programs that are commonly available (see also Command line interface).


In TeX Live (https://tug.org/texlive), if LaTeX is invoked via either the system command latex or pdflatex, then the pdfTeX engine is run (https://ctan.org/pkg/pdftex). When invoked as latex, the main output is a .dvi file; as pdflatex, the main output is a .pdf file.

pdfTeX incorporates the e-TeX extensions to Knuth’s original program (https://ctan.org/pkg/etex), including additional programming features and bi-directional typesetting, and has plenty of extensions of its own. e-TeX is available on its own as the system command etex, but this is plain TeX (and produces .dvi).

In other TeX distributions, latex may invoke e-TeX rather than pdfTeX. In any case, the e-TeX extensions can be assumed to be available in LaTeX, and a few extensions beyond e-TeX, particularly for file manipulation.


If LaTeX is invoked via the system command lualatex, the LuaTeX engine is run (https://ctan.org/pkg/luatex). This program allows code written in the scripting language Lua (http://luatex.org) to interact with TeX’s typesetting. LuaTeX handles UTF-8 Unicode input natively, can handle OpenType and TrueType fonts, and produces a .pdf file by default. There is also dvilualatex to produce a .dvi file.


If LaTeX is invoked with the system command xelatex, the XeTeX engine is run (https://tug.org/xetex). Like LuaTeX, XeTeX natively supports UTF-8 Unicode and TrueType and OpenType fonts, though the implementation is completely different, mainly using external libraries instead of internal code. XeTeX produces a .pdf file as output; it does not support DVI output.

Internally, XeTeX creates an .xdv file, a variant of DVI, and translates that to PDF using the (x)dvipdfmx program, but this process is automatic. The .xdv file is only useful for debugging.


If LaTeX is invoked via the system command hilatex, the HiTeX engine is run (https://ctan.org/pkg/hitex). This program produces its own format, named HINT, designed especially for high-quality typesetting on mobile devices.


These commands provide significant additional support for Japanese and other languages; the u variant supports Unicode. See https://ctan.org/pkg/ptex and https://ctan.org/pkg/uptex.

As of 2019, there is a companion -dev command and format for all of the above, except hitex:


These are candidates for an upcoming LaTeX release. The main purpose is to find and address compatibility problems before an official release.

These -dev formats make it easy for anyone to help test documents and code: you can run, say, pdflatex-dev instead of pdflatex, without changing anything else in your environment. Indeed, it is easiest and most helpful to always run the -dev versions instead of bothering to switch back and forth. During quiet times after a release, the commands will be equivalent.

These are not daily snapshots or untested development code. They undergo the same extensive regression testing by the LaTeX team before being released.

For more information, see “The LaTeX release workflow and the LaTeX dev formats” by Frank Mittelbach, TUGboat 40:2, https://tug.org/TUGboat/tb40-2/tb125mitt-dev.pdf.

Unofficial LaTeX2e reference manual