Asciidoctor: Asciidoc mit neuen Funktionen

Aus LinuxUser 10/2020

Asciidoctor: Asciidoc mit neuen Funktionen

© Itsallgood, Fotolia

Leistungsgesteigert

Das vielseitige Dokumentationssystem Asciidoc basiert auf dem inzwischen obsoleten Python 2. Die Alternative Asciidoctor schafft Zukunftssicherheit.

Asciidoc [1] ist ein universelles Publikations- und Dokumentationssystem sowie eine Auszeichnungs- beziehungsweise Formatierungssprache. Durch die einfache Syntax und die klaren Auszeichnungen lassen sich mit Asciidoc bearbeitete Quelltexte ohne Weiteres direkt lesen.

Die ersten Versionen der Software stammen aus dem Jahr 2002 und sind damit deutlich älter als etwa die auf Asciidoc aufbauende Markdown-Syntax. Heute gehören die entsprechenden Pakete in vielen Distributionen zum Standard und lassen sich aus dem Repository einspielen.

Einen Vergleich der Markdown-Syntax mit der von Asciidoc finden Sie im Benutzerhandbuch [2]. Für viele Anwender ist aber vermutlich die “AsciiDoc Syntax Quick Reference” [3] eine effektivere Informationsquelle. Dort finden Sie Beispiele sowohl für Asciidoc als auch für die Asciidoctor-Erweiterungen. Suchen Sie nach der Zeichenkette (Asciidoctor only), die diese Features markiert.

Als Ausgabeformate unterstützt Asciidoc neben HTML und XHTML auch DocBook. Letzteres eignet sich als Ausgangsmaterial zum Erzeugen von speziell formatiertem HTML, PDF, EPUB, DVI, LaTeX, Roff und Postscript.

Bevor im Juni 2020 eine an das neue Python 3 angepasste Version der Sprache erschien, entstanden einige interessante Varianten von Asciidoc – allen voran Asciidoctor [4]. Dessen Entwickler stellten durch mehr als 2500 Tests seine sehr weitgehende Kompatibilität zu Asciidoc sicher. Außerdem implementierten Sie das Programm in Ruby, was das Konvertieren etwa um den Faktor 100 im Gegensatz zur klassischen Python-Variante beschleunigt. Später kamen Implementationen in Java und Javascript dazu, was das Bearbeiten der Quelltexte direkt im Webbrowser ermöglicht [5].

Die Neuimplementation hat noch eine Reihe weiterer Vorteile: So erweitert sie etwa die Fähigkeiten des Parsers, also des Programmteils, der die Eingaben liest und analysiert, und erlaubt damit komplexere Konstruktionen [6]. Ein Plugin-System ermöglicht zusätzliche Features wie spezielle Diagramme sowie das Implementieren zusätzlicher Ausgabeformate, etwa optimiertes PDF ohne Umweg über DocBook sowie komplexes LaTeX und XHTML5.

Für verschiedene Ausgabeformate gibt es zusätzlich spezielle Asciidoctor-Varianten, an denen Entwickler unabhängig von der Hauptdistribution (derzeit in der Version 2.0.10) arbeiten. Für viele Editoren existieren Plugins, die bei der Syntax helfen und teilweise das Kompilieren unterstützen. Die Tabelle “Asciidoctor-Varianten” erläutert die wichtigsten Vertreter.

Alle dort genannten Konverter sind eigenständige Projekte und entsprechend anders dokumentiert. Mit jedem davon erzielen Sie recht gute Ergebnisse. Alle Varianten erfordern aber ein Einarbeiten, wenn Sie von den Voreinstellungen abweichende Formatierungen benötigen.

Asciidoctor-EPUB3 [8]

Erzeugt EPUB3. Bisher noch nicht als Paket verfügbar, funktioniert aber mit einigen wenigen Einschränkungen recht gut. Ziel ist nicht nur das Übersetzen ins entsprechende Format, sondern eine ästhetische Gestaltung für E-Books. Die Option -a ebook-validate ruft automatisch Epubcheck auf.

