AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Paper Translator

skill-obenic-translating-papers-paper-translator · by obenic

Use when the user asks to translate an academic paper, PDF, or foreign-language literature (e.g. "翻译这篇文献", "把PDF翻译成中文", "translate this paper", 上传英文文献要求翻译), including scanned PDFs and papers whose figures sit on separate pages.

No reviews yet
0 installs
28 views
0.0% view→install

Install

$ agentstack add skill-obenic-translating-papers-paper-translator

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access Used
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-obenic-translating-papers-paper-translator)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Paper Translator? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

文献翻译

把学术论文 PDF 译成中文,图文完整,同时产出 Markdown 与 PDF。

铁律:论文 = 正文 + 图

只提取文本层,你会交付一份看起来完整、实际残缺的译文——图注翻译得再好,读者也看不到图。

这不是假设,是本 skill 的成因:一篇 24 页论文,正文 20 页有文本层,图 1–4 单独占第 21–24 页。文本提取一切正常、零报错、零缺页,图却一张都没进译文。

PDF 里的图有三种形态,文本提取全都拿不到:

| 形态 | 为什么会漏 | |------|-----------| | 独立整页图 | 该页文字量≈0,但整篇不是扫描件,"扫描件检测"放行 | | 正文页内嵌图 | 该页文字量正常,看不出异常 | | 矢量绘制图表 | get_images() 返回 0 张,栅格图检测完全失效 |

extract_paper.py 三种都检测,并做图数量交叉校验:正文引用了 Fig.1–4,就必须产出 4 张图。对不上时脚本 exit 3 并告警——不要在告警未解决前开始翻译。

流程

0. 首选:先把 PDF 转成 Word

这是默认第一步,不是可选项。 PDF 转 Word 的转换器已经替你解决了本 skill 最难的两件事:图以图片形式嵌进去了,而且落在正文里它原本该在的位置。拿到这个就不用再做图区检测、切面板、猜图该插哪,全省了。

> Word 文档只是脚手架,不是交付物。最终输出仍然是 Markdown + PDF + 图片文件夹,层次结构和原来一样。

SK=~/.claude/skills/paper-translator
python "$SK/pdf_to_docx.py" ""          # auto:先 Acrobat,失败退 Word
python "$SK/pdf_to_docx.py" --check          # 看本机有哪些转换器

Acrobat Pro 质量最好,但导出没法自动调用doc.saveAs 是特权方法,COM 外部调用一律被拒(报「尚未实现」)。标准绕法是装 folder-level 受信任脚本(--install-acrobat-js),但 Acrobat 25.x 不加载用户级 folder 脚本,应用级目录又需要管理员权限。所以:

让用户手动导出(四步,质量最好):

Acrobat Pro 打开 PDF → File → Export To → Microsoft Word → Word Document
在保存对话框里点 Settings… → Layout Settings → 选「Retain Page Layout」

「Retain Page Layout」是关键,另一个选项「Retain Flowing Text」会重排页面、把图挪走。

Word COM 是自动兜底,质量差一档:实测把双栏正文打散进 58 个文本框,还切在词中间(ScienceDirec + t)。能用,但译文可能不连贯。

0.1 从 Word 抽正文 + 图 + 图的位置

python "$SK/docx_extract.py" ""

产出 content.md(正文按顺序,图的位置用 [[FIG 2 -> media/fig02.jpg]] 标出)、content.jsonmedia/(图片,按图号命名)、manifest.json

自动处理掉三个坑:

| 坑 | 处理 | |---|---| | 每段文字出现两遍 | Word 把文本框同时写成 DrawingML 和 VML 两份,跳过 mc:Fallback 子树 | | 出版商 logo 被当成图 1、图 2,真图全体错位两号 | 按像素尺寸滤掉页面装饰(Elsevier logo 只有 248×271,真图 ≥ 950) | | 图和它自己的图注在 XML 里离得很远 | Word 把浮动图锚在附近任意一段上,所以按顺序配对图与图注,不按距离 |

