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 wurde von Laurenz Mädje und Martin Haug in Berlin entwickelt und ist freie Software. Die Idee dahinter ist dieselbe wie bei LaTeX, das seit Jahrzehnten an Universitäten verwendet wird: Du schreibst den Inhalt und legst einmal fest, wie das Dokument aussehen soll. Typst ist dabei deutlich einfacher zu lernen, und du siehst jede Änderung sofort.
Am Ende dieses Tutorials hast du dieses Dokument geschrieben:

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.
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 Workspace sollte jetzt ungefähr so aussehen:

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.
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 erkennt Visual Studio Code, dass es sich um ein Typst-Dokument 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:
= beginnt, ist eine Überschrift.Bis jetzt siehst du nur den Quelltext. Öffne die Vorschau mit StrgK und dann V, oder klicke auf »Preview« in der kleinen Zeile über deiner ersten Textzeile. Neben deinem Quelltext erscheint das fertige Dokument:

Die Vorschau aktualisiert sich, während du tippst. Probiere es aus: Ändere ein Wort im Text und beobachte die rechte Seite.
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.+ beginnen, ergeben eine nummerierte Liste. Die Nummern vergibt Typst.- beginnen, ergeben eine Aufzählung.So sehen die beiden Abschnitte in der Vorschau aus:

== Unterabschnitt und === Unter-Unterabschnitt.
Das Dokument sieht schon ordentlich 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 Dokument gilt:
#set text(lang: "de", size: 11pt) stellt die Sprache auf Deutsch und die Schriftgröße auf 11 Punkt. Durch die Sprache 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.
12pt, einen Rand von 3cm oder die Nummerierung "I.a". Wenn du dich vertippst, unterstreicht Visual Studio Code die Stelle rot, und die Vorschau bleibt beim letzten funktionierenden Stand stehen.
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 Workspace gibt, zeigt dir dieser Befehl im Terminal:
typst fonts
Für dieses Tutorial bleiben wir bei der Standardschrift. Nimm font also wieder heraus, wenn deine Seiten genauso aussehen sollen wie hier.
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.\ 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.

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 Dokument erscheinen sie nicht.

$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.
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 Terminal 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 Computer 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.
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.
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.Weil die Tabelle in #figure(…) steht, bekommt sie eine Beschriftung und eine eigene Nummerierung: Typst zählt Abbildungen und Tabellen getrennt.

In einer Ausarbeitung für Informatik kommt oft Programmcode vor. Dafür gibt es Codeblöcke: drei Backticks, direkt dahinter der Name der Programmiersprache, 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 Sprache ein:

`liste`.
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.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.] |

Wenn dir die Farbe nicht gefällt, änderst du sie an einer einzigen Stelle, und alle Merkkästen im Dokument sehen anders aus. Das ist derselbe Gedanke wie bei den #set-Regeln: Du legst das Aussehen einmal fest und schreibst danach nur noch Inhalt.
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.
Die Vorschau zeigt dir das Dokument, aber abgeben oder ausdrucken möchtest du ein PDF. Das erzeugst du im Terminal mit dem Typst-Compiler:
typst compile ausarbeitung.typ
Wenn alles stimmt, gibt der Befehl nichts aus, und im Explorer erscheint die Datei ausarbeitung.pdf:

Um das PDF auf deinen Computer zu holen, klicke im Explorer mit der rechten Maustaste auf ausarbeitung.pdf und wähle »Download…«.
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).
|
Du kennst jetzt die wichtigsten 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:
#set-Zeilen und deinen Titelblock in eine neue Datei.aufgabe für Aufgabenstellungen in einer anderen Farbe.