This commit is contained in:
team3
2026-07-10 16:29:35 +02:00
parent 718c18523d
commit a50fb701b5
8 changed files with 115 additions and 41 deletions

28
backend/katex_check.mjs Normal file
View File

@@ -0,0 +1,28 @@
// KaTeX-Parse-Gate: prüft Formeln mit DEMSELBEN Renderer wie das Frontend.
// stdin: JSON [{tex, display}] → stdout: JSON [fehlermeldung, …]
// Ersetzt die Regex-Jagd auf einzelne Befehle: was hier durchgeht, rendert auch.
import { createRequire } from 'node:module'
import { readFileSync } from 'node:fs'
let katex
try {
katex = createRequire(import.meta.url)('katex') // Container: backend/node_modules
} catch {
const basis = process.env.KATEX_BASE // Dev: frontend/node_modules
katex = createRequire(basis.endsWith('/') ? basis : basis + '/')('katex')
}
// gleiche Makros wie frontend/src/markdown.js — das Gate darf nicht strenger
// sein als der Renderer
const macros = { '\\textsc': '\\text{#1}' }
const formeln = JSON.parse(readFileSync(0, 'utf8'))
const fehler = []
for (const f of formeln) {
try {
katex.renderToString(f.tex, { displayMode: !!f.display, macros: { ...macros } })
} catch (e) {
fehler.push(`$${f.tex.slice(0, 60)}$${String(e.message || e).slice(0, 120)}`)
}
}
process.stdout.write(JSON.stringify(fehler))