正文写「见附录 A」,翻到文末却只有「补充表 1」;中间又冒出「附表 S2」,附录里根本没有 S2;删掉的附录 D 还留在旧句里;补充材料是 PDF 还是 ZIP、多大,全文找不到一句声明。这类问题很少被拼写检查抓住,却会在审稿人点开补充材料的那一刻变成「正文与附录对不上」。
本文给出一套同一份稿件可勾选的六项交叉引用核验骨架,并附可抄走的 Markdown 扫描脚本。对两份虚构稿件实跑:漂移稿 6 项全败(0/6),规范稿全部通过(6/6),结果在_w/appendix-xref/。它不替代期刊对补充材料的具体版式要求,只解决「指针、题注、顺序、残留、声明」是否自洽。
图:左为附录题注清单;中为正文指针集合;右为六项判定——漂移稿全红、规范稿全绿;下方为删改附录后的同步顺序。
目标说明
读完你应能独立完成四件事:
- 从附录题注导出一份标签清单(附录 A/B/…、补充表、附表 S…),作为交叉引用的真源。
- 按六项清单勾选:完备、可定位、同名、顺序、残留、体积/格式声明。
- 跑脚本扫出「有引无题注」「同名漂移」「首次出现顺序乱」「已删仍引用」「无声明」。
- 去掉任何产品名之后,只靠清单、六项表和脚本完成自检。
适用与边界
适合:正文频繁写「见附录」「见补充表/附表」的实证或方法长文;多人分章、反复增删附录;投稿系统要求单独上传补充材料。
不适合:判断附录内容本身是否正确;也不替代期刊对「在线补充材料」文件名、字数上限的硬性规定。本文示例稿件与标签均为虚构,数字与文件名只为演示漂移,不能当作真实研究结论。
与「图表编号核验」的差别:图表骨架管的是图1/表2 与题注;本篇专管附录/补充材料命名空间——附录 A 与补充表 1 是否被当成同一对象、附表 S2 是否真有题注、删附录后会不会留下幽灵指针。若两类问题同时存在,先跑附录六项,再跑图表六步,避免用一张混表把两类失败搅在一起。
六项核验骨架
| 项 | 勾选问题 | 失败时读者/审稿人会怎么想 | 证据来源 |
|---|---|---|---|
| 1 附录清单完备 | 正文出现的每个附录/补充表/附表标签,题注侧都有 | 「附录 A 在哪?」 | 题注行标签集合 |
| 2 正文指针可定位 | 每个正文指针都能落到某一条题注 | 「链接是空的」 | 指针 − 题注 |
| 3 题注与指针同名 | 不用「附录 A」指「补充表 1」这种别名硬凑 | 「到底是 A 还是表 1?」 | 共现但题注缺一方 |
| 4 顺序与首次出现 | 正文首次提到的附录字母序 = 题注排列序 | 「怎么先讲 C 再讲 A?」 | 首次出现序列 |
| 5 删附录后残留 | 无「已删附录 X」仍当有效引用;无题注的附录字母指针 | 「删了为什么还让我看?」 | 已删字样 + 孤儿指针 |
| 6 补充材料体积/格式声明 | 文末写明格式与大致体积(如 PDF/CSV + MB/KB) | 「补充包打不开/不知下什么」 | 「补充材料声明」句 |
第 3 项最容易被「我心里知道是同一份」带过:作者把附录 A 改名为补充表 1,正文两处写法并存,题注只留了新名——读者会当成两份材料。第 6 项则常在「附录很长、单独打包」时被忘掉。
脚本实跑:漂移稿 vs 规范稿
脚本appendix_xref_check.py按「# 正文 / # 附录」切分,收集题注行与正文中的附录X/补充表N/附表SN,再逐项判定。输出原样:
draft_A.md 1 附录清单完备 FAIL 题注=['补充表1', '附录B', '附录C'] 指针=['补充表1', '附录A', '附录B', '附录C', '附录D', '附表S2'] 缺失=['附录A', '附录D', '附表S2'] draft_A.md 2 正文指针可定位 FAIL 无法定位=['附录A', '附录D', '附表S2'] 题注侧=['补充表1', '附录B', '附录C'] draft_A.md 3 题注与指针同名 FAIL 同名冲突=True 附表落空=True 题注=['补充表1', '附录B', '附录C'] draft_A.md 4 顺序与首次出现 FAIL 正文首次=['附录A', '附录C', '附录B', '附录D'] 题注序=['附录B', '附录C'] draft_A.md 5 删附录后残留 FAIL 残留字样=['已删附录 D 的内容见下文;请勿再引用附录 D'] 无题注附录指针=['附录A', '附录D'] draft_A.md 6 补充材料体积/格式声明 FAIL 声明=- draft_B.md 1 附录清单完备 PASS 题注=['附录A', '附录B', '附表S1', '附录C'] 指针=['附录A', '附录B', '附录C', '附表S1'] 缺失=- draft_B.md 2 正文指针可定位 PASS 无法定位=- 题注侧=['附录A', '附录B', '附表S1', '附录C'] draft_B.md 3 题注与指针同名 PASS 同名冲突=False 附表落空=False 题注=['附录A', '附录B', '附表S1', '附录C'] draft_B.md 4 顺序与首次出现 PASS 正文首次=['附录A', '附录B', '附录C'] 题注序=['附录A', '附录B', '附录C'] draft_B.md 5 删附录后残留 PASS 残留字样=- 无题注附录指针=- draft_B.md 6 补充材料体积/格式声明 PASS 声明=补充材料声明:附录全文导出为 supp.pdf draft_A.md PASS 0 / 6 draft_B.md PASS 6 / 6读法:漂移稿 A 的六项失败来自同一轮「改名 + 增删」:把原附录 A 改成「补充表 1」却没改正文「见附录 A」;附表 S2 只写在正文;首次出现写成 C→A→B;删掉附录 D 后仍留「请勿再引用附录 D」这类半截说明,且没有任何体积/格式声明。规范稿 B 并不更长,只是题注与指针同名、字母序一致,并为supp.pdf/cells.csv写了声明。两项对照说明:失败可以独立计数——即使你只修了声明,前五项仍会红。
删改附录后的同步顺序
附录漂移大多发生在「合并/改名/外置打包」之后。建议固定顺序:
- 先改题注行,导出当前标签清单(附录字母 + 补充表/附表)。
- 全文检索旧名,把正文指针改成与题注同一字符串,禁止靠别名意会。
- 按正文首次出现顺序重排附录块;若必须保留历史顺序,就改正文提及顺序。
- 删除附录时:去掉全部指针,并删除「已删附录」类句子,或改写成「本版不再提供」。
- 若附录外置,补一句「补充材料声明」:格式、大致体积、文件名。
- 跑脚本,六项全过后再上传投稿系统。
最小扫描逻辑
完整脚本见_w/appendix-xref/appendix_xref_check.py,核心是标签正则与题注行收集:
importre LABEL=re.compile(r"(?:附录\s*[A-Z甲-癸]|补充表\s*\d+|附表\s*S?\s*\d+)")CAP_LINE=re.compile(r"^##\s+(.+)$",re.M)STALE=re.compile(r"已删[^。\n]{0,30}附录\s*[A-Z甲-癸]|请勿再引用\s*附录\s*[A-Z甲-癸]")DECL=re.compile(r"补充材料声明[^。\n]{0,120}?(\.pdf|\.csv|PDF|CSV|MB|KB)",re.I)defnorm(label:str)->str:s=re.sub(r"\s+","",label)returnre.sub(r"附表S?(\d+)",r"附表S\1",s)norm用来吞掉「附录 A」与「附录A」、「附表 S1」与「附表S1」的空格差异。第一次实跑时若忘记把题注括号里的「附表 S1」收进清单,规范稿会在第 1–3 项被误杀——所以题注行要扫描整行,不只读行首。
三种做法对照
| 做法 | 能发现什么 | 漏掉什么 | 成本 |
|---|---|---|---|
| 通读附录 | 明显缺页 | 同名漂移、顺序、残留字样 | 高 |
| 全文查找「附录」 | 字符串命中 | 补充表/附表另一套命名 | 低,易漏 |
| 题注清单 + 六项 + 脚本 | 六类漂移逐项定位 | 附录内容对错 | 每次约 5 分钟 |
交稿前勾选表
- 题注清单已导出,正文每个附录/补充表/附表指针都能在清单找到。
- 不存在「正文叫附录 A、题注叫补充表 1」的并存别名。
- 正文首次出现的附录字母序与题注排列一致。
- 检索「已删附录」「请勿再引用附录」,无有效指针指向不存在题注。
- 有「补充材料声明」:格式 + 大致体积 + 文件名。
- 脚本六项全 PASS 后再上传。
当天 20 分钟落地
- 5 分钟:把稿件临时整理成「# 正文 / # 附录」两段,附录题注统一用
##行。 - 5 分钟:跑
appendix_xref_check.py,先看第 1–3 项。 - 5 分钟:处理第 4–5 项(顺序与残留),这两项最像「作者自己也懵」。
- 5 分钟:补第 6 项声明,请合作者只对照题注清单与正文指针勾选一遍。
踩坑
- 心里映射「附录 A = 补充表 1」却不改字符串:第 3 项专门拦这种意会。
- 只删附录块、不删正文指针:第 1/2/5 项会连环失败。
- 首次出现为了叙事先写附录 C:要么调正文,要么调题注顺序,不要让脚本和读者猜。
- 补充材料只在投稿系统上传、正文零声明:审稿人下载到损坏文件时,你没有自证口径。
- 英文稿另用 Appendix S1、Table S2:同一套六项要在英文文件再跑一遍,命名空间不要混用中文「附表」规则硬套。
- 把本骨架当成图表编号检查:图1/表2 请用图表专文的清单;这里只覆盖附录/补充命名。
与写作工具配合
写作辅助工具适合放在题注清单已经定稿之后:让它按六项标出正文指针与题注差异,生成待核对表,再由作者裁定「以哪个名为准」。千笔-AIWritePaper 可以承担标记与整理;「附录是否还需要」「补充包用哪个文件」必须由作者决定。去掉产品名,题注清单、六项骨架和脚本仍可独立使用。
总结
附录和正文对不上,本质是「命名空间没有唯一真源」。六项骨架把完备、可定位、同名、顺序、残留和体积/格式声明拆成可勾选证据;脚本负责定位漂移,作者负责裁定「以哪个题注字符串为准」。虚构漂移稿与规范稿的对比说明,一次改名加一次删附录就足以让六项全红,而修复它只需要按固定顺序同步题注、指针与声明,再把 CSV 留在版本库里当回归基线。