读论文最耗时的,往往不是“看不懂”,而是把时间花在找句子、对公式、切窗口上。
过去两年我的阅读流程大概是:Zotero 管文献 → PDF 阅读器看原文 → 翻译软件复制段落 → 遇到公式再切回 PDF 找上下文。工具本身都没问题,问题是它们彼此不通:译文和原文对不上、公式被机翻成乱码、双栏论文的左右栏串成一段、切到编辑器改两行代码再切回来,PDF 又开始重新加载。
于是我写了一个 VS Code 扩展:Bilingual Paper Reader(文献对照翻译阅读器)。它把原版 PDF、逐句中文、公式、批注和 AI 问答放在同一个窗口里。左侧是 PDF 原版,右侧是对照译文;在原文里划一句话,右侧对应译文会同步高亮;点右侧的句对,左侧会精确跳回原文位置。
项目是 MIT 开源的,GitHub 上已经更新到 1.8.1;VS Code 插件市场也已上架(商店版本更新可能稍滞后,最新功能以 GitHub Releases 为准)。
它长什么样



为什么不用现成的翻译插件
我试过几类方案,各有各的问题:
- 浏览器翻译插件:整页翻译把双栏论文的左右栏串成一段,公式、上下标、根号直接变成乱码;
- 整篇 PDF 翻译:译文和原文完全脱节,想对照一句话要来回翻页;公式编号被当成正文翻译,读者根本不知道在讲哪条式子;
- 普通 PDF 阅读器:可以看,但不能对照、不能批注、不能问 AI;
- “复制到聊天框”:能看懂单个句子,却丢掉了上下文、符号定义和实验设置。
这个扩展的核心不是“接一个翻译 API”,而是先把 PDF 的版面读懂:哪些是正文、哪些是图注、哪些是表格、哪些是公式,双栏怎么读、跨栏的句子怎么接。版面错了,后面的翻译和对齐都会错。
核心功能
1. 先读懂版面,再翻译
PDF 里没有“段落”这个概念,只有一堆带坐标的字符。扩展基于 PDF.js 的文本层和字体信息做版面重建:
- 自动识别单栏 / 双栏,修复跨栏续句、折行断词;
- 图注、表格、公式行与正文分开,避免“图注吞掉半栏正文”或“表格数字被当成散文翻译”;
- 整页大表、连续编号公式、算法伪代码等特殊版面单独处理;
- 对纯 LaTeX 论文(正文本身就是 Computer Modern 字体)做了专门的字体统计,避免把整篇论文误判成“一堆公式”。
这些看起来是“细节”,但读双栏论文的人应该都遇到过:一段话被切成好几张顺序错乱的卡片,或者译文里突然插进半行表格数字。
2. 逐句对照,而不是整段机翻
右侧默认是逐句对照:每一句英文对应一句中文,点句子可以定位,选中原文可以联动高亮。整段译文也保留,适合快速通读。
逐句对齐依赖模型返回严格的句子数组,偶尔会失败。这里的处理原则是“宁可如实显示整段译文,也不伪造句对”:
- 模型返回的逐句数组条数不齐时,先重试;
- 仍然不齐时,如果整段中文译文按句号切开的句数恰好等于英文句数,就按句数做 1:1 对齐;
- 再不行就只显示整段译文,并明确标注“逐句对齐未成功”,不把两句中文硬贴到一句英文上。
3. 公式:能看清,也能复制
公式是学术 PDF 翻译里最容易翻车的地方。我的做法是“能矢量重建的矢量重建,不能的保留版面原图”:
- 单行独立公式如果能完整重建为规范 LaTeX 并通过 KaTeX 校验,就直接矢量渲染,清晰、可复制、能适配深色主题;
- 矩阵、多行优化方程、长求和/积分这类需要二维结构信息的公式,按 PDF 版面原图裁切,保证和原文一模一样;
- 行内符号、公式编号、符号表(NOMENCLATURE / NOTATION)单独处理,不送进翻译队列;
- 可选接本地 PP-FormulaNet(Python + paddleocr,CPU 即可),把公式裁图识别成 LaTeX,供导出、问 AI 和公式索引使用;识别结果要过字符守恒校验,不通过就保留原图。
这里有一个刻意的取舍:不追求“所有公式都变成 LaTeX”。逐字符拼出来的 LaTeX 可能“渲染成功、内容全错”,那比显示原图危险得多。
4. 批注、笔记与导出
- 划选文字弹出工具条:四色高亮(核心要点 / 实验数据 / 方法公式 / 疑难待查)、便签、即时翻译;
- 批注按页管理,永久保存在本地;
- 一键导出 Markdown 精读稿:按页组织「原文 → 双语对照 → 我的批注 → AI 答疑」,带 YAML 头,可直接进 Obsidian / Notion;
- 也可以导出带高光和译文附录的批注 PDF,适合打印或分享。
5. 论文级 AI 答疑
问答不是只把当前这句话丢给模型,而是可以带上当前段落、公式、甚至整篇论文的上下文(支持 Zotero 联动),并区分“标准 / 简洁 / 专家”几种回答风格。遇到公式时可以选中公式卡片的「讲透这条公式」,让模型逐符号解释并代一个小例子。
6. 一些“用了就回不去”的细节
- 切到别的文件再回来,不重新加载:保留当前页码、滚动位置、已加载的 PDF 和译文(1.8.1);
- 纸张主题联动 VS Code:白纸 / 羊皮 / 竹青保持正常主题,切到「暗夜」纸张时自动把 VS Code 切到深色,切回或关闭阅读器时恢复原主题(1.8.0);
- 本地缓存:翻回已读页不重复翻译,公式裁图和译文都跟着段落缓存;
- 支持 DeepSeek / OpenAI 兼容接口 / Gemini,也有内置免费翻译引擎,不填 API Key 也能先用起来。
后两项(主题联动、切页不重载)在 1.8.x 才加入;如果插件市场里的版本还是 1.7.x,可以从下面的 GitHub Releases 下载最新 VSIX 体验。
安装与上手
在 VS Code 插件市场搜索 Bilingual Paper Reader,或直接打开:
https://marketplace.visualstudio.com/items?itemName=paper-reader.academic-pdf-reader
也可以从 GitHub Releases 下载 VSIX 离线安装:
code --install-extension academic-pdf-reader-1.8.1.vsix
上手只要三步:
- 安装扩展,Reload Window;
- 在资源管理器里右键 PDF,选择「在双栏对照器中打开 PDF」;
- 点右上角「设置」,选一个翻译引擎并填 API Key;没有 Key 可以先切到内置免费翻译。
想用本地公式识别的话,在命令面板搜索「启用本地公式识别」,扩展会自动探测装了 paddleocr 的 Python 环境。默认关闭,不影响正常阅读。
一些工程上的取舍
这个项目踩过的坑比功能列表长得多,挑几个有意思的:
- 为什么公式不全部用 KaTeX:PDF 文本层没有“根号覆盖到哪里”“矩阵有几行”这类结构信息。强行重建会得到“看起来像公式、内容全错”的结果,所以复杂公式宁可裁图。
- 为什么纯 LaTeX 论文会被整篇识别成公式:CMR / CMSS 既是 LaTeX 正文,也是公式里的正体数字/括号。只按字体名判断会把整页正文当成公式;现在改成按整页字体统计区分“正文用的 CMR”和“公式里的 CMR”。
- 为什么表格会“切走”公式:整页大表的列间空白会被误判成双栏沟槽,表下正文被劈成碎片;现在候选分栏必须满足栏宽和两侧正文的双重条件。
- 为什么切回阅读器会重新加载:VS Code 自定义编辑器默认不保留隐藏的 webview;开启
retainContextWhenHidden后切回即恢复,代价是常驻内存,所以留了开关。 - 为什么“重新对齐”按钮以前没用:前端清了缓存,宿主的内存缓存还在,点多少次都返回同一份未对齐结果;现在重译请求会带 force 透传到宿主,真正重新请求。
适合谁,不适合谁
适合:
- 每天要读 2~3 篇论文、需要精读和做笔记的研究生 / 工程师;
- 习惯在 VS Code 里写代码、写 Markdown,想把阅读也放在同一个窗口;
- 经常读双栏、公式多、有表格的 ML / CV / 信号处理论文。
不适合:
- 扫描版 PDF(没有文本层,扩展只能显示原图,无法逐句翻译);
- 只想“一键整篇机翻”、不关心对照和批注的场景;
- 主要在手机或平板上阅读。
另外要诚实说明:版面解析和逐句对齐仍然会有失败的时候,复杂表格、特殊字体、非常规排版的论文尤其容易出问题。遇到问题欢迎提 Issue,最好附上页码和截图;这类问题通常都能定位到具体的版面规则。
链接
- VS Code 插件市场:Bilingual Paper Reader
- GitHub 仓库(MIT,欢迎 Star / Issue):SevenFriends7/academic-pdf-reader
- 最新 Release(v1.8.1):releases/tag/v1.8.1
如果这个工具能帮你少花一点时间在“找句子、对公式、切窗口”上,那它就值了。欢迎试用、反馈,也欢迎把它推荐给身边同样在啃论文的人。