Generieren Sie ein Inhaltsverzeichnis aus Markdown
Machen Sie aus Ihren Überschriften ein verlinktes Inhaltsverzeichnis zum Einfügen: Im Beispiel werden Project Guide, Installation und Usage nach Ebene eingerückt, und das zweite Requirements erhält den Anker requirements-1, damit beide Links funktionieren. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Verwandeln Sie ein Markdown-Dokument in ein übersichtliches, verlinktes Inhaltsverzeichnis, ohne Überschriften zu kopieren oder Anker von Hand zu berechnen. Der Generator erkennt ATX-Überschriften mit Rauten und unterstrichene Setext-Überschriften, ignoriert scheinbare Überschriften in abgegrenzten Codeblöcken und liefert sowohl einsetzbares Markdown als auch strukturierte Daten. Verschachtelte Überschriften werden passend eingerückt, wiederholte Titel erhalten unterschiedliche Anker. Die Verarbeitung ist deterministisch, benötigt kein Netzwerk und meldet verständlich, wenn das Dokument keine Überschriften enthält.
Markdown einfügen und eine fertige Gliederung erhalten
Geben Sie den vollständigen Markdown-Quelltext in das Textfeld ein. Der Generator durchsucht das Dokument in Leserichtung und erkennt ATX-Überschriften der Ebenen eins bis sechs, beispielsweise <code>## Installation</code>. Auch Setext-Überschriften werden erkannt: Dabei folgt auf eine Textzeile eine Reihe von Gleichheitszeichen für Ebene eins oder Bindestrichen für Ebene zwei.
Das Ergebnis enthält eine Zeichenfolge <code>toc</code>, die Sie direkt am Anfang einer README-Datei, Anleitung, Spezifikation oder eines Wissensdatenbankartikels einfügen können. Jeder Eintrag verwendet die übliche Markdown-Linksyntax. Seine Einrückung richtet sich nach dem Abstand zwischen der jeweiligen Ebene und der flachsten Überschrift im Dokument.
So bleibt die Hierarchie auch erhalten, wenn ein Ausschnitt erst auf Ebene zwei beginnt. Zusätzlich enthält die Antwort ein strukturiertes Array <code>headings</code> mit Ebene, sichtbarem Text und erzeugtem Anker jedes Eintrags, sodass Anwendungen eine eigene Navigation aufbauen können.
Nachvollziehen, wie Überschriftentext zum stabilen Link wird
Ein Inhaltsverzeichnis ist nur dann hilfreich, wenn jeder Link genau auf die Fragmentkennung seiner Überschrift verweist. Dieser Generator nutzt eine vorhersehbare, an GitHub angelehnte Umwandlung: Buchstaben werden kleingeschrieben, Leerzeichen durch Bindestriche ersetzt, die meisten Satzzeichen entfernt und Buchstaben sowie Ziffern aus anderen Sprachen beibehalten. Inline-Markdown wird aus der sichtbaren Bezeichnung und dem Anker entfernt.
Dadurch wird aus <code>**Erweiterte** Optionen</code> die lesbare Bezeichnung „Erweiterte Optionen“ mit dem Anker <code>erweiterte-optionen</code>. Links behalten ihren angezeigten Text statt der Ziel-URL. Kommt dieselbe bereinigte Überschrift mehrfach vor, erhält die erste den Basisanker, die zweite das Suffix <code>-1</code>; weitere Treffer werden fortlaufend nummeriert.
Überschriftenähnliche Zeilen innerhalb abgegrenzter Codeblöcke werden ignoriert. Leere Überschriften erscheinen nicht, da sie keine brauchbare Navigation ermöglichen.
Das Ergebnis in Dokumentationsabläufe einbinden
Im einfachsten Ablauf fügen Sie die Zeichenfolge <code>toc</code> unter dem Dokumenttitel ein und erzeugen sie nach jeder Änderung der Überschriften neu. In einer Automatisierung rufen Sie die Funktion nach dem Zusammenstellen der Dokumentation auf und vergleichen die zurückgegebene Zeichenfolge mit dem versionierten Inhaltsverzeichnis. Eine Abweichung kann während der Prüfung eine Aktualisierung anfordern, ohne dass ein vollständiger Markdown-Renderer erforderlich ist.
Generatoren statischer Websites können stattdessen die strukturierten Datensätze nutzen, um Seitenleisten, Seitenindizes oder mobile Navigation aufzubauen und dabei Reihenfolge sowie Verschachtelung der Quelle zu bewahren. Der Parser stellt keine Netzwerkanfragen, führt eingebettetes HTML nicht aus und verändert das übermittelte Markdown nicht. Er leitet lediglich Navigationsdaten ab.
Die Eingabe ist auf eine Million Zeichen begrenzt.
Anwendungsfälle
Den Index einer README-Datei aktuell halten
Erzeugen Sie die verlinkte Gliederung neu, wenn Abschnitte für eine Version ergänzt, umbenannt, verschoben oder verschachtelt werden.
Eine Navigation für Dokumentation erstellen
Nutzen Sie das strukturierte Überschriften-Array für eine Seitenleiste oder einen Index, ohne eine zweite Gliederung manuell zu pflegen.
Dokumentation in der kontinuierlichen Integration prüfen
Vergleichen Sie das erzeugte Ergebnis mit dem versionierten Inhaltsverzeichnis und markieren Sie veraltete Navigation bei der Codeprüfung.
Häufige Fragen
Welche Markdown-Überschriften werden unterstützt?
Unterstützt werden ATX-Überschriften von H1 bis H6 und Setext-Überschriften der Ebenen H1 oder H2. Scheinbare Überschriften in abgegrenzten Codeblöcken werden ignoriert.
Was geschieht bei wiederholten Überschriftennamen?
Die erste Überschrift nutzt den Basisanker. Weitere Überschriften mit demselben bereinigten Text erhalten numerische Suffixe wie -1 und -2.
Verändert der Generator mein Markdown?
Nein. Er liefert eine neue Inhaltsverzeichnis-Zeichenfolge und strukturierte Datensätze; der Quelltext wird nicht umgeschrieben.
Wie entstehen die Ankernamen?
Im GitHub-Stil: Buchstaben werden kleingeschrieben, Leerzeichen zu Bindestrichen und fast alle Satzzeichen entfernt, während Buchstaben und Ziffern anderer Sprachen erhalten bleiben. Aus der Überschrift Advanced **options** wird der Anker advanced-options.
Werden Überschriften in Codeblöcken berücksichtigt?
Nein. Zeilen, die in einem Codeblock wie Überschriften aussehen, werden ignoriert, was bei Anleitungen zu Markdown wichtig ist. Leere Überschriften entfallen ebenfalls, und ein Dokument ganz ohne Überschrift ergibt eine klare Fehlermeldung statt eines leeren Verzeichnisses.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev2/markdown-toc-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"}'const res = await fetch("https://api.kit.forhosting.com/dev2/markdown-toc-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/markdown-toc-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/markdown-toc-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"# Project Guide\\n\\n## Installation\\n\\n### Requirements\\n\\n## Usage"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/markdown-toc-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.markdown_toc_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_chars | 1000000 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Das Ergebnis in Dokumentationsabläufe einbinden
Ein Dokument mit Absätzen, Listen, Code oder Tabellen, aber ohne gültige Überschrift, erzeugt einen Fehler <code>invalid_input</code> statt eines leeren Inhaltsverzeichnisses.
Technische Fragen
Was geschieht, wenn das Dokument keine Überschriften enthält?
Die Anfrage gibt einen Fehler invalid_input zurück, der erklärt, dass keine Markdown-Überschriften gefunden wurden.
Was kostet eine API-Anfrage?
Jede API-Anfrage kostet $0.002. Die Browserversion kann dieselbe deterministische Logik lokal ausführen.