Stranger Than Usual

Positivprojekt 13: Pandoc

Markdown oder besser die standardisierte Form, Commonmark ist doch etwas Feines. Es ist textbasiert, arbeitet daher sehr gut mit den üblichen Versionsverwaltungstools (z.B. git) zusammen. Die meiste Syntax ist einfach zu merken. Es ist mittlerweile recht weit verbreitet, github und stackoverflow zum Beispiel benutzen markdown.

Der meiner Ansicht nach größte Vorteil gegenüber anderen Auszeichnungssprachen? Es ist auch als Rohtext sehr schön formatiert lesbar, im Gegensatz z.B. zu HTML oder LaTex. Das macht es zwar auch weniger mächtig, aber für mehr oder weniger einfache Textstrukturen reicht es vollkommen aus. Dieses Blog hier nutzt zum Beispiel Commonmark (Stand April 2021, hier auch vielen Dank an das schöne [pulldown-cmark-crate)[https://crates.io/crates/pulldown-cmark]).

Pandoc

Aber was, wenn man nur mal eben eine Markdown-Datei in ein HTML-Dokument umwandeln muss? Oder in ein PDF? Oder (brrr) ein MS-Word-Dokument?

Nun, dafür gibt es Pandoc. Pandoc ist ein in Haskell geschriebenes Tool zum Konvertieren von Dokumenten (kann also noch deutlich mehr als im letzten Absatz angedeutet und ist ziemlich flexibel dabei.

Also, ein PDF aus einer Markdown-Datei?

pandoc --from commonmark --to pdf example.md -o example.pdf

Einfach genug. Natürlich gibt es da noch ein paar Optionen, um dem Ergebnis den Feinschliff zu verpassen, da muss man ein bisschen im Netz suchen oder die Doku durchlesen. Das --from commonmark kann man auch weglassen, dann nimmt pandoc aber vermutlich nicht commonmark, sondern einen anderen Markdown-Dialekt.

Wie steht es mit einer HTML-Datei? Hier gibt es eine kleine Falle, denn Folgendes gibt kein vollständiges HTML-Dokument aus, sondern nur den HTML-Schnipsel, der aus der Markdown-Datei entsteht:

pandoc --from commonmark --to html5 example.md -o example.html

Hat auch seine Anwendungszwecke, aber für alleinstehende Dokumente macht man lieber das hier:

pandoc --standalone --from commonmark --to html5 example.md -o example.html

Nun gibt einem das aber auch eine Warnung aus, à la

[WARNING] This document format requires a nonempty <title> element.
  Defaulting to 'example' as the title.
  To specify a title, use 'title' in metadata or --metadata title="...".

Für HTML brauchen wir also ein Titel-Tag, und Pandoc weiß nicht so recht, was es da reinschreiben soll. Man kann in Pandoc auf verschiedene Arten Metadaten angeben, die einfachste steht dabei: Über den --metadata title="..."-Parameter. Alternativ kann man das in einer gesonderten Datei als json oder yamle ablegen (--metadata-file=...) oder es im Header der Quelldatei angeben (dann muss beim --from noch die entsprechende Erweiterung angegeben werden, sucht euch das selber zusammen).

Wenn man mit dem Default-HTML-Template von pandoc nicht zufrieden ist, kann man auch selber eins anlegen, und es dann mit --template=... übergeben. Das Template-Format ist in der Doku beschrieben.

Andere Formate, wie zum Beispiel MS-Word-Docx, Epub in verschiedenen Versionen, LaTex und mehr, sind auch verfügbar. In welche Richtungen mal alles konvertieren kann weiß ich nicht, aber von Markdown kann sollte man in die meisten oder alle konvertieren können (wiederum weil Markdown so eingeschränkt ist). Ihr braucht mal schnell ein epub? Kein Problem. Und alles freie Software, GPL lizensiert.