feat: epub2md_merge.py – Gesamtdatei aus einer epub2md-Ausgabe

Fügt die Kapiteldateien in Lesereihenfolge (manifest.json) zu einer
Markdown-Datei mit dem Original-EPUB-Namen (.md) zusammen. Dabei werden:
- Links zwischen Kapiteln zu Sprunglinks in der Gesamtdatei,
- kollidierende Anker pro Kapitel umbenannt,
- Medienpfade relativ zum Ziel umgeschrieben,
- doppelte Fußnotendefinitionen entfernt,
- Code nie verändert.
Optionen -o, --toc, --no-frontmatter und --force; abschließender
Linkcheck.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-05 20:24:47 +02:00
commit 88888e5587

View file

@ -209,6 +209,38 @@ weil CommonMark keine `[^…]`-Syntax kennt.
- **Register:** Buchstabengruppen werden zu `##`-Überschriften, Untereinträge erhalten `– `. Interne
Registerlinks werden auf Kapiteldatei + Anker umgeschrieben. Seitenzahlen bleiben als Text sichtbar.
## Gesamtdatei erzeugen: `epub2md_merge.py`
Fügt die Kapiteldateien einer epub2md-Ausgabe in Lesereihenfolge (aus `manifest.json`) zu **einer**
Markdown-Datei zusammen. Die Datei heißt wie das Original-EPUB, aber mit der Endung `.md`.
```bash
python3 epub2md_merge.py output/programmierhandbuch
# → output/programmierhandbuch/<Original-Name>.md
python3 epub2md_merge.py output/programmierhandbuch -o buecher/handbuch.md --toc --force
```
| Option | Wirkung |
| --- | --- |
| `-o`, `--output DATEI.md` | anderer Zielort; Medienpfade werden relativ zum Ziel umgeschrieben |
| `--frontmatter` / `--no-frontmatter` | ein YAML-Kopf mit Buchmetadaten (`title`, `author`, `lang`, …) für Pandoc (Standard: an) |
| `--toc` | Inhaltsverzeichnis mit Sprunglinks auf die Kapitel einfügen |
| `--force` | bestehende Zieldatei überschreiben (sonst Abbruch mit Exit 1) |
Beim Zusammenfügen passiert Folgendes:
- Die Frontmatter der einzelnen Kapitel wird entfernt.
- Jedes Kapitel erhält einen Startanker (`<a id="003-kapitelname"></a>`).
- Links zwischen Kapiteln (`003-x.md#anker`) werden zu Sprunglinks in der Gesamtdatei.
- Anker, die in mehreren Kapiteln vorkommen (z. B. `Sec1` in jedem Kapitel eines Springer-Buchs), werden
ab dem zweiten Vorkommen in `c012-Sec1` umbenannt, samt aller Links darauf.
- Medienpfade (`../media/…`) werden auf den Ort der Gesamtdatei umgeschrieben.
- Fußnotendefinitionen, die in mehreren Kapiteln stehen, erscheinen nur einmal.
- Codeblöcke und Inline-Code werden nie verändert.
Am Ende werden alle Links der Gesamtdatei geprüft.
## Weiterverarbeitung mit Pandoc
```bash
@ -260,6 +292,7 @@ Verlustfreiheit behauptet (`lossless: false`).
```text
epub2md.py Einstiegspunkt
epub2md_merge.py Einstiegspunkt: Gesamtdatei aus einer Ausgabe erzeugen (epub2md/merge.py)
epub2md/
├── cli.py argparse, Exit-Codes
├── pipeline.py Ablaufsteuerung, Schreiben (atomar), Bericht/Manifest