Skip to content

Citation Tools zh

shencong edited this page Jun 1, 2026 · 1 revision

🌐 English · 中文 · 🏠 首页

引用与写作工具

人文写作伴侣在 scripts/ 里放了一套小工具,把 SKILL.md 中"工程化严谨"这条原则真正落到地上。逻辑很朴素:AI 自觉性是软规范,脚本是硬机制。 提示词可以承诺"我不编造引用",但承诺总有松动的时候——这时候,一个会去敲 Crossref 的脚本,能把漏网的幻觉逮个正着。

这套工具的设计是零依赖 / 低依赖

  • Python 脚本只用 Python 3 标准库——不需要 pip install 任何东西。
  • Shell 脚本只用 bash + grep——什么都不用装。
  • 一切都失败安全:文件不存在、没有匹配,都返回一句友好提示,绝不甩你一脸报错堆栈。

这一页是三个引用脚本的上手教程,外加两个文风卫生脚本的简介。每个脚本都讲清楚:做什么、怎么跑(确切命令)、真实的输入输出示例,以及它该插在写作流程的哪个环节(也就是 skill 的 A–K 模式)。

开始之前:先 cd 进你的 skill 仓库,下面的 scripts/ 路径才能对上。Python 脚本拿来即用;shell 脚本第一次可能要加执行权限(见首次配置)。


工具链速览

脚本 干什么 离线可用? 流程归属
citation-consistency.py 找出全文引用格式的不一致 ✅ 是 模式 B / 投稿前
citation-format-convert.py 把 BibTeX 库转成 Chicago / MLA / APA 7 / GB/T 7714 ✅ 是 模式 K 前 / 多期刊切换
citation-verify.py 逐条引用对 Crossref 核查(抓 AI 幻觉) ❌ 需联网 模式 B 后、模式 G 前
ai-trace-scan.sh 标记 AI 套话与堆砌的连接词 ✅ 是 模式 F / 模式 B 前
pending-checks.sh 汇总项目里所有未完成的标记 ✅ 是 开工时 / 投稿前

1. citation-consistency.py —— 你的格式统一吗?

做什么

这个脚本读完整篇草稿,只问一个问题:你是不是在每个地方都用同一种方式引用?不是规范检查器——它不知道、也不在乎你遵循的是 APA 还是 Chicago,只盯"漂移":第一章用了半角括号、第三章却变成全角;这里 &、那里

它会找五类不一致:

  1. 括号类型混用——半角 () vs 全角 ()
  2. 引用内逗号混用——, vs
  3. 多作者连接词不统一——& / and / / /
  4. 同一文献姓名形式不一致(一处用中文译名,另一处用英文原姓)
  5. 页码格式不统一——p. X / p.X / 第 X 页

怎么跑

python3 scripts/citation-consistency.py path/to/paper/main.md

接收单个 Markdown 文件。可以对准你拼好的总稿,也可以一章一章地查。

示例

假设 draft.md 里混了几种写法:

观点 A(Foucault,1975)与观点 B (Scott, 1986) 并列。
中文引用(张三和李四,2020,第 33 页)。
另见 (王五 & Smith, 2019, p.12)。

运行:

python3 scripts/citation-consistency.py draft.md

输出:

=== 引用格式一致性扫描 / Citation-format consistency scan · draft.md ===

引用统计 / Citation counts:英文形式 / English form (Author, year) 1 / 中文形式 / Chinese form (作者,年份) 2

⚠ 括号类型混用 / Mixed parenthesis types:少数派占比 / minority share 50.0%(建议全文统一为一种 / recommend unifying to one form throughout)

⚠ 多作者连接词不统一 / Inconsistent multi-author connectors:{'&': 1, '和': 1}
  建议根据所选引用格式(APA 用 & / GB/T 7714 用 , 等)统一全文
  Recommend unifying throughout per the chosen citation style (APA uses & / GB/T 7714 uses , etc.)

