image: titelbild.png new_until: 2026-12-13

Do­ku­mente schreiben mit Typst

In diesem Tutorial schreibst du eine kurze schriftliche Ausarbeitung mit Typst. Du beschreibst dabei in einer Textdatei, was etwas ist (eine Überschrift, eine Formel, eine Tabelle), und Typst macht daraus ein sauber gesetztes PDF. Um Schriftgrößen, Abstände, Nummerierungen und das Inhaltsverzeichnis kümmert sich Typst.

Typst gibt es seit 2023. Es wur­de von Laurenz Mädje und Martin Haug in Berlin ent­wick­elt und ist freie Software. Die Idee dahinter ist dieselbe wie bei LaTeX, das seit Jahr­zehn­ten an Universitäten ver­wen­det wird: Du schreibst den Inhalt und legst einmal fest, wie das Do­ku­ment aussehen soll. Typst ist dabei deutlich einfacher zu lernen, und du siehst jede Änderung sofort.

Am Ende dieses Tutorials hast du dieses Do­ku­ment geschrieben:

Drei Seiten einer Ausarbeitung über Bubblesort mit Titel, Inhaltsverzeichnis, Abbildung, Formel, Tabelle und Quelltext.

Du brauchst dafür keine Vorkenntnisse. Der Text der Ausarbeitung steht in diesem Tutorial, du kannst ihn abtippen oder kopieren. Wichtig ist, was um den Text herum passiert.

1. Vorbereitung

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Work­space sollte jetzt ungefähr so aussehen:

Ordner anlegen

Deine Ausarbeitung bekommt einen eigenen Ordner. Klicke auf »Open Folder«, gib hinter /workspace/ den Namen ausarbeitung ein und bestätige mit Enter. Weil es den Ordner noch nicht gibt, fragt Visual Studio Code, ob er angelegt werden soll:

Bestätige die Rückfrage mit Enter.

Datei anlegen

Lege jetzt im Explorer eine neue Datei an: Klicke auf das Symbol »New File…« neben dem Ordnernamen und nenne die Datei ausarbeitung.typ. An der Endung .typ er­kennt Visual Studio Code, dass es sich um ein Typst-Do­ku­ment handelt.

Schreibe den folgenden Text in die Datei und speichere sie mit StrgS:

= Einleitung

Sortieren gehört zu den häufigsten Aufgaben, die ein Computer erledigt. Ob Namen in einer Kontaktliste, Preise in einem Onlineshop oder Punktzahlen in einem Spiel: Fast immer sollen Daten in einer bestimmten Reihenfolge erscheinen.

Bubblesort ist eines der einfachsten Sortierverfahren. In dieser Ausarbeitung beschreibe ich, wie das Verfahren funktioniert und wie viel Arbeit es dem Computer macht.

Zwei Dinge kannst du dir hier schon merken:

  • Eine Zeile, die mit = beginnt, ist eine Überschrift.
  • Eine Leerzeile beginnt einen neuen Absatz. Ein einfacher Zeilenumbruch im Quelltext ändert dagegen nichts.

Vor­schau öffnen

Bis jetzt siehst du nur den Quelltext. Öffne die Vor­schau mit StrgK und dann V, oder klicke auf »Preview« in der kleinen Zeile über deiner ersten Textzeile. Neben deinem Quelltext erscheint das fertige Do­ku­ment:

Links der Typst-Quelltext, rechts die Vor­schau des gesetzten Do­ku­ments.

Die Vor­schau aktualisiert sich, während du tippst. Probiere es aus: Ändere ein Wort im Text und beobachte die rechte Seite.

Wenn du in der Vor­schau auf eine Textstelle klickst, springt der Cursor im Quelltext an die passende Stelle. So findest du in einem langen Do­ku­ment schnell die Zeile, die du ändern möch­test.

2. Text gliedern und hervorheben

Jetzt bekommt die Ausarbeitung ihren zweiten Abschnitt. Füge den folgenden Text am Ende deiner Datei an:

= Funktionsweise

Bubblesort vergleicht immer zwei *benachbarte* Elemente. Stehen sie in der falschen Reihenfolge, werden sie _vertauscht_.

Ein Durchgang läuft so ab:

+ Beginne beim ersten Element.
+ Vergleiche es mit seinem rechten Nachbarn.
+ Ist das linke Element größer, vertausche die beiden.
+ Gehe ein Element weiter und wiederhole das, bis das Ende erreicht ist.

Nach dem ersten Durchgang steht das größte Element ganz rechts. Große Elemente steigen also nach und nach auf wie Luftblasen im Wasser, daher der Name. Das Verfahren hat zwei wichtige Eigenschaften:

