- Dritte Lesart (GLM-4.6V über OpenRouter, ohne Nachdenken) muss zustimmen;
keine 2:1-Annahme; fehlender Schlusspunkt der dritten Lesart zählt nicht
- run in Paketen zu 50 mit Statuszeile, beide lokalen Modelle parallel,
GLM nur für Einige; nur die übernommene Lesart wird gegen das Bild geprüft
- Bild-Veto: Ähnlichkeit >= 0,65, Schriftgrößen-Prüfung abgeschaltet
- Antworten auf 800 Tokens begrenzt; Prompt-Version und Nachdenk-Einstellung
im Cache-Schlüssel; Verfahrensversion für Prüfergebnisse
- Behoben: Gleichungsnummern aus alten Lesarten ("(3.7)"), gleichzeitiges
Speichern zweier Engines, Absturz bei Formeln ohne aktuelle Lesart
- apply: deutsches Dezimalkomma 3{,}6; Review-Galerie zeigt aktuelle Lesarten
- tools/vergleich.py auf Konsens-Ablauf umgestellt
- Doku: README, BEDIENUNGSANLEITUNG, neues CHANGELOG
Gehrke-Brückenkurs: 942 von 1505 Formelbildern automatisch ersetzt (63 %),
62 von 62 von Hand geprüften korrekt; Pandoc/MathML 945 von 945.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
219 lines
9.2 KiB
Markdown
219 lines
9.2 KiB
Markdown
# Bedienungsanleitung formula_img2latex
|
||
|
||
Dieses Programm ersetzt Formelbilder in den Markdown-Dateien von epub2md und pdf2md durch echte
|
||
LaTeX-Formeln. Dadurch passen die Formeln beim Neubau als EPUB oder PDF in Größe und Schrift zum Text.
|
||
|
||
Es ersetzt eine Formel nur, wenn **drei unabhängige Bildmodelle dieselbe Formel lesen** (zwei lokale, eines
|
||
in der Cloud) und das gerenderte LaTeX dem Bild grob ähnelt. Bei Zweifeln fragt es dich in einer
|
||
Review-Seite im Browser. Ohne deine Zustimmung bleibt die Formel ein Bild.
|
||
|
||
„Dieselbe Formel“ heißt: jedes Zeichen stimmt und steht an der richtigen Stelle. Abstände, Pfeillängen,
|
||
Schriftgröße, kursiv/aufrecht und Fettdruck dürfen abweichen.
|
||
|
||
---
|
||
|
||
## 1. Einrichtung (einmalig)
|
||
|
||
```bash
|
||
sudo apt install texlive-latex-extra texlive-fonts-extra texlive-science pandoc dvipng
|
||
cd ~/Python_Programs/formula_img2latex
|
||
pip install -r requirements.txt
|
||
python3 formula_img2latex.py --version
|
||
```
|
||
|
||
### Die beiden lokalen Bildmodelle starten
|
||
|
||
Zwei Vision-Sprachmodelle lesen jede Formel, je eines pro Grafikkarte (je ~18–21 GB). In zwei Terminals:
|
||
|
||
```bash
|
||
# Modell A: Qwen3-VL auf GPU 1, Port 8011
|
||
M=~/endeavour_home/lm_studio/models/lmstudio-community/Qwen3-VL-30B-A3B-Instruct-GGUF
|
||
CUDA_VISIBLE_DEVICES=1 ~/.local/bin/llama-server \
|
||
-m $M/Qwen3-VL-30B-A3B-Instruct-Q4_K_M.gguf --mmproj $M/mmproj-Qwen3-VL-30B-A3B-Instruct-F16.gguf \
|
||
--host 127.0.0.1 --port 8011 -ngl 99 -c 16384 --parallel 4
|
||
|
||
# Modell B: Gemma 4 auf GPU 2, Port 8012
|
||
M=~/nvme2n1p7_home/huggingface/models/gemma4
|
||
CUDA_VISIBLE_DEVICES=2 ~/.local/bin/llama-server \
|
||
-m $M/gemma-4-26B-A4B-it-Q4_0.gguf --mmproj $M/mmproj-gemma-4-26B-A4B-it-BF16.gguf \
|
||
--host 127.0.0.1 --port 8012 -ngl 99 -c 16384 --parallel 4
|
||
```
|
||
|
||
GPU 2 ist währenddessen für Chatterbox-TTS belegt. Beenden mit Strg+C in beiden Terminals.
|
||
|
||
### Dritte Lesart aus der Cloud
|
||
|
||
Die Bestätigung kommt von **GLM-4.6V** über OpenRouter (andere Modellfamilie als Qwen und Gemma). Dafür
|
||
muss `OPENROUTER_API_KEY` gesetzt sein. GLM liest nur die Formeln, bei denen Qwen und Gemma schon einig
|
||
sind. Beim Gehrke-Brückenkurs (1505 Formelbilder) waren das 967 Anfragen für zusammen etwa 0,15–0,20 $.
|
||
Ohne Cloud (`--no-cloud`) wird nichts automatisch ersetzt, alles Einige landet im Review.
|
||
|
||
---
|
||
|
||
## 2. Ein Buch bearbeiten
|
||
|
||
### Schritt 1: Buch wie gewohnt umwandeln
|
||
|
||
```bash
|
||
cd ~/Python_Programs/epub2md
|
||
python3 epub2md.py buch.epub output/buch
|
||
```
|
||
|
||
Bei PDFs mit pdf2md immer `--images` (oder `--epub`) angeben, sonst gibt es keine Formelbilder.
|
||
|
||
### Schritt 2: Formeln erkennen und prüfen
|
||
|
||
```bash
|
||
cd ~/Python_Programs/formula_img2latex
|
||
python3 formula_img2latex.py run ~/Python_Programs/epub2md/output/buch
|
||
```
|
||
|
||
Bei pdf2md zusätzlich die Original-PDF angeben. Dann schneidet das Programm jede Formel scharf aus dem PDF:
|
||
|
||
```bash
|
||
python3 formula_img2latex.py run Output/buch.md --pdf buch.pdf
|
||
```
|
||
|
||
Das Programm arbeitet in Paketen zu 50 Formeln und meldet nach jedem Paket den Stand:
|
||
|
||
```text
|
||
100/1505 verarbeitet: automatisch ersetzt 68 (68%), Review 28, bleibt Bild/keine Formel 4
|
||
```
|
||
|
||
Am Ende steht eine Übersicht je Status, beim Gehrke-Brückenkurs zum Beispiel:
|
||
|
||
```text
|
||
auto_accepted 942 ← drei Modelle einig, wird ersetzt
|
||
needs_review 478 ← bitte im Browser ansehen
|
||
not_formula 93 ← laut Modellen keine Formel
|
||
pending 539 ← Abbildungen/Symbole, nicht geprüft
|
||
```
|
||
|
||
Dauer: etwa 5 Minuten je 50 Formeln, ein Buch mit 1500 Formelbildern also rund 2,5 Stunden.
|
||
Abbrechen (Strg+C) und erneut starten ist kein Problem: Bereits gelesene Formeln werden nicht noch einmal
|
||
gefragt, der Lauf setzt fort. `--chunk 100` ändert die Paketgröße, `--limit 200` verarbeitet nur die ersten
|
||
200 Bilder.
|
||
|
||
Neben dem Buchordner entsteht ein Arbeitsordner `buch.formulas/`. Er enthält alle Ergebnisse. Lösch ihn nicht,
|
||
solange du am Buch arbeitest.
|
||
|
||
### Schritt 3: Zweifelsfälle im Browser entscheiden
|
||
|
||
```bash
|
||
python3 formula_img2latex.py review ~/Python_Programs/epub2md/output/buch
|
||
```
|
||
|
||
Der Browser öffnet `http://127.0.0.1:8765/`. Für jede Formel siehst du:
|
||
|
||
- **Original:** das Bild aus dem Buch.
|
||
- **Overlay:** Original und LaTeX übereinander. Mit dem Regler blendest du zwischen beiden. Springt etwas,
|
||
stimmt etwas nicht (Exponent, Vorzeichen, Klammer).
|
||
- **Diff:** schwarz = beide gleich, rot = nur im Original, blau = nur im LaTeX, gelb = deutliche Abweichung.
|
||
- **LaTeX:** Text im Eingabefeld (die Lesart von Qwen), darunter die Lesarten der anderen Modelle zum
|
||
Anklicken. Oben steht der Grund für das Review, z. B. „Modelle uneinig“ mit den abweichenden Lesarten.
|
||
|
||
Schaltflächen:
|
||
|
||
| Schaltfläche | Wirkung |
|
||
| --- | --- |
|
||
| LaTeX prüfen | rendert dein (korrigiertes) LaTeX neu und zeigt Overlay und Messwerte |
|
||
| LaTeX übernehmen | die Formel wird beim nächsten `apply` ersetzt |
|
||
| Bild behalten | die Formel bleibt ein Bild |
|
||
| Keine Formel | das Bild ist eine Abbildung oder ein Symbol |
|
||
| Zurücksetzen | Entscheidung zurücknehmen |
|
||
|
||
Jede Entscheidung wird sofort gespeichert. Du kannst jederzeit aufhören (Strg+C im Terminal) und später
|
||
weitermachen. `--all` zeigt auch die automatisch angenommenen Formeln.
|
||
|
||
### Schritt 4: Formeln ins Markdown schreiben
|
||
|
||
```bash
|
||
python3 formula_img2latex.py apply ~/Python_Programs/epub2md/output/buch --dry-run # nur zählen
|
||
python3 formula_img2latex.py apply ~/Python_Programs/epub2md/output/buch
|
||
```
|
||
|
||
Aus `` wird `$L = \{-\sqrt{2};\sqrt{2}\}$` im Text bzw. `$$…$$` als eigener
|
||
Absatz. Die Bilddateien bleiben liegen.
|
||
|
||
**Danach die Gesamtdatei neu bauen**, sie enthält sonst noch die Bilder:
|
||
|
||
```bash
|
||
cd ~/Python_Programs/epub2md
|
||
python3 epub2md_merge.py output/buch --force
|
||
```
|
||
|
||
Für EPUB und PDF mit Formeln gelten die Pandoc-Befehle aus der epub2md-Anleitung mit `--mathml`, z. B.:
|
||
|
||
```bash
|
||
cd ~/Python_Programs/epub2md/output/buch
|
||
P=~/Python_Programs/epub2md/pandoc
|
||
pandoc buch.md --toc --mathml --lua-filter $P/callouts.lua -o buch.epub
|
||
```
|
||
|
||
In deutschen Büchern schreibt `apply` Dezimalzahlen als `3{,}6`, sonst setzt LaTeX „3, 6“. Eine
|
||
Gleichungsnummer steht als Text hinter der Formel, wie bei epub2md.
|
||
|
||
### Rückgängig machen
|
||
|
||
```bash
|
||
python3 formula_img2latex.py revert ~/Python_Programs/epub2md/output/buch
|
||
```
|
||
|
||
Das stellt die Kapiteldateien wie vor dem ersten `apply` wieder her. Hast du eine Datei seitdem von Hand
|
||
geändert, wird sie übersprungen. `--force` setzt sie trotzdem zurück, dann ist die Handänderung weg.
|
||
|
||
---
|
||
|
||
## 3. Einzelne Schritte statt `run`
|
||
|
||
```bash
|
||
python3 formula_img2latex.py scan AUSGABE # Bilder finden
|
||
python3 formula_img2latex.py recognize AUSGABE --engine local # lokal erkennen
|
||
python3 formula_img2latex.py verify AUSGABE # prüfen und entscheiden
|
||
python3 formula_img2latex.py recognize AUSGABE --engine cloud --only-unresolved
|
||
python3 formula_img2latex.py verify AUSGABE
|
||
python3 formula_img2latex.py status AUSGABE
|
||
```
|
||
|
||
Nützliche Optionen:
|
||
|
||
| Option | Wirkung |
|
||
| --- | --- |
|
||
| `--limit 50` | nur die ersten 50 Bilder (zum Ausprobieren) |
|
||
| `--preset cm` | Schrift fest vorgeben (`cm`, `times`, `txfonts`, `palatino`, `stix`, `euler`); Standard: automatisch |
|
||
| `--include-figures` | auch Bilder versuchen, die wie Abbildungen aussehen |
|
||
| `--model NAME` | anderes Modell (lokal: Servername, Cloud: OpenRouter-ID) |
|
||
| `--workspace ORDNER` | Arbeitsordner an anderem Ort |
|
||
| `--redo` (verify) | bereits geprüfte Formeln neu prüfen, z. B. nach einem Programm-Update |
|
||
|
||
---
|
||
|
||
## 4. Häufige Fragen
|
||
|
||
**Das Buch wurde mit epub2md `--force` neu umgewandelt. Ist meine Arbeit weg?**
|
||
Nein. Die Entscheidungen hängen am Inhalt der Bilder, nicht an Dateinamen. `scan`, dann `apply`.
|
||
|
||
**Warum landet ein Teil im Review?**
|
||
Ersetzt wird nur, worin sich alle drei Modelle einig sind. Häufige Gründe für Review: mehrzeilige Rechnungen
|
||
mit Ausrichtung, `\underbrace` oder Zeilenumbrüchen (die Modelle schreiben sie unterschiedlich), sehr
|
||
kleine oder unscharfe Bilder, oder ein Modell liest ein Zeichen anders. Im Review stehen die Lesarten
|
||
nebeneinander; oft genügt ein Blick und „LaTeX übernehmen“.
|
||
|
||
**Wie sicher ist „automatisch ersetzt“?**
|
||
Gemessen an 300 Formeln mit bekannter Lösung: keine einzige falsche Formel wurde angenommen (Fehlerquote
|
||
sehr wahrscheinlich unter 2 %). Am Gehrke-Brückenkurs wurden 62 automatisch ersetzte Formeln von Hand
|
||
geprüft, alle korrekt. Fettdruck wird bewusst nicht geprüft: Ein fetter Vektor **v** kann als normales v
|
||
übernommen werden.
|
||
|
||
**Ich will erst ein paar Formeln ansehen, bevor das ganze Buch läuft.**
|
||
`python3 tools/vergleich.py AUSGABE` verarbeitet eine feste Stichprobe von 50 Formeln genau wie `run`
|
||
und schreibt `vergleich/<name>/index.html`: Originalbild, die gerenderten Lesarten aller Modelle, die
|
||
Entscheidung mit Grund und den Bildabgleich. Der Ordner `vergleich/` wird nicht ins Git übernommen.
|
||
|
||
**Geht die blaue Hinterlegung mancher Formeln verloren?**
|
||
Ja. Das Bild hatte die Farbe eingebaut, LaTeX-Formeln haben keinen Hintergrund.
|
||
|
||
**Werden Buchinhalte ins Internet geschickt?**
|
||
Nur für die dritte Lesart: die einzelnen Formelbilder, bei denen Qwen und Gemma einig sind, samt eines
|
||
kurzen Textausschnitts um die Formel (höchstens 240 Zeichen), gehen an OpenRouter/GLM. Mit `--no-cloud` bleibt alles lokal; dann wird nichts automatisch
|
||
ersetzt.
|