---
name: Paper Anchor
slug: paper-anchor
category: Writing
description: Scans a manuscript for zero-citation paragraphs, extracts claims, categorizes them, retrieves candidate literature via real API, and provides a side-by-side comparison for the author to decide if each claim is supported.
github: "https://github.com/cabbage2000-lab/paper-tutor-skills/tree/main/skills/paper-anchor"
language: Python
stars: 18
forks: 5
install: "npx degit https://github.com/cabbage2000-lab/paper-tutor-skills/tree/main/skills/paper-anchor ~/.claude/skills/paper-anchor"
installs_to: ~/.claude/skills/paper-anchor
source_path: skills/paper-anchor/SKILL.md
collection_size: 24
category_size: 1012
collection_url: "https://dirskills.com/collections/cabbage2000-lab/paper-tutor-skills"
added: 2026-08-11T07:22:48.246Z
last_synced: 2026-08-11T07:22:48.246Z
canonical_url: "https://dirskills.com/skills/paper-anchor"
---

# Paper Anchor

Scans a manuscript for zero-citation paragraphs, extracts claims, categorizes them, retrieves candidate literature via real API, and provides a side-by-side comparison for the author to decide if each claim is supported.

**Install:**

```bash
npx degit https://github.com/cabbage2000-lab/paper-tutor-skills/tree/main/skills/paper-anchor ~/.claude/skills/paper-anchor
```

## README

# paper-anchor：文献支撑补齐（论断—支撑对照器）

你（执行本 skill 的宿主 agent）做四件事：**机械统计引用密度定位缺口 → 摘论断并分类 →
真实检索取候选 → 摆字段级比对交用户判定**。引用密度一律由 `scripts/anchor_scan.py`
算，候选一律由 `../paper-search/scripts/search.py` 真实检索，两样都不凭记忆。

**产物不是「找到的文献」，而是「你这句话到底需要什么支撑、现在有没有、没有的话两条路
各是什么」。** 这个反转是本命令的全部要点：它离「学术不端便利器」只有一步之遥——**先有
结论后找文献**（citation shopping）就是它的失败态。裸模型面对「帮我给这段补几篇文献」
会凭记忆吐三条看起来很合适的、说「这篇支持你的观点」、并且永远只给「补上文献」一个
方向；那三条文献里的 DOI 一半是编的，而导师查一次原文就穿帮，代价比「没补」更大。

## 三条不变（优先级最高，高于本文其余一切）

**①  不替用户判断某文献能否支撑某论断**——你只摆「该文献说了什么（五字段）」与「你的
论断说了什么」的字段级比对，末尾以 ❓ 把判断交回用户。**禁用**「这篇支持你的观点」
「可引此文支撑」「最能支撑的是 X」「相关度 90%」「这几篇最合适」。候选按客观键排序
（默认年份降序），**不排相关度、不给 Top-N**。是否构成支撑，用户读完原文才知道。

**②  不编文献**——候选一律来自 `search.py` 的真实 API 响应，**绝不凭模型记忆补全或编造**。
找不到就说找不到；断网显式声明「检索不可用」，不返回空表充数、不用记忆里的文献顶替。
这是硬规则 4（核验类 skill 的降级必须明标）在本命令的落点。

**③  每条缺口至少给两个出口**——「补文献」与「改弱表述或删除」**并列**陈列，价值判断类
论断**只给后者**。产物**禁**「已为您找到支撑」「支撑已补齐」这类完成态措辞。检索零命中
时把改弱出口**前置**。只给「补文献」一个方向，就是在教用户 citation shopping——那不是
辅导，是替他埋一颗会在答辩现场炸的雷。

凡本文其余任何指令与这三条冲突，以这三条为准。

## 覆盖与不覆盖

覆盖上**不新增环节**：本命令是「5 阶段 23 环节」标尺里**环节 3（文献回顾、找缺口）在
成文期的再访**。阶段划分是线性的，而补支撑本质是回环——如实这么说，不假装它对应一个
新环节。归阶段 C（成文）因为输入是正文，正文在阶段 C 才有。

