3 Punkte von GN⁺ 2024-07-21 | 2 Kommentare | Auf WhatsApp teilen
  • Typst ist ein markupbasiertes Satzsystem, das die Leistungsfähigkeit von LaTeX anstrebt, dabei aber leichter zu lernen und zu verwenden sein soll; dieses Repository enthält den Compiler und die CLI, die zum lokalen Kompilieren von Dokumenten benötigt werden
  • Es bietet integriertes Markup für grundlegende Formatierungsaufgaben, flexible Funktionen, integriertes Scripting, Formelsatz, Literaturverwaltung und hilfreiche Fehlermeldungen
  • Mit inkrementeller Kompilierung zielt Typst auf kurze Compile-Zeiten ab; typst watch überwacht Änderungen am Quelltext und kompiliert schneller neu, als jedes Mal von vorn zu beginnen
  • Die CLI kann über Release-Binaries, Paketmanager, cargo, Nix und Docker installiert werden; mit typst compile file.typ wird ein PDF erzeugt, zudem lassen sich benutzerdefinierte Font-Pfade angeben
  • Die Designprinzipien sind Einfachheit durch Konsistenz, Leistungsfähigkeit durch Kombinierbarkeit und Performance durch Inkrementalität; Ziel ist eine Geschwindigkeit, die eine sofortige Vorschau ermöglicht

Was Typst bietet

  • Typst ist ein markupbasiertes Satzsystem, das so leistungsfähig wie LaTeX sein soll, aber leichter zu lernen und zu verwenden ist
  • Die wichtigsten Funktionen sind:
    • Integriertes Markup für häufige Formatierungsaufgaben
    • Flexible Funktionen für alles Weitere
    • Ein eng integriertes Scripting-System
    • Formelsatz, Literaturverwaltung und mehr
    • Kurze Compile-Zeiten durch inkrementelle Kompilierung
    • Hilfreiche Fehlermeldungen, wenn etwas schiefläuft
  • Dieses Repository enthält den Typst-Compiler und die CLI, die zum lokalen Kompilieren von Typst-Dokumenten benötigt werden
  • Für eine bessere Schreibumgebung kann der kostenlose kollaborative Online-Editor verwendet werden

