RestructuredText¶
RestructuredText (RST) ist eine vereinfachte Auszeichnungssprache (“markup language”), mit deren Hilfe Textdokumente aus einfachen Strukturmerkmalen erzeugt werden können. Diese lassen sich dann mittels eines geeigneten Converters, z.B. Sphinx, automatisiert in LaTeX- oder HTML-Code übersetzen.
Um eine Datei mit RestructuredText-Inhalten zu erstellen, genügt es eine neue
Textdatei mit einem Editor zu öffnen. Üblicherweise werden
RestructuredText-Dateien mit der Endung .rst
versehen.
Überschriften und Hervorhebungen¶
Überschriften sind zur Untergliederung eines Dokuments hilfreich und ermöglichen eine automatische Erzeugung von Inhaltsverzeichnissen. RestructuredText kennt dabei folgende Unterteilungen.
Beispiel:
Name eines Kapitels
===================
Name eines Abschnitts
---------------------
Name eines Unterabschnitts
^^^^^^^^^^^^^^^^^^^^^^^^^^
Name eines Paragraphen
''''''''''''''''''''''
Ergebnis:
Name eines Kapitels¶
Name eines Abschnitts¶
Name eines Unterabschnitts¶
Name eines Paragraphen¶
Zur Hervorhebung einer Überschrift muss somit nur die jeweilige Zeile durch
eine zweite, ebenso lange Zeile mit entsprechenden Zeichen markiert werden;
anschließend muss eine leere Zeile folgen.
Die Überschriften werden – je nach Converter und entsprechenden Einstellungen
– in den erzeugten HTML- bzw. PDF-Dateien mit unterschiedlicher Schriftgröße
und/oder nummeriert dargestellt. In PDF-Dateien wird automatisch ein
Inhaltsverzeichnis zu Beginn des Dokuments erzeugt, in HTML-Dateien wird das
Inhaltsverzeichnis üblicherweise in der Seitenleiste angezeigt.
Zusätzlich ist es möglich, kleine Überschriften ohne Nummerierung und Auflistung
im Inhaltsverzeichnis einzufügen. Hierfür wird eine so genannte “Direktive”
namens .. rubric::
verwendet.[1]
Beispiel:
Kapitelname
===========
Text.
.. rubric:: Bezeichnung
Mehr Text..
Eine weitere Aufgliederung eines Kapitels ist durch ein Aufspalten in mehrere
Dateien möglich.
Das Inhaltsverzeichnis¶
Üblicherweise werden für die einzelnen Kapitel einer Dokumentation eigene
Dateien angelegt, deren Namen in etwa den jeweiligen Kapitelüberschriften
entsprechen sollten (auf Umlaute im Dateinamen sollte dabei verzichtet werden,
Leerzeichen durch Binde- oder Unterstriche ersetzt werden). Jede dieser Dateien
muss unmittelbar mit einer Kapitelüberschrift beginnen und kann weitere
Überschriften beinhalten.
In der Hauptdatei index.rst
der Dokumentation, die im Hauptverzeichnis zu
finden ist, wird auf die einzelnen Kapitel über ein Inhaltsverzeichnus
verwiesen. Um ein Inhaltsverzeichnis zu erzeugen, wird die so genannte
“toctree”-Umgebung verwendet (“Table-of-Contents”). Die Syntax dabei ist
folgende:
.. toctree::
:maxdepth: 2
kapitelname-1.rst
kapitelname-2.rst
kapitelname-3.rst
Durch die Option :maxdepth:
wird festgelegt, bis zu welcher Hierarchie-Stufe
das Inhaltsverzeichnis aufgegliedert werden soll. Mit :maxdepth: 2
werden
beispielsweise alle Kapitel- und Abschnittsnamen eingeblendet, die in den
angegebenen Dateien zu finden sind. In der HTML-Version wird für jede
toctree
angegebene Datei eine neue Seite inklusive Rahmen und
Navigationshilfen erzeugt. In der LaTeX-Version werden die im toctree
angegeben Dateien der Reihe nach eingebunden, als ob sich ihre Inhalte
hintereinander in einer einzigen Datei befänden.
Ein besonderer Vorteil dieser Methode liegt darin, dass umfangreichere Kapitel
beliebig in weitere Unterkapitel aufgeteilt werden können:
- Als erstes wird ein neuer Ordner angelegt, der den gleichen Namen wie die
zugehörige RestructuredText-Datei erhält, beispielsweise
kapitelname-2
.
- Anschließend wird die Kapitel-Datei in den neuen Ordner verschoben und dort
in
index.rst
umbenannt.
- Für jedes Unterkapitel wird in dem neuen Ordner eine neue Textdatei angelegt,
deren Namen wiederum in etwa den Überschriften der einzelnen Abschnitte
entsprechen sollten. Jeder Abschnitt wird dann aus der
index.rst
ausgeschnitten und in die entsprechende Datei eingefügt.
- In die
index.rst
wird schließlich ein toctree
angelegt, der die Namen
aller Dateien, aus denen das Kapitel besteht, beinhaltet.
Von welcher Hierarchie-Ebene die Überschriften in den einzelnen Dateien
ausgehen, ist nicht von Bedeutung: Beim Konvertieren der Quelltexte nach HTML
oder PDF werden alle Hierarchie-Ebenen bei Bedarf automatisch angepasst. Es muss
lediglich innerhalb jeder Datei darauf geachtet werden, dass unmittelbar mit der
“höchste” Überschrifts-Ebene begonnen wird. Eine Empfehlung hierfür ist, jede
Datei mit einer Kapitelüberschrift zu beginnen und bei Bedarf weitere
Überschriften einzufügen.
Kommentare¶
RestructuredText-Dateien können um Kommentare ergänzt werden, die bei der
Übersetzung in PDF- bzw. HTML-Dateien ignoriert werden und somit lediglich als
“private” Notizen für den Autor dienen.
Jede Zeile einer RST-Datei kann, indem zu Beginn zwei Punkte und (mindestens)
ein Leerzeichen eingefügt werden, zu einem Kommentar gemacht werden.
Beispiel:
.. Dies hier ist ein Kommentar.
Um einen längeren, aus mehreren Zeilen bestehenden Kommentar zu erzeugen, kann
einerseits jede Zeile einzeln durch zwei Punkte und ein Leerzeichen am Anfang
der Zeile auskommentiert werden. Einfacher ist es, einen “langen Kommentar”
durch eine separate Zeile einzuleiten, die nur aus zwei Punkten und zwei
Leerzeichen besteht:
Beispiel:
..
Dies hier ist ein langer Kommentar.
Er besteht aus mehreren Zeilen.
Auf diese Weise können auch mehrere Absätze auskommentiert werden. Hierbei
muss jedoch in den Leerzeilen zwischen den Kommentar-Absätzen Leerzeichen oder
Tabulatoren eingefügt werden, da lange Kommentare stets durch eine einzelne,
komplett leere Zeile abgeschlossen werden.
Hervorhebung von Textstellen¶
Um eine einzelne Textstelle innerhalb eines Absatzes hervorzuheben, kann eine
so genannte “Role” verwendet werden.[2] Die wohl am häufigsten
auftretenden Roles sind:
*Kursiver Text*
:
Eine Textstelle, die unmittelbar (ohne Leerzeichen) durch je ein
Sternchen begrenzt ist, wird kursiv dargestellt.
**Fetter Text**
:
Eine Textstelle, die unmittelbar (ohne Leerzeichen) durch je zwei
Sternchen begrenzt ist, wird fettgedruckt dargestellt.
``Maschinenschrift``
:
Eine Textstelle, die unmittelbar (ohne Leerzeichen) durch je zwei
schräge Apostrophen (“Backticks”) begrenzt ist, wird in
Maschinenschrift
dargestellt. Diese Art der Hervorhebung kann
insbesondere für kurze Codebeispiele genutzt werden.
:sub:`Text`
:
Eine Textstelle, die unmittelbar (ohne Leerzeichen) durch je einen
schrägen Apostrophen (“Backtick”) begrenzt ist und durch das einleitende
Schlüsselwort :sub:
oder :subscript:
markiert ist, wird als
tiefgestellter Text dargestellt.
:sup:`Text`
:
Eine Textstelle, die unmittelbar (ohne Leerzeichen) durch je einen
schrägen Apostrophen (“Backtick”) begrenzt ist und durch das einleitende
Schlüsselwort :sub:
markiert ist, wird als tiefgestellter Text
dargestellt.
Beispiel:
Etwas *kursiv dargestellter*,
etwas **fettgedruckter** Text,
und etwas Text in ``Maschinenschrift``;
Tief gestellter Text: :sub:`123` und
hoch gestellter Text: :sup:`456`
Ergebnis:
Etwas kursiv dargestellter, etwas fettgedruckter Text, und etwas Text in Maschinenschrift.
Tief gestellter Text: 123 und hoch gestellter Text: 456
Mittels der :math:
-Role können zusätzlich mathematische Formeln, geschrieben
als LaTeX-Code, innerhalb einer Zeile eingefügt werden. Beispielsweise liefert
:math:`a^2 + b^2 = c^2`
als Ergebnis die Formel
.
Hervorhebung von Absätzen¶
Um einen Absatz bzw. mehrere Absätze hervorzuheben, kann eine der folgenden
Direktiven genutzt werden:
.. epigraph::
Innerhalb einer epigraph
-Umgebung werden gewöhnlich Zitate in das
Dokument eingefügt. Am Ende wird dabei üblicherweise der Name des Autors der
zitierten Textstelle angegeben.
Beispiel:
.. epigraph::
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt."
-- Albert Einstein
Ergebnis:
“Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.”
—Albert Einstein
Innerhalb einer epigraph
-Umgebung sind sowohl mehre Absätze als auch
Inline-Markup (Roles) erlaubt. Die Ausgabe erfolgt eingerückt und mit reduzierter
Zeilenlänge, um das Zitat gut erkennbar vom übrigen Text abzuheben;
Zeilenumbrüche erfolgen automatisch.
.. line-block::
Die line-block
-Umgebung ist der epigraph
-Umgebung ähnlich, jedoch
finden im Ergebnis keine automatischen Zeilenumbrüche statt. Die Zeilen
werden stattdessen in gleicher Form ausgegeben, wie sie innerhalb der
line-block
-Umgebung gesetzt werden. Dies ist insbesondere beim Zitieren
von Gedichten und Versen nützlich:
Beispiel:
.. line-block::
"Jede Blüte will zur Frucht
Jeder Morgen Abend werden
Ewiges ist nicht auf Erden
Als der Wandel, als die Flucht."
-- Hermann Hesse (Ausschnitt aus dem Gedicht "Welkes Blatt")
Ergebnis:
“Jede Blüte will zur Frucht
Jeder Morgen Abend werden
Ewiges ist nicht auf Erden
Als der Wandel, als die Flucht.”
– Hermann Hesse (Ausschnitt aus dem Gedicht “Welkes Blatt”)
Absätze, die innerhalb einer line-block
-Umgebung stehen, werden nicht
automatisch eingerückt. Ist dies gewünscht, so kann man eine Einrückung
entweder über entsprechende CSS-Einstellungen oder über eine manuelle
Einrückung der jeweiligen Umgebung (Leerzeichen bzw. Tabulatoren im
Quellcode) erreichen.
note
, hint
, tip
, warning
, error
, important
Mit den obigen Direktiven lassen sich Infoboxen erzeugen. Der Titel der
Infobox leitet sich dabei aus dem Direktivennamen ab (Bemerkung, Hinweis, Tip,
Warnung, Fehler, Wichtig).
Beispiel:
.. hint::
Hier wird ein Hinweis ausgegeben.
Ergebnis:
Hinweis
Hier wird ein Hinweis ausgegeben.
Neben den oben genannten Direktiven kann auch eine topic
-Umgebung
genutzt werden, um eine beliebig benannte Infobox erzeugen. Dabei wird in
der gleichen Zeile de im Anschluss an .. topic::
der Name der Box
geschrieben.
math
Mit der math
-Direktive können mathematische Formeln (LaTeX-Code) als
eigenständige, zentrierte Zeilen in das Dokument eingebunden werden.
Beispiel:
.. math::
a^2 + b^2 = c^2
Ergebnis:

Die math
-Direktive bietet zusätzlich die Option, der angegebenen Formel
eine Sprungmarke (“Label”) und eine automatisch vergebene Nummer zu
vergeben. Hierzu wird eine eigene Zeile der Form :label: Name-des-Labels
unmittelbar als erste Zeile der math
-Direktive eingefügt (mit gleicher
Einrückung wie die eigentliche Formel).
Beispiel:
.. math::
:label: einstein-und-pythagoras
E = m \cdot c^2 \overset{?}{=} m \cdot (a^2 + b^2)
Ergebnis:
(1)
Auf die Formel kann dann mittels der Referenz eqr:`Name-des-Labels`
an
einer beliebigen anderen Stelle des Dokuments (derzeit jedoch nur innerhalb
einer einzelnen Quellcode-Datei) verwiesen werden.
code-block
Die code-block
-Direktive ermöglicht es, wie der Name bereits andeutet,
Quellcode-Beispiele in das Dokument einzufügen. Dabei kann in der gleichen
Zeile im Anschluss an .. code-block::
eine Codesprache aus dieser Liste ausgewählt werden, um ein
Syntax-Highlighting zu aktivieren.
Beispiel:
.. code-block:: bash
number-lines:
# Show the local network address
# Result: Something like 192.168.1.105
hostname -I | cut -d' ' -f1
Ergebnis:
# Show the local network address
# Result: Something like 192.168.1.105
hostname -I | cut -d' ' -f1
Quellcode wird üblicherweise in Maschinenschrift ausgegeben; jegliches
Inline-Markup wird dabei ignoriert. Möchte man Inline-Markup (Roles)
dennoch interpretiert haben, um beispielsweise Verlinkungen innerhalb des
Quellcodes zu setzen, kann anstelle von code-block
die
parsed-literal
-Direktive verwendet werden, die ansonsten die gleiche
Syntax aufweist.
Weitere Gestaltungsmöglichkeiten von Absätzen sind in der Liste aller
RST-Direktiven (en.) aufgeführt.
Sprungmarken und Referenzen¶
Ein sehr nützliche von Wiki-Seiten besteht darin, mittels eines klickbaren Links
auf eine andere Stelle in der Dokumentation oder auf eine externe Seite
verweisen zu können. RestructuredText bietet dazu folgende Möglichkeiten:
Mittels `Link-Bezeichnung <Adresse>`_
kann ein mit einer bestimmten
Bezeichnung versehener Link auf eine externe Seite gesetzt werden. Soll eine
Adresse ohne eigene Bezeichnung verlinkt werden, so genügt es die Adresse ohne
weitere Syntax anzugeben, beispielsweise http://www.grund-wissen.de . Ein Link
wird dabei automatisch erzeugt.
Mittels einer eigenen Zeile der Form .. _Name der Sprungmarke:
und einer
darauf folgenden Leerzeile kann an einer beliebigen Stelle innerhalb der
Dokumentation eine Sprungmarke (auch “Label” oder “Anker” genannt) festgelegt
werden. Auf diese Sprungmarke kann dann von einer beliebigen anderen Stelle im
Dokument aus mittels :ref:`Link-Bezeichnung <Name der Sprungmarke>`
verwiesen werden.
Diese Methode funktioniert auch, wenn sich die Sprungmarke und die Referenz
in verschiedenen Dateien des Quelltextes einer Dokumentation befinden.
Mittels der “Intersphinx”-Erweiterung, die beim Sphinx-Quickstart ausgewählt
werden kann[3], ist es möglich, auch auf Sprungmarken anderer
Sphinx-Projekte zu verweisen. Hierzu muss die Konfigurationsdatei conf.py
um einen oder mehrere Einträge mit folgender Form ergänzt werden:
intersphinx_mapping = {
'sphinx': ('http://sphinx-doc.org', None),
'gw': ('http://grund-wissen.de', None)
}
Damit kann beispielsweise mittels :ref:`Inhaltsverzeichnis der
Sphinx-Dokumentation <sphinx:contents>`
ein Link auf das
Inhaltsverzeichnis der Sphinx-Dokumentation gesetzt
werden, das eine Sprungmarke namens contents
enthält (dies zeigt ein Blick
in den Quelltext der Seite, der üblicherweise in der Seitenleiste verlinkt
ist). Führt man den Mauszeiger über einen solchen Link, so werden der Name und
die Versionsnummer der jeweiligen Dokumentation eingeblendet.
Fußnoten, Zitierungen und Index-Einträge¶
In RestructuredText gibt es die Möglichkeit, ergänzende Anmerkungen als
Fußnoten aus dem normalen Text “auszulagern”. Hierzu wird im Haupttext eine
Marke der Form [#]_
oder [#Name]_
gesetzt, d.h. ein Rautenzeichen in
eckigen Klammern, gefolgt von einem Unterstrich.[4] Optional kann jeder Marke einer
Fußnote im Anschluss an die Nummer oder das Rautensymbol (Autonummerierung) noch
ein Name hinzugefügt werden, um im Quelltext die Zuordnung der Fußnoten-Marke
zur Fußnote zu erleichtern.
An einer späteren Stelle innerhalb der gleichen Datei, meist am Ende, wird der
Inhalt der jeweiligen Fußnote dann absatzweise mittels .. [#] Inhalt
beziehungsweise .. [#Name] Inhalt
angegeben, wobei [#Name]
der Marke im
Haupttext entsprechen muss.
Beispiel:
Etwas Text. [#FN1]_
Weiterer Text.
...
.. [#FN1] Eine Anmerkung als Fußnote.
Ergebnis:
Erstreckt sich der Inhalt einer Fußnote über mehrere Zeilen, so muss jede Zeile
nach der ersten um mindestens ein Leerzeichen eingerückt werden (üblicherweise
werden Folgezeilen eine Tabulatorbreite weit eingerückt, um eine bessere
Lesbarkeit zu erzielen).
Zitierungen und Literaturverzeichnis
Innerhalb einer Dokumentation sind auch Verweise auf literarische Werke anderer
Autoren möglich. Für jedes zitierte Werk wird dabei ein Kurzname vergeben,
häufig in der Form AutorJahr
. Im Haupttext (oder in einer Fußzeile) kann
auf diese Weise mittels [Kurzname]_
auf eine genauere Umschreibung der
Literaturquelle verwiesen werden, die einmalig an einer beliebigen Stelle der
Dokumentation mittels eines Eintrags der Form .. [Kurzname] Informationen
erfolgt.[5]
In der HTML-Version werden alle Literatur-Einträge an genau der Stelle
eingefügt, an der sie gesetzt werden. Insofern empfiehlt sich eine eigene Datei
namens quellen.rst
(oder ähnlich), in der die Literaturhinweise und
Quellenangaben gesammelt aufgelistet sind. In der LaTeX-Version wird am Ende des
Dokuments automatisch ein Literaturverzeichnis angelegt.
Index-Einträge
An jeder beliebigen Stelle innerhalb der Dokumentation können mit .. index::
Bezeichnung
Einträge für ein Stichwortverzeichnis festgelegt werden. In der
HTML-Version wird ein Link auf die Index-Seite üblicherweise auf der rechten
Seite am oberen und unteren Seitenrand eingeblendet. In der LaTeX-Version wird
das Stichwortverzeichnis auf den letzten Seiten der Dokumentation abgedruckt.
Eine Verlinkung mit den entsprechenden Textstellen (in der Druckversion mitsamt
Angabe der jeweiligen Seitennummer) erfolgt automatisch.
- Um mehrere Index-Einträge zur gleichen Textstelle zu erreichen, können die
Bezeichnungen der gewünschten Einträge, durch Kommas voneinander getrennt, in
einer einzigen Zeile aufgelistet werden.
- Werden zwei Einträge durch einen Strichpunkt getrennt, so wird der zweite
Eintrag als “Unterkategorie” des ersten im Stichwortverzeichnis angezeigt.
Eine ausführliche Beschreibung findet sich in der Sphinx-Dokumentaion.
Aufzählungen, Beschreibungen, Tabellen und Bilder¶
Anmerkungen:
[1] Eine “Direktive” ist ein Syntax-Element, das Auswirkung auf einen ganzen
Absatz hat, d.h. auf einen Bereich, der durch zwei leere Zeilen begrenzt
wird. Im kürzesten Fall, wie bei der .. rubric::
-Direktive, besteht der
Absatz aus einer einzelnen Zeile, die unmittelbar hinter dem Namen der
Direktive angegeben wird.
Eine Direktive wird allgemein durch zwei Punkte und ein Leerzeichen zu
Beginn einer Zeile eingeleitet, gefolgt vom Namen der Direktive, zwei
Doppelpunkten und einem Leerzeichen: .. name::
. Vor und nach einer
Direktive muss (mindestens) eine Leerzeile eingefügt werden.
Je nach Art der Direktive kann hinter ihrem Namen eine weitere Bezeichnung
und/oder eine beliebige Anzahl von Absätzen folgen. Um den Wirkungsbereich
der Direktive kenntlich zu machen, werden die Absätze dabei eine
Tabulatorbreite weit eingerückt (üblicherweise 4 Leerzeichen).
Siehe auch Liste aller RST-Direktiven (en.).
[2] Eine “Role” ist ein Syntax-Element, das Auswirkung auf eine Textstelle
innerhalb eines Absatzes hat, d.h. auf einen Bereich, der durch zwei Leerzeichen
begrenzt wird (“Inline-Markup”).
Eine Role hat im allgemeinen folgende Struktur: :name:`Inhalt`
. Die
einzigen Ausnahmen bilden die drei oben genannten (wohl am häufigsten
auftretenden) Roles für kursiven und fettgedruckten Text sowie Text in
Maschinenschrift. Sie stellen praktisch nutzbare Abkürzungen für
:emphasis:`Text`
, :strong:`Text`
sowie :literal:`Text`
dar, um
Tippbarbeit zu sparen und den Quelltext lesbarer zu gestalten.
Siehe auch Liste aller RST-Roles (en.).
[3] Die Intersphinx-Erweiterung lässt sich ebenso nutzen, wenn in der
Konfigurationsdatei conf.py
die extension
-Liste um den Eintrag
'sphinx.ext.intersphinx'
ergänzt wird.
[4] Optional können die Nummern der Fußnoten auch in der Art [01]_
,
[02]_
bzw. [01Name]_
, [02Name]_
usw. selbst vergeben werden.
Davon ist allerdings abzuraten, denn sollte zu einem späteren Zeitpunkt an
einer Stelle mitten im Text eine weitere Fußnote eingefügt werden, so
müssen die Nummern aller folgenden Fußnoten manuell angepasst werden. Durch
automatisch nummerierte Fußnoten bleibt einem diese Arbeit sicher erspart.
Tip: Durch die Option trim_footnote_reference_space = True
in der
conf.py
wird ein mögliches Leerzeichen vor Fußnoten, wie in
deutschsprachiger Literatur üblich, ignoriert.
[5] Die Syntax von Zitierungen ähnelt somit der Syntax von Fußnoten, mit dem
Unterschied, dass innerhalb der eckigen Klammern keine Nummer
beziehungsweise kein einleitendes Raute-Zeichen auftritt.
Jede Literaturangabe sollte folgende Informationen beinhalten: Name des
Autors bzw. der Autoren, Titel des Werks, (gegebenenfalls) Name des Verlags,
Erscheinungsjahr.