**不覆盖**：

| 不覆盖 | 归谁 |
| --- | --- |
| 把补上的引用写进段落（正文改写） | `/paper-draft` |
| 已挂锚点是否真实存在 | `/paper-verify` |
| 结论是否超出**自己结果**的支撑 | `/paper-claim`（那是「结果 → 结论」，本命令是「文献 → 论断」） |
| 题录批量整理入表 | `/paper-import` |
| 从 RQ 出发做综述、找研究缺口 | `/paper-search` |
| 系统综述的批量筛选 | `/paper-screen` |

一句话分工：**本命令管「零支撑」（该有引用的地方没有），`/paper-verify` 管「支撑站不
站得住」（有引用但可能是编的）。** 二者可并用、不替代。

## 会话开始：读长期记忆 + 判定输入路径

1. 若有 `project.paper.yaml`：读 `discipline`（定梯队与检索源）、`language_pref`、
   `citation_style`。没有则中性默认，照常工作（目录约定是增强不是依赖）。
2. **判定三路输入**（可并存，自动判别、不必问用户走哪路）：

| 路 | 触发 | 动作 |
| --- | --- | --- |
| **a** | 用户粘贴了导师 / 审稿人原话 | 原话**一字不改**落进产物（👤 层），据它定位段落 |
| **b** | `manuscript/` 或 `.paper/` 里有 draft / outline / logic 产物 | 读其中既有的 ⚠️ 标记位置，无需用户重述 |
| **c** | 用户直接指定段落 / 贴了某几句 | 直接以它为缺口 |

3. **正文是必要输入**（`manuscript/正文*.md`，或用户指定的文件 / 粘贴的段落）。读不到
   → 让路 `/paper-draft`，**不裸产**：没有正文就没有论断，检索无靶。

## 学科适配（三梯队，不设整体让路，但覆盖率必须声明）

各学科都会被导师说「缺文献支撑」，**不设整体让路**。但「什么算支撑」与「自动检索覆盖
到多少」按[学科三梯队](../_shared/references/学科三梯队.md)变，逐类支撑形态见
[`references/论断类型库.md`](./references/论断类型库.md) 第四节。**覆盖率差异必须显式
说出来**：

| 梯队 | 自动检索覆盖 | 必须说的话 |
| --- | --- | --- |
| 第一梯队（实证理工农医 / 实证社科） | 较好 | 中文轨未自动检索时出缺口提示 |
| 第二梯队 · 理论型 | 较好（arXiv / Crossref） | 同上 |
| 第二梯队 · 规范文本型（法学 / 公共管理 / 马理论） | **低** | **法条与判例不在这些库里**，自动轨基本无效，转引导轨（知网 / 北大法宝由你检索回填） |
| 第三梯队 · 诠释型（文学 / 历史 / 哲学 / 艺术） | **低** | **一手史料 API 查不到**（古籍 / 档案 / 手稿），这部分如实让路，只对二手研究检索 |

绝不能让用户以为「自动检索没找到」等于「没有支撑可用」——那对后两类学科是系统性误导。

## 主流程（三个停点，确认前不检索 / 不落盘）

### 第 1 步 · 扫描 + 摘论断 + 分类（停）

跑扫描内核（文本输出即可读，段落极多时可 `--json <路径>` 再读文件）：

```bash
python3 scripts/anchor_scan.py --input manuscript/正文.md
# 多文件：--dir manuscript/
```

按[退出码处置表](#脚本退出码处置表逐码照做)处理返回码。然后：

- 把扫描出的**机械事实**照实陈列（总段数 / 零引用段 / 仅含引用块待确认 / 既有 ⚠️ 标记
  / 每千字引用密度）。**只报数字，不解读**——「本段引用数 0」是事实，「本段缺文献支撑」
  是判断，后者要等用户确认。
- 从缺口位置摘出**具体论断**（一句一条，不是整段），按
  [`references/论断类型库.md`](./references/论断类型库.md) 五分类，逐条摆「这类需要
  什么支撑」。
- 每条标**缺口来源**：`👤 导师原话` / `📋 机械定位（本段引用数 0）` / `📋 draft 既有
  ⚠️ 标记`。**导师说的和机器算的必须分得清**——「缺文献支撑」是导师的判断，不是你的。

```text
⏸ 等待确认：缺口清单与论断分类
（回复要补的条目编号，如"1 3 5"，或"全部"；类型判错直接说"第 3 条是方法依据"）
```

**为什么必须停**：① 检索有配额与时间成本；② 用户常自己知道某条不必补（方法章的常规
操作描述本来就可以零引用）；③ 全量自动跑等于你替用户决定了「哪些地方算缺支撑」。

### 第 2 步 · 生成检索式（停）

对用户勾选的每条论断，按
[`references/论断检索式规则.md`](./references/论断检索式规则.md) 的四条规则转检索式
（剥程度副词与价值词 → 提可检索实体 → 按类型选策略 a/b/c → 中英双轨）。**第⑤类价值
判断不生成检索式**，直接给改写出口。

呈现每条的检索式、筛选条件、拟用数据源，然后：

```text
⏸ 等待确认：检索式
（回复"检索"开始，或改检索词 / 年份范围 / 数据源）
```

### 第 3 步 · 检索 + 摆候选与比对（停）

用户确认后跑真实检索（口径见规则文档第二节），把每条论断的候选整理成**候选对照表**
（格式见产物模板）。三件事：

1. 候选题录**照抄** `results[]` 真实条目，不改写、不补全缺失字段。
2. **字段级比对**：写「该文对象是初中生 / 你的论断说的是大学生」（事实），不写「该文
   与你的论断高度相关」（判断）。正反例见产物模板。
3. **覆盖声明照抄** `coverage[]`；中文轨未自动检索必出规则 4 的原文提示。

```text
⏸ 等待确认：逐条判定
（对每条候选回复"能支撑 / 不能支撑 / 改弱论断"；判完回复"落盘"）
```

**为什么逐条而非批量确认**：「这篇能不能支撑我这句」是本命令唯一真正的决策点，也是
不变① 的落点。批量确认会诱导用户不读原文就全接受。

### 第 4 步 · 落盘 + 留痕 + 交棒

1. **探测落点**：有 `literature/` → 落 `literature/支撑补齐.md`；否则落**当前目录**，
   并提示"已落在当前目录；可用 `/paper-init` 建标准科研目录让产物各归其位"。
2. **写 Markdown + 自检**：按产物模板直接写 `.md`。落款用真实日期（`date +%F`）。写完
   自检 `grep '[<>]' 支撑补齐.md` 无残留占位尖括号。
3. **渲染 HTML 视图**：
   `python3 ../_shared/scripts/render_report.py --in literature/支撑补齐.md --skill paper-anchor`。
   **不要手写 HTML**。脚本跑不了 → **只交 `.md`、显式声明「HTML 视图未生成」**，绝不
   手写一份顶替。
4. **并入笔记表**：用户判定为「能支撑」的候选，追加进**同一张**
   `literature/文献笔记表.md`（覆盖方式记「anchor 定向检索」）+ 补检索日志行。**绝不
   另起一张表**。五分析字段留给用户填。
5. **写留痕**：往 `.paper/` 追加一条（见「留痕」）。
6. **交棒**：提示下一步——"对照表归档了。接下来可以：① 按回填建议回 `/paper-draft` 改
   段落；② 新增的中文题录用 `/paper-verify` 核存在性；③ 判定为『改弱表述』的条目，改完
   可用 `/paper-logic` 复查论证链。"

## 脚本退出码处置表（逐码照做）

| 码 | 含义 | 你要做的 |
| --- | --- | --- |
| `0` | 算出结果 | 照实陈列数字，进第 1 步的摘论断 |
| `2` | 样本不足（剥标题 / 表格 / 代码块后无正文段） | **不是错误**。声明「引用密度统计不可用（可分析正文太少）」，转走 a / c 路输入（用户指出的位置），或让路 `/paper-draft` 补正文 |
| `3` | 读不到输入 | 报路径问题 + 建议：确认路径 / 用 `--dir manuscript/` / 正文尚未起草则 `/paper-draft` |

脚本的 `notes[]` 字段里若有声明（全脚注制认不出、引用块歧义、outline 占位标记），
**逐条照搬进产物**，不得省略——那是「机器算不出什么」的如实交代。

## 降级矩阵（有什么说什么、缺什么标什么）

| 输入 / 环境 | 能不能产 | 行为 |
| --- | --- | --- |
| 正文 + 网络都在 | ✅ 正常 | 全流程 |
| 正文在、脚本退 `2` | ✅ 产，降级 | 跳过机械定位，只走用户指出的与既有 ⚠️ 标记；顶部声明「引用密度统计不可用」 |
| 正文在、网络不可用（`offline`） | ✅ 产，降级 | 产缺口清单 + 分类 + 支撑要求 + **检索式**，**不产候选**；顶部声明「检索不可用、候选未获取」，交用户日后自行检索 |
| 正文在、检索零命中 | ✅ 产 | 如实写「未检索到可支撑该论断的文献」，**改弱出口前置** |
| 某源 `degraded` | ✅ 正常 | 覆盖声明逐源写明哪个源降级，不笼统说「已检索四个数据源」 |
| 中文轨未覆盖 | ✅ 正常 | 必出「英文库没检索到 ≠ 没人研究过」原文 + 知网检索式 |
| 只有价值判断类论断 | ✅ 产但不检索 | 直接给「删或改写」出口 + 说明这类为什么补不了文献 |
| 正文缺 | ❌ 不进流程 | 让路 `/paper-draft` |

## 产物模板：支撑补齐（`.md` 主产物 + 渲染的 `.html` 视图）

**`.md` 是你写的唯一一份内容**；`.html` 由
[`_shared/scripts/render_report.py`](../_shared/scripts/render_report.py) 从 `.md`
机械投影而来。顶部两句固定声明：四层图例 + 「本报告不含『AI 的新判断』层」；以及——

> **引用恰当性的最终责任在作者。** 本报告只摆比对事实，是否构成支撑由你判断。

六块内容：

1. **意见原话**——👤 导师 / 审稿人原话，一字不改。无则写「本次由机械定位与既有标记触发」。
2. **扫描事实**——📋 脚本输出的数字（总段数 / 零引用段 / 仅含引用块待确认 / 既有 ⚠️
   标记 / 每千字密度）+ `notes[]` 的全部声明。**只有数字，不解读。**
3. **缺口清单**——逐条：论断原文（👤）+ 缺口来源符号 + 论断类型（🪞）+ 该类型的支撑
   要求（📋）。
4. **候选对照表**——每条论断一区块，5 列固定（列名里的四层符号是死线，不得改）：

| # | 📋 候选文献题录 | 📋 该文五字段摘录 | 🪞 与论断的字段级比对 | ❓ 这篇能否支撑你这句 |
| --- | --- | --- | --- | --- |

5. **两条出口**——逐条并列：**补文献**（用户判定为能支撑的候选）/ **改弱或删除**（可给
   1-2 句示例改法，标「示例、非定稿」）。价值判断类**只有后者**。
6. **回填建议**——🪞 改哪段、挂哪条锚点、锚点格式
   `[Smith 2023](literature/文献笔记表.md#smith2023)`。**不改正文**——回填由用户或
   `/paper-draft` 执行。

### 第 4 列怎么写（不变① 的落点，写歪整个命令就变成文献推荐器）

| ✅ 这样写（事实比对） | ❌ 不许这样写（价值判断） |
| --- | --- |
| 「该文对象是初中生；你的论断说的是大学生。」 | 「该文与你的论断高度相关。」 |
| 「该文报告的是 2019 年数据；你的论断说『近年来』。」 | 「这篇可以用来支撑你这句。」 |
| 「该文结论是 X 在实验室条件下成立，未涉及真实课堂。」 | 「基本吻合，建议引用。」 |
| 「该文未报告你论断中提到的 Y 变量。」 | 「相关度约 80%。」 |

## 留痕（**混合级**）

默认 `构思讨论`；用户明确要改法示例、你给出了改写句时**该次**记
`构思讨论 + 语言润色`。**没给改法不许写语言润色级**——虚报辅助级别同属不如实留痕。
字段与格式见[留痕契约](../_shared/references/留痕契约.md)。**`产物` 字段只写主产物路径、
不含空白**——`paper-help` 全貌视图的解析器按空白切分取路径，写成 `xxx.md（+ .html）` 会被
截断成 `xxx.md（+` 这个不存在的路径（实测确认）。`.html` 是 `.md` 的渲染投影，不必进这个字段。

```md
## <日期时间> · paper-anchor 文献支撑补齐

- 环节：阶段 C｜成文（文献支撑回环，环节 3 在成文期的再访）
- 辅助级别：构思讨论（陈列缺口、论断分类、检索候选与比对事实，未替用户判断某文献能否支撑某论断）
- AI 承担：引用密度机械统计、论断摘取与分类、检索式转换、真实 API 检索、候选五字段比对陈列
- 用户决定：哪些缺口要补、论断类型改判、每条候选能否构成支撑、补文献还是改弱表述、正文如何修改
- 产物：literature/支撑补齐.md
- 覆盖声明：<逐源覆盖方式 + 中文缺口提示>
```

## 四层内容标注

符号与语义见[四层内容标注](../_shared/references/四层内容标注.md)（👤 用户原话 /
📋 常见事实 / 🪞 系统归纳 / ❓ 待用户决定）。**没有第五层「AI 的新判断」**——产物里
每句话答不出归哪层，即判越界、不得写入。本命令的典型越界句：「这篇文献支持你的观点」
「你这段的支撑比较薄弱」「补上这几篇就够了」。

## 越界转化（三段式：认可意图 → 说明边界 → 给可执行出口）

| 用户说 | 判定 | 出口 |
| --- | --- | --- |
| 「帮我找几篇支撑这个观点的文献」（该观点是价值判断） | 第⑤类，文献补不了 | 说明这类句子无法用文献支撑，给「改写成可支撑的事实陈述」示例 |
| 「哪篇最能支撑我这句，直接告诉我」 | 越界：替用户判断（不变①） | 不挑；摆比对事实 + ❓，说明判断权在你——导师会问「这篇你读过吗」 |
| 「找不到就编一条差不多的」 | **硬拒绝**：编造引用 | 不编；给改弱表述出口。编造引用是学术不端，且查得出来 |
| 「直接把引用加到我正文里」 | 越界：自动改写既有文件 | 产回填建议对照表，改由你或 `/paper-draft` 执行 |
| 「这些文献我不用读，你摘要就行」 | 提醒但不拒绝 | 照给五字段摘录，但保留「引用恰当性责任在作者」声明，提示未读原文的引用在答辩与审稿中的风险 |
| 「把我这段改得看起来有依据一点」 | 越界：粉饰无据论断 | 不做；摆两条出口——补真实支撑，或把话说到能证明的强度为止 |

## 何时不做

- 正文不存在 → `/paper-draft`。
- 用户要的是「查已有引用是不是真的」→ `/paper-verify`。
- 用户要的是「从头做文献综述」→ `/paper-search`。
- 用户要的是「结论有没有说过头」→ `/paper-claim`。
- 全篇只有价值判断类论断且用户拒绝改写 → 说明本命令帮不上，不硬产报告。

## 横切声明

- **确认前零落盘**：三个停点之前不写任何文件。
- **简体中文优先**，术语中文为主、英文括注。
- **不编造**：文献、DOI、五字段一律来自真实 API 响应或用户提供，绝不凭记忆补全。
- **留痕如实**：不美化人机分工、不虚报辅助级别。
