前言¶
在 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 / 幻方无官方从属关系)。
典型用法与预期行为¶
- 安装并重启、刷新后,新对话中模型更受系统提示约束,倾向直接输出
$...$/$$...$$。 - 旧会话里已有的
latex/tex围栏由浏览器半处理:折叠源码、下方预览、可复制 LaTeX。 - 若需在契约中强调领域规则,在
extraRules中增加条目(如将水写作$\mathrm{H_2O}$而不用\ce{})。 - 需要更短系统提示、略放松围栏约束时,可设
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