Zunächst sei darauf hingewiesen, dass der Unterschied zwischen TeX und LaTeX bereits in »[Was ist der Unterschied zwischen TeX und LaTeX?](https://texwelt.de/wissen/fragen/786/was-ist-der-unterschied-zwischen-tex-und-latex)« erklärt wird. Darauf will ich hier deshalb nicht tiefer eingehen. In den Antworten zu besagter Frage wird auch erklärt, dass es *unterschiedliche TeX-Maschinen* (engl. *engines*) gibt. Verallgemeinernd wird jede Verwendung des LaTeX-Formats unabhängig von der verwendeten TeX-Maschine als LaTeX bezeichnet. Erst, wenn die Maschine eine Rolle spielt, spricht man auch von LuaLaTeX (oder luaLaTeX), pdfLaTeX (oder PDFLaTeX) oder XeLaTeX oder nennt direkt das verwendete Programm.
Was sind die unterschiedlichen TeX-Maschinen und Programme?
-----------------------------------------------------------
Die ursprüngliche TeX-Maschine ist TeX. Diese produziert immer eine Ausgabe als DVI-Datei. Um diese Ausgabe drucken oder an andere weitere geben zu können, muss man sie dann in der Regel mit weiteren Programmen umwandeln, beispielsweise mit `dvips` in eine PostScript-Datei (und diese dann beispielsweise mit `pstopdf` weiter in eine PDF-Datei) oder mit `dvipdfmx` direkt in eine PDF-Datei. Ursprünglich war das Programm `latex` schlicht die Verwendung des LaTeX-Formats mit der TeX-Maschine. Heute jedoch verbirgt sich auch hinter dem Programm `latex` die Verwendung des LaTeX-Formats mit der pdfTeX-Maschine. Dazu im übernächsten Absatz mehr.
Eine der ersten Erweiterungen der TeX-Maschine war e-TeX. e-TeX bietet einige Erweiterungen der Sprache TeX. Um diese Erweiterungen mit LaTeX verwenden zu können, benötigt man ein LaTeX-Format für die e-TeX-Maschine. Dieses war ursprünglich als das Programm `elatex` verfügbar. Seite rund zehn Jahren wird allerdings e-TeX bereits für das normale LaTeX empfohlen. Daher enthält normalerweise nicht nur `latex`, sondern alle nachfolgend genannten LaTeX auch e-TeX.
Die pdfTeX-Maschine bietet nicht nur direkte PDF-Ausgabe ohne den Umweg über die DVI-Datei. Sie bietet auch einige Spracherweiterungen, die nicht alle mit der PDF-Ausgabe zu tun haben. Statt der PDF-Ausgabe beherrscht es auch weiterhin die DVI-Ausgabe und dann auch einige der Spracherweiterungen. Daher ist das Programm `latex` heutzutage die Verwendung des LaTeX-Formats mit der pdfTeX-Maschine (ganz genau der pdfeTeX-Maschine also der Verschmelzung von pdfTeX und e-TeX), die auf DVI-Ausgabe konfiguriert ist. Das Programm `pdflatex` unterscheidet sich dadurch, dass die PDF-Ausgabe ausgewählt ist. Will man betonen, dass LaTeX mit der Maschine pdfTeX verwendet wird, spricht man von pdfLaTeX oder PDFLaTeX.
Die XeTeX-Maschine bietet ebenfalls eine PDF-Ausgabe. Intern erzeugt es dazu eine Art DVI-Datei, die jedoch deutlich erweitert ist. Daraus wird dann intern die PDF-Ausgabe erzeugt. XeTeX war die erste TeX-Maschine, die Systemfonts oder allgemein TrueType-, Type-1- und OpenType-Fonts direkt einbinden konnte. Außerdem bietet es native UTF8-Unterstützung. Wird das LaTeX-Format mit der Maschine XeTeX verwendet, spricht man von XeLaTeX. Das zugehörige Programm heißt dann `xelatex`.
Die [LuaTeX-Maschine](https://texwelt.de/wissen/fragen/70) ist eine Weiterentwicklung der pdfTeX-Maschine. Diese wurde ebenfalls um native UTF8-Unterstützung und einen eingebauten, mit der TeX-Maschine verzahnten Lua-Interpreter erweitert. Dieser Lua-Interpreter ermöglicht es beispielsweise eine eigene Fontverwaltung zu schreiben. Diese existiert mit `luaotfload` auch für LaTeX, so dass auch LuaLaTeX Systemfonts oder allgemein Fonts in Formaten wie OpenType, TrueType oder Type-1 verwenden kann. LuaLaTeX ist also das LaTeX-Format mit der LuaTeX-Maschine. Das zugehörige Programm heißt 'lualatex'.
Was sind nun die Unterschiede in der Anwendung?
-----------------------------------------------
Wie bereits erwähnt, beherrschen LuaLaTeX und XeLaTeX direkt die **Eingabe in UTF8**. Daher darf man auch das Paket `inputenc` nicht mit diesen beiden verwenden. Stattdessen konfiguriert man seinen Editor einfach auf UTF8.
Sowohl pdfLaTeX, als auch LuaLaTeX als auch XeLaTeX erzeugen PDF-Dateien. Alle drei erlauben als **Grafikformate** für `graphicx` PNG, JPEG und PDF. Darüber hinaus unterstützt XeLaTeX auch EPS. Bei den anderen beiden benötigt man hingegen das Paket `epstopdf` für die Einbindung von EPS-Dateien. Bei TeX Live geschieht dies jedoch im Hintergrund.
Sowohl LuaLaTeX als auch XeLaTeX beherrschen die **Verwendung von Zeichensätzen** mit mehr als 256 Zeichen. Statt `fontenc` lädt der Anwender dazu das Paket [`fontspec`](https://ctan.org/pkg/fontspec) (intern wird allerdings weiterhin `fontenc` mit dem dafür speziell entwickelten `TU`-codierung verwendet). Damit können dann OpenType- und Type1-Fonts ohne spezielle **Fonteinbindung** direkt geladen werden. Ob dabei Systemfonts oder Fonts in speziellen Verzeichnissen im TEXMF-Baum direkt über den Fontnamen oder über den Dateinamen des Fonts geladen werden können, hängt von der TeX-Distribution und davon ab, ob man LuaLaTeX oder XeLaTeX verwendet. In der Regel kann LuaLaTeX sowohl Systemfonts als auch Fonts im TEXMF-Baum über den Fontnamen findet, während XeLaTeX häufig etwas restriktiver ist. Die Installation von Fonts für pdfLaTeX ist dagegen [ungleich komplizierter](http://mirrors.ctan.org/info/Type1fonts/fontinstallationguide/fontinstallationguide.pdf), wenn es noch kein spezielles Paket dafür gibt. Selbst mit Paket ist die Unterstützung bei pdfLaTeX oftmals eingeschränkt.
Eine Besonderheit stellt auch das Paket `babel` dar. Traditionell schaltet `babel` für die Unterstützung einiger Sprachen die Eingabecodierung bzw. die Fontcodierung um. Da mit LuaLaTeX und XeLaTeX aber weder `inputenc` noch `fontenc` verwendet werden, ist diese Umschaltung nicht ratsam. Daher wurde für XeLaTeX das Paket `polyglossia` geschaffen, das sich auf die Umschaltung von sprachabhängigen Begriffen und Trennmustern beschränkt. Allerdings arbeitete das Paket ursprünglich nicht mit LuaLaTeX zusammen. Inzwischen wird sowohl `babel` an die Verwendung mit LuaLaTeX und XeLaTeX angepasst als auch `polyglossia` an die Verwendung mit LuaLaTeX. Es ist schwer allgemein zu sagen, welchem Paket der Vorzug zu geben ist. Bei europäischen Sprachen, deren Schrift auf dem lateinischen Alphabet basiert, dürfte es am ehesten eine Frage der persönlichen Vorlieben sein.
Da weder XeTeX noch LuaTeX alle pdfTeX-Erweiterungen bietet, kann es bei der Verwendung einiger weniger Pakete zu **Inkompatibilitäten** kommen, wenn man von pdfLaTeX auf XeLaTeX oder LuaLaTeX umstellt. LuaTeX ist aber näher an pdfTeX. Da LuaTeX auch nicht alle XeTeX-Erweiterungen beherrscht ist aber die Verwendung von XeLaTeX auch nicht immer durch die Verwendung von LuaLaTeX zu ersetzen. Und natürlich gibt es auch Pakete, die aktiven Gebrauch von Lua-Engine in LuaTeX machen und daher weder mit pdfLaTeX noch mit XeLaTeX funktionieren.
Zu beachten ist auch, dass weder bei XeTeX noch bei LuaTeX 100% **Kompatibilität bei der Ausgabe** auf der Agenda stand. Ein Dokument, das bisher mit pdfLaTeX erzeugt wurde, kann also ggf. bei Verwendung von XeLaTeX oder LuaLaTeX anders umbrochen werden. Häufig wird sich das nur gering bemerkbar machen. Viele minimale Änderungen können sich allerdings auch zu gravierenden Änderungen aufschaukeln.
Inzwischen ist LuaTeX auch bei eine Versionsnummer größer 1 angelangt. Tatsächlich werden aber noch immer kleinere und größere Bugs gefunden und behoben. Selten werden dagegen noch Spracherweiterungen geändert. Es gibt auch noch immer hin und wieder neue Erweiterungen. Die meisten, teilweise auch inkompatible Änderungen gibt es allerdings im Lua-Teil. So dass *normale LaTeX-Dokumente* selten davon betroffen sind. Trotzdem sollte man sich für den produktiven Einsatz dessen bewusst sein. Seit LaTeX selbst aber ebenfalls wieder aktiv weiter entwickelt wird und auch dabei Inkompatibilitäten in Kauf genommen werden, dürften die Änderungen bei LuaLaTeX von eher geringerer Bedeutung sein. Selbst für die letzte große Änderung im Benutzerinterface von LuaTeX gibt es bei LaTeX mit [`luatex89`](https://ctan.org/pkg/luatex89) ein Paket, um notfalls Kompatibilität zu einer älteren Version herzustellen.
Eine ebenfalls relevante Verbesserung ist, dass LuaTeX mit dynamischer **Speicherallokation** arbeitet, während pdfTeX und XeTeX mit statischen Arrays arbeitet. Das bedeutet, dass LuaLaTeX der Speicher erst dann ausgeht, wenn das Betriebssystem keinen Speicher mehr bereitstellen kann. Dagegen muss man ggf. bei Verwendung von pdfLaTeX oder XeLaTeX die Größe interner Speicherarrays ändern. Dazu muss man teilweise eine Konfigurationsdatei ändern und dann das LaTeX-Format neu erzeugen, was sehr aufwändig ist. Für einige der Arrays gibt es auch Optionen, die man beim Aufruf von `pdflatex` bzw. `xelatex` mit angeben kann. Derartige Probleme treten beispielsweise bei Verwendung von [`pgfplots`](https://ctan.org/pkg/pgfplots) gerne auf, wenn man sehr Funktionen mit sehr vielen Stützstellen zeichnet.
Auch wer mit sehr vielen Verzeichnissen arbeitet, kann ggf. von einer Erweiterung von LuaTeX profitieren. Während nämlich pdfTeX und XeTeX nur jeweils 17 **Dateien für das Lesen und Schreiben** gleichzeitig öffnen kann, ist auch diese Grenze bei LuaLaTeX gefallen. Stattdessen gelten nur noch die Grenzen des Betriebssystems. Pakete, wie [`scrwfile`](https://ctan.org/pkg/scrwfile), die mit einigen Tricks versuchen, die Grenze von gleichzeitig beschreibbaren Dateien nach oben zu verschieben, sind damit bei LuaLaTeX überflüssig. Man vermeidet so auch die Inkompatibilitäten, die durch die Verwendung solcher Pakete entstehen können.
In der **Geschwindigkeit** sind `latex` und `pdflatex` bisher deutlich vorn. Am langsamsten ist in der Regel `lualatex`. Wobei *langsam* natürlich relativ ist.ist. Das Ganze kann sich jedoch auch in extremer Weise umdrehen. Wird beispielsweise für komplizierte Berechnungen von der Lua-Seite von `lualatex` Gebraucht gemacht, wie das bei `pgfplots` teilweise der Fall ist, dann kann `lualatex` sogar extrem viel schneller als `pdflatex` oder `xelatex` sein.