Dokumente schreiben, the nerdy way.

Ich mag keine WYSIWYG-Textverarbeitungsprogramme. Ob es nun Word oder einer der zig Alternativen ist, ich kann sie nicht ausstehen. Word nutzt ein proprietäres Dateiformat. Lässt sich zwar beispielsweise mit LibreOffice öffnen, sieht dann aber besch… aus.

Verschiedene Schriftarten in LibreOffice
Alleine beim Fontrendering sträuben sich mir die Nackenhaare.

Word hat zwar eine echt schöne UI und viele, Funktionen. Aber ich hab die eigentlich nie gebraucht. Klar, für optische Anpassungen hab ich eine Menge Formatierungsmöglichkeiten und Dokumente können optisch damit echt aufgewertet werden. Aber im Endeffekt verliere ich das Hauptziel aus den Augen: den Inhalt. Für meine Facharbeit habe ich damals schon LaTeX genutzt. War ich im Grunde auch zufrieden mit, nur hatte LaTeX ein Schönheitsmanko. Im wahrsten Sinne des Wortes. In den default-Einstellungen ist das resultierende PDF-File an den Rändern nicht nur eine unnötige Verschwendung von Papier, nein, die Schrift sieht auch nicht gerade blendend aus.

Screenshot eines LaTeX-Dokuments mit den Standard-Einstellungen
Ich finde LaTeX-Dokumente per default einfach nur hässlich.

Zum Glück gibt es da Abhilfen. In LaTeX lassen sich verschiedene packages einlesen, die dann gewisse Funktionen übernehmen. Und da liegt der Haken: Ich müsste bei vielen Dokumenten für jedes einzelne den gleichen Code übernehmen. Also Schriftart setzen, Abstände anpassen, PDF-Metadaten schreiben, all dieser ganze Klumpatsch müsste in jedes LaTeX-Dokument hinein. Sicher, damit gewähre ich zwar, dass das Gegenüber auch das Dokument lesen und kompilieren kann. Aber ich kenne keinen in meinem Bekanntenkreis (naja fast, eine Ausnahme) außer mir, der bei LaTeX nicht gleich an Sexspielzeug denkt. Spaß beiseite. Die Syntax ist im Vergleich zum WYSIWYG-Editor deutlich komplexer, LaTeX lässt sich zudem nicht so einfach unter Windows einrichten und einen vernünftigen Editor gibt es für Windows eben auch nicht. Zumindest keinen, der sich optisch gut integriert. Ich selbst war es zudem nach einiger Zeit leid, für jeden Abschnitt \section{<Name des Abschnitts>} zu schreiben und für kursiv gedruckten Text \textit{<Kursiv-Text>} zu schreiben. Da gefällt mir etwa die Markdown-Syntax doch deutlich mehr. # für Überschriften und *text* für kursiven Text sind einfach deutlich besser zu lesen.

Vor knapp vier Monaten ist durch meine Twitter-Timeline ein Link zu den LaTeX-Boilerplates von mrzool gewandert. Den habe ich rein zufällig wiedergefunden und mich gleich ein wenig damit auseinandergesetzt. Das Konzept ist schnell erklärt: Es wird das Dokument in einer Markdown-Datei niedergeschrieben, einige Metadaten am Anfang gesetzt (Autor, Datum, Titel, etc.) und das ganze dann über pandoc in ein ansehnliches PDF-Dokument basierend auf einer LaTeX-Vorlage konvertiert. Auf der verlinkten Webseite wurden als Beispiel ein Brief, ein Lebenslauf und eine Rechnung genommen. Zumindest aus typographischen Aspekten sehen die Enddokumente doch sehr strukturiert und einfach nur schön aus. Wer sich näher mit Typografie beschäftigen möchte, dem kann ich als Bettlektüre Butterick's Practical Typography empfehlen.

Für meine Schularbeiten habe ich mir kurzerhand das Brief-Template geschnappt und an meine Bedürfnisse angepasst. Die Anforderungen sahen wie folgt aus:

Aufbau eines Beispieldokuments

---
title: My title
# author: William Shakespeare
# date: 29-02-2016
# lang: german
---

Lorem ipsum **dolor** sit *amet*.

Am Anfang werden die Metadaten des Dokuments festgelegt, also Titel, Autor, Datum und Sprache. Nur der Titel ist verpflichtend, alle anderen Parameter können ausgelassen werden. In diesem Fall wird also der Autor nicht angezeigt, als Datum wird der heutige Tag genommen und als Sprache ist Englisch konfiguriert. Alles andere danach ist dann der Inhalt des Dokuments, geschrieben in Markdown.

