LaTeX3: Neue Mechanismen für die nächste Generation von Dokumenten

LaTeX3 bringt spannende Ansätze zur Programmierung für das codebasierte Textsatzsystem, die deutlich flexibler sind als die Erweiterung durch Skriptsprachen.

Know-how  –  22 Kommentare
LaTeX3: Neue Mechanismen für die nächste Generation von Dokumenten

Wer sich als LaTeX-Nutzer outet, hört oft Sätze wie "Das gibt es immer noch?". Die meisten haben es im Rahmen ihres Studiums irgendwann verwendet und häufig später verworfen. Die Gründe dafür sind vielfältig, aber es ist schade, dass viele dadurch nie gesehen haben, wie LaTeX als codebasiertes Textsatzsysteme die Effizienz und Qualität in der Dokumentenerstellung steigern kann. Ein weiterer Faktor ist, dass die LaTeX-Dokumente, wie sie gegenwärtig die meisten Hochschulen verwenden, immer noch so aussehen wie vor über 20 Jahren. LaTeX verfügt mittlerweile über flexiblere Darstellungsmöglichkeiten, die einfachere Mittel zur Grafikgenerierung (wie TikZ/pgf) und die Unterstützung für OTF-Fonts in XeLaTeX und LuaLateX.

Zusätzlich zu diesen Erweiterungen, die stetig mehr Verbreitung finden, erleichtern die neuen Entwicklungen auch die Nutzung von Programmiermechanismen in LaTeX. Neben der Einbettung der Skriptsprache Lua innerhalb von LuaTeX entwickelt das LaTeX3-Projekt-Team eine andere Möglichkeit. Viele der Anforderungen für die Entwicklungen an LaTeX3 sind durch die Ausbreitung digitaler Dokumente sowohl in SGML als auch PDF mit Hypertext-Elementen inspiriert. Dadurch lässt es sich auch nutzen, um andere Plain-Text-Formate als regulären TeX-Code in expl3 einzulesen und entsprechend zu parsen. Die genauen Hintergründe der Entwicklungen zu expl3 finden sich in ausführlicher Form auch in der Beschreibung und auf der Projektseite.

Übersicht der gängigen LaTeX-Engines (Abb. 1)

Dieser Artikel behandelt die bisher verwendbaren LaTeX3-Funktionen in L3in2e (LaTeX3 in LaTeX2e) und vergleicht die Vorgehensweise mit der Verwendung von Lua in LuaLaTeX.

Das Prinzip von L3in2e

LaTeX3 befindet sich nach wie vor in der Entwicklung, ist jedoch bereits lange als Paket zu LaTeX2e nutzbar. Der Unterschied zu LuaLaTeX ist hauptsächlich, dass LaTeX3 in verschiedenen Ebenen ansetzt, die an die Arbeitsweise von LaTeX angepasst sind. Sie beschäftigen sich mit der Programmierung, dem Textsatz, dem Design und der abschließenden Darstellung der Dokumente in der PDF-Datei. Die Ebene, die am stärksten von der LaTeX2e-Nutzung abweicht, ist die der Programmierung, die das LaTeX2e-Paket expl3 durch folgenden Befehl zur Verfügung stellt:

\usepackage{expl3}

Um die Programmierebene entkoppelt zu halten, nutzt expl3 eine eigene Syntax, die den Eingriff der Nutzer in die Expansion von Makros und deren Argumente bietet. Dass die Umsetzung der neuen Syntax nicht ganz einfach ist, fasste der LaTeX-Schöpfer Leslie Lamport bereits im Vorfeld äußerst treffend zusammen:

"I presume this is one of several dozen bugs that would arise over the years if anyone were foolish enough to try allowing '_' in command names."

Typische expl3-Befehle haben in der Tat eine gewöhnungsbedürftige Form:

  • \ExplSyntaxOn: Syntax einschalten,
  • \int_new:N \g_MyModule_item_int: Ganzzahl-Variable anlegen,
  • \int_gset:Nn \g_MyModule_item_int { 42 }: Variable einen Wert zuweisen,
  • \int_use:N \g_MyModule_item_int: Variable ausgeben und
  • \ExplSyntaxOff: Syntax wieder ausschalten.

Die Syntaxumschaltung ist aufgrund der Funktion der Unterstriche in Standard-LaTeX als Subscript- Zeichen notwendig. Außerdem bewirkt das Umschalten, dass das System Leerzeichen innerhalb dieser Syntax ignoriert. Dadurch ist es möglich, komplexe Codepassagen durch zusätzliche Umbrüche und Leerzeichen lesbarer zu gestalten. Nutzer bewirken die Syntax-Änderung durch die Änderung der Category Codes (CatCodes). Zeichentypen wie Buchstaben oder Kommentarzeichen haben eine Kategorie, die über eine Zahl kodiert ist. Je nach CatCode wird das Zeichen anders interpretiert. Setzen Entwickler den CatCode für das Dollarzeichen (üblicherweise CatCode3 als Mathe-Modus-Umschalter) auf 11 (Buchstabe), ändert es seine Funktion, sodass $ ohne Maskierung im Text nutzbar ist.

Außer der Ignoranz gegenüber Leerzeichen ändert \ExplSyntaxOn die Bedeutung des Unterstrichs in der Form, dass sie innerhalb von Makronamen vorkommen dürfen. Der Doppelpunkt erhält ebenfalls eine neue Rolle und dient dazu, Argumentspezifikationen vom Namen zu trennen. LaTeX3 ermöglicht über diese Syntax, ein Makro mit unterschiedlichen Expansionsstadien für dessen Argumente zu deklarieren. Dies ermöglicht universellere Handhabung der Funktionen.