Markdown

Aus besserwiki.de
Markdown
Markdown-mark.svg
Dateinamen-Erweiterungen .md, .markdown
Internet-Medientyp Text/Markdown
Einheitlicher Typbezeichner (UTI) net.daringfireball.markdown
Entwickelt von John Gruber und Aaron Swartz
Erste Veröffentlichung 19. März 2004 (vor 18 Jahren)
Letzte Veröffentlichung
1.0.1
Dezember 17, 2004 (vor 17 Jahren)
Typ des Formats Offenes Dateiformat
Erweitert auf pandoc, MultiMarkdown, Markdown Extra, CommonMark, RMarkdown
Website daringfireball.net/projects/markdown/

Markdown ist eine leichtgewichtige Auszeichnungssprache zur Erstellung von formatiertem Text mit einem einfachen Texteditor. John Gruber und Aaron Swartz entwickelten Markdown im Jahr 2004 als eine Auszeichnungssprache, die in ihrer Quellcodeform für menschliche Leser ansprechend ist. Markdown wird häufig in Blogs, Instant Messaging, Online-Foren, Software für die Zusammenarbeit, Dokumentationsseiten und Readme-Dateien verwendet.

Die ursprüngliche Beschreibung von Markdown enthielt Unklarheiten und warf unbeantwortete Fragen auf, was dazu führte, dass Implementierungen sowohl absichtlich als auch versehentlich von der ursprünglichen Version abwichen. Dies wurde 2014 behoben, als langjährige Markdown-Mitwirkende CommonMark veröffentlichten, eine eindeutige Spezifikation und Testsuite für Markdown.

Eine Markdown-Konvertierungssoftware wandelt Text in gültiges und W3C-konformes XHTML um. Die Referenzimplementierung in Perl steht unter einer BSD-artigen Lizenz. Inzwischen sind Implementierungen in den gängigsten Programmiersprachen wie PHP, Python oder JavaScript sowie R verfügbar.

Geschichte

Markdown wurde von bereits existierenden Konventionen zur Markierung von einfachem Text in E-Mails und Usenet-Posts inspiriert, wie z. B. den früheren Auszeichnungssprachen setext (ca. 1992), Textile (ca. 2002) und reStructuredText (ca. 2002).

Im Jahr 2002 schuf Aaron Swartz atx und bezeichnete es als "das wahre strukturierte Textformat". Swartz und Gruber schufen dann 2004 gemeinsam die Sprache Markdown mit dem Ziel, "ein leicht zu lesendes und leicht zu schreibendes einfaches Textformat zu verwenden und es optional in strukturell gültiges XHTML (oder HTML) zu konvertieren".

Das Hauptziel war die Lesbarkeit, d.h. die Sprache sollte so lesbar sein, wie sie ist, ohne dass es so aussieht, als ob sie mit Tags oder Formatierungsanweisungen versehen wurde, im Gegensatz zu Text, der mit "schwereren" Auszeichnungssprachen formatiert wurde, wie z.B. Rich Text Format (RTF), HTML oder sogar Wikitext (die alle offensichtliche Inline-Tags und Formatierungsanweisungen haben, die das Lesen des Textes für Menschen erschweren können).

Gruber hat ein Perl-Skript, Markdown.pl, geschrieben, das markierte Texteingaben in gültiges, wohlgeformtes XHTML oder HTML umwandelt und spitze Klammern (<, >) und Ampersands (&) durch ihre entsprechenden Zeichenreferenzen ersetzt. Es kann die Rolle eines eigenständigen Skripts, eines Plugins für Blosxom oder Movable Type oder eines Textfilters für BBEdit übernehmen.

Aufschwung und Divergenz

Als die Popularität von Markdown schnell zunahm, erschienen viele Markdown-Implementierungen, die vor allem durch den Bedarf an zusätzlichen Funktionen wie Tabellen, Fußnoten, Definitionslisten und Markdown innerhalb von HTML-Blöcken angetrieben wurden.

Das Verhalten einiger dieser Implementierungen wich von der Referenzimplementierung ab, da Markdown nur durch eine informelle Spezifikation und eine Perl-Implementierung für die Umwandlung in HTML gekennzeichnet war.

