dsh-tex-block-normalizer:修复 DSH 中的数学公式误解析

前言

在 DSH Web 客户端中使用 Pandoc 风格的 $$ 显示数学块时,会遇到解析错误。这会导致公式首行被静默丢弃,或者从第二行到消息结尾的内容被吞掉,最终显示为红色的 KaTeX 报错。而在其他 Markdown 渲染器(如 VS Code)中,这些格式是正常的。

这是什么

这是一个由 s11phere 维护的 DSH Web 客户端插件。它的核心作用是修复 DSH Markdown 语法误解析 Pandoc 风格 $$ 公式块的问题:解决首行被静默丢弃、或消息剩余部分被吞掉并显示为报错的问题。它将不规范的公式块形状统一归一化为标准形状。

安装与启用

使用以下命令将插件添加到 DSH Web 配置中:

dsh plugin --profile web add <本包目录>

执行命令后,重启 dsh web 并刷新页面即可生效。

核心功能

  1. 修复解析错误:将原本导致静默丢弃首行或吞掉消息剩余部分的语法,调整为 DSH 能正确识别的格式。
  2. 统一形状:将不规范的公式块形状(如 $$内容 开头、$$ 独占一行收尾等)统一归一化为标准形状($$ 独占一行,内容独占一行,$$ 独占一行)。
  3. 修复历史消息:支持对会话中已经记录的历史消息进行重新渲染修复,这个过程不会修改 session 数据。
  4. 临时关闭:支持通过环境变量临时关闭插件。

典型用法

标准形状示例:

$$\n独占一行\n$$

行间公式示例:

$$\n\\frac{\\partial}{\\partial y} = 1\n\\quad\\Longrightarrow\\quad\n x = y$$

验证与调试

安装完成后,可以通过以下方式验证插件是否正常工作:

  1. 控制台日志:刷新页面后,浏览器控制台应出现日志:[dsh-tex-block-normalizer] active: Pandoc-style $$ blocks are normalized before Markdown parsing。
  2. 调试对象:在浏览器控制台查看 window.__DSH_TEX_BLOCK_NORMALIZER__,其内容应包含 { installed: true, reason: 'installed', stats: { calls, rewrites } }。rewrites 数值的增长表示发生了改写操作。
  3. 历史消息修复:打开此前显示为红色纯文本的历史消息,报错应消失,公式应正常排版。
  4. 临时禁用:在页面加载前设置 globalThis.__DSH_TEX_BLOCK_NORMALIZER_DISABLE__ = true 可临时关闭插件。

适用场景与注意

该插件适合需要在 DSH Web 客户端中正常使用 Pandoc 风格数学公式的场景。

注意事项:
* 不处理块引用(> $$)或列表项(- $$)里的 $$。
* 没有收尾 $$ 的块保持原样,因此仍会吞到文件尾。
* 插件依赖 Node.js >= 22.5。
* 插件依赖外部库 @deepseek-ai/dsh-client-ui-primitives。

结尾

插件通过简单的文本重写解决了 DSH 在处理特定数学块格式时的解析缺陷。对于遇到公式显示问题的开发者,这是一个低侵入性的解决方案。详细文档与源码可参考下方链接。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