Nachhaltige Skripte
26.6.2021
Kennst du das? Du bereitest die nächste Veranstaltung vor und erstellst dein Skript mit allen Abläufen, Infos und Methoden. Das eine Element nimmst du aus dieser Word-Datei, das andere aus dieser OpenOffice-Datei, diesen Inhalt kopierst du von einer Webseite. Jetzt noch ein Bild dazu. Und nun möchtest du es auch noch alles so formatiert haben, wie es immer aussieht.
Kennst du das?
- Du bereitest die nächste Veranstaltung vor und erstellst dein Skript mit allen Abläufen, Infos und Methoden.
- Das eine Element nimmst du aus dieser Word-Datei, das andere aus dieser OpenOffice-Datei, diesen Inhalt kopierst du von einer Webseite.
- Jetzt noch ein Bild dazu.
- Und nun möchtest du es auch noch alles so formatiert haben, wie es immer aussieht.
Wenn ich die Zeit zusammenrechne, die ich damit verbracht habe vernünftige Word-Dokumente mit Skripten zu erstellen oder wie ich Papierskripte aus hunderten Einzeldateien zusammengedruckt habe, wird mir schlecht. Die Probleme heißen (unflexible) Textverarbeitung und die eigene Gewohnheit im Umgang mit Textdateien. Als ich mal wieder zwanzig Einzeldateien ausdruckte, um Skripte für das Seminarteam zu erstellen, beschloss ich damit Schluss zu machen. Und suchte nach einer Alternative, die nachhaltiger ist und mir das ewig neue Zusammenstellen erspart.
Voraussetzungen
markdown
Du musst die markdown-Syntax kennenlernen. Das geht schnell und kostet dich vielleicht eine Stunde Lebenszeit plus regelmäßiges Üben beim Anwenden.
Pandoc
Du musst den Dokumenten-Prozessor Pandoc installieren. Dieser wird für uns aus einzelnen Dokumenten eine schöne Ausgabedatei erstellen.
LaTeX
Da Pandoc selbst keine PDF-Dokumente erstellen kann, musst du zusätzlich LaTeX installieren. LaTeX ist ein Paket, dass deinem Rechner den Textsatz TeX beibringt und ist zudem modular erweiterbar.
Sowohl Pandoc, als auch LaTeX sind keine Programme mit grafischer Oberfläche, wie du es z. B. von OpenOffice gewohnt bist. Du findest sie etwa nicht unter deinen Programmen aufgeführt. Wenn das neu für dich ist: Lass dich davon nicht abschrecken. Wir werden im Laufe des Prozesses Pandoc über das Terminal zeigen, was wir ausgeführt haben möchten. Das sind wenige Zeichen Code mit großer Wirkung.
Vorgehensweise
markdown wird unser neuer Text-Standard
Wir werden unsere Inhalte, also z. B. Methoden und Abläufe, einzeln als markdown-Dateien erstellen. Die Aufteilung bietet sich insofern an, als dass so Änderungen einfacher vorgenommen werden können und wir später modularer Arbeiten können. Es erleichtert auch das Arbeiten im Team und sorgt schließlich dafür, dass wir in riesigen Textdateien nicht den Überblick verlieren. Eine grundsätzliche Etablierung von markdown ist kein grundlegender Verzicht auf Programme wie OpenOffice. markdown kann als Quellcode, als Ausgangsformat betrachtet werden, mit dem ich nahezu beliebige andere Formate erzeugen kann.
Wir legen einen Struktur-Standard fest
Damit wir uns die Arbeit später etwas erleichtern, hilft ein Struktur-Standard für Überschriften. Wir werden später mehrere Dokumente zusammenfügen und arbeiten dabei mit mehreren Hierarchien – die müssen ja dann auch zueinander passen. Ein guter html-Standard ist es, innerhalb von Dokumenten mit der dritten Überschriftenebene zu beginnen. So bleiben uns noch zwei Ebenen für weitere Unterteilungen über unseren Inhalten.
Ein späteres Ändern ist auch möglich und auch automatisiert möglich. Es könnte aber nervig werden, z. B. wenn in markdown auch die ===
und ---
Auszeichnungen für Überschriften verwendet werden.
Wir sammeln unsere Skript-Elemente in einem Ordner
Zur Skripterstellung legen wir alle Elemente in einen Ordner. Durch die Dateibenennung können wir die Reihenfolge festlegen, in der die Dokumente aufgerufen werden. Hier sind mehrere Systeme denkbar und je nach Anwendungsfall gibt es bestimmt passende Systeme.
Wir legen die Metadaten fest
Zusätzlich zu den Inhalten legen wir eine Datei an, die Metainformationen für unser Skript enthält. Hier können wir das Aussehen und den Textsatz für das komplette Skript definieren.
Wir lassen Pandoc für uns ein Skript erstellen
Eine Kommandozeile genügt nun, um unser Skript erstellen zu lassen.
Beispiel
In meinem Team veranstalten wir im Jahr etwa 30 Seminarwochen. Die sind strukturell alle gleich und variieren inhaltlich. Es gibt viele wiederkehrende Elemente, aber auch eher spezielle und aktuelle Themen. Wir erstellen unsere Methoden und Abläufe in markdown-Dateien. Dafür haben wir eine Vorlage erstellt, damit die Dokumente immer die gleichen Elemente aufweisen. Alle (für gut befundenen) Seminarmethoden landen dann in einem Cloud-Ordner, die Dateien erhalten eine eindeutige Nummer und werden mit Schlagworten versehen. So sind sie unabhängig von z. B. Themenordnern oder weiteren Verschachtelungen auffindbar und können wiederverwendet und weiterentwickelt werden.
Für ein neues Seminar wird ein Plan erstellt, der vom Seminarteam ausgearbeitet wird. Dabei werden alte Methoden übernommen, angepasst oder weiterentwickelt und neue Methoden geschrieben. Diese Methoden landen zunächst im gemeinsamen Seminarordner und werden anhand des Ablaufs nummeriert. Hinzu kommen noch strukturierende Dateien, die z. B. Überschriften für die Wochentage festlegen.
Als letztes kommt eine .yaml-Datei mit den passenden Metainformationen hinzu und Pandoc erstellt das fertige Skript, dass wir für die Teammitglieder nur noch ausdrucken müssen. Nach dem Seminar werden Änderungen oder Erfahrungen/ Tipps in den markdown-Dateien ergänzt, um sie dann wieder im Cloud-Ordner einzusortieren oder neu anzulegen.
Mit dieser Arbeitsweise können wir an bestehende Erfahrungen anknüpfen und haben keinen Stress beim Zusammenkopieren oder Umformatieren von Dokumenten. In meinen Augen sehr produktiv und nachhaltig.
Schritt-für-Schritt
Quelldateien erstellen (Skriptinhalte)
Wenn du nicht alle Dateien selbst erstellen möchtest, kannst du auch abkürzen und hier alle fertigen Dateien als Archiv laden. Macht es aber nicht unbedingt nachvollziehbarer.
Arbeitseinheiten
Wir erstellen jetzt drei Beispiel-Arbeitseinheiten.
Erste Arbeitseinheit am Montag
Speichern als: 20-1-10 Erste Arbeitseinheit.md
###### Erste Arbeitseinheit am Montag
Das hier ist die erste Arbeitseinheit.
* Erst das
* dann das
* und am Ende das.
Erste Arbeitseinheit am Dienstag
Speichern als: 20-2-10 Erste Arbeitseinheit.md
###### Erste Arbeitseinheit am Dienstag
Das hier ist die erste Arbeitseinheit.
* Erst das
* dann das
* und am Ende das.
Abschlussreflexion
Speichern als: 20-5-10 Abschlussreflexion.md
###### Abschlussreflexion
*REF fragen die Gruppe*
"Wie fandet ihr die Woche?"
Fertig.
Wie besprochen beginnen wir in unseren Inhalten mit der dritten Überschriftenebene und lassen Ebene 1 und 2 reserviert für unsere Skriptstruktur. Was nicht sofort auffällt, aber sehr wichtig ist: Die Texte beginnen und enden mit einer leeren Zeile. In markdown sind mehrere leere Zeilen irrelevant, da sie später ignoriert werden. Eine einzelne Leerzeile kann aber einen großen Unterschied machen, denn unter Umständen werden Überschriften ohne vorangehende Leerzeile nicht korrekt interpretiert. Da wir später Pandoc alle Einzeldateien hintereinander schreiben lassen, ist eine Leerzeile wichtig. Ich beginne und beende aus Gewohnheit jedes markdown-Dokument mit einer Leerzeile.
Strukturierende Inhalte
Wir möchten die Arbeitseinheiten nach Tagen gliedern und zusätzlich zum Programm ein Orga-Kapitel anlegen.
Orga-Kapitelüberschrift
Speichern als: 10 Organisatorisches.md
# Organisatorisches
**Programm-Kapitelüberschrift**
Speichern als: 20 Programm.md
# Programm
Tages-Überschriften
Speichern als: 20-1 Montag.md
, 20-2 Dienstag.md
, 20-3 Mittwoch.md
, 20-4 Donnerstag.md
, 20-5 Freitag.md
(Mit jeweils anderem Inhalt)
### Montag
Dieses Dateien sollten jetzt in einem Ordner liegen:
Beispiel
|-10 Organisatorisches.md
|-20 Programm.md
|-20-1 Montag.md
|-20-1-10 Erste Arbeitseinheit.md
|-20-2 Dienstag.md
|-20-2-10 Erste Arbeitseinheit.md
|-20-3 Mittwoch.md
|-20-4 Donnerstag.md
|-20-5 Freitag.md
|-20-5-10 Abschlussreflexion.md
Wie du siehst, haben wir die Dateinamen nicht per Zufall gewählt, denn wir möchten, dass die Dokumente anhand des Dateinamens so sortiert werden, dass sie unserer Reihenfolge im Skript entsprechen. Die Systematik ist beliebig, die hier gewählte (Zehnerschritte) hat den Vorteil, dass noch Zwischenräume bleiben, falls ich z. B. noch ein Kapitel Vorbereitung zwischen Orga und Programm einfügen möchte. Bei der zweiten Ebene, die den Wochentagen entspricht, habe ich das gelassen, weil es nur sieben Wochentage gibt.
Yaml-Datei mit Metadaten
Als letztes benötigen wir eine Datei, die die Metainformationen unseres Skriptes trägt. Dafür verwenden wir ein Dokument, dass einen YAML-Block enthält und nennen diese pdf.yaml
.
---
title: |
Das ist der Titel deiner Veranstaltung
subtitle: |
Und hier noch ein Untertitel (vielleicht ein Hinweis zur Gruppe)
extratitle: false
lang: de-de
colorlinks: true
links-as-notes: false
papersize: a4
fontsize: 12pt
numbersections: true
toc-depth: 2
lof: false
classoption:
- oneside
- headings=small
toc: true
geometry:
- top=3cm
- right=3cm
- left=3cm
- bottom=3cm
chapters: false
documentclass: scrbook
linestretch: 1.2
# Zusätzliche LaTeX-Pakete
header-includes: |
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{pdflscape}
---
Wir könnten hier noch mehr Attribute verändern, das sind eher Basiseinstellungen. Wir verwenden die KOMA-Script-Klasse scrbook, die anpassbarer ist, als die Standard book-Klasse.
Der Dateiname ist eigentlich egal, wir müssen ihn nur gleich korrekt angeben.
Skript mit Pandoc erstellen
Pandoc ist ein Programm ohne grafische Oberfläche. Es wird also über ein Kommandozeilentool bedient. Windows und Linus/macOS ticken hier anders. Daher brauchen wir zwei verschiedene Lösungen .
Öffne die Shell (Linux), das Terminal (macOS) oder die PowerShell (Windows). Du beginnst in deinem Benutzerverzeichnis. Von hier musst du nun zum Ordner navigieren, in dem unsere erstellten Dateien liegen. Um in einen tieferen Ordner zu wechseln, nutzt du den Befehl cd
(change directory) gefolgt von dessen Name. Um wieder eine Ebene nach oben zu gehen verwendest du cd..
. Wenn du jeweils Enter drückst, wird dein Befehl ausgeführt und dein neuer Standort wird dir angezeigt. Wenn du im richtigen Verzeichnis angekommen bist, können wir Pandoc an die Arbeit schicken
Linux und macOS
pandoc *.md pdf.yaml -s -o skript.pdf
Mit diesem Befehl sagen wir:
- pandoc
- Verwende pandoc
- *.md
- Nimm dir alle Dateien, die auf .md enden
- pdf.yaml
- und die Datei pdf.yaml
- -s
- mache daraus ein eigenständiges Dokument (standalone)
- -o skript.pdf
- der output soll skript.pdf heißen
Windows
Die PowerShell von Windows versteht leider das * als Wildcard nicht und sucht verzweifelt nach einer Datei, die *.md heißt. Da sie die nicht finden wird, müssen wir einen Umweg bauen:
pandoc (get-item *.md).FullName pdf.yaml -s -o skript.pdf
Wenn wir keinen Fehler gemacht haben, legt uns Pandoc nun eine neue PDF-Datei in den Ordner – unser fertiges Skript.
Vielleicht wirst du vorher aufgefordert LaTeX-Pakete zu installieren. Das passiert nur, wenn diese noch fehlen und fällt beim zweiten Mal weg. Egal auf welchem System du die Prozedur durchführst: Sie wird bestehende Dateien mit dem Namen skript.pdf im gleichen Verzeichnis erbarmungslos überschreiben. Du kannst den Namen aber beliebig ändern.
Anmerkungen
Zugegeben: Dieser Workflow fordert einiges an Vorbereitung. Er zahlt aber unter allen Umständen auf das persönliche Zeitkonto ein:
- Methoden aus großen Sammlungen können schnell neu zusammengestellt werden.
- Kein Formatieren mehr, keine Fummelei in Textverarbeitungsprogrammen
- Einheitliches Layout ohne manuelle Schritte
- Den gleichen Inhalt mit zwei Klicks in zwei Layouts bringen
- Neben einem PDF auch noch eine html-Datei zur Veröffentlichung oder zur Nutzung auf kleinen Bildschirmen erstellen.
Über Pandoc und LaTeX ließen sich noch beliebige Anpassungen vornehmen. Dafür ist dann ein wenig Code und Expertise notwendig.
Das Vorgehen macht im Grunde nicht anderes, als das Prinzip der Trennung von Inhalt, Struktur und Layout umzusetzen. Was einen rein praktischen Nutzen hat, hat auch einen (bildungs)politischen Hintergrund: Inhalte lassen sich so offen teilen, verändern und weiternutzen.
Fehlender Umbruch nach Überschriften der vierten Ebene bei Outputformat PDF
Pandoc verwendet für die Konvertierung in PDF LaTeX. LaTeX verwendet nur drei Ebenen von Überschriften, danach folgt bereits der Absatz. Das hat zur Folge, dass in so erstellten PDF-Dokumenten in den Metadaten nur die ersten drei Überschriftenebenen zur Verfügung stehen. Außerdem fehlt aus diesem Grund einem Textabsatz nach einer Überschrift der vierten Ebene ein vorausgehender Umbruch. Das ist zugegeben etwas unpraktisch. Wir können dieses Problem umgehen, indem wir Absätzen einen vorangehenden Umbruch hinzufügen. Dafür ergänzen wir in der Kommandozeile:
pandoc *.md -V block-headings pdf.yaml -s -o skript.pdf
Lizenz für den Text
Weiternutzung als OER ausdrücklich erlaubt: Dieses Werk und dessen Inhalte sind – sofern nicht anders angegeben – lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Nachhaltige Skripte“ von Tobias Weiske, Lizenz: CC BY 4.0.