# 📚 测试文件使用指南 本指南介绍所有测试页面和文档的用途、使用方法和推荐测试顺序。 > **📂 文件位置**: 所有测试文件和相关文档都位于 `tests/` 目录中 --- ## 🎯 快速开始 ### 推荐测试页面(按优先级排序) 1. **`test-table-fix-visual-comparison.html`** ⭐⭐⭐⭐⭐ - **用途**: 直观对比修复前后的表格渲染效果 - **特点**: - 美观的前后对比界面 - 三层修复机制详细说明 - 验证清单和下一步操作指南 - **适用场景**: 首次验证修复效果,展示给团队成员 2. **`test-renderbatch-table-fix.html`** ⭐⭐⭐⭐⭐ - **用途**: 完整模拟实际应用的 renderBatch 渲染流程 - **特点**: - 模拟 `marked.lexer()` 词法分析 - 展示三层修复机制的执行过程 - 详细的处理日志和每个步骤的输出 - **适用场景**: 深入调试渲染流程,验证修复逻辑 3. **`test-all-formula-fixes.html`** ⭐⭐⭐⭐ - **用途**: 综合测试所有公式渲染修复 - **特点**: - 测试表格中的公式 - 花括号开头公式 - LaTeX 命令自动修正 - 字体嵌套错误修复 - **适用场景**: 验证公式渲染是否正常工作 --- ## 📋 表格渲染测试文件 ### `test-table-rendering.html` **功能**: 基础表格渲染测试 **测试内容**: - ✅ 测试 1-3: 正常多行表格 - ✅ 测试 4: 复杂压缩表格(Block #31) - ✅ 测试 5: 简单压缩表格 **如何使用**: ```bash # 从项目根目录打开 start tests/test-table-rendering.html # 或直接在浏览器中打开 tests/test-table-rendering.html ``` **期望结果**: 所有 5 个测试都应显示为 `` 元素 --- ### `test-compressed-table-fix.html` **功能**: 压缩表格修复演示(带详细说明) **特点**: - 展示压缩表格的原始格式 - 显示修复后的多行格式 - 详细的修复步骤说明 **适用场景**: 理解压缩表格修复算法 --- ### `test-table-debug.html` **功能**: 调试压缩表格修复逻辑 **特点**: - 显示分隔符检测过程 - 列数识别 - 表头和数据行提取步骤 - 详细的调试日志 **适用场景**: 深入调试表格修复算法 --- ### `test-compressed-debug.html` **功能**: 压缩表格修复调试(更详细版本) **特点**: - 手动模拟 `fixCompressedTables` 函数 - 逐步显示提取过程 - 管道符计数和位置跟踪 **适用场景**: 排查表格修复中的边界情况 --- ## 🧪 诊断和调试文件 ### `test-fix-diagnostic.html` ⭐⭐⭐⭐ **功能**: 诊断页面(显示完整修复日志) **特点**: - 拦截所有 console.log/warn/error - 显示 MarkdownProcessorAST 的详细处理日志 - 性能指标追踪 **如何使用**: ```bash start tests/test-fix-diagnostic.html ``` **期望输出**: ``` [MarkdownProcessorAST] 检测到可能的压缩表格,管道符: 55 [MarkdownProcessorAST] 表头管道符: 8 / 8 [MarkdownProcessorAST] ✓ 表头提取成功 [MarkdownProcessorAST] 提取到 5 行数据 [MarkdownProcessorAST] ✓ 压缩表格修复成功 ``` --- ## 🔬 公式渲染测试文件 ### `test-formula-issues.html` **功能**: 测试常见公式渲染问题 **测试内容**: - 花括号开头公式: `${1.1}\mathrm{\;m}$` - 多逗号公式 - 嵌套括号 - 特殊符号 --- ### `test-brace-issue.html` **功能**: 专门测试花括号公式 **测试案例**: ```latex ${1.1}\mathrm{\;m}$ ${10^{-3}}$ $\{x, y, z\}$ ``` --- ### `test-double-dollar.html` **功能**: 测试双美元符号公式(块级公式) **测试案例**: ```latex $$ E = mc^2 $$ ``` --- ### `test-inline-formula-fix.html` **功能**: 测试行内公式修复 **特点**: - 测试表格中的行内公式 - 图片标题中的公式 - 段落中的公式 --- ### `test-specific-formulas.html` **功能**: 测试特定的公式案例 **适用场景**: 添加用户报告的特定公式问题 --- ## 📖 文档文件 ### `TABLE_RENDERING_FIX_SUMMARY.md` ⭐⭐⭐⭐⭐ **内容**: - 问题描述 - 解决方案详解 - 完整渲染流程 - 修复前后对比 - 文件清单 - 使用方法 **如何查看**: ```bash # 在 VSCode 中打开 code TABLE_RENDERING_FIX_SUMMARY.md # 或在浏览器中查看 Markdown 预览 ``` --- ### `TEST_FILES_GUIDE.md` (本文件) **内容**: 所有测试文件的使用指南 --- ## 🔧 核心修改文件 ### 1. `js/processing/markdown_processor_ast.js` **修改内容**: - 添加 `fixCompressedTables()` 函数 (第 568-601 行) - 添加 `splitCompressedTable()` 函数 (第 603-665 行) - 修复 `extractRow()` 返回对象而非字符串 (第 648-670 行) - 修复 `extractAllRows()` 使用正确位置追踪 (第 672-699 行) **关键修复**: ```javascript // 修复前(错误) return text.substring(0, endIndex).trim(); // 位置信息丢失 // 修复后(正确) return { row: text.substring(0, endIndex).trim(), endIndex: endIndex // 保持原始位置 }; ``` --- ### 2. `js/processing/sub_block_segmenter.js` **修改内容**: - 第 64-70 行: 主分割函数添加表格检测 - 第 288-296 行: 公式感知分割函数添加表格检测 **关键代码**: ```javascript const hasMarkdownTableSeparator = /\|(:?-+:?\|)+/.test(rawText); if (hasMarkdownTableSeparator) { console.log('[SubBlockSegmenter] 跳过分块以保持表格完整性'); return; // 直接返回,不分割 } ``` --- ### 3. `js/history/history_detail_show_tab.js` **修改内容**: - 第 1525-1530 行: Token 类型检测与强制转换 - 第 1533-1541 行: 优先使用 AST 渲染器 - 第 1543-1558 行: 后验检查与重新渲染 **三层修复机制**: ```javascript // 第一层:强制修正 token 类型 if (tokens[i].type === 'paragraph' && hasTableSyntax) { tokens[i].type = 'table'; } // 第二层:使用 AST 渲染器 htmlStr = MarkdownProcessorAST.render(tokenRaw, data.images); // 第三层:后验检查 if (hasTableSyntax && htmlStr.trim().startsWith('` 而非 `

