From 965a4d62476b26a5448f7d4b1418654f423c30a8 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Fri, 16 Oct 2026 14:50:26 +0200 Subject: [PATCH] =?UTF-8?q?Formules=20LaTeX=20rendues=20dans=20les=20r?= =?UTF-8?q?=C3=A9ponses=20(KaTeX,=20repris=20d'AJEAN=20#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 00-math.js : $…$, $$…$$, \(…\) et \[…\] mis de côté avant marked (qui abîmerait \, _ et *), remplacés par un repère puis par le rendu KaTeX. KaTeX n'est chargé qu'à la première formule ; d'ici là la source s'affiche, puis est rendue sur place. Le code (blocs et en ligne) et les montants (« 5 $ et 10 $ », « $5 et $10 », \$) restent du texte. Logique de détection d'AJEAN, avec deux garde-fous en plus : un $ ouvrant précédé d'un chiffre et d'une espace est un montant (« 5 $, à 10$ »), et $…$ ne contient pas de backtick — sans quoi « 5 $, code `$x$` » s'appariait par-dessus le code en ligne (le cas passe aussi chez AJEAN). Fonctions pures dans un fichier à part : web_katex_math_test.go les exécute sous node (ignoré sans node) sur les cas limites, et de bout en bout avec marked. index.html régénéré par tools/assemble-ui ; NOTICE.md mentionne la reprise et la licence MIT de KaTeX. Co-Authored-By: Claude Opus 5.5 --- NOTICE.md | 15 +++ internal/loki/ui/index.html | 82 ++++++++++++++- internal/loki/ui/src/js/00-math.js | 70 +++++++++++++ internal/loki/ui/src/js/00-md.js | 8 +- internal/loki/ui/src/styles.css | 4 + internal/loki/web_katex_math_test.go | 143 +++++++++++++++++++++++++++ 6 files changed, 320 insertions(+), 2 deletions(-) create mode 100644 internal/loki/ui/src/js/00-math.js create mode 100644 internal/loki/web_katex_math_test.go diff --git a/NOTICE.md b/NOTICE.md index 601ad1d..754cf00 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -52,6 +52,21 @@ et le **chiffrement de la mémoire** (`mem_crypto.go`, `mem_vault.go`, **pas** reprise : elle vise ajean.link, le service de l'auteur amont. Loki expose à la place un export/import de paquet chiffré en fichier local. +Le **rendu des formules LaTeX** dans les réponses (`ui/src/js/00-math.js`, +`web_katex.go`) est repris d'AJEAN (#123) : $…$, $$…$$, \\(…\\) et \\[…\\] rendus +par KaTeX, chargé à la première formule seulement, sans toucher au code ni aux +montants en $. Loki y ajoute deux garde-fous de détection (« 5 $, » et un $ +voisin d'un code en ligne restent du texte) et sert la route `/katex/` aussi +depuis la façade Rust (`rust/loki-rs/src/ui.rs`). + +## KaTeX + +**[KaTeX](https://katex.org/)** 0.16.11 (licence MIT, © Khan Academy et +contributeurs) est embarqué tel que publié — script, feuille de style et +polices woff2 — sous `internal/loki/ui/katex/`, avec sa licence +(`internal/loki/ui/katex/LICENSE`). Il est servi par Loki sous `/katex/`, sans +appel à un CDN. + ## Moteur Strata Le second moteur de Loki (`internal/loki/backend_strata.go`) est diff --git a/internal/loki/ui/index.html b/internal/loki/ui/index.html index ab81304..0694c6b 100644 --- a/internal/loki/ui/index.html +++ b/internal/loki/ui/index.html @@ -1418,6 +1418,10 @@ button:hover{border-color:var(--dim);color:var(--text)} border:1px solid var(--border);border-radius:999px;background:var(--panel); color:var(--dim);font-size:12px;line-height:1.5} .stopnote::before{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:var(--dim)} +/* Formules LaTeX (KaTeX, 00-math.js) : une longue formule défile au lieu de déborder. */ +.katex{font-size:1.08em} +.katex-display{margin:.6em 0;overflow-x:auto;overflow-y:hidden;padding:2px 0} +.math-pending{font-family:var(--mono);font-size:.92em;color:var(--dim)} /* ===== Fenêtres et sélecteurs ===================================== Coins arrondis et ombre douce plutôt qu'un cadre marqué. */ @@ -3820,6 +3824,76 @@ html[data-files="1"] #files-btn{color:var(--accent)}