Buch und Technik

Tja … an der einen oder anderen Stelle habe ich schon angedeutet, dass ich ein Buch schreibe. Es ist kein Sachbuch über Autobahnen. Es ist ein Roman, der zugegebenermaßen auch wesentlich mehr gefühlt cool ist als unbedingt authentisch.

Aber neben einer Menge Dinge über Stil, Lektorat und so weiter habe ich auch ein paar technische Dinge über das Schreiben gelernt. Vielleicht liegt das auch ein bisschen daran, dass ich einerseits faul bin und andererseits unorganisiert, und das irgendwie auf die Reihe kriegen muss.

Wo will ich hin?

Die Rahmenbedingungen, wie und in welche Ausgabeformate hinein ich schreiben wollte, haben sich mit der Zeit entwickelt, aber im Endeffekt steht nun folgende Anforderung im Raum:

  • Ich möchte mehrere Ausgabeformate erstellen können. Derzeit umfasst die Liste: PDF (A4, Blocksatz), „Normseiten“-PDF (A4, Zeilennummern, feste Spalten- und Zeilenzahl, breite Ränder), ePub, mobi. Außerdem soll das Ganze erweiterbar sein für neue Formate.
  • Ich möchte die Möglichkeit haben, einzelne Geschichten einzeln in die Ausgabeformate zu setzen, aber auch Sammlungen zu erstellen, in denen mehrere Einzelgeschichten zusammengefasst werden.

So weit, so einfach. Da ich aber – wie oben geschrieben – faul und unorganisiert bin, kommen noch weitere Rahmenbedingungen hinzu.

  • Ich möchte, dass ich Änderungen und Korrekturen in Geschichten nur einmal machen muss, so dass in einer Geschichte immer der gleiche Text-Content drin ist, egal in welchem Format. Das heißt: ich möchte den Quelltext meiner Geschichten nur einmal vorhalten und bei Änderungen nur an einer Stelle ändern müssen.
  • Ich möchte, dass die Formatierungen immer gleich aussehen. Wenn ich also die Spaltenzahl in meinen Normseiten-PDFs anpasse, soll das für alle Geschichten gleichermaßen vorgenommen werden. Das heißt: ich möchte die Formatierungs-Dateien nur einmal vorhalten und für jeden Text bei Übersetzung in ein bestimmtes Format das gleiche Formatierungs-File verwenden.

Auf sehr abstrakter Ebene ist die Lösung vollkommen simpel. Ich bilde eine Matrix – in den Zeilen stehen Formatierungen, in den Spalten stehen die einzelnen Texte. Mit den oben genannten vier Formaten und z.B. fünf Geschichten, die ich geschrieben habe, wären das 4 Formatierungs-Dateien und 5 Geschichten-Dateien, heraus kommen 4×5=20 Ausgabe-Dateien.

Ein winziges, aber nur winziges bisschen komplexer wird’s durch die Sammlungs-Ausgaben. Hier kommt dann noch eine Art Liste dazu, in der festgelegt wird, welche Content-Dateien in welcher Reihenfolge in die Sammlung hinein kommen.

Wie bin ich da hin gekommen?

Um zu erklären, wie ich da hin gekommen bin, wo ich hin wollte, muss ich glaube ich erst einmal meine Vorgeschichte anreißen. Ich habe Physik studiert und meine Diplom- und Doktorarbeiten in LaTeX geschrieben. Meine Analyse-Tools habe ich in C++ unter Verwendung einer Library vom CERN geschrieben, das Aufrufen meiner Analyse-Tools und auch anderer Dinge in bash mit Makros geregelt. Die Aufgabe, meine Texte zu verwalten, würde zwar mittlerweile den Einsatz eines kompilierten Programmes rechtfertigen, aber zu Anfang dachte ich, das wäre mit Kanonen auf Spatzen Schießen. Also habe ich mich an LaTeX und bash gehalten.

Mein System enthält nun vier „Arten“ von Dateien: Formatierungsdateien (LaTeX-Präambeln mit einem „Template-Include“), Sammlungslisten (LaTeX-Schnipsel, in denen letztlich nur eine Liste von \include-Befehlen drin steht), Text-Quell-Files (TeX-Dateien, in denen nur der Text meiner Geschichten drin steht, allerdings Text-Struktur-Befehlen und Sonderzeichen-Befehlen aus LaTeX, also mit LaTeX verarbeitbarer Text) und Text-Include-Files (wie die Text-Quell-Files, nur dass sie lediglich in Sammlungen verwendet werden).

Die eleganteste Lösung wäre nun eine bash-Schleife, die über alle Formatierungsdateien loopt, darin eine zweite Schleife, die über alle Sammlungslisten und Quell-Files loopt und darin der Aufruf eines Befehls. Heraus kommen (Zahl der Formate) x (Zahl der Einzelgeschichten + Zahl der Sammlungen) Dateien. Jede Formatierung und jedes Stück Inhalt wird nur einmal vorgehalten. Ganz so einfach ist es leider nicht, aber das ist das Prinzip.

