fix: markdown post handel
This commit is contained in:
122
docs/LATEX_RENDERING_FIX_SUMMARY.md
Normal file
122
docs/LATEX_RENDERING_FIX_SUMMARY.md
Normal 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`
|
||||
Reference in New Issue
Block a user