6  Quarto

Quarto ist ein Open-Source-Publishing-System, das speziell für wissenschaftliche Dokumentation, Berichte und interaktive Notebooks entwickelt wurde. Es bietet viele Funktionen für die Erstellung professioneller, reproduzierbarer, dynamischer Dokumente.

6.1 Was ist Quarto?

Quarto ermöglicht das Schreiben von Dokumenten mit einer Mischung aus Text, Code und mathematischen Formeln. Aber auch das Erstellen von einfachen Tabellen oder das Einbinden von Grafiken ist ohne Weiteres möglich. Es unterstützt verschiedene Programmiersprachen, darunter R, Python und Julia. Quarto eignet sich besonders gut für:

  • Technische Berichte: Formatierte Dokumente mit wissenschaftlichen Berechnungen und Visualisierungen.
  • Wissenschaftliche Arbeiten: Integration von Zitaten, Bibliographien und formatierten Texten.
  • Präsentationen: Erstellung von HTML-, PDF- und PowerPoint-Präsentationen.
  • Blogs: Unterstützung für statische Websites mit integriertem Code.
  • Interaktive Dokumente: Möglichkeit, Widgets und dynamische Elemente in HTML-Dokumenten einzubinden.

Und wieso Quarto?

Einerseits ist es recht einfach Quarto zu nutzen. Es basiert auf R-Markdown und kann ‘einfach so’, also ohne weitere Kenntnisse genutzt werden um Dokumente zu erzeugen. Anders als bei Word oder vergleichbaren Textverarbeitungsprogrammen können wir in Quarto sofort R-Coder einbinden und diesen – sofern wir wollen – ausführen und das Ergebnis anzeigen lassen. Außerdem können Ergebnisse aus Rechnungen, die mit R gemacht wurden direkt in einen Text eingearbeitet werden. Andererseits ist eine Dokumentation von R-Code einfacher als in einer reinen .R-Datei.

Damit ist Quarto bestens geeignet um Übungsaufgaben oder Mitschriften während der Übung und/oder der Vorlesung zu machen.

Ein weiterer großer Vorteil ist, dass Quarto auch bestens geeignet ist um komplexere Dokumente wie Präsentationen oder gar Bachelorarbeiten zu schreiben, insbesondere wenn Daten verarbeitet und Ergebnisse, die auf den Daten basieren, gezeigt werden sollen.

6.2 Installation von Quarto

6.2.1 Windows & Mac

  • Lade das Installationsprogramm von der offiziellen Quarto-Website herunter.

  • Installiere Quarto mit den Standardoptionen.

  • Überprüfe die Installation im Terminal oder der Eingabeaufforderung mit:

    quarto --version
  • Falls RStudio bereits installiert ist, erkennt es Quarto automatisch.

6.2.2 Linux

  • Lade das Installationspaket von quarto.org herunter.

  • Installiere das Paket entsprechend deiner Distribution:

    sudo dpkg -i quarto-*.deb  # Debian/Ubuntu
    sudo rpm -i quarto-*.rpm   # Fedora/RHEL
  • Überprüfe die Installation:

    quarto --version

6.3 Quarto in RStudio nutzen

Wenn Quarto installiert ist, kann Quarto in RStudio benutzt werden.

6.3.1 Erstellen eines neuen Quarto-Dokuments

Man kann mit RStudio direkt Quarto-Dateien erstellen. Diese haben immer die Endung .qmd, was für Quarto MarkDown steht:

  • Öffne RStudio und wähle File > New File > Quarto Document.
  • Wähle ein Ausgabeformat (HTML, PDF, Word, etc.). Um ein pdf-Dokument zu erstellen muss das R-Paket tinytex installiert sein oder alternativ eine LaTeX-Distribution.
  • Klicke auf Create, um das Dokument zu öffnen.
  • Das Dokument enthält eine Kopfzeile (YAML-Header), in der Metadaten wie Titel, Autor und Ausgabeformat definiert werden, sowie ein paar Beispielzeilen.

