English · 中文
dsh-chem-render
给 DeepSeek Harness 的确定性化学结构式渲染插件:一个 chem_render 工具,把一行 SMILES 变成 SVG / PNG / 独立 HTML / Markdown / LaTeX。
模型只负责给出 SMILES 字符串;解析、校验、2D 布局和渲染全部由代码完成(openchemlib-extended + resvg-js),因此 SMILES 写错会得到一条可读的报错,而不是一张错误的图。 LaTeX 的原生 chemfig 源码由 mol2chemfigPy3 转换器提供(先做 Kekulé 化,输出只含标准 chemfig 宏)。
效果预览
普通分子(咖啡因,默认纯净黑色渲染):

立体化学与规整楔形键(葡萄糖):

安装
pnpm dsh plugin --profile web add 'github:<owner>/dsh-chem-render#<commit>'本地开发:
pnpm dsh plugin --profile web add link:D:/path/to/dsh-chem-render包声明了 dsh.bundle.patch,CLI 会自动挂载它自带的 patch 层。
可选:LaTeX 原生 chemfig 源码
当本机装有转换器时,latex / chemfig / all 格式会额外输出原生 \chemfig{...} 源码:
pip install mol2chemfigPy3可用 DSH_CHEMFIG_PYTHON / DSH_CHEMFIG_PYTHONPATH 指定解释器或搜索路径。没装也不影响:LaTeX 输出仍走 \includegraphics 位图路线(附同名 PNG),并在结果里说明跳过了什么。
用法
让模型画结构式,它会调用工具:
chem_render { smiles: "CN1C=NC2=C1C(=O)N(C(=O)N2C)C", format: "all", name: "caffeine" }format | 产出 | 说明 |
|---|---|---|
svg | <name>.svg | 矢量图,走文本写入、完全守沙箱策略 |
png | <name>.png | 由 SVG 光栅化;沙箱后端下二进制写入限制在会话工作区内 |
html | <name>.html | 自包含页面(内嵌 SVG + PNG data URI),无外部请求 |
markdown | <name>.md + 同名 .svg/.png | 相对路径引用 PNG(VS Code 预览等场景正常显示);仅当 PNG 文件写不了时才退回 data-URI |
latex | <name>.tex + 同名 .png | \includegraphics 路线始终可用;装好转换器后追加 \chemfig{} 路线 |
chemfig | <name>-chemfig.tex | 仅转换器源码 |
all | 以上全部 |
参数:smiles(必填)、format(必填)、name(基础文件名,自动消毒)、save_dir(默认 .)、width (200–1200,默认 500)。
样式选项(默认 = 纯净黑色渲染、不加额外标记):
| 参数 | 默认 | 作用 |
|---|---|---|
palette | "monochrome" | "monochrome" 全黑渲染;"element" 给杂原子染色(N 蓝、O 红…) |
stereo_labels | false | true 时在手性中心显示 R/S、abs、对映体注释 |
stereo_position | "below" | stereo_labels 开启时注释文字的位置:below / above / frame-top / frame-bottom |
rotate | 0 | 结构式逆时针旋转角度(度),对所有格式生效(含 chemfig) |
这些选项也进了 harness 设置页(插件的配置表单):在那里设置的值作为默认值,单次调用传参可覆盖。
立体楔形键(上/下键)经过后处理修正为严格几何:实心楔形是单一笔直三角形,虚楔形是间距均匀、长度线性递减、 垂直于键轴的虚线楔形。
文件一律通过 harness 文件系统服务写入,和其他工具一样受会话沙箱策略约束。
生成的 .tex 需要 graphicx(路线 2 还需 chemfig)——TeX Live / MiKTeX 都自带。已用 pdflatex 实测:咖啡因与 葡萄糖两条路线均编译通过。
开发
npm install
npm test # 纯渲染核心测试
DSH_NODE_MODULES=~/.dsh/profiles/web/node_modules node tests/boot.test.mjs
# 起真实 harness Context 并实际执行工具注意事项
- 本版本不支持聚合物重复单元括号标注。 括号标注(重复单元 + 下标 n)此前为实验性功能,已从工具表面移除;
把高分子画成普通分子(有限长链)没问题,但教材式括号写法暂不支持。
- chemfig 源码是尽力而为:质量取决于 mol2chemfigPy3/Indigo。稠合双环(咖啡因)渲染正确;非常复杂的分子可能不够
美观——位图路线永远兜底。
- 适用于任何有工具注册表和
fs服务的 surface(web profile、headless 等)。
许可证
MIT,见 [LICENSE](LICENSE)。渲染依赖的 npm 包各按自身许可证;可选的 chemfig 路线使用用户自行安装的 mol2chemfigPy3(MIT)。