content.md 里 `` 标记的段落是参考文献/致谢/声明那些,翻译时跳过。

0.2 决策点:问用户满不满意 ★

抽完必须停下来问,不许自己替用户决定。 PDF 转 Word 会失真——原件带水印、扫描件、特殊字体、公式排版复杂时,可能出现乱码、错字、缺字、段落错乱。

给用户看:content.md 的前几段 + manifest.json 里的字数/图数,然后二选一:

| 用户回答 | 走哪条路 | |---|---| | 满意 | 直接翻译 content.md,跳过第 1 步,不做 OCR、不做多模态识图 | | 不满意 | 走第 1 步(extract_paper.py + --ocr 或多模态识图),Word 那份丢弃 |

问的时候把具体风险说出来(「有水印/公式多的原件容易出错字」),别只问一句「行不行」。

1. 提取(回退路径:Word 转换不满意时才走)

脚本在 skill 目录下(全局安装)。Bash 用 ~,PowerShell 用 $env:USERPROFILE

SK=~/.claude/skills/paper-translator
python "$SK/extract_paper.py" "" -o ""

扫描件处理:

脚本自动检测有无文本层。检测到扫描件(text_pages: 0)时两条路,选一条:

| 方式 | 命令 | 前提 | |---|---|---| | OCR 提取 | 加 --ocr | 已装 PaddleOCR | | 视觉识图 | 不加参数 | 当前模型能识图 |

python "$SK/extract_paper.py" "" -o "" --ocr
# 中英混排原件加 --ocr-lang ch;识别率低加 --dpi 300

--ocr 对文字型 PDF 会自动忽略(文本层本来就比 OCR 准),加了不会白跑。

产出 text.txtfigures/pNN.pngmanifest.json,并打印摘要。

