- Sphinx’ reStructured Text (rST) ist schwerer zu lernen als Markdown, macht es bei umfangreichen Dokumenten wie Büchern aber leichter, Struktur und Ausgabeformate präzise zu steuern
- Markdown ist eher eine leichtgewichtige Schreibweise für HTML, während rST rund um einen abstrakten Dokumentbaum Direktiven, Knoten und Renderer kombiniert, um neue Dokumentobjekte hinzuzufügen
- Sphinx transformiert den Doctree vor dem Rendering, sodass Aufgaben wie Querverweise, ausgabeformatspezifische Verarbeitung und Transformationen in bestimmten Build-Phasen innerhalb des Dokumentsystems behandelt werden können
- In Logic for Programmers werden Übungen und Lösungen nahe am Originaltext geschrieben; anschließend wird eine Custom Extension verwendet, die in EPUB- und LaTeX-Ausgaben Position und Darstellung ändert
- Einfaches Markdown bietet keine einheitliche Erweiterungssyntax und keine Unterstützung für Transformationen vor dem Rendering; je stärker Dokumentgeneratoren das mit separatem Preprocessing umgehen, desto schwächer werden Tool-Unterstützung und Erweiterbarkeit
Warum ich rST gewählt habe
- Die neue Version von Logic for Programmers ist mein zweites mit Sphinx geschriebenes Buch; auch meine frühere Arbeit, das neue Learn TLA+, nutzt Sphinx
- Sphinx verwendet reStructured Text, und rST hat eine steilere Lernkurve als Markdown
- Nachdem ich mehrere Bücher in Markdown geschrieben hatte, brauchte ich bessere Werkzeuge und wechselte zu rST
- rST selbst ist unabhängig von Sphinx, in der Praxis nutzt man rST aber häufig wegen Sphinx; deshalb werden beide hier gemeinsam behandelt
Strukturunterschiede zwischen Markdown und rST
- Der größte Unterschied ist, dass Markdown eher eine leichtgewichtige HTML-Auszeichnung ist, während rST eine mittelgroße Auszeichnungssprache ist, die einen abstrakten Dokumentbaum erzeugt
- Die Bildsyntax von Markdown kann schon durch eine einfache Transformation in HTML wie
<img alt="alttext" src="example.jpg"/>umgewandelt werden- Auch moderne Markdown-Engines parsen oft in eine Zwischendarstellung, ihrem Grundcharakter nach bleibt Markdown aber eher eine leichte HTML-Schreibweise
- Bilder werden in rST mit der Direktive
.. image::dargestellt- Sphinx sucht den registrierten Directive-Handler und führt
ImageDirective.runaus - Das Ergebnis ist ein Knotenobjekt wie
image_nodemit einemalt-Feld - Wenn die Verarbeitung des gesamten Doctree abgeschlossen ist, sucht der HTML Writer die Rendering-Funktion für
image_nodeund gibt den HTML-Tag aus
- Sphinx sucht den registrierten Directive-Handler und führt
- Der rST-Ansatz ist in Implementierung und Syntax komplexer und hat mehr Boilerplate als Markdown, behandelt Bilder aber über denselben Erweiterungsmechanismus wie andere Direktiven
Wie neue Dokumentobjekte hinzugefügt werden
- In rST/Sphinx lassen sich neue Textobjekte als Erweiterung hinzufügen
- Wenn man zum Beispiel statt
<image>ein<figure>und ein<figcaption>erzeugen möchte, müsste man in einfachem Markdown HTML direkt einfügen - In Sphinx erledigt man das, indem man eine neue
figure-Direktive registriertFigureDirectivekann vonImageDirectiveerben und so den Großteil der Bildverarbeitung wiederverwenden
- Das Muster aus Registrierung einer Direktive, Erzeugung von Knoten und Registrierung builder-spezifischer Renderer gilt einheitlich für alle Erweiterungen
Doctree-Transformationen vor dem Rendering
- Sphinx kann vor dem Rendering Doctree-Transformationen ausführen
- Auch Querverweise zwischen Dokumenten werden über diese Funktion behandelt
- Wenn ein Dokument einen
foo-Anker enthält und ein anderes Dokument:ref:\image <foo>`` nutzt, fügt Sphinx in einem Nachverarbeitungsschritt die korrekte URL ein
- Wenn ein Dokument einen
- Transformationscode wird wie ein First-Class-Feature im Build-Prozess behandelt
- Bestimmte Transformationen können nur bei HTML-Ausgabe angewendet werden
- Transformationen können in bestimmten Build-Phasen ausgeführt werden
- Auch eingebaute Transformationen, die man nicht ausführen möchte, lassen sich entfernen
- Nicht jedes Dokument braucht diese Leistungsfähigkeit; Markdown ist leichtgewichtig, portabel und deshalb weit verbreitet
Beispiel für eine Erweiterung mit Übungen und Lösungen
- Logic for Programmers ist ein stark mathematiknahes Buch und braucht daher Übungen für Leser
- Beim Schreiben ist es einfacher, Übungen und Lösungen im Dokument nah beieinander zu halten; für Leser sollen die Lösungen aber hinten im Buch erscheinen
- Die Anforderungen unterschieden sich je nach Ausgabeformat
- Übungen und Lösungen müssen gegenseitig verlinkt sein
- Wegen der Druckbarkeit braucht das PDF auch Seitenverweise
- Die Darstellung muss sich zwischen LaTeX/PDF-Ausgabe und EPUB-Ausgabe unterscheiden
- Dafür wurde eine Custom Sphinx Extension geschrieben, die
exercise,solutionundsolutionlistverarbeitet - In der HTML-Debug-Ausgabe werden Übungen und Lösungen inline gerendert
- Bei der EPUB- und LaTeX-Erzeugung wird zunächst der gesamte Doctree erstellt und anschließend eine Transformation ausgeführt
- Alle
solution_nodean ihrer ursprünglichen Position werden untersolutionlistverschoben - Jede Übung erhält einen Referenzknoten, der auf die neue Position der Lösung verweist
- Jede Lösung erhält einen Referenzknoten zurück zur ursprünglichen Übung
- Alle
- Der LaTeX-Builder umschließt Übungen und Lösungen mit einer answers environment
- Der EPUB-Builder rendert Lösungen als popup footnote
- Diese Struktur hilft auch beim Erstellen der kostenlosen Leseprobe des Buches
- Am Ende der kostenlosen Leseprobe stehen nicht die Lösungen des gesamten Buchs, sondern nur die Lösungen der darin enthaltenen Teile
Syntaxvorlieben und Alternativen
- Der häufigste Einwand gegen rST ist, dass die Syntax hässlich ist
- Ein Werkzeug nicht zu verwenden, weil es einem optisch nicht gefällt, ist eine völlig legitime Entscheidung; auch warum Lisp manchen schwerfällt, lässt sich als dieselbe Geschmacksfrage betrachten
- Alternativen sind asciidoc, MyST, Typst, Pollen und pandoc-extended markdown
- Der Punkt ist nicht, dass Sphinx/rST außergewöhnlich gut für große Dokumentation ist, sondern dass einfaches Markdown außergewöhnlich ungeeignet für große Dokumentation ist
Grenzen Markdown-basierter Generatoren
- Einfaches Markdown hat keine einheitliche Erweiterungssyntax und keine native Unterstützung für Transformationen vor dem Rendering
- Viele Markdown-basierte Dokumentgeneratoren fügen eigene Preprocessing-Schritte hinzu, um neue Anwendungsfälle zu unterstützen
- Dieser Ansatz funktioniert meist, umgeht das Problem aber rund um Markdown, statt es innerhalb von Markdown zu behandeln
- Dadurch entsteht eine Grenze bei der Leistungsfähigkeit der Features, und Programmierwerkzeuge können diese Varianten schwerer verstehen
- Für Markdown und rST gibt es LSP und treesitter, aber für gitbook-markdown, md-markdown oder leanpub-markdown sind Werkzeuge auf demselben Niveau kaum zu erwarten
- Die hässliche Syntax von rST kann sich im Gegenteil als Vorteil erweisen, weil der Syntaxbaum reichhaltiger ist
- Eine treesitter-Abfrage, die nur den Body einer bestimmten
todo-Direktive ändert, ist möglich - Das ist möglich, weil der rST-Syntaxbaum reichhaltiger ist als der Markdown-Syntaxbaum
- Eine treesitter-Abfrage, die nur den Body einer bestimmten
Update zu Logic for Programmers
- Logic for Programmers ist ein Buch darüber, wie formale Logik in der alltäglichen Softwareentwicklung nützlich sein kann
- Das Buch beginnt mit einem Überblick über grundlegende Mathematik und führt dann zu 8 Anwendungen wie Property-Tests, Datenbank-Constraints und Entscheidungstabellen
- Es ist noch in der Alpha-Phase, umfasst aber 20.000 Wörter, und Leserfeedback ist willkommen
1 Kommentare
Meinungen auf Hacker News
Wenn man mich fragt: „Würdest du ein gutes Werkzeug nicht benutzen, nur weil dir schon beim Anschauen übel wird?“, würde ich mit Ja antworten. Der größte Vorteil von Markdown ist, dass es leicht zu lesen ist; der zweitgrößte, dass es leicht zu schreiben ist.
Wie einfach es zu parsen oder zu erweitern ist, spielt kaum eine Rolle. Unabhängig davon, ob Markdown die beste Wahl zum Schreiben von Büchern ist: Für den Zweck, schnell formatierten Text so zu schreiben, dass ihn auch Menschen ohne genaue Syntaxkenntnisse leicht lesen können, ist Markdown am besten. Ich will kein Buch schreiben, sondern nur Notizen, schnelle Dokumentation oder Kommentare verfassen; und wenn ich ein Buch schreiben würde, würde ich vor RST zuerst LaTeX verwenden.
Als ich es dann in echten Apps benutzte, zeigte sich: Darum ging es bei Markdown nicht. Ziel ist, nur minimale Formatierung bereitzustellen, sodass es schon als Plain Text so natürlich lesbar ist wie in HTML gerendert. Der unterstützte Formatierungsumfang ist absichtlich klein, sodass man ihn im Kopf behalten und ohne Toolbar verwenden kann. Für Kommentarfelder, Chats, Commit-Messages und vielleicht Blogposts passt das, aber nicht für das Erstellen von Enterprise-Produktdokumentation. Heute wird Markdown sogar dort verwendet, wo es gar nicht als HTML gerendert wird, weil es an sich gut lesbar ist; ich wünschte, HN würde es ebenfalls unterstützen.
Auch recht viel technische Dokumentation habe ich in Markdown erstellt, und mit den Pandoc-Erweiterungenhttps://pandoc.org/MANUAL.html kann man fast jede benötigte Formatierung einbauen, einschließlich komplexer Formeln und Codeblöcke mit Syntaxhervorhebung. Dieses Markdown lässt sich in HTML, Word-Dokumente, ePub, PDF usw. umwandeln. Um zu etwas anderem als Markdown zu greifen, bräuchte es schon einen sehr überzeugenden Grund.
Das größte Problem, das ich bei TeX sehe, ist nicht die Sprache, sondern die Menschen. Leute schreiben oft Spaghetti-TeX in miserablen Stilen. Wenn man aber mit der Denkweise „Dokumente sind Code“ herangeht, kommen ziemlich saubere Ergebnisse heraus. Das zweitgrößte Problem ist, dass es keinen guten TeX-→-HTML-Compiler gibt.
Ich bin in LaTeX nicht besonders geübt, aber als ich einmal versuchte, es zu lernen, fühlte es sich an, als würde ich die Sprache einer insektoiden Alien-Zivilisation lernen. Es ist überhaupt nicht intuitiv, und etwas Neues zu machen war fast unmöglich, wenn man nicht einfach kopierte, was jemand anderes schon erledigt hatte, und nur den eigenen Text einsetzte. Soweit ich mich erinnere, gab es auch keine erstklassige Unicode-Unterstützung.
Für Kursivschrift Sternchen oder Unterstriche zu verwenden, erfordert ebenfalls Gewöhnung; es gibt deutlich intuitivere Varianten wie
/italic slashes/. Sobald man über die Grundlagen hinausgeht, verdecken Tabellen, Metadaten und Tags den Text, sodass Schreiben und Lesen ohne passende Werkzeuge nicht mehr einfach sind. Wenn Erweiterung einfach ist, lassen sich auch solche Grundprobleme beheben, daher ist Erweiterbarkeit durchaus relevant.Ich habe etwa 12 Jahre als technische Redakteurin bzw. technischer Redakteur gearbeitet und früh in meiner Karriere die Dokumentation eines Startups von Word nach Sphinx migriert. Danach habe ich an Googles eigenem CMS bzw. Entwicklerdokumentationsplattform gearbeitet, an einer Eleventy-basierten Site und in den letzten zwei Jahren wieder an einer Sphinx-basierten Site, pigweed.dev. Außerdem habe ich für ein Startup mit readme.com gearbeitet und mich auch etwas mit Docusaurus, Astro und Hugo beschäftigt.
reStructuredText allein kann sperrig sein, aber reST in Kombination mit Sphinx ist ausgesprochen gut. Die Stärken von Sphinx überwiegen die Schwächen von reST bei Weitem. Für große professionelle Dokumentationssites mit mehr als 100 Seiten und mehr als 10 Beitragenden halte ich Sphinx langfristig ziemlich klar für die verantwortungsvollste Wahl. Bei Pigweed haben wir zum Beispiel eingerichtet, dass schon
:bug:\59385981`` in einen Link auf https://pwbug.dev/59385981 umgewandelt wird; und falls später Bug-Links massenhaft migriert werden müssen, ist das einfach. Auch bei internen Links ist immer gewährleistet, dass sie aufgelöst werden, und wenn man auf etwas Nichtvorhandenes verlinkt, gibt es eine Warnung oder einen Fehler. Dass das nicht Standard für Dokumentationssites ist, fand ich schon früher seltsam und habe darüber auf https://technicalwriting.dev/src/link-text-automation.html geschrieben. Sphinx hat außerdem gut definierte Erweiterungs- und Theme-APIs, und auf PyPI gibt es ein ziemlich großes Ökosystem. Heutzutage nenne ich Sphinx den schlafenden Riesen unter den Dokumentationssystemen; mit nur etwas gebündelter Kraft könnte es noch deutlich großartiger werden.Wenn sich der Slug ändert oder die Site-Struktur umgebaut wird, muss man auf der gesamten Site Suchen und Ersetzen durchführen. Statische Site-Generatoren könnten einen eigentlich Links wie
[Hello](../hello.md)setzen und sie beim Build auflösen lassen, aber viele der Tools, die ich genutzt oder mir angesehen habe, verlangen, dass man[Hello](/why/hello/)direkt eintippt. Diese Funktion scheint die Geister zu scheiden. Als ich mit einem Teammitglied eines statischen Site-Generators darüber sprach, bekam ich nur die Antwort: „Warum willst du das überhaupt?“, und selbst nach einer Erklärung kam es nicht an. Ich weiß nicht, ob man erst selbst das Problem erlebt haben muss, um den Wert der Lösung zu erkennen, oder ob manche einfach daran gewöhnt sind, etwas einmal zu schreiben und nicht über mehr als 10 Jahre zu warten. Ich fände es jedenfalls gut, wenn das breiter unterstützt würde.Das Plugin-Ökosystem ist hervorragend und bietet enorme Hebelwirkung, um die Dokumentation von Teams und Projekten zu verbessern. reStructuredText selbst mag ich nicht, aber dank MyST-Parser kann man heute vieles, wofür Sphinx früher stark an RST gebunden war, auch mit Markdown erledigen: https://github.com/executablebooks/MyST-Parser
Ich habe gerade ein Buch mit über 200 Seiten über eine interne Sprache/VM/Abstraktionsschicht nach Sphinx migriert, und es ist wirklich ein lebensveränderndes System. Ich wünschte, die Sphinx-Dokumentation selbst hätte eine niedrigere Einstiegshürde oder mehr Beispiele, aber im Moment fühlt es sich nach einer ziemlich intensiven Honeymoon-Phase an. Mein Hauptinteresse gilt der Frage, wie man daraus schön aussehende PDF-Bücher erzeugt und wie man das Buch kapitel- und abschnittsweise in POSIX-kompatible man-Pages zerlegt.
Beim Auswählen eines Site-Generators ist Ästhetik ein ziemlich wichtiger Faktor. Hugo und Gatsby haben hervorragende Standard-Themes, und ich habe sie tatsächlich schon allein aus diesem Grund für Projekte gewählt. Die Sphinx-Theme-Sammlungen https://sphinx-themes.org/ und https://sphinxthemes.com/#featured-themes wirken größtenteils eher blass. Vergleicht man das Standard-Theme Sphinx RTD https://sphinx-rtd-theme.readthedocs.io/en/stable/ mit Apples Dokumentation https://developer.apple.com/documentation/swift/array oder Fluent UI https://react.fluentui.dev/?path=/docs/concepts-developer-positioning-components--default, sieht es veraltet aus.
Ich halte den Satz „Markdown ist eine leichtgewichtige Darstellung von HTML“ für das größte Problem in diesem Text. Das ist eindeutig ungenau.
Markdown wurde als Werkzeug entworfen, um Textformatierungs-Konventionen zu konvertieren, die in E-Mails und Usenet-Beiträgen Anfang der 1990er praktisch als Standard verwendet wurden. Wegen der Beschränkung auf 7-Bit-ASCII wurden Formatierungen wie Hervorhebungen oder Überschriften mit Sonderzeichen markiert, und HTML hatte mit diesen namenlosen Konventionen viele Gemeinsamkeiten. Deshalb schrieb John Gruber 2004 ein grundlegendes Skript https://daringfireball.net/projects/markdown/, das sie in HTML umwandelte, aber er hätte wohl nicht erwartet, dass es zu einem so verbreiteten De-facto-Standard werden würde.
Gruber hat nicht einfach den De-facto-Standard aus dem Usenet genommen und einen HTML-Konverter gebaut, sondern aus Usenet und anderen Konventionen Anleihen genommen und sein eigenes Markup entworfen. Auch die „Acknowledgements“ am Ende des Links zeigen das. Markdown war von Anfang an als Markup-Syntax für Web-CMS gedacht, und es ist richtig, es als leichtgewichtige Darstellung von HTML zu bezeichnen. Der Kern war, dass jeder Teil der Syntax direkt entsprechendes HTML erzeugt.
Die Tatsache, dass es von E-Mail-Konventionen inspiriert wurde, macht die Aussage „Markdown ist eine leichtgewichtige Darstellung von HTML“ nicht weniger zutreffend.
Es gibt die Regel, auf die plausibelste und stärkste Interpretation dessen zu antworten, was das Gegenüber gesagt hat, statt sich die schwache Interpretation herauszugreifen, die leicht zu kritisieren ist. Es gibt auch die Regel, sich nicht den provokantesten Satz eines Artikels herauszupicken und darüber zu klagen, sondern auf die interessanten Teile zu antworten: https://news.ycombinator.com/newsguidelines.html
Wenn man dem Kern des Artikels nicht zustimmt, kann man sagen, dass man Markdown gegenüber rST bevorzugt, und erklären, warum. Sich über einen einzelnen Satz darüber zu streiten, was Markdown genau ist, ist albern.
Es war zwar von Konventionen wie E-Mail oder Usenet inspiriert, und einige davon gab es sogar schon vor Computern. Ich meine zum Beispiel, alte maschinengeschriebene Dokumente gesehen zu haben, in denen Sternchen wie Kursivschrift verwendet wurden. Aber Markdown ist stark mit HTML verbunden, seine Syntax ist sehr stark durch HTML eingeschränkt, und Versuche, es von HTML zu trennen, sind größtenteils zum Scheitern verurteilt.
Ich denke, der Kern von Markdown besteht darin, einfache Dinge schneller zu machen als mit rohem HTML, aber bei Bedarf rohes HTML einmischen zu können.
Bei Projekten, in denen ich die Mächtigkeit von RST gegenüber Markdown gebraucht hätte, war es für mich bequemer, gleich HTML direkt zu schreiben.
Beim Aufbau eines Dokumentationssystems mit ähnlicher Komplexität habe ich RST geprüft, weil ich Markup mit klarer Semantik dringend brauchte: Die Struktur von RST-Dateien sollte in einer Datenbank gespeichert und Datenbankergebnisse mit Inhalten vermischt werden.
Ich stieß auf zwei Probleme. Erstens haben die RST-Tools keinen Unparser, der wieder RST ausgibt. Ich wollte mehrere RST-Dateien und andere Quellen zusammenführen, automatisch RST-Dateien erzeugen und sie über eine Dokument-API bearbeiten, aber das wurde nicht unterstützt. Zweitens erwarten RST-Tools eine für ein bestimmtes Dokument definierte Menge von Blöcken. Wenn Blöcke allgemein ausgedrückt würden, wären Tools möglich, die Dokumente transformieren, ohne die internen Blockdefinitionen zu kennen; so ist es aber nicht. Das ist eher ein Tooling-Problem als ein Problem von RST selbst, aber jedes Mal, wenn man den Code bis auf den Grund freilegen muss, denkt man an andere Markup-Systeme, etwa HTML-basierte.
Der Vorteil dieses Ansatzes ist, dass man Eingabeschema und Ausgabe vollständig kontrollieren kann; der Nachteil ist, dass die Syntax deutlich mehr Rauschen hat als Markdown oder RST und dass man Skripte braucht, um in das gewünschte Ausgabeformat zu parsen und zu transformieren.
Der gesamte Zweck von docutils ist es, Formate zu parsen und in eine API zu überführen: https://www.docutils.org/docs/index.html#api-reference-material-for-client-developers
Vor ein paar Jahren habe ich einmal eine Teilmenge von reStructuredText zusammengestellt, die es sich zu merken lohnt: https://simonwillison.net/2018/Aug/25/restructuredtext/
In jüngeren Projekten habe ich angefangen, MyST zu verwenden: Es bietet die Referenz- und Inhaltsverzeichnis-Funktionen, die ich an reStructuredText wichtig fand, erlaubt Beitragenden aber zugleich die leichter zu schreibende Markdown-Syntax.
Der eigentliche Gamechanger sind bei internen Links rST+Sphinx und die Direktiven
:ref:und:doc:. Wenn man innerhalb desselben Inhalts auf Anker oder Dokument-Links verweist, muss man die Überschrift nicht direkt eintippen und vermeidet, dass eine manuell eingetragene Überschrift irgendwann veraltet: https://www.sphinx-doc.org/en/master/usage/referencing.html#ref-roleDas ist eine der Funktionen, die ich beim Schreiben in rST am meisten vermisse.
Ich will die ReStructuredText-Diskussion nicht kapern, aber wenn ihr nach einer Markup-Sprache sucht, die mehr bietet als Markdown, würde ich empfehlen, euch statt ReStructuredText AsciiDoc anzusehen. Ich habe über Jahre technische Dokumentation in allen drei Formaten geschrieben und halte AsciiDoc für besser als ReStructuredText und Markdown.
Zum Beispiel ist die Tabellenunterstützung in Markdown und ReStructuredText ziemlich umständlich. Das Tabellenformat von AsciiDoc ist leicht zu lesen, zu schreiben und zu pflegen, unterstützt Header, Captions, benutzerdefinierte Größen für Tabellen und Zeilen sowie komplexe Formatierung innerhalb von Tabellen und ist damit leistungsfähiger. Es ist ein einziges Standardformat ohne die vielen Dialekte wie bei Markdown, die Syntax ist knapp und gut lesbar, und die Lernkurve ist flacher als bei ReStructuredText. Die Optionen fürs Output-Styling sind besser, die Toolchain ist überlegen, und es gibt viele eingebaute Dokumentationsfunktionen, sodass man seltener von Third-Party-Plugins abhängt. AsciiDoc wurde von Anfang an für technische Dokumentation entworfen; die beiden anderen wurden eher in diese Rolle hineingezwängt.
Wenn man ein Markdown-Dokument von etwa 5 bis 10 Seiten hübsch strukturiert und es selbst aus dynamischeren Jinja-Templates rendern lässt, fühlt sich der Start ziemlich zufriedenstellend an. Es gibt auch einen Build-Prozess für automatische Doku, und für eine einzelne GitHub-README ist es schon zu groß. Aber genau dann beginnt der Schmerz.
GitHub-Projektseiten-Dokumentation passt nicht so richtig, man ist unsicher, ob eine
.nojekyl-Datei nötig ist oder ob man noch einengh-pages-Branch braucht. Man weiß nicht, ob es ein Fehler in den Repository-Einstellungen ist oder ob Änderungen einfach nicht übernommen wurden, und nach ein paar Stunden mit GitHub Actions wird es irrational. Wenn man sich Read the Docs wieder ansieht, scheint es Sphinx zu wollen, also verbindet man Markdown mit Sphinx; der Build läuft, aber nach dem Deployment ist die Seitenbreite kaputt, lokal lässt sich das nicht reproduzieren, also liegt es vermutlich an den eingeblendeten Anzeigen im Community-Tier. Bei vielen Projekten funktioniert das gut, und ich habe es auch selbst schon gemacht, aber bis es läuft, ist es unglaublich kleinteilig und heikel. Am Ende ist Markdown gegen RST gar nicht das Thema; entscheidend ist, eine Kombination zu finden, die gut zu mittelgroßen Dokumentationsprojekten und statischem Hosting passt.Auch die Anleitung für automatisches Deployment ist gut gemacht: https://github.com/rust-lang/mdBook
Es scheint übersehen zu werden, dass der Autor im Kontext des Satzes seines eigenen Buchs spricht. Er behauptet nicht allgemein, rST sei besser als Markdown.
Im Allgemeinen ist die Einfachheit von Markdown der Grund für seine weite Verbreitung, aber das ist nicht der Anwendungsfall, über den der Autor spricht.
Es ist interessant, wie manche so reagieren, als wäre reST als Konkurrent zu Markdown entstanden. Tatsächlich ist es eher umgekehrt. reST ist eine Weiterentwicklung von StructuredText aus dem Jahr 2002, während Markdown 2004 erstmals veröffentlicht wurde.
Die Ziele beider Formate sind sehr ähnlich, und bei ganz grundlegendem Text lassen sich beide wie normaler Klartext lesen und schreiben. In dieser Zeit wollten plötzlich alle so etwas, und es entstanden mehrere Formate. Dass Markdown gewonnen hat, hat meiner Ansicht nach wenig damit zu tun, dass es „einfacher“ oder „lesbarer“ wäre. Bei Inhalten, die sich leicht mit reinem ASCII und Leerzeichen ausdrücken lassen, sind sie größtenteils austauschbar. Würde jemand sagen, das reST-Dokument im Beispiel sei ohne Parser unlesbarer Kauderwelsch? Ich sehe nicht recht, inwiefern eine Markdown-Variante dabei besser wäre; es ist eher ein historischer Zufall, dass sich eines stärker durchgesetzt hat, und beide sind für ihre Kernziele völlig ausreichend.
reST bietet bei Bedarf viele nützliche zusätzliche Formatierungsfunktionen, aber wenn man sie nicht braucht, sind sie Ballast. Ich habe ungefähr 2010, als ich mich bei GitHub registrierte, angefangen, GitHub-flavored Markdown zu verwenden, und wegen der Python-Dokumentation auch ein paar Mal reStructuredText benutzt. Letzteres hatte eine deutlich steilere Lernkurve, und danach hatte ich keinen Grund mehr, es zu verwenden.
Auch doppelte Backticks sind eine Syntax, die im Verhältnis zur tatsächlich benötigten Zeit übermäßig nervt.