Render math in chat messages with KaTeX

Add a marked extension that tokenizes math delimiters and renders them
with KaTeX: `$$ ... $$` / `\[ ... \]` as block, `$ ... $` / `\( ... \)`
and mid-paragraph `$$ ... $$` as inline.

Inline `$ ... $` requires a non-space after the opening `$`, no newline
inside, and a non-digit after the closing `$`, so prose like "$100 から
$200" is left alone; `\$` still escapes a literal dollar sign. Parse
errors fall back to KaTeX's red inline message instead of throwing, and
math whose closing delimiter has not streamed in yet stays plain text.

DOMPurify strips `semantics` and `annotation` by default, which would
leak the raw TeX out of KaTeX's MathML output, so both are allowed
explicitly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-23 20:10:03 +09:00
co-authored by Claude Opus 5
parent 8cac5d0de0
commit 4882d291be
6 changed files with 151 additions and 1 deletions
+1
View File
@@ -11,6 +11,7 @@
},
"dependencies": {
"dompurify": "^3.1.0",
"katex": "^0.16.47",
"marked": "^12.0.0",
"pinia": "^2.1.7",
"vue": "^3.4.0",