fix(markdown): 行内数学公式匹配改用 Pandoc 规则,避免货币 $ 误配对

开 $ 后非空白、闭 $ 前非空白、闭 $ 后不跟数字,防止 "$10 ≈ ¥72 | $5"
这类相邻货币符号被误配对成公式——配对区间若跨过表格 | 分隔符,生成的
占位 span 会被表格解析拦腰切断,显示为原始文本。
This commit is contained in:
JOJO 2026-08-31 18:47:18 +08:00
parent c4f5ef8c56
commit 8fc2d559be

View File

@ -344,9 +344,11 @@ function transformMathBlocks(raw: string): string {
return `<span class="math-block" data-latex="${escapeHtmlAttribute(trimmed)}" data-display="block"></span>`;
});
// 行内 $...$(排除 $ 本身和反斜杠转义)
// 行内 $...$Pandoc 规则:开 $ 后非空白、闭 $ 前非空白、闭 $ 后不跟数字,
// 避免把 "$10 ≈ ¥72 | $5" 这类相邻货币 $ 误配对成公式——配对区间若跨过
// 表格 | 分隔符,生成的占位 span 会被表格解析拦腰切断,显示为原始文本)
protectedText = protectedText.replace(
/(?<![\\$])\$([^$\n]+?)\$(?![\\$])/g,
/(?<![\\$])\$(?!\s)([^$\n]+?)(?<!\s)\$(?![\\$\d])/g,
(match, latex: string) => {
const trimmed = latex.replace(/\s+/g, ' ').trim();
if (!trimmed) return match;