eBooks automatisch erzeugen

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 Twitter an @derLinkshaender

Share Kommentieren
X

Ich habe einen Kommentar zum Artikel


Wichtiger Hinweis: Sie haben keinen Anspruch auf die Veröffentlichung Ihres Kommentars. Jeder hier eingegebene Kommentar wird zuerst geprüft. Ich behalte mir die Entscheidung vor, welche Kommentare ich als Ergänzung an den Artikel anfüge.


Sie können die Kommentarfunktion ohne die Speicherung personenbezogener Daten nutzen.
Nachdem Sie Ihren Kommentar geschrieben haben, geben Sie im Feld "Mailadresse/Autorenname" Ihren Namen oder Ihre Mailadresse ein. Diese wird nicht übertragen! Stattdessen wird aus dieser Angabe über eine Hashfunktion eine Zeichenkette berechnet, die für jede Angabe eindeutig ist, aber keine Rückrechnung auf die eingegebenen Daten erlaubt. Solange Sie also immer mit der gleichen Autorenangabe kommentieren, bleibt die angezeigte Kennung die Gleiche. Wir verwenden für diese Hashfunktion den Algorithmus SHA-256, die erzeugte Zeichenkette sieht beispielsweise so aus: "9a3f8d827f50207f875421abc3d1e55f4c888bb0fca67bf67c5e5f42224b417a".
Möchten Sie irgendwann, dass Ihre Kommentare entfernt werden, dann senden Sie über dieses Formular eine entsprechende Notiz mit der gleichen Autorenkennung und ich werde alle Ihre Kommentare aus dem Blog löschen.