Add first version of workshop slides

This commit is contained in:
Julius Freudenberger 2026-03-18 18:25:38 +01:00
parent 0739d26c9e
commit a57fda18c1
45 changed files with 879 additions and 0 deletions

9
chapters/about-me.typ Normal file
View file

@ -0,0 +1,9 @@
#import "/globals.typ": *
#slide(title: "Über mich")[
- B.#(sym.space.nobreak.narrow)Eng. Julius Freudenberger
- 2000 geboren
- 2016 erste Kontakte mit #LaTeX
- 2019 -- 2023 Bachelorstudium an der Hochschule Esslingen
- 2023 -- 2026(?) Masterstudium an der Hochschule Karlsruhe
]

41
chapters/closing.typ Normal file
View file

@ -0,0 +1,41 @@
#import "/globals.typ": *
= Ausblick
#slide(title: [Was kann typst noch?])[
- Präsentationen mit #link("https://typst.app/universe/package/polylux")[polylux] oder #link("https://typst.app/universe/package/touying")[touying]
- Zeichnen mit #link("https://typst.app/universe/package/cetz")[cetz]
- Plotting mit #link("https://typst.app/universe/package/lilaq")[lilaq]
- Chemische Formeln mit #link("https://typst.app/universe/package/alchemist")[alchemist]
]
#slide(title: [Nächste Projekte für typst?])[
- Wissenschaftliches Dokumentieren
- Praxissemesterbericht
- Hausarbeiten
#v(1em)
- (Thesis)
#v(2em)
- Bewerbungsunterlagen
]
#slide(title: [Bewerbungsunterlagen])[
#columns(2)[
- Lebenslauf mit #link("https://typst.app/universe/package/moderner-cv")[moderner-cv]
#image(height: 90%, "/images/moderner-cv.png")
#colbreak()
- Anschreiben mit #link("https://typst.app/universe/package/briefs")[briefs]
#image(height: 90%, "/images/briefs.png")
]
]
#slide(title: [Wohin bei Problemen?])[
- #link("https://typst.app/docs")[typst Dokumentation]
- bzw.~Dokumentation des jeweiligen Pakets
- Suchmaschine des Vertrauens
- #link("https://forum.typst.app")[typst-Forum]
]

View file

