Universe

Create project in app

A configurable template for academic theses at Baden-Wuerttemberg Cooperative State University (DHBW). It provides a customizable title page, front matter, page numbering, bibliography formatting, optional sections, and citation helpers.

This package is an independent project and is not an official template of Baden-Wuerttemberg Cooperative State University.

Eine konfigurierbare Typst-Vorlage für wissenschaftliche Arbeiten an der Dualen Hochschule Baden-Württemberg.

Die Vorlage stellt unter anderem folgende Bestandteile bereit:

  • Titelseite
  • konfigurierbares Seiten- und Textlayout
  • römische und arabische Seitennummerierung
  • Inhaltsverzeichnis
  • Abbildungsverzeichnis
  • Abkürzungsverzeichnis
  • optionaler Sperrvermerk
  • optionaler Gender-Hinweis
  • optionaler Anhang
  • Literaturverzeichnis
  • ehrenwörtliche Erklärung
  • Funktionen für Einzel- und Mehrfachzitate

Diese Vorlage ist ein unabhängiges Projekt und keine offizielle Vorlage der Dualen Hochschule Baden-Württemberg.

Verwendung als Vorlage

In Typst Web kann über Start from template ein neues Projekt auf Basis der Vorlage erstellt werden.

Bei lokaler Verwendung kann ein neues Projekt über die Typst-CLI angelegt werden:

typst init @preview/marius-dhbw-thesis:0.1.0

Verwendung als Package

Das Package kann in einem bestehenden Typst-Projekt importiert werden:

#import "@preview/marius-dhbw-thesis:0.1.0": (
  dhbw-template,
  vglcite,
  vglcites,
)

Grundprinzip

Die Standardeinstellungen befinden sich im Package und müssen nicht verändert werden.

Individuelle Anpassungen erfolgen ausschließlich in der eigenen main.typ:

#show: body => dhbw-template(
  meta: meta,
  acronyms: acronyms,
  bibliography-content: references,
  body,
)

Wenn keine zusätzlichen Parameter angegeben werden, verwendet die Vorlage ihre Standardwerte.

Abweichungen werden als zusätzliche Parameter übergeben:

#show: body => dhbw-template(
  meta: meta,

  font: "Arial",
  font-size: 11pt,

  acronyms: acronyms,
  bibliography-content: references,

  body,
)

Es müssen nur die Parameter angegeben werden, die vom Standard abweichen sollen.

Minimales Beispiel

#import "@preview/marius-dhbw-thesis:0.1.0": (
  dhbw-template,
  vglcite,
  vglcites,
)

#let meta = (
  art-der-arbeit: "Bachelorarbeit",
  titel-der-arbeit: "Titel der wissenschaftlichen Arbeit",

  titel-zeile1: [
    Titel der wissenschaftlichen Arbeit
  ],

  titel-zeile2: [],

  autor-der-arbeit: "Vorname Nachname",
  anschrift-zeile1: "Straße Hausnummer",
  anschrift-zeile2: "PLZ Ort",

  abteilung: "Abteilung",
  firma: "Unternehmen, Ort",
  kurs: "Kurs",
  studienrichtung: "Digital Business Management",
  matrikelnummer: "1234567",

  studiengangsleiter: "Name",
  wiss-betreuer: "Name",
  firmen-betreuer: "Name",

  abgabedatum: "TT.MM.JJJJ",
)

#let acronyms = ()

#let references = bibliography(
  "bibliography.bib",
  title: none,
  style: "harvard-cite-them-right",
)

#show: body => dhbw-template(
  meta: meta,
  acronyms: acronyms,
  bibliography-content: references,
  body,
)

= Einleitung

Hier beginnt die wissenschaftliche Arbeit.

Metadaten

Die Angaben zur Arbeit werden als Dictionary definiert:

#let meta = (
  art-der-arbeit: "Bachelorarbeit",
  titel-der-arbeit: "Titel der Bachelorarbeit",

  titel-zeile1: [
    Titel der Bachelorarbeit
  ],

  titel-zeile2: [],

  autor-der-arbeit: "Vorname Nachname",
  anschrift-zeile1: "Straße Hausnummer",
  anschrift-zeile2: "PLZ Ort",

  abteilung: "Abteilung",
  firma: "Unternehmen, Ort",
  kurs: "Kurs",
  studienrichtung: "Digital Business Management",
  matrikelnummer: "1234567",

  studiengangsleiter: "Name",
  wiss-betreuer: "Name",
  firmen-betreuer: "Name",

  abgabedatum: "TT.MM.JJJJ",
)