Asciidoctor-LaTeX [9]

Erlaubt umfassendere Anpassungen der Ausgabe in Bezug auf den LaTeX-Code als Asciidoc. Als Basis verwendet diese Variante anstelle von Standard-LaTeX AMSTeX. Das ermöglicht feiner steuerbare Layouts. So entfallen etwa die oft unnötigen, umfangreichen Titelseiten.

Asciidoctor-PDF [10]

Zum direkten Konvertieren nach PDF ohne die DocBook-Toolchain. Die Software läuft stabil und enthält als zusätzliche Komponente eine Variante, die kompaktere PDFs erzeugt (asciidoctor-pdf-optimize). Die Software erlaubt es, die Ausgabe in Bezug auf das Layout über einen CSS-ähnlichen Mechanismus anzupassen.

Asciidoctor installieren

Normalerweise installieren Sie Asciidoctor aus dem Repository der von Ihnen genutzten Distribution. Fehlen dort allerdings bestimmte Komponenten, wie etwa asciidoctor-epub3, greifen Sie auf das Ruby-eigene Installationssystem Gem zurück und spielen die fehlenden Komponenten (Gems) direkt aus dem Ruby-Repository ein (Listing 1, erste Zeile). Normalerweise installiert das Tool die Gems unter ~/.gem/ruby/2.7.0/bin/. Diesen Pfad müssen Sie in die Systemvariable PATH aufnehmen.

In manchen Fällen, wie im Beispiel von asciidoctor-epub3, gibt es noch keine als fertig deklarierten Pakete. Daraus resultieren Meldungen wie ERROR: Could not find a valid gem [...] in any repository oder ERROR: Possible alternatives: [...]. Ob es noch in Entwicklung befindliche Pakete gibt, testen Sie mit der Option --pre (Listing 1, zweite Zeile). In diesem Fall erfolgt die Installation und zieht einige Pakete nach.

Welche Pakete in den Gem-Repositories für Asciidoctor vorliegen, zeigt der Befehl aus der letzten Zeile von Listing 1. Auch hier fördert bei Bedarf --pre unfertige Pakete zutage.

Listing 1

$ gem install asciidoctor-epub3
$ gem install asciidoctor-epub3 --pre
$ gem search asciidoctor

Unterschiede

Asciidoc und Asciidoctor unterscheiden sich in einigen Details. Bei einfachen Dokumenten spielt das quasi keine oder nur eine untergeordnete Rolle. Reizen Sie die Möglichkeiten der jeweiligen Software aber voll aus, treten die Unterschiede zutage. So werten Asciidoc und Asciidoctor Attribute auf verschiedene Weise aus, was zu unterschiedlichen Ergebnissen führt (Abbildung 1).

Abbildung 1: Die Unterschiede zwischen Asciidoc (oben) und Asciidoctor zeigen sich etwa, wenn man die Auswirkungen von jeweils unbekannten Attributen betrachtet.

Abbildung 1: Die Unterschiede zwischen Asciidoc (oben) und Asciidoctor zeigen sich etwa, wenn man die Auswirkungen von jeweils unbekannten Attributen betrachtet.

Es gibt aber noch viele weitere Unterschiede: In den meisten Fällen gehen die Möglichkeiten von Asciidoctor über das hinaus, was Asciidoc ermöglicht. Dank des eingebauten Kompatibilitätsmodus kann Asciidoctor jedoch alles verarbeiten, was Sie als Asciidoc formatiert haben. Der Newcomer bietet allerdings kein Pendant für den Befehl a2x (siehe Kasten “Einer für alles”).

Einer für alles

Mit dem Shell-Skript A2x konvertieren Sie schnell und automatisiert Quelltexte in verschiedene Ausgabeformate, insbesondere nach PDF. Zusätzlich vermag es in den eingelesenen Quelltexten enthaltene Optionen auszuwerten. Das erlaubt es, in den Dokumenten jeweils bestimmte Einstellungen vorab zu treffen, wie etwa die Sprache und das Format der Ausgabe sowie den Dokumententyp. Die Anweisungen stehen als Kommentare in den Zeilen direkt nach dem Dokumenten-Header. Der Aufruf a2x Datei übersetzt das Dokument mit allen vorhandenen Optionen. Alternativ geben Sie die Optionen am Shell-Prompt an. Als besonderes Feature unterstützt A2x mit der Option --epubcheck den automatisierten Aufruf des gleichnamigen Tools, das potenzielle Probleme in EPUB-Dokumenten identifiziert.

