dsh-latex:让 DSH 对话正确渲染公式并默认输出 LaTeX 数学

前言

在 DeepSeek Harness(DSH)里问模型推导、写公式时,前端其实已经通过 KaTeX 渲染 TeX,但常见现象是:公式出现在灰色的 latex / tex 代码块里而不是排版后的数学式;少数写法会触发 KaTeX 严格模式下的红色报错;块级公式过宽时气泡内无法横向滚动。根因往往是模型按「代码块」输出数学,而 DSH 前端只把 $...$、$$...$$、\(...\)、\[...\] 以及 math 围栏当作可渲染数学。

下面介绍社区插件 dsh-latex(维护者 sbVAN,仓库 sbVAN/dsh-latex):在系统提示里约定输出契约,并在浏览器侧对历史遗留的 latex/tex 围栏做兼容渲染与交互增强。

这是什么

dsh-latex 是面向 DSH 桌面配置的 Cordis 插件(当前包版本 0.1.0,MIT 许可证)。它分两半协同工作:

  • 宿主侧(lib/index.js):向系统提示注册 dsh-latex:math-output 段落,要求模型默认用行内 $...$ 与展示 $$...$$ 写公式,并约束在 KaTeX 可渲染子集内书写。
  • 浏览器侧(lib/client.js):为展示数学增加横向滚动与错误徽章;对 pre > code.language-latex|tex 在下方用共享的 MarkdownText 预览公式,并提供显示/隐藏源码、复制 LaTeX 等工具栏。

插件不修改 DSH 核心文件;卸载时按文档移除链接与 patch 即可回滚。

它解决哪些问题

现象 原因(README 归纳) 插件做法
公式显示为灰色代码块 模型使用 ```latex / ```tex 围栏,前端不渲染这类围栏 宿主侧在系统提示中声明输出契约;浏览器侧就地渲染 legacy 围栏
流式输出时看到原始 $、\frac 前端在流式阶段故意保持 TeX 字面量,消息稳定后再 KaTeX 不改动上游设计;稳定后正常显示
部分公式变红字 KaTeX 严格模式不支持 align、\si{}、\ce{} 等 提示中禁止;浏览器侧将错误改为可读徽章
宽展示公式溢出气泡 展示块默认不横向滚动 浏览器侧增加横向滚动与内边距

核心功能

宿主侧:数学输出契约

注册 ctx.systemPrompt.section({ name: 'dsh-latex:math-output', order, text }),内容包括但不限于:

  • 行内 $...$、展示 $$...$$;
  • 禁止用围栏包裹公式(可与配置项 strict 联动);
  • 使用 KaTeX 支持的子集:例如用 aligned 而非 align,矩阵用 pmatrix/bmatrix/cases,单位与化学式用 \mathrm{} 而非 \si{}/\pu{}/\ce{},不用 \label/\tag;
  • 中文仅放在 \text{} 内;长推导建议分段。

段落随插件 fiber 销毁,避免热重载重复插入。渲染后的契约会写入 $DSH_HOME/cache/dsh-latex/prompt.txt,挂载诊断写入 mounted.json。

浏览器侧:渲染与交互

  • 展示数学横向滚动;KaTeX 报错显示为徽章而非刺眼红字。
  • 对 latex/tex 代码块:下方预览(复用前端已有 KaTeX,插件不捆绑 KaTeX);源码默认折叠;工具栏可展开/收起源码并复制 LaTeX。
  • 约 300 ms 防抖的全文扫描、孤儿节点清理;React 替换节点时卸载根实例。

配置项

在 profile 的 cordis.patch.yml 中通过 insert 挂载,并可附带 config(摘自 README):

- insert:
    - id: latex
      name: dsh-latex
      config:
        strict: true
        compact: false
        locale: zh
        extraRules:
          - Write water as $\mathrm{H_2O}$, never \ce{}.
键 默认值 含义
enabled true 为 false 时关闭提示段落(浏览器侧仍运行)
locale auto zh / en / auto(auto 跟随 DSH_LOCALE、LANG,默认中文)
strict true true 禁止围栏公式;false 仅建议
compact false 更短提示,约三分之一 token
order 145 系统提示内段落顺序(工具指引占用 100–199)
extraRules [] 追加到契约的额外条目

运行环境要求(package.json):Node >= 20,dsh >= 0.2.0-rc.2。

安装与启用

官方推荐从 GitHub 安装到 desktop profile:

dsh plugin --profile desktop add github:sbVAN/dsh-latex

安装后重启 DeepSeek Harness,并刷新页面一次(浏览器侧需要加载新 bundle)。

本地开发可通过 profile 的 package.json 使用 link:、创建 junction、在 cordis.patch.yml 中 insert 插件 id,再重启宿主;浏览器侧在 hmr.root 覆盖插件源码时可热更新。细节见仓库 README。

插件目录页:skillhub.cn/plugins/sbVAN/dsh-latex(社区目录站点,与 DeepSeek / 幻方无官方从属关系)。

典型用法与预期行为

  1. 安装并重启、刷新后,新对话中模型更受系统提示约束,倾向直接输出 $...$ / $$...$$。
  2. 旧会话里已有的 latex/tex 围栏由浏览器半处理:折叠源码、下方预览、可复制 LaTeX。
  3. 若需在契约中强调领域规则,在 extraRules 中增加条目(如将水写作 $\mathrm{H_2O}$ 而不用 \ce{})。
  4. 需要更短系统提示、略放松围栏约束时,可设 compact: true、strict: false(仍建议以行内/展示美元符为主)。

流式阶段仍可能短暂看到未渲染的 TeX 原文,这是 DSH 前端既定行为,稳定后会渲染。

局限与回滚

README 明确列出的限制包括:

  • 流式过程中不渲染数学(插件不对抗上游设计)。
  • 仅处理 latex / tex 围栏;math 围栏已由上游渲染。
  • 无 mhchem:\ce{}、\pu{} 仍会失败,契约引导使用 \mathrm{}。
  • 不接管 conversation.chat.node,避免复制整套消息结构并在上游升级时断裂。
  • 不重写历史消息;契约只约束后续输出,旧内容靠浏览器半兼容。

回滚:删除 junction、去掉 cordis.patch.yml 中的 insert、恢复 profile package.json,重启即可。

适用场景与注意

适合经常在 DSH 里做数学推导、物理化学公式、矩阵与分段函数展示的用户与智能体开发者。安装前建议自行查看 GitHub 源码 与 MIT 许可证;插件在当前 DSH 进程权限下运行,与安装任意社区插件一样,应对来源与配置有基本信任。

DSH 生态强调「一切皆插件」;dsh-latex 在不动核心的前提下,把「模型怎么写公式」与「界面怎么显示公式」对齐到 KaTeX 与 DSH 前端已有能力,并补齐围栏兼容与展示体验上的几个缺口。

  • 目录页:https://www.skillhub.cn/plugins/sbVAN/dsh-latex
  • 仓库:https://github.com/sbVAN/dsh-latex
羽毛球分组比赛记分
小程序二维码

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

小夜