Skip to content
Back to skills

Thesis Figure Skill

ASecurity

生成学术论文配图:LaTeX/TikZ 代码(结构化图表,直接嵌入论文)或 draw.io XML (技术路线图、汇报配图)。自动按论文领域风格设计,编译验证后交付。 Use when the user asks for: 论文配图、画架构图、画流程图、TikZ 图、draw.io 学术图、复刻论文图、tikz/latex diagram。

  • 129 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added May 26, 2026
designpythonbashnodeapi

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 20 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add 0xE1337/thesis-figure-skill --skill thesis-figure-skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Thesis Figure Skill?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Thesis Figure Skill
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/0xe1337-thesis-figure-skill/badge)](https://www.skillsdirectory.com/skills/0xe1337-thesis-figure-skill)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: thesis-figure-skill
description: |
  生成学术论文配图:LaTeX/TikZ 代码(结构化图表,直接嵌入论文)或 draw.io XML
  (技术路线图、汇报配图)。自动按论文领域风格设计,编译验证后交付。
  Use when the user asks for: 论文配图、画架构图、画流程图、TikZ 图、draw.io 学术图、复刻论文图、tikz/latex diagram。
---

# Academic Diagram Skill (TikZ + draw.io)

把论文中的系统架构/协议流程/技术方案转化为高质量配图。**目标:高信息密度 + 设计感 + 一次过编译**。失败模式:平庸、对齐松散、坐标凭感觉。

## 工具选择

| 维度 | TikZ | draw.io |
|------|------|---------|
| **适合** | 嵌入 LaTeX 论文、数学公式、结构化图表 | 技术路线图、汇报展示、装饰性强(渐变/3D) |
| **精度** | 像素级 | 拖拽,坐标不如 TikZ 精确 |
| **中文** | 需 ctex/fontspec,`rotate=90` 中文会崩溃 | 原生支持 |
| **数学** | 原生 LaTeX 完美 | MathJax 一般 |
| **编译** | xelatex + pdftoppm | drawio CLI → PDF → PNG |
| **可编辑** | 代码即源 | `.drawio` 可在 app.diagrams.net 编辑 |

**默认 TikZ**。draw.io 用于:用户要求 / 参考图为 draw.io 风格 / 需要渐变-3D-空心字 / 内容简单且装饰 > 精确。
**输出格式仅这两种**——HTML/CSS/SVG 不可嵌入论文也无法在 draw.io 编辑。

## Philosophy(每次画图前必读,所有规则之上)

### The UNFORGETTABLE Question

画图前 + 交付前问自己:**审稿人 5 秒看完,记住的是什么?**
- 一个独特的 hero 子结构?
- 嵌入的真实热力图 / 曲线 / 图像?
- 信息密集的 hyperparameters / loss panel?
- 多色和谐的 zone 划分?

**没有"记得住的东西" = 不要交付。**

### Naming the Gravitational Pull(你必须主动避开的统计中心)

模型默认会画出 **"AI slop 学术图"**——下面是统计中心的平庸默认,**主动避开**:

- ❌ box + arrow only,**零**嵌入数据可视化
- ❌ 3 色单调配色(蓝/橙/紫常见组合)
- ❌ "FFN" / "Attention" 单字标签,**不写公式 / 不写参数**
- ❌ hero 内**只有 box list**,无嵌入热力图/曲线/微图
- ❌ 没有信息 panel(hyperparameters / loss curve / legend / metrics)
- ❌ 平面布局**无 visual hierarchy**(核心和辅助同重量)
- ❌ 看起来"像 AI 一次性生成的"——无设计痕迹

### Permission for Creativity

**Claude is capable of extraordinary academic figure design.** Checklist 是 catching last-mile bugs,**不是 safe defaults**。

**你不是在练习画结构图。你在为 NeurIPS / ICML / Nature 投稿画 figure。**
**审稿人会用这张图判断作者的领域素养和认真程度。**
**box+arrow only 的平庸图 = desk reject。**

### 创造空间 — 复杂档可调用的词汇(不强制,但**应该考虑**)

| 维度 | 选项 |
|---|---|
| **嵌入可视化** | attention heatmap / loss curve / 真实图像色块 / signal waveform / 数学曲线 / N×N matrix / mel spectrogram / 散点分类 |
| **信息 panel** | hyperparameters 框 / metrics 表 (FID/BLEU/Acc) / color legend / glossary 注释 / 数学符号速查 |
| **数学公式嵌入** | `FFN(x) = max(0, xW₁+b₁)W₂+b₂` 直接写进 box 内部,**不是只贴标签** |
| **配色** | ≥5 种 zone tone + accent color;浅色 zone 背景 + 中饱和度 box + dark accent |
| **层级** | hero ≥ 2× 辅助 box;"N=6 layers" 灰色透明栈背景 |
| **Cross-zone** | dashed rail + 跨段标签 (如 "K, V") |
| **学术 polish** | dataset 标注 ("CIFAR-10") / 性能数字 ("FID=3.17") / 引用作者年份 |

### 视觉直觉法则(meta,在 ④.5 Step 0 应用)

1. **0.1 秒直觉**:视觉流向 ≠ 逻辑流向 = 必错(每写一条 `\draw`,问读者直觉对吗)
2. **眼睛轨迹**:沿主线走,任何"卡住"位置 = blocker
3. **删除测试**:能删的就该删;**修一个 bug 不能引入新审美问题**

### 最重要的一点

**审美 + 信息密度 > 规则合规。** 规则只是地板,审美是天花板。**18 项 checklist 是 catching last-mile bugs**——不是设计指南。设计指南是上面的 Philosophy。

### 复杂档画图捷径 — TikZ Snippet Library(21 个 + 预览 PNG)

**Batch 17 fig153 教训**:Philosophy 文本指南让 sub-agent **知道要嵌入 viz / panel / 公式**,但**写出来的视觉重量、留白、配色协调仍然失败**——因为这些是 visual perception 而非 textual 任务。

**解决方案**:`references/tikz-snippets/` 提供 **21 个手工精雕的 TikZ 片段 + 21 个 PNG 预览 + 1 个组合规则文档**——sub-agent **看 PNG 选 + 复制粘贴 + 替换参数 + 按组合规则拼装**即可达到 examples 标杆。

**5 大类零件**(详见 `references/tikz-snippets/README.md` inline gallery):

| 类别 | 数量 | 文件 |
|---|---|---|
| **1. 嵌入数据可视化** | 6 | attention-heatmap / confusion-matrix / mini-spectrogram / image-strip / scatter-plot / embedded-graph |
| **2. 信息 panel / 图表** | 5 | bar-chart / line-chart / radar-chart / hyperparams-table / metrics-card |
| **3. 数学 / 几何** | 3 | gaussian-curve / vector-arrows / formula-box |
| **4. 结构 / 流程** | 4 | stage-container / pipeline-stages / layer-stack / feedback-loop |
| **5. 整图骨架元素** | 3 | multi-zone-palette / color-legend / summary-bar |

**组合规则**(**必读**):`COMPOSITION-RULES.md` — snippet 间留白 / 对齐 / Z-order / 整图骨架(双栏对称 / 5 stage 横向 / 中央 hero + 4 panels)

**复杂档强制流程**:
1. **先读 `references/tikz-snippets/README.md`** —— inline gallery 含每个 snippet 的 PNG 预览
2. **首选**:复制完整 `example-skeleton-B-horizontal.tex`(pipeline 类)或 `example-skeleton-C-centralhero.tex`(hero+panels 类)作 figure.tex,改 content 不动 layout
3. **次选**(特殊布局需求):看 PNG 选 ≥ 3 snippet 自己拼装
4. **必读 `COMPOSITION-RULES.md`** —— 解决"snippets 都塞进去但仍乱"问题
5. **底部必有** color-legend OR summary-bar
6. **绝对不能"简化"snippet 核心结构** —— 简化 = 信息稀疏 = 平庸

## 硬约束(违反必失败)

🔴 **工具铁律:只用 TikZ 或 draw.io,禁止 Python/matplotlib 替代**(2026-05-22 Batch 17 fig153 教训:sub-agent 在执行 Module-First 时用 Python+matplotlib 生成 `.py` 文件 = 完全偏离 thesis-figure-skill 价值主张):
- **Module-First 子流程(③.A→③.D)必须保持 TikZ**——即使 matplotlib 画嵌入 viz 更方便
- **复杂嵌入 viz** 仍用 TikZ 原生(`\foreach` 画 cell / `pgfplots` 包 / `\draw` 手画 patch)
- **学术论文图嵌入仍是金标准**:`\input{figure.tex}` 比 `\includegraphics{fig.png}` 在公式渲染、矢量缩放、风格统一上都优
- 仅当用户**明确要求** Python 时才允许 — 默认必 TikZ

🔴 **配色铁律:默认 light background,dark theme 需用户明确请求**:
- 学术论文标准是 white/light bg;dark theme 与正文风格断裂
- Philosophy 段"≥5 种 zone tone"指 zone 浅色背景 + box 中饱和度,**不是**整图反转色
- sub-agent 不要自作主张套 dark theme

⚠️ **xelatex + `rotate=90` 中文** — 渲染为不可读色块,所有中文标注必须水平
⚠️ **`\texttt` 包裹中文** — 报错,纯英文代码才用 `\texttt` / `code_block`
⚠️ **ctex 不可用** — 编译前 `kpsewhich ctex.sty`,否则切方案 B(fontspec)
⚠️ **`ucharclasses`** — tikz 节点内中英混排频繁 Missing character,禁用
⚠️ **xelatex 对缺失字体静默失败** — 编译后必须 `grep "Missing character" *.log`
⚠️ **单条 `\draw` + `rounded corners` 画长距离 U 型回路** — 路径异常,拆 3 段独立 `\draw`
⚠️ **SVG `clip-path` + `preserveAspectRatio="none"` 模拟梯形** — 高度不可控,禁用
⚠️ **空心描边字 stroke-width ≥ 1.2** — 笔画间隙被填满变模糊,控制 0.6-0.8

## 工作流(⓪→⑦)

```
⓪ 依赖检测 → ① 画图指令 → ② 加载规则 → ③ 生成代码 → ④ 编译验证 → ⑤ 评分 → ⑥ 迭代 → ⑦ 沉淀
```

### ⓪ 依赖检测(首次自动执行一次)
- TeX / pdftoppm 缺失:**只提示用户安装**,不自动装。
  `which xelatex || echo "请装 mactex-no-gui (macOS) / texlive-xetex (Linux)"`
  `which pdftoppm || echo "请装 poppler"`
- Python 工具(小依赖,缺失自动 `pip3 install`):`pdfplumber`、`pymupdf`、`pathfinding`、`opencv-python`、`scikit-image`
  (`pymupdf` 不装 → `line-through-node` + `node-overlap` 两类几何检测会 ERROR 退出,不静默跳过——别忽略)

### ⓪.5 入口模式分流(⓪ 之后第一问,路径分叉点)

skill 现在支持 **4 种生成路径**——画图前必须先确定走哪条。**默认走 A,其他路径由关键词触发**。

| 路径 | 触发关键词(用户原 prompt) | 说明 | 状态 |
|---|---|---|---|
| **A — Skeleton 复用** | "画一张 X 图"、"帮我画 Y"、未明示其他 | 从已验证 skeleton (B/C/D/E/F/G) 选一个,**复制全部 + 改 content + 不动 layout**。最快、最稳。输出视觉与 skeleton 相近 | ✅ 默认 |
| **B — Remix(跨 skeleton 拼模块)** | "组合 D 的雷达 + G 的图表那种"、"想要 X 的左半 + Y 的右半" | 多选 skeleton 部件,自动拼装 | 🚧 暂未实装,**回退到 A** |
| **C — 原创设计** | "独特版面"、"复刻这张 ref.png"、"从零设计"、"我没有合适的 skeleton" | architect 设计 zone → implementer 写 TikZ → vision-audit 多轮 GAN(即现有 Module-First 从零路) | ✅ 现有路径 |
| **D — 沉淀入库** | "把这张 .tex 存进库"、"作为新 skeleton"、"添加到 examples"、"沉淀到模板库" | 用户已有 .tex → 自动入库为 `example-skeleton-{H..Z}-<topic>.tex` | ✅ 走 **Φ 沉淀通道** |

**走 A** → 继续 ① ② ③ ④ ④.5 ⑤ ⑥ ⑦(③ 走 A 路:从 6 个 skeleton 选最匹配的 → 复制全部 → 改 content / 不动 layout / 严格遵守 CONSTRAINTS section)
**走 B** → 当前不可用。报告用户"Remix 模式暂未实装,当前请用 A skeleton 复用;如果你想要的部件组合在某个 skeleton 里近似存在,可以直接走 A 选最接近的"
**走 C** → 继续 ① ② ③ ④ ④.5 ⑤ ⑥ ⑦(③ 走从零路 + Module-First ③.A→③.D 子流程)
**走 D** → **跳过 ①-⑦**,直接进 **Φ 沉淀通道**(见文末)

**判断规则**(按优先级):
1. 用户提到 "存进库 / 入库 / 作为模板 / save to examples" → **强 D**(直接走 Φ)
2. 用户提到 "组合 X 的 Y + Z 的 W" → **强 B**(回退到 A + 提示)
3. 用户提到 "独特 / 原创 / 复刻 / from scratch / 无参考图" → **弱 C**(询问确认走 A 还是 C)
4. 其余 → **A**(不需要询问,直接走 skeleton 路径)

**模式选择对编译验证 / vision-audit 的影响**:A 模式因为 skeleton 已经过版面验证,④.5 重点放在"内容是否完全脱离 skeleton 主题(renaming 漏掉、stale 标签)"上;C 模式才需要完整 18 项 checklist;D 模式走 Φ.2 简化版 audit。

### ① 画图指令(强制显式输出,不可跳过)

**加载 `references/step1-instructions.md`**——里面有完整的 10 项要素清单、参考图测量规则、ASCII 草图法、嵌入可视化决策表、**密度参考表(按论文复杂度选档位)**、节点形状/连线速查、Pre-flight P1-P7。**禁止"心里想好直接写代码"**——跳过这步返工率 100%。

**关键认识**:步骤① 的输出不是"最大复杂度版本"。先判断论文实际复杂度(极简/中等/复杂/超复杂),再选画图档位。**从复杂版起步然后修瑕疵**比**从合适档位起步**累计 token 高一个数量级——MMAlign 11 轮迭代就是反面教材。

**🔴 强制物质化要求**(fig126 Tacotron2 教训:sub-agent 加载 step1 但跳过实际输出,产生大块空白):

步骤 ① 必须**以文字形式实际输出**(不是"想了就过"),且**第一段写进 figure.tex 头部注释块**作为证据。**形式两选一**,按图复杂度选:

**🔵 form A/B 选择前的先决条件**(消除"节点数悖论"——判档依赖草图、草图依赖判档的循环):

```
1. 先粗估档位(无需精确节点数,先看明显信号):
   ① 含 hero 子结构 / 嵌入热力图 / 多 panel / ≥3 列 → 复杂档 → form B
   ② 含 fan-out / 时序生命线 / 12+ 模块 → 中等档 → form A 或 form B
   ③ 纯几何/单链/对比图(明显 < 15 节点)→ 极简档 → form A
2. 按粗判选 form 写注释块(form A 画 ASCII OR form B 写 narrative)
3. 注释块写完后**数节点 → ①.5 精确确认档位**
4. 若精确档位 ≠ 粗判档位 → 调整 form(极简误判为复杂 = 简化为 A;
   复杂误判为极简 = ASCII 画不下 → 改写 B)
```

**铁律**:先粗判 → 写注释块 → ①.5 精确确认 → 必要时调整。**禁止凭直觉直接选 form 又凭直觉判档**。

### 形式 A — ASCII 草图(极简档 / 中等档无嵌入 viz)

```latex
% Step ① 设计文档
% 领域 / 格式 / 档位 / 整图 W×H cm / 信息流方向 / 行×列
% 模块列表 N 个,核心 = X / 连线逻辑 / 空间规划 rail x / 视觉强调
% ASCII 草图:
%   +-----------+      +-----------+      +-----------+
%   | Encoder   |----->| Attention |----->| Decoder   |
%   +-----------+      +-----------+      +-----------+
% 预防 issues:[2-3 个坑]
```

### 形式 B — Narrative 设计文字(复杂档 / hero 子结构 / 嵌入 viz / 多 panel)

复杂图 ASCII 表达不全,用**叙述性空间描述**——每列/每 zone 写一段:(a) x/y 范围 (b) 内部子结构 (c) 与相邻列关系 (d) **留白处理**(**特别要预想哪里可能出现大块空白并写出应对** — fig126/137 教训)

**写在 figure.tex 头部作为注释**,sub-agent 在 ④.5 Step 0 时读取核验。若注释不存在 → blocker 回 ① 重做。**注意**:form B 不是必须填模板,是用"设计师的叙述思维"展开布局——重点是 Philosophy 段的 **UNFORGETTABLE Question**:你怎么布局让审稿人 5 秒记住一个独特结构?

### ①.5 图档判断(**用户驱动** + 自动检测兜底)

**🔴 复杂度按需而定,不是默认复杂**(Batch 16 教训:Philosophy First 让 sub-agent 默认套 examples 06 复杂风格,但用户实际只想要中等清晰图时 = 过度发挥变乱)。

**第 1 步:从用户原 prompt 关键词推断复杂度**

| 用户 prompt 关键词 | 推断档位 |
|---|---|
| "详细 / 完整 / 含 benchmark / 发表级 / 总览 / hyperparams / 性能数字" | **复杂档**(按 Philosophy 全套:嵌入 viz + panel + 公式 + 多色)|
| "概览 / 主架构 / 流程图 / 主流程 / 示意" | **中等档**(清晰主流 + zone,1-2 个嵌入元素)|
| "几何示意 / 公式对比 / 曲线对比" | **极简档**(单坐标系或纯结构,无 hero / 无 panel) |

**第 2 步:如果用户原 prompt 不明确 → 主动询问用户**

```
用户原 prompt 没明示复杂度时,使用 AskUserQuestion(或直接询问):

"这张图你想要哪种复杂度?

(A) 极简:单层主架构 / 几何示意,5 秒理解
(B) 中等:主流程 + 关键 zone,10 秒理解  
(C) 复杂:完整含 hyperparameters / benchmark / 公式嵌入,发表级"
```

**禁止**自作主张选复杂档画出"塞满 panel 的乱图"——**按需才是审美**。

**第 3 步:用户确认后,对照下表执行**

| 档位 | 自动判断备选(用户没说时)| 该档**应该有的元素**(Philosophy 适度展开)| ④.5 自评策略 |
|---|---|---|---|
| **极简档** | ≤15 节点 + 无 hero + 无嵌入 viz | 单坐标系 / 纯结构 + 必要标注;**不强加 hero / panel** | 18 项中 S8/S9/M8/E3/E12/V1 一句话 N/A |
| **中等档** | 15-30 节点 OR 有 hero | 主流 + 2-3 zone + 1-2 嵌入元素(可选)| 走全 18 项;E3/M8 0 候选一句过 |
| **复杂档** | ≥30 节点 OR 嵌入 viz OR 多 hero | hero 子结构展开 + ≥2 嵌入 viz + ≥1 panel + 公式嵌入 + ≥5 色 zone | 走全 18 项,重点 V1 |

**关键原则**:**极简不等于平庸;复杂不等于必塞**。**审美在 Philosophy(5 秒记住什么)**,密度在档位(按用户需求)。

### ② 加载专项规则
确定图表类型后,**按需**加载对应文件(见下方"按需加载索引")。同时加载 `references/lessons.md` 获取该类型已验证的基线参数和踩坑经验。
基线参数已经是 25 批次 157 张图的结晶——**直接用,不要从零试错**。要偏离基线必须有具体理由。

### ③ 生成代码(**Module-First 子流程 + 两层决策门**)

**🔴 复杂档强制 Module-First 子流程**(Batch 16 教训:sub-agent 一次写 800 行 TikZ → 整图乱;先画一部分,验证好,再拼接 = 干净):

```
③.A — 先画 hero(最重要的中央子结构 + 嵌入 viz / 关键公式)
       - 单独输出 figure.tex(只含 hero + 一个极简 frame)
       - 编译 + 渲染 PNG → 单独审查 hero
       - hero 内部 sub-layers / 嵌入 viz / 公式都干净后才继续
       - 不要直接跳到完整图

③.B — 再加主流(管线 + zones 边界 + connecting arrows)
       - 在 ③.A 的 hero 周围扩展:左右上下的 supporting modules + zone 边框
       - 编译 + 渲染 → 审查框架是否清晰
       - canonical fan-out / fan-in 在此阶段引入

③.C — 再加 information panels(hyperparams / benchmark / legend / 公式注释)
       - 选**角落留白**放 panel(不是"塞满式填空白")
       - panel 之间间距 ≥ 1cm
       - 编译 + 渲染 → 审查 panel 是否补充而不喧宾夺主

③.D — 整体审查(→ 进入 ④.5)
       - 整图 Philosophy 检查(UNFORGETTABLE / 5 秒第一印象 / 主线眼睛轨迹)
       - 18 项 last-mile bug 检查
```

**极简 / 中等档可以跳过 Module-First**,单次写完即可。**Module-First 只对复杂档强制**——它的价值是分阶段验证,避免 800 行 TikZ 一次出错导致整图崩坏。

---

**Module-First 之外的决策门**(B 路 vs 从零路):

**问 1:这张图是纯结构图吗?**(框 + 线 + 分组,**无**嵌入热力图/曲线/柱状/矩阵,**无** hero 内部多子节点)
→ Yes:**B 路(auto-layout)**
  1. 加载 `references/figure-spec.schema.md` 看 schema
  2. 输出 `figure-spec.json`(节点、边、zones、layout 引擎)
  3. 跑 `python3 references/dot-to-tikz.py figure-spec.json` → 产出 `figure.tex`
  4. 走 ④ 编译 + ④.5 视觉反馈
  - **适用**:架构图 / 流水线 / DAG / 协议时序 / 三栏映射 / 技术路线图 / 多实例汇聚
  - **优势**:0 个 Claude 选的坐标,0 类微斜线/穿框/拥挤 bug

**问 2:富视觉图(嵌入可视化 / 复杂 hero 子结构 / 不规则布局)**
→ **从零路 + Module-First(③.A→③.D)**
  1. 起点:`references/tikz-template.tex`(含 preamble / 字体 / 配色 / **canonical 箭头 styles** / 防御写法)
  2. 加载 `references/visual-patterns.md`(9 个模式:hero 子结构、热力图、折线图、柱状图等)
  3. 按 ③.A→③.D 子流程:先 hero → 加主流 → 加 panels → 整体审查
  4. 复杂连线(≥8 条交叉风险):可选 `python3 references/tikz-path-router.py spec.json` A* 避障

**🎯 箭头/连线必用 canonical pattern**(深度调研 2026-05-18,5 batches 教训):
`tikz-template.tex` 中 6 个预定义 styles 是经过 PGF 官方文档 + PlotNeuralNet 业界实践 + arrows.meta + bending library 综合调研的最佳实践:

| style | 用途 | 何时用(铁律) | 关键差异 |
|---|---|---|---|
| `arrow` / `arrow thick` / `arrow thin` | 长连线 | **⚠️ 仅 ≥ 1.5cm — 短于此必须改用 `arrow short`** | tip 6.5pt, `shorten >=2pt, shorten <=1pt` |
| **`arrow short`** | 短箭头(相邻 box 间) | **⚠️ < 1.5cm 必用此 style** | tip 3pt, `shorten >=1pt, shorten <=0pt` — 防止 tip 吃光 stem |
| `residual` | dashed skip / 反馈 | residual / feedback | 紫色虚线 + rounded corners |
| `leader` | annotation 引线 | 引线 / 标注 leader | 灰色 dotted |
| **`fan_stub`** / `fan_stub thin` / `fan_stub thick` | fan-out 树状分叉的 stub(spine → target) | **fan-out / fan-in 的 stub 段必用此** | **`shorten <=0pt`**——起点紧贴 spine 无 gap |

**禁止**自己手写 `-{Stealth[scale=X]}`——4 轮 Batch 教训证明手调 scale 治标不治本。只调 `line width`(0.6/1.0/1.6pt 三档),tip 通过 `length=⟨dim⟩ ⟨line_width_factor⟩` 语法自动跟随。`\usetikzlibrary{bending}` **必加载**,否则弯折路径上 tip 必然 mis-align。

**短箭头铁律**(Batch 10 用户反馈:fig91-95 大量"只有头的箭头"):**任何 < 1.5cm 的连接箭头必须用 `arrow short`**,不要默认 `arrow` 或 `arrow thick`。原因:默认 `arrow` 的 tip = 5pt + 1.5×line_width = 6.5pt,加上 `shorten` 3pt,一条 15pt(0.5cm)的短箭头剩下 stem 只 5.5pt——视觉上"只剩个头"。`arrow short` 用 3pt tip + 1pt shorten,stem 保留充足。

**fan-out 树状分叉**(1 source → N targets):spine 用普通 `\draw[line width=1.0pt]`(无 shorten),**stub 用 `fan_stub` 不用 `arrow`**——后者的 `shorten <=1pt` 会在 stub 起点和 spine 间留 1pt 视觉 gap(fig86 Batch 9 教训:MPD/MSD spine 全断裂)。

**`rounded corners` 使用规则**(Batch 10 用户反馈:fig92 出现"莫名其妙曲线",[PGF 官方手册原话](https://tikz.dev/tikz-paths):"very short line segments → rounding causes inadvertent effects"):

```
✅ 只在显式 ≥2 段折线用 rounded corners:
   \draw[arrow, rounded corners=5pt] (A) -- (corner) -- (B);
   \draw[arrow, rounded corners=5pt] (A) |- (B);             % | 和 - 是隐式 corner

❌ 直线禁加 rounded corners:
   \draw[arrow, rounded corners=5pt] (A) -- (B);   ❌ TikZ 在端点附近产生鬼影弧
```

**`|-` / `-|` L-bend 安全条款**(Batch 10 用户反馈:fig97 Pedersen Commitment hero 出现"箭头穿过框体"——`(msg.south) |- (ped_hero.west)` 中 msg.x 落在 hero 的 x 范围内,TikZ 把横线**画在 hero 内部**):

```
✅ (A.south) |- (B.west) 仅当 A 不在 B 的水平投影内(A.x < B.x0 OR A.x > B.x1):
   A
   |
   +----→ B          ← A 在 B 左上方,横线在 B 外部 OK

❌ (A.south) |- (B.west) 当 A.x ∈ [B.x0, B.x1]:
   A
   |
   |  ↓
   +→ B         ← 横线穿过 B 的内部 = pierce bug

✅ 修复 1:用 named coordinate 显式 waypoint 绕开 B:
   \coordinate (wp) at (B.x0 - 0.5cm, B.center.y);
   \draw[arrow] (A.south) |- (wp) -- (B.west);

✅ 修复 2:换 anchor 让箭头从 B 的上方接入:
   \draw[arrow] (A.south) -- (B.north);   % 直线,A 在 B 上方
```

PGF 不做 obstacle-aware routing([官方手册确认](https://tikz.dev/base-nodes)),所以必须自己保证 `|-` / `-|` 的中段不撞 obstacle。`pdf-overlap-checker.py --json` 的 line-through-node 检测会抓到这种 bug。

**编译前两个 checker(pre-flight,所有路径通用)**:
- `python3 references/tikz-validator.py <file.tex>` — 几何/语法 gate:微斜线 / 溢出 / 碰撞 / 方向反转。**ERROR 必修**
- `python3 references/tikz-design-linter.py <file.tex> [--type rich|sequence|simple]` — **advisory** 设计指标。**默认 WARN 不阻挡**——简单论文图可以简单,linter 只汇报指标供 Claude+用户判断是否匹配论文复杂度。仅当 ≥8 节点且尺寸比 < 1.5(严重视觉层次缺失)才 ERROR。

### ④ 编译验证
```bash
# 字体探测:若 PingFang SC 不存在,自己改 .tex 里的 \setCJKmainfont 为本机可用字体
fc-list | grep -qi "PingFang SC" || echo "WARN: PingFang SC 缺失,请改 \setCJKmainfont"
xelatex -interaction=nonstopmode file.tex
grep "Missing character" file.log     # 静默失败检查,关键
pdftoppm -png -r 300 file.pdf out     # 产出 out-1.png
# overlap.json 落在 .tex 同目录(sub-agent ④.5 步用 Read 读这个绝对路径)
python3 references/pdf-overlap-checker.py file.pdf --json > "$(dirname file.pdf)/overlap.json"
# 跑完检查 overlap.json — 7 类检测:
#   基础 5 类(直接 fix): text-overlap / text-overflow / off-center / text-line / line-crossing
#   candidate 2 类(需 triage): line-through-node / node-overlap
# ERROR 类大概率是真 bug 直接修;candidate 类是几何线索(heatmap 矩阵 / fan-in 收敛
# / panel 边界等常误报),sub-agent 在 ④.5 自评时按坐标对照 PNG 决定 fix 还是 ignore。
```
draw.io:`xmllint --noout file.drawio && drawio -x -f pdf -o out.pdf file.drawio && pdftoppm -png -r 300 out.pdf out`。

### ④.5 **视觉反馈强制闭环(架构核心,不可跳过)**

**你的代码生成是"盲写"——写到第 800 行 TikZ 时你不知道渲染出来什么样**。所有标签碰撞、轴标题压字、生命线超界、子模块挤压、数学符号渲染怪——这类问题闸门 1+2 都检测不到,只有看到 PNG 才能发现。

**目标重述**:用户要的不是"一次性生成",是"最终交到他手上的图必须完美"。**中间迭代多少轮无关紧要,只要图最后是完美的就行**。

**强制流程**:

```
0. Read 渲染出的 out-1.png + 视觉直觉先行(应用 3 大法则,见下)
1. Read overlap.json(路径 = .tex 同目录的 overlap.json,步骤 ④ 跑出来的结构化几何检测)
2. 加载 references/visual-review-checklist.md(18 项强制审查清单)
3. 逐项回答 46 个 Y/N:S1-S10(空间)/ T1-T7(文字)/ M1-M10(语义)/ E1-E14(连线精度)/ A1-A5(美学)
   每项必须有一句证据("我在 PNG 中看到…" 或 "overlap.json 中 N 处 line-through-node 我标为 …"),不允许凭印象
4. 任一项 N → 列入 blocker → 输出 patch → Edit → 回 ④ 重编译 → 回 0
5. Step 0 + 全部 18 项 Y → **把图给用户看**(用户终审,AI 视觉有盲区)
6. 用户也通过 → 交付
```

**Step 0:视觉直觉先行(在 18 项 Y/N 之前必走)**

把自己当成第一次看这张图的读者,**用 3 大法则扫描整图**,输出 **5** 段证据:

| Step 0 检查 | 输出要求 | 法则 |
|---|---|---|
| **A. 3 秒第一印象** | 写出"3 秒内看到的 3 件事"(如 "蓝色主流左→右 / 中间有 hero / 右侧 3 个 head")| 法则 1 |
| **B. 主线眼睛轨迹** | 找出图中**最重要的那条数据流**,用眼睛沿它从起点走到终点。任何"卡住"位置 = blocker(如 fig97 Pedersen 框里跑出箭头 / fig118 tip 撞坐标 / fig120 孤立彩点) | 法则 2 |
| **C. 删除测试** | 列出**疑似可删的元素**(孤立装饰 / 多余 leader / 重复 label)。空则一句 "无可删元素" | 法则 3 |
| **D. 审美退步测试**(round ≥ 2 时) | 对比上轮 PNG,本轮修了 X bug 但有没有引入新审美问题(对称丢 / 平行断 / 间距不均)? | 法则 3 |
| **E. 大块空白 + ①注释核验** | 扫描整图无 > 3cm × 2cm 大块空白(细线不算填充,必须有 box/text/viz);figure.tex 头部有 form A/B 注释块。**fig137 教训**:写"rail 填充"= 自欺。若有大空白 → 回 ① 重新规划布局,不是改 .tex | 法则 3 |

**Step 0 任一项 fail = blocker**,列入 patch 列表。**Step 0 通过才开始 Step 3 的 18 项**。

**为什么 Step 0 在 18 项之前**:18 项是机械验证(细节体检),容易陷入"逐项 Y / 整体烂"。Step 0 是视觉直觉(整体心电图),强迫 sub-agent **以读者视角看图**而不是 generator 视角。两者缺一不可。

**overlap.json 处理**(S8 + E12 配套):
- `errors[]` 中的 text-overlap / text-overflow / off-center / text-line **大概率是真 bug**——按坐标定位 PNG,修
- `errors[]` 中的 line-through-node **是候选**(E12)——逐条 triage:
  - 矩阵 cell / 热力图 / 神经网络收敛节点的 hit → ignore(semantic 故意,已知误报)
  - 路径绕路穿过无关元素(如 dashed leader 穿过 box / 长曲线压在 node 上) → fix,重新 routing 或换 z-order
- `errors[]` 中的 node-overlap **是候选**(S8)——逐条 triage:
  - drop-shadow / parent-child 都已被 filter,命中的几乎都是真问题
  - panel-overflow 边界节点(如 PGM 节点底部超 panel 1-3pt) → 调坐标
  - 两个 sibling node 真重叠 → 分开
- 把 triage 决定写进 ④.5 自评的 S8 / E12 证据里("node-overlap N 处:X 处 fix(panel 边界),Y 处 ignore";"line-through-node N 处:M 处 fix(路径绕路),K 处 ignore(矩阵 cell)")

**优化规则**(Batch 9 实测:fig89 耗 32min / fig86 耗 55min,多数时间在重复 Read 和 triage):

1. **Reference 文档只首轮加载** — `SKILL.md` / `lessons.md` / `visual-patterns.md` / `step1-instructions.md` / `visual-review-checklist.md` 在 round 1 Read 一次后,**后续 round 不要重复 Read**(context 里已有)。只 Read 变化的:PNG + overlap.json + 你刚 Edit 的 figure.tex 片段
2. **空检测跳过 triage** — `overlap.json` 中 `line-through-node` 数组为空 → E12 直接答 Y:"overlap.json 中 0 处 candidate"。`node-overlap` 同理 → S8 直接 Y。**不要为空数组写 reasoning**
3. **Triage 增量化** — round N 时只对 round N-1 之后**新出现**的 candidate 写 reasoning;之前 triage 过的复用结论("同 round 1 第 3 处,仍 ignore")
4. **ERROR 优先于 candidate** — 先把 `text-overlap` / `text-overflow` / `text-line` / `off-center` 这 4 类 ERROR 修完(这些大概率是真 bug),再回头 triage candidate。避免一边修 ERROR 一边重新 triage 同一批 candidate

**效率规则(避免 2-3x 时间膨胀)**:

1. **Reference docs 只在 round 1 Read 一次** —— `SKILL.md` / `lessons.md` / `visual-patterns.md` / `step1-instructions.md` / `visual-review-checklist.md` 在 round 1 加载到 context 后,后续 round **不要再 Read**——已经在 context 里。**仅 PNG / overlap.json / figure.tex 每轮 Read(这些会变)**。
2. **Empty candidate 跳过 triage** —— 如 overlap.json 的 `line-through-node` 数组为空,S8 / E12 直接答 "Y, 0 候选无需 triage" 即过;非空才逐条分析。
3. **Triage 缓存** —— round N 的 overlap.json triage 结论保留到 round N+1;只对**新出现**的 candidate(坐标或类型变了)写新 reasoning,已 triage 过的同坐标 candidate 直接复用 "round N 已判 ignore"。
4. **Triage 延后** —— 优先修 text-overlap / text-overflow / off-center / text-line 这 4 类 ERROR(**真 bug**),全清后再开始 triage line-through-node / node-overlap candidates。避免每轮都重新分析 candidate。

这 4 条联合预计节省 30-50% 时间,质量不损失。

**高漏检盲区**:checklist 里带 ⭐ 标记的项(S8/S9/M8/E3/E9/E12)是 R3-100 实测高漏检 — 审查时优先盯。

**没有轮数上限**。这是和之前最大的区别——之前 max 2 轮意味着"凑合交付",现在是**只要还有 1 个 blocker 就不能交付**。3 轮、5 轮、8 轮都可以,只要最终的图是完美的。

**心理对抗**:你会在 2-3 轮后产生强烈的"差不多就过了"冲动——这是认知疲劳,不是图变完美了。**冲动出现 = blocker 还在**。强迫自己回答每项,写出证据。**用户看 1 眼能发现你 2 轮后漏掉的问题——说明单视角自评不可靠,必须靠清单穷举**。

**升级机制**:
- 第 3 轮还有 ≥5 blocker → 局部修补无救,回步骤① 重新设计画图指令
- 同一 blocker 连续 2 轮没修好 → 你修的方向错了,换思路
- 复杂图(≥40 元素)可并行 spawn 4 个子 agent 各盯一个维度,统一收集 blocker
- **自评 + 对抗 agent 全部说 0 blocker 后,仍然把图先给用户看**——人眼能发现 sub-agent + 自评全漏掉的问题(实测案例:用户在 Round 10 一眼指出 CMAM 标题切断边框、箭头刺入框内、junction dot 被 tip 戳——这 3 个我和 2 个对抗 agent 全没发现)。**用户的视觉是最后闸门,不是绕过点**。

**强制约束**:交付前必须能说出 PNG 里**具体的视觉细节**(哪些颜色在哪、哪个 zone 在哪一侧、热力图对角线特征等),证明你视觉输入过。

**单点最小修改原则**:每轮 patch 只改一类问题(如"全部标签重叠"或"全部轴标题没下移"),不要一轮里大改——大改会引入新 bug。一轮一类 blocker。优先用 `yshift/xshift` 微调位置,避免改坐标主框架。

### ⑤ 用户终审 + 交付
1. **把 PNG 给用户看**(不是询问"我做完了吗",是直接展示结果)
2. 有参考图时同时跑 `python3 references/figure-diff.py <ref.png> <out.png>` 得 SSIM;< 0.85 的 3×3 区域和用户一起重点看
3. 用户指出问题 → 回 ④.5,把问题作为新一轮 blocker;用户没问题 → 交付

**步骤⑤ 不再独立做"自审三遍法"**——所有自审已经在 ④.5 的 30 项穷举里做过。把同一组审查做两次只是认知疲劳的来源,不是质量提升。

### ⑥ 迭代到完美(无上限)

**没有轮数表,没有"3 轮够了"**。规则极简:
- **还有 blocker → 继续修**(不管这是第 2 轮还是第 8 轮)
- **同一 blocker 连续 2 轮没修好 → 修复方向错了,换思路**
- **第 3 轮还有 ≥5 blocker → 局部修补救不了,回步骤① 重新设计画图指令**

用户的目标重述:"中间迭代多少轮无关紧要,只要图最后是完美的就行"。**绝不允许"凑合交付"**——"改了 3 轮差不多了吧"是认知疲劳的产物,不是质量信号。

### ⑦ 经验沉淀
- 2 次以上才解决的问题 → 追加到 `references/lessons.md` 的 Part 2
- 发现更优参数 → 更新 `lessons.md` 的 Part 1 基线表(**只升不降**)
- 已被全局规则/Python checker 覆盖的内容**不要重复写入**

## Φ 沉淀通道(D 模式 — 用户已有 .tex 入库为新 skeleton)

**触发**:⓪.5 用户选 D 路径。

**前置条件**:
- 用户提供已编译通过的 `.tex` 文件路径
- 文件能 xelatex 编译成功
- 渲染后视觉无明显 bug

**流程**:

```
Φ.1 — 接收 + 编译验证
   - 读取用户提供的 .tex 文件
   - 跑 xelatex -interaction=nonstopmode + pdftoppm -r 150 渲染 PNG
   - 编译失败 → 报告错误,停止入库

Φ.2 — Vision-audit 把关(简化版 ④.5)
   - Read 渲染出的 PNG
   - 走 Step 0(3 大法则)+ 18 项中的关键 6 项(S1 整图对齐 / S5 元素间距 /
     T1 文字渲染 / M3 信息流方向 / E5 箭头清晰 / V1 整体审美)
   - 任何 blocker → 报告给用户,要求修复后再入库

Φ.3 — 分析 layout pattern + 决策入库方式(**关键 gate**)
   - 扫描 .tex 提取结构指纹:zone 数量 / zone 坐标范围 / hero 子结构 /
     嵌入 viz 类型 / 配色(line/fill 色对集合)/ 箭头模式
   - **若 .tex 头部注释明示 "Adapted from Skeleton X"** → 直接判定为 X 变体,
     跳过结构相似度计算
   - 否则与现有 6 skeleton 比对相似度,按 zone 数 + 关键结构(hero 位置/
     side panel/底部图表对)匹配,**三档判定**:
     * **>90% 匹配(结构等同,仅内容/主题不同)** → 默认 skip 入库,
       提示用户"这就是 skeleton X 的 <主题> 应用,直接用 X 即可"。
       若用户坚持入库 → Φ.3 verdict = "变体入库",记录 parent letter
     * **50-90% 匹配(明显借鉴 X 但有结构修改)** → 询问用户
       (a) 合并到 X 作内部变体注释  (b) 作 hybrid 新 skeleton 入库
       后者 → Φ.3 verdict = "结构创新"
     * **<50% 匹配(结构创新)** → Φ.3 verdict = "结构创新"
   - **输出**:verdict + parent letter(若变体)/ 主题 keyword

Φ.4 — 命名 + 字母分配(**按 Φ.3 verdict 分支**)
   - **若 verdict = "变体入库"**:
     - 文件名 = `example-skeleton-{parent}-variant-{domain}.tex`
       例:D 的 MoE 变体 → `example-skeleton-D-variant-moe.tex`
     - **不占用新字母槽**,留给真正的结构创新
   - **若 verdict = "结构创新"**:
     - `ls references/tikz-snippets/example-skeleton-*.tex` 取下一个可用字母
       (当前 B-G 已用,下一个 = H)
     - 询问用户 kebab-case 主题(如 "sankey-flow" / "matrix-grid" / "timeline")
     - 文件名 = `example-skeleton-{letter}-{topic}.tex`

Φ.5 — 自动生成 USAGE header(**含具体生成算法**)
   - 顶部模板字段及生成方法:
     * **标题行**:
       - 创新:"Skeleton {letter} — <layout 一句话描述>"
       - 变体:"Skeleton {parent}-variant — {domain} ({parent}-layout domain variant)"
     * **USAGE**:固定模板 "Sub-agent: copy ENTIRE file as figure.tex,
       change ONLY content (text/labels/numbers). DO NOT touch layout."
     * **LAYOUT MODEL** ASCII 生成步骤:
       a) 扫所有 `\fill[...] rectangle (x0,y0) (x1,y1)` 和 `\draw[...] rectangle`
          提 zone bounding box
       b) 按 y 范围归 row(top/mid/bottom),x 范围归 col(left/center/right)
       c) 画 ASCII box:每个 zone 一个 □,按相对位置布局
       d) **若是变体,直接继承 parent 的 LAYOUT MODEL,加注 "(same as Skeleton X)"**
     * **WHEN TO USE**:从用户提供主题 + 域关键词推断
       (如 "MoE" → "Mixture-of-Experts papers, sparse gating/routing")
       若变体:加一行 "For non-{domain} structurally similar cases, prefer skeleton X directly"
     * **CONTAINS**:自动列清单
       a) 数 `\node[*_node]` count by color (e.g., "4 blue_node + 3 purple_node")
       b) 扫嵌入 viz:heatmap (`\fill` matrix) / bar (`\fill` rect series) /
          curve (`\draw ... smooth`) / radar (`\draw` polar) / formula box (`$...$` in node)
       c) 列 bullet
     * **CONSTRAINTS — DO NOT VIOLATE**:留空 + TODO 注释
       - 若变体:加 "see example-skeleton-{parent}.tex CONSTRAINTS for inherited rules"
       - 加 4-5 个领域专属的 TODO 起跑提示

Φ.6 — 写入库 + 更新索引(**含明确路径与格式**)
   - 写文件:`references/tikz-snippets/example-skeleton-{X}.tex`(X = 完整文件名前缀)
   - 渲染:`xelatex -interaction=nonstopmode` + `pdftoppm -r 100 -png`
     **PNG 输出到 `references/tikz-snippets/previews/example-skeleton-{X}.png`**
     (注意是 `previews/` 子目录,不是 `tikz-snippets/` 根,与现有 6 个一致)
   - 更新 `references/tikz-snippets/README.md` inline gallery:
     a) 定位 gallery 表(anchor 行:含 `example-skeleton-B-horizontal.tex` 的 markdown 表格)
     b) 插入位置:
        - 创新:最后一行 example-skeleton-G 之后
        - 变体:parent skeleton 行下面,行最后加 "({parent} 领域变体)" 标注
     c) 行格式:
        ```
        | `example-skeleton-X.tex` | **X: <一句话布局描述>** | <主要应用场景> | ![example-X](previews/example-skeleton-X.png) |
        ```

Φ.7 — 提醒用户后续补 CONSTRAINTS(关键防回归提示)
   - "⚠️ 新 skeleton 已入库,但 CONSTRAINTS 段当前是 TODO 占位。
      如果你在画这张图时踩过坑(标签长度上限 / 锚点选择 / 路径形状 /
      box 宽度依赖等),请手动补充到这一段。
      这是防止未来 sub-agent 复用时重新引入 bug 的关键——参考
      D/E/F/G 的 CONSTRAINTS section 写法。"
```

**Φ 与 ⑦ 经验沉淀 的区别**:
- ⑦ 沉淀**抽象 lessons 与基线参数**(写入 `references/lessons.md`)
- Φ 沉淀**完整可复用的 figure 模板**(写入 `tikz-snippets/example-skeleton-X-*.tex`)
- 两者独立工作,可在同一会话各做各的

**Φ 的杠杆价值**:每入一个 skeleton,未来 N 个 user/session 都能复用。**库是 self-growing 的**——这是 thesis-figure-skill 长期复利的核心机制。

## 设计原则(对抗模型惯性)

容易陷入的刻板印象(必须警惕):
- "心里有数,直接写代码" → **禁止跳过步骤①**,"想了"≠"想清楚了"
- "我能估比例" → **不行**。复刻必须像素级测量,凭感觉偏差 15-20%
- "框的大小差不多就行" → 不行。参考图通常扁宽 2:1~3:1,**默认不要正方形**
- "改了 3 轮差不多了吧" → 标准不会因为努力降低。还有 blocker 就继续修
- "这个小重叠用户看不出来" → 看得出来。300dpi 下清清楚楚
- "坐标差 0.2cm 没关系" → 0.2cm 在渲染图上是 24 像素
- "信息密度不够就硬塞东西" → **反例**。简单论文图就该简单——贝叶斯网络/几何/对比图天然元素少,强加 hero 和嵌入可视化是污染。`tikz-design-linter` 现在是 advisory,按论文实际复杂度决定密度

**信息密度匹配论文复杂度**:复杂模型架构图允许 30+ 元素 + hero 子结构 + 嵌入可视化;简单流程图 5-10 元素 + 清晰布局就够了。**不要把所有图都画到最大复杂度**。详见 `step1-instructions.md` 的"信息密度判断"。

## 常见图表类型

| 类型 | 布局 | 场景 |
|------|------|------|
| 系统架构图 | 自下而上分层 | 端→云→链、硬件→中间件→应用 |
| 协议/流程图 | 左→右或上→下 | 时序步骤、信号处理 |
| 数据流水线 | 左→右水平串联 | 输入→处理→输出,每步不同形状 |
| 电路/约束原理 | 左→右 | ZK 电路、信号管线、编译器 |
| 数据映射/转换 | 左-中-右三栏 | 格式转换、API 适配 |
| 时序交互 | 多列生命线+水平消息 | 多方协议 |
| 对比方案 | 左右并列 | 方案 A vs B,中间 ≥3cm |
| 几何/数学 | 坐标系+几何元素 | 算法原理、向量关系 |
| 技术路线图 | 三层分区(draw.io 模式 A) | 科研展示 |
| 同心嵌套 | 多层嵌套椭圆(draw.io 模式 B) | 宏观→微观 |
| 流水线链条 | 圆形节点+加号(draw.io 模式 C) | 技术叠加 |
| 侧栏+中心 | 左右侧栏+中心嵌套(draw.io 模式 D) | 技术突破+路径 |
| 总论-展开-归纳 | 顶部→三栏→底部(draw.io 模式 E) | 创新+应用+方案 |
| 分层技术路线图 | 背景→问题→框架→路线→结论(draw.io 模式 F) | 毕业论文路线图 |
| 多实例汇聚 | 横排三列→汇聚 | 联邦学习、分布式 |
| 数据可视化混合 | 框图内嵌波形/柱状/热力图 | 信号处理、深度学习注意力 |

## 按需加载索引

确定图表类型/工作流阶段后**才**加载对应文件:

| 触发条件 | 文件 |
|---------|------|
| 进入步骤① | `references/step1-instructions.md` |
| 步骤②(任何 TikZ 图,**必加载**) | `references/lessons.md` + `references/visual-patterns.md` |
| 步骤③ 决策门 | `references/figure-spec.schema.md`(B 路 spec) |
| 步骤③ 走 B 路 → 跑 `dot-to-tikz.py` | (脚本,不需 Read) |
| 步骤③ 走模板/从零 → 用 TikZ | `references/tikz-global-rules.md` + `references/tikz-template.tex` |
| **步骤③ 复杂档需嵌入 viz / panel / 公式** | **`references/tikz-snippets/` ⭐ 优先用 snippet 拼装而不是从零写**(含 6 个手工精雕模板:attention-heatmap / bar-chart / hyperparams-table / multi-zone-palette / pipeline-stages / formula-box) |
| 步骤④.5 视觉反馈每一轮 | `references/visual-review-checklist.md`(18 项强制清单) |
| 配色需求 | `references/tikz-colors.md` |
| 分层架构图 | `references/layered-architecture.md` |
| 时序交互图 | `references/sequence-diagram.md` |
| 数据流水线图 | `references/data-pipeline.md` |
| 三栏映射图 | `references/three-column-mapping.md` |
| 几何/数学示意图 | `references/geometry-math.md` |
| 含数据可视化的图 | `references/data-visualization.md` |
| draw.io 科研展示图 | `references/drawio-modes.md` |
| 步骤⑤ 有参考图 | `references/figure-diff.py`(脚本) |

**未列出的文件不要加载**——节省 token。

## Python 助手脚本(执行即可,不要 Read)

| 脚本 | 用途 | 何时跑 |
|------|------|--------|
| `dot-to-tikz.py <spec.json>` | B 路:spec → graphviz 自动布局 → TikZ | 结构化图 step ③ |
| `tikz-validator.py <file.tex>` | 微斜线/溢出/碰撞/方向反转(几何/语法 gate) | 编译前必跑 |
| `tikz-design-linter.py <file.tex> [--type ...]` | 元素数/尺寸比/线型/hero/嵌入viz(设计野心 gate) | 编译前必跑 |
| `pdf-overlap-checker.py <file.pdf> [--json]` | PDF 坐标级重叠 + 线穿节点 + 节点重叠几何检测(**7 类**:text-overlap / text-overflow / off-center / text-line / line-crossing / line-through-node / node-overlap) | 编译后必跑 |
| `figure-diff.py <ref.png> <out.png>` | SSIM + 3×3 区域差异 | 复刻任务必跑 |
| `tikz-path-router.py <spec.json>` | A* 自动避障路径 | 连线 ≥8 条可选 |

这些脚本**作为黑盒调用**——不要把源码读进上下文,跑 `--help` 看参数即可。

## 领域自适应

收到输入后**先识别论文领域**(计算机/密码学/生物/物理/化学/AI/网络/系统/区块链等),以该领域专家身份选术语和布局风格。

Files in this skill

  • SKILL.md44.8 KB
  • references/data-pipeline.md3.4 KB
  • references/data-visualization.md12.2 KB
  • references/dot-to-tikz.py14.8 KB
  • references/drawio-modes.md35 KB
  • references/figure-diff.py6.5 KB
  • references/figure-spec.schema.md2.8 KB
  • references/geometry-math.md4.6 KB
  • references/layered-architecture.md6.4 KB
  • references/lessons.md82.7 KB
  • references/pdf-overlap-checker.py39.7 KB
  • references/sequence-diagram.md12.2 KB
  • references/step1-instructions.md9.6 KB
  • references/three-column-mapping.md4.1 KB
  • references/tikz-colors.md3.5 KB
  • references/tikz-design-linter.py21.7 KB
  • references/tikz-global-rules.md34.9 KB
  • references/tikz-path-router.py10.4 KB
  • references/tikz-snippets/COMPOSITION-RULES.md3.9 KB
  • references/tikz-snippets/README.md8.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.