Syntax und Schreibmodell

  • Typst verwendet set rules wie #set, um Eigenschaften von Elementen festzulegen, etwa Seitengröße oder Nummerierung von Überschriften
    • Wenn die Höhe von page auf auto gesetzt wird, passt sich die Größe an den Inhalt an
    • Für vollständigere Kontrolle lässt sich das Erscheinungsbild eines Elements mit show rules komplett neu definieren
  • Überschriften werden mit der Syntax = Heading geschrieben
    • Ein einzelnes = erzeugt eine Überschrift oberster Ebene, == eine Unterüberschrift
    • Die vollständige Liste des leichtgewichtigen Markups ist in der syntax-Dokumentation zu finden
  • Formeln werden in Dollarzeichen eingeschlossen
    • Fügt man um den Formelinhalt zusätzliche Leerzeichen ein, kann er als eigener Block gesetzt werden
    • Bezeichner mit mehreren Buchstaben werden als Typst-Definitionen und Funktionen interpretiert, wenn sie nicht in Anführungszeichen stehen
    • Für Einträge wie floor oder sqrt ist kein Backslash nötig
    • phi.alt wendet den Modifikator alt auf phi an und wählt damit eine bestimmte Symbolvariante aus
  • Scripting erfolgt, indem nach einem Hash-Zeichen (#) ein Ausdruck in das Dokument geschrieben wird
    • Das Beispiel berechnet mit zwei Variablen und einer rekursiven Funktion die n-te Fibonacci-Zahl
    • Die Funktion table nimmt Zellen zeilenweise entgegen
    • Der Spread-Operator .. wird verwendet, um Array-Elemente als einzelne Argumente zu übergeben

Installation und Nutzung der CLI

  • Die Typst-CLI kann auf mehreren Wegen installiert werden
    • Quellcode und vorgebaute Binaries der neuesten Version sind auf der releases page verfügbar
    • Das Binary wird in einem Verzeichnis abgelegt, das in PATH enthalten ist, und kann anschließend mit typst update aktualisiert werden
    • Versionen aus Paketmanagern können hinter dem neuesten Release zurückliegen
  • Beispiele für die Installation über Paketmanager:
  • Wenn eine Rust-Toolchain vorhanden ist, ist die Installation mit cargo möglich
  • Nix und Docker werden ebenfalls unterstützt
    • Nix: nix-shell -p typst
    • Typst-Flake: nix run github:typst/typst-flake -- --version
    • Docker: docker run ghcr.io/typst/typst:latest --help
  • Der grundlegende Compile-Befehl lautet:
    • typst compile file.typ: erzeugt file.pdf im Arbeitsverzeichnis
    • typst compile path/to/source.typ path/to/output.pdf: erzeugt ein PDF im angegebenen Pfad
  • Die Überwachung von Änderungen wird mit typst watch file.typ gestartet
    • Typst nutzt inkrementelle Kompilierung und ist daher schneller, als jedes Mal von vorn zu kompilieren
  • Es gibt auch fontbezogene Befehle
    • typst compile --font-path path/to/fonts file.typ: gibt ein zusätzliches Suchverzeichnis für Fonts an
    • typst fonts --font-path path/to/fonts: gibt die Liste der Fonts aus, die im System und im angegebenen Verzeichnis gefunden wurden
    • TYPST_FONT_PATHS=path/to/fonts typst fonts: Umgebungsvariablen-Variante in Linux-Syntax
  • Weitere Unterbefehle und Optionen sind mit typst help zu finden, Hilfe zu einem bestimmten Befehl mit typst help watch

Editor-Umgebung und Community

  • Wer eine IDE-ähnliche integrierte Umgebung, Autovervollständigung und sofortige Vorschau benötigt, kann die kostenlose Typst-Web-App nutzen
  • Der von der Community entwickelte Language Server Tinymist ist in mehrere Editor-Erweiterungen integriert
  • Zentrale Community-Orte sind das Forum und der Discord server
    • Das Forum eignet sich für Fragen, Hilfe für andere Nutzer und das Teilen von Ergebnissen, die mit Typst erstellt wurden
    • Discord eignet sich eher für kurze Fragen, Diskussionen rund um Beiträge und Chats
  • Typst Universe ist ein Ort, an dem die Community Vorlagen und Pakete teilt
  • Eigene Pakete können im package repository eingereicht werden

Beiträge und Build

  • Bei Bugs kann ein Issue eröffnet werden; wer neue Funktionen oder Bugfixes implementieren möchte, folgt dem contribution guide
  • Für einen eigenen Build wird zunächst die aktuelle stabile Rust-Version installiert, anschließend werden folgende Befehle ausgeführt:
  • Das optimierte Binary wird unter target/release/ abgelegt
  • Auch das Teilen von Paketen mit der Community ist eine Möglichkeit beizutragen

Aussprache und Schreibweise des Namens

  • Die IPA-Aussprache von Typst ist /taɪpst/
  • "Ty" wird wie das Ty in Typesetting ausgesprochen, "pst" wie das pst in Hipster
  • Bei der Schreibweise von Typst wird der Name als Eigenname behandelt und mit großem T geschrieben

Designprinzipien

  • Typst ist um die drei Ziele Power, simplicity, performance herum entworfen
  • Ziel ist ein System, das an die Leistungsfähigkeit von LaTeX heranreicht, leicht zu lernen und zu verwenden ist und schnell genug für eine sofortige Vorschau arbeitet
  • Einfachheit durch Konsistenz

    • Wer in Typst weiß, wie man eine Sache erledigt, sollte dieses Wissen auf andere Aufgaben übertragen können
    • Wenn es mehrere Wege gibt, dasselbe zu tun, sollten sie auf unterschiedlichen Abstraktionsebenen liegen
    • = Introduction und #heading[Introduction] sind ein zulässiges Beispiel dafür, dass zwei Varianten dasselbe tun, weil Erstere syntaktischer Zucker für Letztere ist
  • Leistungsfähigkeit durch Kombinierbarkeit

    • Statt für alles Einstellungen vorzusehen, setzt Typst auf wenige Bausteine, die sich auf verschiedene Weise kombinieren lassen
    • Auch TeX ist ein kombinierbares Low-Level-System, doch Menschen verwenden stattdessen LaTeX
    • Bei LaTeX ist man in vielen Fällen auf Pakete in der Art von \usepackage{knob} angewiesen
  • Performance durch Inkrementalität

    • Alle Sprachfunktionen von Typst müssen zur inkrementellen Kompilierung passen
    • comemo übernimmt im Hintergrund einen großen Teil der Arbeit rund um inkrementelle Kompilierung

Sponsoring und Unterstützung

  • Als wichtige Unterstützung für die Open-Source-Arbeit an Typst werden folgende Punkte aufgeführt:
  • Diese Liste enthält nur Beiträge zur Open-Source-Arbeit, die 10.000 € überschritten haben oder voraussichtlich überschreiten werden

2 Kommentare

 
sebul 2025-02-28

Liest man LeTeX als „Latex“? Ich hätte gedacht, man spricht es als „Laytech“ aus.

 
GN⁺ 2024-07-21
Hacker-News-Meinungen
  • Typst war ziemlich großartig, und auch unsere Organisation ist sehr zufrieden damit.
    Wir müssen jede Nacht mehr als 1,5 Millionen PDFs erzeugen und haben dafür verschiedene Lösungen ausprobiert, darunter Puppeteer für HTML→PDF-Konvertierung, pdflatex und lualatex. Typst war um Größenordnungen schneller und zugleich ressourcenschonender.
    Die Developer Experience beim Erstellen von PDF-Templates in LaTeX war nicht gut, aber Typst-Templates waren ziemlich intuitiv.
    Über diesen Stack zur PDF-Erzeugung in großem Maßstab habe ich ausführlicher im Blog geschrieben: https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes

    • Ich habe noch nie von einem Fall gehört, in dem PDF-Dokumente mit dieser Geschwindigkeit erzeugt werden.
      Ich baue ein Puppeteer-basiertes Produkt für Massen-PDF-Reporting, und mit nächtlichen Jobs, Caching und Parallelisierung ist die Performance ganz ordentlich.
      https://www.cx-reports.com
    • Mich würde interessieren, ob ihr auch ReportLab ausprobiert habt.
      Als ich vor langer Zeit ein ähnliches Problem lösen musste, war es eine gute Lösung.
      Der Maßstab war zwar nicht so groß, aber trotzdem brauchbar.
    • Mich würde interessieren, ob eure Organisation dem Projekt etwas zurückgegeben oder es zumindest finanziell unterstützt hat.
    • Mich würde interessieren, welcher Use Case dahintersteckt, so viele PDFs zu erzeugen.
  • Ich habe viele Hausarbeiten mit Typst geschrieben, und akademisches Schreiben wird dadurch knapper, immersiver und, ich wage es zu sagen, unterhaltsamer.
    Durch den funktionalen Charakter der Typst-Syntax muss man sich nicht mit dem sprunghaften Verhalten herumschlagen, das man heutzutage in Microsoft Word und manchmal auch in Google Docs sieht.
    Mit einer lokalen IDE wie VSCode bekommt man nahezu alle gewünschten Funktionen.
    Verglichen mit LaTeX ist der Schriftsatz ganzer Dokumente deutlich intuitiver, aber wenn ich längere Herleitungen von Gleichungen über mehrere Seiten hinweg schreibe, fühlt sich LaTeX leichter zu tippen an.
    Die LaTeX-Syntax ist eher Markdown als einer funktionalen Programmiersprache ähnlich, sodass man beim Setzen von Formeln mit vielen Funktionen, Hoch- und Tiefstellungen weniger im Voraus nachdenken muss.

    • Aus Sicht von jemandem, der akademisch schreibt, wäre es schön, wenn Journals Typst unterstützen würden oder wenn sich Plugins bzw. Bridges zu LaTeX/Word etablieren würden.
      Im Moment würde ich eine wissenschaftliche Arbeit wohl nicht in Typst schreiben.
      Sobald sie die eigene Institution verlässt, muss man sie fast zwangsläufig konvertieren, und auch arXiv verlangt LaTeX-Quellcode.
      Die Tools rund um LaTeX sind heute ziemlich gut, und es gibt viele hilfreiche IDEs.
      Persönlich nutze ich Org-Mode in Emacs, der nach LaTeX kompiliert.
    • Zur Info: Typst hat bereits teilweise LaTeX-Unterstützung über das mitex-Paket.
      https://github.com/mitex-rs/mitex
    • Mich würde interessieren, welchen Vorteil es gegenüber Markdown hat, wenn man kaum Formeln braucht.
  • Es gibt mehrere frühere Diskussionen und verwandte Materialien: https://hn.algolia.com/?q=typst
    Vor 1 Jahr, 146 Kommentare: https://news.ycombinator.com/item?id=35250210
    Vor 8 Monaten, 34 Kommentare: https://news.ycombinator.com/item?id=38354422
    Vor 2 Jahren, 53 Kommentare: https://news.ycombinator.com/item?id=34423590
    Vor 2 Jahren, 30 Kommentare: https://news.ycombinator.com/item?id=32209794

  • Es überrascht mich, dass HTML-Ausgabe nicht von Anfang an eine Kernfunktion war, sondern derzeit noch in Arbeit ist.
    Dass LaTeX ein schwieriges Verhältnis zum Web hat, wirkt wie ein Punkt, den ein neu gestartetes Konkurrenzprojekt schon früh richtig hätte lösen wollen.
    [0] https://github.com/typst/typst/issues/721

    • Typst ist ein Tool, das mit LaTeX konkurrieren will.
      Beide stehen vor demselben Problem: Web und Papier funktionieren völlig unterschiedlich, und es gibt Konzepte, die sich nicht ineinander übersetzen lassen.
      Deshalb muss definiert werden, wie sich gesetzte Ergebnisse in einer anderen Umgebung natürlich einfügen.
      Wenn Typst von Anfang an HTML zum Ziel gehabt hätte, wäre die Entwicklung viel einfacher gewesen; dann wäre es aber kaum mehr gewesen als ein übermäßig komplexer Site-Generator.
      Dass zuerst PDF anvisiert wurde, zeigt meiner Ansicht nach, dass es tatsächlich mit LaTeX konkurrieren soll.
    • Die HTML-Ausgabe von LaTeX ist heute ziemlich ordentlich geworden, aber das ist das Ergebnis heroischer Anstrengungen vieler Menschen für ein System, das ursprünglich nie dafür gedacht war.
      Wenn man ein neues Markup-System startet und keinen Plan hat, barrierefreie Dokumente zu erstellen, halte ich das für eine sehr schlechte Entscheidung.
      Bis Typst barrierefreie Dokumente erzeugen kann, werde ich es nicht verwenden.
    • Das ist eines der großen Probleme.
      Ich mag PDFs nicht.
    • Ich habe gehört, dass pandoc für diesen Zweck ziemlich gut funktioniert.
    • Dir ist vermutlich klar, dass TeX mehrere Jahre vor dem Web erschienen ist.
  • Ich warte darauf, dass LaTeX verschwindet und Typst an seine Stelle tritt.
    Die Nutzungserfahrung ist völlig anders, und die Ergebnisse sind sehr beeindruckend.
    Bisher habe ich TeX-Dateien mit Jinja2-Templates erzeugt, aber Typst kann JSON über die Kommandozeile entgegennehmen, ist einfach zu verwenden und leistungsfähig genug, sodass ich den Python-Schritt komplett entfernen kann.
    Ganz zu schweigen davon, dass die Kompilierzeit im Millisekundenbereich liegt.

    • Das Scripting ist sehr gut.
      Anfangs habe ich, weil ich an die Arbeitsweise mit LaTeX gewöhnt war, versucht, Typst-Templates mit Go-Templates zu erzeugen.
      Dann habe ich erfreut festgestellt, dass Typst in seiner eigenen Scripting-Engine JSON direkt und einfach verwenden kann.
  • 1999 arbeitete ich als Praktikant und war damit betraut, ein Standarddokument für die VoIP-Telefonie-Standardarbeitsgruppe der TIA zu schreiben.
    Die Standardisierungsorganisation hatte eine Word-Vorlage, die alle verwendeten, aber als Ingenieurstudent hatte ich schon eine Weile LaTeX benutzt und mochte es. Also dachte ich: „Am Ende ist die Ausgabe sowieso PDF, und die Formatierung wäre auch besser – warum also nicht LaTeX verwenden?“
    Tatsächlich sah die LaTeX-Ausgabe besser aus, und mein Chef mochte das Ergebnis, ohne überhaupt zu wissen, dass ich kein Word verwendet hatte.
    Auch die Mitglieder der Arbeitsgruppe reagierten positiv; die Stimmung war ungefähr: „Der Junge hat wirklich Talent.“
    Für ein Startup war es enorm wichtig für die Zukunft des Unternehmens, vielleicht sogar für sein Überleben, bei den in der Arbeitsgruppe vertretenen Großunternehmen einen guten Eindruck zu hinterlassen.
    Eines Tages sagte mein Chef jedoch: „Kannst du dieses Word-Dokument an einen hohen Herrn bei einem Großunternehmen schicken, das uns vielleicht übernimmt? Er möchte es als neue Dokumentvorlage verwenden.“ Da bekam ich dieses absackende Gefühl, wie damals mit vier Jahren, als ich mit einem Freund aus Experimentierfreude in den Kleiderschrank gepinkelt hatte und meine Mutter uns erwischte.
    Am Ende engagierte ich einen Freund, der es das ganze Wochenende über mühsam in Word neu erstellte, und mein Chef bekam das Dokument.
    18 Monate später wurde das Unternehmen für 100 Millionen Dollar übernommen.
    Wie auch immer: LaTeX sieht immer noch 1000-mal besser aus als Word.

  • Das wirkt wie ein Konkurrent zu Diensten wie Overleaf oder CodiMD.
    Es ist zwar wieder eine andere Syntax, aber pandoc scheint sie zu unterstützen.
    In letzter Zeit programmiere ich viel in R und nutze daher immer häufiger Quarto, das insbesondere recht gute Ausgaben wie HTML erzeugt.
    Aber auch solche Tools lösen zwei in der Wissenschaft wichtige Probleme nicht: Reviewern einen guten Diff zu liefern und Dokumente leicht mit nichttechnischen Mitwirkenden teilen und kommentieren zu können.
    Deshalb wird Word, zumindest beim wissenschaftlichen Schreiben in meinem Bereich, wohl noch viele Jahre schwer zu ersetzen sein.
    [1] https://github.com/overleaf/overleaf
    [2] https://github.com/hackmdio/codimd
    [3] https://pandoc.org/typst-property-output.html
    [4] https://quarto.org/

    • Ich nutze Quarto häufig.
      Beim Einsatz von GT wirkte die Typst-PDF-Ausgabe etwas weniger ausgereift als LaTeX-PDF.
      Ich hoffe, das wird behoben.
  • Was mich bei Typst im Vergleich zu LaTeX am meisten stört, ist, dass es mit grundlegenden fortgeschrittenen Typografie-Funktionen nicht gut umgeht.
    Zum Beispiel fehlen im Mathematikmodus Dinge wie die Behandlung von Abstandsarten (mathop, mathbin, mathrel usw.) oder Trennzeichengrößen (big, bigg usw.).

  • Es sieht wirklich gut aus, und ich werde es ausprobieren.
    Allerdings denke ich immer wieder daran:
    Meine geschätzte Wahrscheinlichkeit, dass LaTeX auch in 15 Jahren noch kostenlos und gepflegt sein wird: 99,9999 %
    Meine geschätzte Wahrscheinlichkeit, dass ein anderes neues Tool auch in 15 Jahren noch kostenlos und gepflegt sein wird: 5 %

    • Das ist der Fluch eines früh erschienenen und ausreichend guten Systems.
      Bei bash und einigen anderen Dingen ist es genauso.
      Es gibt viele bessere Alternativen, aber die Schmerzpunkte sind nicht groß genug, um sie zu ersetzen.
  • Ich mag Typst.
    Besonders gut ist es beim Umgang mit programmatisch erzeugten Eingaben, und das Flag --input kann JSON entgegennehmen.
    Innerhalb der Datei kann man JSON mit der speziellen Funktion json.decode() leicht einlesen.
    Damit lassen sich sehr einfach stabile Ergebnisse erzeugen, deshalb bin ich auch in meinem Projekt von LaTeX auf Typst umgestiegen.
    [0] https://typst.app/docs/reference/foundations/sys/
    [1] https://resgen.app