@ -0,0 +1,24 @@
#import "/globals.typ": *
= Externe Dateien
#slide(title: [Externe Dateien einbinden --- SVG und PDF])[
- `#image` akzeptiert die Vektorformate `svg` und `pdf` nativ
- Nutzung entweder als Bild (z.#(sym.space.nobreak.narrow)B. mit `#figure`)
- oder um PDF--Dateien als ganze Seiten einzufügen (z.#(sym.space.nobreak.narrow)B. externe Dokumente im Anhang)
```typ
#page(margin: 0pt, image("filename.pdf", page: 1))
// mehrere Seiten
#page(margin: 0pt, for n in range(1, N + 1) { image("file.pdf", page: n) })
```
- aktuell kann typst nicht erkennen, wie viele Seiten eine PDF hat
- deshalb `N` mit der Anzahl an einzubindender Seiten ersetzen
- Eintrag im Inhaltsverzeichnis
```typ
#{
show heading: none
heading[Eingebettete PDF]
}
```
]

71
chapters/formatting.typ Normal file
View file

@ -0,0 +1,71 @@
#import "/globals.typ": *
= Dokumentformatierung
#slide(title: "Formatierungsoptionen")[
- Papierformat
- wird im Parameter `paper` in der Funktion `#page()` gesetzt
- `#set page(paper: "a4")` (Standard)
- `#set page(paper: "a5")`
- `#set page(paper: "us-letter")`
- Seitenränder
- wird im Paramter `margin` in der Funktion `#page()` gesetzt
- Standard: $frac(2.5,21)*$kleinere Kante der Seite
- A4: 2,5~cm
- `#set page(margin: 4pt)` gleicher Rand auf allen Seiten
- `#set page(margin: (x: 8pt, y: 4pt))` horizontale und vertikale Ränder
- `top, right, bottom, left` Ränder an den jeweiligen Seiten
- `inside, outside` Ränder innen und außen (bei Büchern)
]
#slide(title: "Querformat")[
- Gesamtes Dokument im Querformat
```
#set page(flipped: true)
```
- Einzelne Seiten im Querformat (nützlich für große Tabellen oder breite Abbildungen)
```
#page(flipped: true)[
Inhalt
]```
]
#slide(title: "Kopf- und Fußzeile")[
- `#set page(header: [Kopfzeile], footer: [Fußzeile])`
- Inhalt wird standardmäßig wie gewohnt linksbündig gesetzt
- immer rechts mit `#align(right)[Inhalt]`
- mehrere Spalten
```
#set page(footer: [#grid(columns: (1fr, 1fr, 1fr), align(left)[Linker Inhalt], align(center)[Mittlerer Inhalt], align(right)[Rechter Inhalt])])
```
- wenn Seitenzahl angezeigt werden soll `context` nutzen
```
#set page(footer: context [#grid(columns: (1fr, 1fr, 1fr), align(left)[Linker Inhalt], align(center)[Mittlerer Inhalt], align(right)[#counter(page).display("1")])])
```
]
#slide(title: "Fußzeile in Büchern")[
- `inner` und `outer` nicht nativ vorgesehen
- Paket #link("https://typst.app/universe/package/chic-hdr/")[chic-hdr] nicht auf aktuelle typst Version angepasst
- daher selbst gebastelte Lösung
#raw(lang: "typ", read("/codebeispiele/book-footer.typ"))
]
#slide(title: "Kopfzeile mit Überschriften")[
- Paket #link("https://typst.app/universe/package/hydra")[hydra] ermöglicht Anzeigen der aktuellen Überschriften
```
#set page(header: context {
[#grid(columns: (1fr, 1fr),
align(left, emph(hydra(1))),
align(right, emph(hydra(2))
))]
if hydra(1) != none {
line(length: 100%, stroke: 0.5pt, start: (0%, -.8em))
}
})
```
- Dieser Header ist ähnlich zum Style `scrheadings` von `scrlayer-scrpage` in #LaTeX
]

View file

@ -0,0 +1,27 @@
#import "/globals.typ": *
= Abbildungen und Gleitobjekte
#slide(title: [Abbildungen und Graphiken])[
- Einbinden mit `#image("/path/to/file")` (mit Dateiendung)
- Dateipfad mit `/` am Anfang: vom Projektverzeichnis aus
- ohne `/`: vom Verzeichnis der aktuellen Datei aus
- folgende Formate sind möglich: `png`, `jpg`, `gif`, `svg`, `pdf`, `webp`
#v(1em)
- Höhe und Breite optionale Parameter
- Standard ist `auto`, das Bild wird an den zur Verfügung stehenden Platz angepasst
- kann auch relativ angegeben werden
- `#image("/path/to/file", width: 80%)`
]
#slide(title: [Graphiken als Gleitobjekt])[
#show-code-render("image-float.typ")
]
#slide(title: [Gleitobjekte])[
- können für Graphiken, Tabellen, Codelistings, etc. verwendet werden
- immer mit `#figure()` eingeleitet
- der `body` ist dann unterschiedlich
- automatische Positionierung im Text
- Platzierungsalgorithmus nicht ganz so gut wie in #LaTeX
]

17
chapters/introduction.typ Normal file
View file

@ -0,0 +1,17 @@
#import "/globals.typ": *
#slide(title: "Wer seid ihr?")[
- Name
- Fakultät? Was macht ihr da?
- Schon von typst gehört oder etwas damit gemacht?
- Schon #LaTeX genutzt?
- Nächste (wissenschaftliche) Arbeit, die du vielleicht mit typst schreiben möchtest?
]
#slide(title: "Materialien für den Kurs")[
- Dieser Foliensatz
- Kleine Vorlagen zum Mitmachen
- Dokumente, die wir im Laufe des Kurses erstellen
#v(1em)
- wird alles im geteilten Ordner hochgeladen
]

67
chapters/listings.typ Normal file
View file

