[分享创造] 做了一个开源 Zotero 插件 Mktero:把论文 PDF 读成能跳回原文的 Markdown

大家好,我是 Mktero 的作者。这是一个 Zotero 7–10 的扩展,MIT 开源。

为什么做

自己读论文时有几个一直很烦的地方:双栏 PDF 读完左栏要回到顶部找右栏;公式表格在小窗口里看不清,复制出来是乱码;想核对一个数字,又得回 PDF 里一页页翻。

现有的 PDF 转 Markdown 工具能解决一部分,但转出来的 Markdown 和 PDF 是两份文件,笔记和高亮对不上,引用前也没法确认原文。

它做什么

右键 PDF →「使用 Mktero 阅读 Markdown 」,论文会在 Zotero 标签页里变成一栏连续正文:

  • 双栏按阅读顺序重排,公式( KaTeX )、表格、图片、引用、脚注都保留;刊头、页眉页脚和页码隐藏
  • 段落、公式、表格、图片都保留页码和区域映射,「在 PDF 中查看」直接跳回原页原位置
  • 在 Markdown 里做的高亮就是 Zotero 的 PDF 注释,PDF 里已有的高亮也会显示在 Markdown 里
  • 校对 OCR 错字(段落、标题、表格单元格),改动单独保存,不改缓存的转换结果
  • 行间公式复制成 LaTeX ,表格复制成 Markdown 或 CSV
  • 可选 AI 翻译:原文 / 译文 / 双语切换
  • 批量转换:多选条目或右键分类,后台排队
  • 导出到本地文件夹或 Obsidian 库

实现上的几点

  • OCR 和版面分析交给 MinerU 或 Mistral OCR 。拿到结果后,插件在本地读取 PDF 自带的文字层:把在换页、换栏处断开的段落接回去;对排版生成的 PDF ,还会把 OCR 模型擅自"改正"的词(人名、作者原本的拼写)换回印刷原文
  • 图组只在版面证据、页面坐标和 Markdown 范围三者一致时才从本地 PDF 恢复,放在后台 Worker 里跑,不阻塞阅读
  • 缓存按内容寻址:key 由 PDF 内容和解析配置决定,同一篇论文再次打开不重新转换
  • 阅读器基于 CodeMirror 6 ,渲染为只读(校对编辑器除外)。PDF 处理用 pdf.js ,翻译走 Vercel AI SDK
  • 运行时是普通 JavaScript ,打包成兼容 Firefox 115 的 restartless 扩展,所以能覆盖 Zotero 7 到 10

数据去哪了

这点写在前面,因为未发表的论文比较敏感:

  • 默认转换:缓存里还没有的 PDF 会整份发到我运营的转换服务,需要登录 Mktero 账号,不需要 OCR 密钥
  • 不想上传:可以改用自己的 MinerU 云端 key 、自部署的 MinerU 4.0 ,或 Mistral OCR 。PDF 改发到那里,不需要 Mktero 账号。自部署 MinerU 的话,PDF 不出你的机器或内网
  • 翻译:只用你自己配置的 AI 厂商( OpenAI 、Anthropic 、Google 、DeepSeek 、阿里云百炼、Moonshot 、MiniMax ,或任意 OpenAI 兼容接口),不经过我的服务器
  • 缓存、校对、凭据都以明文存放在当前的 Zotero 配置文件夹里,Mktero 不同步它们

完整的数据去向表: https://github.com/tenglvjun/mktero/blob/main/docs/privacy.zh-CN.md

已知限制

  • 还是 Beta
  • 扫描件、三栏及以上、海报这类排版,阅读顺序可能出错,所以每一块都留了跳回 PDF 的入口
  • 默认转换和 MinerU 云端单个 PDF 最多 200 页(上传前在本地数页数)
  • 界面只支持英文和简体中文

安装

  1. 在 GitHub Releases 下载最新的 .xpi: https://github.com/tenglvjun/mktero/releases/latest
  2. Zotero →「工具 → 插件」→ 齿轮菜单 → Install Add-on From File...
  3. 在「设置 → Mktero 」登录,或改选 MinerU / Mistral

欢迎拍砖,特别想知道哪类论文的阅读顺序会出问题。Issue 、Discussions 都可以,有问题也可以直接在帖子里回复。

参与讨论