⚠ 页码格式不统一 / Inconsistent page-number formats:{'p.X (无空格 / no space)': 1, '第 X 页': 1}

共发现约 3 处需要审查的格式问题 / About 3 format issue(s) need review

如果文件本身很干净,它会报 ✅ 未发现明显的格式不一致 / No obvious format inconsistencies found。当括号/逗号的错配出现在同一行时,报告会精确指到那一行——比如 L3: 全角括号 + 半角逗号 → (张三, 2020)

用在哪

  • 完成一章后的局部一致性检查
  • 投稿前的全文统一性核验(模式 B 与最终一遍)。
  • 引入新文献后的回归检查——新引用恰恰是漂移最容易钻进来的地方。

边界要拎清

这个脚本查的是一致性,不是规范性。它会很乐意地告诉你:你的引用"统一地错着"。要检查格式本身对不对(APA / Chicago / GB/T 7714),请对照 _writing-config/引用格式速查.md 手动核。另外,扫描是启发式正则,偶尔会误报——结果需要人眼复核。


2. citation-format-convert.py —— 一个库,四种格式(v4.0 新增)

做什么

你手上有个 BibTeX 库,目标期刊却指定了某种参考文献格式。这个脚本把你的 .bib 转成一份干净的文献表,四选一,都是人文学科真正在用的:

  • Chicago Author-Date —— 历史与人文学科的主力
  • MLA 9 —— 文学、语言学
  • APA 7 —— 教育、心理、部分社科
  • GB/T 7714(顺序编码制) —— 中文期刊国标,连 [M] / [J] / [C] / [D] 文献类型标识、四位以上作者的 截断都给你处理好

支持的 BibTeX 条目类型:@book@article@incollection@inbook@inproceedings@thesis@phdthesis

怎么跑

# 打印到终端
python3 scripts/citation-format-convert.py refs.bib --to chicago

# 写到文件
python3 scripts/citation-format-convert.py refs.bib --to apa --out refs-apa.txt

# 选排序方式:author(默认)、year、key、input
python3 scripts/citation-format-convert.py refs.bib --to mla --sort year

--to 必填(chicago | mla | apa | gb7714)。--out 可选——不写就输出到 stdout。格式有问题的条目会报到 stderr,绝不悄悄丢掉。

示例

给定 refs.bib

@book{foucault1975,
  author = {Michel Foucault},
  title  = {Surveiller et punir},
  year   = {1975},
  address = {Paris},
  publisher = {Gallimard}
}

@article{scott1986,
  author = {Joan W. Scott},
  title  = {Gender: A Useful Category of Historical Analysis},
  journal = {The American Historical Review},
  volume = {91},
  number = {5},
  pages  = {1053-1075},
  year   = {1986}
}

Chicago Author-Date:

python3 scripts/citation-format-convert.py refs.bib --to chicago
Foucault, Michel. 1975. *Surveiller et punir*. Paris: Gallimard.

Scott, Joan W.. 1986. "Gender: A Useful Category of Historical Analysis." *The American Historical Review* 91, no. 5: 1053-1075.

APA 7:

Foucault, M. (1975). *Surveiller et punir*. Gallimard.

Scott, J. W. (1986). Gender: A Useful Category of Historical Analysis. *The American Historical Review*, *91*(5), 1053-1075.

GB/T 7714(顺序编码制):

Foucault M. Surveiller et punir[M]. Paris: Gallimard, 1975.

Scott JW. Gender: A Useful Category of Historical Analysis[J]. The American Historical Review, 1986,91(5):1053-1075.

注意 GB/T 7714 的几个约定:[M] / [J] 文献类型标识、姓与名首字母之间不加逗号、以及紧凑的 年,卷(期):页码 定位格式。

用在哪

  • 投稿前准备最终参考文献表(目标期刊有特定格式要求时)。
  • 同一论文投不同期刊间切换——几秒钟重新生成整份清单。
  • 模式 K(AI 使用披露)输出之前,让你的文献表先变成目标期刊的格式。

