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

123 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`