Typst ist ein quelloffenes programmierbares Textsatzsystem, mit dem unter anderem wissenschaftliche Texte geschrieben und formatiert werden können.
Der Typst-Compiler ist in Rust geschrieben. Er liest den Quellcode ein, der die ebenfalls Typst genannte Programmiersprache nutzt (Dateiendung .typ), und gibt dann das fertige Dokument im gewünschten Format (beispielsweise PDF, SVG oder HTML) aus. Zusätzlich lassen sich quelloffene Erweiterungspakete vom Typst Universe nutzen, die die Funktionalität des Compilers erweitern.
Typst wird von den Erfindern Laurenz Mädje und Martin Haug seit 2019 und der gleichnamigen Typst GmbH seit 2023 entwickelt. Die Typst GmbH betreibt einen kollaborativen, cloudbasierten Web-Editor, vergleichbar mit Overleaf für TeX, dessen erweiterte Funktionen kostenpflichtig sind.
Die Entwickler zielen darauf ab, Typst als modernen Nachfolger für TeX bzw. LaTeX zu etablieren. Im Gegensatz zu diesen möchten sie eine einfachere Syntax, leichter verständliche Fehlermeldungen, sowie schnellere und inkrementelle Kompilation bieten.
Geschichte Typst wurde ab 2019 von den deutschen Entwicklern Laurenz Mädje und Martin Haug geschrieben. Es war Inhalt ihrer Masterarbeiten an der TU Berlin, die 2022 abgegeben wurden. Mitte 2022 äußerte sich Mädje erstmals öffentlich zu Typst, unter anderem auf seinem Blog. Ab Dezember 2022 war Typst im geschlossenen Betatest verfügbar, für den sich Interessenten seit spätestens Juli 2022 anmelden konnten.
Am 18. Januar 2023 gründeten Haug und Mädje die Typst GmbH mit Sitz in Berlin.Amtsgericht Charlottenburg (Berlin), Handelsregisterbekanntmachungen vom 28.04.2023, Eintragung betreffend die Typst GmbH, HRB 251907 B, Rechtsform: GmbH, Eintragungsdatum: 24.04.2023. Geschäftsführer 1. Haug, Geschäftsführer 2. Mädje Wenig später, am 21. März, stellten sie den Compiler unter einer Open-Source-Lizenz öffentlich zur Verfügung. Das Projekt wurde außerdem auf der TUG im Juli 2023 vorgestellt.
Das Hauptprodukt der Firma ist die proprietäre „Typst app“, eine Web-IDE für Typst, die unter anderem eine Livevorschau des aktuellen Dokuments und einen Cloudspeicher für eigene Dokumente zur Verfügung stellt. Die grundlegende Nutzung der IDE ist kostenlos, weitergehende Funktionen, z. B. zur Zusammenarbeit in größeren Organisationen, sind kostenpflichtig.
Bis Juli 2026 wuchs die Typst GmbH laut eigenen Angaben auf fünf Mitarbeiter, die unter anderem den Compiler entwickeln. Stand 2026 gibt es noch keine Version 1.0 des Typst-Compilers, dennoch gilt die Software als stabil und inkompatible Änderungen an der Sprache und den APIs sind selten.
Funktionsumfang So wie TeX und seine Derivate ist Typst kein WYSIWYG-System, d. h. der Typst-Code muss zunächst in ein Anzeigeformat wie PDF kompiliert werden. Allerdings kompiliert Typst meist so schnell, dass die Ausgabe des Compilers während dem Tippen in Echtzeit angezeigt werden kann, anders als bei LaTeX, wo selbst einfache Dokumente mehrere Sekunden zum Kompilieren brauchen.
Neben dem Kompilieren von einfachem Text ist es mit Typst auch möglich, diesen zu formatieren und den Spiegelsatz anzupassen. Dabei existiert eine Unterscheidung zwischen Inhalt und dessen Formatierung. Beispielsweise definiert der Typst-Code Hallo, *Wikipedia*! lediglich den entsprechenden Textinhalt sowie die starke Hervorhebung des Worts Wikipedia. Wie der Text genau auf der Seite dargestellt wird, beispielsweise Position oder Schriftart, oder die Darstellung der starken Hervorhebung, beispielsweise deren Schriftstärke oder -schnitt, wird hier nicht definiert. Diese Aufgabe fällt Formatierungsausdrücken wie show strong: set text(weight: 900) zu. Dieser Ausdruck definiert beispielsweise eine Schriftstärke von 900 für stark hervorgehobenen Text.
Typst-Quellcode operiert in zwei grundlegend verschiedenen Modi, dem Code-Modus und dem Inhaltsmodus. Der standardmäßig aktive Inhaltsmodus erlaubt die Eingabe von Dokumentinhalt. Um zusätzliche Funktionalität aufzurufen, beispielsweise um die Formatierung zu verändern, ist der Wechsel in den Code-Modus erforderlich. Für einzelne Ausdrücke kann dies mit dem Sonderzeichen # geschehen, beispielsweise #underline([Unterstrichener Text]) oder #let five = 5. Um im Code-Modus wiederum Inhalt einzufügen, wird dieser in eckigen Klammern [] eingeschlossen. Diese Inhaltsblöcke (content) gehören zu den grundlegenden Datentypen in Typst, neben üblichen Datentypen wie Zeichenketten oder Zahlen.
Vergleich mit LaTeX Die allermeisten Funktionen von LaTeX sind in Typst in vergleichbarer Form zu finden. Dazu gehören auch z. B. Papierformatdefinitionen und die Verwaltung von Literaturverzeichnissen (mit BibTeX kompatibel). Typst verfügt so wie TeX über einen speziellen Mathematik-Eingabemodus (math mode), mit dem Formeln gesetzt werden können. Obwohl dieser Modus ebenfalls mit Dollarzeichen ($) begonnen wird, unterscheidet sich seine Syntax wesentlich von der TeX-Syntax: TypstLaTeXUngefähres Ergebnis$a, b in { 1/2, sqrt(4 a b) }, (6 + 20)/(5) $$a, b \in \left\{ \frac{1}{2}, \sqrt{4 a b} \right\}, \frac{6 + 20}{5}$Die quelloffenen Erweiterungspakete erlauben, ähnlich wie bei LaTeX, die Nutzung diverser zusätzlicher Funktionalität. Es gibt beispielsweise Pakete zum Zeichnen von Grafiken und Diagrammen (vergleichbar mit PGF/TikZ), zum Erstellen von Präsentationsfolien, für ostasiatischen Schriftsatz, musikalische Noten, Pseudocode oder SI-Größen. Pakete können entweder aus einem lokalen Verzeichnis oder aus dem offiziellen Paketrepositorium, Typst Universe, eingebunden werden, aktuell (Version 0.15) allerdings nicht aus beliebigen Onlinequellen, wie z. B. alternativen Paketverzeichnissen.
Beispiele
Auf der linken Seite ist ein Beispiel als Quelltext dargestellt, das mit einem beliebigen Texteditor erstellt werden kann. Rechts ist die Ausgabe dieses Beispiels dargestellt.
Quelltext Ausgabe// Papierformat #set page(paper: "a4") // Nummerierungssystem für Überschriften #set heading(numbering: "1.") // Deutscher Text, u.a. für korrekten Zeilenumbruch und Ligaturen #set text(lang: "de")
// Formatierung für Links, sodass diese blau, leicht fett, und unterstrichen erscheinen #show link: set text(fill: blue, weight: 300) #show link: underline
// Überschrift mit Anker = Typst-Grundlagen <basics>
#show strong: set text(weight: 900)
// Folgender Text ist eine adaptierte Übersetzung des Standard-Typst-Beispieltextes Typst ist eine _Markupsprache_. Mit ihr kann nicht nur der Inhalt, sondern auch Struktur und Formatierung des Dokuments festgelegt werden. Viele verbreitete Formatierungsfunktionen werden direkt unterstützt:
- *Starke Texthervorhebung* (meist fett), oder _schwache Hervorhebung_ (meist kursiv) - Verweis auf @basics - Mathematische Ausdrücke: $a, b in { 1/2, sqrt(4 a b) }$ und $e^(i pi) = -1$ - `Computercode` + Nummerierte Listen
// Überschrift der zweiten Ebene == Wikipedia // Unicode, hier z.B. deutsche Umlaute und IPA, wird nativ unterstützt Wikipedia [ˌvɪkiˈpeːdia] ist ein gemeinnütziges Projekt zur Erstellung einer freien Enzyklopädie auf Basis des sogenannten Wiki-Prinzips und der freien Wiki-Software-Plattform // Eingebaute Linkfunktion, vgl. \href in LaTeX #link("https://mediawiki.org")[MediaWiki].
= Typst-Programmierung
Mit der Programmiersprache _Typst_ lassen sich beliebig komplexe Seitenelemente selbst bauen:
// Importiere eine QR-Code-Bibliothek #import "@preview/tiaoma:0.3.0" // Definiere einen neuen Befehl, der auf dem eingebauten grid-Befehl basiert. // Der Befehl erhält zwei Argumente: die Link-URI und den Text neben dem QR-Code. // Üblicherweise nimmt man so eine Definition zu Dokumentbeginn vor. #let next-step(url, body) = grid( // Einstellungen des Gitters, hier zwei Spalten mit einem Abstand von 1 Em columns: 2, gutter: 1em, // Erste Spalte: QR-Code-Befehl aus der oben importierten Bibliothek tiaoma.qrcode(url, width: 3em), // Zweite Spalte: Ausdruck, der in {} eingeschlossen werden muss
// Modifikation des Formats für starke Hervorhebung, sodass sie durch den Link ergänzt werden show strong: link.with(url) body
)
// Abruf des neuen Befehls. Das zweite Argument is ein Textblock, der in [] eingeschlossen werden muss #next-step("https://wikipedia.org")[ // Der hervorgehobene Text wird vom Befehl oben automatisch in einen Link auf wikipedia.org umgewandelt *Besuche* die Wikipedia! ]
#next-step("https://de.wikipedia.org/w/Typst")[ Lies *mehr* zu Typst. ] frameless|hochkant=1.8|Ausgabe eines einfachen deutschen Typst-Dokuments #set page(paper: "a4") #set text(lang: "de") #set par(justify: true)
= Fibonacci-Folge
Die Fibonacci-Folge ist die unendliche Folge natürlicher Zahlen, die mit zweimal der Zahl 1 beginnt und bei der jede weitere Zahl die Summe der beiden ihr vorangehenden Zahlen ist. @wikipedia
// Kommentare werden durch einen doppelten Backslah eingeleitet dargestellt $ F_n = floor(1 / sqrt(5) phi.alt^n), quad phi.alt = (1 + sqrt(5)) / 2 $
#let count = 14 #let nums = range(1, count + 1) #let fib(n) = ( if n <= 2 { 1 } else { fib(n - 1) + fib(n - 2) } )
Die ersten #count Zahlen der Folge sind:
#align(center, table( columns: count, ..nums.map(n => $F_#n$), ..nums.map(n => str(fib(n))), ))
_Das Beispiel wurde teilweise aus dem Github-Repository übernommen._ @github
#bibliography("quellen.bib") frameless|hochkant=1.8|Beispiel eines Typst-Dokuments Einzelnachweise
Kategorie:Freie Software Kategorie:Webanwendung Kategorie:Unternehmen (Berlin)