- Es ist leicht zu verstehen und zu programmieren.
- Es ist bei langen Listen sehr langsam.

Darin stecken vier neue Dinge:

  • *benachbarte*: Text zwischen zwei Sternchen wird fett gesetzt.
  • _vertauscht_: Text zwischen zwei Unterstrichen wird kursiv gesetzt.
  • Zeilen, die mit + beginnen, ergeben eine nummerierte Liste. Die Nummern vergibt Typst.
  • Zeilen, die mit - beginnen, ergeben eine Aufzählung.

So sehen die beiden Abschnitte in der Vor­schau aus:

Die Abschnitte Einleitung und Funktionsweise mit fettem und kursivem Text, einer nummerierten Liste und einer Aufzählung.

Für Unterabschnitte verwendest du mehrere Gleichheitszeichen: == Unterabschnitt und === Unter-Unterabschnitt.

3. Das Do­ku­ment einrichten

Das Do­ku­ment sieht schon or­dent­lich aus, aber es ist noch nicht auf Deutsch eingestellt, die Zeilen flattern am rechten Rand und die Überschriften haben keine Nummern. All das legst du einmal am Anfang der Datei fest. Füge diese vier Zeilen ganz oben ein, vor der ersten Überschrift:

#set text(lang: "de", size: 11pt)
#set page(paper: "a4", margin: 2.5cm, numbering: "1")
#set par(justify: true)
#set heading(numbering: "1.1")

Bisher hast du nur Text geschrieben. Mit dem Zeichen # wechselst du zu Befehlen. Ein Befehl, der mit #set beginnt, ist eine Regel, die ab dieser Stelle für das ganze Do­ku­ment gilt:

  • #set text(lang: "de", size: 11pt) stellt die Spra­che auf Deutsch und die Schriftgröße auf 11 Punkt. Durch die Spra­che trennt Typst Wörter am Zeilenende richtig und schreibt später »Abbildung« statt »Figure«.
  • #set page(paper: "a4", margin: 2.5cm, numbering: "1") legt Papierformat und Seitenränder fest und schaltet die Seitenzahlen ein.
  • #set par(justify: true) setzt die Absätze im Blocksatz.
  • #set heading(numbering: "1.1") nummeriert die Überschriften.

Die erste Seite des Do­ku­ments mit nummerierten Überschriften, Blocksatz und Seitenzahl.

Probiere andere Werte aus: eine Schriftgröße von 12pt, einen Rand von 3cm oder die Nummerierung "I.a". Wenn du dich vertippst, unterstreicht Visual Studio Code die Stelle rot, und die Vor­schau bleibt beim letzten funktionierenden Stand stehen.

Eine andere Schrift

Auch die Schriftart ist eine Einstellung für den Text. Ergänze in der ersten Zeile font:

#set text(lang: "de", size: 11pt, font: "Atkinson Hyperlegible")

Welche Schriften es im Work­space gibt, zeigt dir dieser Befehl im Ter­mi­nal:

typst fonts

Für dieses Tutorial bleiben wir bei der Standardschrift. Nimm font also wieder heraus, wenn deine Seiten genauso aussehen sollen wie hier.

4. Titel und Inhaltsverzeichnis

Eine Ausarbeitung braucht einen Titel. Füge den folgenden Block unter den vier #set-Zeilen ein, also vor = Einleitung:

#align(center)[
  #text(size: 20pt, weight: "bold")[Der Bubblesort-Algorithmus]

  Ada Lovelace, Klasse 9.4 \
  Informatik
]

#outline()

Hier siehst du, wie Befehle und Text zusammenspielen:

  • #align(center)[…] zentriert alles, was in den eckigen Klammern steht. Eckige Klammern enthalten immer Inhalt, also Text, wie du ihn auch sonst schreibst.
  • #text(size: 20pt, weight: "bold")[…] setzt den Titel groß und fett. Runde Klammern enthalten die Einstellungen für einen Befehl.
  • Der Backslash \ am Zeilenende erzwingt einen Zeilenumbruch, ohne einen neuen Absatz zu beginnen.
  • #outline() erzeugt das Inhaltsverzeichnis. Es entsteht aus deinen Überschriften und bleibt immer aktuell.

Trage deinen eigenen Namen und deine Klasse ein.

Links der Quelltext mit den set-Regeln und dem Titelblock, rechts die Vor­schau mit Titel und Inhaltsverzeichnis.

5. Formeln

Für Formeln ist Typst besonders gut geeignet. Eine Formel steht zwischen zwei Dollarzeichen. Füge diesen Abschnitt am Ende der Datei an:

= Aufwand