@ -0,0 +1,67 @@
#import "/globals.typ": *
== Codelistings
#slide(title: [Codelistings])[
- Abdrucken von Codezeilen
- einfaches Syntaxhighlighting
- nativ unterstützt
- Paket #link("https://typst.app/universe/package/codly")[codly] für mehr Anpassungsmöglichkeiten und Zeilennummern
]
#slide(title: [Native Codelistings])[
#show-code-render("native-listings.typ")
]
#slide(title: [Einbinden von Beispielen aus externen Dateien])[
- `lang` _muss_ explizit gesetzt werden, auch wenn die Dateiendung Teil des Pfades ist
```typ
#raw(read("/path/to/file"), lang: "<language>", block: true)
```
- `#read()` ließt Inhalt der Datei ein
- `#raw()` für Listingdarstellung
]
#slide(title: [Plugin codly])[
- #link("https://typst.app/universe/package/codly")[codly] bietet viele weitergehende Features
- Einrückung
- Zeilennummern
- Zebrastreifen
- Einrichtung:
```typ
#import "@preview/codly:1.3.0": *
#import "@preview/codly-languages:0.1.1": *
#show: codly-init.with()
#codly(languages: codly-languages)
```
- danach werden Codeblöcke automatisch durch codly formatiert
- tiefgehende #link("https://raw.githubusercontent.com/Dherse/codly/main/docs.pdf")[Dokumentation]
]
#codly-enable()
#slide(title: [codly -- Beispiel])[
```java
public static void main(String[] args) {
System.out.println("Hello Cyberweek");
}
```
- codly ist stark konfigurierbar
- jedes Verhalten und Feature kann deaktiviert oder angepasst werden
]
#slide(title: [codly -- In `figure`])[
#show-code-render("codly-figure.typ")
]
#slide(title: [codly -- Highlights])[
#show-code-render("codly-highlights.typ")
]
#slide(title: [codly -- Highlights referenzieren])[
#show-code-render("codly-highlights-reference.typ")
]
#codly-disable()

110
chapters/listofs.typ Normal file
View file

