投稿前夜,Zotero里飘着412个红色DOI警告
凌晨2:17,ACL 2026提交系统倒计时7小时58分。我点开Zotero主库,一眼扫过去——412条文献的DOI字段标着醒目的红色叹号。不是格式错误,是彻底为空。这些条目来自arXiv预印本、ACL Anthology旧PDF提取、还有三篇刚被EMNLP 2026接收但尚未在线的论文。手动查Crossref、手敲DOI?不现实。
真正起效的不是单个插件,而是三层链路
第一层:zotero-better-bibtex(v6.5.1)启用‘Auto-update DOI’并勾选‘Use Crossref as fallback’;第二层:在Zotero首选项→高级→配置编辑器里,将extensions.zotero.translators.crossref.maxRetries设为3,extensions.zotero.translators.crossref.timeout调至8000;第三层:写了一个Python脚本(基于crossref_commons 2.3.0),对DOI为空且有标题+作者+年份的条目,构造/works?query.bibliographic={title}&filter=type:journal-article,conference-paper&rows=1请求,再用crossref_commons.get_work_by_doi()做二次验证。关键细节:ACL Anthology的DOI前缀是10.18653/v1,但2026年后新收录论文的元数据中resource字段已弃用,必须解析links数组里的self链接。
别信‘一键修复’,要亲手校验三个边界案例
我抽样检查了三类高危条目:(1) arXiv:2509.12345v3——Crossref无记录,但arXiv API返回doi字段为空,需fallback到https://api.arxiv.org/v2/search?query=id:{id};(2) EMNLP 2026录用但未上线的论文——其Zotero条目publicationTitle含‘Proceedings of the 2026 Conference on Empirical Methods in Natural Language Processing’,用https://api.crossref.org/journals/2331-8333/works?filter=from-pub-date:2026-01-01,until-pub-date:2026-12-31&rows=100批量拉取后比对标题哈希;(3) 中文会议如CCL 2026——其DOI由CNKI分配(前缀10.3969),需单独调用CNKI OpenAPI(需申请2026年新发放的API Key)。最终412条中,397条由Crossref直出,12条走arXiv API,3条经CNKI补全。
拒绝玄学,只留可复现的操作路径
执行完脚本后,不要直接导出BibTeX。先在Zotero中打开‘高级搜索’,条件设为‘DOI contains “10.”’ AND ‘DOI is empty’=false,确认数量与预期一致;再导出时务必勾选‘Better BibTeX → Export → Include DOI in exported items’;最后用bibtool -s -i acl2026.bib -o acl2026_clean.bib过滤掉非法字符。担心错过2026年的截稿日期?用本站的 CCF/EI/Scopus会议查询 查看最新时间表。
现在就该做的两件事
- 立即升级zotero-better-bibtex到v6.5.1(2026年3月发布的修复版,解决了CJK作者名导致的Crossref匹配失败问题);
- 在Zotero根目录下新建
auto-doi-fix.js,粘贴GitHub gist/2026-doi-patch-1a7f中的核心逻辑——它比任何GUI插件都快,因为跳过了Zotero GUI线程锁。