<para>
  <emphasis>WICHTIGER HINWEIS</emphasis>
</para>
<literallayout>Dieses Buch behält bis zu seiner vollständigen Überarbeitung den Status <emphasis>BETAVERSION</emphasis>.
Mit den hier beschriebenen Techniken entsteht ein reales eBook. Alle bisher nicht erkannten Feinheiten und Unzulänglichkeiten werden in die finale Version des vorliegenden Buches einfließen.</literallayout>
<part xml:id="einführung">
  <title>Einführung</title>
  <para>
    Dieses kleine Büchlein richtet sich an alle, die sich einmal mit dem
    Thema beschäftigen wollen, ein eBook zu schreiben oder einfach nur
    zu erstellen. In der heutigen Zeit ist es unsagbar leichter
    geworden, ein Buch zu schreiben, als es bis zum 20 Jahrhundert war.
    Spätestens mit Aufkommen sogenannter eBooks wurde die Hemmschwelle
    für all jene deutlich gesenkt, die sich nicht mit dem Druck ihres
    Erzeugnisses beschäftigen wollten. Und genau hier wollen wir
    ansetzen und aufzeigen, welche Möglichkeiten man im Jahre 2018
    n.Chr. hat.
  </para>
  <para>
    Seinen Ursprung hat das Buch gefunden, als es darum ging, einen
    Artikel über Progressive WebApps in einer Zeitschrift
    veröffentlichen zu wollen, denn es stellte sich heraus, dass man
    dieses spezielle Thema nicht <quote>einfach ’mal so</quote> auf 5
    DIN A4 Seiten unterbringt. Eine Artikelserie wäre die Alternative
    gewesen, doch auch hier stößt man auf gewisse Probleme. Eine solche
    Serie möchte nicht mitten im Thema einsteigen und sollte das vorher
    behandelte noch einmal anreißen, bevor man fortschreitet. Somit
    blieben für’s erste nur noch zwei Publikationsmöglichketen. Zum
    einen einen die lose Veröffentlichung im Internet oder aber die
    transportable <footnote>
      <para>
        zumindest auf mobilen Geräten
      </para>
    </footnote> Variante in Form eines eBooks. Dass wir beides
    miteinander verbinden können, stellte sich heraus, als es um die
    Analyse der Werkzeuge ging.
  </para>
  <para>
    Dass das aber nur die halbe Wahrheit ist, und ich privat mit Henrik
    Schulze einen im militärgschichtlichen Umfeld sehr aktiven und lokal
    äußerst bekannten Buchautor kenne, vervollständigt meine Aussage.
    Allein die technischen Schwierigkeiten, mit denen Herr Schulze
    regelmäßig kämpfte, war ausschlaggebender Grund, sich mit dem Thema
    des Bücherschreibens aus technischer Sicht eingehender zu
    beschäftigen. Jeder, der schon mehr als einmal längere Texte in Form
    bringen durfte, kennt die Schwierigkeiten. Man kämpft teilweise gar
    immer wieder mit den selben Problemen - den Programmen. So spielen
    bis heute Dateigrößen bei allen etablierten Office-Anwendungen eine
    äußerst dominate Rolle, wenn es darum geht, dem Anwender zu
    schikanieren. Meine Rettungseinsätze in diesem Umfeld gingen am Ende
    soweit, dass ich DOCX-Dateien entpackte, um darin Passagen zu
    korrigieren, die Programmabstürze hervorriefen. Dass die mit vielen
    Abbildungen versehenen Bücher am Ende auf mehrere Dateien
    aufgesplittet werden mussten, half zumindest, die technischen
    Schwierigkeiten punktuell zu minimieren.
  </para>
  <para>
    Alternative Möglichkeiten sind natürlich Desktop Publishing
    Lösungen. Jedoch stehen wir hier vor der Herausforderung, dass die
    Erstellung eines Dokuments sich hierin komplett anders gestaltet.
    Der Anwender wird hier deutlich technischer gefordert. Für Neulinge
    ist es unendlich schwieriger, in einer solchen DTP-Anwendung ans
    Ziel zu kommen. Allerdings wird man damit belohnt, dass nahezu alle
    Druckereien mit den Formaten umgehen können.
  </para>
  <para>
    Haben wir diese Hürden genommen, stoßen wir auch gleich auf das
    nächste Problem: den Druck. Sucht man sich erst einen Verlag und
    setzt sich selbst unter Druck, weil man sich vertraglich auf ein
    Abgabetermin und/oder das Format geeinigt hat oder schreibt man erst
    das Buch, konzentriert sich auf dessen Inhalt und schaut im
    Anschluss (oder <quote>kurz vor Fertigstellung) nach einer Druckerei
    um, mit der man sich einigt? Letztere Option erscheint meist als der
    Weg, der für den Autor am</quote>gesündesten&quot; zu sein scheint.
    Wird dieser dann aber mit der Aussage konfrontiert, dass Exporte aus
    Word&amp;Co für den Druck äußerst ungeeignet sind, steht selbiger
    wieder am Anfang.
  </para>
  <para>
    Nun wollen wir uns aber nicht mit den Schwierigkeiten anderer
    Autoren beschäftigen, sondern schauen, wie wir im Jahr 2018 Bücher
    erstellen können, die wir vorzugsweise in elektronischer Form
    bereitstellen. Dass wir dabei aus Fehlern lernen wollen, ist
    selbstverständlich. Mein Vorteil ist, dass ich, bedingt durch meine
    unterstützende Tätigkeit, auf Erfahrungen zurückgreifen kann.
  </para>
  <para>
    Bevor wir uns dem Hauptthema des Buches abschließend zuwenden,
    wollen wir noch einmal kurz einen Blick über den Tellerrand werfen
    und ganz kurz beleuchten, welche Möglichkeiten man im zweiten
    Jahrzehnt des 21. Jahrhunderts hat, um ein eBook zu ertellen, dass
    gegebenenfalls auch einmal in den Druck gehen kann.
  </para>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="alternative-lösungen">
    <title>Alternative Lösungen</title>
    <section xml:id="office-anwendungen">
      <title>Office-Anwendungen</title>
      <para>
        Mit Erscheinen der Version LibreOffice 6.0 steht neben dem
        Export als PDF auch die Möglichkeit bereit, sein Werk als ePub
        zu speichern. Dieses Format ist im eBook-Sektor wahrscheinlich
        eines der verbreitesten, um anwendungsunabhängig Dokumente in
        die weite Welt des Datennetzes zu streuen. Nun haben wir in
        unserer Einleitung aber von den Schwierigkeiten gesprochen, die
        Office-Anwendungen haben, wenn die Dateigröße ein bestimmtes Maß
        überschreitet. Dieses Problem kann man verringern, aber leider
        nicht verhindern, indem man die Bilder nicht einbettet, sondern
        nur als Verknüpfung einbindet. Das wiederum setzt voraus, dass
        die Bilder immer mit dem Dokument mitgesendet werden, wenn man
        selbiges auf einem anderen Rechner betrachten oder gar
        weiterbearbeiten möchte.
      </para>
      <para>
        Eine weitere Möglichkeit, ist die Arbeit mit einem sogenannten
        <quote>Globaldokument</quote> (engl.
        <quote>Masterdocument</quote>), bei dem man die einzelnen
        Abschnitte auf separate und vorallem eigenständige
        Office-Dateien verteilt. Im <quote>Globaldokument</quote> werden
        sie als Verknüpfung eingebunden. Der Vorteil hierbei ist, dass
        man die Dateigröße des Gesamtwerkes auf kleine Häppchen verteilt
        und sich zusätzlich die Möglichkeit schafft, jedes
        Einzeldokument unabhängig bearbeiten zu können. Der größte
        Nachteil dieser Lösung ist, dass alle Formate im Vorfeld
        abgestimmt werden sollten, weil sie sonst im Nachgang in allen
        Teildokumenten nachzuziehen sind, um mit ihnen arbeiten zu
        können. Dies nicht zu tun, erhöht den Aufwand im Masterdokument
        und verhindert früher oder später die Schaffung eines
        abgerundeten und einheitlichen Gesamterscheinunsbild. Auch ist
        das Masterdokument nur mit seinen <quote>Kindern</quote> (den
        eingebundenen Einzeldokumenten) lesbar, was das Teilen des
        Gesamtwerkes erschwert und beim Empfänger die Installation der
        Anwendung erfordert, die mit der Struktur umgehen kann (also
        MS-Word oder LibreWriter).
      </para>
      <para>
        Wurden die Hürden der Office-Anwendungen ersteinmal genommen,
        kann man weitestgehend gute Ergebnisse erzielen. Soll das
        Ergebnis jedoch in den Druck gehen, ergeben sich weitere
        Schwierigkeiten. Aus Worddateien erzeugte PDF stoßen bei
        Druckereien nicht unbedingt auf Gegenliebe, da diese Erzeugnisse
        (technisch gesehen) ein stark verfälschtes Erscheinungsbild
        aufweisen. Wer es nicht glaubt, sollte einmal mit Textboxen und
        vielen Fußnoten arbeiten, das Ergebnis als PDF exportieren und
        anschließend versuchen, mehrzeilige Textpassagen zu kopieren.
        Man stellt sehr schnell fest, dass aus zusammenhängenden Sätze
        stark fragmentierte Einzelteile wurden.
      </para>
    </section>
    <section xml:id="desktop-publishing">
      <title>Desktop Publishing</title>
      <para>
        Auch wenn ich wenig Erfahrungen auf dem Gebiet habe, weiß ich
        zumindest, dass das Gro der Druckereien, Erzeugnisse aus dem
        DTP-Bereich am besten verarbeiten kann, weil diese
        Softwarelösungen darauf spezialisiert sind, Layouts für
        Druckerzeugnisse zu schaffen. Damit wird auch der Fokus dieser
        Anwendungen klar, der eindeutig darauf ausgelegt ist,
        millimetergenaue Positionierung von Elementen auf einer Seite
        vorzunehmen. Lange Fließtexte, wie sie bei Büchern entstehen,
        werden hierin nicht so einfach möglich. Fußnoten und andere
        Automatismen aus dem Bereich der Office-Anwendungen sind
        zumindest bei freien/kostenlosen DTP-Werkzeugen schwierig oder
        überhaupt nicht umsetzbar. Diese muss man teilweise händisch auf
        den Seiten platzieren.
      </para>
    </section>
    <section xml:id="latex">
      <title>(La)TeX</title>
      <para>
        Humorvoll ausgedrückt, schwören wahre Helden auf TeX<footnote>
          <para>
            tex ist eine Markupsprache
          </para>
        </footnote> bzw. dessen Aufsatz LaTeX<footnote>
          <para>
            latex erweitert den Sprachumfang von TeX
          </para>
        </footnote>, einem Format, dass wahrscheinlich nur Nerds
        verstehen und mögen. Auch hier halten sich meine Erfahrungen in
        Grenzen. Natürlich hat man, wenn man in der IT arbeitet,
        schonmal TeX-Schnipsel oder ganze Dokumente gesehen und kennt
        auch deren Vorteile, aber ein ganzes Buch damit zu schreiben,
        fällt dann doch schwer. Die Format- und Steueranweisungen stören
        den Lesefluss immens. Dennoch wollen wir diese Lösungen
        erwähnen, da auch hier millimetergenaue Positionierungen möglich
        sind. Anders als bei Office- und DTP-Lösungen werden
        LaTeX-Dokumente weniger visuell geschrieben. Optisch kann man
        das Ergebnis erst nach einem Compilerlauf begutachten. Dass das
        Kompilat die verschiedensten Ausgabeformate ermöglicht (PDF ist
        nur eines von vielen) macht diese Auszeichnungssprache zu einem
        idealen Werkzeug, wenn man sich erst am Ende auf ein Format
        festlegen möchte oder sein Ergebnis gar in allen erdenklichen
        Formaten bereitzustellen. Auch darf man davon ausgehen, dass man
        mit TeX-basierten Dokumenten in Druckereien nicht auf
        verschreckte, große Augen stößt. Man kann über TeX durchaus noch
        mehr sagen, aber wir sparen uns die Energie lieber für das auf,
        was im Titel des Buches bereits ankündigten.
      </para>
    </section>
    <section xml:id="fazit">
      <title>Fazit</title>
      <para>
        Ein Sprichwort sagt <quote>alle Wege führen nach Rom</quote>.
        Unser Abschnitt <quote>Alternative Lösungen</quote> zeigt, dass
        es davon in der Tat sehr viele gibt. Sie unterscheiden sich halt
        im wesentlichen in ihrer Bedienbarkeit oder Ergebnissicherheit.
        Optisch nehmen sich der Erzeugnisse nicht viel. Die Spreu trennt
        sich spätestens dann vom Weizen, wenn es darum geht, das
        ursprünglich als reines eBook konzipierte Buch in den Druck zu
        geben. Sollte dieses Vorhaben, nicht zur Debatte stehen und die
        Leserschaft über nur wenige Zielformate erreichbar sein, ist mit
        den Office-Produkten für’s erste gut beraten. Aber auch die
        anderen Lösungen lassen sich mehr oder weniger gut für die
        Erfassung der Texte verwenden, nur wird man hier als Autor von
        der Technik abgelenkt. Wir werden im folgenden eine bisher nicht
        erwähnte Möglichkeit aufzeigen, die manchem ersteinmal untypisch
        erscheinen mag, aber eventuell auch die Lösung aller bisher
        betrachteten Probleme aufzeigt.
      </para>
    </section>
  </chapter>