Installation von Pandoc

Die eierlegende Wollmilchsau namens Pandoc übernimmt gleich die Konvertierung. Für die Installation kann ich Chocolatey empfehlen. Für alle, die Chocolatey noch nicht kennen, es handelt sich um einen Paketmanager wie apt-get für Windows.

Mit folgendem Befehl wird Pandoc installiert und kann direkt über das Terminal genutzt werden, da Chocolatey die Anwendung gleich zum PATH hinzufügt:

choco install pandoc

Installation von LaTeX

Damit Pandoc auch PDF-Dokumente erstellen kann, benötigt es die Power von LaTeX. Unter Windows lässt sich LaTeX nur über MikTeX installieren. Und da Chocolatey uns auch hier die Arbeit abnehmen kann, lassen wir es die Installation übernehmen.

choco install miktex

Fertig. Jetzt kommt eigentlich erst der interessante Teil.

Konfiguration des Systems

LaTeX und Pandoc sind nun installiert. Und die Dokumente könnten auch erstellt werden, es handelt sich ja um reine Textdateien. Dafür reicht die Ausführung des folgenden Befehls:

pandoc "input.md" -o "output.pdf" --template=simple-document.tex --latex-engine=xelatex --smart;

Aber moment mal? --template=simple-document.tex? Das entsprechende Template existiert doch nicht! Richtig. Und wenn man den Parameter auslässt, hat man wieder das übliche LaTeX-Dokument. Pandoc ruft die Templates unter Windows aus %appdata%\pandoc ab. Mit der Tastenkombination Win+R lässt sich schnell nach %appdata% navigieren. In 99,9% aller Fälle ist der Ordner pandoc nicht angelegt. Wie man Ordner anlegt, muss ich hoffentlich nicht weiter erklären. Falls doch, dann bist du hier ganz falsch :D
Anyway, im Endeffekt sollte eine Ordnerstruktur der Form %appdata%\pandoc\templates vorliegen.

Wenn du in genanntem Pfad bist, dann kopiere den Inhalt dieses Gists in eine Datei namens simple-document.tex. Dies wird dann später das Template für die Dokumente darstellen.

Erläuterung der Datei

Zeile 10:
Festlegung der Seitenränder: Dieser beträgt auf allen Seiten 1,25 Zoll (~3,2cm) außer oben, da die Überschrift selbst einen gewissen Abstand nach oben hat.
Zeilen 23-31:
"Parser" für ein selbstdefiniertes Datum. Muss in der Form Tag-Monat-Jahr erfolgen.
Zeilen 40-42:
Nutzen der Pakete chemfig und mhchem. Lediglich für chemisch-relevante Dokumente empfohlen.
Zeilen 60-62:
Festlegen der Schriftarten des Dokumentes. In diesem Fall wird Fira Sans als serifenlose Schrift und Charis SIL als Schrift für den Text verwendet. Beide Schriftarten müssen erst heruntergeladen (beide kostenlos) und installiert werden. Natürlich kann auch jede andere beliebige Schriftart verwendet werden. (aber bitte nicht Arial, Times New Roman oder Comic Sans…)

Ab Zeile 101 beginnt dann mit \begin{document} das – nun ja, das Dokument. In meinem Template wird zuerst der Autor angezeigt, sofern ich diesen angebe. Durch den Befehl \textsc{} wird der Autor in Kapitälchen gerendert, hierbei wird durch \sffamily auf die serifenlose Schriftart verwiesen. Danach wird der Titel des Dokumentes etwas größer und fett gerendert. Der verbleibende Platz in der Zeile wird mit \hfill ausgefüllt, um dann das Datum kursiv zu rendern. Joa. Und zu guter Letzt wird der Inhalt des Dokuments hinzugefügt, durch die spacing-Umgebung mit einem 1,3-fachen Zeilenabstand.

Nutzen des Befehls

Ob du es glaubst oder nicht, im Grunde kann das Tutorial an dieser Stelle beendet werden. Mit dem oben bereits erwähnten Befehl kannst du aus deinen Markdown-Dokumenten dann eine wunderschöne PDF-Datei erstellen.

pandoc "input.md" -o "output.pdf" --template=simple-document.tex --latex-engine=xelatex --smart;

Aber jedesmal den Weg über das Terminal zu gehen und den Befehl einzutippen, ist lästige Arbeit. Kann man das denn nicht vereinfachen?

Support the lazyness!