Praxis

Wie Asciidoc bedienen Sie auch Asciidoctor in der Regel über die Befehlszeile. Die wichtigsten Optionen – sie entsprechen weitgehend denen von Asciidoc – fasst die Tabelle “Asciidoctor: Befehlszeilenoptionen” zusammen. Ein Befehlsaufruf ohne Optionen übersetzt die angegebene Datei mit der Endung .adoc nach HTML5:

$ asciidoctor tst.adoc

Option

Wirkung

-b Format

Erzeugt Ausgaben als HTML5 (voreingestellt), XHTML5, DocBook5, Manpage oder – mit entsprechenden Plugins – als PDF, LaTeX oder EPUB

-d Typ

Neben den Klassikern Article (voreingestellt), Book und Manpage bietet Asciidoctor noch Ausgaben für eingebundenen Code an, wie einzelne Blöcke, Absätze oder Ähnliches.

-o Datei

Speichert die Ausgabe unter dem angegebenen Namen.

-D Verzeichnis

Speichert das Ergebnis im angegebenen Verzeichnis.

-s

Kopf- und Fußzeilen unterdrücken (für eingebundene Dokumente).

-n

Keine Nummerierung von Abschnitten.

-a Attribute

Asciidoc-Attribute setzen (überschreibt im Dokument vorhandene).

-B Basis

Definiert das Basisverzeichnis für zusätzlichen Code. Voreingestellt ist das aktuelle Verzeichnis.

-v

Ausführliche Meldungen ausgeben.

--failure-level Level

Warnstufe, ab der Fehlercodes erzeugt werden: WARN, ERROR, INFO, FATAL (voreingestellt).

-w

Warnungen im Terminal ausgeben.

-S

Abgesicherter Modus; deaktiviert potenziell unsichere Strukturen wie include::.

Voreingestellt unterdrückt das Tool Meldungen beim Konvertieren. Es zeigt lediglich schwerwiegende Fehler an, wie etwa das Fehlen eingebundener Bilder. Das stoppt das weitere Bearbeiten aber nicht.

Beim Umstieg von Asciidoc zu Asciidoctor gibt es einige Unterschiede zu beachten, die das Kapitel 90 im Benutzerhandbuch [7] zusammenfasst. Für die meisten Anwender dürften nur wenige Unterschiede wirklich relevant sein, etwa bei der Syntax. So gibt es für kursiven Text nur noch die Schreibweise _Text_, für Code nur noch `Text`, für literalen Text im Code nur `+{Text}+`. Doppelte Hochkommas erzeugen Sie durch "`Text`", einfache über '`Text`'. Asciidoctor erlaubt nun unter anderem abgekürzte Schreibweisen für Zitate, die Asciidoc nicht kennt. Dasselbe gilt für die sogenannten UI-Makros, die Tastenkürzel symbolisieren (Abbildung 2).

Abbildung 2: UI-Makros für Tastenkürzel gibt es bei Asciidoctor, nicht aber bei Asciidoc. Die Abbildung zeigt ein Beispiel aus der Dokumentation.

Abbildung 2: UI-Makros für Tastenkürzel gibt es bei Asciidoctor, nicht aber bei Asciidoc. Die Abbildung zeigt ein Beispiel aus der Dokumentation.

Bei Titeln greift nur noch die Syntax = Titel (asymmetrische Form), jedoch nicht mehr die symmetrische Form (= Titel =) und die Form mittels Unterstreichung. Unterstreichungen im Titel führen automatisch zum Einsatz des Kompatibilitätsmodus. Abschnitt 90.8 im Handbuch gibt außerdem eine Übersicht über neue oder zusätzliche Features.

