19.4 引用管理与验证

面向经管学生、研究者与从业者的 AI 智能体设计教材

作者

李学恒、林建浩、严翊歆

发布于

2026-05-11

引用管理三步流水线

引用的准确性是学术写作的底线。一条错误的引用——作者名拼错、年份写错、甚至引用了一篇不存在的论文——足以损害整篇综述的可信度。这一节介绍如何用 /citation-management Skill 和 Zotero MCP 系统化地管理引用。

元数据提取:extract_metadata.py

从标识符获取完整的引用元数据,是引用管理的第一步。extract_metadata.py 通过 CrossRef API 将标识符转换为格式化的 BibTeX 条目,无需 API 密钥。

它支持三种标识符:

标识符 参数格式 适用范围
DOI --doi 10.1257/aer.89.5.1279 已发表的期刊论文
PMID --pmid 34265844 PubMed 收录的论文
arXiv ID --arxiv 2103.14030 arXiv 预印本

脚本自动生成规范的引用键(AuthorYearKeyword 格式),正确处理页码范围中的连字符(--),输出可直接用于 LaTeX 编译。输出格式示例:

@article{Odean1998overconfidence,
  author  = {Odean, Terrance},
  title   = {Are Investors Reluctant to Realize Their Losses?},
  journal = {The Journal of Finance},
  year    = {1998},
  volume  = {53},
  pages   = {1775--1798},
  doi     = {10.1111/0022-1082.00072}
}

单篇和批量提取都通过 /citation-management Skill 调用,无需手动运行脚本。

选择 extract_metadata.py

citation-management 包含 6 个脚本,其中 extract_metadata.pydoi_to_bibtex.py 都能从 DOI 获取 BibTeX。推荐使用 extract_metadata.py——它的输出质量更高,BibTeX 格式规范。doi_to_bibtex.py 存在编码问题(页码范围中的短横线显示为乱码),不推荐使用。

Zotero MCP BibTeX 导出(替代路径)

如果论文已在 Zotero 库中,可以直接用 MCP 导出 BibTeX:

▶ Claude Code
导出 Zotero 中 item key 为 B4EZFZWP 的文献元数据为 BibTeX 格式,
保存到 citations/references.bib

两条路径的选择:Zotero 库中已有的论文用 MCP 导出更快;新发现但尚未入库的论文用 /citation-management 从 DOI 提取。

格式化与去重:format_bibtex.py

从不同来源汇集的 BibTeX 条目,格式和字段顺序参差不齐。format_bibtex.py 完成三件事:

  1. 去重:按 DOI 和引用键检测并移除重复条目
  2. 排序:按发表年份排序,最新的论文排在最前
  3. 格式统一:规范字段顺序和缩进
format_bibtex.py 默认覆盖原文件

脚本默认将格式化结果写回输入文件。如需保留原文件,在 /citation-management 指令中注明输出到不同路径:

▶ Claude Code
用 /citation-management 格式化 references.bib,去重并按年份降序排序,
输出到 references_clean.bib,保留原文件

字段验证:validate_citations.py

validate_citations.py 检查 BibTeX 条目的完整性,检测三类问题:

问题类型 示例 严重程度
必填字段缺失 缺少作者或标题 错误
推荐字段缺失 缺少 DOI 或卷号 警告
重复条目 同一篇论文出现两次 错误

检测结果输出为 JSON 报告,便于批量处理。

已知限制

validate_citations.py 有两个已知问题需要注意:

  1. --check-dois 功能存在误报——有效 DOI 可能被判定为无法解析。建议只使用基础字段验证,不加 --check-dois 参数。
  2. --auto-fix 参数当前不可用。发现问题后需要根据验证报告手动修复。

引用管理的完整流程

将上述工具串联,形成一条引用管理流水线:

flowchart LR
    A["DOI 列表<br/>(从摘要表提取)"] --> B["extract_metadata.py<br/>提取 BibTeX"]
    B --> C["format_bibtex.py<br/>去重 + 排序"]
    C --> D["validate_citations.py<br/>字段验证"]
    D --> E["干净的 .bib 文件<br/>(可用于 LaTeX)"]

flowchart LR
    A["DOI 列表<br/>(从摘要表提取)"] --> B["extract_metadata.py<br/>提取 BibTeX"]
    B --> C["format_bibtex.py<br/>去重 + 排序"]
    C --> D["validate_citations.py<br/>字段验证"]
    D --> E["干净的 .bib 文件<br/>(可用于 LaTeX)"]

/citation-management Skill 将上述三个脚本封装为一条指令。调用时,Skill 根据提示词中描述的任务目标自动选择并依次执行相应脚本,读者只需描述想要的结果:

▶ Claude Code
用 /citation-management 处理引用管理流水线:
1. 从 literature_notes/summary_table.md 中提取所有论文的 DOI,保存为 citations/doi_list.txt
2. 用 extract_metadata.py 从 DOI 列表批量提取 BibTeX,输出到 citations/raw.bib
3. 用 format_bibtex.py 对 citations/raw.bib 去重排序,输出到 citations/references.bib
4. 用 validate_citations.py 验证 citations/references.bib,生成报告到 citations/validation.json
列出验证报告中发现的问题。