工具集成 (CSL / arXiv / 管理器)

.bib 文件并不只存在于 LaTeX 内部。围绕它有一个广阔生态:决定引用外观的 CSL,从 DOI 或 arXiv 自动获取书目信息的机制,以及持续维护 .bib文献管理软件。本页概览写作前后发生的事:如何收集、整理并输出参考文献。

CSL 和 citeproc — biblatex 之外的世界

CSL(Citation Style Language) 是一种开放的、基于 XML 的格式,用于描述引用和参考文献列表的外观。诸如“姓在名前”“年份放入括号”“第二位及以后作者用 & 连接”这样的规则,会以声明方式写在 .csl 样式文件中。每个期刊的格式要求都能放进这样一个文件。

CSL 最大的优点是不依赖引擎。BibTeX 的 .bst 只服务于 BibTeX,biblatex 的样式只在 LaTeX 内使用,而 CSL 不绑定任何排版系统。实际格式化由 citeproc 处理器完成:Zotero 使用 JavaScript 实现 citeproc-js,Word 插件和各种工具也用各自实现的 citeproc 来解释同一个 .csl。因此一个样式文件可以同时用于 Zotero、Word 和 Markdown。

样式宝库是 Zotero Style Repository,其中有超过 8,500 种样式(更广泛的社区中超过 10,000 种),从期刊到会议,全部按 Creative Commons(CC BY-SA)自由使用。CSL 并非 Zotero 专用:从那里下载的 .csl 在大多数情况下可直接用于任何支持 CSL 的工具。

最常使用 CSL 的工具是 pandoc。用 Markdown 写稿,转换时加上 --citeproc,正文中的 [@knuth1984] 这类引用键会被替换成格式化引用,末尾还会生成参考文献列表。关键在于:无需经过 LaTeX 的 biblatex,就能从 Markdown 直接输出带参考文献的 PDF、Word 或 HTML

terminal
pandoc paper.md --citeproc \
  --bibliography=refs.bib \
  --csl=ieee.csl \
  -o paper.pdf

只需把 .bib(或 CSL-JSON / RIS)传给 --bibliography,把样式传给 --csl。省略 --csl 时默认使用 Chicago author-date--bibliography 可指定多次,因此即使把 .bib 分文件管理,也会自动合并。简言之,可以把 pandoc + CSL 看成一条让不写 LaTeX 的人也能直接利用 .bib 资产的路径。

biblatex / BibTeX 与 CSL 的取舍

它们可以把同一个 .bib 作为输入,但负责格式化的东西不同。下表明确各自的位置,这样就不会在“这是 LaTeX 还是不是?”之间犹豫。

方面BibTeX / biblatexCSL + citeproc
engine运行位置LaTeX 内部(bibtex / biber)也可在 LaTeX 外部(Zotero、Word、pandoc)
style-file样式格式.bst(BibTeX)/ biblatex 样式.csl(XML)
styles样式数量主要期刊能覆盖,但编写较难Zotero 仓库中有 8,500+
output擅长的输出LaTeX → PDFWord、HTML、Markdown → PDF 等
use适用场景用 LaTeX 做认真排版不用 LaTeX / 合作者使用 Word

无论哪种方式,输入都可以是同一个 .bib。因此,现代做法是把文献数据库作为共享资产维护,只选择输出路径:LaTeX(biblatex)或 CSL(pandoc)。

自动获取条目(DOI、arXiv)

几乎不需要手动输入 .bib 条目。大多数论文都有 DOI,可以直接从 DOI 获取 BibTeX。机制是 Crossref content negotiation:对 DOI 通过 HTTP 头说明“我想要 BibTeX 格式”,注册机构就会返回 BibTeX 条目。

terminal
# DOI から BibTeX を取得(-L でリダイレクト追従)
curl -LH "Accept: application/x-bibtex" \
  "https://doi.org/10.1145/3186893" >> refs.bib

-L 是必需的。doi.org 会判断哪个注册机构拥有元数据并进行重定向,不跟随重定向就得不到有用内容。如果命令行太麻烦,也可以把 DOI 粘贴到 doi2bib.org,它在网页上提供同样机制(也接受 arXiv ID 和 PubMed ID)。

对于 arXiv 预印本,可从摘要页右侧的“Export BibTeX citation”直接导出 BibTeX。Crossref(以及 Google Scholar 的 “Cite → BibTeX”)也以类似方式输出 BibTeX。不管来源是哪一个,输入工作量都接近零。

但要注意:自动生成的条目原样通常很粗糙。常见问题包括作者名不统一、标题中的专有名词被小写化(需要用 {...} 保护)、多余或重复字段、数学符号损坏、混淆 arXiv 版与出版版等。导入后至少要检查一遍,并把 citation key 统一到自己的规则,这也是工作的一部分。

文献管理软件和自动导出的 .bib

一旦达到几十到几百篇参考文献,用文献管理软件处理就更现实。标准分工是:在应用中收集和整理论文,从中导出 .bib,再交给 LaTeX。

  • Zotero — 免费、开源的默认选择。可从浏览器一键抓取,使用 CSL(citeproc-js)格式化。LaTeX 用户安装 Better BibTeX 扩展后,可生成稳定的 citation key 并自动导出 .bib
  • Better BibTeX(Zotero 扩展) — 按 auth.lower + shorttitle(3,3) + year 等规则生成不冲突的引用键,并且键会始终“固定”,不会漂移。导出时启用 Keep updated 后,库的修改会自动反映到 .bib
  • JabRef — 原生处理 BibTeX/biblatex 的管理软件。没有单独的内部格式,直接读写 .bib。也内置了从 ID(DOI、arXiv、ISBN)获取条目的功能。
  • BibDesk(macOS) — Mac 上的 BibTeX 前端。可直接编辑 .bib,支持 PDF 自动归档(AutoFile)和外部数据库搜索。
  • Mendeley / Paperpile — Mendeley 支持 BibTeX 导出;Paperpile 擅长 Google Docs 集成,也能导出 BibTeX。

实际流程大同小异:(1) 在应用中管理文献 → (2)(最好自动)导出 .bib → (3) 在 LaTeX 侧用 \addbibresource{refs.bib}(biblatex)或 \bibliography{refs}(BibTeX)读入。如果像 Better BibTeX 那样设置自动导出,稿件侧就能把 .bib 当作“始终最新的生成物”,无需手动同步。

需要注意的是,citation key 的稳定性是协作的生命线。如果每次导出键都会变化,正文中的所有 \cite{...} 都会一起坏掉。这正是 Better BibTeX 固定键的原因;即使不用软件、手写 .bib,也最好一开始就决定键的命名规则,这会让后续轻松很多。