Bei langen Titeln kann die Darstellung auf der Titelseite auf zwei Zeilen verteilt werden:

titel-zeile1: [
  Entwicklung einer Anwendung zur automatisierten
],

titel-zeile2: [
  Unterstützung betrieblicher Prozesse
],

titel-der-arbeit enthält unabhängig davon den vollständigen Titel, unter anderem für die ehrenwörtliche Erklärung.

Kapitel erstellen

Der Inhalt beginnt unterhalb des Template-Aufrufs:

#show: body => dhbw-template(
  meta: meta,
  acronyms: acronyms,
  bibliography-content: references,
  body,
)

= Einleitung

== Problemstellung

Hier beginnt der Text.

== Zielsetzung

Hier beginnt der nächste Abschnitt.

= Theoretische Grundlagen

Für Überschriften gilt:

= Kapitel
== Unterkapitel
=== Unterunterkapitel

Die Vorlage gibt keine feste Kapitelstruktur vor.

Kapitel in eigene Dateien auslagern

Kapitel können frei in eigenen Dateien organisiert werden:

chapters/
├── einleitung.typ
├── grundlagen.typ
├── methodik.typ
└── fazit.typ

Einbindung in main.typ:

#include "chapters/einleitung.typ"
#include "chapters/grundlagen.typ"
#include "chapters/methodik.typ"
#include "chapters/fazit.typ"

Die Includes werden unterhalb des Aufrufs von dhbw-template eingefügt.

Format überschreiben

Schriftart ändern

#show: body => dhbw-template(
  meta: meta,
  font: "Arial",
  bibliography-content: references,
  body,
)

Schriftgröße ändern

#show: body => dhbw-template(
  meta: meta,
  font-size: 11pt,
  bibliography-content: references,
  body,
)

Absatzformatierung ändern

#show: body => dhbw-template(
  meta: meta,

  paragraph-justify: true,
  paragraph-leading: 0.9em,
  paragraph-spacing: 1em,

  bibliography-content: references,
  body,
)

Seitenränder ändern

#show: body => dhbw-template(
  meta: meta,

  page-margin: (
    left: 3cm,
    right: 2.5cm,
    top: 2.5cm,
    bottom: 2.5cm,
  ),

  bibliography-content: references,
  body,
)

Überschriften ändern

#show: body => dhbw-template(
  meta: meta,

  heading-numbering: "1.1.1",
  heading-align: left,
  heading-below: 1.2em,

  bibliography-content: references,
  body,
)

Mehrere Einstellungen überschreiben

#show: body => dhbw-template(
  meta: meta,

  font: "Arial",
  font-size: 11pt,

  paragraph-leading: 0.9em,

  page-margin: (
    left: 3cm,
    right: 2.5cm,
    top: 2.5cm,
    bottom: 2.5cm,
  ),

  acronyms: acronyms,
  bibliography-content: references,

  body,
)

Alle nicht angegebenen Parameter behalten ihre Standardwerte.

Logos verwenden

Logos werden nicht durch das Package bereitgestellt. Sie werden im eigenen Projekt gespeichert und als fertiger Bildinhalt an die Vorlage übergeben.

Beispielhafte Projektstruktur:

project/
├── main.typ
├── bibliography.bib
└── img/
    ├── firmenlogo.png
    └── hochschullogo.png

Übergabe an die Vorlage:

#show: body => dhbw-template(
  meta: meta,

  company-logo: image(
    "img/firmenlogo.png",
    height: 2cm,
    fit: "contain",
  ),

  university-logo: image(
    "img/hochschullogo.png",
    height: 2cm,
    fit: "contain",
  ),

  bibliography-content: references,
  body,
)

Falls kein Logo verwendet werden soll:

company-logo: none,
university-logo: none,

Nutzende sind selbst dafür verantwortlich, dass die erforderlichen Nutzungsrechte für verwendete Logos und Bilder vorliegen.

Abkürzungsverzeichnis

Abkürzungen werden in main.typ definiert:

#let acronyms = (
  ("API", "Application Programming Interface"),
  ("BESS", "Battery Energy Storage System"),
  ("IT", "Informationstechnologie"),
  ("PDF", "Portable Document Format"),
)

