Thema: Formatierte Textdatei in jedem Editor erstellen Zielgruppe: IT-Arbeiter auf diversen Betriebssystemen Motivation: Überall Gedanken festhalten und formatierte Dokumente erstellen
Prolog
Es geht um die Wucht der Einfachheit.
Für Personen mit wenig oder keinem technischen Verständnis, sind einfache Textdateien mit Strukturen nicht schnell zu erfassen oder haben wenig Aussagekraft. Hier hilft Markdown, um ein formatiertes Dokument für die Anwender herzustellen, und zwar aus jedem Editor, jeder Textverarbeitung und jeder Office-Suite.
Kleine Editoren, wie unter anderem Geany, können die Syntax von Markdown erkennen.
Es reichen wenige Zeichen für die Syntax und die Dateiendung .md
oder auch die Endungen .mkd
oder .markdown
aus.
Markdown ist eine Sprache
Es soll die einfachste Auszeichnungssprache sein, um formatierte Dokumente zu erstellen. Zu mindestens sind Dokumente auch ohne Konvertierung lesbar.
Syntax
Syntax-Zeichen
Diese wenigen Zeichen reichen aus, für ein komplett formatiertes Dokument.
# * 1. > - [] () | ` : Tabulator Leerzeichen
Beispiele
Eingabe | Ausgabe |
---|---|
# Überschrift | Überschrift |
## Überschrift 2 | Überschrift 2 |
#### Überschrift 4 | Überschrift 4 |
*Kursiv* | Kursiv |
**Fett** | Fett |
> Zitat |
|
1. Erstens |
|
* Eintrag a |
|
Hier `inline code` | Hier inline code |
Horizontale Linie
| Horizontale Linie |
[Link](http://ro-kom.de) | Link |
 | ![]() |
Tabelle| A | B | C | | Tabelle![]() |
Weitere Formatierungen
Das war nur eine kurze Übersicht. Weitere Formatierungen, wenn überhaupt gewünscht, sind auch möglich.
- Codeblock, auch als sichtbaren Kommentar
- Nicht angezeigter Kommentar
- Ausrichtung des Textes in den Tabellen, wie links- und rechtsbündig sowie zentriert
- Mit
css
undhtml
sind unter anderem auch farbige Komponenten möglich
Also, um Markdown-Dokumente zu formatieren, sind fast keine Grenzen gesetzt.
Programme
Selbstverständlich gibt es auch direkt Markdown-Editoren für Linux, Windows und macOS. Ich selbst nutzte eine Zeit lang „Ghostwriter“, auch für jedes Betriebssystem vorhanden. Doch es gibt mehrere Markdown-Editoren und bestimmt hübscherer.

Momentan nehme ich hauptsächlich Marker, manchmal Geany oder Retext, weil einfacher für mich schneller bedeutet.


Nummerierung der Überschriften und Inhaltsverzeichnis
In einfachen Markdown-Editoren gibt es keine automatische Nummerierung der Überschriften und kein toc-Modul. Dafür habe ich mir ein Bash-Script gebastelt, nicht schön, aber funktioniert.
Funktionen des Bash-Script
- Arbeitet mehrere Markdown-Dateien in einem Stapel ab
- Fragt nach dem Verzeichnis der Markdown-Dateien
- Erstellt jeweils eine Backup-Datei
- H1, also der Titel wird von der Nummerierung ausgeschlossen
- Ab H2 bis H6 wird nummeriert, beginnend mit der Ziffer 1
- von der Nummerierung ebenfalls ausgeschlossen ist die Überschrift „Inhaltsverzeichnis“
Ansonsten ist es dreckige Programmierung > quick and dirty, aber jeder darf es bereinigen und optimieren, eine Rückmeldung wäre wünschenswert :-)
Bash-Script
#!/bin/bash
# Pfad abfragen
read -p "Verzeichnis mit Markdown-Dateien: " DIR
if [[ ! -d "$DIR" ]]; then
echo "Verzeichnis existiert nicht."
exit 1
fi
for file in "$DIR"/*.md; do
# Nur ein Backup pro Datei erstellen (.bak), falls noch nicht existiert
if [[ ! -f "$file.bak" ]]; then
cp "$file" "$file.bak"
fi
# ============================
# Teil 1: Überschriften nummerieren
# ============================
awk '
BEGIN {
for (i = 2; i <= 6; i++) num[i] = 0;
}
{
if ($0 ~ /^# /) {
# H1 nicht nummerieren
print;
next;
}
# H2–H6 nummerieren
for (i = 6; i >= 2; i--) {
prefix = sprintf("%*s", i, ""); sub(/ /, "#", prefix) # schneller: generiere richtige Regex
regex = "^" substr("######",1,i) " ";
if ($0 ~ regex) {
num[i]++;
for (k = i + 1; k <= 6; k++) num[k] = 0;
numbering=num[2];
for (k = 3; k <= i; k++) numbering=numbering "." num[k];
sub(/^#+ +/, "&" numbering " ");
print;
next;
}
}
print;
}
' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
# ============================
# Teil 2: Inhaltsverzeichnis einfügen
# ============================
TOC=$(awk '
/^##+ / {
hlevel = length($1) - 1 # Anzahl # - 1
line = $0
sub(/^#+ +/, "", line) # führende # entfernen
printf "%*s- %s\n", hlevel * 2, "", line
}
' "$file")
if [[ -n "$TOC" ]]; then
awk -v toc="$TOC" '
BEGIN { inserted=0 }
/^# / && inserted==0 {
print
print ""
print "## Inhaltsverzeichnis"
print ""
print toc
print ""
inserted=1
next
}
{ print }
' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
fi
echo "Bearbeitet: $file (Backup: $file.bak)"
done
Reguläre Ausdrücke
Sie vereinfachen die Erstellung von Markdown-Dokumenten.
Hier eine kleine Liste von Ausdrücken, die ich nutze.
Es gibt einen Unterschied zwischen den flexiblen „Nicht-POSIX-Regulären Ausdrücken“ und den strengen „POSIX-konformen regulären Ausdrücken“.
Kein Posix = \w
Posix = [:word:]
Wobei beide Ausdrücke nicht komplett identisch sind.
Anker-Zeichen
^ = Caret: Zeilenanfang; Ersetze ^kkk durch \t* kkk
$ = Dollar: Zeilenende; Ersetze $ durch "Ende"
Meta-Zeichen
. = Punkt: Jedes Zeichen
| = Pipe: Alternativen; Mann|Frau
\ = Backslash: Nur in Verbindung mit weiteren Zeichen; \t = Tab
Escape-Zeichen
\t = Tabulator
\n = Zeilenumbruch; bis zur vererbten Zeile; Beispiel Listenpunkt
\r = Wagenrücklauf; bis direkt an Zeilenanfang
\v = Erzeugt Leerzeile; Cursor bleibt in selbiger Spalte
\s = Whitespace; Baum\sKrone ~ Baum \t Krone und Baum \n Krone
Alpha-Zeichen
[axz] = Findet alles mit a oder x oder z
[^axz] = Findet alles außer mit a oder x oder z
Numerik-Zeichen
\d = Jede Ziffer; Ersetze \d (alle Ziffern) durch das Wort digital
\D = Jedes Zeichen außer Ziffern
Export
Export ist auch als Textdatei .txt
möglich. Ebenfalls möglich als .xml
, .pdf
und .html
. Doch das ist unterschiedlich zwischen den Editoren und den vorhandenen PDF-Drucker.
Epilog
Manchmal steht man wie vor einer Wand, dieser Beitrag soll den Wanddurchbruch ermöglichen, zumindest die Umgehung der Wand.
Eigentum
Die Bilder sind allermeist im Quellformat hochauflösende Vektorgrafiken und meine Schöpfungen sowie mein Eigentum. Wenn nicht anders gekennzeichnet, sind die Bilder, Grafiken und Websites-Screenshots von mir erstellt und mein Eigentum.