边界要拎清

不是 BibLaTeX / CSL 的替代品。那些引擎能建模每个期刊的特异性变体;如果你的工具链能用 BibLaTeX,就用那个。这个脚本服务的是"飞行中"场景——你手上有 .bib,现在就要给这家期刊出一份清单。还有两条诚实的限制:

  • 每种格式背后都藏着一丛微妙规则和期刊特异性变体。永远要把输出和目标期刊的 style guide 对照着核,把它当草稿而非定稿。
  • 它只生成参考文献——不会碰你正文里的 inline 引用,那需要理解文档结构。

3. citation-verify.py —— 这条引用是 AI 编的吗?(v4.0 新增)

做什么

这就是那个抓幻觉的工具。它扫描 Markdown 草稿里每一条 inline 引用,逐一在公共 Crossref API 中核查存在性。它最拿手的,是编造的期刊文章引用——LLM 凭"记忆"虚构出来、长得人模人样的 (作者, 年份)

它能解析多种风格的引用——Chicago/APA 作者-年份制 (Foucault, 1975, p. 23)、叙述式 Foucault (1975)、以及中文 (福柯, 1975)——再把每条归入三种判定:

  • ✓ FOUND —— Crossref 有高置信度匹配(相似度 ≥ 0.85)。通常可信。
  • ⚠ FUZZY_MATCH —— 近似但不完全匹配(0.5–0.85)。可能是拼写错、年份错,或不同的同名作者著作。需复核。
  • ✗ NOT_FOUND —— Crossref 无匹配。警惕,但别慌(见下方边界)。

怎么跑

# 人类可读报告
python3 scripts/citation-verify.py path/to/draft.md

# 静默 + JSON,用于 CI 或程序处理
python3 scripts/citation-verify.py path/to/draft.md --quiet --json

因为要发真实网络请求,它礼貌地限速到每秒 1 次——一个有 30 条引用的章节大约跑半分钟。默认会把进度打到 stderr;--quiet 关掉进度,--json 把人类报告换成机器可读输出。

示例

给定一篇草稿,一条真引用、一条编造的:

Scott (1986) reframed gender as a category of historical analysis.
A later study (Hallor, 2018) supposedly extended this to digital archives.

运行:

python3 scripts/citation-verify.py draft.md

报告(节选):

=== Citation verification (Crossref) ===
Total citations parsed: 2
  ✓ Found:        1
  ⚠ Fuzzy match:  0  ← review
  ✗ Not found:    1  ← review (or may be off-Crossref humanities work)

## ✗ NOT FOUND in Crossref (1)

  (Hallor, 2018)
    No Crossref match for (Hallor, 2018). This may be a humanities work outside
    Crossref coverage (monograph, archival, classics, dissertation,
    foreign-language), or it may not exist. Manually verify.

## ✓ FOUND (1)

  (Scott, 1986) → Gender: A Useful Category of Historical Analysis
    DOI: 10.2307/1864376

=== Reminders ===
  · NOT_FOUND is expected for monographs, archival sources, classics, dissertations,
    and non-English-language works. ...
  · This script catches the LLM-hallucination case (made-up journal articles).
    For monograph citations, use the [VERIFY] / [待核对] marker workflow.

这里的 DOI 仅作示意;确切元数据是运行时从 Crossref 实时取回的。

用在哪

  • 模式 B(章节级审读)之后,模式 G(盲读核对)之前。
  • 任何 AI 起草的章节(模式 C 输出后跑一遍)。
  • 投稿前的最终合规检查

边界要拎清

这是整页最重要的一条提醒:Crossref 不索引一切。 一大片人文学术——小型大学出版社的专著、未翻译的外文著作、学位论文、档案史料、古典文献——干脆就不在 Crossref 里。对这些,NOT_FOUND预期结果,什么问题都不说明。