Gleichzeitig war eine Reihe von Unklarheiten in der informellen Spezifikation aufgefallen. Diese Probleme gaben den Anstoß zur Entwicklung von Tools wie Babelmark, mit denen die Ausgabe verschiedener Implementierungen verglichen werden kann, sowie zu den Bemühungen einiger Entwickler von Markdown-Parsern um eine Standardisierung. Gruber vertritt jedoch die Ansicht, dass eine vollständige Standardisierung ein Fehler wäre: "Verschiedene Websites (und Menschen) haben unterschiedliche Bedürfnisse. Keine einzige Syntax würde alle glücklich machen."

Gruber vermied die Verwendung geschweifter Klammern in Markdown, um sie inoffiziell für implementierungsspezifische Erweiterungen zu reservieren.

Standardisierung

CommonMark
Markdown-mark.svg
Dateinamen-Erweiterungen .md, .markdown
Internet-Medientyp text/markdown; variant=CommonMark
Einheitlicher Typbezeichner (UTI) unsicher
UTI-Anpassung public.plain-text
Entwickelt von John MacFarlane, open source
Erste Veröffentlichung Oktober 25, 2014 (vor 7 Jahren)
Letzte Veröffentlichung
0.30
Juni 19, 2021 (vor 14 Monaten)
Typ des Formats Offenes Dateiformat
Erweitert von Markdown
Erweitert auf GitHub Flavored Markdown
Website spec.commonmark.org

Seit 2012 hat eine Gruppe von Personen, darunter Jeff Atwood und John MacFarlane, etwas ins Leben gerufen, das Atwood als Standardisierungsbemühungen bezeichnete. Eine Community-Website soll nun "verschiedene Tools und Ressourcen dokumentieren, die den Autoren und Entwicklern von Dokumenten sowie den Implementierern der verschiedenen Markdown-Implementierungen zur Verfügung stehen". Im September 2014 erhob Gruber Einwände gegen die Verwendung von "Markdown" im Namen dieser Bemühungen und sie wurden in CommonMark umbenannt. CommonMark.org veröffentlichte mehrere Versionen einer Spezifikation, einer Referenzimplementierung und einer Test-Suite und "[plant] die Ankündigung einer endgültigen 1.0-Spezifikation und Test-Suite im Jahr 2019." Seitdem wurde keine 1.0-Spezifikation veröffentlicht, da wichtige Probleme noch immer ungelöst sind. Nichtsdestotrotz haben die folgenden Websites und Projekte CommonMark übernommen: Discourse, GitHub, GitLab, Reddit, Qt, Stack Exchange (Stack Overflow) und Swift.

Im März 2016 wurden zwei relevante informative Internet RFCs veröffentlicht:

  • Mit RFC 7763 wurde der MIME-Typ text/markdown eingeführt.
  • In RFC 7764 wurden unter anderem die Varianten MultiMarkdown, GitHub Flavored Markdown (GFM), Pandoc und Markdown Extra diskutiert und registriert.

Varianten

Websites wie GitHub, Bitbucket, Reddit, Diaspora, Stack Exchange, OpenStreetMap und SourceForge verwenden Varianten von Markdown, um Diskussionen zwischen Benutzern zu erleichtern. Markdown wird auch von einer Vielzahl von Anwendungen und Diensten unterstützt, z. B. Microsoft Teams Chat und Discord-Nachrichten.

Je nach Implementierung werden grundlegende Inline-HTML-Tags unterstützt. Kursiver Text kann durch _Unterstriche_ und/oder *Einzelasterisken* implementiert werden.

GitHub Flavored Markdown

GitHub verwendet bereits seit 2009 eine eigene Variante von Markdown, die zusätzliche Formatierungen wie Tabellen und die Verschachtelung von Blockinhalten in Listenelementen sowie GitHub-spezifische Funktionen wie die automatische Verlinkung von Verweisen auf Commits, Issues, Benutzernamen usw. unterstützt. Im Jahr 2017 veröffentlichte GitHub eine formale Spezifikation seines GitHub Flavored Markdown (GFM), das auf CommonMark basiert. Es handelt sich um eine strikte Obermenge von CommonMark, die dessen Spezifikation genau befolgt, mit Ausnahme von Tabellen, Durchstreichen, Autolinks und Aufgabenlisten, die GFM als Erweiterungen hinzufügt. GitHub änderte auch den Parser, der auf ihren Websites verwendet wird, entsprechend, was die Änderung einiger Dokumente erforderte. Zum Beispiel verlangt GFM nun, dass das Rautensymbol, das eine Überschrift erzeugt, durch ein Leerzeichen vom Überschriftstext getrennt wird.

