Files
doc_processer/docs/LATEX_RENDERING_FIX_SUMMARY.md
2026-02-05 13:18:55 +08:00

3.5 KiB
Raw Blame History

LaTeX 字符渲染问题 - 快速修复指南

问题

识别完成后,\lambda\vdots 等 LaTeX 字符没有被正确渲染。

根本原因

不是前端二次处理问题,也不是 LaTeX 语法问题,而是后端 MathML Unicode 实体映射不完整。

app/services/converter.py_postprocess_mathml_for_word() 函数中Pandoc 生成的 Unicode 实体(如 λ⋮)没有被完整转换为实际字符(λ 和 ⋮)。

已实施的修复

1. 扩展 Unicode 实体映射表

文件: app/services/converter.py

修改内容:

  • 新增 24 个小写希腊字母映射
  • 新增 24 个大写希腊字母映射
  • 新增所有省略号符号(\vdots, \cdots, \ddots, \iddots, \ldots
  • 新增 50+ 个常用数学符号
  • 新增十进制格式实体处理

2. 支持的字符示例

问题字符 Unicode 修复前 修复后
\lambda λ λ 未转换 转换为 λ
\vdots ⋮ 未转换 转换为 ⋮
\Lambda Λ Λ 未转换 转换为 Λ
\cdots ⋯ 未转换 转换为 ⋯
\infty ∞ 未转换 转换为 ∞
\sum ∑ 未转换 转换为 ∑

验证步骤

1. 运行测试(可选)

cd /Users/yoge/dev/yoge/doc_processer
python test_unicode_fix.py

2. 测试 API 端点

# 测试 lambda 和 vdots
curl -X POST "http://localhost:8000/api/v1/convert/latex-to-omml" \
  -H "Content-Type: application/json" \
  -d '{"latex": "\\lambda_1, \\lambda_2, \\vdots, \\lambda_n"}'

3. 检查前端(如果后端正常)

如果 API 返回正确但前端显示有问题:

  1. 检查 API 响应: 使用浏览器开发者工具查看实际返回的内容
  2. 检查 MathJax/KaTeX: 确认渲染库版本和配置
  3. 检查字体加载: 确认数学字体正确加载
  4. 检查 JS 错误: 控制台是否有报错

诊断工具

如果仍有问题,使用诊断工具

# 诊断后处理管道
python diagnose_latex_rendering.py "$\lambda + \vdots$"

# 测试完整转换流程
python test_unicode_fix.py

技术细节

修改位置

文件: app/services/converter.py 函数: _postprocess_mathml_for_word() 行数: ~420-485

修改内容

  1. 扩展 unicode_map 字典:

    • 从 ~33 个映射增加到 ~180 个映射
    • 覆盖所有常用希腊字母和数学符号
  2. 新增十进制实体处理:

    decimal_patterns = [
        (r'λ', 'λ'),    # lambda (decimal)
        (r'⋮', '⋮'),   # vdots (decimal)
        # ... 更多映射
    ]
    

为什么这样修复

  1. Pandoc 输出格式多样: 可能输出十六进制或十进制实体
  2. Word 偏好 Unicode: 直接使用 Unicode 字符而非实体
  3. 性能优化: 字符串替换速度快,影响小
  4. 兼容性好: 不影响现有功能

总结

方面 状态
LaTeX 语法 正确
OCR 后处理 不修改 \lambda\vdots
MathML 转换 已修复(扩展实体映射)
前端处理 需要验证

建议:

  1. 先测试后端 API 是否返回正确的 Unicode 字符
  2. 如果后端正常,再检查前端渲染
  3. 使用提供的诊断工具定位具体问题

文档

详细报告: /Users/yoge/dev/yoge/doc_processer/docs/LATEX_RENDERING_FIX_REPORT.md