6.4 Aufbau eines Quarto-Dokuments

Ein typisches Quarto-Dokument besteht aus:

  • YAML-Header: Enthält Metadaten wie Titel, Autor, Datum und Ausgabeformat.
  • Markdown-Text: Normaler Text mit Markdown-Formatierung für Überschriften, Listen, Tabellen und mehr.
  • Code-Blöcke: Integration von R-, Python- oder Julia-Code zur Analyse und Visualisierung.
  • Mathematische Formeln: Unterstützung für LaTeX-Formeln und Gleichungen.

6.4.1 Der YAML-Header

Der YAML-Header enthält alle wichtigen Informationen über das Dokument:

  • Metadaten, wie Autor, Titel, Datum, E-Mailadresse etc.
  • Ausgabeformat (html, doc, pdf, …)
  • Ausgabeoptionen,

Zwei Beispiele für einen YAML-Header

Ein einfacher YAML-Header (html)

---
title: "Meine Demo"        # Titel des Dokuments
author: "Max Mustermann"   # Name des Autors
date: "2025-11-18"      # aktuelles Datum mit R generiert, 
                           # alternativ in der Form "YYYY-MM-DD"
output: html_document      # Ausgabe ist eine html-Datei
---

Ein etwas umfangreicherer Header (pdf und doc)

---
title: "Mein Bericht"                      # Titel des Dokuments
subtitle: "Eine kleine Demonstration"      # Untertitel des Dokuments
author:                                    # Autor  
  - name: "Max Mustermann"                 # mit Organisation
    affiliation: "TH Beispielstadt"        # und E-Mail  
    email: "max@uni.de"
date: "18.11.2025" # Datum in Form DD.MM.YYYY

output:  
  pdf_document:                            # pdf-Format
    toc: true                              # mit Inhaltsverzeichnis   
    toc_depth: 2                           # Tiefe im Inhalsverzeichnis: 2
    number_sections: true                  # Kapitel werden nummeriert
    latex_engine: xelatex                  # Latex-Engine
  word_document:                           # für doc-Format
    toc: true                              # mit Inhaltsverzeichnis        
    reference_docx: "mein_template.docx"   # Einbinden eines doc-Templates

geometry: "margin=2.5cm"                   # Seitenrand
fontsize: 11pt                             # Schriftgröße
linestretch: 1.2                           # Zeilenabstand
---

Für ein pdf-Dokument muss eine Latex-Distribution wie MikTeX (Windows), Tex Live (Linux) oder MacTeX (macOS) installiert sein. Alternativ kann man eine kompakte (nicht ganz so mächtige, aber vermutlich ausreichende) Version über R installieren:

install.packages("tinytex")
tinytex::install_tinytex()

revels.js (Vortrag)

Als letztes Beispiel noch ein Beispiel für einen Vortrag

---
title: "Vortragstitel"
subtitle: "Der Untertitel"
author: "Max Mustermann"
lang: de
date: 2025-08-31
format:
  revealjs:
    date-format: "DD.MM.YYYY"     # Format des Datums
    smaller: true                 # Schriftgröße ein wenig kleiner 
    theme: default                # hier gibt es 10 verschiedene Layouts
    slide-number: true            # Seiten sind numeriert
    chalkboard: true              # ein Tafel kann eingeblendet werden
    menu: true                    # Menu
    toc: false                    # Kein Inhaltsverzeichnis
    preview-links: auto           # Vorschau bei Links  
    logo: Logo.png                # Logo unten rechts  
    css: styles.css               # ein css-Datei in denen Farben, Größen etc. 
                                  # definiert werden   
    footer: "Titel des Vortrags"  # Mitte unten auf jeder Seite eingeblendet
---

In dieser Reveal.js Demo kann man sehen, was das Format alles kann. Neue Folien werden mit # oder ## gefolgt von der Überschrift der Folie gestartet.

In dieser Gallerie kann man sich sowohl die Möglichkeiten von Quarto als auch die zugehörigen Codes anschauen (und sich inispirieren lassen).

