Mal eben einen Text in fünf verschiedene Formate konvertieren? Kein Problem für Pandoc, den flexiblen Dokumentenwandler.
Beim Erstellen von Dokumentationen und technischen Texten haben sich strukturierte Formate durchgesetzt. Sie bieten den Vorteil, dass man damit die Bestandteile des Inhalts einfach semantisch auszeichnet und bei Bedarf die benötigten Textteile entsprechend aufbereitet. Lange Zeit galt Docbook hier als Maß der Dinge – allerdings enthält die Spezifikation viele Elemente, die in der Praxis selten zum Einsatz kommen. Zudem macht das XML-Markup den Text schnell unleserlich.
Gerade bei Texten fürs Web setzten sich im Laufe der Zeit einfachere Markups durch, so zum Beispiel Textile [1] oder Markdown [2] (siehe Kasten “Text-to-HTML”). Mit einem passenden Konverter wandeln Sie diese Formate mittels regulärer Ausdrücke in XHTML um, das Sie mit CSS anschließend sehr leicht in Form bringen. Pandoc [3] treibt die Idee noch ein Stück weiter und ermöglicht eine Vielzahl von Ausgabeformaten, darunter LaTeX, PDF und OpenDocument-Text (ODT).
Text-to-HTML
Text-to-HTML-Systeme vereinfachen das Publizieren von standardkonformen XHTML-Dokumenten. Sie bieten dem Autor ein einfaches Markup-System basierend auf Hash-Symbolen (#), Plus- und Minuszeichen, dem Asterisk (*) sowie Binde- und Unterstrichen. So trennen diese Systeme die Struktur und die Präsentation des Dokuments vollständig, da letztere erst im Browser mittels Cascading Stylesheets geschieht.
Blogs und Wikisysteme nutzen diese Syntax sehr intensiv, da sie auch Einsteiger ohne HTML-Kenntnissen das Schreiben von Web-Texten ermöglicht. Viele der der Konverter erlauben aber das Einbetten echter HTML-Elemente, sodass anspruchsvollere Kontruktionen trotzdem möglich bleiben. Zu den bekanntesten Vertretern der Gattung gehören Restructured Text [4], Textile und die Mediawiki-Syntax.
Die vollständige Liste der Formate fällt recht lang aus (siehe Tabelle “Pandoc-Formate”) und wächst mit jedem Release. Der Grund liegt im Konzept des Wandlers, der auf einer Haskell-Bibliothek aufsetzt: Er arbeitet mit Parser-Modulen für jede unterstützte Sprache. Um eine neue Syntax hinzuzufügen, braucht also niemand das Rad neu zu erfinden – es reicht, ein so genanntes Reader- oder Writer-Modul zu programmieren.
Pandoc-Formate
| Format | Eingabe | Ausgabe |
|---|---|---|
| ASCII-Text | nein | ja |
| ConTeXt | nein | ja |
| Docbook XML | nein | ja |
| EPUB | nein | ja |
| Gnu Texinfo | nein | ja |
| Groff (Manpages) | nein | ja |
| HTML | Teilweise | ja |
| LaTeX | Teilweise | ja |
| Markdown | ja | ja |
| Mediawiki | nein | ja |
| ODT | nein | ja |
| OpenDocument XML | nein | ja |
| nein | ja (via LaTeX) | |
| Restructured Text | Teilweise | ja |
| RTF | nein | ja |
| S5 | nein | ja |
| Slidy HTML (Präsentation) | nein | ja |
Als bevorzugtes Eingabeformat verwendet Pandoc eine erweiterte Form des oben genannten Markdown-Formats. Im Gegensatz zum ursprünglichen Format von John Gruber bietet die Variante von Pandoc aber einige Erweiterungen, die zum Beispiel das Auszeichnen von Tabellen vereinfachen oder Definitionen ermöglichen. Einmal verinnerlicht, schreiben Sie so sehr schnell auch komplexe Texte. Einen ersten Überblick über die Markdown-Syntax liefert die deutsche Übersetzung des Tutorials [5].
Um einen ersten Eindruck von den Möglichkeiten des Konverters zu erhalten, lohnt es sich, das Testformular auf der Website des Projektes zu nutzen (Abbildung 1). Hier geben Sie den Ausgangstext in das Eingabefeld ein, wählen das Eingabe- sowie das gewünschte Ausgabeformat aus und erhalten über die Schaltfläche Convert das entsprechende Ergebnis.
Der beigelegte Standalone-Konverter verhält sich wie viele der klassischen Linux-Tools: Er arbeitet als Pipe. Geben Sie keine Datei als Argument an, liest er von der Standardeingabe; definieren Sie keine Ausgabedatei, schreibt das Tool auf die Standardausgabe. Um aber in den vollen Genuss der Möglichkeiten zu kommen, lohnt sich trotzdem der Einsatz einiger Optionen.
Optionales
In der Vorgabe produziert Pandoc nämlich nur ein Fragment, das genau dem Eingabetext entspricht. Bei einem HTML-Dokument fehlen also Header und Footer. Mit -s erzeugen Sie dagegen eine vollständige Datei. Pandoc bietet darüber hinaus eine Vielzahl von Möglichkeiten, um das Resultat noch mit statischen Teilen zu kombinieren. So erlaubt es das Einfügen von Text vor und nach dem Body-Element in HTML beziehungsweise der Dokumentenumgebung in LaTeX.
Mit der Option -r (alternativ -f) und einem passenden Parameter geben Sie das Eingabeformat an. Über -w (alternativ -t) definieren Sie das Format der Ausgabe. Pandoc erwartet, dass Sie die Dokumente in UTF-8 kodieren. Die Ausgabe erfolgt immer in diesem Format. Haben Sie Dateien in einem anderen Encoding vorliegen, so bietet sich der Einsatz eines Wandlers wie Iconv an.
Vorlagen
Um das Aussehen der Formate EPUB, LaTeX, ODT oder HTML zu beeinflussen, erlaubt es das Tool, alternative Stylesheets, Referenzdokumente oder Templates anzugeben, die dann alle notwendigen Angaben für das gewünschte Design enthalten. Die Option -D beziehungsweise --print-default-template gibt in Zusammenspiel mit der Abkürzung für das entsprechende Format das interne Template aus.
Leiten Sie diese Ausgabe einfach in eine Datei um und passen Sie diese dann gemäß Ihren Vorstellungen an. Danach binden Sie das modifizierte Template mit der Langoption --template Datei beim Konvertieren ein. Dabei zeigen sich in der Praxis auch einige Tücken der Software.
Pandoc richtet sich in erster Linie an Autoren aus dem englischsprachigen Raum. So fehlen im internen Template für LaTeX einige Paketdefinitionen, die in einer deutschsprachigen Umgebung durchaus Sinn ergeben würden, so zum Beispiel der Einsatz von folgender Deklaration:
\usepackage[ngerman]{babel}
Allerdings bietet die Software die Möglichkeit, diese wie beschrieben über ein eigenes Template nachzuziehen. In diesem Template finden sich Variablen, gekennzeichnet durch ein Dollarzeichen an Anfang und Ende. Mit dem Konstrukt -V Variable=Wert überschreiben Sie diese auf der Kommandozeile.
Fazit
Pandoc erweist sich in vielerlei Hinsicht als nützliches Tool. Vor allem der modulare Aufbau erleichtert das Erweitern der Software um neue Ein- oder Ausgabeformate. Die Wahl der funktionalen Programmiersprache Haskell dürfte sich dagegen in der Praxis eher als Hürde erweisen.
Es lohnt sich, die aktuelle Version (derzeit 1.6) von der Homepage des Maintainer oder der Heft-DVD zu installieren. Ältere Varianten, wie die in Ubuntu 8.04 integrierte Version 046 bieten bei weitem nicht so umfangreiche Möglichkeiten. Die in “Lucid” integrierte v1.5.1.1 versteht sich dagegen schon auf Templates und den Export von EPUB.
Glossar
-
Haskell
-
Nach dem US-amerikanischen Mathematiker Haskell Brooks Curry benannte, funktionale Programmiersprache. Sie bildet einen radikal neuen Ansatz zum Programmieren von Computern, indem sie – grob gesagt – alle Programmschritte in Funktionen abbilden.
Infos
[1] Textile: http://textile.thresholdstate.com
[2] Markdown: http://daringfireball.net/projects/markdown/
[3] Pandoc: http://johnmacfarlane.net/pandoc/
[4] Restructured Text: http://docutils.sourceforge.net/docs/ref/rst/introduction.html
[5] Deutsche Hilfe zu Markdown: http://markdown.de/syntax/