Wie viele Vergleiche braucht Bubblesort für eine Liste mit $n$ Elementen? Nach jedem Durchgang steht ein weiteres Element an seinem endgültigen Platz und muss nicht mehr verglichen werden. Im ersten Durchgang sind es deshalb $n - 1$ Vergleiche, im zweiten nur noch $n - 2$ und so weiter. Insgesamt ergibt das:

$ V(n) = (n - 1) + (n - 2) + ... + 1 = (n (n - 1)) / 2 $

Für $n = 5$ sind das $V(5) = 10$ Vergleiche.

Es gibt zwei Arten von Formeln:

  • $n$ steht im Fließtext. Direkt nach dem ersten und vor dem zweiten Dollarzeichen steht kein Leerzeichen.
  • $ V(n) = … $ steht abgesetzt in einer eigenen Zeile. Dafür schreibst du nach dem ersten und vor dem zweiten Dollarzeichen ein Leerzeichen.

Ein Bruch entsteht durch den Schrägstrich: (n (n - 1)) / 2. Die äußeren Klammern um den Zähler zeigen Typst nur, was zusammengehört, im Do­ku­ment erscheinen sie nicht.

Der Abschnitt Aufwand mit Formeln im Text und einer abgesetzten Formel mit Bruch.

Weitere Beispiele zum Ausprobieren: $x^2$ für eine Hochzahl, $a_1$ für einen Index, $sqrt(2)$ für eine Wurzel und $sum_(i=1)^n i$ für eine Summe.

6. Abbildungen

Für eine Abbildung brauchst du zuerst eine Bilddatei in deinem Ordner. Wir verwenden eine Grafik aus Wikimedia Commons, die den Ablauf von Bubblesort zeigt. Öffne das Ter­mi­nal mit StrgJ und lade die Grafik herunter:

wget -O bubblesort.png https://upload.wikimedia.org/wikipedia/commons/3/34/Bubble_Sort_Example.png

Die Datei bubblesort.png erscheint danach im Explorer. Eigene Bilder kannst du auch einfach von deinem Com­puter in den Explorer ziehen.

Füge nun diesen Text am Ende des Abschnitts »Funktionsweise« ein, also vor = Aufwand:

@abb-karten zeigt den Ablauf am Beispiel von fünf Karten.

#figure(
  image("bubblesort.png", width: 80%),
  caption: [Bubblesort mit fünf Karten],
) <abb-karten>
  • image("bubblesort.png", width: 80%) fügt das Bild ein, hier mit 80 % der Textbreite.
  • #figure(…) macht daraus eine Abbildung mit einer Bildunterschrift (caption) und einer Nummer.
  • <abb-karten> hinter der Abbildung ist eine Marke. Den Namen denkst du dir selbst aus.
  • @abb-karten im Text ist ein Verweis auf diese Marke. Typst setzt dafür »Abbildung 1« ein.

Ein Satz mit dem Verweis Abbildung 1, da­run­ter die Grafik zu Bubblesort mit Bildunterschrift.

Der Vorteil von Marke und Verweis: Wenn du später weiter vorn eine zweite Abbildung einfügst, ändern sich alle Nummern von selbst, auch im Text.

7. Tabellen

Eine Tabelle ist ebenfalls ein Befehl. Füge diesen Text am Ende des Abschnitts »Aufwand« an:

@tab-vergleiche zeigt, wie schnell die Zahl der Vergleiche wächst.

#figure(
  table(
    columns: 2,
    align: right,
    table.header[*Elemente*][*Vergleiche*],
    [5], [10],
    [10], [45],
    [100], [4 950],
    [1 000], [499 500],
  ),
  caption: [Vergleiche bei Bubblesort],
) <tab-vergleiche>
  • columns: 2 legt fest, dass die Tabelle zwei Spalten hat.
  • align: right richtet den Inhalt rechtsbündig aus, das ist bei Zahlen üblich.
  • table.header[…][…] enthält die Kopfzeile.
  • Danach folgen die Zellen der Reihe nach, jede in eckigen Klammern. Nach zwei Zellen beginnt Typst eine neue Zeile.

Weil die Tabelle in #figure(…) steht, bekommt sie eine Beschriftung und eine eigene Nummerierung: Typst zählt Abbildungen und Tabellen getrennt.

Ein Satz mit dem Verweis Tabelle 1, da­run­ter eine Tabelle mit zwei Spalten und Beschriftung.

8. Quelltext

In einer Ausarbeitung für Informatik kommt oft Programmcode vor. Dafür gibt es Codeblöcke: drei Backticks, direkt dahinter der Name der Pro­gram­mier­spra­che, und am Ende wieder drei Backticks. Füge diesen Abschnitt am Ende der Datei an:

= Umsetzung in Python

Das folgende Programm sortiert eine Liste mit Bubblesort:

```python
def bubblesort(liste):
    n = len(liste)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if liste[j] > liste[j + 1]:
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
    return liste

print(bubblesort([5, 2, 3, 1, 4]))
```

Typst setzt den Code in einer Schrift mit fester Zeichenbreite und färbt ihn passend zur Spra­che ein:

Der Abschnitt Umsetzung in Python mit farbig hervorgehobenem Python-Code.

Ein einzelnes Wort im Fließtext setzt du mit einfachen Backticks als Code, zum Beispiel `liste`.

9. Ein eigener Befehl

Bis jetzt hast du Befehle benutzt, die Typst mitbringt. Du kannst dir auch eigene bauen. Das lohnt sich immer dann, wenn etwas mehrmals gleich aussehen soll, zum Beispiel ein hervorgehobener Merksatz.

Füge diese Zeilen oben in der Datei ein, direkt unter den vier #set-Zeilen:

#let merke(inhalt) = block(
  fill: rgb("#e8f1fb"),
  inset: 10pt,
  radius: 4pt,
  width: 100%,
)[*Merke:* #inhalt]
  • #let merke(inhalt) = … legt einen neuen Befehl mit dem Namen merke fest. In inhalt landet das, was du ihm später übergibst.
  • block(…) ist ein Kasten: hier mit hellblauem Hintergrund (fill), 10 Punkt Abstand nach innen (inset), abgerundeten Ecken (radius) und voller Breite.
  • In den eckigen Klammern steht, was im Kasten erscheint: das fette Wort »Merke:« und danach dein Inhalt.

Jetzt kannst du den Befehl wie jeden anderen verwenden. Füge diese Zeile am Ende des Abschnitts »Aufwand« ein, also nach der Tabelle:

#merke[Verdoppelt sich die Länge der Liste, braucht Bubblesort ungefähr viermal so viele Vergleiche.]

Ein hellblauer Kasten mit dem fetten Wort Merke und einem Merksatz.

Wenn dir die Farbe nicht gefällt, änderst du sie an einer einzigen Stelle, und alle Merkkästen im Do­ku­ment sehen anders aus. Das ist derselbe Gedanke wie bei den #set-Regeln: Du legst das Aussehen einmal fest und schreibst danach nur noch Inhalt.

10. Fazit und Quellen

Zum Schluss fehlen noch das Fazit und die Quellenangabe für die Abbildung. Füge diesen Text am Ende der Datei an:

= Fazit

Bubblesort eignet sich gut, um das Sortieren zu verstehen. Für große Datenmengen gibt es deutlich schnellere Verfahren, zum Beispiel Quicksort.

= Quellen

- @abb-karten: Nadine Koch und Niklas Meißner, _Bubble Sort Example_, Wikimedia Commons, gemeinfrei (CC0).

Auch hier steht mit @abb-karten ein Verweis, sodass die Quellenangabe immer die richtige Abbildungsnummer nennt.

Wenn du ein Bild verwendest, das du nicht selbst gemacht hast, gehört die Quelle in dein Do­ku­ment. Die Grafik in diesem Tutorial ist gemeinfrei, du darfst sie also frei verwenden. Bei den meisten Bildern aus dem Internet ist das nicht so.

11. Das PDF erzeugen

Die Vor­schau zeigt dir das Do­ku­ment, aber abgeben oder ausdrucken möch­test du ein PDF. Das erzeugst du im Ter­mi­nal mit dem Typst-Compiler:

typst compile ausarbeitung.typ

Wenn alles stimmt, gibt der Befehl nichts aus, und im Explorer erscheint die Datei ausarbeitung.pdf:

Der Work­space mit Quelltext, Vor­schau und Ter­mi­nal. Im Explorer liegt die Datei ausarbeitung.pdf.

Um das PDF auf deinen Com­puter zu holen, klicke im Explorer mit der rechten Maustaste auf ausarbeitung.pdf und wähle »Download…«.

Falls dein Do­ku­ment einen Fehler enthält, nennt dir typst compile die Datei, die Zeile und die Stelle, an der etwas nicht stimmt. Dieselben Fehler siehst du schon vorher rot unterstrichen im Editor.

Zum Vergleich findest du hier noch einmal die vollständige Datei:

#set text(lang: "de", size: 11pt)
#set page(paper: "a4", margin: 2.5cm, numbering: "1")
#set par(justify: true)
#set heading(numbering: "1.1")

#let merke(inhalt) = block(
  fill: rgb("#e8f1fb"),
  inset: 10pt,
  radius: 4pt,
  width: 100%,
)[*Merke:* #inhalt]

#align(center)[
  #text(size: 20pt, weight: "bold")[Der Bubblesort-Algorithmus]

  Ada Lovelace, Klasse 9.4 \
  Informatik
]

