数学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 的转换脚本吗?