Mit LaTeX zum E-Book
Hevea
Hevea wird von Luc Maranget von Inria erstellt und liegt aktuell in Version 2.23 vom 8. März 2015 vor. Hevea ist Open Source und wurde mit Objective Caml programmiert, was die Übersetzung des Quellcodes auf manchen Plattformen eventuell etwas erschwert. Auf einem aktuellen Linux-System ist das aber kein Problem, solange man Objective Caml 3.12 oder neuer installiert hat. Versucht man das Beispieldokument mit Hevea zu übersetzen, erhält man
$ hevea beispiel.tex ./beispiel.tex:4: Warning: Cannot open file: scrartcl.hva ./beispiel.tex:4: Giving up command: \documentclass ./beispiel.tex:4: Error while reading LaTeX: No base style Adios
Hevea kann Dokumentklassen und auch Pakete nicht einfach laden, sondern kennt nur einige ausgewählte, die als style.hva
mitgeliefert werden, wobei style
einer Dokumentklasse (z.B. scrartcl
) oder einem Paket entspricht.
Man kann aber manuell die article
-Dokumentklasse bei der Konvertierung mit angeben, was dann aber etwas später mit einem Fehler abbricht:
$ hevea article.hva beispiel.tex ... ./beispiel.tex:446: Giving up command: \end@tabular ./beispiel.tex:446: Giving up command: \endtabular ./beispiel.tex:446: Giving up command: \end ./beispiel.tex:446: Error while reading LaTeX: This array/tabular column has no specification Adios
Grund hierfür ist die Tabelle mit dem selbst definierten Spaltentyp (\begin{tabular}{C{3.5cm}<{\centering}p{3.5cm} }
), die auskommentiert werden muss. Es gibt dann noch viele Warnungen, aber zumindest übersetzt Hevea das Dokument dann.
Nachdem Hevea gelaufen ist (gegebenenfalls zweimal, damit das Inhaltsverzeichnis korrekt erstellt wird), müssen die Bilder noch manuell extrahiert werden:
$ imagen beispiel
Das wiederum führt erneut zu einem Abbruch:
! LaTeX Error: Command \@ already defined. Or name \end... illegal, see p.192 of the manual. l.30 ...nd{\@KommandoMitAtZeichen}{Ich bin ein @.}
was seltsam ist, weil das Dokument selbst korrekt mit latex
und pdflatex
übersetzt. Es scheint so, als würden die Befehle \makeatletter
und \makeatother
nicht übersetzt werden, weswegen man diese Passage im Beispieldokument ebenfalls auskommentieren sollte.
Danach gibt es noch ein Problem mit Ghostscript:
Operand stack: 3 0 Execution stack: \%interp\_exit .runexec2 -{}-nostringval-{}- -{}-nostringval-{}- -{}-nostringval-{}- 2 \%stopped\_push -{}-nostringval-{}- -{}-nostringval-{}- -{}-nostringval-{}- false 1 \%stopped\_push 1920 1 3 \%oparray\_pop 1919 1 3 \%oparray\_pop 1903 1 3 \%oparray\_pop 1787 1 3 \%oparray\_pop -{}-nostringval-{}- \%errorexec\_pop .runexec2 -{}-nostringval-{}- -{}-nostringval-{}- -{}-nostringval-{}- 2 \%stopped\_push -{}-nostringval-{}- Dictionary stack: -{}-dict:1180/1684(ro)(G)-{}- -{}-dict:0/20(G)-{}- -{}-dict:80/200(L)-{}- -{}-dict:188/300(L)-{}- -{}-dict:62/200(L)-{}- Current allocation mode is local Last OS error: No such file or directory GPL Ghostscript 9.10: Unrecoverable error, exit code 1
Effektiv muss man alle Bilder auskommentieren bis auf das EPS, welches korrekt von Ghostscript konvertiert werden kann. Dieses Problem ist ggf. keines von Hevea, sondern von der installierten Ghostscript-Version auf dem Testrechner.
Wandlung in HTML
Nachdem man das LaTeX-Dokument also angepasst hat, konvertiert Hevea dieses in eine HTML-Ausgabe. Die Standardformatierungen und Textgrößen werden verstanden, ebenso wie Verbatim und sogar lstlisting
mit korrekten Rahmen.
\noindent
wird zwar verstanden, aber scheinbar befindet sich in dem Makro etwas, was Hevea nicht gefällt. Hierbei gilt, dass Hevea bei unbekannten Makros einfach nur den Inhalt anzeigt, der als Argument übergeben wurde. So führt ein \noindent
zu der Ausgabe 1ex
im Dokument.
Verweise mit \label
und \ref
funktionieren, nur \pageref
wird inkorrekt mit zwei Fragezeichen ausgegeben. Dafür werden auch \href
und \url
unterstützt. Die Tabellen werden größtenteils korrekt erkannt und sehen mit den einfachen Linien gut aus. Einzig \multirow
funktioniert nicht und bei der Angaben über p{…}
werden die Breitenverhältnisse nicht eingehalten.
Mathematische Formeln kann man mit MathML darstellen, was für das E-Book wie bereits erwähnt nicht sinnvoll ist. Deswegen wird die standardmäßig eingestellte Formatierung als Reintext bevorzugt. Es wird versucht, mit diversen Sonderzeichen eine gute Darstellung zu erreichen, was auch mehr oder weniger gelingt.
Eigene LaTeX-Befehle und -Umgebungen werden erkannt (bis auf das oben erwähnte Problem mit dem @ im Befehlsnamen). Bei Bildern besteht das erwähnte Problem, dass imagen nur das EPS korrekt konvertieren kann. Auch Zähler, Fußnoten und Farben funktionieren.
Was nicht geht, sind Literaturverweise. Die BibTeX-Bibliography wird zwar erkannt und am Ende des Dokuments als »References« angezeigt, aber Zitate laufen ins Leere. Der Index (Stichwortverzeichnis) wird korrekt angezeigt und verlinkt, Abbildungs- und Tabellenverzeichnis fehlen dagegen komplett. Auch das Inhaltsverzeichnis besteht nur aus der Angabe der beiden Part-Angaben.
Wandlung in EPUB
Da das Inhaltsverzeichnis bereits im HTML fehlt, wird es auch im EPUB nicht korrekt angezeigt. Das heißt, das EPUB-eigene Inhaltsverzeichnis enthält zwar zu einem Teil die Abschnittsnummerierung, aber keine Abschnittstitel. Eine ordentliche Navigation ist im EPUB so nahezu unmöglich.
Die anderen Elemente im Dokument werden wie im HTML dargestellt – bis auf die mathematischen Formeln. Im Fließtext sehen diese noch gut aus, abgesetzt werden die Bruchstriche aber enorm gestreckt, sodass nur ein kleiner Teil der Formel sichtbar ist. Auch im Querformat mit kleiner Schriftgröße ist dies nicht besser. Daneben fehlt bei den Unicode-Zeichen (hier bei den Klammern) die Darstellung, wie das auch schon bei anderen Umsetzungen mit Unicode der Fall war.
Zum Schluss geht bei den Kapitälchen die Formatierung verloren, sodass diese als normaler Text dargestellt werden.