#outline()

= Einleitung

Sortieren gehört zu den häufigsten Aufgaben, die ein Computer erledigt. Ob Namen in einer Kontaktliste, Preise in einem Onlineshop oder Punktzahlen in einem Spiel: Fast immer sollen Daten in einer bestimmten Reihenfolge erscheinen.

Bubblesort ist eines der einfachsten Sortierverfahren. In dieser Ausarbeitung beschreibe ich, wie das Verfahren funktioniert und wie viel Arbeit es dem Computer macht.

= Funktionsweise

Bubblesort vergleicht immer zwei *benachbarte* Elemente. Stehen sie in der falschen Reihenfolge, werden sie _vertauscht_.

Ein Durchgang läuft so ab:

+ Beginne beim ersten Element.
+ Vergleiche es mit seinem rechten Nachbarn.
+ Ist das linke Element größer, vertausche die beiden.
+ Gehe ein Element weiter und wiederhole das, bis das Ende erreicht ist.

Nach dem ersten Durchgang steht das größte Element ganz rechts. Große Elemente steigen also nach und nach auf wie Luftblasen im Wasser, daher der Name. Das Verfahren hat zwei wichtige Eigenschaften:

- Es ist leicht zu verstehen und zu programmieren.
- Es ist bei langen Listen sehr langsam.

@abb-karten zeigt den Ablauf am Beispiel von fünf Karten.

#figure(
  image("bubblesort.png", width: 80%),
  caption: [Bubblesort mit fünf Karten],
) <abb-karten>

= Aufwand

Wie viele Vergleiche braucht Bubblesort für eine Liste mit $n$ Elementen? Nach jedem Durchgang steht ein weiteres Element an seinem endgültigen Platz und muss nicht mehr verglichen werden. Im ersten Durchgang sind es deshalb $n - 1$ Vergleiche, im zweiten nur noch $n - 2$ und so weiter. Insgesamt ergibt das:

$ V(n) = (n - 1) + (n - 2) + ... + 1 = (n (n - 1)) / 2 $

Für $n = 5$ sind das $V(5) = 10$ Vergleiche.

@tab-vergleiche zeigt, wie schnell die Zahl der Vergleiche wächst.

#figure(
  table(
    columns: 2,
    align: right,
    table.header[*Elemente*][*Vergleiche*],
    [5], [10],
    [10], [45],
    [100], [4 950],
    [1 000], [499 500],
  ),
  caption: [Vergleiche bei Bubblesort],
) <tab-vergleiche>

#merke[Verdoppelt sich die Länge der Liste, braucht Bubblesort ungefähr viermal so viele Vergleiche.]

= Umsetzung in Python

Das folgende Programm sortiert eine Liste mit Bubblesort:

```python
def bubblesort(liste):
    n = len(liste)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if liste[j] > liste[j + 1]:
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
    return liste

print(bubblesort([5, 2, 3, 1, 4]))
```

= Fazit

Bubblesort eignet sich gut, um das Sortieren zu verstehen. Für große Datenmengen gibt es deutlich schnellere Verfahren, zum Beispiel Quicksort.

= Quellen

- @abb-karten: Nadine Koch und Niklas Meißner, _Bubble Sort Example_, Wikimedia Commons, gemeinfrei (CC0).

12. Wie geht es weiter?

Du kennst jetzt die wich­tig­sten Bausteine: Text mit Überschriften und Listen, #set-Regeln für das Aussehen, Formeln, Abbildungen, Tabellen, Codeblöcke und einen eigenen Befehl. Damit kannst du Ausarbeitungen, Protokolle und Handouts schreiben. Ein paar Ideen für die nächsten Schritte:

  • Schreibe deine nächste Hausaufgabe oder dein nächstes Protokoll mit Typst. Kopiere dafür die #set-Zeilen und deinen Titelblock in eine neue Datei.
  • Baue dir einen zweiten eigenen Befehl, zum Beispiel aufgabe für Aufgabenstellungen in einer anderen Farbe.
  • Schau in die Typst-Do­ku­mentation. Dort ist jeder Befehl mit Beispielen erklärt.
  • Stöbere im Typst Universe. Dort gibt es fertige Vorlagen und Pakete, zum Beispiel für Dia­gramme oder Präsentationen. Typst lädt ein Paket von selbst herunter, sobald du es verwendest.