Problem 1: LaTeX zu PDF und LaTeX zu eBook-Format erfordert etwas unterschiedliche Befehlsketten. Außerdem müssen noch ein paar Ersetzungen vorgenommen werden, weil manches in von LaTeX erzeugten PDFs gut aussieht, aber in über LaTeX erzeugten HTMLs, die dann per calibre command line tools zu ePub und mobi gemacht werden, nicht so gut aussieht. Die Lösung: meine Schleife im Script loopt über alle Text-Quell-Files, aber die einzelnen Präambeln stehen explizit mit individuell für das Format gemachten Befehlsketten innerhalb der Schleife.

Problem 2: LaTeX unterstützt kein „geschachteltes“ Inkludieren. Präambel inkludiert Liste inkludiert Quell- und Include-Files funktioniert also nicht. Die Lösung: daher habe ich die Include-Listen aus meiner Quell-File-Schleife herausgenommen und füge aus Muster-Präambel und Include-Liste ein Sammlungs-Master-File zusammen. Dafür benutze ich cat. Da das etwas andere Befehle (und einige Zeilen mehr) erfordert als nur die Quellfiles in die Präambeln zu inkludieren, entsteht für die Listen-Files eine zweite Schleife.

Problem 3: Der Script arbeitet und arbeitet und arbeitet – obwohl wenig geändert wurde. Die Lösung: von jedem der (an Speicherplatz kleinen) Quell-Files wird bei jedem Run des Scripts eine Kopie erstellt. Bevor der Script LaTeX anwirft, checkt er erstmal, ob sich was verändert hat. Hat sich die einzelne Geschichte geändert, übersetzt er sie nochmal. Hat sich eine Präambel geändert, übersetzt er alles nochmal in dieses Ausgabeformat. Hat sich eine Einzelgeschichte oder ein Include-File geändert, übersetzt er alle Sammlungen nochmal. So schlau, dass der Script eine Include-Liste mit der Liste der geänderten Dateien abgleichen kann, ist mein Script (noch) nicht.

Welche Werkzeuge benutze ich?

LaTeX in Form von pdflatex und htlatex aus dem Paket tex4ht. Calibre, hieraus allerdings nur die command line tools, vor allem ebook-convert, ebook-polish, ebook-meta. Ganz exzessiv bash. Für Ersetzungen und ein bisschen Statistik – Wörter Zählen, Listen der verschiedenen Worte Erstellen und so weiter – kommt perl zum Einsatz.

Kurz gefasst: Was macht mein System?

Mein System macht aus Quell-Format-Dateien und Quell-Text-Dateien formatierte Ausgabe-Dateien. Mein System macht aus Quell-Format-Dateien, Include-Listen und Quell-Text-Dateien formatierte Ausgabe-Dateien.

Dateiencontent: preamble[Format].tex, [sammlung]Basis.tex, [geschichte]Source.tex, [sammlung][bezeichnung]Include.tex

Arbeitsschritte: Vergleich mit Vergleichsordner, ob sich was geändert hat. Wenn ja: Loop über Einzelgeschichten, „Loop“ über Präambeln, Befehle zum Übersetzen, Kopieren der Enddateien in Ausgabeordner, Löschen der Zwischenschritt-Files. Loop über Include-Listen, „Loop“ über Präambeln, Bauen eines Masterfiles aus Include-Liste und Präambel, Befehle zum Übersetzen, Kopieren der Enddateien in Ausgabeordner, Löschen der Zwischenschritt-Files. Zuletzt Kopieren der Rohdaten in den Vergleichsordner.

Ausgabe: [sammlung].pdf, [sammlung]Normseiten.pdf, [sammlung].epub, [sammlung].mobi, [geschichte].pdf, [geschichte]Normseiten.pdf, [geschichte].epub, [geschichte].mobi

Was noch fehlt:

Aufräumen und Segmentieren für bessere Wartung. Eventuell Umbau in ein kompiliertes Programm für bessere Performance.

Warum ich all das hier aufgeschrieben habe?

Ich habe eingestandenerweise lange gesucht, bis ich all die Dinge zusammen hatte, die ich brauchte, um in oben genannter Weise, aus meiner Sicht „vernünftig“ mit meinen Texten umgehen konnte. Vielleicht hilft es ja irgendjemandem, sich selbst ein ähnliches System zu bauen.

Advertisements

Über Talianna

Physikerin, Pendlerin, Läuferin, phantasievolle Geschichtenerzählerin inzwischen mit Durchhaltefähigkeit für ein ganzes Buch ... und gelegentlich einfach zu abgelenkte Person.
Dieser Beitrag wurde unter Blick über die Leitplanke, Schreiben abgelegt und mit , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

3 Antworten zu Buch und Technik

  1. Wortman schreibt:

    Ich kenne Latex nur vom Namen nach (die Software 🙂 ) aber ich denke, du hast anderen ein paar Lösungssätze gegeben. Das Programm wird ja gerne von Naturwissenschaftlern verwendet.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s