Die Abkürzungen werden an die Vorlage übergeben:

#show: body => dhbw-template(
  meta: meta,
  acronyms: acronyms,
  bibliography-content: references,
  body,
)

Wenn kein Abkürzungsverzeichnis benötigt wird:

#let acronyms = ()

Sperrvermerk

Ein Sperrvermerk wird als Inhalt definiert:

#let nondisclosure = [
  Der Inhalt dieser Arbeit darf weder als Ganzes noch in
  Auszügen Personen außerhalb des Prüfungs- und
  Evaluationsverfahrens zugänglich gemacht werden, sofern
  keine anders lautende Genehmigung des Unternehmens vorliegt.
]

Übergabe an die Vorlage:

#show: body => dhbw-template(
  meta: meta,
  nondisclosure: nondisclosure,
  bibliography-content: references,
  body,
)

Wenn kein Sperrvermerk benötigt wird:

#let nondisclosure = none

Gender-Hinweis

#let gender-notice = [
  In dieser Arbeit wird aus Gründen der besseren Lesbarkeit
  das generische Maskulinum verwendet. Weibliche und andere
  Geschlechteridentitäten werden ausdrücklich mitgemeint,
  soweit die Aussagen dies erfordern.
]

Übergabe an die Vorlage:

#show: body => dhbw-template(
  meta: meta,
  gender-notice: gender-notice,
  bibliography-content: references,
  body,
)

Wenn kein Gender-Hinweis benötigt wird:

#let gender-notice = none

Anhang

Der Anhang kann direkt in main.typ definiert werden:

#let appendix = [
  = Ergänzende Auswertungen

  Hier stehen die ergänzenden Inhalte.
]

Übergabe an die Vorlage:

#show: body => dhbw-template(
  meta: meta,
  appendix: appendix,
  bibliography-content: references,
  body,
)

Der Anhang kann alternativ aus einer eigenen Datei geladen werden:

#let appendix = [
  #include "appendix/anhang.typ"
]

Wenn kein Anhang benötigt wird:

#let appendix = none

Literaturverzeichnis

Alle Quellen werden im eigenen Projekt in einer BibLaTeX-Datei verwaltet:

bibliography.bib

Beispiel:

@book{mustermann2025,
  author    = {Mustermann, Max},
  title     = {Grundlagen der Digitalisierung},
  year      = {2025},
  publisher = {Beispielverlag}
}

Die Bibliografie wird in main.typ erstellt:

#let references = bibliography(
  "bibliography.bib",
  title: none,
  style: "harvard-cite-them-right",
)

Anschließend wird sie an die Vorlage übergeben:

#show: body => dhbw-template(
  meta: meta,
  bibliography-content: references,
  body,
)

Ein anderer Zitierstil kann direkt in main.typ angegeben werden:

#let references = bibliography(
  "bibliography.bib",
  title: none,
  style: "apa",
)

Wenn kein Literaturverzeichnis ausgegeben werden soll:

bibliography-content: none,

Quellen zitieren

Das Package stellt die Funktionen vglcite und vglcites bereit.

Einzelzitat mit Fundstelle

#vglcite(
  <mustermann2025>,
  loc: [S. 10],
)

Erwartete Ausgabe:

(vgl. Mustermann, 2025, S. 10)

Einzelzitat ohne Fundstelle

#vglcite(<mustermann2025>)

Jahr überschreiben

Für Quellen ohne angegebenes Jahr:

#vglcite(
  <webseite>,
  year-override: [o. J.],
)

Jahreszusatz manuell angeben

#vglcite(
  <mustermann2025>,
  year-suffix: [a],
  loc: [S. 10],
)

Erwartete Ausgabe:

(vgl. Mustermann, 2025a, S. 10)

Mehrfachzitat

#vglcites(
  (<mustermann2025>, [S. 10]),
  (<beispiel2024>, [S. 25–27]),
)

Die Tupelform ist wie folgt aufgebaut:

(
  <quellenschluessel>,
  [Fundstelle],
  [überschriebenes Jahr],
  [Jahreszusatz],
)

Alle Angaben nach dem Quellenschlüssel sind optional.

Beispiel:

#vglcites(
  (<quelle1>, [S. 10]),
  (<quelle2>, none, [o. J.]),
  (<quelle3>, [S. 20], none, [a]),
)

Automatische Jahreszusätze

Jahreszusätze können im eigenen Projekt über einen Resolver definiert werden:

