# LuaTeX

LuaTeX ([ˈluaˌtɛχ]) ist ein Textsatzsystem, das über die darin eingebettete Skriptsprache Lua gesteuert werden kann. LuaTeX gilt als Nachfolger des in seiner Entwicklung weitgehend abgeschlossenen pdfTeX. Als Eingabekodierung wird standardmäßig UTF-8 verwendet. LuaTeX ist in der Lage, OpenType- und TrueType-Schriftarten sowohl für den Text- als auch für den Mathematiksatz einzusetzen. Am 27. September 2016 erschien die erste stabile Version 1.0.0.

## Geschichte

Schon vor pdfTeX und LuaTeX gab es Bestrebungen, das TeX-System zu verbessern. Die 1994 veröffentlichte Erweiterung ε-TeX erhöhte die Anzahl von ehemals 256 TeX-internen Registern (bedingt durch die alte 8-Bit-Adressierung) auf nun 32.768. Eine Zeichencodierung in 16-Bit-Unicode, die eine breite Palette von Alphabeten abdeckt, wurde mit der TeX-Erweiterung Ω (Omega) eingeführt. Obwohl Ω viele weitere innovative Konzepte beinhaltete, kam seine Entwicklung zum Erliegen und der Code wurde im Jahr 1991 eingefroren. Eine weitere Entwicklung war א (Aleph). Dessen Ziel war eine TeX-Erweiterung, die die Ω- und ε-TeX-Funktionalitäten vereint. Hauptmerkmal von א ist die Unterstützung von bidirektionalem Schriftsatz.
Das neu geschaffene LuaTeX sollte die Funktionalitäten von pdfTeX, ε-TeX, Ω und א in sich vereinen.
Die Entwicklung von LuaTeX wird unterstützt durch das Oriental TeX Project der Colorado State University, die Nederlandstalige TeX Gebruikersgroep (niederländischsprachige TeX User Group, NTG) und die TeX Users Group (TUG). Der TeX Development Fund der TUG gewährt dem LuaTeX-Projekt als „lang gehegtem Wunsch nach einer in TeX eingebetteten Allzweck-Programmiersprache“ einen Großteil seiner Mittel. Diese höchste Förderpriorität unterstreicht die besondere Bedeutung von LuaTeX für die aktuelle TeX-Entwicklung.
Einen Plan zur LuaTeX-Entwicklung hatte Hans Hagen im Februar 2009 vorgestellt. Ab Version 0.30 bekamen stabile und produktiv verwendbare Versionen (jeweils vorgesehen für TeX Live) die Versionsnummern 0.X0. Die Fertigstellung von Version 0.80 zur ConTeXt-Konferenz 2014 gelang nicht; sie erschien erst im Juni 2015. Nach Hagens ursprünglicher Vorstellung sollte Version 1.0 genau 30 Jahre nach dem Erscheinen von TeX82 zur TUG 2012 veröffentlicht werden, stattdessen wurde geplant, diese erst im September 2016 zur 10. ConTeXt-Konferenz in den Niederlanden freizugeben, was auch passierte. Seitdem werden die Versionsnummern nur noch in Schritten von 1.xy erhöht und sollen hauptsächlich Bugfixes beinhalten.
Die 2019 erschienene Version 1.10 stellte einen vorläufigen Endpunkt in der Entwicklung dar, es soll nur noch Fehlerbehebungen und eventuell Optimierungen geben. Seit der Version für TeX Live 2020 ist die text-shaping-Bibliothek HarfBuzz integriert. Eine Weiterentwicklung findet als LuaMetaTeX im Zusammenhang mit dem ConTeXt-Projekt statt.

### Verwendung in TeX Live

In der TeX-Distribution TeX Live wurde LuaTeX erstmals 2008 in der Snapshot-Version 0.25.4 aufgenommen. In weitere TeX-Live-Versionen wurde das jeweils aktuelle LuaTeX integriert: Version 0.40.6 in TeX Live 2009, Version 0.60.2 in TeX Live 2010, Version 0.70.1 in TeX Live 2011, Version 0.70.2 in TeX Live 2012, Version 0.76.0 in TeX Live 2013, Version 0.79.1 in TeX Live 2014, Version 0.80.0 in TeX Live 2015, Version 0.95.0 in TeX Live 2016, Version 1.0.4 in TeX Live 2017, Version 1.07.0 in TeX Live 2018, Version 1.10.0 in TeX Live 2019, Version 1.12.0 in TeX Live 2020 sowie Version 1.13.0 in TeX Live 2021. In TeX Live 2022 ist die Version 1.15.0 enthalten. Die TeX-Live-Versionen sind ebenso wie die auf den ConTeXt-Konferenzen veröffentlichten als die jeweils stabilen Versionen zu betrachten. Alle Versionen zwischen den jährlichen Releases gelten als Beta-Versionen.

### Versionsgeschichte

Die Veröffentlichung der wichtigsten Entwicklungsschritte des Systems erfolgte jeweils bei Tagungen der TeX-Anwendergruppen:
| Version | Datum | Tagung | Neuerungen |
| 0.10 | 18. Juli 2007 | TUG 2007 in San Diego | erste öffentliche Beta-Version |
| 0.29 | 18. Juli 2008 | TUG 2008 in Cork | weitere Beta-Version |
| 0.40 | 22. Apr. 2009 | BachoTeX 2009 in Bachotek (bei Brodnica) | mit den Mathematikerweiterungen |
| 0.43 | 19. Aug. 2009 | EuroTeX 2009 in Den Haag | ConTeXt Mark IV und LaTeX mit Zusatzpaketen (z. B. luaotfload, luamplib, luatexbase, luatextra) nutzen LuaTeX-Funktionen; besondere Unterstützung in TeX noch in Entwicklung |
| 0.50 | 24. Dez. 2009 | – | erste „stabile“ Beta-Version |
| 0.60 | 4. Apr. 2010 | – | ursprünglich für TeX Live 2010 vorgesehen |
| 0.80 | 13. Juni 2015 | – | neue Bibliothek newtokenlib; enthalten in TeX Live 2015 |
| 1.0 | 27. Sep. 2016 | ConTeXt-Konferenz 2016 in Kalenberg (bei Steenwijkerland) | erste stabile Version |
| 1.08 | 28. Aug. 2018 | ConTeXt-Konferenz 2018 in Sibřina (bei Prag) | Binärmodus in MPLib entfernt, Poppler durch integrierte Bibliothek ersetzt |
| 1.15 | 31. Dez. 2021 | – | stabile Version; enthalten in TeX Live 2022 |