Markdown Extra

Markdown Extra ist eine leichtgewichtige Auszeichnungssprache, die auf Markdown basiert und in PHP (ursprünglich), Python und Ruby implementiert ist. Sie bietet zusätzliche Funktionen, die in der normalen Markdown-Syntax nicht verfügbar sind. Markdown Extra wird von einigen Content-Management-Systemen wie z. B. Drupal und TYPO3 unterstützt.

Markdown Extra fügt Markdown die folgenden Funktionen hinzu:

  • Markdown-Auszeichnung innerhalb von HTML-Blöcken
  • Elemente mit id/class-Attribut
  • "Eingezäunte Codeblöcke", die sich über mehrere Codezeilen erstrecken
  • Tabellen
  • Definitionslisten
  • Fußnoten
  • Abkürzungen

LiaScript

LiaScript ist ein Markdown-Dialekt, der für die Erstellung interaktiver Bildungsinhalte entwickelt wurde. Er ist in Elm und Typescript implementiert und fügt zusätzliche Syntaxelemente hinzu, um Funktionen wie:

  • Animationen
  • Automatische Sprachausgabe
  • Mathematische Formeln (unter Verwendung von KaTeX)
  • ASCII-Kunstdiagramme
  • Verschiedene Arten von Quiz und Umfragen
  • JavaScript wird von Haus aus unterstützt und kann an verschiedene Elemente angehängt werden, so dass Codefragmente ausführbar und editierbar gemacht werden können

Auszeichnungsbeispiele

Für die Auszeichnung von Text verwendet Markdown vor allem Satzzeichen und gestattet in einigen Fällen mehrere gleichwertige Methoden. Zeichen, die für gewöhnlich als Formatbefehle verstanden werden, können mit einem umgekehrten Schrägstrich (Backslash \) maskiert werden.

Autoren können bei Bedarf für komplexere Auszeichnungen XHTML-Blockelemente verwenden. Diese Elemente werden von der Konvertierungssoftware ohne Änderung in das Zieldokument übernommen. Dadurch ist es möglich, Bereiche des Dokuments in gewöhnlichem XHTML zu formatieren.

Textgestaltung
Ausgangsform Zielform
Normaler Text wird so dargestellt wie eingegeben.

Eine Leerzeile erzeugt einen Absatz.
Normaler Text wird so dargestellt wie eingegeben.

Eine Leerzeile erzeugt einen Absatz.

Für alle Zeichen, die eine Formatierung bewirken, kann die Wirkung durch einen Backslash aufgehoben werden: \* \' \_ 2\. – Der Backslash selbst wird durch \\ eingefügt. Für alle Zeichen, die eine Formatierung bewirken, kann die Wirkung durch einen Backslash aufgehoben werden: * ' _ 2. – Der Backslash selbst wird durch \ eingefügt.
Zwei oder mehr Leerzeichen am Ende der Zeile  

erzeugen einen Zeilenumbruch.

Zwei oder mehr Leerzeichen am Ende der Zeile
erzeugen einen Zeilenumbruch.
*Kursiv*, **Fett** und ***Fett kursiv*** bzw.

_Kursiv_, __Fett__ und ___Fett kursiv___

Kursiv, Fett und Fett kursiv bzw.

Kursiv, Fett und Fett kursiv

Markiert Text als `Inline-Quelltext` Markiert Text als Inline-Quelltext
Ein normaler Absatz

    Ein Code-Block
    durch Einrückung
    mit vier Leerzeichen
Ein normaler Absatz

    Ein Code-Block
    durch Einrückung
    mit vier Leerzeichen

