Ich bin ein großer Anhänger von Markdown (und allen seinen Dialekten), nicht nur seitdem ich für mein Blog auf Hugo umgestiegen bin. Da ich auch keine großen typographischen Orgien in meinen Büchern oder Artikeln feiere, sondern mir solides Handwerk ausreicht, bin ich dazu übergegangen, Markdown auch für Manuskripte zu benutzen.
Da ich generell eher faul aufwandseffizient bin, habe ich mir einen kleinen Workflow gebaut, der mir das Erstellen einer ePUB- und einer MOBI-Datei direkt aus einer Markdown-Quelle erlaubt. Im Netz gab es einige Hinweis, wie sich das mit pandoc erledigen lässt, aber ich benutze Calibre.
Die Zutaten
Ich habe in meinem Arbeitsverzeichnis folgende Dateien
- alle Markdown-Quelldateien (minimal eine ;-) )
- die Grafik für das Cover
- eine XML-Datei mit den Metadaten
Kommando ePUB!
Die Konvertierung erfolgt auf der Kommandozeile mit ebook-convert
von Calibre. Auf einem Mac liegen die Kommandozeilen-Programme von Calibre im Application Bundle (falls Calibre im normalen Programme-Ordner liegt, dann findet sich ebook-convert
unter /Applications/calibre.app/Contents/MacOS/ebook-convert
)
Beim Aufruf gibt es haufenweise mögliche Optionen, die etwas Recherche in der Anleitung und im Web erfordert haben, bis das gewünschte Ergebnis erzielt wurde. Hier der Aufruf in meinem Script. (Für alle, die nicht mit der bash
als Shell oder unter Windows arbeiten: der Backslash am Ende der Zeile bedeutet die Fortführung der Eingabe, das alles ist logisch also eine einzelne Befehlszeile)
ebook-convert EINGABEDATEI.md AUSGABENAME.epub \
--authors="Armin Hanisch" \
--language de_DE \
--toc-title="INHALT" \
--formatting-type=markdown \
--level1-toc="//h:h2" \
--level2-toc="//h:h3" \
--title="<der buchtitel>" \
--cover=cover.jpg \
--preserve-cover-aspect-ratio \
--read-metadata-from-opf=metadata.xml \
--epub-inline-toc \
--epub-toc-at-end
Sehen wir uns die einzelnen Optionen der Reihe nach an:
--authors
Hier stehen die Namen der Autoren--language
Die Sprache, in der das Bich erstellt wird--toc-title
Die Überschrift vor dem Inhaltsverzeichnis--formatting-type
Calibre erkennt den Dateityp normal an der Erweiterung, damit erzwingen wir als Eingabeformat Markdown, unabhängig von der Dateiendung der Eingabedateien--level1-toc
Ein XPath-Ausdruck, mit dem die HTML-Tags für die erste Ebene des Inhaltsverzeichnisses erkannt werden. Ja, ich habe in diesem Beispiel die erste Ebene im Markdown-Script mit## Erste Ebene
formatiert, als Beispiel zur Verdeutlichung.--level2-toc
Das Gleiche wie oben, nur für die zweite Ebene des Inhaltsverzeichnisses (und ja, es gibt auch ein--level3-toc
)--title
Der Buchtitel (wird auch aus den Metadaten übernommen, falls hier nicht angegeben)--cover
Pfad zur Grafikdatei mit dem Buchcover--preserve-cover-aspect-ratio
Danach habe ich lange gesucht. Bei SVG-Grafikcontainern bleibt das Seitenverhältnis des Covers gleich, nötigenfalls wird das Bild verkleinert. Ansonsten sieht das Cover auf manchen Geräten seltsam aus--read-metadata-from-opf
Dateiangabe für die XML-Datei mit den Dublin Core-Metadaten--epub-inline-toc
Über diese Option kann man diskutieren. Moderne eBook-Reader nutzen das Metadaten-Inhaltsverzeichnis und bieten eine entsprechende Menüfunktion. Ich bin in dieser Hinsicht altmodisch und habe dennoch meist gerne ein “Blätter-Inhaltsverzeichnis” in meinen Büchern.--epub-toc-at-end
Gehört zur obigen Option, damit wird das “Blätter-Inhaltsverzeichnis” am Ende des Dokuments eingefügt. Für ein seitenlange Inhaltsverzeichnis am Beginn eines eBooks besteht nun wirklich keine Notwendigkeit mehr. ;-)
Nach dem Aufruf findet sich in der Datei AUSGABENAME.epub ein fix und fertiges eBook, mit Inhaltsverzeichnis, Cover und allen Metdaten und das alles ohne langes Rumgeklicke im GUI von Calibre!
MOBI gefällig?
Wird das Script noch um eine weitere Zeile erweitert, lässt sich mit der gleichen Methode auch eine MOBI-Version für den Kindle erzeugen. Natürlich gibt es auch kindlegen
, aber der Aufruf unten liefert bei mir ein perfekt lesbares Kindle-eBook (da ich der Meinung bin, dass auch bash
-Scripts lesbar sein sollten, wieder mit Backslashes in einzelne Zeilen aufteilt, um einzelne Optionen leichter editieren zu können).
ebook-convert EINGABEDATEI.md AUSGABENAME.mobi \
--authors="Armin Hanisch" \
--language de_DE \
--toc-title=INHALT \
--formatting-type=markdown \
--level1-toc="//h:h1" \
--level2-toc="//h:h2" \
--level3-toc="//h:h3" \
--title="Leitfaden zur Elternarbeit" \
--cover=elternarbeit-cover.jpg \
--read-metadata-from-opf=metadata.xml
Was sind die Unterschiede? Es gibt für MOBI kein preserve-cover-aspect-ratio
und die Optinen für das “Blätter-Inhaltsverzeichnis” fehlen. Das lieht daran, dass das MOBI-Format eigentlich keine zweite getrennten TOCs besitzt, sondern das Metadatenverzeichnis aus dem am Ende des Dokuments vorhandenen, automatisch erstellten “Blätter-Inhaltsverzeichnis” erstellt wird. Beim neueren Kindle-Format KF8 (Dateien mit der Erweiterung .AZW3) gibt es mittlerweile auch ein Metadaten-Inhaltsverzeichnis.
Fazit
Jetzt habe ich einen brauchbaren Workflow. Die Quelldateien liegen in einem Repository (egal, ob svn
oder git
, aber Sie sollten Ihre Texte versionieren, irgendwann kommt der Zeitpunkt, an dem Sie sich eingestehen, dass die Formulierungen letzte Woche doch besser waren und dann ist das ein Kommando) und das Build-Script erzeugt beide eBook-Formate mit einem Scriptaufruf. Das Script kann natürlich erweitert werden, um z.B. nach jedem Build eine Version automatisch ans Lektorat oder Testleser zu mailen, bei erfolgreichem Build das Ergebnis an einen Ordner (z.B. Dropbox) zu kopiern und so weiter. Alles, was jetzt noch fehlt, ist mehr Zeit zum Schreiben. ;-)
Fragen gerne über Mail oder im Fediverse an @Linkshaender@bildung.social