Wenn ich schon so frage, natürlich. Das Zauberwort heißt PowerShell. Mit einem PowerShell-Skript lässt sich der gesamte Prozess, vom Erstellen bis hin zum Löschen der temporären Dateien beschleunigen.

Das PowerShell-Skript sieht wiefolgt aus:

param (
    [Parameter(Mandatory=$true)][string]$file
)

Write-Host "$file";
if ($file){
    $filename = [System.IO.Path]::GetFileNameWithoutExtension($file);
    $path = [System.IO.Path]::GetDirectoryName($file);

    Write-Host "Creating PDF document for '$filename'…";
    pandoc "$file" -o "$path\$filename.pdf" --template=simple-document.tex --latex-engine=xelatex --smart;

    Write-Host "Cleaning up the directory…";
    rm -Force -Recurse "$path\tex2pdf.*";
}

Aufgerufen wird es folgendermaßen:

create-document.ps1 -file "DATEI.md"

also etwa so:

create-document.ps1 -file "FCK NZS.md"

Nun bringt es natürlich nichts, das Skript im Download-Ordner zu lassen. Es soll ja im ganzen System aufrufbar sein, ohne gleich den gesamten Pfad eingeben zu müssen. Für diese und andere Tools habe ich mir den Ordner C:\Tools angelegt. Darin befinden sich das PowerShell-Skript und in meinem Fall auch andere Programme, wie beispielsweise youtube-dl.

Hinzufügen des Skripts zur PATH-Variable

Schritt 1: Öffne das entsprechende Programm über das Windows-Startmenü.

Das offene Startmenü von Windows mit dem Suchbegriff "Systemumgebungsvariablen bearbeiten".

Schritt 2: Klicke auf den "Umgebungsvariablen"-Button.

Das Systemeigenschaftenfenster.

Schritt 3: Bearbeite die bereits hinterlegte Path-Variable.

Das Umgebungsvariablen-Fenster.

Schritt 4: Tippe den Pfad ein und bestätige mit ENTER.

Das "Umgebungsvariable bearbeiten"-Fenster.

Damit wäre das Aufrufen des Befehls deutlich einfacher geworden und man muss sich auch keine lästige Syntax mehr merken. Es geht aber noch bequemer.

Anpassen der Registry

Als wäre das nicht genug, lässt sich auch noch die Registry so modifizieren, dass ein entsprechender Eintrag beim Rechtsklick im Kontextmenü erscheint.

Noch ein Schritt in Richtung der totalen Faulheit.

Um dir die Konfiguration zu ersparen, habe ich alles in einem Registrierungseintrag zusammengefasst, der hier heruntergeladen werden kann:

Registrierungseintrag downloaden

Leider erlaubt es Windows nicht, das bisherige Kontextmenü einfach nur zu erweitern. Also, es würde schon klappen, allerdings dann mit der Bedingung, dass die Erweiterung dann auf alle Dateitypen zutrifft. Und diesen Weg finde ich reichlich unschön. Daher habe ich mich für den anderen Weg entschieden, nämlich das Überschreiben der Standard-Anwendung für die entsprechenden Dateiendungen (.md,.mdown,.markdown).
Dies bedeutet im Umkehrschluss allerdings auch, dass der Registrierungseintrag nicht einfach übernommen werden kann, so schön das auch wäre. Daher muss die letzte Zeile noch mit dem Pfad des Markdown-Editors der Wahl abgeändert werden:

@="\"E:\\jlnostr\\Downloads\\WriteMonkey\\WriteMonkey.exe\" \"%1\""

kann im einfachsten Falle zu

@="\"notepad" \"%1\""

abgeändert werden. Wichtig ist hierbei, dass \"%1\"" dabei erhalten bleibt. %1 ist der Pfad der Datei und wird als Parameter mitgegeben. Wenn der Registrierungseintrag dann angepasst wurde, kann er mit einem Doppelklick auch installiert werden.

Fazit

Auch unter Windows ist man nicht zwingend an Word und LibreOffice gebunden. Und selbst auf schlechte LaTeX-Editoren kann man gut verzichten und dabei trotzdem ansehnliche Dokumente erstellen. Ist vielleicht ein wenig aufwändig, aber das Ergebnis kann sich sehen lassen. Und mit LaTeX-Kenntnissen sind einem quasi alle Wege offen. Selbst wenn man auf die Word-Funktionen nicht verzichten will, lässt sich das Dokument später in .docx konvertieren und bearbeiten.

Kommentar hinterlassen

Markdown wird unterstützt.