6.4.2 Markdown

Nach dem YAML-Header beginnt das eigentliche Dokument. In diesem kann einfacher Text geschrieben werden. Wir wollen in dem Kapitel einige der häufig vorkommenden Markdown

Texthervorhebungen

Markdown-Syntax Ausgabe
*kursiv*, **fett**, ***fett kursiv***
kursiv, fett, fett kursiv
hochgestellt^2^ / tiefgestellt~2~
hochgestellt2 / tiefgestellt2
~~durchgestrichen~~
durchgestrichen
`Code im Text`
Code im Text

Überschriften

Markdown-Syntax Ausgabe
# Überschrift 1

Überschrift 1

## Überschrift 2

Überschrift 2

### Überschrift 3

Überschrift 3

#### Überschrift 4

Überschrift 4

##### Überschrift 5
Überschrift 5
###### Überschrift 6
Überschrift 6

Listen

Markdown-Syntax Ausgabe
* ungeordnete Liste
  + Unterpunkt 1
  + Unterpunkt 2
    - Unter-Unterpunkt 1
  • ungeordnete Liste
    • Unterpunkt 1
    • Unterpunkt 2
      • Unter-Unterpunkt 1
*   Punkt 2

    Fortsetzung (4 Leerzeichen)
  • Punkt 2

    Fortsetzung (4 Leerzeichen)

1. geordnete Liste
2. Punkt 2
   i) Unterpunkt 1
      A.  Unter-Unterpunkt 1
  1. geordnete Liste
  2. Punkt 2
    1. Unterpunkt 1
      1. Unter-Unterpunkt 1
1. geordnete Liste
2. Punkt 2

   ```python
   print("Hallo, Welt!")
   ```

   A.  Unter-Unterpunkt 1
  1. geordnete Liste

  2. Punkt 2

    print("Hallo, Welt!")
    1. Unter-Unterpunkt 1
- [ ] Aufgabe 1
- [x] Aufgabe 2

Hinweise:

  • Anders als bei anderen Markdown-Renderern (z. B. Jupyter oder GitHub) benötigen Listen in Quarto eine Leerzeile vor der Liste. Andernfalls wird sie als normaler Text in einer Zeile dargestellt.

  • Eine noch ausfürhlichere Liste findet man auf der Quarto-Seite

6.4.3 R-Code

Man kann R-Code (und analog auch Python, Julia oder Observable) in ein Quarto-Dokument einbauen. Die sogenannten Chunks werden wie folgt geschrieben

```{r}
#| echo: false

library(pacman)
p_load(tidyverse, palmerpenguins)

penguins |> ggplot(aes(x=bill_length_mm,
                        y=body_mass_g , 
                        color = species)) + 
     geom_point()
```
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

Links ist der Code in der .qmd-Datei zu sehen. Rechts sieht man die Ausgabe: in diesem Fall ist es nur die erzeugte Grafik, da mit #| echo: false die Ausgabe des Codes unterdrückt wird. Allerdings wird noch eine Warnung ausgegeben, da Punkte im Streudiagramm aufgrund von fehlenden Werten (NAs) nicht eingezeichnett werden können. Ob der Code angezeigt oder ausgeführt wird, ob Warnungen oder Fehlermeldungen gezeigt werden oder nicht, welche Größe die ausgegebene Grafik hat, etc. kann mit Hilfe von Chunk-Optionen gesteuert werden. Möchte im im obigen Beispiel die Grafik, den Code, aber keine Warnung angezeigt haben und soll die Grafik auch noch breiter und weniger hoch dargestellt werden, so kann man beispielsweise angeben. Desweiteren bekommt die Grafik einen Namen, so dass man auf diese im Text verweisen kann und eine Caption.

```{r}
#| warning: false
#| fig.width: 9
#| fig.height: 3
#| label: PinguineStreudiagramm
#| fig.cap: Streudiagramm zu den Palmer-Pinguinen.

library(pacman)
p_load(tidyverse, palmerpenguins)
 
penguins |> ggplot(aes(x=bill_length_mm,
                        y=body_mass_g , 
                        color = species)) + 
     geom_point()
```

