Pandoc ist ein quelloffener, universaler Dokument-Konverter, geschrieben in Haskell von John MacFarlane. Pandoc parst sein Input-Format in einen internen abstrakten Syntaxbaum (AST) und rendert daraus eines der vielen Output-Formate. Diese Architektur ist der Grund, warum Pandoc fast jedes Quell-/Ziel-Paar unterstützt — und warum sich der Output über Templates und Lua-Filter sehr fein steuern lässt.
Pandoc ist seit 2006 aktiv und das Standard-Werkzeug, wenn ein Markdown-Dokument zu LaTeX, ein DOCX zu Markdown oder ein RST zu HTML konvertiert werden soll.
Wichtige Eingabe- und Ausgabeformate
| Eingabe | Ausgabe |
|---|---|
| Markdown (CommonMark, GFM, Pandoc-Markdown) | dito plus alle Output-Formate |
| LaTeX | HTML, PDF (via LaTeX/Typst/Wkhtmltopdf), DOCX, EPUB |
| DOCX, ODT, RTF | Markdown, HTML, LaTeX, … |
| HTML | Markdown, DOCX, EPUB, JATS, … |
| MediaWiki, DokuWiki, Textile, Org-mode, RST | Markdown, HTML, … |
| JATS, BITS, TEI Lite | Markdown, HTML, DOCX, EPUB |
Jupyter Notebook (.ipynb) | Markdown, HTML, LaTeX |
Vollständige Liste: pandoc --list-input-formats und --list-output-formats.
Grundbenutzung
# Format-Erkennung über Datei-Endung
pandoc paper.md -o paper.docx
# explizit
pandoc -f markdown -t latex paper.md -o paper.tex
# PDF (benötigt LaTeX-Distribution wie TeX Live oder MacTeX)
pandoc paper.md -o paper.pdf
# PDF über Typst (ab Pandoc 3.x)
pandoc paper.md -o paper.pdf --pdf-engine=typst
# Mehrere Quellen zu einem Dokument zusammenfassen
pandoc kap1.md kap2.md kap3.md -o buch.docx
# Standalone-Output mit eigenem Template
pandoc paper.md --template=mein.tex -o paper.tex --standalone
Pandoc-Markdown-Erweiterungen
Pandoc kennt einen reichen Markdown-Dialekt mit nützlichen Ergänzungen über CommonMark hinaus:
- YAML-Header für Metadaten (Titel, Autor, Datum, etc.)
- Definition Lists (
Begriff\n: Definition) - Fussnoten mit
[^1] - Citations mit
[@key2024](gegen--bibliography=ref.bib) - Tabellen in mehreren Stilen (Pipe, Grid, Multiline)
- Math in
$inline$und$$display$$(LaTeX-Syntax) - Raw-HTML / -LaTeX Blöcke (z. B.
\begin{equation}) - Smart-Punctuation (
--smartmacht aus--Gedankenstriche, etc.) - Header-Identifier
# Titel {#mein-anchor}und Cross-Refs
Templates
Templates steuern die finale Ausgabe (Standalone-Mode) — etwa eine LaTeX-Präambel oder ein HTML-Gerüst. Default-Templates anzeigen:
pandoc -D html # Default-HTML-Template
pandoc -D latex # Default-LaTeX-Template
Eigene Templates platziert man unter ~/.local/share/pandoc/templates/ oder gibt sie per --template=… an. Variablen referenziert man mit $variable$, Schleifen mit $for(authors)$ … $endfor$, Conditionals mit $if(toc)$ … $endif$.
CSL-Bibliographien
Pandoc nutzt CSL (Citation Style Language) für formatierte Zitationen:
pandoc paper.md \
--bibliography=lit.bib \
--csl=chicago-author-date.csl \
--citeproc \
-o paper.pdf
Die .bib kann BibTeX, BibLaTeX, CSL-JSON oder CSL-YAML sein. Tausende fertige .csl-Stile gibt es im Zotero Style Repository.
Lua-Filter
Lua-Filter manipulieren den AST zwischen Parsing und Rendering — z. B. um alle Bilder mit Captions zu versehen, Custom-Blocks in HTML-Klassen zu übersetzen oder externe Daten einzufügen:
pandoc paper.md --lua-filter=meine.lua -o paper.html
Ein minimales Filter, das alle Strong-Elemente in Caps verwandelt:
function Strong(el)
return pandoc.SmallCaps(el.content)
end
Es gibt eine wachsende Sammlung fertiger Filter — z. B. pandoc-include-code, pandoc-crossref, diagram-generator.