* Ein Punkt in einer ungeordneten Liste
* Ein weiterer Punkt in einer ungeordneten Liste
    * Ein Unterpunkt, um vier Leerzeichen eingerückt
* Statt * funktionieren auch + oder -
  • Ein Punkt in einer ungeordneten Liste
  • Ein weiterer Punkt in einer ungeordneten Liste
    • Ein Unterpunkt, um vier Leerzeichen eingerückt
  • Statt * funktionieren auch + oder -
1. Ein Punkt in einer geordneten Liste
2. Ein weiterer Punkt; bei der Eingabe muss nicht auf irgendeine Reihenfolge geachtet werden, sondern nur darauf, dass es beliebige Ziffern sind
1. Noch ein Punkt, der zeigt, dass auch die mehrfache Angabe derselben Ziffer möglich ist
  1. Ein Punkt in einer geordneten Liste
  2. Ein weiterer Punkt; bei der Eingabe muss nicht auf irgendeine Reihenfolge geachtet werden, sondern nur darauf, dass es beliebige Ziffern sind
  3. Noch ein Punkt, der zeigt, dass auch die mehrfache Angabe derselben Ziffer möglich ist
HTML-Überschriften werden erzeugt, indem man die Zeile mit Doppelkreuzen beginnt – ihre Anzahl gibt die Ebene der gewünschten Überschrift an.
# Überschrift in Ebene 1
#### Überschrift in Ebene 4
Überschrift in Ebene 1
Überschrift in Ebene 4
Für die ersten zwei Ebenen ist auch eine alternative Schreibweise möglich:
Überschrift in Ebene 1
======================
Überschrift in Ebene 2
----------------------
Überschrift in Ebene 1
Überschrift in Ebene 2
> Dieses Zitat wird in ein HTML-Blockquote-Element gepackt.

Dieses Zitat wird in ein HTML-Blockquote-Element gepackt.

Horizontale Linien werden durch drei oder mehr Bindestriche, Unterstriche oder Sternchen in einer Zeile erzeugt.
Horizontale Linie
---
[Beschriftung des Hyperlinks](https://de.wikipedia.org/ "Titel, der beim Überfahren mit der Maus angezeigt wird") Beschriftung des Hyperlinks
allgemeine Syntax:

![Alternativtext](Bild-URL "Bildtitel hier")

konkretes Beispiel:

[nur ein Beispiel](https://commons.wikimedia.org/wiki/File:Example_de.jpg "Beispielbild") Bindet ein Bild von der Quelle Bild-URL ein.

nur ein Beispiel

Implementierungen

Implementierungen von Markdown gibt es für mehr als ein Dutzend Programmiersprachen; darüber hinaus unterstützen viele Plattformen und Frameworks Markdown. So gibt es zum Beispiel Markdown-Plugins für jede größere Blogging-Plattform.

Markdown ist zwar eine minimale Auszeichnungssprache und wird mit einem normalen Texteditor gelesen und bearbeitet, es gibt aber auch speziell entwickelte Editoren, die die Dateien mit Stilen versehen und für alle wichtigen Plattformen verfügbar sind. Viele allgemeine Text- und Code-Editoren haben Syntax-Hervorhebungs-Plugins für Markdown integriert oder können optional heruntergeladen werden. Die Editoren können ein Vorschaufenster nebeneinander anzeigen oder den Code direkt in einer WYSIWYG-Ansicht darstellen.

  • JotterPad: ein Online-WYSIWYG-Editor, der Markdown und Fountain unterstützt
  • Doxygen: ein Generator für Quellcode-Dokumentation, der Markdown mit zusätzlichen Funktionen unterstützt
  • RStudio: eine IDE für R. Sie bietet eine C++-Wrapper-Funktion für eine Markdown-Variante namens sundown
  • GitHub Flavored Markdown (GFM) ignoriert Unterstriche in Wörtern und bietet Syntaxhervorhebung, Aufgabenlisten und Tabellen
  • RMarkdown
  • Nextcloud Notes: die Standard-App für Notizen auf der Nextcloud-Plattform unterstützt die Formatierung mit Markdown
  • Joplin: eine Anwendung zur Erstellung von Notizen, die die Markdown-Formatierung unterstützt
  • Simplenote
  • Obsidian.md