--- name: compare-layouts description: 比较 Original (ltc-guji.cls) 和 Digital (ltc-guji-digital.cls) TeX 文件的 layout 输出 --- # Guji Layout Compare 比较原始和数字化 TeX 文件的排版一致性。 ## 使用方法 ### Python 脚本(推荐) ```bash # 基本用法:自动检测编译、比较、生成报告 python3 scripts/digitalize/compare_guji_layouts.py original.tex digital.tex # 强制重新编译 python3 scripts/digitalize/compare_guji_layouts.py original.tex digital.tex --force # 指定报告输出路径 python3 scripts/digitalize/compare_guji_layouts.py original.tex digital.tex -o report.md # 只比较已有的 JSON(跳过编译) python3 scripts/digitalize/compare_guji_layouts.py original.tex digital.tex --no-compile ``` ### 功能特性 1. **智能编译检测** - 自动检查 layout JSON 是否存在 - 验证 JSON 中的 `source_mtime` 字段与 TeX 文件修改时间 - **仅在需要时编译**,避免重复编译浪费时间 2. **page_summary 比较** - 优先使用简化的 `page_summary` 字段(无坐标,仅文字内容) - 支持夹注双列(`[右小列|左小列]` 格式显示) - 自动统计总字数 - 兼容旧版 JSON(fallback 到 `pages` 字段逐字符比较) 3. **详细 Markdown 报告** - 概要统计(页数、字数、匹配率) - 差异总结表格 - 第一处差异的详细逐列对比 - PDF 页面截图对比(需要 `pdftoppm`) ### 输出示例 ``` ## 步骤三:比较排版 原始 48 页 / 数字化 41 页 匹配页数:14 总字数:13224(一致) 前 10 页完全一致 第一处差异在 PDF第11页(对开第5页·右) ## 步骤四:生成报告 详细报告已保存至:排版一致性比较报告.md ``` ## 手动分步操作 如果需要手动控制编译流程: ### 步骤 1: 导出 Layout JSON ```bash cd path/to/tex && ENABLE_EXPORT=1 lualatex yourfile.tex # → yourfile-layout.json ENABLE_EXPORT=1 lualatex yourfile-digital.tex # → yourfile-digital-layout.json ``` ### 步骤 2: 只比较(跳过编译) ```bash python3 scripts/compare_guji_layouts.py yourfile.tex yourfile-digital.tex --no-compile ``` ## Layout JSON 结构 从 v0.2.9 开始,导出的 layout JSON 包含: ```json { "version": "1.0", "generator": "luatex-cn", "source_file": "yourfile.tex", "source_mtime": 1771885547, "document": { ... }, "page_summary": [ {"page": 0, "type": "spread_right", "cols": ["欽定四庫全書", "", ...]}, ... ], "pages": [ ... ] } ``` - `page_summary`: 每页每列的简化文字内容(用于快速比较) - `pages`: 完整的字符位置/坐标信息(用于精确分析) ## 相关文件 - **比较脚本**: `scripts/digitalize/compare_guji_layouts.py` - **Export 模块**: `tex/core/luatex-cn-core-export.lua` - **转换工具**: - `scripts/digitalize/semantic_to_digital.py` — 语义→数字化转换 - `scripts/digitalize/digital_to_semantic.py` — 数字化→语义逆向转换 - `scripts/digitalize/plugins/` — 转换插件(如四库全书简明目录)