
RetainPDF 公式保留原理详解复杂行内公式在翻译后依然稳定的完整实现思路【免费下载链接】retain-pdf在保留版面、公式与结构的前提下进行 PDF 翻译适用于科研与技术文档项目地址: https://gitcode.com/gh_mirrors/re/retain-pdfRetainPDF 是一款专注科研与技术文档的 PDF 翻译工具它的核心能力是在保留版面、公式与结构的前提下完成整篇翻译。很多开源 PDF 翻译方案一遇到数学公式就会翻车行内公式被拆开、上下标错位、LaTeX 源码被大模型改写甚至整段公式被当成普通文字翻译。本文基于 RetainPDF 的源码与文档拆解它公式保留背后的完整实现思路从 OCR 识别、占位符保护、原文擦除到排版安全边距一共四道防线帮你理解复杂行内公式为什么在翻译后依然稳定。一、为什么 PDF 翻译里的公式最难保住先看图感受一下科研文档 公式的典型场景——这是一篇物理化学论文的首页摘要里就混排着行内公式与符号公式之所以难保留根源在于翻译流水线的工作方式它要重写文字但绝不能重写公式。难点集中在三处难点典型失败表现识别不准行内公式被当成普通文字送进翻译E_g^{dir}被翻译成乱码大模型改写LLM 顺手修正LaTeX花括号被替换、下标被拍平原文擦除误伤擦掉英文原文时把公式一起删了或者留白不干净RetainPDF 的思路不是把公式修到最漂亮而是每一层都只做低风险、可解释的操作。下面按数据流向逐层拆解。二、第一道防线识别层——分清行内公式和独立公式一切始于 OCR 输出。RetainPDF 默认消费 MinerU 的middle.json含真实页面坐标并在适配层把 provider 标签投影成自己的类型体系。规则非常明确见 output-types.mdinline_equation→ 归一为文本 span 里的inline_formula片段留在段落内随所在文本块一起走渲染但不单独送翻译interline_equation/equation→ 独立formula块整体不送翻译。这个投影决策由 NORMALIZATION.md 中的 label 映射全表锁定公式块打上formula标签并跳过翻译未知标签则保守归为元数据而非静默丢弃。识别层的意义在于——公式从此有了独立身份后续每一层都能认出它、避开它。三、第二道防线保护层——占位符隔离让大模型看不见公式行内公式真正危险的时刻是进入翻译 prompt 的那一刻。RetainPDF 的做法是把公式从文本里临时摘走换成机器可识别的占位符。核心实现在 protected_formula_tokens.py 与 formula_protection.py用 LaTeX 结构特征_、^、花括号、希腊字母串、\frac等命令识别候选公式片段将命中的片段替换为占位 token如F1、[[FORMULA_1]]这类带类型前缀的短标记原文记入formula_map大模型只负责翻译夹着占位符的散文输出后按formula_map把原始 LaTeX原样回填。这一步的价值LLM 从头到尾没有机会接触公式源码模型手滑改写公式这类不可控风险被直接物理隔离了。四、第三道防线擦除层——只删原文文字不动公式像素翻译完成后要渲染回原 PDF需要先把英文原文擦掉再叠上译文。擦除策略由render.source_cleanup_strategy控制见 source-cleanup策略.mdpikepdf_text_strip默认在 PDF 内容流层面做 text-op 物理删除再用 Typst 渲染的翻译块做视觉覆盖typst_fill不做物理删除仅用背景块覆盖原文适合删除策略不适用的 PDF。针对擦除文本带时覆盖到公式的极端情况仓库里还保留了一个很有启发性的实验 redact_restore_formula.py先对大条文本带做 redaction删文字保留图片与矢量线再定位所有与删除带相交的公式区域用show_pdf_page把原 PDF 里的公式区域作为矢量 Form XObject 原片贴回。也就是说就算文字带把公式盖住了公式也是从原文件按矢量坐标裁下来还原的——不截图、不重绘、不失真。五、第四道防线排版层——给上下标公式留足呼吸空间公式保留还不止于不删不改。下标、上标、分式在重排时很容易被行框裁掉。formula_safety.py 专门解决这件事检测公式是否含深结构_、^、\frac、\sqrt、\sum、\int等含深结构的公式行框上下安全边距按字号放大底部边距最高可到约 2.6pt超长行内公式还会检查宽度占比触发跨行布局风险处理避免硬塞进原行。效果体现在这类混排页面表格、行内表达式如[BMIM][BF4]、\Delta G符号在翻译后依然完整落在原位上下标不被裁切翻译块的叠印渲染采用 Typst 完成选型理由可参考 ADR-0002使用 Typst 做叠印渲染。六、LaTeX 保守修正原则宁可少修不过修OCR 输出的公式本质是LaTeX-ish文本\mathrm { C H }、x _ { i , j }这类被空格打散的写法很常见。RetainPDF 的修正策略写在 formula_safe_rules.md 中边界感极强允许禁止收紧\mathrm { C H }→\mathrm{CH}这类低风险格式全局{ → (、} → )字符串替换收紧a _ { b }→a_{b}的原子绑定未确认语法边界时改写\frac、\left...\right数字内部空格收紧1 . 2 7→1.27按长度或字符集猜测复杂公式结构处理顺序也是结构化的先收紧下标/上标绑定再递归处理花括号组内内容。如果复杂结构已经能渲染优先保持原样渲染失败时只做定向清理不做激进改写。七、小结四道防线各司其职层次关键机制回答的问题识别层MinerU 标签投影为inline_formula/formula公式是公式不是文字保护层占位符 formula_map回填大模型碰不到公式源码擦除层内容流删字 矢量区域原片还原删原文不误伤公式排版层深结构检测 安全边距上下标不被行框裁掉这套设计没有依赖更聪明的模型而是把风险逐层切分到工程可控的地方——这也是它能在科研文档这类公式密集场景保持稳定输出的原因。八、延伸资料MinerU 官方输出类型与归一化基线output-types.md公式安全修正规则formula_safe_rules.md渲染参数与原文擦除策略01-渲染参数.md、02-source-cleanup策略.md公式占位保护源码protected_formula_tokens.py排版安全边距源码formula_safety.py如果你想在自己的科研论文上验证效果创建一个翻译任务、观察最终 PDF 中行内公式与独立公式的呈现即可遇到特殊版式时可切换到typst_fill擦除策略做对照。【免费下载链接】retain-pdf在保留版面、公式与结构的前提下进行 PDF 翻译适用于科研与技术文档项目地址: https://gitcode.com/gh_mirrors/re/retain-pdf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考