@ -0,0 +1,110 @@
#import "/globals.typ": *
== Weitere Verzeichnisse
#slide(title: "Weitere Verzeichnisse")[
- automatisch aktualisierendes Inhaltsverzeichnis sowie Verzeichnisse für
- Abbildungen (`kind: image`)
- Codelistings (`kind: raw`)
- (Glossar (Paket #link("https://typst.app/universe/package/glossarium")[glossarium])
- Abkürzungen (entweder auch glossarium oder Paket #link("https://typst.app/universe/package/acrostiche")[acrostiche])
- ...)
- alles mit der Funktion `#outline()`
- Ausnahme: Literaturverzeichnis
```typ
#outline()
#outline(target: figure.where(kind: image))
```
]
= Literatureinbindung
#slide(title: "Literaturverzeichnis")[
- Erstellen/Generieren von Literaturdateien
- `.bib`, häufig Bib#(TeX)--Format genannt
- `.yaml`, das typst--eigene Hayagriva--Format
- Hinzufügen von Literaturdateien (`.bib` oder `.yaml`)
- Zitieren von Literatur im Text `@citekey` oder `#cite(<citekey>)`
- Literaturverzeichnis (`#bibliography("file")`)
]
#slide(title: "Literaturdatei")[
- Jeder Eintrag hat einen eindeutigen Key, unter dem er im Text referenziert wird
- Literatur kann durch verschiedene Typen kategorisiert werden, u.a.
- article
- book
- inproceedings
- online
- thesis
- ...
- Jeder Literatureintrag hat verschiedene Attribute
- Titel
- Autor:innen
- Jahr
- ...
]
#slide(title: "Literaturdatei -- Formate")[
- typst unterstützt neben dem gängigen Bib#(TeX)--Format auch das eigene Hayagriva--Format, das die YAML--Syntax nutzt
- Hayagriva ist eine Eigenentwicklung vom typst--Team
- von Literaturverwaltungen nicht sonderlich unterstützt
- von Verlagen selten angeboten
- hat aber interessante Ideen
]
#slide(title: "Literaturdatei -- Formate")[
#columns(2)[
#raw(lang: "bib", read("/codebeispiele/bib-file.bib"))
#colbreak()
#raw(lang: "yaml", read("/codebeispiele/hayagriva-file.yaml"))
]
]
#slide(title: "Quellen für Literaturdateien")[
- Literatursuchmaschinen
#only("1")[#align(center, image(width: 80%, "/images/boss.png"))]
#only("2")[#align(center, image(width: 65%, "/images/blb.png"))]
#only("3-")[- Verlage]
#only("4")[#align(center, image(width: 50%, "/images/springer.png"))]
#only("5")[#align(center, image(width: 75%, "/images/pearson.png"))]
]
== Exkurs: Literaturverwaltung
#slide(title: "Exkurs: Literaturverwaltung")[
#only("1")[#align(center, image(width: 90%, "/images/bibliothek.png"))]
#only("2-")[
- Verschiedene Programme zur Literaturverwaltung verfügbar
- #link("https://zotero.org/")[Zotero] (Open--Source, Crossplattform)
- #link("https://lumivero.com/products/citavi/")[Citavi] (Keine Hochschullizenz mehr in Baden-Württemberg)
- #link("https://www.mendeley.com")[Mendeley]
- bieten Integrationen in WYSIWYG--Editoren
- können auch nach Bib#(TeX) exportieren
]
]
#slide(title: "Exkurs: Literaturverwaltung -- Zotero")[
- guter automatischer Export mit #link("https://retorque.re/zotero-better-bibtex/")[Better Bib#(TeX) for Zotero]
- generiert automatisch Bib#(TeX) mit allen Literatureinträgen einer Sammlung
- hält Datei bei Änderungen oder neu hinzugefügten Dateien aktuell
#v(1em)
- einfach neue Literatur in Zotero einfügen mit #link("https://www.zotero.org/download/connectors")[Zotero Connector]
]
#slide(title: "Literatur -- Meine Empfehlungen")[
- Verschiedene Literaturarten (Bücher, Paper, Thesen, Webseiten) in verschiedenen Untersammlungen verwalten
- pro Untersammlung ein automatischer Bib#(LaTeX)--Export
- Bib#(TeX)--Dateien in einen eigenen Unterordner
]
#slide(title: "Einbinden der Literatur in das Dokument und Zitieren")[
#raw(lang: "typ", read("/codebeispiele/bibliography.typ"))
]
#slide(title: "Zitieren und Erscheinen im Literaturverzeichnis")[
- Standardmäßig wird nur Literatur im Literaturverzeichnis ausgegeben, die auch im Text zitiert wurde
- `#cite(<citekey>, form: none)` fügt ein unzitiertes Werk ins Literaturverzeichnis ein
- `#bibliography("file", full: true)` zeigt alle Werke im Literaturverzeichnis an
]

38
chapters/math.typ Normal file
View file

@ -0,0 +1,38 @@
#import "/globals.typ": *
== Mathematik
#slide(title: "Mathematik")[
- typst nutzt eine andere Mathematiksyntax als #LaTeX
- Exponenten und Indizes gleich
- Symbole, Klammern und Funktionen werden anders gesetzt
- es gibt aber ein Kompatibilitätsplugin: #link("https://typst.app/universe/package/mitex")[mitex]
- Mathemodus wird immer mit `$` begonnen und beendet
- wird als Block gesetzt, wenn die Formel mit einem Leerzeichen beginnt und endet
]
#slide(title: [Mathematik -- inline])[
- setzt die Gleichung in eine Fließtext ein
- keine Referenzierung
#show-code-render("math-inline.typ")
]
#slide(title: [Mathematik -- block])[
- setzt die Gleichung als Block mit Absätzen
- Leerzeichen oder Zeilenumbruch nach erstem `$` und vor letzem `$`
- standardmäßig keine Referenzierung
#show-code-render("math-block.typ")
]
#slide(title: [Mathematik -- Gleichung])[
- Um Gleichungen referenzieren zu können, müssen diese nummeriert sein
- Nummerierung entweder pro Gleichung aktivieren
#show-code-render("math-numbered.typ")
- oder global aktivieren
`#set math.equation(numbering: "(1)")`
]
#slide(title: [Mathematik -- Zeichen])[
#show-code-render("math-symbols.typ")
#align(center)[Die Größe der Klammern wird automatisch angepasst.]
]

22
chapters/own-changes.typ Normal file
View file

