#import "frontpage.typ": cover-page #import "sperrvermerk.typ": sperrvermerk #import "declaration.typ" : declaration #import "abstract.typ" : abstract #import "code-listing.typ" : code-listing #import "verzeichnise.typ" : verzeichnise #import "acro.typ" : acro #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #let meta = ( title: "Dies ist der Titel der Bachelorarbeit und bitte ohne Rechtschreibfehler", degree: "Bachelor of Science", study_program: "Informatik", university: "Duale Hochschule Baden-Württemberg Heidenheim", author: "Max Mustermann", submission_place: "Abgabeort", submission_date: datetime(month: 4, year: 2026, day: 1), processing_time: "12 Wochen", matrikelnummer: "123456", kurs: "TINF2023", ausbildungsbetrieb: "Firma XYZ GmbH", firmenort: "Heidenheim", erstgutachter: "Dipl.-Inf. Tester Trester", zweitgutachter: "Prof. Dr. Rolf Assfalg", ) #set text(lang: "de", size: 12pt) #set par(justify: true, leading: 0.65em * 1.25) #set heading(numbering: "1.") #show figure: set block(below: 15pt) #show table: set block(below: 6pt) #show heading.where(level: 1): it => [ // Schriftgröße der Überschrift #set text(size: 20pt) // Abstand NACH der Überschrift #set block(below: 2.2em) // Seitenumbruch vor jeder H1 (außer wenn sie die erste Überschrift auf der Seite ist) #pagebreak(weak: true) // eigentliche Überschrift wieder ausgeben #it ] #show heading.where(level: 2): it => [ // Abstand VOR und NACH der H2-Überschrift #set block(above: 2.5em, below: 1.5em) #it ] // ---------- Titelseite ---------- #cover-page( uni-logo: "assets/dhbw-logo.png", company-logo: "assets/company-logo.png", title: meta.title, subtitle: "T3000 - Projektarbeit", degree: meta.degree, program: meta.study_program, institution: meta.university, author: meta.author, date: meta.submission_date, processing_time: meta.processing_time, matrikelnummer: meta.matrikelnummer, kurs: meta.kurs, ausbildungsbetrieb: meta.ausbildungsbetrieb, firmenort: meta.firmenort, erstgutachter: meta.erstgutachter, zweitgutachter: meta.zweitgutachter, // Feintuning (optional) logo-width: 115pt, title-size: 18pt, section-size: 11pt, author-size: 12pt, date-size: 10pt, ) // ---------- Sperrvermerk ---------- #sperrvermerk(meta) // ---------- Erklärung ---------- #declaration(meta) // ---------- Abstract ---------- #abstract(meta) // ---------- Inhaltsverzeichnis ---------- #set page( numbering: "I", header: context { let headings = query(heading.where(level: 1)) let on_this_page = headings.filter(h => h.location().page() == here().page()) if on_this_page.len() == 0 { let before = headings.filter(h => h.location().page() < here().page()) if before.len() > 0 { let current = before.last() align(center, block[ #set text(size: 12pt) #if current.numbering != none [ #numbering(current.numbering, ..counter(heading).at(current.location())) #h(0.3em) ] #current.body ]) line(length: 100%, stroke: 0.5pt) } } }, footer: context { line(length: 100%, stroke: 0.5pt) align(center)[#counter(page).display()] }, ) #counter(page).update(1) #outline(depth: 2) #pagebreak() // ---------- Verzeichnisse ---------- #verzeichnise() // ---------- Hauptteil ---------- #set page(numbering: "1") #counter(page).update(1) // ---------- Kapitel 1 ---------- = Einleitung == Problemstellung Seit Jahrzehnten gilt LaTeX als Standardwerkzeug für wissenschaftliches Schreiben, insbesondere wenn präzise Typografie, mathematische Formeln oder technische Dokumentation gefragt sind. Doch trotz seiner Leistungsfähigkeit wirkt LaTeX für viele Anwender veraltet, schwer zugänglich und nur mit viel Einarbeitung effizient nutzbar. In den letzten Jahren ist mit Typst jedoch ein moderner Ansatz entstanden, der die Stärken von LaTeX aufgreift, sie aber mit einer deutlich intuitiveren Syntax, zeitgemäßer Technologie und höherer Produktivität verbindet. Typst bietet eine unmittelbare Vorschau, ein konsistentes Layout-System, eingebaute Features wie Referenzen oder Formeln und eine schnelle Lernkurve. Damit wird es für Studierende, Forschende und Entwickler zunehmend zur attraktiven Alternative. Im Folgenden wird dargestellt, warum Typst in vielen Bereichen als moderner und pragmatischer Ersatz für LaTeX betrachtet werden kann. == Zielsetzung und Abgrenzung Die Diskussion um eine mögliche Ersetzung von LaTeX durch Typst gewinnt zunehmend Aufmerksamkeit. LaTeX hat sich über Jahrzehnte als Standard für wissenschaftliche Publikationen etabliert, ist jedoch in vielerlei Hinsicht nicht mehr zeitgemäß. Viele seiner Konzepte stammen aus den 1980er-Jahren und führen heute zu einer hohen Einstiegshürde, komplexen Toolchains sowie einem oft mühsamen Schreibprozess. Typst setzt genau dort an: Es verfolgt das Ziel, die Stärken von LaTeX zu erhalten, gleichzeitig aber ein modernes, benutzerfreundliches und deutlich effizienteres Werkzeug bereitzustellen. Typst kombiniert eine intuitive, leicht erlernbare Syntax mit einer sofortigen Live-Vorschau, sodass Formatierungen ohne Kompilationsschritte direkt sichtbar sind. Funktionen wie mathematische Formeln, Referenzen, Zitationen oder Layout-Regeln sind integriert, statt über externe Pakete ergänzt werden zu müssen. Damit entfällt ein Großteil der Konfigurationsarbeit, die LaTeX traditionell verlangt. Zudem arbeitet Typst mit einer modernen Rendering-Engine, die konsistente Ergebnisse über verschiedene Plattformen hinweg sicherstellt. Durch diese Eigenschaften bietet Typst einen Ansatz, der sowohl Einsteigerinnen als auch erfahrenen Nutzerinnen einen produktiveren Schreibfluss ermöglicht. Während LaTeX zweifellos weiterhin für bestimmte Spezialanwendungen relevant bleibt, zeigt sich zunehmend, dass Typst für viele akademische und technische Dokumente eine praktikable, zeitgemäße Alternative darstellt. In zahlreichen Anwendungsfällen kann Typst LaTeX deshalb nicht nur ergänzen, sondern vollständig ersetzen. // ---------- Kapitel 2 ---------- = Grundlagen Einfacher Text, Absätze und Überschriften Die grundlegende Struktur eines Dokuments in Typst wird durch einfachen Text, Absätze und Überschriften definiert. Absätze werden durch eine Leerzeile getrennt, während Überschriften mit dem `=`-Symbol gefolgt von der Überschriftsebene und dem Text erstellt werden. Zum Beispiel erzeugt `= Heading 1` eine Überschrift der ersten Ebene, während `== Heading 2` eine Überschrift der zweiten Ebene erstellt. Diese Struktur ermöglicht eine klare Gliederung des Dokuments und erleichtert die Navigation für den Leser. Typst bietet auch die Möglichkeit, die Formatierung von Text und Absätzen anzupassen. So können beispielsweise Schriftgröße, Zeilenabstand und Einzüge individuell festgelegt werden. Dies ermöglicht es, das Layout des Dokuments an die spezifischen Anforderungen anzupassen und eine ansprechende Präsentation der Inhalte zu gewährleisten. == Listen und Aufzählungen Typst unterstützt verschiedene Arten von Listen#footnote[das ist eine Fußnote], darunter ungeordnete Listen, geordnete Listen und verschachtelte Listen. Ungeordnete Listen werden mit einem Bindestrich `-` erstellt, während geordnete Listen mit einer Zahl gefolgt von einem Punkt `1.` beginnen. Verschachtelte Listen können durch Einrücken erstellt werden, wobei die Einrückungstiefe die Hierarchie der Liste bestimmt. Listen sind ein wichtiges Werkzeug, um Informationen übersichtlich und strukturiert darzustellen, und Typst bietet eine flexible Möglichkeit, diese zu erstellen und anzupassen. 1. Erster Punkt 2. Zweiter Punkt - Unterpunkt 1 - Unterpunkt 2 3. Dritter Punkt == Formeln und mathematische Ausdrücke Typst ermöglicht die einfache Erstellung von mathematischen Formeln und Ausdrücken. Inline-Formeln können durch die Verwendung von Dollarzeichen `$...$` erstellt werden. $E = "mc"^2$ == Tabellen und Abbildungen Typst bietet umfangreiche Möglichkeiten zur Erstellung von Tabellen und Abbildungen. Tabellen können mit der `table`-Umgebung erstellt werden, die es ermöglicht, Spalten, Zeilen und Zellen zu definieren. Abbildungen können mit der `figure`-Umgebung erstellt werden, die es ermöglicht, Bilder einzufügen und zu beschriften. Beide Umgebungen bieten zahlreiche Optionen zur Anpassung des Layouts und der Formatierung, um eine ansprechende Präsentation der Inhalte zu gewährleisten. @tab:test-table #figure( table( columns: (auto, auto), inset: 10pt, align: (x, y) => ( if x > 0 { center } else { left } ), stroke: (x ,y) => if y == 0 { (bottom: 0.5pt + black) }, table.header( [*Medium (Gas)*], [*ECF [kJ/m³]*] ), [#acro("XML")], [529], [N₂ (Stickstoff)], [529], [Vacuum (Vakuum)], [216], ), caption: [Test Table] ) == Referenzen und Zitate Typst bietet eine integrierte Unterstützung für Referenzen und Zitate, die es ermöglicht,Querverweise innerhalb des Dokuments zu erstellen und Literaturangaben zu verwalten. Referenzen können mit der `#label`-Funktion erstellt werden, die es ermöglicht, bestimmte Elemente im Dokument zu kennzeichnen und später darauf zu verweisen. Zitate können mit der `#bibliography`-Funktion erstellt werden, die es ermöglicht, Literaturangaben aus einer BibTeX-Datei zu importieren und im Dokument zu zitieren. Diese Funktionen erleichtern die Erstellung von wissenschaftlichen Arbeiten und ermöglichen eine konsistente und professionelle Präsentation der Inhalte. @DD80 == Code-Listings Typst unterstützt die Einbindung von Code-Listings, um Quellcode oder andere vorformatierte Texte darzustellen. Code-Listings können mit der `code-listing`-Umgebung erstellt werden, was ich dazu gebastelt habe das Code-Listing-Feature zu ermöglichen. Innerhalb dieser Umgebung kann der Quellcode in verschiedenen Programmiersprachen formatiert und mit Syntax-Highlighting versehen werden, um die Lesbarkeit zu verbessern. Code-Listings sind besonders nützlich, um technische Details oder Beispiele in einem Dokument klar und übersichtlich darzustellen. #code-listing( body: " def hello_world(): print('Hello, World!') ", caption: [Python-Beispiel], lang: "python", label: ) Auch hier gibt es links zu diesem Code-Listing, z.B. in der Einleitung: siehe @lst:python-beispiel. == Blider Typst ermöglicht die einfache Einbindung von Bildern in Dokumente. Bilder können mit der `figure`-Umgebung erstellt werden, die es ermöglicht, Bilder einzufügen und zu beschriften. Die `image`-Funktion innerhalb der `figure`-Umgebung ermöglicht die Angabe des Bildpfads sowie optionaler Parameter wie Breite, Höhe und Skalierung. Bilder können auch mit Beschriftungen versehen werden, um sie im Text zu referenzieren. Die Einbindung von Bildern ist ein wichtiger Aspekt bei der Erstellung von ansprechenden und informativen Dokumenten, und Typst bietet eine flexible Möglichkeit, dies zu tun. #figure(caption: [Großers Bild])[ #image("images/großes-bild.png", width: 100%) ] // ---------- Kapitel 3 ---------- = Diagramme mit fletcher // Beispiel eines Diagramms mit fletcher #figure( block(width: 80%)[ #scale(x: 100%, y: 100%)[ #diagram( spacing: (15mm, 10mm), node-stroke: 1pt, edge-stroke: 1.5pt, node((0, 0), [#acro("XML") \ (auch acronyme)], shape: rect, fill: blue.lighten(80%)), edge("-|>"), node((1, 0), [Node], shape: rect, fill: green.lighten(80%)), ) ] ], caption: [Beispiel eines Diagramms mit fletcher] ) Ein einfaches Beispiel für die Erstellung eines Diagramms mit fletcher zeigt Abbildung @fig:diagramm-fletcher. Hier werden zwei Knoten definiert, von denen einer ein Akronym enthält, und durch eine gerichtete Kante verbunden. Die Syntax ist dabei klar strukturiert und ermöglicht eine schnelle Umsetzung von Diagrammen direkt im Dokument. // ---------- Literatur ---------- #bibliography("refs.bib", title: "Literatur", style: "din-1505-2-alphanumeric.csl")