先看退出码:

  • 0 — 图数量一致,继续
  • 3图可能漏了。查 manifest.jsonper_page 定位缺失页,用 --pages 5,12-14 强制渲染,直到一致
  • 1 — 报错(缺 PyMuPDF → pip install pymupdf;缺 PaddleOCR → pip install paddlepaddle paddleocr

摘要里 SCANNED 表示全篇无文本层。此时:

  • 用了 --ocrtext.txt 已是 OCR 结果,照常翻译,但要提醒用户 OCR 可能认错字,公式和符号尤其要核对
  • 没用 --ocrfigures/ 就是全部页面,用 Read 工具逐张视觉识别后翻译

若当前模型不具备识图能力,且未启用 --ocr,扫描件到此为止:如实告诉用户「本模型无法读取扫描件内容」,让用户改用 --ocr、换多模态模型,或提供文字版 PDF。绝不允许根据文件名、页数或常识推测论文内容——编造的译文比没有译文危害大得多。

1.5 切分面板

一张 figures/pNN.png 常常是十几个子图挤在一起。图注写的是「a 温度分布……b 皮尔逊热图……」,读者却只有一整块图可看,得自己数格子。所以按 a/b/c 切开,每个面板配自己那句图注

python "$SK/panel_split.py" "/figures/p22.png" -o "/panels" --layout 4,3,4,3,1

--layout 是每行几个面板,必须自己看图数出来。 这一步不能省:面板之间的行间距可以只有 4 px,而面板内部(图和刻度标签之间)的空白能有 30 px,纯靠像素分不出哪条是边界。你看一眼就知道的事,算法猜不到。

不给 --layout 也能跑(自动模式),但它经常数错个数——数错时脚本会明说并 exit 3,不会假装成功。自动模式只适合先看看图长什么样。

脚本用 OCR 做四重校验,任何一条不过就 exit 3:

| 校验 | 抓的是什么 | |---|---| | 标签一致性 | OCR 读到的 a/b/c 必须落在按阅读顺序命名为同名的那张图里。12 个标签全部对上,就等于 12 次独立确认切对了 | | 边框留白 | 每张图四周必须是背景色。有墨压在边上 = 内容被切断 | | 墨量守恒 | 所有面板加起来要覆盖整图 ~100% 的墨。少了 = 丢了色标/图例 | | 文字守恒 | 每个 OCR 文本框都要落进某张面板 |

OCR 读不出 ilo 是常态(细笔画),脚本会在 note 里说明,并靠其余标签的一致性给它们背书——这不算失败。

退出码 3 时先看图再决定:报「content is cut off」但面板本身完整,通常是相邻面板的坐标轴标题蹭进来了,可以接受;报「two panels merged」或「panel count or order is wrong」则是真错了,改 --layout 重来。

实在切不干净的(面板之间根本没有空白,如并排的 force plot),退回用整张 figures/pNN.png,别硬切。

2. 翻译

长文分批,每批 8–10 页,译完追加写入,避免上下文溢出。

  • 全文翻译,不跳段:摘要、引言、结果、讨论、方法、作者贡献、图注
  • 参考文献列表保留英文,不翻译
  • 图注要翻译。复杂图的图注能有几百字,是读懂图的唯一入口,留英文等于把图的含义藏起来了
  • 图注里的面板标记(a / (a))与图号原样保留,只译描述文字
  • 图片本体不动:图里的英文标注保持原样,不做 OCR 重排
  • 参考文献、致谢、声明类章节不翻译
  • 术语首次出现附原文:系间窜越(intersystem crossing, ISC)
  • 化学式、单位、数值、公式编号、图表编号(Fig. 1a)原样保留
  • 公式用 Unicode 符号表达,复杂公式辅以文字说明
  • 人名、期刊名保留英文
  • 转义作者行里的 *#(通讯作者/共一标记):写成 \* \#。两个裸 * 会配对成斜体,把中间所有作者名变成斜体

3. 写 Markdown

中文翻译.md + 同目录 _figs/ 图片文件夹(相对路径,两者必须同级)。

图注必须写在 ![...] 方括号内,不能作为独立段落放在图片前后:

切好面板后,一个面板一张图,配它自己那一句图注。写的时候可以先集中放在一处(省事),第 3.5 步会自动搬到正文对应位置:

### 图 2 | 机器学习引导的合成条件分析与性能

图注里原本的 a b c 前缀改写成「图 2a」这种带图号的形式,读者跳着看也不会错位。文件名带图号fig02_a.png),第 3.5 步靠它和图注里的「图 2」定位。

没切成面板时(面板互相紧贴、或退出码 3 查证后决定不切),退回整张图 + 完整图注:

pandoc 的 implicit_figures 会把它变成 ` + ` 原子块,分页时图和图注永不分离。

图注写成独立段落会出事:分页时图片被推到下一页顶部,紧跟着的是下一张图的图注,读者看到的是「图 1 的图片 + 图 2 的图注」。这种错误比没有图注更糟,而且肉眼看 Markdown 完全正常,只在 PDF 里暴露。

不要把图和图注拆成"数据图"和"图注"两个章节。

3.5 插图归位

图全堆在文末的 ## 图 里,读者在第 4 页读到「如图 2 所示」,要翻到第 12 页再翻回来。图必须紧跟在第一次提到它的那段正文后面。

python "$SK/insert_figures.py" ""