@ -0,0 +1,22 @@
#import "/globals.typ": *
= Direkt ausprobieren und mitmachen
#slide(title: "Projekt kompilieren")[
- Im Projektverzeichnis `typst compile file.typ`
- oder inkrementell `typst watch file.typ`
- in Typesetter Vorschau aktivieren
- mit Docker
- Outputfile `file.pdf` als PDF-Datei im gleichen Verzeichnis
]
#slide(title: "Erste eigene Änderungen")[
- Eigener Text, Absätze
- Textformatierung: *fett* und _kursiv_ mit `*fett*` und `_kursiv_`
- Eigene Abschnitte mit Überschriften (`=`, `==`)
- Metadaten ändern
- Titel des Dokuments ändern mit `title:`
- Eigener Name als Autor mit `author:`
- Anzeigen des Titels mit `#title()`
]

44
chapters/tables.typ Normal file
View file

@ -0,0 +1,44 @@
#import "/globals.typ": *
= Tabellen
#slide(title: [Setzen von Tabellen])[
- Tabellen werden mithilfe der Funktion `#table` gesetzt
- Jede Tabellenzeile ist ein eigener Inhaltsblock
- kann dementsprechend formatiert werden
- Anzahl der Spalten wird als Parameter festgelegt
]
#slide(title: [Beispieltabelle])[
#show-code-render("example-table.typ")
]
#slide(title: [Spaltenbreite])[
- `auto`: Standard und versucht bestmögliche Verteilung
- absolute Längen
- Verhältnis der Gesamttabelle in `%`
- Anteil an verfügbarem Platz
]
#slide(title: [Spaltenbreite --- Verhältnis der Gesamttabelle])[
- Spalten können so maximal 100 % der Tabellenbreite einnehmen
- Durch `gutter` können aber weitere Abstände hinzukommen
- Tabelle nimmt mehr als 100 % ihres Platzes ein
]
#slide(title: [Spaltenbreite --- Anteil an verfügbarem Platz])[
- Summe aller Werte mit Einheit `fr`
- Verteilt all diese Spalten entsprechend des Verhältnisses
#show-code-render("table-fr.typ")
]
#slide(title: [Alternierende Zeilenfarbe])[
#show-code-render("table-alternate-row-color.typ")
]
#slide(title: [Tabelle über mehrere Seiten])[
- `block`, der Tabelle umschließt muss `breakable` gemacht werden
```
#show figure: set block(breakable: true)
```
]

31
chapters/typst-code.typ Normal file
View file

@ -0,0 +1,31 @@
#import "/globals.typ": *
#slide(title: "Wie sieht typst Code aus?")[
#raw(lang: "typ", read("/codebeispiele/beispiel.typ"))
]
#slide(title: "Grundlegender Aufbau")[
- Keine Präambel wie in #LaTeX
- Einstellungen für das gesamte Dokument und eingebundene Pakete trotzdem am Anfang des Dokuments
- Einstellungen können später im Dokument geändert werden
- Einstellungen können auch lokal überschrieben werden
- Zusätzliche Pakete
- Preview von vielen Paketen, die von der Community entwickelt werden
- werden im Repository gehostet und bei Bedarf heruntergeladen
- keine Distributionen wie bei #LaTeX
]
#slide(title: "Modi")[
- typst kennt drei Modi
- Markupmodus
- Mathemodus
- Programmiermodus
- Schreibmodus ist der normale Modus
- Text wird gesetzt
- aus Programmiermodus als Inhaltsblock `[]`
- Mathemodus ermöglicht das Setzen von Formeln
- eingeleitet mit `$`
- Programmiermodus für Konfiguration oder eigene Funktionalität
- eingeleitet mit `#`
]

View file

@ -0,0 +1,18 @@
#import "/globals.typ": *
#slide(title: "Bevor wir beginnen: Was brauche ich?")[
- typst Installation
- Windows: https://typst.app/open-source/#download
- Mac: Homebrew `typst`
- Linux: Installation über den Paketmanager
- deb: nicht paketiert, rpm: `copr/claaj/typst`
- Arch Linux: `typst`
- NixOS: `nixpkgs.typst`
- Docker: `ghcr.io/typst/typst`
- Texteditor
- #link("https://code.visualstudio.com/")[VSCode] mit #link("https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist")[Tinymist], #link("https://neovim.io/")[neovim] mit #link("https://github.com/Myriad-Dreamin/tinymist/blob/main/editors/neovim/README.md")[Tinymist]
- #link("https://typesetter.trowell.net/")[Typesetter]
- Online-Editoren
- #link("https://typst.app/")[Online-Editor], Registrierung erforderlich
- #link("https://typst.app/play/")[Playground]
]