Dies liefert:

library(pacman)
p_load(tidyverse, palmerpenguins)
 
penguins |> ggplot(aes(x=bill_length_mm,
                        y=body_mass_g , 
                        color = species)) + 
     geom_point()
Abbildung 6.1: Streudiagramm zu den Palmer-Pinguinen.

Die wichtigsten Optionen sind:

Option Beschreibung Standard
echo Code anzeigen (TRUE / FALSE / "fenced" / "code"). TRUE
eval Code ausführen oder überspringen. TRUE
include Ob das Ergebnis im Output enthalten ist (Code + Ausgabe). TRUE
error Fehler anzeigen oder unterdrücken. FALSE
warning Warnungen anzeigen. TRUE
message Nachrichten anzeigen. TRUE
cache Ergebnisse zwischenspeichern (macht Rendering schneller). FALSE
fig.show Kontrolle über die Anzeige der Figuren ("asis", "hold", "animate"). "asis"
fig.width Plotbreite in Zoll. 7
fig.height Plothöhe in Zoll. 5
fig.asp Seitenverhältnis (Höhe = fig.width * fig.asp).
fig.align Ausrichtung: "default", "left", "center", "right". "default"
fig.cap Bildunterschrift.
fig.alt Alternativtext (z. B. für Barrierefreiheit).
out.width Ausgabegröße, z. B. "70%" oder "300px".
out.height Ausgabehöhe.
results Kontrolle über Textausgabe ("markup", "asis", "hold", "hide"). "markup"
collapse Code + Ausgabe zusammenfassen. FALSE
comment Präfix für Ausgabezeilen. "##"
tbl-cap Tabellenüberschrift (statt fig.cap).
code-fold Code einklappbar machen (TRUE, "show", "hide").
code-summary Text für einklappbaren Codeblock.
code-overflow Scrollverhalten ("scroll", "wrap"). "scroll"
code-line-numbers Zeilennummern im Code anzeigen. FALSE
code-tools Buttons für „Copy“, „Collapse“ usw. einblenden.
label Chunk-Name (für Referenzen / Caching). -

6.5 Rendern des Dokuments

Nachdem Erstellen eines Dokuments muss das Dokument erzeugt werden. Dies kann auf verschiedene Arten geschehen:

  • Bearbeitet man eine .qmd-Datei, so gibt es im RStudio die Taste Render oberhalb des Texteditors. Drückt man diese, so wird das Dokument gespeichert und das Dokument wird erzeugt.
  • Es gibt ein Paket quarto, das die Bedienung ein wenig vereinfacht, insbesondere wenn mann komplexere Dokumente erstellt, die aus vielen Quarto-Dateien bestehen.

Alternativ kann das Paket natürlich auch über Packages > Install im RStudio installiert werden. In der R Konsole kann nachdem man das Paket geladen hat eine Datei gerendert werden:

library(quarto)
quarto_render("mein_dokument.qmd")
  • In einer Shell kann Quarto auch direkt ausgeführt werden
quarto render mein_dokument.qmd

Je nach gewähltem Ausgabeformat wird eine html-, pdf-, Word-Datei, etc. generiert.

6.6 Erweiterte Funktionen von Quarto

Neben den oben aufgeführten Funktionen gibt es unzählige weitere Möglichkeiten, die Quarto zur Verfügung stellt, allerdings sprengt das den Rahmen dieser Einführung:

  • Tabellen
  • Zitieren und Bibliographien: Quarto ermöglicht das Einfügen von Literaturverweisen durch BibTeX-Dateien:
  • Erzeugen von Spalten
  • Callouts (zum Beispiel sind in diesem Skript die Definitionen und Sätze mit Hilfe von callouts gemacht)
  • Referenzen innerhalb eines Dokuments

und vieles mehr.

Außerdem können mathematische Formeln durch Latex-Code erzeugt werden.

6.7 Nützliche Ressourcen

6.8 Vorlagen