Claude-skill-registry-data make_latex_model
LaTeX 模板高保真优化器,支持任意 LaTeX 模板的样式参数对齐、标题文字对齐、标题格式对比(加粗)、HTML 可视化报告、LaTeX 自动修复建议和像素级 PDF 对比验证
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/make-latex-model" ~/.claude/skills/majiayu000-claude-skill-registry-data-make-latex-model && rm -rf "$T"
data/make-latex-model/SKILL.mdNSFC LaTeX 模板高保真优化器
📋 文档目录
- 深度参考 - 文档参考范围
- 核心目标 - 样式要素与关键点
- 执行模式说明 - 硬编码工具 + AI 规划
- 工作空间说明 - 专用工作空间管理
- 触发条件 - 何时使用本技能
- 输入参数 - 必需与可选参数
- 执行流程 - 完整的 6 步工作流程
- 迭代优化闭环 - 自动化迭代优化
- 输出规范 - 修改摘要与代码变更
- 核心原则 - 绝对禁区与修改原则
- 验证清单 - 验收标准
- 常见问题 - FAQ 解答
深度参考
- 本项目的 CLAUDE.md 和 skills/README.md 规范
- 现有某个 project 的
的样式定义模式@config.tex - ⚠️ 关于
的参考范围:main.tex- ✅ 允许参考:
中的main.tex
、\section{}
标题文本\subsection{} - ❌ 禁止参考:
中的main.tex
引用的正文内容文件\input{}
- ✅ 允许参考:
核心目标
确保 LaTeX 渲染的 PDF 与 Word 版打印的 PDF 像素级对齐:
样式要素(必须完全一致)
- 标题层级格式(一级、二级、三级、四级)
- ⚠️ 标题文字内容(每年度的 Word 模板标题可能不同)
- 字体(中文楷体 + 英文 Times New Roman)
- 字号(三号、四号、小四等)
- 颜色(MsBlue RGB 0,112,192)
- 间距(行距、段前段后、缩进)
- 列表样式(编号格式、缩进)
- 页面设置(边距、版心)
⚠️ 关键 1:标题文字对齐
- 标题的文字内容必须与 Word 完全相同
- 标题的编号格式必须与 Word 完全相同(如"1." vs "1.")
- 标点符号必须与 Word 完全相同(如全角/半角符号)
- 例如:Word 是"1. 项目的立项依据",LaTeX 必须完全一致
⚠️ 关键 2:每行字数对齐
- 每行的字数必须与 Word 完全相同
- 换行位置必须与 Word 完全一致
- 这需要精确调整:字号、字间距、行距、段间距
执行模式说明
本技能采用**"硬编码工具 + AI 规划"**的混合模式:
自动模式(硬编码脚本)
以下步骤由 Python 脚本自动执行,无需 AI 干预:
| 步骤 | 脚本工具 | 输入 | 输出 |
|---|---|---|---|
| 状态检查 | | 项目路径 | 状态报告 |
| PDF 样式分析 | | Word PDF | |
| 标题文字对比 | | Word .docx + LaTeX | 对比报告 |
| 样式参数验证 | | 项目路径 | 验证报告 |
| 编译检查 | 命令 | .tex 文件 |
AI 规划模式(需要智能决策)
以下步骤需要 AI 根据分析结果进行规划和执行:
| 决策点 | 输入数据 | AI 任务 | 输出 |
|---|---|---|---|
| 决策点 1: 是否需要修改样式? | PDF 分析结果 + 当前配置 | 判断差异是否超出容忍度 | 修改清单或跳过 |
| 决策点 2: 生成具体修改方案 | 差异分析结果 | 规划 LaTeX 代码修改 | 具体修改内容 |
| 决策点 3: 应用修改到配置文件 | 修改方案 | 使用 Edit 工具修改 | 修改后的 @config.tex |
| 决策点 4: 验证结果是否达标 | 修改前后的验证报告 | 判断是否需要迭代 | 继续微调/完成 |
协作流程
Word 模板 → [自动] analyze_pdf.py → 分析结果 ↓ 当前 @config.tex ↓ [AI 决策点 1] 是否需修改? ↓ 是 → [AI 决策点 2] 生成方案 ↓ [AI 决策点 3] 应用修改 ↓ [自动] 编译 + 验证 ↓ [AI 决策点 4] 是否达标? ↓ 否 → 微调 → 返回 [AI 决策点 2] 是 → 完成
关键原则:
- ✅ 数据提取 由硬编码工具完成(精确、稳定)
- ✅ 决策判断 由 AI 完成(灵活、可解释)
- ✅ 代码修改 由 AI + Edit 工具完成(可控、可回溯)
注:AI 决策点的详细规范已整合到"第 3 节 执行流程"的相应步骤中。
工作空间说明
本 skill 使用专用工作空间存储所有工作产物,避免污染用户项目目录。
工作空间结构
skills/make_latex_model/workspace/{project_name}/ ├── baseline/ # Word PDF 基准文件 │ ├── word.pdf │ ├── word_analysis.json │ └── quality_report.json ├── iterations/ # 迭代历史记录 │ ├── iteration_001/ │ │ ├── main.pdf │ │ ├── config.tex │ │ └── metrics.json │ └── iteration_002/ ├── reports/ # 生成的报告 │ ├── diff_report.html │ └── optimization_report.html ├── backup/ # 备份文件 │ └── main_*.tex.bak └── cache/ # 缓存文件 └── pdf_renders/
路径管理
所有脚本统一使用
WorkspaceManager 获取路径:
from core.workspace_manager import WorkspaceManager ws_manager = WorkspaceManager() baseline_dir = ws_manager.get_baseline_path("NSFC_Young") report_path = ws_manager.get_reports_path("NSFC_Young")
清理策略
- 缓存文件默认保留 24 小时
- 迭代历史默认保留最近 10 轮
- 可通过
的config.yaml
节配置清理策略workspace
触发条件
用户在以下场景触发本技能:
- NSFC 发布了新的年度 Word 模板
- 当前 LaTeX 模板与 Word 模板存在明显样式差异
- 用户主动要求"对齐 Word 样式""更新模板格式"
输入参数
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| string | 是 | 项目名称(如 、) |
| string | 是 | Word 模板年份(如 ) |
| string | 否 | 优化级别:(最小改动)|(中等)|(彻底),默认 |
| boolean | 否 | 预览模式,不实际修改文件,默认 |
执行流程
步骤 0:预检查(AI 必须首先执行)
AI 在开始任何优化工作前,必须先执行状态检查:
python3 skills/make_latex_model/scripts/check_state.py projects/{project}
根据状态报告决定后续行动:
- 如果
:提示用户先生成 Word PDFhas_baseline=false - 如果
:先修复编译错误compilation_status=failed - 如果
:调整像素对比权重baseline_source=quicklook
AI 决策点 1:是否需要修改样式?
输入数据:
: Word PDF 分析结果*_analysis.json
: 当前样式配置extraTex/@config.tex
: 容忍度配置config.yaml
判断逻辑:
# 伪代码 for 参数 in ["行距", "字号", "颜色", "边距"]: word_value = analysis[参数] latex_value = extract_from_config(config_tex) diff = abs(word_value - latex_value) tolerance = config["validation"]["tolerance"][参数] if diff > tolerance: 需要修改 = True 修改清单.append({ "参数": 参数, "当前值": latex_value, "目标值": word_value, "差异": diff })
输出格式:
| 参数 | 当前值 | 目标值 | 差异 | 容忍度 | 是否需修改 | |------|--------|--------|------|--------|-----------| | 行距 | 1.5 | 1.2 | 0.3 | 0.1 | ✅ 是 | | MsBlue RGB | (0,112,190) | (0,112,192) | 2 | 2 | ⚠️ 边界 |
步骤 1:理解现状(深度阅读)
- 读取
,重点分析:projects/{project}/extraTex/@config.tex- 宏包加载
- 页面设置(geometry)
- 颜色定义(definecolor)
- 字体设置(fontspec、xeCJK)
- 字号系统(newcommand 字号命令)
- 标题格式(titlesec 定制)
- 列表样式(enumitem 配置)
步骤 2:分析 Word 模板(像素级测量)
2.1 获取 Word PDF 基准
方案 0:用户已提供 PDF(最快)
如果用户已经从 Word 模板导出了 PDF 文件,直接使用即可:
# 复制用户提供的 PDF 到工作空间 cp /path/to/user/provided/word.pdf \ skills/make_latex_model/workspace/{project}/baseline/word.pdf
要求:
- PDF 必须是 Word/LibreOffice 导出的,不能用 QuickLook 预览
- PDF 应包含完整的模板样式(标题、正文、列表等)
方案 1:LibreOffice 命令行自动转换(主推)
如果用户只有 Word 模板文件(.doc/.docx),使用 LibreOffice 自动转换:
# 自动检测并转换 Word 模板为 PDF python3 skills/make_latex_model/scripts/generate_baseline.py \ --project NSFC_Young \ --template-year 2025
脚本会自动完成:
- 定位 Word 模板文件(支持 .doc 和 .docx)
- 使用 LibreOffice 无头模式转换为 PDF
- 保存到工作空间
workspace/{project}/baseline/word.pdf - 生成高分辨率 PNG 用于像素对比(通过
)pdftoppm
环境要求:
- LibreOffice(安装命令见下方)
- pdftoppm(poppler-utils)
LibreOffice 安装:
# macOS brew install --cask libreoffice # Ubuntu/Debian sudo apt-get install libreoffice # Windows # 从 https://www.libreoffice.org/ 下载安装
方案 2:Microsoft Word COM 自动化(Windows 仅)
如果在 Windows 环境且无法安装 LibreOffice,可使用 Microsoft Word COM 自动化(需 Python
pywin32 库):
python3 skills/make_latex_model/scripts/generate_baseline.py \ --project NSFC_Young \ --template-year 2025 \ --use-msword
渲染质量说明:
| 渲染引擎 | 精度 | 自动化程度 | 推荐度 |
|---|---|---|---|
| 用户已提供 PDF | 取决于来源 | 零操作 | ⭐⭐⭐⭐⭐ |
| LibreOffice | 高(与 Word 99% 一致) | 完全自动化 | ⭐⭐⭐⭐⭐ |
| Microsoft Word COM | 最高(100% Word 原生) | 自动化(Windows 仅) | ⭐⭐⭐⭐ |
| QuickLook 预览 | 低(断行/行距有差异) | 自动化但不准确 | ⚠️ 不推荐 |
为什么不用 QuickLook:
- QuickLook 预览渲染引擎与 Word 本质不同(行距、字体渲染、断行算法都有差异)
- 使用 QuickLook 基准会导致正确的样式修改反而显示像素对比指标恶化
- 如果只能使用 QuickLook 基准,应降低像素对比指标的权重,以样式参数正确性为主要验收标准
2.2 自动提取样式参数(推荐)
使用
analyze_pdf.py 工具自动提取 Word PDF 的样式参数:
# 安装依赖(首次使用) pip install PyMuPDF # 分析 Word PDF 基准 python3 skills/make_latex_model/scripts/analyze_pdf.py \ projects/NSFC_Young/template/word_baseline.pdf
输出内容:
- 📐 页面布局:页面尺寸、边距(左/右/上/下,单位:cm)
- 🔤 字体统计:字体名称、使用频率、字号列表、颜色(RGB)
- 📏 行距分析:平均行距(pt)
- 💾 详细分析结果:自动保存为
,可用于后续对比*_analysis.json
输出示例:
============================================================ 页面布局 ============================================================ 页面尺寸: 21.01 cm x 29.71 cm 边距: 左: 3.20 cm 右: 3.14 cm 上: 2.54 cm 下: 2.54 cm ============================================================ 字体使用统计 ============================================================ 字体: TimesNewRomPSMT 使用次数: 245 字号: [12.0, 14.0, 15.0] 颜色 (RGB): [[0, 0, 0], [0, 112, 192]] 是否加粗: False 字体: KaiTi_GB2312 使用次数: 128 字号: [12.0, 15.0, 16.0] 颜色 (RGB): [[0, 0, 0], [0, 112, 192]] 是否加粗: True ============================================================ 行距分析 ============================================================ 平均行距: 18.00 pt 详细分析结果已保存到: word_baseline_analysis.json
优势:
- ✅ 自动化:无需手动测量,减少人为误差
- ✅ 精确:直接从 PDF 提取参数,精度 ±0.01pt
- ✅ 可追溯:保存 JSON 分析结果,便于版本对比
- ✅ 快速:几秒内完成分析
步骤 2.5:提取标题结构
自动化工具:使用
compare_headings.py 自动对比标题文字
-
安装依赖(首次使用):
pip install python-docx -
自动对比 Word 和 LaTeX 标题:
# 生成 HTML 可视化报告 python3 skills/make_latex_model/scripts/compare_headings.py \ projects/NSFC_Young/template/最新word模板-青年科学基金项目(C类)-正文.docx \ projects/NSFC_Young/main.tex \ --report heading_report.html -
查看报告:
- 打开
查看可视化对比结果heading_report.html - 报告会显示:
- ✅ 完全匹配的标题(绿色)
- ⚠️ 有差异的标题(黄色,并排显示 Word 和 LaTeX 内容)
- ❌ 仅在一方的标题(红色)
- 打开
-
格式对比(加粗):
# 检查标题内的加粗格式是否一致 python3 skills/make_latex_model/scripts/compare_headings.py \ projects/NSFC_Young/template/最新word模板-青年科学基金项目(C类)-正文.docx \ projects/NSFC_Young/main.tex \ --check-format \ --report heading_format_report.txt- Word 模板中的标题可能包含混合格式,例如"立项依据与研究内容"
- 使用
参数可以检测 LaTeX 是否正确实现了加粗样式--check-format - 报告会显示:
- ✅ 文本和格式都完全匹配
- ⚠️ 文本差异(传统的文字内容不匹配)
- 🔶 格式差异(加粗位置不一致,并标注具体位置)
-
🎨 HTML 可视化报告:
# 生成包含格式对比的 HTML 报告 python3 skills/make_latex_model/scripts/compare_headings.py \ projects/NSFC_Young/template/最新word模板-青年科学基金项目(C类)-正文.docx \ projects/NSFC_Young/main.tex \ --check-format \ --report heading_format_report.html- HTML 报告直观显示 Word 和 LaTeX 的格式差异
- 加粗文本用
标签高亮显示<b> - 格式差异用黄色背景和详细位置标注
- 支持并排对比(Word vs LaTeX)
-
🔧 LaTeX 修复建议:
# 自动生成 LaTeX 修复代码 python3 skills/make_latex_model/scripts/compare_headings.py \ projects/NSFC_Young/template/最新word模板-青年科学基金项目(C类)-正文.docx \ projects/NSFC_Young/main.tex \ --check-format \ --fix-file heading_fix_suggestions.tex- 自动生成可直接复制的 LaTeX 修复代码
- 根据 Word 格式生成正确的
标记\textbf{} - 输出文件示例:
% LaTeX 标题格式修复建议 % section_1: (一)立项依据与研究内容 \section{\textbf{(一)立项依据}与研究内容}
-
自动转换 .doc 为 .docx(如需要):
# 脚本会自动检测并转换 .doc 格式 python3 skills/make_latex_model/scripts/compare_headings.py \ projects/NSFC_Young/template/最新word模板-青年科学基金项目(C类)-正文.doc \ projects/NSFC_Young/main.tex \ --auto-convert \ --report heading_report.html -
手动验证(可选,用于调试):
- ⚠️ 不推荐手动对比,应使用自动化工具
- 如需验证,可打开生成的 HTML 报告查看可视化结果
- 或使用
参数自动生成修复代码--fix-file
步骤 3:差异分析与优化策略(像素级)
- 对比当前 LaTeX 样式与 Word 模板,识别差异:
- 字号差异(如 14pt vs 15pt)—— 精度 ±0.1pt
- 颜色差异(MsBlue RGB 值)
- 间距差异(行距、段前段后)—— 精度 ±0.5pt
- 编号格式差异(1.1 vs 1.1.)
- ⚠️ 换行位置差异 —— 需要调整字间距或字号微调
- 根据 optimization_level 确定修改策略:
:仅修改明显错误的样式(如颜色值错误)minimal
(默认):调整与 Word 不一致的样式,保持结构稳定moderate
:重构样式系统,实现最大保真度thorough
AI 决策点 2:生成修改方案
输入: 修改清单(来自决策点 1)
AI 任务:
- 定位
中的相关代码段@config.tex - 生成具体的 LaTeX 代码修改
- 确保修改符合"轻量级修改原则"(见 5.1 节)
输出示例:
% 修改行距:1.5 → 1.2 - \renewcommand{\baselinestretch}{1.5} + \renewcommand{\baselinestretch}{1.2} % 修改 MsBlue 颜色 - \definecolor{MsBlue}{RGB}{0,112,190} + \definecolor{MsBlue}{RGB}{0,112,192}
约束条件:
- ✅ 优先调整参数值
- ✅ 新增自定义命令(如需要)
- ❌ 不删除或重命名现有命令
- ❌ 不改变宏包加载顺序
步骤 4:轻量级修改原则(像素级精度)
- 优先调整参数,不重构结构:
- 调整
中的字号(精度 0.1pt)、颜色、间距参数\titleformat - 调整
中的边距值(精度 0.1mm)\geometry - 调整
字号定义中的 pt 值\newcommand - 如需换行对齐:微调
、字间距、或字号 ±0.1pt\XeTeXinterchartokenstate
- 调整
- 保留老样式的稳定性:
- 不修改宏包加载顺序
- 不删除已有的自定义命令
- 不改变条件判断结构(如
)\ifwindows
- 增量添加新样式(如有必要):
- 新增
而非修改现有命令\newcommand - 使用注释标记新增内容:
% 新增样式注释
- 新增
步骤 5:执行修改
- 修改
(样式配置层):@config.tex- 调整颜色定义
- 调整字号系统
- 调整标题格式(titlesec)
- 调整列表样式
- 调整页面设置(geometry)
- 修改
中的标题文本(⚠️ 仅限标题,不触碰正文内容):main.tex- 更新章节标题以匹配 Word 模板
- 保持 LaTeX 结构(
、\section{}
)不变\subsection{} - 仅修改花括号内的标题文字
- ⚠️ 绝不修改正文段落内容
- 保留原有结构:
- 不改变
的引用关系\input{extraTex/xxx.tex} - 不修改正文内容文件(
)extraTex/*.tex - 唯一例外:用户明确要求修改示例内容
- 不改变
AI 决策点 3:应用修改
工具: 使用 Edit 工具精确修改
流程:
- 使用 Read 工具读取
@config.tex - 使用 Edit 工具应用每一处修改
- 保留原有注释和代码风格
验证:
# 检查编译是否成功 cd projects/{project} xelatex -interaction=nonstopmode main.tex
步骤 6:验证与迭代(像素级验证)
-
编译检查:
cd projects/{project} xelatex -interaction=nonstopmode main.tex -
自动化验证(推荐):
# 运行完整验证脚本(包括标题文字一致性检查) cd skills/make_latex_model ./scripts/validate.sh验证脚本会自动检查:
- ✅ 编译状态
- ✅ 版本号一致性
- ✅ 样式参数(行距、颜色、边距等)
- ✅ 标题文字一致性(新增,使用
自动对比)compare_headings.py
-
像素级 PDF 对比验证:
- ⚠️ 必须使用 Word 导出的 PDF 作为基准(QuickLook 预览或其他工具的渲染与 Word 不同)
- 将 LaTeX 生成的 PDF 与 Word 打印的 PDF 叠加对比
- 检查每行的文字是否完全对齐
- 检查换行位置是否完全一致
- 使用工具:
- Adobe Acrobat 的"比较文件"功能
- 或手动叠加(将两个 PDF 导出为 PNG,使用图像编辑软件叠加)
- 或使用脚本对比(如
+ Pillow)pdftoppm
-
微调与迭代(最多 3 轮):
- 如发现换行不一致:微调字号 ±0.1pt 或字间距
- 如发现位置偏移:微调边距或缩进 ±0.5pt
- 如发现标题文字不一致:根据
报告修改compare_headings.py
中的标题main.tex - 每轮调整后重新编译验证
- 使用验证脚本:运行
自动检查各项指标./scripts/validate.sh
-
验收标准(优先级从高到低):
- ✅ 第一优先级:编译无错误和警告
- ✅ 第二优先级:样式参数与 Word 模板一致(行距、字号、颜色、间距等)
- ✅ 第二优先级:标题文字与 Word 模板完全一致
- ✅ 第三优先级:视觉上与 Word PDF 高度相似(考虑到字体渲染差异,允许轻微差异)
- ⚠️ 第四优先级:像素对比指标(仅作为辅助验证,非硬性要求)
AI 决策点 4:验证结果是否达标?
输入:
- 修改前的验证报告(如存在)
- 修改后的验证报告(
输出)run_validators.py
判断逻辑:
# 伪代码 优先级1_通过 = 编译成功 and 无警告 优先级2_通过 = 样式参数一致 and 标题文字一致 if 优先级1_通过 and 优先级2_通过: 返回 "完成" elif 失败项减少: 返回 "方向正确,继续微调" elif 失败项增加: 返回 "回滚修改,重新分析" else: 返回 "保持现状,人工判断"
迭代策略:
- 最多执行 3 轮迭代
- 每轮只调整 1-2 个参数
- 记录每轮的修改和结果
迭代优化闭环
本步骤实现全自动的"优化-对比-调整"循环,推荐在需要精细调整时使用。
一键启动
# 全自动迭代优化 python3 skills/make_latex_model/scripts/enhanced_optimize.py \ --project NSFC_Young \ --max-iterations 10 \ --report
脚本会自动完成:
- 预处理 main.tex(注释
行)\input{} - 生成可靠 Word PDF 基准
- 分析 PDF 样式参数
- 迭代优化循环(最多 10 轮)
- 恢复 main.tex
- 生成详细报告
预计耗时:5-15 分钟(取决于迭代轮数)
迭代循环逻辑
WHILE 未达到收敛条件: 1. 编译 LaTeX 项目(xelatex -> bibtex -> xelatex -> xelatex) 2. 执行像素级 PDF 对比(compare_pdf_pixels.py) 3. 检测是否收敛(convergence_detector.py) 4. IF 未收敛: - 分析差异特征(intelligent_adjust.py) - 生成参数调整方案 - 应用调整到 @config.tex(需 AI 介入) 5. 记录本轮指标 6. 保存或回滚配置 END WHILE
收敛条件(优先级从高到低)
| 条件 | 阈值 | 说明 |
|---|---|---|
| 编译失败 | - | 立即停止,需人工修复 |
| 像素差异收敛 | | 达到像素级对齐 |
| 连续无改善 | 3 轮 | 指标不再优化,收敛 |
| 最大迭代 | 10 轮 | 强制停止 |
智能参数调整策略
脚本
intelligent_adjust.py 根据差异特征自动推断参数调整:
| 差异特征 | 推断参数 | 调整策略 |
|---|---|---|
| 换行位置大面积差异 | 字间距/字号 | ±0.1pt |
| 文本垂直偏移 | 行距 | ±0.05 倍 |
| 颜色不一致 | RGB 值 | ±1 |
| 左右边距差异 | geometry | ±0.05cm |
| 标题位置偏移 | titleformat | 调整 spacing |
相关脚本
| 脚本 | 功能 |
|---|---|
| 一键迭代优化入口 |
| 预处理/恢复 main.tex |
| 生成 Word PDF 基准 |
| 收敛检测与报告 |
| 智能参数调整建议 |
输出规范
修改摘要
将变更记录有机地追加到
projects/{project}/extraTex/@CHANGELOG.md:
记录原则:
- 自然流畅,避免生硬套用模板
- 重点说明“为什么改”(Word 模板的变化)和“改了什么”(具体参数)
- 保留历史追溯性,方便后续版本对比
记录内容:
- 修改的文件(仅
)@config.tex - 修改前后的参数对比(如字号从 14pt → 15pt)
- 优化理由(基于 Word 模板的哪个特征变化)
- 验证结果(是否达到像素级对齐)
格式参考:
## [v1.0.1] - YYYY-MM-DD ### Changed(样式优化) - **一级标题字号**:14pt → 15pt(Word 最新模板要求) - **行距**:1.5 → 1.45(通过 PDF 叠加对比确定) - **页边距**:调整上下边距为 2.54cm(与 Word 完全一致) ### Added(新增样式) - 新增三级标题编号格式 1.1、1.2(Word 最新模板新增要求) ### Fixed(修复) - 修复 MsBlue 颜色值误差(原 RGB 0,112,190 → 正确的 0,112,192)
代码变更
对
@config.tex 进行精确修改,保留:
- 原有注释
- 代码风格
- 条件判断结构(如
)\ifwindows - ⚠️ 绝不触碰
main.tex
验证清单
📋 完整验证清单:参见第 6 节"验证清单(按优先级排序)"
快速验证(推荐):
cd skills/make_latex_model ./scripts/validate.sh
这将自动检查:
- ✅ 编译状态
- ✅ 版本号一致性
- ✅ 样式参数(行距、颜色、边距等)
- ✅ 标题文字一致性(使用
)compare_headings.py
核心原则(底线)
绝对禁区
⚠️ 永不触碰
中的正文段落内容main.tex
中的main.tex
引用的正文内容文件\input{extraTex/*.tex}
文件中的用户撰写内容extraTex/*.tex- 正文段落、表格、图片、公式等内容
✅ 允许修改
中的标题文本main.tex
中的标题文字\section{标题文字}
中的标题文字\subsection{标题文字}- 标题的编号格式、标点符号等
- 理由:标题的文本结构也是模板样式的一部分,需要与 Word 模板对齐
⚠️ 边界示例:
% ✅ 允许修改:标题文字 \section{{\bfseries(一)立项依据与研究内容}(建议8000字以内):} % 修改为 \section{{\bfseries(一)研究依据与内容}(建议8000字以内):} % ❌ 禁止修改:正文内容 \input{extraTex/1.1.立项依据.tex} % 不改变引用关系 % extraTex/1.1.立项依据.tex 中的具体内容不修改
轻量级修改优先
- ✅ 调整参数值(字号 pt 值、颜色 RGB 值、间距 em/cm 值)
- ✅ 新增自定义命令
- ❌ 删除或重命名现有命令
- ❌ 改变宏包加载顺序
- ❌ 重构条件判断结构
保真度与稳定性平衡
- 过度开发的风险:引入 bug、破坏已有功能、增加维护成本
- 开发不足的风险:样式不一致、不符合基金委要求
- 平衡策略:
- 默认使用
级别moderate - 仅在必要时使用
级别thorough - 保留老样式的核心架构
- 默认使用
跨平台兼容性
- 保留
条件判断\ifwindows - 确保 Mac/Windows/Linux 都能正确编译
- 外挂字体路径保持不变(
)./fonts/
验证清单(完成后自检,按优先级排序)
快速验证(推荐)
使用自动化验证脚本进行快速检查:
cd skills/make_latex_model ./scripts/validate.sh
这将自动检查:
- ✅ 编译状态
- ✅ 版本号一致性
- ✅ 样式参数(行距、颜色、边距等)
- ✅ 配置文件完整性
性能基准测试(可选)
运行性能基准测试,评估编译性能:
cd skills/make_latex_model ./scripts/benchmark.sh
这将输出:
- ⏱️ 平均编译时间
- 📄 PDF 文件大小
- 📊 性能报告 (JSON)
第一优先级:基础编译检查
- 编译检查:
无错误xelatex -> bibtex -> xelatex -> xelatex - 跨平台:在至少两个操作系统上验证编译
- 向后兼容:老用户的内容文件(
)无需修改即可使用extraTex/*.tex
第二优先级:样式参数一致性
- 行距:与 Word 模板一致(误差 < 0.1)
- 字号:与 Word 模板一致(误差 < 0.5pt)
- 颜色:与 Word 模板一致(RGB 误差 < 2)
- 边距:与 Word 模板一致(误差 < 0.5mm)
- 标题样式:缩进、间距、编号格式与 Word 一致
- 标题文字:与 Word 模板完全一致
- 一级标题文字完全匹配
- 二级标题文字完全匹配
- 标题编号格式、标点符号完全匹配
第三优先级:视觉相似度
- 视觉对比:PDF 与 Word 模板高度相似(考虑到字体渲染差异)
- 每行字数:与 Word 接近(允许 ±1 字差异)
- 换行位置:与 Word 大致对齐(考虑到断行算法差异)
第四优先级:像素对比(辅助验证)
- 像素对比(仅当使用 Word 打印 PDF 基准时):
- 叠加对比 PDF 无明显偏移
- changed_ratio < 0.20(考虑到换行位置变化)
- 重点检查"每行字数"和"换行位置"对齐
- ⚠️ 如使用 QuickLook 基准,跳过像素对比
文档更新
- 文档更新:如有新增命令或配置,在
顶部添加注释说明@config.tex
常见问题
Q1: 如何获取 Word PDF 基准?
A: 本技能支持用户已提供 PDF 或自动生成
方案 0:用户已提供 PDF(最快)
如果用户已经从 Word 模板导出了 PDF 文件,直接复制到工作空间即可:
# 复制用户提供的 PDF 到工作空间 cp /path/to/user/provided/word.pdf \ skills/make_latex_model/workspace/{project}/baseline/word.pdf
要求:
- PDF 必须是 Word/LibreOffice 导出的,不能用 QuickLook 预览
- PDF 应包含完整的模板样式(标题、正文、列表等)
方案 1:LibreOffice 命令行自动转换(主推)
如果用户只有 Word 模板文件(.doc/.docx),使用 LibreOffice 自动转换:
# 一键生成 Word PDF 基准 python3 skills/make_latex_model/scripts/generate_baseline.py \ --project NSFC_Young \ --template-year 2025
脚本会自动完成:
- 定位 Word 模板文件
- 使用 LibreOffice 无头模式转换为 PDF
- 保存到工作空间
- 生成高分辨率 PNG 用于像素对比
环境准备:
# macOS brew install --cask libreoffice poppler # Ubuntu/Debian sudo apt-get install libreoffice poppler-utils
方案 2:Microsoft Word COM 自动化(Windows 仅)
python3 skills/make_latex_model/scripts/generate_baseline.py \ --project NSFC_Young \ --template-year 2025 \ --use-msword
渲染引擎对比
| 渲染引擎 | 精度 | 自动化程度 | 推荐度 |
|---|---|---|---|
| 用户已提供 PDF | 取决于来源 | 零操作 | ⭐⭐⭐⭐⭐ |
| LibreOffice | 高(与 Word 99% 一致) | 完全自动化 | ⭐⭐⭐⭐⭐ |
| Microsoft Word COM | 最高(100% Word 原生) | 自动化(Windows 仅) | ⭐⭐⭐⭐ |
| QuickLook 预览 | 低(断行/行距有差异) | 自动化但不准确 | ⚠️ 不推荐 |
为什么不用 QuickLook?
- 渲染引擎差异:QuickLook 预览渲染引擎与 Word 本质不同(行距、字体渲染、断行算法都有差异)
- 像素对比失真:使用 QuickLook 基准会导致正确的样式修改反而显示像素对比指标恶化
- 精确基准:只有 LibreOffice 或 Word 导出的 PDF 才能准确反映模板的真实样式
像素对比指标的陷阱
问题场景:修改行距从 1.8 倍 → 1.2 倍(更接近 Word 模板)
- 预期结果:像素对比指标应该改善(changed_ratio 降低)
- 实际结果:像素对比指标恶化(changed_ratio 从 0.1652 → 0.1829)
原因分析:
- 行距减小后,每页容纳更多文本
- 换行位置完全改变,导致大规模像素差异
- 如果基准是 QuickLook 预览(而非 LibreOffice/Word PDF),差异会更加放大
正确判断:
- ✅ 样式参数正确(行距 1.2 倍与 Word 一致)
- ✅ 视觉上更接近 Word 模板
- ⚠️ 像素对比指标恶化是副作用,不代表修改错误
行动建议:
- 优先使用用户提供的 PDF 或 LibreOffice/Word 生成的 PDF 作为基准
- 如果只能用 QuickLook,应降低像素对比指标的权重
- 以样式参数正确性和视觉相似度为主要验收标准
Q2: 修改后老用户的模板还能用吗?
A: 能。本技能仅修改样式定义(
@config.tex),不改变内容文件的接口。
Q3: 如何判断优化是否"过度"?
A: 参考以下标准:
- ✅ 参数调优(如 14pt → 15pt):合理
- ✅ 新增命令:合理
- ⚠️ 删除命令:需谨慎,确保无引用
- ❌ 重构核心架构:过度
Q4: Word 模板章节结构变化了怎么办?
A:
- 样式配置层面:在
中添加必要的样式定义@config.tex - 内容层面:提示用户自己在
或main.tex
中添加新章节extraTex/*.tex - ⚠️ 本技能不负责内容结构的调整,那是用户的责任