Typst bei NETWAYS: Warum wir es für unsere Schulungen einsetzen

5 Juni, 2025

Markus Opolka
Markus Opolka
Senior Consultant

Markus war nach seiner Ausbildung als Fachinformatiker mehrere Jahre als Systemadministrator tätig und hat währenddessen ein Master-Studium Linguistik an der FAU absolviert. Seit 2022 ist er bei NETWAYS als Consultant tätig. Hier kümmert er sich um die Themen Container, Kubernetes, Puppet und Ansible. Privat findet man ihn auf dem Fahrrad, dem Sofa oder auf GitHub.

von | Juni 5, 2025

Von Lorenz Kästle und Markus Opolka

Wir bei NETWAYS bieten verschiedene Schulungen zu Open Source Software an. Zu jeder Schulung bekommen die Teilnehmer Unterlagen mit weiterführenden Informationen, Übungen und Lösungen. Außerdem braucht natürlich es auch eine Präsentation, um die Inhalte zu strukturieren und zu vermitteln. In diesem Artikel wollen wir zeigen, wie wir unsere Dokumente mit Typst modernisiert haben.

Als Erstes eine kleine Übersicht zu unseren Anforderungen.

Wir möchten, dass Präsentation, Handout, Übungen und Lösungen aus derselben Quelle kommen, das verhindert, dass man bei Änderungen verschiedene Informationsstände in verschiedenen Dokumenten hat. Manuelle Synchronisation wäre viel Arbeitsaufwand und außerdem fehleranfällig. Zudem haben diese Dokumente unterschiedliche Formfaktoren. Eine Präsentation, die hauptsächlich Stichpunkte liefert und einen Anker bildet, um das Gesagte einzuordnen, ist eine ganz andere Form von Dokument als ein Handout, das alleinstehend funktionieren muss. Zusätzlich werden Schulungen von verschiedenen Personen gehalten, was auch hier erfordert, dass die Stände synchron sind und dann darf das Generieren von Dokumenten auch nicht von dem Softwarestand einer bestimmten Maschine abhängig sein um zu verhindern, dass die generierten Dokumente unterschiedlich sind. In Summe sind diese Anforderungen nicht leicht aufzulösen.

Warum Typst?

Unsere bisherige Lösung war weitestgehend funktional, kam jedoch mit einigen Einschränkungen, die zunehmend weniger tragbar waren. Diese Lösung basierte auf Markdown und HTML, was für Präsentationen gut funktioniert, aber beim Generieren von Handouts als PDF immer Probleme gemacht hat. Der Schriftsatz war nicht optimal, das generierte Inhaltsverzeichnis war nicht sinnvoll und die Möglichkeiten für Design waren eingeschränkt.

Also haben wir uns auf die Suche nach Alternativen gemacht. Den meisten fehlte die Möglichkeit gleichzeitig Präsentation und Handouts zu generieren. LaTeX war natürlich auch im Gespräch, aber schied auch aus diversen Nutzbarkeitsgründen aus. Letztendlich haben wir uns für Typst entschieden. Typst ist ein Textsatzsystem, was den Leistungsumfang von LaTeX liefert aber einfacher zu lernen und nutzen ist. Typst ist eine freie Open Source Software unter Apache-2.0 Lizenz, entwickelt von der Typst GmbH.

Grundsätzlich ist eine Anforderung, dass die verschiedenen Schulungen so homogen wie möglich sind. Zum einen im Design (im Sinne einer Corporate Identity), aber auch was die Bearbeitung angeht. Beides soll für die Leser und Autoren so einfach wie möglich gestaltet sein. Deshalb war schnell klar, dass es eine zentrale Stelle für bestimmte Eigenschaften und Funktionen geben muss, in Programmiersprachen sind das Bibliotheken, in Typst: Module.

Das NETWAYS Typst Modul

Für jede Schulung werden drei Artefakte erstellt: Die Präsentation, das Handout als Textform der Inhalte und als Nachschlagewerk und ein „Lösungsbuch“, das die Bearbeitung der Aufgaben schrittweise begleitet. Diese Artefakte teilen manche Inhalte oder zumindest die Struktur, beispielsweise muss die Nummerierung der Aufgaben zwischen allen Artefakten gleich sein.

Die Idee ist nun, dass es eine Typst Code-Basis gibt, aus der alle Artefakte kompiliert werden. Das wurde mit dem --input-Parameters umgesetzt, um den Artefakttyp während des Kompilierens zu setzen. In unserem Typst-Modul können wir so Inhalte und Formatierung steuern. Ein typst compile --input mode=slide training.typ rendert nun die Präsentation mit Seitengröße "presentation-16-9", --input mode=handout dagegen Handouts mit Größe "A4". Für die Formatierung der Präsentation nutzen wir das Typst Paket polylux, für die Handouts die Typst Standardbibliothek.

Außerdem haben wir Funktionen, die den Inhalten eine semantische Kategorie geben. So ist etwa der Kernbaustein die Funktion slide(title: [], slide-only: [], handout-only: [], common: [], notes: []), die Inhalte für eine Folie in der Präsentation bündelt, wobei der content des common-Parameters gleichermaßen in der Präsentation wie im Handout landet, slide-only bzw. handout-only fügen nur dem spezifischen Typ etwas hinzu. Wir können also zwischen Präsentation und Handout unterscheiden, was wir dann beim Rendern nutzen können:

#slide(
    title: "Example",
    common: [
        I am a common element.
    ],
    slide-only: [
        Just on the slides please.
    ],
    handout-only: [
        Only for the handout.
    ],
)

Da alles in Typst text-basiert ist, integriert es einfach in Git. Jede Schulung wird also in einem Git Projekt verwaltet, dadurch kann unser Modul einfach mittels git submodule eingebunden werden. Das erfordert Arbeit in jedem Projekt für Updates, aber es hält die einzeln Projekte stabil und größtenteils in sich selbst abgeschlossen. Die statisch kompilierte Rust-Binary von Typst hat sich außerdem einfach in unsere automatischen CI Pipelines integrieren lassen.

Ein etwas spezieller Punkt sind tatsächlich die Werkzeuge, die wir zur Bearbeitung der Schulungen verwenden. Es ist nicht unbedingt für alle leicht nachvollziehbar, aber unter IT-Menschen gibt sehr starke Meinungen was die Auswahl des richtigen Werkzeugs zur Textbearbeitung angeht. Der Ansatz von Typst hier guten alten „Plaintext“ als Input zu verwenden und nicht ein proprietäres Datenformat einzusetzen, was nur mit speziellen Werkzeugen erstellt werden kann, war für uns damit ein notwendiges Kriterium. Dabei stellte sich Typst als sehr angenehme Umgebung heraus, der typst watch-Modus bietet schnelles Feedback zu den aktuellen Änderungen und mit dem tinymist-LSP sind auch in den gängigen Editoren schnell schöne Integrationen möglich. An dieser Stelle ein Hoch auf gute Schnittstellen.

Fazit

In Summe ist der Wechsel zu Typst ein sehr angenehmer gewesen, was ein erhöhtes Maß an Flexibilität und Qualität zu einem vertretbaren Anstieg an Komplexität geliefert hat. Wir hoffen, dass diese Lösung zukunftsfähig ist und im Moment sind wir optimistisch. Auf jeden Fall danken wir dem Typst-Team für die ganze Arbeit, für eine gute Dokumentation und auch speziell für die Kleinigkeiten, die ein gutes technisches Konstrukt zu einem angenehmen Produkt machen.

Events

Professional Services

Web Services

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Wie hat Dir unser Artikel gefallen?