--- name: reference_textbook_latex_escaping description: "Баг формул в учебниках = ЛИШНИЕ слэши (over-escaping), не нехватка; правило чётности и фикс-скрипт" metadata: node_type: memory type: reference originSessionId: a705e035-e600-43a2-b98c-197923986186 --- Формулы в учебниках (`frontend/textbooks/*.html`) лежат в JS-строковых литералах, рендерит KaTeX через `renderMathInElement`. Симптом «формула печатается текстом» (`dfrac13S_осн`, `sqrtR^2+h^2`, `cdoth` — карточка пирамиды/конуса в geometry_11_ch2) — это **ЛИШНИЕ обратные слэши (over-escaping)**, а НЕ их нехватка. (Первичная гипотеза «не хватает \» была НЕВЕРНА — проверять байты ДО выводов.) Механика: в литерале `\\\\dfrac` (4 слэша) вместо `\\dfrac` (2). После JS-анескейпа KaTeX получает `\\dfrac` → трактует `\\` как перенос строки, а `dfrac` печатает как обычный текст, поэтому формула разваливается на строки. **Правило чётности (защищает легитимные `\\` разделители строк):** - 2 слэша → `\cmd` → ОК - 4 слэша → `\\`+текст → БАГ → схлопнуть до 2 - 6 слэшей → `\\`+`\cmd` (перенос строки + команда в `\begin{cases}`) → ОК, не трогать - 8 слэшей → БАГ → до 2 Схлопывать ТОЛЬКО прогоны слэшей, кратные 4, и ТОЛЬКО перед известной LaTeX-командой. Перед `x`/цифрой (настоящие `\\` в cases/array) — не трогать. **Исправлено 2026-05-30:** 150 правок, 7 файлов (`algebra_11_ch1/ch2/ch3`, `geometry_11_ch1/ch2/ch3/ch4`), коммит 8786cf5 (запушен в master). Скрипт: `backend/scripts/fix_overescaped_latex.js` (идемпотентный, dry-run по умолчанию, `--apply`, с KaTeX-валидацией). algebra_8 / algebra_7_ch4 имели только легитимные `\begin{cases}` → 0 правок. **БД чиста:** questions колонки `text/explanation/correct_text` (НЕ `payload`!), 1398 вопросов + 5187 options (`options.text`) → 0 багов обеих форм. Баг только в HTML. Окружение этой сессии: stdout периодически рвался, Read иногда галлюцинировал/дублировал содержимое — надёжно писать результат в файл с маркерами `<<>>/<<>>` и читать через PowerShell `[IO.File]::ReadAllText`. Bash искажает кириллический путь `Тесты`→`"5ABK` (ENOENT) — использовать PowerShell. БД — через `node:sqlite` (см. [[reference_sqlite_node]]).