Interessant ist die für Asciidoctor normale Schreibweise, jeden Satz in eine Zeile des Quelltexts zu schreiben, wie das etwa bei Programmcode üblich ist. Das ermöglicht Satzvertauschungen, das Auskommentieren oder Ähnliches wie in jeder Programmiersprache.

Wege zum PDF

Die klassische Struktur von Asciidoc orientiert sich mehr oder weniger direkt an HTML, was das Konvertieren in die darauf aufbauenden Formate einschließlich EPUB erleichtert. Wer eher lineare Dokumente wie Bücher erzeugen will, bevorzugt in der Regel PDF. Es gibt mehrere Wege, mit teilweise recht unterschiedlichen Ergebnissen, um dieses Format zu erzeugen.

Zum einen besteht die Möglichkeit, den Webbrowser zu nutzen. Man erzeugt eine HTML-Ausgabe, ruft sie im Browser auf und exportiert sie daraus als PDF. Der Vorteil: Dieser Weg unterstützt CSS-Optionen recht weitgehend. Alternativ nutzt man über A2x die Docbook5-Toolchain. Bei Asciidoctor erzeugt man mittels Asciidoctor-PDF direkt PDF. Das funktioniert eigentlich immer, oft aber nur mit mäßigen Ergebnissen.

Asciidoc eröffnet einen Weg über eine FOP-Umwandlung. Das funktioniert nicht immer problemlos, der Prozess ist aber recht schnell. Der Nachteil liegt darin, dass es keine vernünftigen Fehlermeldungen gibt und Fehler so oft lange unentdeckt bleiben.

Als dritte Option bleibt der Weg über LaTeX. Dabei erzeugen Sie mittels Asciidoc oder Asciidoctor entsprechenden Code, den Sie auf konventionelle Weise mit den LaTeX-eigenen Werkzeugen umwandeln. Das ermöglicht hochwertige Druckausgaben, erfordert aber zusätzliches LaTeX-Know-how und oft manuelle Feinarbeiten.

Unabhängig davon, welchen Weg Sie wählen: Interaktive Elemente gehen immer weitgehend verloren (Abbildung 3).

Abbildung 3: Interaktive Strukturen bei den HTML-Ausgabeformaten, wie etwa Click-Blocks, erlaubt nur Asciidoctor. Ein Mausklick auf <span class="ui-element">Answer</span> zeigt dann die im Quelltext vorgegebene Antwort (Beispiel aus der Originaldokumentation).

Abbildung 3: Interaktive Strukturen bei den HTML-Ausgabeformaten, wie etwa Click-Blocks, erlaubt nur Asciidoctor. Ein Mausklick auf Answer zeigt dann die im Quelltext vorgegebene Antwort (Beispiel aus der Originaldokumentation).

Fazit

Asciidoctor erweist sich als würdiger Nachfolger für Asciidoc. Die schnelle Arbeitsgeschwindigkeit und die zusätzlichen Plugins sowie die direkte Unterstützung in AsciidocFX [11] machen es zu einer guten, wenn auch komplexeren Alternative.

Gibt es nun also gar keinen Grund mehr, Asciidoc zu verwenden? Das kommt darauf an: Eine gut funktionierende Toolchain, etwa für E-Books, ist nicht zu verachten. Auch fallen die Ergebnisse speziell für diesen Fall manchmal kompakter aus als die Resultate von Asciidoctor-EPUB3. Zudem liegt die Komplexität bei der Arbeit mit Asciidoctor deutlich höher als bei Asciidoc; die zusätzlichen Möglichkeiten erschweren die Suche nach Fehlern.

Insgesamt macht die um Asciidoctor herum entstandene Infrastruktur einen deutlich agileren Eindruck. Es lohnt sich also für erfahrene Anwender, einen Umstieg zu prüfen. Für Einsteiger empfiehlt sich dagegen aufgrund der einfachen Handhabung das klassische Asciidoc. Wer darin sicher ist, meistert den Wechsel zu Asciidoctor später leichter. (jlu)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 10/2020 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben