Markdown-Formeldarstellungsregeln und Fehlerbehebung
Auslösepfad: Drei Sicherungen, um Ausführung sicherzustellen
Diese Fähigkeit stellt über drei Pfade sicher, dass sie beim Schreiben von Formeln ausgeführt wird:
- Vorauslösung: Die Beschreibung deklariert „vor dem Schreiben mathematischer Formeln“ – die Fähigkeit wird ausgelöst, bevor überhaupt ein Darstellungsfehler auftritt.
- Workflow-Einbindung: Die Hauptfähigkeit des Repositorys
math-question-skill(D:\math_question\SKILL.md) referenziert diese Fähigkeit in ihren verbindlichen Regeln – Aufgaben, Erklärungen und tägliche Fragen durchlaufen alle diesen Pfad. - Selbstprüfung vor Veröffentlichung: Vor dem endgültigen Versand von formelhaltigen Ausgaben wird
scripts/check_inline_math.pyausgeführt; gefundene Inline-$...$-Begrenzer müssen in Blockformeln oder reinen Text umgewandelt werden, bevor gesendet/geschrieben wird.
Kernregeln (Verbindlich innerhalb der Codex App)
Die Codex Desktop-App rendert ausschließlich eigenständige Blockformeln $$...$$, aber keine Inline-$...$-Formeln (offiziell bestätigt in Issue #14985). Die Formel selbst ist korrekt – das Problem liegt im falschen Begrenzer:
❌ $f(x)=\sqrt[3]{x}$ ← Inline $...$, App rendert nicht
❌ $\dfrac{f(x_0+h)-f(x_0)}{h}$ ← Inline $...$, App rendert nicht
Lösung – Formel in eine separate Zeile setzen, mit $$...$$:
✅ Aus
$$
f'(x_0)=\lim_{h\to0}\dfrac{f(x_0+h)-f(x_0)}{h}
$$
folgt differenzierbar ⟺ der Grenzwert existiert und ist endlich
Kurze Inline-Ausdrücke werden mit Unicode-Mathematiksymbolen verschönert, die dem gerenderten Ergebnis nahekommen:
- Hoch-/Tiefstellung:
xˣ(U+02E3),10⁶,2ⁿ,x₀,x₁ - Wurzeln:
√x(U+221A),∛x(U+221B Kubikwurzel) - Brüche als hochgestellte Form:
x¹⁄³(¹ U+00B9 + ⁄ U+2044 + ³ U+00B3) - Ableitungsstrich:
f′(x)(U+2032, nicht den geraden Apostroph'verwenden) - Operatoren/Relationssymbole:
·,−,±,∞,≠,≤,≥,∈
⚠️ Schreibweise ^(...) wie im Quellcode vermeiden: x^(1/3) sieht wie Quellcode aus; stattdessen ∛x oder x¹⁄³.
Komplexe Inline-Ausdrücke (Brüche, Wurzeln, Grenzwerte) als Block $$...$$ formatieren – nicht gewaltsam als reinen Text darstellen.
Was tun, wenn der Benutzer „Inline-Formeln beibehalten“ verlangt (harte Regel bleibt bestehen)
Im Gespräch könnte der Benutzer sagen: „Inline-Formeln mit $...$ beibehalten, nur Abstände korrigieren“ – das ändert nichts am Rendering-Verhalten der App. Inline-$...$-Formeln werden in der Codex App grundsätzlich nicht gerendert; das Hinzufügen von Leerzeichen erzeugt nur „Quelltext plus Leerzeichen“, was schlechter aussieht und dennoch als Fehlschlag gilt (historische Lektion: Nach Korrektur der Klebeprobleme meldete der Benutzer weiterhin „an diesen Stellen gibt es immer noch Probleme“ – die Ursache waren nicht korrigierte Inline-$...$-Formeln). Daher:
- Vor dem Abschluss weiterhin die harten Regeln anwenden: Kurze Inline-Formeln durch Unicode ersetzen, komplexe in eigenständige
$$...$$-Blockformeln umwandeln; - Wenn der Benutzer ausdrücklich darauf besteht, Inline-
$...$-Formeln beizubehalten, zunächst die Konsequenzen erläutern (App zeigt Quelltext an) und am Ende der Ausgabe einen „Renderhinweis“ anfügen; - Aufgrund der Benutzeranforderung nicht die Selbstprüfung mit
check_inline_math.pyüberspringen;[FAIL]muss auf Null reduziert sein, bevor der Vorgang als abgeschlossen gilt.
Inline-Formel → Unicode-Schnellreferenz
| Szenario | Inline LaTeX (verboten) | Unicode-Lösung |
|---|---|---|
| Einzelner Variablenbuchstabe | $f$, $g$, $A$ | f, g, A (reiner Text) |
| Hoch-/Tiefstellung | $x^n$, $x_0$, $a_n$ | xⁿ, x₀, aₙ |
| Wurzel | $\sqrt{x}$, $\sqrt[3]{x}$ | √x, ∛x |
| Bruch | $\frac1n$, $\frac{x^n}{1+x}$ | Kurzform 1/n; komplexe Form als $$...$$-Block |
| Grenzwert | $\lim_{n\to\infty}a_n$ | lim(n→∞) aₙ (Unicode: Pfeil nach unten nicht möglich, Annäherungsbedingung in Klammern an lim anhängen; komplexe Form als Block) |
| Integral | $\int_0^1 f(x)\,dx$ | Komplexe Form als $$...$$-Block, nicht gewaltsam inline |
| Betrag | $\lvert x\rvert$ | ` |
| Menge/Relation | $x\in[0,1]$, $f\le g$ | x∈[0,1], f ≤ g |
| Pfeil | $x\to0$, $n\to\infty$ | x→0, n→∞ |
| Auslassungspunkte | $a_1+\cdots+a_k$ | a₁+…+aₖ |
Formeln in Tabellen (zweithäufigstes Problem in der Codex App)
Innerhalb von Tabellenzellen werden $...$-Formeln nicht gerendert; $$...$$ als separate Zeile hingegen zerstört die Tabellenzeile. In Tabellenzellen werden grundsätzlich keine Formelbegrenzer verwendet:
| Vorgehen | Erläuterung |
|---|---|
❌ $x^{1/3}$ in Zelle | Inline wird nicht gerendert, Quelltext wird angezeigt |
❌ $$x^{1/3}$$ in Zelle | Mehrzeiliger Begrenzer zerstört Tabelle |
| ✅ Nur Klartext/Unicode in Zelle | ∛x, ` |
| ✅ Formel unterhalb der Tabelle | Jede Formel als separate Zeile $$...$$ nach der Tabelle |
| ✅ Inhalt überwiegend Formeln | Strukturierte Liste verwenden (Untertitel + $$...$$), keine Tabelle |
Beispiel – drei nicht differenzierbare Funktionen:
| Funktion | Verhalten bei x = 0 |
|---|---|
| ∛x | Senkrechte Tangente, Differenzenquotient → +∞ |
| x·sin(1/x) | Starke Oszillation, Grenzwert existiert nicht |
Formel unterhalb der Tabelle:
$$ \lim_{h\to0}\frac{h^{1/3}}{h}=+\infty $$
Selbstprüfung vor Veröffentlichung (30 Sekunden, vor Abschluss zwingend erforderlich)
⚠️ Zuerst die Konsolenkodierung auf UTF-8 setzen: Die Windows-Standardkonsole verwendet GBK, was bei Skriptausgaben mit chinesischen Zeichen oder Emojis (z. B. ✅) zu UnicodeEncodeError oder Zeichensalat führt. Vor der Prüfung Folgendes ausführen:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
$env:PYTHONIOENCODING = 'utf-8'
Chat-Antwortentwurf prüfen:
python "D:\math_question\.agents\skills\markdown-math-render\scripts\check_inline_math.py" - < Entwurf.txt
Bereits geschriebene Datei prüfen:
python "D:\math_question\.agents\skills\markdown-math-render\scripts\check_inline_math.py" "D:\math_question\Zieldatei.md"
- Exit-Code 0 (Ausgabe
[OK]) → sauber, kann gesendet/geschrieben werden - Exit-Code 0 mit
[STYLE]-Hinweis →^(...)-Schreibweise wie im Quellcode vorhanden (z. B.x^(1/3)), sieht wie Code aus;∛x/x¹⁄³oder Blockformel empfohlen (Stilhinweis, blockiert nicht) - Exit-Code 1 (Ausgabe
[FAIL]mit Zeilennummern) → zwei Problemtypen: Inline$...$(in eigenständige$$...$$-Zeile oder Unicode-Klartext umwandeln);$$...$$nicht in separater Zeile (Text am Zeilenanfang/-ende der$$-Zeile entfernen). Nach Zeilennummer korrigieren und erneut ausführen, bis kein[FAIL]mehr auftritt
Formel selbst auf Korrektheit prüfen (30 Sekunden)
Das Repository enthält ein eigenes KaTeX-CLI, um die TeX-Syntax zu validieren:
@'
\dfrac{f(x_0+h)-f(x_0)}{h}
'@ | node scripts/node_modules/katex/cli.js
- Ausgabe enthält
<annotation ...>und Exit-Code 0 → Formel ist korrekt, Problem liegt bei Begrenzer/Renderer - ParseError → TeX-Syntaxfehler, Formel zuerst korrigieren
Ein-Satz-Prinzip
In der Codex App: Formeln grundsätzlich in separaten Zeilen mit
$$...$$; kurze Inline-Ausdrücke mit Unicode-Hoch-/Tiefstellung verschönern (xˣ, f′(x)); Tabellenzellen enthalten keine Formeln, Formeln unter die Tabelle setzen; vor der Veröffentlichungcheck_inline_math.pyzur Absicherung ausführen – Inline-$...$sind verboten.