View file

@ -0,0 +1,35 @@
#import "/globals.typ": *
= typst -- die Theorie
#slide(title: "Was ist typst?")[
- Textsatzsystem
- moderne Entwicklung als Konkurrenz zu #LaTeX
- Preview Dezember 2022 gestartet
- seit März 2023 Open Source
- viele Entwicklungen
- Noch nicht komplett stabil -- es gibt Änderungen in neuen Versionen, die manchmal nicht abwärtskompatibel sind
#v(1em)
- setzt vorgegebenen Text und weitere Anweisungen automatisch und versucht dabei bestmögliches Layout
- hat einfacherere Programmiermöglichkeiten als #LaTeX
]
#slide(title: "Warum typst?")[
#columns(2)[
=== Warum typst?
- Automatisch Textsatz, Referenzen, Layout
- Keine große Layoutarbeit am Ende
- Kein Ruinieren des Dokuments beim Verschieben eines Bildes
- Das Dokument "sieht einfach schön aus"
#v(1em)
- Als Bibliothek in Softwareprogrammen einsetzbar
- inkrementelles Kompilieren, ohne doppelte Durchläufe
#colbreak()
=== Warum (noch) kein typst?
- Neue Versionen nicht komplett abwärtskompatibel
- Vorlagen für #LaTeX vorgegeben
- Unbekannter
]
#v(1em)
#align(center)[Mit typst ist das Layouten von Arbeiten deutlich einfacher.]
]

51
chapters/writing-text.typ Normal file
View file

@ -0,0 +1,51 @@
#import "/globals.typ": *
= Text, Inhalt und Struktur
#slide(title: "Funktionen")[
- ermöglichen besondere Formatierung oder lokales Überschreiben von Einstellungen
- werden mit `#` eingeleitet
- im Programmiermodus können weitere Funktionen ohne `#` begonnen werden
- Parameter können positioniert oder benannt sein
- Inhalt wird nach den Parametern in `[]` angegeben
- besteht der Inhalt aus einem weiteren Funktionsaufruf, kann dieser auch als Argument übergeben werden
#show-code-render("functions.typ")
]
#slide(title: "Anführungszeichen")[
- Werden je nach ausgewählter Sprache richtig gesetzt
#show-code-render("quotations.typ")
]
#slide(title: "Wichtige besondere Zeichen")[
#table(
columns: (auto, auto, auto),
align: center,
[Schrägstrich], [\\], [`\\`],
[geschütztes Leerzeichen (ohne Zeilenumbruch)], [~], [\~],
[schmales geschütztes Leerzeichen], [z.#(sym.space.nobreak.narrow)B.], [`z.#(sym.space.nobreak.narrow)B.`],
[Tilde], [\~], [`\~`],
[Gedankenstrich (Halbgeviertstrich)], [--], [`--`],
[Geviertstrich], [---], [`---`],
)
]
== Verweise
#slide(title: [Verweise -- Was wollen wir?])[
- Referenzieren von Abbildungen, Tabellen, Codezeilen, etc.
- automatische Nummerierung
- kein manuelles Nummerieren, Aktualisieren und Überprüfen
- automatische Verzeichnisse
- anklickbarer Link
]
#slide(title: "Verweise")[
- Label setzen: `<labelname>`
- Referenzieren: `@labelname`
- Typ des referenzierten Objekts wird in der Textsprache mitgenannt (Abbildung, Gleichung, ...)
- Seite referenzieren: `#ref(<labelname>, form: "page")`
- Referenz nutzt immer aktuellste Abschnittnummer bzw. Seitenzahl ohne weiteren Aufwand
- Daten sind immer aktuell, keine doppelten Kompilierungsdurchläufe notwendig
- Verweis ist ein Link, der direkt auf das referenzierte Objekt führt
]