#let my-year-suffix(key) = {
  if key == <mustermann2025a> {
    [a]
  } else if key == <mustermann2025b> {
    [b]
  } else {
    none
  }
}

Verwendung beim Einzelzitat:

#vglcite(
  <mustermann2025a>,
  loc: [S. 10],
  year-suffix-resolver: my-year-suffix,
)

Verwendung beim Mehrfachzitat:

#vglcites(
  (<mustermann2025a>, [S. 10]),
  (<mustermann2025b>, [S. 20]),
  year-suffix-resolver: my-year-suffix,
)

Automatische Kurztitel

Kurztitel können ebenfalls im eigenen Projekt definiert werden:

#let my-short-title(key) = {
  if key == <unternehmenUeberUns> {
    [Über uns]
  } else if key == <unternehmenKennzahlen> {
    [Kennzahlen]
  } else {
    none
  }
}

Verwendung:

#vglcite(
  <unternehmenKennzahlen>,
  year-override: [o. J.],
  short-title-resolver: my-short-title,
)

Erwartete Ausgabe:

(vgl. Unternehmen, o. J., „Kennzahlen“)

Jahreszusätze und Kurztitel können kombiniert werden:

#vglcite(
  <unternehmenKennzahlen>,
  year-override: [o. J.],
  year-suffix-resolver: my-year-suffix,
  short-title-resolver: my-short-title,
)

Bilder einfügen

Bilder können im eigenen Projekt gespeichert und mit figure eingefügt werden:

#figure(
  image(
    "img/prozessdarstellung.png",
    width: 80%,
  ),
  caption: [Darstellung des untersuchten Prozesses],
)

Beschriftete Abbildungen werden automatisch in das Abbildungsverzeichnis aufgenommen.

Eigene Funktionen ergänzen

Zusätzliche Funktionen werden im eigenen Projekt definiert. Der Package-Code muss dafür nicht verändert werden.

Beispiel:

#let hinweis(body) = block(
  fill: luma(240),
  stroke: 0.5pt + gray,
  inset: 8pt,
  body,
)

Verwendung:

#hinweis[
  Dies ist ein zusätzlicher Hinweis.
]

Weitere Importe, Variablen und Inhalte können ebenfalls frei ergänzt werden.

Optionen deaktivieren

Einzelne Bestandteile können über die entsprechenden Parameter deaktiviert werden:

#show: body => dhbw-template(
  meta: meta,

  show-table-of-contents: false,
  show-figure-outline: false,
  show-declaration: false,

  nondisclosure: none,
  gender-notice: none,
  appendix: none,
  bibliography-content: none,

  body,
)

Kompilieren

Das Dokument kann über die Typst-Web-App oder lokal über die Typst-CLI kompiliert werden:

typst compile main.typ

Standardmäßig wird eine main.pdf erzeugt.

Für die kontinuierliche Vorschau bei lokaler Bearbeitung:

typst watch main.typ

Öffentliche Funktionen

Das Package exportiert folgende Funktionen:

dhbw-template

Erzeugt das vollständige Dokumentlayout und nimmt den Inhalt der Arbeit als letztes positionsbezogenes Argument entgegen.

Grundlegender Aufruf:

#show: body => dhbw-template(
  meta: meta,
  body,
)

vglcite

Erzeugt ein einzelnes indirektes Zitat:

#vglcite(
  <quellenschluessel>,
  loc: [S. 10],
)

vglcites

Erzeugt ein indirektes Mehrfachzitat:

#vglcites(
  (<quelle1>, [S. 10]),
  (<quelle2>, [S. 20]),
)

Hinweise

  • Die Einhaltung der jeweils gültigen Hochschul- und Prüfungsvorgaben muss vor der Abgabe eigenständig geprüft werden.
  • Die Vorlage erhebt keinen Anspruch auf formale Vollständigkeit für alle Studiengänge oder Standorte.
  • Verwendete Logos und Bilder müssen durch die Nutzenden selbst bereitgestellt werden.
  • Für Logos, Bilder, Literatur und sonstige Inhalte müssen die jeweiligen Nutzungsrechte beachtet werden.
  • Verfügbarkeit und Darstellung einer Schriftart können von der verwendeten Typst-Umgebung abhängen.

Lizenz

Dieses Projekt steht unter der MIT-Lizenz. Weitere Informationen befinden sich in der Datei LICENSE.