Zum Inhalt springen
🛠️ToolsShed

Markdown TOC Generator

Erzeugt ein verlinktes Inhaltsverzeichnis aus Markdown-Überschriften.

Über dieses Tool

Ein Markdown-Inhaltsverzeichnis (TOC) ist eine Navigationsliste oben in einem Dokument, die Lesern hilft, schnell zu bestimmten Abschnitten zu springen. Dieser Generator extrahiert automatisch Überschriften aus Ihrer Markdown-Quelle und erstellt verlinkte Anker, die mit GitHub, GitLab und den meisten Markdown-Renderern kompatibel sind. Er beseitigt die mühsame manuelle Erstellung von TOC-Einträgen und stellt sicher, dass Links präzise bleiben, während Ihr Dokument weiterentwickelt wird.

Fügen Sie Ihren Markdown-Text ein und klicken Sie auf Generieren, um sofort ein formatiertes TOC mit funktionierenden Anker-Links zu erstellen. Das Tool bietet anpassbare Optionen: Kontrollieren Sie die maximale Überschriftentiefe (H1 bis H6), die einbezogen werden soll, und wählen Sie Ihren bevorzugten Aufzählungsstil (Bindestriche, Sternchen oder Pluszeichen). Doppelte Überschriften werden automatisch erkannt und mit Suffixen wie #heading-1, #heading-2 nummeriert, um Anker-Konflikte zu vermeiden.

Häufig gestellte Fragen

Code-Implementierung

import re

def heading_to_anchor(text: str) -> str:
    """Convert heading text to a GitHub-Flavored Markdown anchor."""
    anchor = text.lower()
    anchor = re.sub(r"[^\w\s-]", "", anchor)   # remove punctuation (keep letters, digits, -, _)
    anchor = re.sub(r"\s+", "-", anchor.strip())  # spaces → hyphens
    return anchor

def generate_toc(markdown: str, max_depth: int = 3, bullet: str = "-") -> str:
    lines = []
    seen: dict[str, int] = {}

    for line in markdown.splitlines():
        m = re.match(r"^(#{1,6})\s+(.*)", line)
        if not m:
            continue
        level = len(m.group(1))
        if level > max_depth:
            continue

        title  = m.group(2).strip()
        anchor = heading_to_anchor(title)

        # Deduplicate: second occurrence → anchor-1, third → anchor-2, ...
        count  = seen.get(anchor, 0)
        seen[anchor] = count + 1
        if count > 0:
            anchor = f"{anchor}-{count}"

        indent = "  " * (level - 1)
        lines.append(f"{indent}{bullet} [{title}](#{anchor})")

    return "\n".join(lines)


md = """# Getting Started
## Installation
### Prerequisites
### Install
## Configuration
## Usage
# Advanced
## Performance
## Security
"""

print(generate_toc(md, max_depth=3, bullet="-"))
# - [Getting Started](#getting-started)
#   - [Installation](#installation)
#     - [Prerequisites](#prerequisites)
#     - [Install](#install)
#   - [Configuration](#configuration)
#   - [Usage](#usage)
# - [Advanced](#advanced)
#   - [Performance](#performance)
#   - [Security](#security)

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.