我的博客

分享技术与思想的点滴

数学PDF的Markdown格式的转换

你的感觉完全正确。MarkItDown 在处理数学公式(LaTeX 数学环境)时几乎是无能的。 这是它的底层设计决定的,不是你的操作问题。

核心原因

转换目标 MarkItDown 的做法 结果
行内公式 $...$ 当成普通文本提取 E=mc^2 变成 E=mc2
独立公式 $$...$$ 当成普通文本提取 丢失对齐、矩阵、分式结构
希腊字母/符号 尝试 Unicode 映射 \alpha 可能变成 α,但 \sum 大概率丢失
PDF 原生公式 无法识别 乱码或直接丢弃

MarkItDown 本质上是一个"文字提取器",不是"公式解析器"。


解决方案(按数学友好度排序)

方案一:使用 MathPix 或 Mathpix CLI(最强,收费)

MathPix 是专门为数学 PDF 设计的 OCR 工具,能将公式直接识别为 LaTeX 代码,然后你可以再转成 MD。

# 安装 Mathpix CLI
pip install mathpix

# 转换 PDF
mathpix 数学论文.pdf --output 数学论文.md

效果:公式完整保留为 $$...$$ 格式,Markdown 渲染器能完美显示。


方案二:Docling + LaTeX 中间转换(免费,需要两步)

IBM 开源的 Docling 对数学 PDF 的支持比 MarkItDown 好得多,它能把公式转成 LaTeX。

# 1. 安装 Docling
pip install docling

# 2. PDF -> LaTeX(保留公式)
docling 数学论文.pdf --to latex --output 数学论文.tex

# 3. LaTeX -> Markdown(使用 pandoc)
pandoc 数学论文.tex -o 数学论文.md --mathjax

效果:公式被包裹在 $$ 里,兼容 GitHub、Obsidian、Typora。


方案三:nougat(Meta 开源,专攻数学 PDF)

Meta 开源的 Nougat 是专门为科学论文 PDF 转 Markdown 训练的模型。

# 安装
pip install nougat-ocr

# 转换
nougat 数学论文.pdf --out output_dir

效果:输出标准的 .mmd(Math Markdown)文件,公式、表格、引用都保留得很好。


方案四:在 MarkItDown 基础上加一层公式 OCR(混合方案)

如果你必须用 MarkItDown 处理文字部分,公式部分可以用 LaTeX-OCR 单独补上。

from PIL import Image
import fitz  # PyMuPDF
from pix2tex.cli import LatexOCR

# 1. 用 MarkItDown 提取纯文字
# 2. 用 PyMuPDF 把 PDF 中的公式区域截图
# 3. 用 LaTeX-OCR 识别公式,替换回 MD 中

model = LatexOCR()
formula_img = Image.open("截图的公式.png")
latex_code = model(formula_img)
print(latex_code)  # 输出: \frac{1}{2\pi}\int_{-\infty}^{\infty}...

这个方案复杂,只适合少量公式。


总结:数学论文转 MD 的推荐路线

你的需求 推荐工具 一句话理由
公式多,要准确 MathPix 效果最好,但收费(有免费额度)
公式多,要免费 Nougat Meta 出品,专攻科学论文
公式一般,但要保留结构 Docling + Pandoc 全免费,两步搞定
公式很少,主要是文字 MarkItDown + 手动补公式 手动改一下也行

如果这篇论文对你很重要,建议直接试试 Nougat 或 Docling。需要我帮你写一个针对数学 PDF 的转换脚本吗?