科研作图Skill与可编辑SVG拼装调研
对照开源科研作图仓库,归纳多面板拼装、图层拆分和位图嵌脚手架三类做法。结构线稿真正该抄的是槽位与图层纪律,不是把机械轮廓自动描成曲线。
科研作图Skill与可编辑SVG拼装调研
科研作图类 Agent Skill 常强调「可编辑 SVG」与「多个小图堆叠」。本文对照一批开源仓库,归纳三类出图做法,并说明它们对结构线稿(壳体、卡钩、件号引出)真正有用的部分:抄 拼装纪律(槽位 + 图层),而不是把机械轮廓自动描成贝塞尔曲线。Star 与提交时间为检索时快照,以仓库页面为准。
参考与延伸阅读:
- academic-figures:https://github.com/sai-tv/academic-figures
- svgutils 多面板拼装教程:https://svgutils.readthedocs.io/en/latest/tutorials/composing_multipanel_figures.html
- AutoFigure-Edit:https://github.com/ResearAI/AutoFigure-Edit
- AutoFigure-Edit 论文:https://arxiv.org/abs/2603.06674
目录
1. 结构线稿的可编辑缺口
实用新型 / 机械结构线稿的常见流水线是:大模型出一张全量轮廓栅格,再按零件清单用 SVG 叠引出线与件号。件号层往往可以改 YAML 锚点;交付后改不了的是壳体、卡钩、倒角——它们糊在一张 PNG 里。
科研作图 Skill 里常说的「多个小 SVG 堆叠」,并不是把机械零件自动描成贝塞尔曲线,而是三类纪律:
- 多面板拼装:每个子图先单独成稿,再按毫米坐标贴进总图。
- 一张 SVG 里按图层拆开:每个图元一个
<g id>,文字保持<text>。 - 先出位图再切图标嵌进脚手架:模板 SVG 的占位框里塞小图,人在编辑器里拖每一块。
对结构线稿真正有用的是 1 + 3 的拼装纪律,不是期刊栏宽或 SAM 分割产线。
2. 代表仓库与可编辑手段
| 项目 | 链接 | 功能简介 | 可编辑手段 | 可抄点 |
|---|---|---|---|---|
| academic-figures | sai-tv/academic-figures | Agent 按期刊规范写机制图 / 多面板 / Graphical Abstract | 纯矢量 SVG;每个元素独立 <g id>;Inkscape groupmode=layer;文字必须是 <text>;禁止嵌栅格 | 图层命名纪律、活字、坐标收成一位小数。不负责机械真外形 |
| scientific-svg-figures | ThalesGroup/agilab 内 .claude/skills/scientific-svg-figures/ | 固定 viewBox,先容器后箭头后字,一个 SVG 当源稿 | 单文件矢量源 | 画布合同稳定,叠层顺序固定 |
| scientific-figure + svgutils | neuromechanist/research-skills | matplotlib 等先出小 SVG,再用 svgutils.compose 按 mm 拼多面板 | 子图文件仍在,总图可重拼 | 按件 / 按视拼装的正统做法 |
| fig_gen_template | claysmyth/fig_gen_template | 各子图先存 SVG,notebook 再拼大图 | 中间产物可替换单块 | 与上类似,流程更实验室向 |
| polish-sci-figures | zhoy0409-debug/polish-sci-figures | 数据图 / 显微图 / 终拼;自检「是不是真可编辑」 | 明确:栅格不得标成 fully editable | 和线稿痛点同一句话:底图像素不是可编结构 |
| AutoFigure-Edit | ResearAI/AutoFigure-Edit · 论文 | 方法文本 → 模型出 PNG → SAM3 切图标 → RMBG 去底 → LLM 画 template.svg 占位框 → 把 icons/*.png 嵌进框 → 浏览器 svg-edit 拖拽 | 脚手架 SVG + 一堆可拖小图;图标层常仍是透明 PNG,不是真 path | 最像「小图堆叠」。不必抄 SAM / 去底依赖,只抄「占位框 + 按 id 注入」 |
| AutoFigure(前代) | ResearAI/AutoFigure | 文生图;可出 SVG 或 draw.io mxGraph | 源稿可进 draw.io | 与 .drawio 方向一致,但是方法示意图 |
| scientific-diagram-skill | Kkkakania/scientific-diagram-skill | Mermaid → draw.io + SVG 预览 | 流程 / 架构可编 | 适合模块关系,不适合注塑件描图 |
| tikz-scientific-figures | PM-Shawn/tikz-scientific-figures | TikZ 源 + PDF,可再导出 SVG | 源稿在 TeX | 过重,结构线稿不必引入 |
| academic-figure-refiner | KLOSYX/academic-figure-refiner | HTML/CSS/SVG 为源 + 人机微调 | 源稿可改 | 微调回路可参考,栈不同 |
| academic-figure-skill | TingxiYu/academic-figure-skill | 29 类统计图脚本 + 期刊栏宽 PDF 主稿 | 数据图矢量导出 | 统计图,不是结构线稿 |
| LiveFigure | arXiv 2605.23527 | VLM → 可编辑 PPTX 再导出矢量 | 源定在幻灯片 | 「源稿可拆」与拼装同类,不必把主路径改成 PPT |
「小 SVG 堆叠」在科研圈的主流实现就是:svgutils 式多 panel,以及 AutoFigure 式占位框嵌小图。academic-figures 看起来像一张图,实际是 同文件内多层 <g>,编辑体验等价于堆叠。
3. 三类做法对照
1
2
3
4
5
6
7
8
9
10
11
12
13
14
A. 纯矢量写稿(academic-figures)
Agent 直接写 <rect>/<path>/<text> → Inkscape 图层
适合:框图、流程、爆炸示意里的方盒子
不适合:自由曲面机械轮廓
B. 多文件拼装(svgutils / fig_gen_template)
子图1.svg + 子图2.svg + … → 总图.svg
适合:总装 / 局部 / 剖视分视;每零件一张小图再组装
改细节只换一块,不必重出整页
C. 栅格切片再嵌(AutoFigure-Edit)
整图 PNG → 切 icons → template.svg 占位 → 注入
适合:已经有一张总装线稿,要拆成可挪图层
切片质量依赖分割模型;结构线稿默认不必上 SAM
polish-sci-figures 的纪律应写进自检:入文 PNG 只是预览;可编辑源必须是带图层的 SVG。 把一张模型大图标成「可手改结构」是错的。
4. 对结构线稿的评估
| 层 | 常见现状 | 科研图那套 | 缺口 |
|---|---|---|---|
| 轮廓 | 一张全量 PNG / JPG | 框图:原生几何;方法图:多 icon 再嵌 | 轮廓不可拆 |
| 件号引出 | SVG 叠在底图上,锚点 YAML 可改 | 标签层独立 | 已接近,可保留 |
| 交付 | 入文仍是「底图像素 + 矢量号」 | 源稿 SVG;PNG 只是导出 | 人无法只改某一件 |
提升空间大,但是分层的:
- 件号层已经可编,再换生图模型也解决不了「改卡扣弧度」。
- 科研 Skill 不能把复杂注塑件变成可拖的原生 path。
- 真正有跃迁的是把「一张锁死大图」改成「按零件 id 分槽位的装配 SVG」。人改的是挪零件、换某一件的小图、改线宽和件号,不是在像素里涂整张 PNG。
明确不必抄:SAM3、RMBG、期刊字号、matplotlib 拼版、svgutils 依赖。结构线稿可以继续零额外重依赖,用 YAML 槽位 + 标准库拼 SVG。
5. 优先抄拼装的落地形态
推荐把「画布合同 / 拼装脚本 / 件号注入」拆开,而不是和门禁、叠层挤在同一文件。概念上三类产物即可:
| 角色 | 说明 |
|---|---|
| Agent 提示 | 按零件清单写槽位;按件出小图,或从总装裁槽 |
| 画布合同 | 画布尺寸 + 每件 slot / source |
| 拼装脚本 | 校验后输出带 <g id="part-N"> 的总装 SVG |
| 件号叠层 | 把引出线注入已有拼装 SVG,不把零件层压扁 |
推荐流水线:
1
2
3
4
5
6
轮廓(已有合格线稿 或 图/文生图)
→ 每件一个槽位的拼装 YAML
→ 拼装脚本 → *_composed.svg(零件层可单独挪/换)
→ 锚点 YAML(坐标仍 0..1,相对画布)
→ 件号注入 structure-callouts 组
→ 截图脚本只出预览 PNG 入文
source 三种(按场景选,不必上分割模型):
| source | 何时 | 编辑时发生什么 |
|---|---|---|
crop | 总装视:已有一张轮廓 | 同一底图用 clipPath 按件成组;可隐藏 / 平移该组 |
image | 爆炸 / 单件:每件单独生小图 | 槽位里嵌该件 PNG;换文件再跑拼装即可 |
placeholder | 还没图、或 uncertain | 虚线框占位,保持图层和件号槽,禁止冒充已绘结构 |
诚实边界:crop 在零件重叠处仍会带上邻件像素;自由曲面不会变成可改 path。那是拼装能达到的上限,也是科研 Skill 的上限。
6. 小结
| 要点 | 结论 |
|---|---|
| 「可编辑」的含义 | 入文 PNG 只是预览;源稿必须是带图层 / 槽位的 SVG |
| 科研圈主流 | svgutils 式多面板,或 AutoFigure 式占位框嵌小图;同文件多层 <g> 也算堆叠 |
| 结构线稿该抄什么 | 拼装纪律(按件槽位、按 id 注入),不是 SAM 切图或期刊栏宽 |
| 结构线稿不该指望什么 | 复杂注塑件变成可拖的原生 path;件号可改 ≠ 轮廓可改 |
| 落地上限 | crop / image / placeholder 三档诚实标注;重叠处仍会带邻件像素 |