脚本把已有的图块(图片行 + 它上面的 ### 图 N 小标题)整块抬出来,再插到第一次提到该图号的正文段落之后;文末空掉的 ## 图 小节自动删除。原文件留 .bak

  • --dry-run 看一遍归位结果再落盘
  • 「补充图 2」不算提到图 2,脚本会跳过(不跳的话图 2 会被插到一句只提补充图的段落后面)
  • 退出码 3 = 有图在正文里根本找不到提及。要么译文漏了那句引用,要么措辞不同(比如只写了「见下图」),必须去查,别直接交付
  • 脚本会核对前后图片数量,不一致就拒绝写入

顺序上:先切面板(1.5)→ 写译文(3)→ 归位(3.5)→ 转 PDF(4)。

4. 转 PDF

python "$SK/md_to_pdf.py" ""

pandoc → 自包含 HTML(图片转 data URI)→ Chrome/Edge 无头打印。不需要 LaTeX。 默认输出同名 .pdf--font sans 可换黑体正文,--keep-html 保留中间 HTML 排查排版。

图片已内嵌进 PDF,所以 PDF 单独发送不会裂图;Markdown 仍依赖同级图片文件夹。

5. 完成前自检

声称完成前逐条确认,不能凭印象:

  • [ ] 走了哪条路已经问过用户(Word 转换满意 → 直接翻;不满意 → OCR/识图)
  • [ ] 提取脚本退出码 0(或告警已查证解决)
  • [ ] 切面板的退出码 0(或退出码 3 已逐条看图查证)
  • [ ] 插图归位的退出码 0(每张图都找到了正文提及)
  • [ ] md 里 ![ 数量 == 面板总数(或未切分时 == 图数量)
  • [ ] PDF 里逐张图确认「图 N 的图片」配「图 N 的图注」——渲染几页出来看,不要只看页数
  • [ ] PDF 里图紧跟在提到它的正文后面,不是全挤在文末
  • [ ] 面板顺序没串:fig02_a.png 配的是 2a 的图注,不是 2b 的
  • [ ] 各章节齐全(对照 text.txt,无整段遗漏)
  • [ ] 临时目录已删除

交付时一并告知用户:译文需人工复核,数据、单位、结论性表述尤其要对照原文,不要直接用于投稿或引用。

校验图注是否错位:

python -c "import fitz,re; d=fitz.open(r''); [print(i+1, re.findall(r'图\s*\d+\s*\|', p.get_text())) for i,p in enumerate(d) if p.get_images()]"

每个有图的页面应当只出现一个图号。

常见错误

| 问题 | 解决 | |------|------| | 图数量告警,但确实只有 N 张图 | 一页可能含多图。查 manifest 确认后按实际情况继续 | | 引用了 Supplementary Fig.17 却没这张图 | 正常,SI 是独立文件;脚本已排除 Supplementary/Extended Data | | PDF 里作者名大段变斜体 | 作者行的 * 未转义,改 \* | | PDF 顶部标题出现两次 | 正常已由 CSS 屏蔽;若仍出现,检查 md 是否自带 H1 | | 拉丁字母显示成打字机风格 | 字体栈把中文字体排在了前面,拉丁字符应先落到 Georgia | | 图片文件过大 | --max-width 1200(默认 1600px) | | 切面板报 "panel count or order is wrong" | 没给 --layout,或数错了。看图重数每行几个 | | 切面板报 "content is cut off" | 先看图。只是邻图的轴标题蹭进来就可以接受;真被切断则调 --pad,或该图退回整张 | | 切出来多了一块页眉 | 正常,脚本按「在首个面板标签之上」判为页面装饰并排除,不计入墨量守恒 | | OCR 读不出 i / l / o | 常态,note 里会写明;靠其余标签一致性背书,不算失败 | | 面板之间根本没有空白 | 并排的 force plot 一类。别硬切,退回整张图 | | 归位报「NO MENTION FOUND」 | 译文里没有「图 N」字样。查是漏译了引用句,还是原文写的「见下图」这种;补上引用再跑 | | 图被插到只提「补充图 N」的段落后 | 脚本已排除补充/附/Supplementary 前缀;若仍出现,检查该段是否真的没提正文图 | | 归位后图仍在文末 | 那一张就是没找到提及,退出码 3 已告警,去查 | | 扫描件字迹模糊 | --dpi 300 | | 提取文本断行严重 | 用 Read 工具直接读 PDF(pages 参数)交叉核对 |

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.