</part>
<part xml:id="markdown">
  <title>Markdown</title>
  <para>
    Wer ein Buch schreibt, möchte sich vorzugsweise auf den Inhalt
    konzentrieren. Das verwendete Werkzeug soll im wahrsten Sinne des
    Wortes unterstützen und in dieser Rolle vor allem folgende Aspekte
    erfüllen:
  </para>
  <itemizedlist spacing="compact">
    <listitem>
      <para>
        Schreib- und Lesefluss darf von der Anwendung nicht unnötig
        gestört werden
      </para>
    </listitem>
    <listitem>
      <para>
        Seitenlayout und Formatierungen soll über das gesamte Buch
        hinweg einheitlich sein (zentrale Vorgaben)
      </para>
    </listitem>
    <listitem>
      <para>
        Unterstützung von Fußnoten, Endnoten, Verzeichnisse, Tabellen,
        Listen Abbildungen etc.
      </para>
    </listitem>
    <listitem>
      <para>
        geringe Lernkurve für die Anwendung, mit der der Text
        geschrieben wird
      </para>
    </listitem>
    <listitem>
      <para>
        Wörterbuch und/oder andere Fehleranzeige-/-korrekturhilfen
      </para>
    </listitem>
  </itemizedlist>
  <para>
    All das wird mehr oder weniger von den in der Einleitung genannten
    <link linkend="alternative_lösungen">alternativen Lösungen</link>
    umgesetzt. Einige Lösung verfolgen dabei einen
    <quote>wysiwyg</quote>-Ansatz<footnote>
      <para>
        <emphasis>W</emphasis>hat <emphasis>y</emphasis>ou
        <emphasis>s</emphasis>ee, <emphasis>i</emphasis>s
        <emphasis>w</emphasis>hat <emphasis>y</emphasis>ou
        <emphasis>g</emphasis>et bedeutet, dass der Schreiber bereits
        beim Schreiben sieht, wie das Endergebnis aussieht.
      </para>
    </footnote>, andere hingegen arbeiten mit Auszeichnungselementen und
    zeigen erst nach einem Übersetzungslauf das Ergebnis in seiner
    finalen Form. Ich wage jedoch zu behaupten, dass all diese Lösungen
    immer das Manko haben und den Autor in irgendeiner vom Schreiben
    oder (Korrektur)Lesen abzulenken, weil entweder die Positionierung
    der Elemente sich aufwändiger gestaltet oder der Text von
    Formatierungssymbolen überhäuft wird. Man muss bedenken, dass beide
    Aspekte direkten Einfluss auf die Arbeitsgeschwindigkeit und
    Konzentration nehmen.
  </para>
  <para>
    Um dem entgegenzuwirken kann man an Schulungen teilnehmen (Fehler
    und Unzulänglichkeiten lassen sich damit nicht beseitigen) oder aber
    Alternativen suchen. Wir versuchen mit Markdown zweiten Ansatz. Wir
    werden im Laufe des Buches feststellen, dass wir mit Markdown auch
    nicht die Antwort auf <quote>die Frage aller Fragen<footnote>
      <para>
        Die Antwort auf Frage aller Fragen <quote>nach dem Leben, dem
        Universum und dem ganzen Rest</quote> lautet 42.
      </para>
    </footnote></quote> gefunden haben, aber dennoch eine alternative
    Möglichkeit gefunden haben, die den Fokus des Autors wieder auf das
    wesentliche lenkt: dem Verfassen von Texten.
  </para>
  <para>
    Doch was ist Markdown?
  </para>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="einführung-in-markdown">
    <title>Einführung in Markdown</title>
    <para>
      Markdown ist eine Auszeichnungssprache, die ihren Ursprung in den
      <quote>plain text emails</quote> hat. Damit sind solche
      Erzeugnisse des weltweiten Datennetzes gemeint, die ausschließlich
      mit Buchstaben, Zahlen und Symbolen erstellt werden. Bei diesen
      E-Mails steht der Text im Vordergrund. Unter Zurhilfenahme von
      Symbolen (bspw. einem Stern <literal>*</literal>) und anderen
      Mitteln, werden dem Text Betonungen, Hervorhebungen und anderen
      Ausdrucksformen beigebracht. Gleiches gilt für die Strukturierung,
      die bspw. Abschnitte, Überschriften, Listen oder Tabellen sein
      können. Dabei verfolgt Markdown einen äußerst minimalistischen
      Ansatz, der die zur Textgestaltung erforderlichen
      Zusatzinformationen so stark reduziert, dass Lesefluss nahezu
      ungestört bleibt und die Bedeutung der Elemente selbst für Laien
      klar aus dem Kontext hervorgeht.
    </para>
    <para>
      Doch warum sollte man auf eine solche Auszeichnungssprache
      ausweichen, wo es für das Formatieren bereits verschiedene
      Lösungen gibt? Die wahrscheinlich treffendste Antwort ist die
      Unabhängigkeit vom Werkzeug. Markdown-Dokumente lassen sich in
      ihrer Rohform (also im Quelltext) mit jedem einfachen Texteditor
      öffnen. Das trifft zwar grundsätzlich auch für alle anderen
      Formatierungsmöglichkeiten von Textdateien zu (auch
      HTML-Dokumente), jedoch haben diese die Eigenschaft, den Text mit
      deutlich mehr Zusatzinformationen zu überfrachten, was sich
      zumindest auf den Lesefluss negativ auswirkt.
    </para>
    <para>
      Neben Markdown gibt es mit AsciiDoc, reStructuredText oder Textile
      zwar viele Alternativen, die ein ähnliches Ziel verfolgen, jedoch
      ist deren Bekanntheitsgrad teilweise eingeschränkt. Auch bieten
      manche mehr Möglichkeiten an, woraus eine umfangreicheres
      Vokabular resultiert und die Syntax komplexer macht. Das schlägt
      sich natürlich auch auf den Lesefluss nieder. Wahrscheinlich ist
      das auch der Grund dafür, dass mit GitHub und StackOverflow große
      Anbieter auf Markdown setzten, was sich auch auf die Verbreitung
      wiederspiegelt. Selbst weniger technische Plattformen, wie die
      Deutsche Presseagentur (dpa) setzen auf Markdown<footnote>
        <para>
          <link xlink:href="https://web.archive.org/web/20150402181810/http://www.dpa-newslab.com/2010/04/22/dpa-notizbuch-markdown/">https://web.archive.org/web/20150402181810/http://www.dpa-newslab.com/2010/04/22/dpa-notizbuch-markdown/</link>
        </para>
      </footnote>.
    </para>
    <para>
      Um das Bild weiter abzurunden, wollen wir noch einmal kurz auf die
      Entstehungsgeschichte eingehen. Die Markdown-Begründer John Gruber
      und Aaron Swartz veröffentlichten 2004 die Version 1.0.0 und im
      gleichen Jahr die bis heute unveränderte 1.0.1. Die beiden Herren
      sammelten die Ausdrucksformen aus <quote>plain text emails</quote>
      und brachten sie in ein einheitliches Format. Dass dabei HTML als
      Gegenstück zu reinen Text-E-Mails eine wesentliche Rolle spielte,
      zeigt auch das Perlskript, dass auf der Homepage der Sprache
      daringfireball.net<footnote>
        <para>
          <link xlink:href="https://daringfireball.net/projects/markdown/">https://daringfireball.net/projects/markdown/</link>
        </para>
      </footnote> zu finden ist. Mit dessen Hilfe lassen sich
      Markdownstrukturen in HTML übersetzen.
    </para>
    <para>
      Dass seit 2004 keine Änderungen vorgenommen wurden, liegt
      wahrscheinlich daran, dass die Sprache an sich vollständig
      erscheint. Einzig die inhaltlichen und technischen Erweiterungen,
      die sich rund um die Auszeichnungssprache bilden, sind ein Zeugnis
      dafür, dass aus technischer Sicht bestimmte Dinge einfacher
      dargestellt werden können (automatische Erkennung von Links) oder
      Dinge nachgereicht wurden, die im Originalwortschatz nicht
      vorkamen, den Einsatzzweck allerdings deutlich erweitern
      (Tabellen, Fußnoten).
    </para>
    <para>
      Doch nun genug der vielen Worte. Lasst die Spiele beginnen!
    </para>
  </chapter>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="abschnitte-und-zeilenumbrüche">
    <title>Abschnitte und Zeilenumbrüche</title>
    <para>
      Bevor wir auf Textelemente eingehen, wollen wir uns mit der
      Strukturierung der Dokumente befassen. Gemeint ist die
      Unterteilung in Abschnitte und einfache Zeilenumbrüche, die
      innerhalb eines Abschnitts vorkommen, ohne einen neuen
      einzuleiten.
    </para>
    <para>
      Markdown orientiert sich an HTML und in dieser Eigenschaft können
      lange Sätze umgebrochen werden ohne das mit ihnen ein
      Zeilenumbruch verbunden wird. In HTML wird für einen Zeilenumbruch
      mit dem Tag<footnote>
        <para>
          HTML-Tags sind die Elemente der Markupsprache HTML, mit denen
          Inhalte strukturiert werden.
        </para>
      </footnote> <literal>&lt;br&gt;</literal> erzwungen.
      Zeilenumbrüche, die im HTML-Quelltext gemacht werden, um bei
      langen Textpassagen nicht ständig von links nach rechts zu müssen,
      wird der Betrachter der Internetseite nie sehen, da diese nicht
      gerendert<footnote>
        <para>
          Damit ist die Visualisierung gemeint, also die Darstellung,
          die sich aus den Anweisungen, die mit HTML oder anderen
          Sprachen definiert wurden.
        </para>
      </footnote> werden. Da Markdown vor allem für gute Lesbarkeit
      steht, sind auch hierin Umbrüche von langen Texten möglich. Einen
      Zeilenumbruch erzwingt man hier jedoch etwas unscheinbarer, als es
      in HTML der Fall ist. Man hängt der Zeile zwei Leerzeichen an.
    </para>
    <para>
      Unser Beispiel erweitern wir nun um einen Text <quote>nächste
      Zeile</quote>, der einem Zeilenumbruch folgt, ohne ein neues
      Blockelement (in diesem Fall ein Abschnitt) einzuleiten. Ferner
      werden im nun folgenden Beispiel alle Leerzeichen in Form eines
      Punkt <quote><literal>⋅</literal></quote> <quote>sichtbar</quote>
      gemacht und der Zeilenumbruch als
      <quote><literal>¶</literal></quote> angezeigt.
    </para>
    <programlisting language="html">
&lt;p&gt;Abschnitt 1&lt;br&gt;nächste Zeile&lt;/p&gt;
&lt;p&gt;Abschnitt 2&lt;br&gt;nächste Zeile&lt;/p&gt;
</programlisting>
<literallayout>Abschnitt 1
nächste Zeile</literallayout>
<literallayout>Abschnitt 2
nächste Zeile</literallayout>
    <para>
      Neben einfachen Zeilenumbrüchen, die in der Regel nur zwei Sätze
      voneinander trennen, nicht aber ein neues Teilthema beginnen, gibt
      es Abschnitte/Absätze. Sie unterteilen den Text in einzelne
      Teilthemen-Blöcke. Meist leitet ein neuer Absatz eine Passage ein,
      die sich etwas stärker vom vorangegangenem abgrenzt.
    </para>
    <para>
      In HTML werden solche Absätze mit <literal>&lt;p&gt;</literal>-Tag
      gekennzeichnet. In Markdown haben wir keine Tags, schon gar nicht
      für die Einleitung neuer Abschnitte oder Zeilenumbrüche. Hier wird
      mit ENTER und Leerzeichen (spaces) gearbeitet.
    </para>
    <para>
      Einen neuen Abschnitt leitet man ein, indem man zwischen dem
      aktuellen und dem neuen eine leere Zeile platziert. Das gilt im
      übrigen für alle Blockelemente.
    </para>
    <programlisting language="markdown">
Abschnitt 1

Abschnitt 2
</programlisting>
    <programlisting language="html">
&lt;p&gt;Abschnitt 1&lt;/p&gt;
&lt;p&gt;Abschnitt 2&lt;/p&gt;
</programlisting>
    <para>
      Abschnitt 1
    </para>
    <para>
      Abschnitt 2
    </para>
  </chapter>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="span-elemente">
    <title>Span-Elemente</title>
    <para>
      Nachdem wir nun wissen, wie man dass man überlange Zeilen einfach
      umbrechen kann, neue Abschnitte mit einer Leerzeile einleitet und
      einfache Zeilenumbrüche durch anhängen zweier Leerstellen
      erreicht, wollen wir uns die einfacheren Formatanweisungen
      anschauen. Damit sind Spanelemente (auch Inline-Elemente genannt)
      gemeint, die Teile eines Fließtextes sind. Einzelne Textfragmente
      werden aber erst dann zu Spanelementen, wenn sie individuell
      formatiert oder hervorgehoben werden. Ansonsten bleiben sie
      einfache Bestandteile eines Textes.
    </para>
    <section xml:id="betonung">
      <title>Betonung</title>
      <para>
        Wer, wie ich, im Deutschunterricht nicht der beste Zuhörer war
        und lieber die Ränder seiner Schulbücher derart auszuschmückte,
        dass aus ihnen Daumenkinos wurden, der wird sich
        <quote>freuen</quote>, wenn wir noch einmal ganz kurz auf
        Definitionen eingehen, die dem Text etwas würzen. Zum Beispiel
        mengt die Betonung der Grundmelodie von Sätzen etwas besonderes
        bei. Ich spreche von Situationen, in denen einzelne Worte oder
        kurze Fragmente hervorgehoben werden. Das geschieht in der Regel
        in Form von Unterstreichungen, kursiver Schriftstellung oder
        fetter Formatierung.
      </para>
      <para>
        Da sich Markdown primär an der Webwelt orientiert, denken wir
        wahrscheinlich gleich an die HTML-Tags
        <literal>&lt;u&gt;</literal>, <literal>&lt;i&gt;</literal> und
        <literal>&lt;b&gt;</literal>. Dass dem nicht so ist, liegt
        daran, dass diesen Tags keine betonende Semantik zugesprochen
        wird. Wir werden stattdessen die beiden Tags
        <literal>&lt;em&gt;</literal> und
        <literal>&lt;strong&gt;</literal> finden. Unterstrichene
        Passagen finden wir in der Auszeichnungssprache nicht, da es bei
        Markdown nicht um die optische Gestaltung geht, sondern, wie
        bereits erwähnt um die Semantik, also Betonung und
        Hervorhebungen im Sinne einer anderen Aussprache.
      </para>
      <programlisting language="markdown">
*single asterisks*
_single underscores_
**double asterisks**
__double underscores__
</programlisting>
      <programlisting>
&lt;em&gt;single asterisks&lt;/em&gt;  
&lt;em&gt;single underscores&lt;/em&gt;  
&lt;strong&gt;double asterisks&lt;/strong&gt;  
&lt;strong&gt;double underscores&lt;/strong&gt;
</programlisting>
<literallayout><emphasis>single asterisks</emphasis>
<emphasis>single underscores</emphasis>
<emphasis role="strong">double asterisks</emphasis>
<emphasis role="strong">double underscores</emphasis></literallayout>
      <para>
        Dass man Span-Elemente auch Inline-Elemente nennt, haben wir
        bereits erwähnt. Diese alternative Bezeichnung verrät
        wahrscheinlich schon eher, dass solche Elemente einzelne Worte
        und Textpassagen sind und seltener als großer zusammenhängender
        Textblock in Erscheinung treten. Das folgende, ausführlichere
        Beispiel soll dies veranschaulichen.
      </para>
      <programlisting language="markdown">
Lorem ipsum dolor *sit amet*, consetetur _sadipscing elitr_,
sed diam nonumy eirmod tempor invidunt ut _**labore et** dolore_
magna aliquyam erat, sed diam voluptua.
</programlisting>
      <para>
        Lorem ipsum dolor <emphasis>sit amet</emphasis>, consetetur
        <emphasis>sadipscing elitr</emphasis>, sed diam nonumy eirmod
        tempor invidunt ut <emphasis><emphasis role="strong">labore
        et</emphasis> dolore</emphasis> magna aliquyam erat, sed diam
        voluptua.
      </para>
    </section>
    <section xml:id="links">
      <title>Links</title>
