# 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. 运行测试(可选) ```bash cd /Users/yoge/dev/yoge/doc_processer python test_unicode_fix.py ``` ### 2. 测试 API 端点 ```bash # 测试 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 错误**: 控制台是否有报错 ## 诊断工具 ### 如果仍有问题,使用诊断工具 ```bash # 诊断后处理管道 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. **新增十进制实体处理**: ```python 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`