fix: markdown post handel

This commit is contained in:
liuyuanchuang
2026-02-05 13:18:55 +08:00
parent 808d29bd45
commit 280a8cdaeb
9 changed files with 2108 additions and 24 deletions

View File

@@ -0,0 +1,122 @@
# 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`