## Merkmale von LuaTeX

LuaTeX ist aus einer Version von pdfTeX entwickelt worden, die um eine eingebettete Lua-Scripting-Engine erweitert worden war. Nach einigen Tests wurde es zum Nachfolger von pdfTeX (einer Kombination aus TeX und ε-TeX, die PDF-Dateien direkt erzeugt) bestimmt. In einem späteren Entwicklungsstadium wurde die Hauptfunktionalität von א, das Setzen von bidirektionalen Schriften, integriert.
Das Hauptziel des Projektes war, eine TeX-Version zur Verfügung zu stellen, in der alle Interna über Lua zugänglich sind. Im Entwicklungsprozess wurde ein großer Teil des internen TeX-Codes umgeschrieben. Statt in TeX fest codierte Eigenschaften zu verwenden, können die Nutzer oder Makro-Entwickler ihre eigenen Erweiterungen selbst schreiben.
LuaTeX bietet native Unterstützung für OpenType-Schriften an, kann aber auch TrueType-Schriften laden. Im Gegensatz zu XeTeX wird nicht durch System-Funktionen auf die Schriften zugegriffen, sondern über eine auf FontForge basierende Bibliothek.
Ein mit LuaTeX zusammenhängendes Projekt ist MPLib (ein erweitertes MetaPost-Modul), das in TeX eine Grafik-Engine zur Verfügung stellt.
Die Makropakete LaTeX und ConTeXt lassen sich zusammen mit LuaTeX nutzen. Um LaTeX-Quelltexte zu verarbeiten, kann unmittelbar das Programm lualatex aufgerufen werden. Im Vergleich zu pdfLaTeX sind einige Besonderheiten zu beachten. Die Standardcodierung der Quelltexte ist UTF-8, so dass eine spezielle Angabe der Eingabekodierung nicht mehr benötigt wird. Deshalb darf das Paket inputenc nicht benutzt werden. Die Auswahl von Schriften erfolgt mit dem Paket fontspec, damit kann jede auf dem System installierte Schriftart eingebunden werden. Aus diesem Grund darf das Paket fontenc nicht geladen werden.
Die ConTeXt-Version Mark IV basiert auf LuaTeX. Mark-IV-Quelltexte müssen mit LuaTeX übersetzt werden. Standardmäßig wird beim Aufruf von context LuaTeX verwendet. Auch für diese Quelltexte ist die Standardcodierung UTF-8.

## Aufbau eines Dokuments

Im Folgenden ist ein LuaLaTeX-Beispiel dargestellt. Auf der linken Seite steht der Quelltext, der mit einem beliebigen Texteditor erstellt werden kann. Rechts ist die Ausgabe dieses Beispiels dargestellt, die unabhängig vom Bildschirm- oder Druckertyp ist, auf dem sie erzeugt wird.
| Quelltext eines LuaLaTeX-Dokuments | Ausgabe des kompilierten Dokuments |
| %% Dieser Quelltext ist in der Kodierung UTF-8 zu speichern und mit lualatex %% zu kompilieren. \documentclass[a4paper]{scrartcl} \usepackage[ngerman]{babel} % Oder: % \usepackage{polyglossia} % \setdefaultlanguage[spelling=new, babelshorthands=true]{german} \usepackage{fontspec} \usepackage{unicode-math} \usepackage{luacode} \setromanfont{Cambria} \setsansfont{Calibri} \setmonofont{Consolas} \setmathfont{Cambria Math} \title{Ein Testdokument} \author{Otto Normalverbraucher} \date{15. Januar 2014} \begin{document} \maketitle \tableofcontents \section{Schriftarten} Mit Lua\TeX lassen sich in Windows die systemeigenen Schriftarten verwenden, wie zum Beispiel Cambria, die über einen großen Satz mathematischer Zeichen für die Formeldarstellung verfügt, oder auch \textsf{Calibri} und \texttt{Consolas}. \section{Formeln} Lua\TeX ist auch ohne Formeln sehr nützlich und einfach zu verwenden. Grafiken, Tabellen, Querverweise aller Art, Literatur- und Stichwortverzeichnis sind kein Problem. Formeln sind etwas schwieriger, dennoch hier ein einfaches Beispiel: \begin{displaymath} E = \frac{m_{0} c^{2}}{\sqrt{1-v^{2}/c^{2}}} \end{displaymath} \section{Lua-Code} Lua\TeX kann aber auch Lua-Programmcode ausführen. So erzeugt man zum Beispiel mit \texttt{directlua} die Zufallszahl \directlua{tex.print(math.random)}. Auch die Kreiszahl $π$ muss man nicht mehr auswendig wissen, sie hat den Wert \directlua{tex.print(math.pi)}. Mithilfe der \texttt{luacode}-Umgebung kann man sogar zählen, wie hier bis Sechzig: \begin{luacode} for x=1,60 do tex.print(x) end \end{luacode} Hier ist der Schluss des Testdokuments. \end{document} | |