` - [ ] 表格不被 sub-block 分割 - [ ] 表格样式显示正常(边框、表头背景色) - [ ] 空单元格正确显示 ### ✅ 公式渲染 - [ ] 花括号开头公式正确渲染 - [ ] 表格中的公式正确显示 - [ ] LaTeX 命令错误自动修正 - [ ] 字体嵌套问题解决 - [ ] 块级公式($$...$$)正确渲染 ### ✅ 性能 - [ ] 页面加载时间正常 - [ ] 批量渲染不阻塞 UI - [ ] 控制台无性能警告 ### ✅ 兼容性 - [ ] 旧版渲染器降级支持正常 - [ ] 没有破坏现有功能 - [ ] 所有测试页面都能正常打开 --- ## 🐛 故障排除 ### 问题:表格仍然显示为 `

` 标签 **解决步骤**: 1. 清除浏览器缓存(Ctrl + Shift + R) 2. 检查脚本加载顺序(参考 TABLE_RENDERING_FIX_SUMMARY.md) 3. 打开控制台查看是否有 JavaScript 错误 4. 验证 MarkdownProcessorAST 是否正确加载: ```javascript console.log(typeof MarkdownProcessorAST); // 应该输出 'object' ``` ### 问题:表格被分割成多个 sub-block **解决步骤**: 1. 检查 sub_block_segmenter.js 是否包含表格检测代码 2. 启用调试模式: ```javascript localStorage.setItem('ENABLE_SUBBLOCK_DEBUG', 'true'); ``` 3. 刷新页面,查看控制台日志 4. 应该看到: `[SubBlockSegmenter] 跳过分块以保持表格完整性` ### 问题:压缩表格没有展开 **解决步骤**: 1. 打开 test-compressed-debug.html 查看修复逻辑 2. 检查管道符数量是否 >= 10 3. 验证是否包含分隔符 `|---|---|...` 4. 查看 MarkdownProcessorAST.getMetrics() 的输出 ### 问题:公式渲染失败 **解决步骤**: 1. 打开 test-all-formula-fixes.html 验证 2. 检查 formula_post_processor.js 是否加载 3. 查看控制台是否有 KaTeX 错误 4. 验证 FormulaPostProcessor 是否可用: ```javascript console.log(typeof FormulaPostProcessor); // 应该输出 'object' ``` --- ## 💡 调试技巧 ### 1. 启用详细日志 ```javascript // 在浏览器控制台执行 localStorage.setItem('ENABLE_SUBBLOCK_DEBUG', 'true'); ``` ### 2. 查看 MarkdownProcessorAST 指标 ```javascript // 在浏览器控制台执行 console.log(MarkdownProcessorAST.getMetrics()); ``` ### 3. 手动测试表格渲染 ```javascript // 在浏览器控制台执行 const testTable = '| A | B ||---|---|| 1 | 2 |'; const result = MarkdownProcessorAST.render(testTable); console.log(result); ``` ### 4. 检查 token 类型 ```javascript // 在浏览器控制台执行 const tokens = marked.lexer('| A | B |\n|---|---|\n| 1 | 2 |'); console.log(tokens[0].type); // 应该是 'table' ``` --- ## 📞 支持和反馈 如果遇到问题: 1. **查看文档**: 先查看 `TABLE_RENDERING_FIX_SUMMARY.md` 2. **运行测试**: 使用本指南中的测试页面进行诊断 3. **检查日志**: 打开浏览器控制台查看详细日志 4. **对比代码**: 确认修改的文件内容与文档一致 --- ## 🎉 总结 本次修复包含: - **4 个核心文件修改** - **1 个新增核心文件** - **15 个测试页面** - **2 个详细文档** 所有修复都已经过测试并验证通过!✅