Typst 0.15 ist Mitte Juni 2026 erschienen und bringt das Open-Source-Textsystem in puncto Programmierbarkeit deutlich nach vorn. Wer Dokumente nicht nur statisch setzen, sondern mit Hilfe einer Skriptsprache dynamisch erzeugen möchte, profitiert von neuen Funktionen, flexiblen Export-Strategien und einem ausgereifteren Umgang mit Daten – vom einfachen Skript bis zur komplexen Automatisierung.
Was ist neu in Typst 0.15?
Wie funktioniert Typsts Skriptsprache?
Typst ist ein Open-Source-Textsystem, das eine eigene Skriptsprache mitbringt. Sie erlaubt es, Dokumente programmatisch zu erzeugen, zu verändern und an verschiedene Ausgabeformate anzupassen. Mit Version 0.15 sind diese Fähigkeiten noch einmal deutlich gewachsen.
Die mitgelieferte Skriptsprache ist kein Beiwerk, sondern ein zentraler Bestandteil des Systems. Mit Version 0.15 lassen sich Funktionen noch sauberer definieren, Exportziele gezielt abfragen und Dokumentstrukturen zur Laufzeit abfragen und manipulieren. Das eröffnet neue Wege, um aus einer einzigen Quelle unterschiedliche Ausgaben zu erzeugen – etwa ein PDF für den Druck und eine HTML-Fassung für das Web.
Funktionen mit #let definieren
Die #let-Syntax ist das Herzstück der typsteigenen Programmierung. Sie legt Variablen und Funktionen an, wobei geschweifte Klammern den Funktionskörper kennzeichnen. Das folgende Beispiel definiert eine Funktion, die ein Bild entgegennimmt und es in einer Inline-Box platziert:
#let inline_image(img) = {
box(height: 8em, place(top+left, dx: 5pt, square(
image(img, height:100%, fit:“cover“)
)))
}
Auffällig ist die Zeilensyntax: Jede Anweisung endet mit einem Zeilenumbruch, nicht mit einem Semikolon. Das erinnert an Python und macht den Code deutlich lesbarer als etwa JavaScript. Gerade beim Definieren von Funktionen, die Layout-Elemente manipulieren, zeigt sich, wie eng Skript und Textsatz in Typst verzahnt sind.
Export-Ziele gezielt ansteuern
Typst ist primär für den Export als PDF oder Bild optimiert. Einige Formatierungen wie Kopf- und Fußzeilen lassen sich im HTML-Modus nicht sinnvoll abbilden, da die Auszeichnungssprache kein Konzept für Seitenränder kennt. Mit der Funktion target() lässt sich das aktuelle Exportziel aber zur Laufzeit ermitteln. Das folgende Listing zeigt eine Funktion sectionbreak(), die zwischen HTML und PDF unterscheidet:
#let sectionbreak(txt) = {
context(
if target()==“html“ {
html.elem(„div“, attrs:(class:“section-break“))[]
return
}
else {
divider()
})
}
Das Verhalten ist bewusst einfach gehalten:
- Für HTML wird ein leeres div-Tag mit einer CSS-Klasse erzeugt, das sich über ein Stylesheet gestalten lässt.
- In allen anderen Ausgabeformaten kommt die eingebaute divider()-Funktion zum Einsatz, die einen typografischen Trenner setzt.
So lässt sich ein Manuskript mit wenig Aufwand für unterschiedliche Kanäle aufbereiten.
Dokumentstrukturen mit query() abfragen
Ein weiterer Kernbestandteil der neuen Programmierfunktionen ist die query()-Funktion. Sie durchsucht das Dokumentmodell nach Elementen, die bestimmten Kriterien entsprechen. Die Syntax ähnelt der Elementabfrage in JavaScript:
query(
heading.where(
level: 1,
)
)
Dieser Code liefert alle Überschriften der ersten Ebene zurück. Darauf aufbauend lassen sich Inhalte auslesen, verändern oder in andere Strukturen überführen – etwa um automatisch ein Inhaltsverzeichnis zu erzeugen oder Metadaten zu extrahieren. Die Möglichkeit, das Dokument zur Laufzeit zu inspizieren, macht Typst zu einer Art Framework für dokumentzentrierte Anwendungen.
Pakete mit wenigen Zeilen einbinden
Für Wiederverwendbarkeit sorgt ein eigener Package Manager. Er ist fest in Typst integriert und besitzt ein öffentliches Paketverzeichnis, das Package Directory. Anders als bei klassischen Systemen müssen Pakete nicht erst installiert werden. Eine einfache import-Anweisung genügt, um sie in das aktuelle Dokument zu laden. Das senkt die Einstiegshürde deutlich und sorgt dafür, dass Code modular bleibt.
Typst im Math-Modus
Für mathematische Formeln bietet Typst einen eigenen Math-Modus. Er orientiert sich an TeX, ist aber kein bloßes Abbild. Wer bereits mit LaTeX gearbeitet hat, findet sich schnell zurecht; die Syntax ist allerdings aufgeräumter und stärker an moderne Programmiersprachen angelehnt. Formeln werden mit Dollarzeichen begrenzt:
$ sum_(k=1)^n k = (n()) / 2 $
Der Ausdruck wird als klassische Summenformel dargestellt – optisch vergleichbar mit dem, was man aus LaTeX kennt, aber deutlich knapper geschrieben. Wer bestehende TeX-Inhalte übernehmen möchte, muss nicht alles per Hand übertragen. Mit dem MiTeX-Paket lassen sich einzelne Formeln oder auch ganze TeX-Dokumente inline nach Typst konvertieren. Das reduziert den Migrationsaufwand erheblich.
Automatisierung jenseits der eigenen Skriptsprache
So mächtig die eingebaute Skriptsprache inzwischen ist: Das Ökosystem von Typst ist noch jung und weist bewusste Limitationen auf. Etwa bei Import-Pfaden oder beim Zugriff auf externe Datenquellen. Um diese Hürden zu umgehen, lässt sich Typst in andere Programmiersprachen einbetten. Die erste Wahl ist Python mit der typst-Bibliothek.
Damit lassen sich komplexe Workflows orchestrieren: mehrere Textdateien einlesen, Daten außerhalb des Projektverzeichnisses abrufen oder Typst-Queries ausführen, um Dokumentinformationen weiterzuverarbeiten. Einige dieser Funktionen könnten in künftigen Versionen zu nativen Typst-Features werden. Dafür spricht die Entwicklung der Community: Inzwischen sind mehr als 1.000 Pakete im Package Directory verfügbar, und das Open-Source-Projekt wird regelmäßig aktualisiert.
Wer Typst im produktiven Einsatz plant, sollte die neuen Programmierfunktionen von Version 0.15 daher nicht nur als Spielerei betrachten. Sie bilden das Fundament für eine neue Generation dokumentenbasierter Workflows – mit einem Werkzeug, das die Grenzen zwischen Textsatz, Skripting und Datenverarbeitung zunehmend auflöst.