<literallayout>Das welteweite Datennetz wurde erst durch die Möglichkeit der Verknüpfung zu einem Netz. Diese sind selbstverständlich auch in Markdown möglich. Man unterscheidet dabei zwischen internen und externen Links. Erstgenannte zeigen auf bestimmte Stellen innerhalb eines Dokuments und werden Sprungmarken genannt.
Externe Verweise zeigen auf andere (externe) Dokumente. Bezogen auf das Internet verweisen diese auf Dokumente, die unter der gleichen Domain gefunden werden können oder sich gar auf Servern Dritter befinden.</literallayout>
      <programlisting language="markdown">
[localhost](http://localhost)  
[localhost](http://localhost &quot;Tooltip-Text&quot;)  
[unser Impressum](/impressum)  
[Abschnitt &quot;Links&quot;](#links)
</programlisting>
      <programlisting language="html">
&lt;a href=&quot;http://localhost&quot;&gt;localhost&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;http://localhost&quot; title=&quot;Tooltip-Text&quot;&gt;localhost&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;/impressum&quot;&gt;unser Impressum&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;#links&quot;&gt;Abschnitt “Links”&lt;/a&gt;
</programlisting>
<literallayout><link xlink:href="http://localhost">localhost</link>
<link xlink:href="http://localhost">localhost</link>
<link xlink:href="/impressum">unser Impressum</link>
<link linkend="links">Abschnitt <quote>Links</quote></link></literallayout>
      <para>
        Wer den Lesefluss, aber auch das Erscheinungsbild der
        Markdown-Dokumente nicht unnötig stören möchte, kann die Adresse
        eines Links auch außerhalb des Textes platzieren. Dafür muss der
        Link mit einer eindeutigen, frei wählbaren ID versehen werden,
        um eine Verbindung zwischen dem Platzhalter im Text und der
        Zuweisung der zugehörigen Adresse zu ermöglichen.
      </para>
      <programlisting language="markdown">
Es gibt neben [DuckDuckGo][duck] und [Tor][] sehr viele Internetseiten, die ihre
Privatsphäre schützen oder gar ihre Identität gegenüber Dritte verbergen.
Ein sehr nettes Handbuch findet man [hier][3].

[duck]: https://duckduckgo.com
[Tor]: https://duckduckgo.com
[3]: https://www.privacy-handbuch.de
</programlisting>
      <programlisting language="html">
Es gibt neben &lt;a href=&quot;https://duckduckgo.com&quot;&gt;DuckDuckGo&lt;/a&gt; und &lt;a href=&quot;https://duckduckgo.com&quot;&gt;Tor&lt;/a&gt; sehr viele Internetseiten, die ihre  
Privatsphäre schützen oder gar ihre Identität gegenüber Dritte verbergen.  
Ein sehr nettes Handbuch findet man &lt;a href=&quot;https://www.privacy-handbuch.de&quot;&gt;hier&lt;/a&gt;.
</programlisting>
      <para>
        Es gibt neben
        <link xlink:href="https://duckduckgo.com">DuckDuckGo</link> und
        <link xlink:href="https://duckduckgo.com">Tor</link> sehr viele
        Internetseiten, die ihre Privatsphäre schützen oder gar ihre
        Identität gegenüber Dritte verbergen. Ein sehr nettes Handbuch
        findet man
        <link xlink:href="https://www.privacy-handbuch.de">hier</link>.
      </para>
    </section>
    <section xml:id="bilder">
      <title>Bilder</title>
      <para>
        Eine andere Form der Verlinkung stellt die Einbettung von Grafik
        und Bildern dar. Warum? Auch hier wird auf eine Adresse
        verwiesen, die nicht unmittelbarer Bestandteil des Dokumentes
        ist. In HTML werden sie durch den
        <literal>&lt;img&gt;</literal>-Tag eingebunden. In Markdown
        werden Grafiken ähnlich den Links in dem Text eingebettet.
        Analog zu den Links, können Platzhalter im Text und die
        Definition der Adresse außerhalb des Fließtextes für eine
        bessere Lesbarkeit sorgen.
      </para>
      <programlisting language="markdown">
![Markdown-Verweis]  
![Markdown-Alt](resources/Markdown-mark.png)  
![Markdown-Alt+Title](resources/Markdown-mark.png &quot;Quelle: https://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg&quot;)

[Markdown-Verweis]: resources/Markdown-mark.png
</programlisting>
      <programlisting language="html">
&lt;img src=&quot;resources/Markdown-mark.png&quot; alt=&quot;Markdown-Verweis&quot;&gt;  
&lt;img src=&quot;resources/Markdown-mark.png&quot; alt=&quot;Markdown-Alt&quot;&gt;  
&lt;img src=&quot;resources/Markdown-mark.png&quot; title=&quot;Quelle: https://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg&quot; alt=&quot;Markdown-Alt+Title&quot;&gt;
</programlisting>
<literallayout><inlinemediaobject>
<imageobject>
<imagedata fileref="resources/Markdown-mark.png" />
</imageobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="resources/Markdown-mark.png" />
</imageobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<objectinfo>
<title>
Quelle: https://upload.wikimedia.org/wikipedia/commons/4/48/Markdown-mark.svg
</title>
</objectinfo>
<imagedata fileref="resources/Markdown-mark.png" />
</imageobject>
</inlinemediaobject></literallayout>
    </section>
    <section xml:id="quelltext">
      <title>Quelltext</title>
      <para>
        Es gibt Situationen, in denen technische Feinheiten
        hervorgehoben werden sollen. Dazu gehören neben mehrzeiligen
        Quelltextfragmenten auch einzelne Elemente, wie Namen von
        Variablen, Funktionen oder anderen Konstrukten aus Programmier-
        oder Skriptsprachen. Man sieht nicht selten, dass diese in
        Dokumenten in Anführungsstriche verpackt werden. Semantisch
        korrekt ist jedoch, solche Elemente als das auszuweisen, was
        sich wirklich sind: Quellcode. Als Teile von Fließtexten werden
        diese Elemente durch einfache <quote>Backsticks</quote> (also
        ```) ausgezeichnet.
      </para>
      <programlisting language="markdown">
Während PHP `foreach` ein Bestandteil der Skriptsprache selbst ist,
ist es in JavaScript eine Funktion von Arrays und nennt sich hier `each`.
</programlisting>
      <programlisting language="html">
Während PHP &lt;code&gt;foreach&lt;/code&gt; ein Bestandteil der Skriptsprache selbst ist,
ist es in JavaScript eine Funktion von Arrays und nennt sich hier &lt;code&gt;each&lt;/code&gt;.
</programlisting>
      <para>
        Während PHP <literal>foreach</literal> ein Bestandteil der
        Skriptsprache selbst ist, ist es in JavaScript eine Funktion von
        Arrays und nennt sich hier <literal>each</literal>.
      </para>
    </section>
    <section xml:id="spanelement-erweiterungen">
      <title>Spanelement-Erweiterungen</title>
      <para>
        Dass sich mit Markdown nicht der gesamte Funktionsumfang von
        HTML umsetzen lässt, versteht sich von selbst. Schließlich ist
        ein primärer Charakter dieser Auszeichnungssprache ihre
        Einfachheit. Dennoch fehlt dem Original das eine oder andere
        Feature, das durchaus sinnvoll ist. Auf diese
        Spracherweiterungen wollen wir im folgenden eingehen.
      </para>
      <section xml:id="durchstreichen-hoch--und-tiefstellen-erweiterungen">
        <title>Durchstreichen, Hoch- und Tiefstellen
        (Erweiterungen)</title>
        <programlisting language="markdown">
In Markdown mit Hilfe von Erweiterungen etwas ~~durchstreichen~~, hoch^stellen^ oder tief~stellen~ kann jeder, aber unterstreichen, scheinbar nicht.
</programlisting>
        <programlisting language="html">
</programlisting>
        <para>
          In Markdown mit Hilfe von Erweiterungen etwas
          <emphasis role="strikethrough">durchstreichen</emphasis>,
          hoch<superscript>stellen</superscript> oder
          tief<subscript>stellen</subscript> kann jeder, aber
          unterstreichen, scheinbar nicht.
        </para>
      </section>
      <section xml:id="abkürzungen-erweiterung">
        <title>Abkürzungen (Erweiterung)</title>
        <para>
          Eine weitere Spracherweiterung sind Abkürzungen. Diese werden
          im Fließtext platziert. Ihre Langbezeichnung wird in der Regel
          als sogenannter Tooltip eingeblendet. Solche Tooltips sind für
          Geräte mit Maus, eine feine Sache. Doch was ist mit Geräten,
          die ausschließlich über Touchscreens verfügen. Hier gibt es
          den hierfür erforderlichen MouseOver-Effekt (noch?) nicht.
        </para>
        <para>
          Das ist ein Grund, warum PanDoc<footnote>
            <para>
              PanDoc: wir gehen später darauf ein
            </para>
          </footnote> diese Notation nicht in seiner Standardeinstellung
          interpretiert. Alternativ kann man auf Fußnoten setzen.
        </para>
        <programlisting language="markdown">
EBM ist eine Musikrichtung, die ihren Ursprung in den 80er Jahren hat. 

*[EBM]: Electronic Body Music
</programlisting>
        <programlisting language="html">
&lt;abbr title=&quot;Electronic Body Music&quot;&gt;EBM&lt;/abbr&gt; ist eine Musikrichtung, die ihren Ursprung in den 80er Jahren hat.
</programlisting>
        <para>
          <abbr title="Electronic Body Music">EBM</abbr> ist eine
          Musikrichtung, die ihren Ursprung in den 80er Jahren hat.
        </para>
      </section>
    </section>
  </chapter>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="block-elemente">
    <title>Block-Elemente</title>
    <para>
      Ein Blockelement repräsentiert eine komplexere Form im Dokument.
      Anders als Spanelemente, grenzen sie sich klar von ihren Nachbarn
      ab und bilden (wie der Namen schon sagt) einen ins sich
      geschlossenen Block. Die einfachste Form ist ein Textabschnitt,
      bestehend aus einzelnen Worten, Sätzen oder gar Grafiken und
      Links. Neben diesem, gibt es noch Überschriften, Listen, Tabellen
      und andere, die wir im folgenden besprechen wollen.
    </para>
    <section xml:id="horizontale-linien">
      <title>Horizontale Linien</title>
      <para>
        Die einfachsten Blockelemente sind horizontale Linien, die man
        gern als starke Abgrenzung zwischen zwei Abschnitten nimmt oder
        in Dokumenten gar als Trennlinie zwischen dem Inhalt und den
        Fußnoten auf einer Seite einbringt.
      </para>
      <para>
        Die Trennlinie kann mit drei aufeinanderfolgende
        <literal>*</literal> (Stern) oder <literal>-</literal> (Minus)
        in den Text eingebracht werden. Zwischen die Zeichen sollte sich
        maximal ein Leerzeichen befinden.
      </para>
      <para>
        ::::: flex ::: Quelltext
      </para>
      <programlisting language="markdown">
***

* * * * * * * * * *

- - -

_ _ _
</programlisting>
      <para>
        ::: ::: HTML
      </para>
      <programlisting language="html">
&lt;hr /&gt;

&lt;hr /&gt;

&lt;hr /&gt;

&lt;hr /&gt;
</programlisting>
      ::: ::: Vorschau
      <!-- wir setzen hier HTML ein, weil sonst die Autonummerierung von pandoc im Beispiel zuschlägt -->
      <para>
        ::: :::::
      </para>
    </section>
    <section xml:id="überschriften">
      <title>Überschriften</title>
      <para>
        Nahezu jedes aus mehreren Kapiteln bestehende Dokument verwendet
        Überschriften, die die ihr folgenden Abschnitte einleitet.
        Überschriften werden durch eine oder mehreren vorangestellten
        Rautesymbolen (<quote>#</quote>) kenntlich gemacht, wobei die
        Anzahl der Rauten gleichbedeutend ihrer Ebene ist. Der
        HTML-Standard ist auf sechs Ebenen limitiert. Dank der Analogie
        zur jener Spezifikation, gilt die Limitierung auch für Markdown.
      </para>
      <programlisting language="markdown">
# Überschrift Ebene 1

## Überschrift Ebene 2

### Überschrift Ebene 3

#### Überschrift Ebene 4

##### Überschrift Ebene 5

###### Überschrift Ebene 6
</programlisting>
      <programlisting language="html">
&lt;h1&gt;Überschrift Ebene 1&lt;/h1&gt;

&lt;h2&gt;Überschrift Ebene 2&lt;/h2&gt;

&lt;h3&gt;Überschrift Ebene 3&lt;/h3&gt;

&lt;h4&gt;Überschrift Ebene 4&lt;/h4&gt;

&lt;h5&gt;Überschrift Ebene 5&lt;/h5&gt;

&lt;h6&gt;Überschrift Ebene 6&lt;/h6&gt;
</programlisting>
      <para>
        Überschrift Ebene 1
      </para>
      <para>
        Überschrift Ebene 2
      </para>
      <para>
        Überschrift Ebene 3
      </para>
      <para>
        Überschrift Ebene 4
      </para>
      <para>
        Überschrift Ebene 5
      </para>
      <para>
        Überschrift Ebene 6
      </para>
      <para>
        Wer nur zwei Ebenen zulässt, kann statt der vorangestellten
        Raute-Symbole die Überschrift auch unterstreichen.
      </para>
      <programlisting language="markdown">
Überschrift Ebene 1
===================

Überschrift Ebene 2
-------------------
</programlisting>
      <programlisting language="html">
&lt;h1&gt;Überschrift Ebene 1&lt;/h1&gt;

&lt;h2&gt;Überschrift Ebene 2&lt;/h2&gt;
</programlisting>
      <para>
        Überschrift Ebene 1
      </para>
      <para>
        Überschrift Ebene 2
      </para>
      <section xml:id="überschriften-als-interne-adresse-erweiterung">
        <title>Überschriften als interne Adresse (Erweiterung)</title>
        <para>
          Überschriften sind ein gutes Mittel, um sein Dokument zu
          strukturieren. In einem gedruckten Buch findet man Hinweise im
          Text oder das Inhaltsverzeichnis, um auf andere Kapitel zu
          verweisen. Markdown stellt über eine Erweiterung eine ähnliche
          Möglichkeit bereit, mit der (aus technischer Sicht) sogar
          etwas mehr Komfort verbunden wird. Da ein Verweis letzten
          Endes ein Link ist, ist es nicht verwunderlich, dass
          Sprungmarken im Text ähnlich formuliert werden.
        </para>
        <para>
          Das Beispiel zeigt alle Möglichkeiten, die als Verweis auf
          <literal>Meine Überschrift</literal> dienen.
        </para>
        <programlisting language="markdown">
# Meine Überschrift

Hier könnte nun sehr viel Text folgen, aber...

[Meine Überschrift]  
[Meine Überschrift][]  
[zurück zu 'Meine Überschrift'][Meine Überschrift]  
[zurück zu 'Meine Überschrift'](#meine-überschrift)
</programlisting>
        <programlisting language="html">
&lt;h1 id=&quot;meine-überschrift&quot;&gt;Meine Überschrift&lt;/h1&gt;
&lt;p&gt;Hier könnte nun sehr viel Text folgen, aber…&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#meine-überschrift&quot;&gt;Meine Überschrift&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;#meine-überschrift&quot;&gt;Meine Überschrift&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;#meine-überschrift&quot;&gt;zurück zu ‘Meine Überschrift’&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;#meine-überschrift&quot;&gt;zurück zu ‘Meine Überschrift’&lt;/a&gt;&lt;/p&gt;
</programlisting>
        <para>
          Meine Überschrift
        </para>
        <para>
          Hier könnte nun sehr viel Text folgen, aber…
        </para>
        <para>
          <a href="#meine-überschrift">Meine Überschrift</a><br>
          <a href="#meine-überschrift">Meine Überschrift</a><br>
          <a href="#meine-überschrift">zurück zu <quote>Meine
          Überschrift</quote></a><br>
          <a href="#meine-überschrift">zurück zu <quote>Meine
          Überschrift</quote></a>
        </para>
      </section>
      <section xml:id="überschriften-ids-erweiterung">
        <title>Überschriften-IDs (Erweiterung)</title>
        <para>
          Wer ein Buch schreibt und hierin auf Kapitel verweisen möchte,
          möchte dies eventuell nicht in der Form machen, als dass er
          den Text der Überschrift zitiert, sondern im Text eigene
          Markerierung setzt, auf die er verweisen kann. Ein Möglichkeit
          hierfür ist die Definition einer eigenen ID, indem hinter dem
          Text der Überschrift mithilfe des Ausdrucks
          <literal>{#&lt;id-der-Überschrift&gt;}</literal> eine solche
          vergeben wird. Dass im Beispiel der Ausdruck
          <literal>&lt;id-der-Überschrift&gt;</literal> durch die eigene
          IDzu ersetzen ist, versteht sich hoffentlich von selbst.
        </para>
        <programlisting language="markdown">
# Überschrift Ebene 1 {#überschrift-1}

## Überschrift Ebene 2 {#überschrift-1-2}
</programlisting>
        <programlisting language="html">
&lt;h1 id=&quot;überschrift-1&quot;&gt;Überschrift Ebene 1&lt;/h1&gt;

&lt;h2 id=&quot;überschrift-1-2&quot;&gt;Überschrift Ebene 2&lt;/h2&gt;
</programlisting>
        <para>
          Überschrift Ebene 1
        </para>
        <para>
          Überschrift Ebene 2
        </para>
      </section>
    </section>
    <section xml:id="zitate">
      <title>Zitate</title>
      <para>
        Wer inhaltlich korrekt unterwegs sein möchte, wird Zitate als
        solche auszeichnen wollen. Das geht mit <literal>&gt;</literal>,
        das jeder Zeile eines Zitats vorangestellt wird. Spätestens
        jetzt sollte dem Leser auffallen, dass Markdown seinen Ursprung
        in den Klartextmails hat.
      </para>
      <para>
        Längere Zitate lassen sich über mehrere Zeilen verteilen. Dabei
        ist auf die Einrückung zu achten, wenn man, wie im nachfolgenden
        Beispiel zu sehen, auf das vorangestellte Auszeichnungssymbol
        verzichtet. Außerdem ist eine beliebige Verschachtelung möglich.
        Dabei definiert die Anzahl der vorangestellten Größerzeichen
        <literal>&gt;</literal> die Verschachtelungstiefe.
      </para>
      <programlisting language="markdown">
Meine beiden Lieblingszitate, die das heutige Leben (also die ersten beiden Jahrzehnte des 21. Jahrhundert) am besten beschreiben, sind folgende:

  &gt; Ich habe mir immer gewünscht, dass mein Computer so einfach zu bedienen sein sollte, wie mein Telefon.
    Mein Wunsch wurde wahr.
    Ich weiß nicht mehr, wie mein Telefon funktioniert.
  &gt; (Bjarne Stroustrup, C++ Entwickler)

  &gt; &gt; Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.
  &gt; &gt; (Albert Einstein, Physiker)
</programlisting>
      <programlisting>
</programlisting>
      <para>
        Meine beiden Lieblingszitate, die das heutige Leben (also die
        ersten beiden Jahrzehnte des 21. Jahrhundert) am besten
        beschreiben, sind folgende:
      </para>
      <blockquote>
        <para>
          Ich habe mir immer gewünscht, dass mein Computer so einfach zu
          bedienen sein sollte, wie mein Telefon. Mein Wunsch wurde
          wahr. Ich weiß nicht mehr, wie mein Telefon funktioniert.
          (Bjarne Stroustrup, C++ Entwickler)
        </para>
      </blockquote>
      <blockquote>
        <blockquote>
          <para>
            Zwei Dinge sind unendlich: Das Universum und die menschliche
            Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.
            (Albert Einstein, Physiker)
          </para>
        </blockquote>
      </blockquote>
    </section>
    <section xml:id="aufzählungen-listen">
      <title>Aufzählungen, Listen</title>
      <para>
        Immer nur alles in einem Fließtext zu verpacken, wird auf Dauer
        langweilig, insbesondere dann, wenn man Inhalte anders
        strukturiert, besser vermitteln kann. Hierzu zählen geordnete
        und lose (unsortierte) Listen.
      </para>
      <section xml:id="unsortierte-listen">
        <title>Unsortierte Listen</title>
        <para>
          Jedem Eintrag einer unsortierten Auflistung wird ein
          Bindestrich (Minuszeichen) <literal>-</literal>, Plussymbol
          <literal>+</literal> oder ein Stern <literal>*</literal>
          vorangestellt. Um Listen zu verschachteln, sprich mit
          Untereinträgen zu versehen, werden die Kindelemente mit
          mindestens 2 Leerzeichen eingerückt.
        </para>
        <para>
          Mehrzeilige Listeneinträge sind zulässig. Zeilenumbrüche und
          Abschnitte werden auch innerhalb von Listen unterstützt. In
          dem nun folgenden Beispiel, finden wir unter im Listeneintrag
          <quote>Punkt 2.2</quote> sowohl einen Zeilenumbruch, als auch
          einen Absatz innerhalb der Aufzählung. Auch wurden hier die
          Symbole gemischt, worauf man im realen Markdown-Leben zur
          Verbesserung der Lesbarkeit verzichten sollte.
        </para>
        <programlisting language="markdown">
- Punkt 1
+ Punkt 2
  - Punkt 2.1
  - Punkt 2.2  
    nächste Zeile
    
    und eine weitere Zeile
  - Punkt 2.3
nächste Zeile
* Punkt 3
+ Punkt 4
</programlisting>
        <programlisting language="html">
&lt;ul&gt;
    &lt;li&gt;Punkt 1&lt;/li&gt;
    &lt;li&gt;Punkt 2
        &lt;ul&gt;
            &lt;li&gt;Punkt 2.1&lt;/li&gt;
            &lt;li&gt;
                &lt;p&gt;Punkt 2.2&lt;br&gt;
                   nächste Zeile
                &lt;/p&gt;
                und eine weitere Zeile
            &lt;/li&gt;
            &lt;li&gt;Punkt 2.3 nächste Zeile&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Punkt 3&lt;/li&gt;
    &lt;li&gt;Punkt 4&lt;/li&gt;
&lt;/ul&gt;
</programlisting>
        <itemizedlist spacing="compact">
          <listitem>
            <para>
              Punkt 1
            </para>
          </listitem>
          <listitem>
            <para>
              Punkt 2
            </para>
            <itemizedlist>
              <listitem>
                <para>
                  Punkt 2.1
                </para>
              </listitem>
              <listitem>
<literallayout>Punkt 2.2
nächste Zeile</literallayout>
                <para>
                  und eine weitere Zeile
                </para>
              </listitem>
              <listitem>
                <para>
                  Punkt 2.3 nächste Zeile
                </para>
              </listitem>
            </itemizedlist>
          </listitem>
          <listitem>
            <para>
              Punkt 3
            </para>
          </listitem>
          <listitem>
            <para>
              Punkt 4
            </para>
          </listitem>
        </itemizedlist>
      </section>
      <section xml:id="geordnete-listen">
        <title>Geordnete Listen</title>
        <para>
          Geordnete Listen, auch sortierte Listen genannt, definieren
          eine Reihenfolge, indem sie jedem Eintrag eine fortlaufende
          Bezeichnung (Zahl, Buchstabe, römische Ziffer) voranstellen.
          Das Beispiel zeigt auch, dass man die Nummerierung nicht
          vorgeben muss, weil diese automatisch erfolgt. Dieser
          Automatismus verhindert aber zugleich eine individuelle
          Ordnung, was zu Schwierigkeiten bei Zahlenstrahlen führen
          kann.
        </para>
        <programlisting language="markdown">
1. Punkt 1
1. Punkt 2
    a. Punkt 2.1
    a. Punkt 2.2
        i. Punkt 2.2.1
        i. Punkt 2.2.2
1. Punkt 3
1. Punkt 4
</programlisting>
        <programlisting language="html">
&lt;ol type=&quot;1&quot;&gt;
    &lt;li&gt;Punkt 1&lt;/li&gt;
    &lt;li&gt;Punkt 2
        &lt;ol type=&quot;a&quot;&gt;
            &lt;li&gt;Punkt 2.1&lt;/li&gt;
            &lt;li&gt;Punkt 2.2
                &lt;ol type=&quot;i&quot;&gt;
                    &lt;li&gt;Punkt 2.2.1&lt;/li&gt;
                    &lt;li&gt;Punkt 2.2.2&lt;/li&gt;
                &lt;/ol&gt;
            &lt;/li&gt;
        &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;Punkt 3&lt;/li&gt;
    &lt;li&gt;Punkt 4&lt;/li&gt;
&lt;/ol&gt;
</programlisting>
        <orderedlist numeration="arabic" spacing="compact">
          <listitem>
            <para>
              Punkt 1
            </para>
          </listitem>
          <listitem>
            <para>
              Punkt 2
            </para>
            <orderedlist numeration="loweralpha" spacing="compact">
              <listitem>
                <para>
                  Punkt 2.1
                </para>
              </listitem>
              <listitem>
                <para>
                  Punkt 2.2
                </para>
                <orderedlist numeration="lowerroman" spacing="compact">
                  <listitem>
                    <para>
                      Punkt 2.2.1
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      Punkt 2.2.2
                    </para>
                  </listitem>
                </orderedlist>
              </listitem>
            </orderedlist>
          </listitem>
          <listitem>
            <para>
              Punkt 3
            </para>
          </listitem>
          <listitem>
            <para>
              Punkt 4
            </para>
          </listitem>
        </orderedlist>
        <para>
          Darüber hinaus, lässt sich die Auflistung weiter verfeinern
          und die Auflistung mit einem bestimmten Wert beginnen. Das
          kann hilfreich sein, wenn aus einem bestimmten Grund eine
          Liste an beliebiger Stelle fortgeführt werden soll. Beginnt
          eine Zeile mit einer Zahl, gefolgt von einem Punkt und einem
          Leerzeichen, wird dies als Beginn einer neuen Liste
          verstanden. Wer dieses Verhalten unterbinden möchte, muss den
          Punkt <quote>escapen</quote>.
        </para>
        <programlisting language="markdown">
1618\. Der Dreißjährige Krieg beginnt  
Der Krieg erfasst erst im Jahr 1626\. das reiche Städtchen Jüterbog. Bis dahin
blieb die Stadt vom Krieg verschont und war mit seinen 4000 Einwohnern eine für
damalige Zeiten relativ große Stadt.  
Aufgrund seiner geografischen Lage war es unter anderem Veranstaltungsort
von Fürstentreffen. Jüterbog gehörte seinerzeit noch zu Sachsen, was sich
erst nach dem Krieg änderte.

1648\. Der 30-Jährige Krieg ist zu Ende  
Aus der einst blühenden Stadt Jüterbog ist ein Dorf geworden. Ganze 300 Seelen
zählt die Stadt nach dem Krieg. Die meisten von ihnen sind gestorben oder in
weniger umkämpfte Gebiete umgesiedelt. Auch haben sich viele von ihnen
armutsbedingt den Armeen angeschlossen.  
</programlisting>
        <programlisting language="html">
&lt;p&gt;1618. Der Dreißjährige Krieg beginnt&lt;br&gt;
Der Krieg erfasst erst im Jahr 1626. das reiche Städtchen Jüterbog. Bis dahin
blieb die Stadt vom Krieg verschont und war mit seinen 4000 Einwohnern eine für
damalige Zeiten relativ große Stadt.&lt;br&gt;
Aufgrund seiner geografischen Lage war es unter anderem Veranstaltungsort von
Fürstentreffen. Jüterbog gehörte seinerzeit noch zu Sachsen, was sich erst nach
dem Krieg änderte.&lt;/p&gt;
&lt;p&gt;1648. Der 30-Jährige Krieg ist zu Ende&lt;br&gt;
Aus der einst blühenden Stadt Jüterbog ist ein Dorf geworden. Ganze 300 Seelen
zählt die Stadt nach dem Krieg. Die meisten von ihnen sind gestorben oder in
weniger umkämpfte Gebiete umgesiedelt. Auch haben sich viele von ihnen
armutsbedingt den Armeen angeschlossen.&lt;/p&gt;
</programlisting>
<literallayout>1618. Der Dreißjährige Krieg beginnt
Der Krieg erfasst erst im Jahr 1626. das reiche Städtchen Jüterbog. Bis dahin blieb die Stadt vom Krieg verschont und war mit seinen 4000 Einwohnern eine für damalige Zeiten relativ große Stadt.
Aufgrund seiner geografischen Lage war es unter anderem Veranstaltungsort von Fürstentreffen. Jüterbog gehörte seinerzeit noch zu Sachsen, was sich erst nach dem Krieg änderte.</literallayout>
<literallayout>1648. Der 30-Jährige Krieg ist zu Ende
Aus der einst blühenden Stadt Jüterbog ist ein Dorf geworden. Ganze 300 Seelen zählt die Stadt nach dem Krieg. Die meisten von ihnen sind gestorben oder in weniger umkämpfte Gebiete umgesiedelt. Auch haben sich viele von ihnen armutsbedingt den Armeen angeschlossen.</literallayout>
      </section>
      <section xml:id="definitions-datenlisten-erweiterung">
        <title>Definitions-/Datenlisten (Erweiterung)</title>
        <para>
          Eine Spracherweiterung, die nicht zum Original-Markdown
          gehört, sind Datenlisten. Sie ermöglicht, einem Schlüsselwort
          oder einer Wortgruppe eine oder mehrere Beschreibungen
          zuzuweisen. In HTML spricht man hierbei von einer
          <quote>datalist</quote> (HTML-Tag
          <literal>&lt;dl&gt;</literal>), die aus einem Titel besteht
          (<quote>datatitle</quote>, HTML-Tag
          <literal>&lt;dt&gt;</literal>), dem Beschreibungselemente
          (<quote>datadescription</quote>, HTML-Tag
          <literal>dd</literal>) folgen. Jeder
          <literal>&lt;dt&gt;</literal>-Tag leitet semantisch ein neues
          Element ein, dem die folgenden <literal>&lt;dd&gt;</literal>
          als Beschreibungen zugesprochen werden.
        </para>
        <programlisting language="markdown">
Linux
: Opensource-Betriebssystem
: von Linus Torvald

Windows
: Betriebssystem aus dem Hause Microsoft
: von Bill Gates

iOS
: Betriebssystem von Apple
: von Steve Wozniak, Ron Wayne und Steve Jobs 
</programlisting>
        <programlisting language="html">
&lt;dl&gt;
    &lt;dt&gt;Linux&lt;/dt&gt;
    &lt;dd&gt;Opensource-Betriebssystem&lt;/dd&gt;
    &lt;dd&gt;von Linus Torvald&lt;/dd&gt;
    &lt;dt&gt;Windows&lt;/dt&gt;
    &lt;dd&gt;Betriebssystem aus dem Hause Microsoft&lt;/dd&gt;
    &lt;dd&gt;von Paul Allen und Bill Gates&lt;/dd&gt;
    &lt;dt&gt;iOS&lt;/dt&gt;
    &lt;dd&gt;Betriebssystem von Apple&lt;/dd&gt;
    &lt;dd&gt;von Steve Wozniak, Ron Wayne und Steve Jobs&lt;/dd&gt;
&lt;/dl&gt;
</programlisting>
        <variablelist spacing="compact">
          <varlistentry>
            <term>
              Linux
            </term>
            <listitem>
              <para>
                Opensource-Betriebssystem
              </para>
              <para>
                von Linus Torvald
              </para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>
              Windows
            </term>
            <listitem>
              <para>
                Betriebssystem aus dem Hause Microsoft
              </para>
              <para>
                von Bill Gates
              </para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>
              iOS
            </term>
            <listitem>
              <para>
                Betriebssystem von Apple
              </para>
              <para>
                von Steve Wozniak, Ron Wayne und Steve Jobs
              </para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
    <section xml:id="tabellen-erweiterung">
      <title>Tabellen (Erweiterung)</title>
      <para>
        Auch Tabellen gehören zu den Elementen, die im Markdown-Original
        nicht vorkommen. Auch sie entstammen einer der vielen
        Erweiterungen. Ihre Auszeichnung gestaltet sich äußerst einfach.
        Selbst die Eigenschaften, wie die rechts- oder linksbündige
        Ausrichtung einer Spalte, lassen sich äußerst einfach
        definieren.
      </para>
      <para>
        Vernünftig formatierte Tabellen bestehen aus einer oder mehreren
        Kopfzeilen, gefolgt von den Inhalten. Diesem Muster folgen
        Tabellen in Markdown. Allerdings wurden
        <quote>tablefooter</quote> (Tabellenfußzeilen) in der freien
        Markdonw-Wildbahn noch nicht gesehen, was durchaus als Anreiz
        verstanden werden darf, sich an einer der existierenden
        Erweiterung zu beteiligen<footnote>
          <para>
            Auch wenn Vielfalt belebt, sollte man versuchen, etablierte
            Dinge zu verbessern, als sie unübersichtlich werden zu
            lassen, weil es zigtausende Alternativen um ihre jeweilige
            Daseinsberechtigung streiten.
          </para>
        </footnote>, um dies nachzuholen.
      </para>
      <para>
        Das nachfolgende Beispiel zeigt, wie eine Tabelle in Markdown
        definiert wird und für einzelne Spalten Eigenschaften vorgegeben
        werden. Die Spalte mit der Überschrift <quote>Standard</quote>
        wird ohne Formatvorgaben <quote>normal</quote> dargestellt, was
        je nach Sprache links (lateinische Sprachen) oder rechtsbündig
        (beispielsweise Chinesisch) sein kann.
      </para>
      <para>
        Den übrigen Spalten (der Beispieltabelle) wurde das Format der
        Spalteninhalte vorgegeben. Diese erfolgt in der Zeile, die den
        Tabellenkopf vom Inhalt trennt. Die Position des Doppelpunktes
        gibt Auskunft darüber, ob die Fließrichtung des Inhalts
        linksbündig (Doppelpunkt ist links platziert), rechtsbündig
        (Doppelpunkt befindet sich rechts), zentriert (je ein
        Doppelpunkt auf beiden Seiten) oder überhaupt nicht vorgegeben
        wird.
      </para>
      <programlisting language="markdown">
| Rechts  | Links   |  Zentriert   | Standard
| -------:|:------- |:------------:| ---------
| 12      | 12      | 12           | 12     
| 123     | 123     | 123          | 123    
| 1       | 1       | 1            | 1      
</programlisting>
      <programlisting language="html">
&lt;table&gt;
    &lt;thead&gt;
        &lt;tr class=&quot;header&quot;&gt;
            &lt;th style=&quot;text-align: right;&quot;&gt;Links&lt;/th&gt;
            &lt;th style=&quot;text-align: left;&quot;&gt;Rechts&lt;/th&gt;
            &lt;th style=&quot;text-align: center;&quot;&gt;Zentriert&lt;/th&gt;
            &lt;th&gt;Standard&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr class=&quot;odd&quot;&gt;
            &lt;td style=&quot;text-align: right;&quot;&gt;12&lt;/td&gt;
            &lt;td style=&quot;text-align: left;&quot;&gt;12&lt;/td&gt;
            &lt;td style=&quot;text-align: center;&quot;&gt;12&lt;/td&gt;
            &lt;td&gt;12&lt;/td&gt;
        &lt;/tr&gt;&lt;tr class=&quot;even&quot;&gt;
            &lt;td style=&quot;text-align: right;&quot;&gt;123&lt;/td&gt;
            &lt;td style=&quot;text-align: left;&quot;&gt;123&lt;/td&gt;
            &lt;td style=&quot;text-align: center;&quot;&gt;123&lt;/td&gt;
            &lt;td&gt;123&lt;/td&gt;
        &lt;/tr&gt;&lt;tr class=&quot;odd&quot;&gt;
            &lt;td style=&quot;text-align: right;&quot;&gt;1&lt;/td&gt;
            &lt;td style=&quot;text-align: left;&quot;&gt;1&lt;/td&gt;
            &lt;td style=&quot;text-align: center;&quot;&gt;1&lt;/td&gt;
            &lt;td&gt;1&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
</programlisting>
      <informaltable>
        <tgroup cols="4">
          <colspec align="right" />
          <colspec align="left" />
          <colspec align="center" />
          <colspec align="left" />
          <thead>
            <row>
              <entry>
                Rechts
              </entry>
              <entry>
                Links
              </entry>
              <entry>
                Zentriert
              </entry>
              <entry>
                Standard
              </entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>
                12
              </entry>
              <entry>
                12
              </entry>
              <entry>
                12
              </entry>
              <entry>
                12
              </entry>
            </row>
            <row>
              <entry>
                123
              </entry>
              <entry>
                123
              </entry>
              <entry>
                123
              </entry>
              <entry>
                123
              </entry>
            </row>
            <row>
              <entry>
                1
              </entry>
              <entry>
                1
              </entry>
              <entry>
                1
              </entry>
              <entry>
                1
              </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
      <para>
        Im übrigen ist es egal, ob man die Spaltenbreite über alle
        Zeilen gleich hält. Das verbessert die Lesbarkeit des
        Markdown-Dokuments. Zulässig ist aber auch die folgende
        Schreibweise, bei der wir neben der Spaltenbreite auch auf das
        vorangestellte <quote>Pipe</quote>-Symbol (<literal>|</literal>)
        verzichten.
      </para>
      <programlisting language="markdown">
Rechts | Links | Zentriert | Standard
-:|:-|:-:|-
12 | 12 | 12 | 12
123 | 123 | 123 | 123
1 | 1 | 1 | 1
</programlisting>
      <informaltable>
        <tgroup cols="4">
          <colspec align="right" />
          <colspec align="left" />
          <colspec align="center" />
          <colspec align="left" />
          <thead>
            <row>
              <entry>
                Rechts
              </entry>
              <entry>
                Links
              </entry>
              <entry>
                Zentriert
              </entry>
              <entry>
                Standard
              </entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>
                12
              </entry>
              <entry>
                12
              </entry>
              <entry>
                12
              </entry>
              <entry>
                12
              </entry>
            </row>
            <row>
              <entry>
                123
              </entry>
              <entry>
                123
              </entry>
              <entry>
                123
              </entry>
              <entry>
                123
              </entry>
            </row>
            <row>
              <entry>
                1
              </entry>
              <entry>
                1
              </entry>
              <entry>
                1
              </entry>
              <entry>
                1
              </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
    </section>
    <section xml:id="fußnoten-erweiterung">
      <title>Fußnoten (Erweiterung)</title>
      <para>
        Sobald Bücher technischer werden oder Zusatzinformationen
        unablässig erscheinen, kann der Einsatz von Fußnoten hilfreich
        werden. Mit ihrer Hilfe können Dinge erklärt werden oder
        Hinweise auf weiterführende Informationen gegebenen werden, ohne
        dass der FLuß des Textes beeinträchtigt wird.
      </para>
      <para>
        Fußnoten lassen sich in zweierlei Form in den Text einbetten und
        orientieren sich in ihrer Notation an den Links.
      </para>
      <programlisting language="markdown">
Wer die Antwort auf die Frage &quot;nach dem Leben, dem Universum und dem ganzen Rest&quot; finden möchte,
sollte bei wikipedia[^wiki42] vorbeischauen oder,
und das ist wirklich ein wärmstens zu empfehlendes Buch,
den Roman &quot;Per Anhalter durch die Galaxis&quot;^[Per Anhalter durch die Galaxis wurde von Douglas Adams geschrieben]
lesen, aus dem dieses Zitat stammt.

[^wiki42]: (https://de.wikipedia.org/wiki/42_(Antwort))[https://de.wikipedia.org/wiki/42_(Antwort)]
</programlisting>
      <programlisting language="html">
&lt;p&gt;Wer die Antwort auf die Frage “nach dem Leben, dem Universum und dem ganzen Rest” finden möchte,
sollte bei wikipedia&lt;a href=&quot;#example-fn1&quot; class=&quot;footnote-ref&quot; id=&quot;example-fnref1&quot;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; vorbeischauen oder,
und das ist wirklich ein wärmstens zu empfehlendes Buch,
den Roman “Per Anhalter durch die Galaxis”&lt;a href=&quot;#example-fn2&quot; class=&quot;footnote-ref&quot; id=&quot;example-fnref2&quot;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;
lesen, aus dem dieses Zitat stammt.&lt;/p&gt;

&lt;ol&gt;
    &lt;li id=&quot;example-fn1&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/42_(Antwort)&quot;&gt;https://de.wikipedia.org/wiki/42_(Antwort)]&lt;/a&gt;&lt;a href=&quot;#example-fnref1&quot; class=&quot;footnote-back&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
    &lt;li id=&quot;example-fn2&quot;&gt;&lt;p&gt;Per Anhalter durch die Galaxis wurde von Douglas Adams geschrieben&lt;a href=&quot;#example-fnref2&quot; class=&quot;footnote-back&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
</programlisting>
      <para>
        Wer die Antwort auf die Frage <quote>nach dem Leben, dem
        Universum und dem ganzen Rest</quote> finden möchte, sollte bei
        wikipedia<a href="#example-fn1" class="footnote-ref" id="example-fnref1"><sup>1</sup></a>
        vorbeischauen oder, und das ist wirklich ein wärmstens zu
        empfehlendes Buch, den Roman <quote>Per Anhalter durch die
        Galaxis</quote><a href="#example-fn2" class="footnote-ref" id="example-fnref2"><sup>2</sup></a>
        lesen, aus dem dieses Zitat stammt.
      </para>
      <para>
        <a href="https://de.wikipedia.org/wiki/42_(Antwort)">https://de.wikipedia.org/wiki/42_(Antwort)]</a><a href="#example-fnref1" class="footnote-back">↩</a>
      </para>
      <para>
        Per Anhalter durch die Galaxis wurde von Douglas Adams
        geschrieben<a href="#example-fnref2" class="footnote-back">↩</a>
      </para>
    </section>
  </chapter>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sonstige-sprachmittel">
    <title>Sonstige Sprachmittel</title>
    <para>
      Wir haben in den vorangegangenen Abschnitten besprochen, wie man
      alles schön formattiert. Doch was ist, wenn man in seinem Text
      bestimmte Zeichen unverändert darstellen möchte, also einen Stern
      als Stern, eine Tilde als Tilde und so weiter? Gleiches gilt für
      die gestalterischen Möglichkeiten. Wie kann man aus dem
      eingeschränkten Sprachumfang ausbrechen und bestimmte Dinge
      umsetzen, für die Markdown selbst keine Möglichkeiten bereithält
      und für die es auch keine Erweiterungen gibt? Nun, auch daran
      wurde gedacht.
    </para>
    <section xml:id="escaping---das-besondere-entschärfen">
      <title>Escaping - das besondere Entschärfen</title>
      <para>
        Insbesondere bei den Spanelementen dürfte man erkannt haben,
        dass man mit bestimmten Zeichen im Text vorsichtig umgehen muss,
        da diese eine Formattierung bewirken und nicht ausgegebenen
        werden. Das kann man verhindern, indem man den jeweiligen
        Symbolen einen Backslash <quote>\</quote> voranstellt.
      </para>
      <programlisting language="markdown">
Lorem ipsum dolor \*sit amet\*, consetetur _sadipscing elitr_,
sed diam nonumy eirmod tempor invidunt ut _**labore et** dolore_
magna aliquyam erat, sed diam voluptua.
</programlisting>
      <para>
        Lorem ipsum dolor *sit amet*, consetetur <emphasis>sadipscing
        elitr</emphasis>, sed diam nonumy eirmod tempor invidunt ut
        <emphasis><emphasis role="strong">labore et</emphasis>
        dolore</emphasis> magna aliquyam erat, sed diam voluptua.
      </para>
      <para>
        Das war auch schon die ganze Magie.
      </para>
    </section>
    <section xml:id="html-einbetten">
      <title>HTML einbetten</title>
      <para>
        Wir sprachen bisher immer nur davon, dass Markdown sich am Web
        orientiert. Alle Markdown-Converter generieren mindestens die
        HTML-Code. Daher ist es nur nachvollziehbar, dass man innerhalb
        von Markdown auch HTML-Fragmente platzieren kann. Bei der
        Verwendung von HTML ist nichts weiter zu beachten und es besteht
        auch keine Limitierung. Ein guter Autor achtet allerdings stets
        darauf, dass das Ergebnis-HTML semantisch korrekt ist.
      </para>
      <para>
        Auch wenn Browser meist visuell das erzeugen, was man sich mit
        Tricksereien zusammengebastelt hat, ist es zum Beispiel nicht
        zulässig, Block-Elemente in von Span-Elementen zu verpacken. So
        sollten Ausdrücke wie
        <literal>&lt;b&gt;&lt;table&gt;...&lt;/table&gt;&lt;/b&gt;</literal>
        (bzw. in Markdown geschrieben
        <literal>*&lt;table&gt;...&lt;/table&gt;*</literal>) unbedingt
        verhindert werden.
      </para>
      <para>
        Ansonsten gibt es wirklich keine Einschränkung bei der
        Verwendung von HTML-Fragmenten. Allerdings ist zu empfehlen,
        möglichst sparsam damit umzugehen, um die großen
        Vorteile<footnote>
          <para>
            Einfachheit und ein ungestörter Lesefluss im Rohdokument
            (Quelltext)
          </para>
        </footnote> der Auszeichnungssprache Markdown nicht zu stören
        oder gar zunichte zu machen.
      </para>
      <para>
        Wir wollen den Abschnitt Markdown mit einem Tipp abschließen,
        der eine in Markdown nicht enthaltende Formattierung mit Hilfe
        von HTML doch möglich macht: dem Unterstreichen.
      </para>
      <programlisting language="markdown">
Lorem ipsum dolor *&lt;u&gt;sit amet&lt;/u&gt;*, consetetur &lt;u&gt;_sadipscing elitr_&lt;/u&gt;,
sed diam &lt;span style=&quot;border-bottom:1px double #a00&quot;&gt;nonumy&lt;/span&gt; eirmod tempor invidunt ut.
</programlisting>
      <programlisting language="html">
Lorem ipsum dolor &lt;em&gt;&lt;u&gt;sit amet&lt;/u&gt;&lt;/em&gt;, consetetur &lt;u&gt;&lt;em&gt;sadipscing elitr&lt;em&gt;&lt;/u&gt;,
sed diam &lt;span style=&quot;border-bottom:1px double #a00&quot;&gt;nonumy&lt;/span&gt; eirmod tempor invidunt ut.
</programlisting>
      <para>
        Lorem ipsum dolor <emphasis><u>sit amet</u></emphasis>,
        consetetur <u><emphasis>sadipscing elitr</emphasis></u>, sed
        diam nonumy eirmod tempor invidunt ut.
      </para>
    </section>
  </chapter>
</part>
<part xml:id="pandoc-und-kindlegen">
  <title>Pandoc und KindleGen</title>
  <para>
    Nachdem wir uns mit den Möglichkeiten von Markdown
    auseinandergesetzt haben, wollen wir uns abschließend mit der
    Übersetzung unserer Markdown-Ergebnisse in andere Formate
    beschäftigen, von denen viele für eBooks verwendet werden. Das ist
    vor allem dann wichtig, wenn der potentielle Leserkreis aus Personen
    besteht, die Markdown nicht kennen (wollen). Wir holen sie ab, indem
    wir ihnen Dateien bereitstellen, die zum Lesen elektronischer
    Lektüre besser geeignet ist. Man denkt spontan an EPub oder gar dem
    nativen Amazon-Kindle-Format. Dass ggf. auch HTML-, PDF- oder gar
    DOCX-Dateien möglich sind, wird manchem vielleicht ein <quote>gut zu
    wissen</quote> entlocken und für andere eine Mindestanforderung
    darstellen. Der vorliegende Abschnitt wird genau dieses Thema
    behandeln.
  </para>
  <para>
    Ziel ist, den Funktionsumfang und eventuelle Besonderheiten der
    Werkzeuge aufzuzeigen, mit denen wir aus unserem Rohmaterial ein
    eBook erstellen. An der Bedienung der Kommandozeile werden wir nicht
    vorbeikommen, da es sich bei den vorgestellten Lösungen um reine
    Kommandozeilenwerkzeuge handelt. Wer dies vermeiden möchte, sollte
    einen Blick auf Calibre werfen, muss dann aber auf die Unterstützung
    von Markdown, HTML und anderen, eher technischen Ausgabeformate
    verzichten. Neben der Möglichkeit zur Konvertierung stellt das
    Programm allerdings auch eine Bibliothek bereit, mit der die eBooks
    verwaltet werden können.
  </para>
  <para>
    Im folgenden fokussieren wir uns auf die Kommandozeilenwerkzeuge
    PanDoc und KindleGen. Wir verfolgen nämlich ein bisher unerwähntes
    Sekundärziel und wollen unsere Dokumente automatisch (also ohne
    weitere Interaktion) in mehr als nur ein Format zu konvertieren. Ein
    mögliches Einsatzszenario ist, ein auf Markdown aufsetzendes CMS-
    oder Bloggingsystem, mit Exportfunktionen auszustatten, die dem
    Besucher ihre Inhalte zum Offlinelesen bereitstellen.
  </para>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="pandoc">
    <title>Pandoc</title>
    <para>
      Wir wollen uns für’s erste dem deutlichen mächtigeren Werkzeug
      <quote>PanDoc</quote> zuwenden. Dieses Tool ist modular aufgebaut.
      Es besteht aus einem Kern, der über sogenannte Filter um die
      Unterstützung der verschiedenen Ein- und Ausgabeformate erweitert
      wird. Die Funktionsweise der Filter kann sehr einfach
      folgendermaßen erklärt werden:
    </para>
    <orderedlist numeration="arabic" spacing="compact">
      <listitem>
        <para>
          Übersetzung des Eingabeformats in ein PanDoc-internes
          Datenmodel
        </para>
      </listitem>
      <listitem>
        <para>
          Übersetzung des PanDoc-internen Datenmodels in das
          Ausgabeformat
        </para>
      </listitem>
    </orderedlist>
    <para>
      Dabei stellen das Eingabe- und Ausgabeformat jeweils eines der
      vielen, von Haus aus unterstützten Formate dar, die wir im
      folgenden für unser Vorhaben verwenden. Wer weiterführende Details
      zum internen Ablauf benötigt oder PanDoc mit Hilfe von Haskell
      oder Python um eigene Filtermechanismen erweitern möchte, findet
      sie unter anderem unter
      <link xlink:href="https://pandoc.org/filters.html">https://pandoc.org/filters.html</link>.
    </para>
    <para>
      Uns soll dieser kurze <quote>Blick unter die Motorhaube</quote>
      genügen, um zu verstehen, wie PanDoc intern arbeitet.
    </para>
    <para>
      Etwas ausführlicher gehen wir nun auf die Verwendung von PanDoc
      ein, und zwar in dem Umfang, als dass wir die Grundfunktionen
      besprechen und Anreize geben, mit denen jeder möglichst schnell
      ans Ziel kommt. Aufgrund des enormen Funktionsumfang müssen jedoch
      hier Abstriche in Kauf genommen werden, die mit dem offiziellen
      Handbuch<footnote>
        <para>
          Das Handbuch steht als Online als HTML-Seite
          (<link xlink:href="https://pandoc.org/MANUAL.html">https://pandoc.org/MANUAL.html</link>)
          und alternativ in Form eines PDF-Dokuments
          (<link xlink:href="https://pandoc.org/MANUAL.pdf">https://pandoc.org/MANUAL.pdf</link>)
          bereit.
        </para>
      </footnote> sehr schnell kompensiert werden können.
    </para>
    <section xml:id="installation">
      <title>Installation</title>
      <para>
        PanDoc kann von
        <link xlink:href="https://www.pandoc.org">pandoc.org</link> für
        viele Betriebssysteme (Windows, diverse Linux’e) heruntergeladen
        werden.
      </para>
      <para>
        Unter Windows verwendet lädt man entweder die
        <literal>msi</literal>-Datei (als Installationspaket) oder das
        <literal>zip</literal>-Archiv (für eine manuelle Installation)
        herunter. Unter Linux kann man meist auf die Version aus dem
        jeweiligen Repository des Betriebssystems zurückgreifen. Hier
        ist jedoch Vorsicht geboten, denn unter Ubuntu und Linux Mint
        wurde bis Anfang 12/2018 noch eine alte 1.9.x Version angeboten.
        Seinerzeit war mit Version 2.5 bereits eine deutlich
        umfangreichere Version bereits im Umlauf. Aus diesem Grund wird
        auch für Linux auf die manuelle Installation zurückgegriffen.
      </para>
      <para>
        Für Windows und Linux gelten bei manueller Installation diese
        Schritten:
      </para>
      <orderedlist numeration="arabic" spacing="compact">
        <listitem>
          <para>
            Download des zum System passenden Archivs
            <link xlink:href="https://github.com/jgm/pandoc/releases/tag/2.5">https://github.com/jgm/pandoc/releases/tag/2.5</link>
          </para>
        </listitem>
        <listitem>
          <para>
            Entpacken in ein Verzeichnis, dass wir als
            PanDoc-Installationsordner ausgesucht haben
          </para>
        </listitem>
      </orderedlist>
      <para>
        Das war es eigentlich schon. Wir sollten aber noch einen Test
        vornehmen, bevor wir uns freuen. Dafür empfiehlt sich bei den
        meisten Kommandozeilenprogrammen die Abfrage ihrer
        Versionsnummer:
      </para>
      <programlisting>
&lt;pathto&gt;/pandoc --version
</programlisting>
      <para>
        Das Programm sollte ohne weitere Fehlermeldungen<footnote>
          <para>
            Unter Linux kann es erforderlich sein, mittels
            <literal>chmod +x &lt;pathto&gt;/pandoc</literal> das
            Programm ausführbar zu machen
          </para>
        </footnote> unter anderen die Versionsnummer ausgeben. Wir haben
        dabei die Langform des Parameters verwendet. Das hat den Grund,
        dass sich aus dem Parameternamen bereits dessen Bedeutung
        ableiten lässt. Wir werden später noch weitere kennenlernen, bei
        denen aus der abgekürzten Form nicht unbedingt abgeleitet werden
        kann, um was es sich handelt. Oder würden sie bei der Verwendung
        von <literal>-f</literal> sofort auf das Wort
        <literal>--from</literal> schließen?
      </para>
      <para>
        Doch bevor wir uns mit der Verwendung auseinandersetzen wollen,
        verfeinern wir unsere Umgebung dahingehend, als dass wir uns in
        Zukunft sparen wollen, ständig den gesamten Pfad zu
        <literal>pandoc</literal> eingeben zu müssen. Dafür erweitern
        wir den Suchpfad um das Installationsverzeichnis unseres neuen
        Werkzeugs. Wer das nicht mag, kann den gesamten Abschnitt
        <link xlink:href="PATH%20erweitern">#path-erweitern</link>
        überspringen und gleich mit den dem Kapitel
        <link xlink:href="Erste%20Schritte">#erste-schritte</link>
        fortfahren.
      </para>
      <section xml:id="path-erweitern">
        <title>PATH erweitern</title>
        <para>
          Die nachfolgenden Schritte sind nicht verpflichtend. Vielmehr
          erleichtert er nur die Verwendung von PanDoc auf der
          Kommandozeile in der Form, als dass man sich den absoluten
          Pfad zu PanDoc sparen kann.
        </para>
        <section xml:id="linux">
          <title>Linux</title>
          <para>
            Wer unter Linux Programme installiert, muss sich nicht darum
            kümmern, den Suchpfad zu erweitern, damit das Programm auch
            ohne Angabe des absoluten Pfades gefunden wird. Es gibt
            viele Möglichkeiten, die sich von Desktop zu Desktop
            unterscheiden. Da wir PanDoc aber über die Kommandozeile
            bedienen wollen, beschreiben wir hier das Setzen der
            Variable für die BASH. Andere Shells verwenden andere
            Dateien, in denen unter anderem die PATH-Variable gesetzt
            wird, die alle Verzeichnisse aufnimmt, in denen nach
            Programmen gesucht werden soll. Welches es sind, beantwortet
            die Dokumentation oder kann unter Zurhilfenahme der
            Suchmaschine seines Vertrauens sehr schnell ermittelt
            werden. Die Suchworte <quote>Linux PATH erweitern</quote>
            sollten dabei helfen.
          </para>
          <para>
            In der BASH kann der PATH sogar an mehreren Stellen
            eingestellt werden. Es bietet sich aber an, diesen in der
            Datei .bashrc anzupassen, welche sich im Verzeichnis des
            Benutzers befindet.
          </para>
          <para>
            Datei <literal>$HOME/.bashrc</literal> öffnen und am Ende
            derselbigen folgende Zeile hinzufügen, wobei
            <literal>&lt;pathto-pandoc&gt;</literal> durch den
            vollqualifizierten/absoluten Pfad zum Verzeichnis ersetzt
            werden soll, indem sich das Kommandozeilenprogramm
            <literal>pandoc</literal> befindet.
          </para>
          <programlisting>
PATH=$PATH:&lt;pathto-pandoc&gt;
</programlisting>
          <para>
            Der Erfolg kann sofort getestet werden, indem man PanDoc
            erneut mit der Ausgabe der Versionsnummer sinnfrei
            beschäftigt. Allerdings verzichten wir dieses mal auf die
            absolute Pfadangabe und rufen das Programm nur noch mit
            seinem Namen auf.
          </para>
          <programlisting>
pandoc --version
</programlisting>
        </section>
        <section xml:id="windows">
          <title>Windows</title>
          <para>
            Auch Windows kennt PATH-Variablen und verwendet sie analog
            zu Linux. Unter Windows 7 findet man die Option zum
            Setzen/Erweitern der PATH-Variable im Dialig
            <quote>Erweiterte Systemeinstellungen anzeigen</quote> und
            darin den Button <quote>Umgebungsvariablen</quote>. In
            diesem Dialog wird zwischen benutzerspezifischen und
            globalen (Systemvariablen) Umgebungsvariablen unterschieden.
            Wer PanDoc jedem eingerichteten Windowsbenutzer komfortabel
            im Suchpfad bereitstellen möchte, hängt die Pfad des
            Installationsverzeichnisses der Systemvariable PATH hinten
            an. Ansonsten ist die Benutzervariable PATH damit
            Installationspfad (ausschließlich das Verzeichnis) zu
            erweitern.
          </para>
          <para>
            Änderungen von Variablen zeigen sich in der Kommandozeile
            erst, wenn man diese NACH dem Editieren öffnen. In laufenden
            Instanzen werden diese Änderungen nicht übernommen. Daher
            öffnen wir nun nach der PATH-Erweiterung eine neue CMD- oder
            PowerShell-Box, bevor wir unsere Veränderung testen können.
          </para>
          <programlisting>
pandoc --version
</programlisting>
        </section>
      </section>
    </section>
    <section xml:id="erste-schritte">
      <title>Erste Schritte</title>
      <para>
        Die von PanDoc unterstützten Eingabe-/Inputformate kann man sich
        mit dem nachfolgenden Befehl anzeigen lassen:
      </para>
      <programlisting>
$&gt; pandoc --list-input-formats
</programlisting>
      <para>
        Analog dazu erhält man mit dem Argument
        <literal>--list-output-formats</literal> eine Liste aller
        Ausgabeformate:
      </para>
      <programlisting>
$&gt; pandoc --list-output-formats
</programlisting>
      <para>
        Insbesondere die letztgenannte PanDoc-Funktion ist interessant,
        wenn man aus einer Eingabedatei alle erdenklichen Ausgaben
        erzeugen möchte. Das Skript <literal>build.sh</literal>
        <footnote>
          <para>
            Ein für Windows verwendbares <literal>build.cmd</literal>
            wird nachgereicht
          </para>
        </footnote>, mit denen das in Markdown verfasste Buch in
        umgewandelt wurde, zeigt, wie schnell man damit ans Ziel kommen
        kann.
      </para>
    </section>
    <section xml:id="optische-aufwertung">
      <title>Optische Aufwertung</title>
      <para>
        Nun haben wir aber erfahren, dass PanDoc sehr viele
        Ausgabeformate kennt, bei denen sehr wohl optische Belange zum
        Tragen kommen. DOCX, PDF und HTML<footnote>
          <para>
            HTML ist zwar auch nur eine andere Auszeichnungssprache,
            unterstützt aber durch einbindung von CSS und JavaScript
            eine optische Aufwertung des Erscheinungsbildes, wie es sich
            im Interpreter (Browser) zeigt.
          </para>
        </footnote> sind nur einige. HTML haben wir in unsere Aufzählung
        bewusst aufgenommen, weil neueste Versionen der verschiedenen
        eBook-Formate (also EPUB &amp; Co.) HTML als Basis verwenden. Es
        liegt daher auf der Hand, dass wir uns im Folgenden dieses
        Exportformat genauer betrachten und vor allem auf dessen
        optische Aufwertung beleuchten.
      </para>
      <section xml:id="export-als-html">
        <title>Export als HTML</title>
        <para>
          Um aus Markdown ein HTML-Dokument zu erstellen, bedarf es
          nicht zwangsläufig PanDoc. Hier könnte man auch auf das
          Perlskript zurückgreifen, dass die Markdown-Begründer
          bereitstellen. Wir wollen aber ein eBook erstellen und setzen
          hierfür <literal>pandoc</literal> ein.
        </para>
        <para>
          Doch wie teilen wir PanDoc mit, dass wir: - Markdown als
          Quelle verwenden? - ein HTML-Dokument erstellen wollen? -
          unsere eigenen Formatvorgaben in das Dokument eingebunden
          bekommen? - Bilder einbetten, auf die wir im Markdown-Dokument
          verwiesen haben?
        </para>
        <para>
          All das verrät uns der nachfolgende Befehl:
        </para>
        <programlisting>
$&gt; pandoc ebook.md --standalone --toc --toc-depth=4 --number-sections --top-level-division=part --css=resources/styles.css --from=markdown --to=html 
</programlisting>
        <para>
          Wer sich das Ergebnis im Quelltext anschaut, wird feststellen,
          dass sehr viele Headerinformationen eingespeist werden. Das
          liegt am Parameter <literal>--standalone</literal>. Wer HTML
          ohne dem ganzen Schnickschnack drumherum benötigt, weil er das
          Ergebnis beispielsweise in ein eigenes HTML-Template einbetten
          möchte, verzichtet einfach auf diese Option. Als Ergebnis wird
          alles ausgegeben, was wir innerhalb des
          <literal>&lt;body&gt;</literal>-Tags finden.
        </para>
        <para>
          Betrachten wir uns nun die Übersetzung unseres Markdowns in
          HTML an, finden wir neben dem sauber aufbereiteten Text noch
          ein Inhaltsverzeichnis, das in einem Tag mit der
          <literal>id=&quot;TOC&quot;</literal> eingebettet wurde. Es
          beinhaltet Links alle Überschriften, die wir in unserem
          Dokument definiert haben und erleichtert damit die Navigation
          innerhalb unserer Arbeit ungemein. Wer auch das nicht mag,
          befreit den Befehl von den Argumenten <literal>--toc</literal>
          und <literal>--toc-depth=4</literal>. Im übrigen schränken wir
          mit <literal>--toc-depth=4</literal> das Inhaltsverzeichnis
          auf die obersten 4 Überschriften-Ebenen ein. Überschriften der
          fünften oder sechsten Ebene werden nicht mit ins
          Inhaltsverzeichnis aufgenommen. Durch verändern der Zahl auf 6
          oder weglassen des Attributs <literal>--toc-depth</literal>
          wird die Limitierung aufgehoben.
        </para>
        <para>
          Dass die Übersetzung unseres Markdown-Dokuments semantisch
          korrekt ist, sehen wir an der übrigen Struktur. PanDoc bettet
          all unsere Abschnitte in
          <literal>&lt;section&gt;</literal>-Tags ein, wobei die
          jeweilige Überschrift das erste Element ist, gefolgt von
          dessen Inhalt. Nicht nur, dass solche sauberen Strukturen für
          Suchmaschinen optimal sind (Stichwort SEO<footnote>
            <para>
              Bei der Search Engine Optimization (kurz SEO, dt.
              Suchmaschinenoptimierung) achtet man unter anderem auf
              eine klare, semantisch korrekte Strukturierung seiner
              Internetseiten, um das Suchmaschinenraking positiv zu
              beenflussen. Je besser das Ranking ausfällt, desto besser
              (weiter vorn) erscheint die Seite in den
              Suchmaschinenergebnissen.
            </para>
          </footnote>), hilft uns das später auch bei der optischen
          Gestaltung.
        </para>
      </section>
      <section xml:id="cascading-stylesheets">
        <title>Cascading Stylesheets</title>
<literallayout>Um die optischen Belange kümmert man sich in HTML mit den <quote>Cascading Stylesheets</quote> (kurz: <quote>CSS</quote>). Auch hierfür stellt PanDoc einen Parameter bereit, über den man seine individuellen Gestaltungsregeln einspeisen kann. Diese werden von PanDoc <quote>nur</quote> verlinkt und müssen deshalb gemeinsam mit dem HTML weitergegeben werden, wenn man das Ergebnis auf einem anderen PC begutachten möchte.
Im einfachsten Fall genügen uns die Vorgaben, die PanDoc mitliefert. Wer nur ohne <literal>--standalone</literal> exportiert hat, reduziert die Formatierung seines Ergebnisses auf die Standardeinstellungen des Browsers. Wir wollen aber mehr, nicht wahr? Welche Dinge müssen wir beachten, wenn wir unsere eigenen Styles formulieren?</literallayout>
        <section xml:id="css-für-standard-markdown">
          <title>CSS für Standard-Markdown</title>
          <para>
            Einen ersten Ansatz geben uns alle HTML-Tags, die wir im
            Kapitel <link linkend="markdown">Markdown</link>
            behandelten. Auf das Markdown in seiner ursprünglichen Form
            reduziert, müssen wir folgende Elemente berücksichtigen:
          </para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>
                Spanelemente <literal>&lt;emp&gt;</literal>,
                <literal>&lt;strong&gt;</literal>,
                <literal>&lt;a&gt;</literal>,
                <literal>&lt;img&gt;</literal>,
                <literal>&lt;code&gt;</literal>,
                <literal>&lt;pre&gt;</literal>
              </para>
            </listitem>
            <listitem>
              <para>
                Überschriften und Abschnitte
                <literal>&lt;h1&gt;</literal>,
                <literal>&lt;h2&gt;</literal>,
                <literal>&lt;h3&gt;</literal>,
                <literal>&lt;h4&gt;</literal>,
                <literal>&lt;h5&gt;</literal>,
                <literal>&lt;h6&gt;</literal>,
                <literal>&lt;p&gt;</literal>
              </para>
            </listitem>
            <listitem>
              <para>
                Horizontale Linien <literal>&lt;hr&gt;</literal>
              </para>
            </listitem>
            <listitem>
              <para>
                Zitate <literal>&lt;blockquote&gt;</literal>
              </para>
            </listitem>
            <listitem>
              <para>
                Listen <literal>&lt;ul&gt;</literal>,
                <literal>&lt;ol&gt;</literal>,
                <literal>&lt;li&gt;</literal>, sowie
                <literal>&lt;dl&gt;</literal>,
                <literal>&lt;dt&gt;</literal>,
                <literal>&lt;dd&gt;</literal>
              </para>
            </listitem>
          </itemizedlist>
          <programlisting language="css">
/* Inline-/Spanelemente */
emp    { /* Formatierung des &lt;emp&gt;-Tags  */ }
strong { /* Formatierung des &lt;strong&gt;-Tags */ }
a      { /* Formatierung des &lt;a&gt;-Tags    */ }
img    { /* Formatierung des &lt;img&gt;-Tags  */ }
code   { /* Formatierung des &lt;code&gt;-Tags */ }
pre    { /* Formatierung des &lt;pre&gt;-Tags  */ }

/* Blockelemente */
h1     { /* Formatierung des &lt;h1&gt;-Tags */ }
h2     { /* Formatierung des &lt;h2&gt;-Tags */ }
h3     { /* Formatierung des &lt;h3&gt;-Tags */ }
h4     { /* Formatierung des &lt;h4&gt;-Tags */ }
h5     { /* Formatierung des &lt;h5&gt;-Tags */ }
h6     { /* Formatierung des &lt;h6&gt;-Tags */ }

hr     { /* Formatierung des &lt;hr&gt;-Tags */ }

blockquote { /* Formatierung des &lt;blockquote&gt;-Tags */ }

ul     { /* Formatierung des &lt;ul&gt;-Tags */ }
ol     { /* Formatierung des &lt;ol&gt;-Tags */ }
li     { /* Formatierung des &lt;li&gt;-Tags */ }

dl     { /* Formatierung des &lt;dl&gt;-Tags */ }
dt     { /* Formatierung des &lt;dt&gt;-Tags */ }
dd     { /* Formatierung des &lt;dd&gt;-Tags */ }
</programlisting>
          <para>
            Wer HTML in sein Markdown einbettet, sollte natürlich auch
            an die darin enthaltenden HTML-Tags bei der Gestaltung
            seines Layouts denken.
          </para>
          <para>
            Auch wenn durchaus buchspezifische Belange definiert wurden,
            lohnt ein Blick in die Datei
            [https://github.com/hofrichter@@@styles.css@@@](https://github.com/hofrichter@@@styles.css@@@).
            Hierin fällt auf, dass bestimmte Tags kontextabhängig
            gestaltet wurden. So unterscheiden wir beispielsweise beim
            <literal>&lt;code&gt;</literal>-Tag, ob er als Element
            innerhalb eines Fließtextes vorkommt oder als Kindelement
            des <literal>&lt;pre&gt;</literal>-Tags mehrzeilige
            Codebeispiele umklammert. Dem wurde beispielsweise mit
            dieser Anweisung Rechnung getragen:
          </para>
          <programlisting language="css">
code {
    background-color: #eee;    
}
pre {
    border: 1px solid #999;
    background-color: #f3f3f3;
}
pre code {
    background-color: transparent;    
}
</programlisting>
        </section>
        <section xml:id="css-für-pandocs-standard-markdown-interpretation">
          <title>CSS für PanDoc’s
          Standard-Markdown-Interpretation</title>
          <para>
            Wie wir eingangs festgestellt haben, werden die einzelnen
            Kapitel schön säuberlich in
            <literal>&lt;section&gt;</literal>’s verpackt. Die
            einleitende Überschrift ist darin das erste Element, gefolgt
            vom Fließtext (<literal>&lt;p&gt;</literal>-Tags) oder den
            anderen Blockelementen. Wer sich den Quelltext aus unserem
            ersten PanDoc-Lauf genauer anschaute, wird feststellen, dass
            jeder <literal>&lt;section&gt;</literal>-Tag über zwei
            Attribute verfügt:
          </para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>
                <literal>class</literal> mit der Information, welcher
                Überschriftenebene der Abschnitt zugeordnet wurde
              </para>
            </listitem>
            <listitem>
              <para>
                <literal>id</literal> mit leicht abgewandelter
                Schreibweise der Überschrift
              </para>
            </listitem>
          </itemizedlist>
          <para>
            Die CSS-Klasse nimmt je nach Überschriftenebene folgende
            Werte an: - level1 - level2 - level3 - level4 - level5 -
            level6
          </para>
          <para>
            Bezüglich der <literal>id</literal> sei erwähnt, dass der
            HTML-Standard ID’s keine Leerzeichen enthalten
            dürfen<footnote>
              <para>
                Gemäß
                <link xlink:href="https://www.w3.org/TR/html4/types.html#type-id">https://www.w3.org/TR/html4/types.html#type-id</link>
                dürfen IDs nur aus Buchstaben ([A-Za-z]), Zahlen
                ([0-9]), Bindestrichen (<quote>-</quote>), Unterstrichen
                (&quot;_<quote>), Doppelpunkten (</quote>:<quote>), und
                Punkten (</quote>.&quot;) bestehen. Eine ID muss zudem
                mit Buchstaben beginnen.
              </para>
            </footnote>. PanDoc verwendet den Text der Überschriften als
            ID und ersetzt Leerzeichen durch Bindestriche
            <literal>-</literal>. Auch wird der gesamte Text
            kleingeschrieben. Verweise auf eine Überschrift müssen diese
            Regel befolgen, um nach Übersetzung in ein anderes Format
            noch gültig zu sein. Ein Beispiel soll dies
            veranschaulichen:
          </para>
          <programlisting language="markdown">
# Meine erste Überschrift

# Ende
...
Zurück zum Abschnitt [#meine-erste-überschrift](Meine erste Überschrift).
</programlisting>
          <para>
            Um für unser eBook aus den Vollen schöpfen zu können, müssen
            wir bei unserer optischen Aufbereitung auch jene Dinge
            berücksichtigen, die wir im Abschnitt
            <link linkend="markdown">Markdown</link> als Erweiterung
            kennzeichnet haben. Hierzu gehören vor allem Fußnoten und
            Tabellen.
          </para>
        </section>
        <section xml:id="css-für-tabellen-markdown-erweiterung">
          <title>CSS für Tabellen (Markdown Erweiterung)</title>
          <para>
            Die Formatierung von Tabellen möchten wir nicht im Detail
            besprechen, weil es hierfür einfach zu viele Möglichkeiten
            und Anforderungen gibt. Es lohnt sich aber noch einmal einen
            genaueren Blick auf die HTML-Struktur zu werfen, die PanDoc
            aus dem Markdown erzeugt. Viele vergessen, dass zwischen dem
            <literal>&lt;table&gt;</literal>-Tag und dem ersten
            <literal>&lt;tr&gt;</literal> noch
            <literal>&lt;thead&gt;</literal> und
            <literal>&lt;tbody&gt;</literal> in dem DOM-Baum integriert
            werden sollte, um zwischen Tabellenüberschrift und -inhalt
            zu unterscheiden. Semantisch korrekt wird die Tabelle
            allerdings erst, wenn für die Zellen des Tabellenkopfes
            <literal>&lt;th&gt;</literal>-Tags verwendet werden und
            nicht <literal>&lt;td&gt;</literal>. Auch das wird von
            PanDoc berücksichtigt.
          </para>
          <para>
            Somit können wir unsere CSS-Regeln wie folgt erweitern, um
            die Möglichkeiten der Tabellengestaltung vollständig zu
            erfassen:
          </para>
          <programlisting language="css">
table { /* Formatierung des &lt;table&gt;-Tags */ }
thead { /* Formatierung des &lt;thead&gt;-Tags */ }
tbody { /* Formatierung des &lt;tbody&gt;-Tags */ }
thead tr { /* Formatierung des &lt;tr&gt;-Tags innerhalb des Tabellenkopfes */ }
tbody tr { /* Formatierung des &lt;tr&gt;-Tags innerhalb des Tabellenrumpfes */ }
th { /* Formatierung des &lt;th&gt;-Tags als einzelne Zelle im Tabellenkopf */ }
td { /* Formatierung des &lt;th&gt;-Tags als einzelne Zelle im Tabellenkopf */ }
</programlisting>
        </section>
        <section xml:id="css-für-fußnoten-markdown-erweiterung">
          <title>CSS für Fußnoten (Markdown Erweiterung)</title>
          <para>
            PanDoc übersetzt Fußnoten in folgende HTML-Fragmente
          </para>
          <programlisting language="html">

Im Fließtext platzierte Fußnote&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt;
und hier&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;.


&lt;section class=&quot;footnotes&quot;&gt;
  &lt;hr&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Text der Fußnote 1&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
    &lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Text der zweiten Fußnote&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
    ...
</programlisting>
          <para>
            Wie wir sehen, kommen Elemente zum Einsatz, die auch im
            Standard-Markdown verwendet werden können. Allerdings werden
            diese um <literal>id</literal>- und
            <literal>class</literal>-Attribute erweitert. Die Werte der
            IDs sollen uns beim Layout nicht primär interessieren. Uns
            geht es vor allem um die CSS-Klassen, die wir in unserem
            Cascading Style Sheet ansprechen, um ihnen einen
            individuellen Touch zu geben.
          </para>
          <programlisting language="css">
.footnote-ref { /* Formatierung des &lt;a&gt;-Tags, der im Fließtext auf eine Fußnote verweist */ }
.footnotes ol { /* Formatierung des &lt;ol&gt;-Tags aller Fußnoten */ }
.footnotes li { /* Formatierung des &lt;li&gt;-Tags einer einzelnen Fußnote */ }
.footnotes li p { /* Formatierung des &lt;p&gt;-Tags einer einzelnen Fußnote */ }
.footnotes a.footnote-back { /* Formatierung des &lt;a&gt;-Tags (Rücksprungmarke) einer einzelnen Fußnote */ }
</programlisting>
          <para>
            Wichtig ist, dass wir in unserem zwischen
            <literal>.footnotes a.footnote-back</literal> und
            <literal>.footnotes a</literal> unterscheiden sollten, weil
            letztere Option auch in Fußnoten platzierte Verweise auf
            andere Seiten (bspw. bei Quellenangaben) mitformatieren
            würde, was wir unter Umständen nicht wollen.
          </para>
        </section>
      </section>
      <section xml:id="weitere-pandoc-funktionen-und--eigenschaften">
        <title>Weitere PanDoc-Funktionen und -Eigenschaften</title>
        <section xml:id="externe-ressourcen">
          <title>Externe Ressourcen</title>
          <para>
            Wer sich das vorliegende Buch einmal im Rohform anschaut,
            wird bemerken, dass wir an der einen oder anderen Stelle
            bewusst darauf verzichteten, Beispielgrafiken lokal
            vorzuhalten und stattdessen mit externen Adressen (erkennbar
            am Präfix <quote>https://</quote> oder
            <quote>http://</quote>) arbeiten. Das hat den Grund, dass
            wir damit vor allem nachweisen wollen, dass PanDoc solche
            externen Ressourcen verarbeiten kann. Im HTML-Ergebnis kann
            man keine Änderung feststellen, im finalen eBook-Format
            werden diese Dinge jedoch in interne Verweise umgewandelt
            und die Grafik mit in die Datei integriert. PanDoc lädt die
            Datei somit herunter, um sie dem eBook beizufügen. Das kann
            zwei Probleme verursachen:
          </para>
          <orderedlist numeration="arabic" spacing="compact">
            <listitem>
              <para>
                PanDoc arbeitet nicht fehlerfrei, wenn ihm der Zugriff
                auf das Internet verwehrt wird. In diesem Fall sollte
                man die Datei herunterladen und mit lokalen Pfaden
                arbeiten.
              </para>
            </listitem>
            <listitem>
              <para>
                Um Urheberrechtsverletzungen zu vermeiden, sollten vor
                eBook-Veröffentlichungen die Eigentumsrechte geklärt
                oder die Zustimmung vom Urheber eingeholt werden
              </para>
            </listitem>
          </orderedlist>
        </section>
        <section xml:id="cover-und-metadaten">
          <title>Cover und Metadaten</title>
          <para>
            Wir haben bisher erfahren, wie wir unsere Inhalte technisch
            umsetzen. Bücher bestehen allerdings auch aus einem hübsch
            gestalteten Buchdeckel und einleitenden Seiten, auf denen
            wir vor allem Angaben, wie Erscheinungsdatum, Autor, Titel
            oder auch Untertitel finden.
          </para>
          <para>
            PanDoc stellt hierfür einen eigenen Mechanismus bereit. Das
            ermöglicht eine individuelle und vom Inhalt strikt getrennte
            Gestaltung des Rahmens zu. Man kann sie als Parameter des
            <literal>pandoc</literal>-Befehls mitgeben, in einer
            separaten <literal>yaml</literal>-Datei definieren oder in
            das Markdown-Dokument einbetten. Bei beiden Formen weist man
            PanDoc-spezifischen Attributen Werte zu. Dabei ist keines
            der Attribute Pflicht. In wie weit diese Aussage relativiert
            werden muss, kann sich jeder selbst denken. So kann man es
            als weitestgehend sinnfrei ansehen, seinem eBook keinen
            Titel (<literal>title</literal>) zu geben.
          </para>
          <para>
            Doch genug des Wortspiels. Das folgende Beispiel zeigt die
            Metadaten der initialen Version des Buches.
          </para>
          <programlisting>
---
title: Mit Markdown zum eBook (Betaversion)
subtitle: Die alternative Technik der eBooks-Erstellung 
date: 01/2019
rights: © 2019 Sven Hofrichter, ebooks@sugarfree.im, CC BY-NC
author: Sven Hofrichter
author.affiliation: JEE-Architect @ Finanzinformatik Solutions Plus GmbH
publisher: Sven Hofrichter
keywords: [eBook,epub,Markdown,pandoc,kindlegen,erstellen]
cover-image: resources/cover.jpg
abstract: |
  Dieses Buch beschreibt, wie man mithilfe von Markdown, Pandoc und KindleGen
  eBooks erstellen kann und diese in unterschiedlichen Formaten bereitstellt.
lang: de-DE
---
</programlisting>
          <para>
            Abschießend sei erwähnt, dass die gezeigten Attribute nur
            eine Teilmenge möglicher Angaben darstellen. Die
            vollständige Liste findet man im PanDoc-Manual hier:
            <link xlink:href="http://pandoc.org/MANUAL.html#epub-metadata">http://pandoc.org/MANUAL.html#epub-metadata</link>.
          </para>
        </section>
      </section>
    </section>
  </chapter>
  <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="kindlegen">
    <title>KindleGen</title>
    <para>
      Ein Manko von PanDoc ist, dass mit ihm keine eBooks im
      Kindle-Format (Dateiendung <literal>.azw</literal>) erstellt
      werden kann. Das ist zwar ein Wermutstropfen, aber kein allzu
      großes Manko. Denn Amazon bietet selbst ein Kommandozeilentool an,
      mit dem man aus einer geringen Zahl an Eingabeformate (unter
      anderem EPUB) das genannte proprietäre Format überführen kann.
    </para>
    <section xml:id="installation-1">
      <title>Installation</title>
      <para>
        Anders als bei PanDoc muss man für KindleGen leider ein wenig
        suchen, denn Amazon stellt dieses Werkzeug zwar bereit, verweist
        jedoch (eine Vermutung) nur in seinen Hilfeseiten darauf. Man
        findet es aber meist sehr schnell mit Hilfe der Suchmaschine
        seines Vertrauens. Im Dezmeber 2018 konnte man es unter dieser
        Adresse finden
        <link xlink:href="https://www.amazon.com/gp/feature.html?docId=1000765211">https://www.amazon.com/gp/feature.html?docId=1000765211</link>.
        Auch dieses Werkzeug steht für verschiedene Betriebssysteme
        bereit. Seine Installation erfolgt durch einfaches Entpacken
        eines ZIP-Archivs (Linux) oder durch Starten der
        Installationsroutine (Windows).
      </para>
      <para>
        Sobald das Werkzug auf dem Zielrechner ausgerollt wurde, sollte
        wieder geprüft werden, ob selbiges fehlerfrei gestartet werden
        soll. Da das Werkzeug leider nicht über einen Parameter zur
        Abfrage der Versionsnummer verfügt, uns aber sein
        <quote>usage</quote> ausgibt, wenn wir es ohne Argumente
        aufrufen, greifen wir zu Prüfung darauf zurück:
      </para>
      <programlisting>
$&gt; kindlegen 
</programlisting>
    </section>
    <section xml:id="erste-schritte-1">
      <title>Erste Schritte</title>
      <para>
        KindleGen unterstützt eine deutlich geringere Zahl an
        Inputformaten, was für uns aber kein Problem darstellt, weil wir
        uns mit PanDoc weiterhelfen können. Dass dabei Verluste
        entstehen können, die sich negativ auf das Endergebnis auswirken
        können, ist verständlich und auch Grund dafür, dass wir bereits
        am Anfang Markdown zum Erfassen des Buches verwenden.
      </para>
      <para>
        Um nun auf die Zielgerade einzubiegen und auch das Kindle-Format
        bedienen zu können, stellen wir unser Ergebnis als
        <literal>epub</literal> bereit.
      </para>
      <para>
        Ausgehend davon, dass wir eine Quelldatei namens
        <literal>ebook.md</literal> haben und es mit pandoc’s Hilfe in
        das epub-Format überführen wollen, ergibt sich folgende,
        vorbereitende pandoc-Anweisung:
      </para>
      <programlisting>
$&gt; pandoc ebook.md --toc --toc-depth=4 --number-sections --top-level-division=part --from=markdown --css=resources/styles.css --to=epub --output=ebook.epub
</programlisting>
      <para>
        Wir gehen an dieser Stelle davon aus, dass der Autor das
        EPUB-Ergebnis bereits geprüft und für korrekt umgesetzt befunden
        hat und gehen gleich zum Folgeschritt über, der das eBook im das
        Kindle-native Format übersetzt.
      </para>
      <programlisting>
$&gt; kindlegen ebook.epub -o ebook.awz 
</programlisting>
      <para>
        Als Zieldatei haben wir im Beispiel <literal>ebook.@@@</literal>
        angegeben. Nun unterziehen wir diese Datei einer optischen
        Prüfung und kopieren sie hierfür auf einen AmazonKindle. Wer ein
        solches Gerät nicht hat, kann auf die Kindle-Applikationen
        zurückgreifen, die für verschiedene Betriebssysteme
        bereitstehen. Es gibt auch ander eBook-Reader-Applikationen, die
        unter anderem mit dem Kindleformat umgehen können, die man
        alternativ verwenden kann. Es wird allerdings empfohlen, auf die
        Produkte von Amazon zurückzugreifen, da wir nur dadurch
        sichergehen können, dass die Anwendungen das Ergebnis auch
        wirklich anzeigen und nicht aufgrund irgendwelcher Neuerung die
        Darstellung verweigern.
      </para>
    </section>
  </chapter>
</part>
<part xml:id="abschluß">
  <title>Abschluß</title>
  <para>
    Wie wir gesehen haben, muss man nicht immer nur mit großen und
    aufwändigen Werkzeugen hantieren, um ans Ziel zu kommen. Manchmal
    sind es die schlichten Dinge, die uns dem Ziel näher bringen und
    auch Freiheitsgrade öffnen, die wir in anderen Lösungen schmerzlich
    vermissen, es aber eventuell erst zu spät realisieren.
  </para>
  <para>
    Ich hoffe, dass ich mit dieser kleinen Buch ein wenig Interesse
    wecken konnte. Dass dieses eBook aus der Not heraus entstand, um
    mein eigentliches Thema zu stemmen, darf an dieser Stelle gern als
    Versprechen oder Drohung betrachtet werden. Der Fokus war aus aus
    diesem Grund auch vorrangig technisch geprägt. Eine überarbeitete
    Version ist zu erwarten, sobald das ursprünglich anvisierte
    Buchthema mit den hier beschriebenen Mitteln umgesetzt wurde.
  </para>
  <para>
    Wer das Vorwort überlesen hat und nun gespannt ist, welches Thema
    kurzfristig zurückgestellt wurde, darf sich auf etwas freuen, dass
    mit den drei Buchstaben <literal>PWA</literal> abgekürzt wird. Es
    handelt sich hierbei eher um eine Sammlung von Funktionen und
    Definitionen aus dem Webumfeld, was die Behandlung in Form einer
    Lektüre deutlich umfangreicher gestaltet. Umso wichtiger war es,
    sich mit den Werkzeugen zu beschäftigen, mit denen die Notizen
    strukturiert und in etwas Lesbares gebracht werden und zwar in einer
    Form, bei der der Autor nicht von seiner Arbeit abgelenkt wird.
  </para>
</part>