所以要结合语境读判定结果。这个脚本对期刊文章的幻觉极其敏锐(Crossref 的强项),而对一条 19 世纪专著的引用近乎无用。专著、档案、古典学的引用,正确的工具是 SKILL.md 里描述的 [VERIFY] / [待核对] 标记协议——靠人去翻书架。脚本和标记协议是配合使用的,不是二选一。


两个文风卫生脚本(简介)

目录里还有两个 shell 脚本,守的是文字而不是引用。

ai-trace-scan.sh —— 套话与连接词扫描

扫描单个文件或整个项目目录,找 references/ai-trace-checklist.md 里登记的 AI 痕迹:高频套话("值得注意的是""综上所述""本文旨在"……)一旦出现就标记;连接词("此外""同时""另外"……)只在堆砌超过阈值(每文件 >3 次)时才标记。

./scripts/ai-trace-scan.sh path/to/chapter.md     # 单文件
./scripts/ai-trace-scan.sh path/to/paper/         # 整个项目(递归,*.md)

何时跑: 模式 F 修订完一章之后、模式 B 审读之前,以及完稿前的最后一遍。它只找出嫌疑——某句话是不是真要改,由作者定夺;有些"套话"在特定语境下是有意识的选择。

pending-checks.sh —— 待办标记汇总

把项目里所有未完成的标记一网打尽,免得有东西漏进投稿:

标记 含义 优先级
[待核对] AI 凭记忆引用 / 未核实事实 🔴 投稿前必须清零
❓ 待讨论 需要作者决定的选择 🟡 推进时处理
[AI 草稿,待作者审阅] AI 起草、尚未审阅 🟢 审阅后删除标记
>>> AI 起草时不确定的地方 🔵 起草后立即处理
[作者微调] 作者对 AI 建议的二次调整 🟣 回写到写作风格档案
./scripts/pending-checks.sh path/to/paper/        # 整个项目
./scripts/pending-checks.sh path/to/chapter.md    # 单文件

何时跑: 每次开工时(还有什么没完成?)、投稿前的最终清单,以及跨对话恢复时的状态摘要。


关于语言与检测模式的一点说明

你应该已经注意到输出是双语的——每份报告都中英并排打印。这是有意为之:伴侣是个双语项目,你用哪种语言都能顺手。

你还会注意到,检测模式是刻意用中文的。 套话清单、待办标记、以及若干引用模式,都是针对中文学术文体调校的,因为这正是这套脚本想补上的缺口。引用脚本依然能很好地处理英文引用和英文 BibTeX——但 AI 套话扫描器尤其在中文写作上最为锋利。这是特性,不是疏漏。


首次配置

Python 脚本什么都不用装——靠标准库就能跑。Shell 脚本第一次可能要加执行权限:

chmod +x scripts/ai-trace-scan.sh scripts/pending-checks.sh

之后,这一页里的每个脚本都只差一条命令。


它们如何对应写作模式

一个"何时用哪个"的心智模型:

  • 模式 B(章节审读): 依次跑 ai-trace-scan.shcitation-consistency.pycitation-verify.py
  • 模式 C(AI 起草): 任何 AI 起草的章节都过一遍 citation-verify.py,再用 pending-checks.sh 扫一扫。
  • 模式 F(底稿修订): 每章改完跑 ai-trace-scan.sh
  • 模式 K(AI 使用披露)/ 多期刊投稿前:citation-format-convert.py 按目标期刊格式重新生成文献表。
  • 投稿前: 全套——一致性、真实性、待办标记清零、套话复核,一个不落。

还有一条从 skill 设计原则直接来的诚实主线:这些脚本都明确说清"做什么"以及不做什么,正是为了不让你产生"全勾上了就没问题了"的虚假安心。它们负责标记,你负责决定。


🌐 English · 中文 · 🏠 首页

Clone this wiki locally