
用LaTeX写论文卡在参考文献上真的是最冤的一件事。正文排版折腾完了公式插图都搞定了结果几十篇文献手动敲进.bib文件要么格式不对编译报错要么作者名大小写有问题要么arXiv预印本和正式发表版本没区分。如果你在用Zotero管理文献同时用Overleaf写论文这两个工具之间其实有一条非常顺畅的通道把参考文献导入这件事从体力活变成几分钟搞定。这篇东西不是软件说明书是我自己从手动维护bib文件切换到ZoteroOverleaf联动之后整理的完整流程和踩坑记录。核心解决三件事怎么把Zotero里的文献变成合法的.bib、怎么让Overleaf项目用上这个文件、还有怎么处理那些教程里不会写的边界情况。1. 为什么要在Zotero和Overleaf之间搭一座桥先聊聊这个组合到底解决了什么痛点以及你在什么情况下值得花时间配置这条链路。1.1 手动维护bib文件的三个真实痛点如果你已经用LaTeX写过一两篇论文大概率经历过这些场景第一字段遗漏导致编译警告。LaTeX对.bib的容错率其实很低漏了author字段或者year写成了year {2024.03}这种带多余字符的格式BibTeX直接罢工。更隐蔽的是journal和booktitle的区别——同一篇会议论文你在这个项目里放在journal下BibTeX虽然不报错但输出的参考文献列表里期刊名和会议名就混了一眼看去乱七八糟。第二格式细节反复返工。一个作者名是John Smith另一个是Smith, John第三种写法是J. Smith。Zotero里用姓名倒序保存导出到BibTeX默认是Smith, John and ...但目标期刊模板可能要求John Smith and ...。你手动一个个改几十篇改完眼睛都花了还没算上Jr.、van der Berg这种复杂姓名。第三版本追溯和增量追加。写论文的过程是动态的今天引A和B明天发现还应该引C后天导师说你参考文献里怎么没有D的经典工作。手动维护的时候每加一篇都要去Google Scholar或DOI网站复制BibTeX条目复制完之后还要检查字段是否完整、是否和已有的citekey冲突。这个循环非常消耗心流——你正在写一个重要的论证段落突然被打断去处理参考文献回来之后思路全断了。1.2 Zotero和Overleaf的联动逻辑之所以选这两个工具组合是因为它们在各自的环节里都做对了最关键的事Zotero是文献管理工具核心能力是把文献元数据通过DOI、PubMed、arXiv标识符等自动抓取下来存储成结构化条目。你不需要手动输入标题、作者、年份插件或连接器会自动完成。它还支持PDF附件这意味着你的文献库不只是书目索引还是一个完整的阅读工作台。Overleaf是在线LaTeX编辑器核心能力是免去了本地TeX发行版的配置麻烦。它支持.bib文件并自动调用BibTeX或biblatex工具链编译日志里报错信息比较清楚。用一个可能不太恰当的比喻Zotero是食材仓库Overleaf是厨房。.bib文件就是那辆手推车把食材从仓库运到厨房。笨办法是每次做菜都去仓库里一样一样现摘手动写bib条目聪明办法是提前把需要的食材装好甚至租一个自动传送带同步工具。1.3 这套方案最适合哪些使用场景不需要把它想得太高大上我实测下来的感受是如果你是刚开始用LaTeX写论文的学生这套流程能帮你绕开参考文献格式不对导致反复编译失败的坑把精力留给正文。如果你是用Overleaf投期刊或会议的作者目标期刊一般会规定参考文献样式IEEE、ACM、APA、GB/T 7714等这套流程能让你在几分钟内切换样式而不是手动重排参考文献列表。如果你是维护多个Overleaf项目的人比如毕业论文一个项目、期刊论文一个项目、会议短文一个项目只需要维护同一份Zotero文献库每个项目导出属于自己的.bib文件即可互不干扰。当然如果你只在Overleaf里写过一次短文、参考文献不超过十篇手动添加其实也还好。但只要你需要和参考文献长期作战我强烈建议现在就配好这条链路。2. 从Zotero导出高质量bib文件核心操作和字段校验很多人以为从Zotero导出bib就是右键文献然后导出为BibTeX完事。这么做确实能拿到文件但拿到的文件质量非常参差。真正关键的地方在于导出的结果要能被Overleaf的BibTeX干净地解析同时被目标期刊模板接受。所以这一节我们讲透导出操作背后的原理和细节。2.1 为什么建议安装Better BibTeX插件Zotero自带的BibTeX导出功能能用但有几个问题。最突出的一个citekey不稳定。你导出的.bib文件里每条文献的引用键比如smith2024deeplearning是由Zotero根据作者和年份自动生成的。如果你后来在Zotero里补充了第二作者、修改了标题大小写citekey可能变化。这意味着你已经在Overleaf正文里写了\cite{smith2024deeplearning}重新上传bib文件后原来那一堆引用全部失效编译报出Citation undefined。还有一个很实际的问题Zotero默认导出条目的字段非常丰满会带着abstract、file本地PDF路径、urldate访问日期等字段。这些字段单独看没毛病但投IEEE模板时BibTeX会根据模板要求选择该显示的字段多余字段虽然不导致致命错误却会让.bib文件变得臃肿尤其在Overleaf免费版的编译时长限制下能精简就精简。Better BibTeX简称BBT插件的核心能力有这些稳定的citekey你可以设置生成规则比如默认的[auth:lower][year]作者姓氏小写年份也可以自定义成短词_年份。只要文献元数据不变citekey永远不会变。智能字段清理导出时可以配置哪些字段不导出比如去掉abstract、file、urldate。引用键快速插入在Zotero里选中文献快捷键复制citekey切到Overleaf正文里直接用。安装BBT的步骤很简单打开Zotero依次进入工具→插件搜索Better BibTeX下载安装后重启Zotero。在你使用Zotero 6或7的安装包时插件管理器会自动识别Zotero的版本不需要手动处理兼容问题。2.2 首次导出之前必须做的元数据清洗这一步最容易被忽略但最影响最终质量。Zotero自动抓取的元数据不是100%干净尤其是从网页快照直接保存的条目或者从一些不规范的PDF元数据里解析出来的条目常见问题包括作者名带多余空格或换行比如Lastname, Firstname \n这种条目导出到BibTeX后BibTeX解析时会报奇怪的错误。标题里有LaTeX转义字符残留如果你曾经把网页上的公式或特殊符号直接存进Zotero标题里可能带着未处理的%、、_等字符。在LaTeX里这些字符都有特殊含义必须转义。期刊名和会议名混在同一个publicationTitle字段里Zotero里这取决于你选择的是期刊文章类型还是会议论文类型。如果类型选错导出的字段名完全不对。所以在导出前用Zotero的重复条目检测扫一遍然后抽几篇重要文献人工检查字段。不需要逐条检查但分类、作者、年份、标题、DOI这几个核心字段别出问题。2.3 单条导出、批量导出和导出集合的区别Zotero提供了三种层面的导出对应的使用场景完全不同右键单条文献→从条目创建BibTeX适合你在Overleaf项目里就缺那么一两篇文献的情况。点击之后会弹出一个类似代码窗口的界面显示这条记录的BibTeX文本手动复制粘贴进你的.bib文件即可。在指定分类下全选→右键→导出条目Zotero会生成一个完整的.bib文件包含这个分类下所有选中条目。这个方式适合一次性搭一个专用于某篇论文的小型文献库。右键一个分类→导出分类包含该类别下所有子分类的文献适合你按研究课题维度建立文献库结构和论文项目一一对应的情况。实际操作中我更推荐第三种方式——在Zotero里为每个Overleaf项目建一个专用分类然后右键分类导出。这比每次全选要好因为你不需要担心误选进了不相关的文献后续增量添加也能保持分类整洁。2.4 导出对话框里每一项如何选无论是单条导出还是批量导出Zotero都会弹出一个导出设置窗口。这里有几个选项直接决定生成文件的质量格式Format如果你安装了BBT会发现除了默认的BibTeX之外还多出Better BibTeX和Better BibLaTeX两个选项。对于Overleaf的绝大多数模板选择Better BibTeX即可。如果你用的模板是biblatex风格导言区用了\usepackage[backendbiber]{biblatex}那要选Better BibLaTeX。勾选使用期刊缩写Use journal abbreviations之前要想好这个选项需要你有完善的期刊缩写列表否则导出结果可能显示Unknown Journal或者干脆给你个奇怪缩写。你投IEEE的时候期刊要全称还是缩写要提前和目标模板核对好。导出注释Notes这个选项会把Zotero里的笔记也导出成annote字段。一般不需要因为LaTeX模板很少用这个字段。字符编码默认UTF-8不要改。导出完成后用文本编辑器VS Code、Sublime Text或任何你顺手的打开生成的.bib文件随便扫一眼几条记录确认没有乱码、没有多余字段。3. 把bib文件安全地对接进Overleaf三种途径拿到.bib文件之后怎么让它进入你的Overleaf项目很多人直接上传文件这当然可以但如果你的文献库会持续更新每次都要手动上传就很痛苦。这一节我按从手动到自动的顺序把三种路径都讲清楚你可以根据自己习惯选一条。3.1 最直接的方式手动上传bib文件在Overleaf项目页点击左上角菜单按钮然后选择上传文件把.bib文件拖进去。上传完成后项目文件树里会多出一个.bib文件。然后在你的.tex主文件导言区加上这段以经典的plain样式为例\bibliographystyle{plain} \bibliography{references}注意\bibliography{references}这里的references对应上传的.bib文件名不带扩展名。如果你的.bib文件叫myrefs.bib那这里要写\bibliography{myrefs}。在正文里需要引用文献的地方使用\cite{citekey}。这里的citekey就是.bib文件里每条记录第一行article{citekey,里的那个键。手动上传的优点是简单直接、没有额外的依赖适合单次使用或者不频繁更新文献的场景。缺点是每次在Zotero里新增了文献你都要重新导出并上传覆盖旧文件。如果忘了覆盖正文新增的\cite命令就会提示Citation undefined然后编排出问题你的参考文献列表也会缺条目。3.2 在Overleaf里直接使用Zotero官方同步推荐给重度用户这里要特别注意Overleaf本身不像部分其他平台那样提供连接Zotero的官方入口按钮它只是一个在线LaTeX编辑器和Zotero之间没有直接的官方认证通道。网上有一些工具或脚本声称能一键同步但我自己实测下来最稳的自动同步方案是借助Zotero的桌面客户端和文件同步工具例如Git完成。但为了不引入太多依赖对于大多数用户我建议用下面这套半自动方案在你把.bib文件导出到本地某个目录之后用Git管理这个目录。把这个目录和Overleaf项目关联的方式是在Overleaf项目菜单中选择Git打开Git集成并添加这个外部Git仓库。之后每次你在Zotero里更新文献并重新导出.bib只需要git add、git commit、git pushOverleaf端就会自动拉取更新并重新编译。如果不熟悉Git还有一个简化方案使用支持文件同步的网盘客户端比如OneDrive把Zotero导出的目录放到网盘里然后在Overleaf的付费版里看是否支持从网盘导入文件。这里要提醒一下——不同版本的Overleaf界面功能有差异免费版没有自动同步功能需要手动上传所以如果你依赖自动同步得先确认你用的账户和服务端支持情况网上教程的说法不一定适用于你的版本。如果你不想折腾Git也不需要自动同步那最省心的策略就是把手动上传这个动作用插件简化在Zotero里安装一个叫Better BibTeX的插件后它会在Zotero界面的工具栏增加一个Refresh按钮点一下就能快速重新生成所有筛选过的citekey和.bib内容。导出后你手动拖进Overleaf整个过程大约半分钟。3.3 用Overleaf的外部文件方式避免大文件上传如果你的.bib文件非常庞大比如几百条文献、还带着很多摘要手动上传和后继的编译可能都受影响。一个折中方案是在Overleaf项目里新建一个references.bib文件然后把Zotero导出的内容整体复制粘贴进去——前提是真不大。几百条文献粘贴后Overleaf的在线编辑器有时候会卡但还能接受。如果超过一千条建议还是上传文件别用在线编辑器直接编辑。另外BibTeX本身对文件大小没有硬性限制但Overleaf免费版对单次编译时长有上限。文献库过大时编译会变慢那些包含大量abstract和note字段的条目会进一步拖慢速度。这就是为什么前面说要清理字段。3.4 一个很多人都不知道的实用技巧让Overleaf显示中文文献不报错如果你在Zotero里存了中文文献导出到.bib后默认情况下在Overleaf里编译可能会有编码问题或显示乱码。这是因为BibTeX默认按ASCII解析遇到中文字符需要转义。解决方案是在你的.tex文件导言区加上\usepackage[UTF8]{ctex}如果你用XeLaTeX编译或设置编译方式为XeLaTeX。具体路径是Overleaf的菜单→编译器→选择XeLaTeX。这样中文条目就能正常显示了。如果不加你很可能看到一堆问号或空白。这一条是很多人踩了半天才发现的问题。4. 实际上手一个从新建项目到编译通过的完整案例前面讲了很多理论这里我完整走一遍流程你可以照着操作。我会用一台干净的环境演示Zotero导入一篇论文→导出bib→Overleaf编译成功的全过程。4.1 环境准备Zotero 6或更高版本不需要账务登录本地库即可。Better BibTeX 插件从Zotero官方网站的插件市场下载.xpi文件然后在Zotero的工具→插件→齿轮图标→Install from file里安装。Overleaf账户免费版也行。假设我要写一篇关于深度学习在医疗影像中的应用的论文现在需要引用三篇文献。我提前在Zotero里通过DOI或标题搜索找到了这三篇并保存成了期刊文章或会议论文类型。注意每条的标题、作者、年份字段已经核对好。4.2 导出和上传在Zotero左侧建一个分类文件夹取名overleaf_demo。把三篇文献拖进这个文件夹。右键overleaf_demo→导出分类。格式选择Better BibTeX。在弹出的对话框中推荐勾选保持引用键稳定Keep citation keys stable其他选项默认。导出得到overleaf_demo.bib。打开Overleaf新建一个项目选择空白模板。点击左上角菜单上传overleaf_demo.bib。在主文件main.tex里写好基础结构\documentclass{article} \usepackage[UTF8]{ctex} % 如果正文和参考文献含中文 \title{Deep Learning in Medical Imaging} \author{Your Name} \date{\today} \begin{document} \maketitle \section{Introduction} Deep learning has shown great promise in medical imaging \cite{litjens2017survey}. Another important work is \cite{esteva2017dermatologist}. \bibliographystyle{IEEEtran} \bibliography{overleaf_demo} \end{document}点击Recompile。如果你之前设置了外部文件为XeLaTeX且.bib文件里没有未转义的特殊字符这次编译应该一次通过。4.3 编译通过后的常见验证编译完成后点开PDF预览拉到最后一页。你应该看到参考文献列表按IEEEtran样式排好了。同时页面顶部不会有红色的Citation undefined警告。如果你看编译日志里面也没有Citation may be missing之类的提示。如果你用的是plain或unsrt参考文献列表的排序和标注风格会不同这由目标模板决定不影响引用的有效性。5. 最容易翻车的排查链路从编译失败到定位根源我写的这些内容里最有价值的部分可能在这里。网上的教程会告诉你怎么做但很少有人告诉你做错了怎么排查。我把自己压箱底的排查链路完整写出来。5.1 第一步区分是LaTeX错误还是文献错误看到Overleaf编译失败时第一件事不是改.bib而是看日志里报错的行号。通常有三类情况错误出现在正文的.tex文件里和文献无关——那问题大概率是你正文中某个命令写错了。错误提示里出现了.bib文件的行号比如line 25: and in entry——那问题一定在.bib里。提示Citation undefined或Reference undefined——这说明LaTeX运行成功了但BibTeX没有成功处理.bib或者.bib里的citekey和正文里的\cite{}对不上。你可以在Overleaf的日志面板里用搜索功能直接搜citation、error快速定位问题类型。5.2 一个真实案例导出后作者名为空的惨案有一次我从Zotero导出文献发现某些条目的author字段是空的。当时我检查Zotero界面明明作者名就在那里。后来才发现问题出在Zotero条目的创建者里——那条文献的作者写了Smith, John但姓氏和名各有一个空格导致BBT在格式化时把作者解析成空。解决办法是回到Zotero里编辑该条目手动把作者字段重新输入一遍或者用搜集元数据功能右键→查找可用的PDF元数据或通过DOI更新刷新一次字段。这算是最典型的元数据垃圾进垃圾出案例。5.3 另一个高频坑字段里的特殊字符在.bib文件里直接贴中文、希腊字母、数学符号都有讲究。直接粘贴%符号会让BibTeX把它后面所有内容都当成注释符号在某些样式下会报错_符号会被理解为下标导致数学模式相关错误。我处理这类问题的方式是在Zotero里就把特殊字符处理好。标题里的改成\_改成\_数学公式用$...$包裹。如果某条来自网页的标题本身就长得很奇怪直接编辑Zotero条目别和它较劲。5.4 Overleaf上参考文献列表出现了但格式怪怪的怎么修这种错通常不是语法错误而是样式文件不匹配。比如你用了\bibliographystyle{plain}但你是要投稿到某个用IEEEtran的会议那么文献列表里可能出现作者姓名顺序不对、期刊名显示为斜体但没粗体、缺少DOI等问题。解决方案是换样式。Overleaf项目里如果模板自带了.bst风格文件就优先用模板里指定的\bibliographystyle{...}。如果模板没给就到CTAN或目标会议官网找标准.bst文件上传进项目再改\bibliographystyle。还有一个需要留神的点部分期刊要求参考文献按被引用的顺序编号而不是按作者字母排序。plain样式是字母序unsrt是按引用顺序。如果你的参考文献列表顺序和正文引用顺序不一样检查\bibliographystyle是不是unsrt。5.5 最隐蔽的问题重复引用键当你在Zotero里同时导入了同一篇论文的两个不同版本比如一个期刊正式版、一个arXiv预印本BBT会为它们生成相似的citekey但不会完全相同。此时如果两个条目都复制进了同一个.bib文件编译时BibTeX会报告Repeated entry。解决办法是在Overleaf的.bib文件里删除一个条目或者在Zotero里用合并重复条目Merge功能把两个记录合并成一个。合并之前要确认哪个版本信息更权威——一般优先保留正式发表版。6. 从能跑到好用进阶配置与工作流优化到这里你已经可以顺利地把Zotero文献导入Overleaf并编译了。但一套工作流如果只停留在能跑的层面还远远不够。接下来分享几个我长期使用后觉得非常值得做的优化。6.1 建立一论文一分类的Zotero结构我在Zotero左侧的分类体系大概是这样的01-综述02-深度学习基础03-医学影像AI-肺癌AI-眼底04-论文写作-2025期刊A05-论文写作-2026会议B每开一个新项目我就建一个对应分类把相关文献拖进去。导出时直接右键这个分类导出.bib和Overleaf项目文件名保持一致。这个习惯最大的好处是导出文件不会膨胀每篇论文只带它真正引用的几十篇文献编译速度快排查也容易。Overleaf项目里的.bib文件不会变成几百条文献的巨型文件。6.2 用BBT的快速复制citekey功能配合Overleaf搜索在Zotero里选中一条文献按CtrlShiftCWindows或CmdShiftCmacOSBBT会复制它的citekey。切到Overleaf编辑器的正文里输入\cite{}把光标放到花括号里按CtrlV粘贴。这个快捷键把查citekey→手动输入的流程压缩到了几秒。如果你用本地编辑器如VS Code配LaTeX Workshop还有自动补全功能输入\cite{会出现下拉建议列表直接选文献。Overleaf虽然也提供类似功能但我体感没有本地编辑器灵敏所以我个人经常是本地写完再传上去或者在Overleaf里就靠快捷键粘贴。6.3 处理参考文献条目在Zotero里更新了但Overleaf没变的同步问题这是最典型的场景你投出去一篇论文审稿人提意见让你补充两篇文献。你在Zotero里更新了重新导出了.bib上传覆盖了Overleaf里的旧文件。此时如果你的正文里没有新增引用编译一次会发现参考文献列表没变化甚至认为你什么都没改。这不是Zotero或Overleaf的问题而是BibTeX机制决定的——它只把那些在正文中实际引用了的条目输出到参考文献列表。你新增了条目但没在正文\cite参考文献列表自然不会出现它。反过来如果正文里新增引用了某个条目但.bib文件没更新就会出现Citation undefined。这个机制理解透了你就不会再被这种看起来神秘的现象吓到。6.4 用comment{}和%管理临时不用的文献写作过程中你会遇到这篇文献我可能引用也可能不引用的情况。如果你先把\cite{}写进正文编译后会出现在参考文献中删掉\cite{}后它自动消失。但如果.bib文件里存在没有被引用的条目BibTeX不会报错只是不输出。我个人的习惯是如果某条文献暂时不引就在.bib文件里把它那整段用comment{...}包起来。这样即使我修改了正文它也不会出现在最终的参考文献列表里且不会因为残留的旧citekey导致误引用。需要时再取消注释即可。6.5 关于biblatex/latexmk的一次坑有段时间我在Overleaf里改用biblatex然后.bib文件还是用BBT的Better BibTeX导出。编译时我一直用Recompile按钮结果报出Package biblatex Error: \bibliography failed。后来查资料才发现biblatex后端是biber不是传统的BibTeX。Overleaf默认的编译链如果没配置好可能不会自动调起biber。解决办法是在项目配置里设置主文件编译方式为latexmk或者在Overleaf的菜单里把编译器设置为Biber如果选项存在。如果你用biblatex.bib导出就最好选Better BibLaTeX同时保证导言区用的是\addbibresource{overleaf_demo.bib}而不是\bibliography{overleaf_demo}。这个坑让我意识到不要盲目和BibTeX机制对抗。如果你不熟悉biblatex老老实实继续用经典的\bibliographystyle\bibliography模式如果想用biblatex就先花一点时间搞清楚它的工具链差异。6.6 关于多个作者和组织机构作者的处理Zotero里有些条目是公司/组织作者比如World Health OrganizationIEEE等。在BibTeX里你希望它显示为World Health Organization而不是World, Health O.——这种问题出在和BibTeX的姓氏名解析规则冲突。解决方案是在.bib文件里为这种条目手动加上一层花括号author {{World Health Organization}},这样BibTeX会把它当成一个整体。同理如果你的作者名里有De La Torre这种复合姓氏建议在Zotero里把姓氏字段写完整必要时在.bib里用手动花括号包裹。7. 写在最后的几条实操建议上面这一套流程走下来你在Zotero管理文献→Overleaf写论文→编译出参考文献这条链路上应该不会再有什么大坑了。最后分享几个我这些年攒下来的经验第一从第一天就保持Zotero元数据干净。我见过太多人文献存了一堆到写论文时才发现里面有大量无法用的脏数据。与其花半天时间清洗几百条文献不如平时在抓取时顺便修正成题目、作者、年份、期刊/会议、DOI五项齐全的干净条目。第二不要迷信自动同步。网上有些工具能监控Zotero的bib文件并自动同步到Overleaf听起来很美好。实际用起来自动同步在上传大文件时容易出错而且如果你同时开着多个客户端同步冲突很麻烦。我觉得手动上传快捷键粘贴citekey这组合已经够高效反而更可控。第三多掌握一点BibTeX的调试方法。学会用\nocite{*}在某个临时副本里列出所有文献或者用\bibliographystyle{unsrt}快速预览引用顺序。这些技巧在你调试格式时能救急。最后想说参考文献管理这件事本质上不是技术问题而是习惯问题。工具再好如果你没有维护元数据的习惯到头来还是会在截止日期前抓狂。但如果从现在开始每保存一条文献就顺手核对一下字段每开一个项目就建一个Zotero分类导出前检查一遍特殊字符你其实只用花很少的精力就能让Zotero和Overleaf这对组合真正为你省下大把时间。