- QA2-09: Formeln in HTML-Tabellen als MathML/Formelbild statt $…$; Inline-Noten
dort als HTML-Verweis (Markdown wird in HTML-Blöcken nicht gerendert)
- QA2-10: PDF-Weg Markdown → HTML → PDF in README, Bedienungsanleitung und
Buch-README. Beim direkten Weg Markdown → LaTeX verwirft Pandoc HTML-Tabellen
und <a id>-Ziele. Geprüft: C-Buch 405 Seiten, 34 Tabellen, 728/755 Links.
- QA2-11: Hinweis code-language-hint bei einsprachigen Büchern
- QA2-12: --strict bricht bei nicht dekodierbarem XHTML ab (Exit 3);
Hilfetext präzisiert
- QA2-13: verdächtig große Medien werden übersprungen (Fehler media-skipped,
Platzhalter) statt die ganze Konvertierung abzubrechen
- QA2-14: Formelklasse am <img> selbst wird erkannt
- QA2-15: wiederholte Diagnosen werden gezählt (count, ×n); MathML in
HTML-Tabellen zählt im Formelbericht mit
- QA2-16: Unicode-Buchstaben in Ankernamen bleiben erhalten
- QA2-17: keine leeren Links (#) auf den eigenen Kapitelanfang; keine
namespaced Attribute (epub:type → type=) in HTML-Tabellen
- QA2-18: nicht definierte Entitäten werden gemeldet (undefined-entity)
- QA2-19: Bild-Platzhalter ohne Kursivschrift (benachbarte ergaben **)
Regressionstests: tests/test_qa2_open.py (11 Tests, vorher alle rot).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ein Absatz "---" wurde zur Trennlinie, "===" bzw. "---" nach einem
Zeilenumbruch machte die vorige Zeile zur Setext-Überschrift. Solche
Zeilen erhalten jetzt einen Backslash.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--report OUTPUT/manifest.json ersetzte das Manifest stillschweigend durch
den Bericht. Ein nicht beschreibbares --report-Ziel endete nach bereits
geschriebener Ausgabe mit Exit 4 ("Interner Fehler"). Jetzt: Abbruch mit
Exit 1 vor dem Schreiben bzw. verständliche Meldung mit Exit 1;
Überschreibverhalten in der README dokumentiert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
render_chapter reduzierte mehrfache Leerzeilen im gesamten Kapiteltext,
auch innerhalb von Codeblöcken (z. B. zwei Leerzeilen zwischen
Python-Funktionen nach PEP 8). Im Python-Beispielbuch waren 54 von 746
Listings nicht mehr zeichengetreu. Die Normalisierung gilt jetzt nur
außerhalb von Fences.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eingebettete SVGs in komplexen Tabellen wurden als Markdown-Bild
 in den HTML-Block geschrieben und daher nicht angezeigt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mit --footnotes end-of-book wurde ein Verweis innerhalb einer als HTML
erhaltenen Tabelle als Markdown-Link [n](…) geschrieben. In einem
HTML-Block rendert Markdown nicht; der Verweis erschien als Rohtext.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wird dieselbe Anmerkung aus einer als HTML erhaltenen Tabelle und aus
dem Fließtext referenziert, entstand nur eine [^fn-…]-Definition; der
HTML-Verweis <a href="#fn-…"> lief ins Leere. Die Definition erhält in
diesem Fall zusätzlich den Anker <a id="fn-…">.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bei Anmerkungen im Anker-Stil (--format commonmark, --footnotes
end-of-book) wurde der Rücklink [↩] an die schließende Fence-Zeile
angehängt. Der Codeblock blieb dadurch offen und verschluckte den Rest
der Datei; epub2md_merge.py schrieb die Links darin nicht mehr um.
Beginnt oder endet eine Anmerkung mit einem Block (Code, Tabelle,
Liste, Formel), stehen Nummer bzw. Rücklinks jetzt in eigenem Absatz.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GFM trennt Tabellenzellen an jedem unmaskierten senkrechten Strich, auch
innerhalb von Code-Spans und Link-Zielen. Operator-Tabellen (|, ||, |=)
verloren dadurch Zellinhalte. Solche Tabellen werden jetzt wie andere
komplexe Tabellen als bereinigtes HTML mit Warnung ausgegeben.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bildband-EPUB (434 Bilder, 246 Figuren) konvertiert und validiert:
- 0 Warnungen, 968 Links/Bilder gültig
- alle 442 img-Elemente ausgegeben, 13/13 Bildunterschriften
- Gesamtdatei per Pandoc nach EPUB mit 433 Bildern
Kein Codefehler gefunden. README-Einschränkungen aktualisiert
(CSS-generierte Inhalte werden nicht übernommen).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
_convert (zuletzt 153 Zeilen) orchestriert jetzt nur noch die Teilschritte
_prepare_docs, _build_structure, _render (mit _report_wrap_markers und
_collect_remaining_media) und _assemble. Längste Funktion im Modul: 48 Zeilen.
Keine Verhaltensänderung: Die Ausgabe aller vier Beispielbücher (Standard
und end-of-book) ist bis auf Zeitstempel und Pfade byteidentisch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die erzeugte README.md nennt den Merge-Befehl mit dem tatsächlichen
Ausgabeordner und passende Pandoc-Befehle. Bei Büchern mit Formeln
enthalten sie --mathml, ergänzt um einen Hinweis zur Formeldarstellung.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zwei <span>-Geschwister mit unterschiedlichen Klassen, ohne Text
dazwischen und mit Großbuchstabe oder Ziffer rechts bekommen ein
trennendes Leerzeichen. Initialen (D|as) und Wortteile (Haupt|bahnhof)
bleiben unberührt. Im Mathebuch werden so 49 Stellen korrigiert, die
anderen drei Beispielbücher bleiben unverändert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fortsetzungszeilen werden wieder mit genau einem Leerzeichen zur
ursprünglichen Codezeile zusammengefügt. Im Python-Beispielbuch sind das
195 Stellen; danach lassen sich 247 statt 203 von 255 Python-Blöcken
parsen. Abschaltbar mit --keep-wrap-markers; der Bericht enthält
wrap_lines_joined pro Block und einen Hinweis pro Kapitel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Schritt-für-Schritt-Anleitung: Einrichtung, Umwandeln, Gesamtdatei,
Rezepte für Roman/Programmier-/Mathebuch/Fußnoten, Weiterverarbeitung
(Obsidian, Pandoc, RAG), erneutes Umwandeln, Warnungen und Fehlermeldungen
mit Abhilfe, FAQ und Optionsübersicht. README verlinkt sie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
- Komplexe Tabellen mit verlinkter id erzeugten den Anker zweimal
(<a id> und <table id>), also ungültiges HTML.
- Der Linkcheck übersah das äußere Ziel von Bild-Links
[](ziel) und startete Links an escapten \[-Klammern.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
convert_epub2md.sh und split-md-chapters.py sind durch epub2md.py ersetzt.
Überflüssige .gitignore-Einträge (buch.*, medien/) entfernt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Weist Blöcken ohne erkannte Sprache ein vom Nutzer gewähltes Label zu.
Aliase wie py werden normalisiert, unbekannte Werte ergeben Exit 1.
Erkannte Labels haben Vorrang; im Bericht detected_by "option"
(QA-Befund R1).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kapiteldateien über 30 000 Wörtern mit mindestens zwei ##-Unterabschnitten
erzeugen eine Warnung mit der passenden --chapter-level-Empfehlung
(QA-Befund R2, z. B. Roman mit Teilen als h1).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- F1: Nicht beschreibbares Ausgabeziel liefert eine verständliche
Meldung und Exit 1 statt "Interner Fehler" (Exit 4).
- F2: Anker von <dt id> stehen vor dem fett gesetzten Glossarbegriff
statt innerhalb der **-Marker.
- F3: Formeln als <img src="*.svg"> erscheinen im Bericht mit
origin "svg" statt "image".
Regressionstests für alle drei Befunde ergänzt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kommandozeilenwerkzeug, das DRM-freie EPUB-2/3-Dateien offline in
kapitelweise Markdown-Dateien umwandelt. Erzeugt werden außerdem Medien,
metadata.yaml, manifest.json, conversion-report.json und Diagnose-Dateien.
- Spine-basierte Kapitelbildung mit --chapter-level, epub:type-Abschnitten,
Fortsetzungsdateien und Erkennung von Layout-Überschriften
- Code mit exakter Einrückung, sicheren Fences und konservativer
Spracherkennung
- MathML->TeX (konservativ), TeX aus alt-Texten, SVG-/Bildformeln
bleiben Bilder
- Fußnoten-Modi end-of-chapter, end-of-book, inline und keep-links
- Interne Links/Anker werden umgeschrieben, Linkcheck über die Ausgabe
- Sicher: kein Entpacken, Schutz vor Path Traversal und XXE,
DRM-Erkennung, atomares Schreiben, --force nur für frühere Ausgaben
- 82 pytest-Tests mit synthetischen EPUBs und Invariantentests für Beispiele/
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>