关于 paper-compile
用于将 LaTeX 论文编译为 PDF 并排查构建问题的技能,面向准备投稿的研究者。它通过 latexmk 执行编译,检查页面限制、引用、字体及 PDF 呈现,并生成编译报告。
主要功能
- 01使用 latexmk 编译 LaTeX 论文
- 02诊断并修复常见构建错误
- 03检查页面限制与引用
- 04验证 PDF 字体和图表呈现
- 05生成编译状态报告
适用场景
- 01编译投稿论文并定位报错
- 02检查未定义引用与缺失图表
- 03核对会议或 IEEE 页数要求
- 04提交前检查 PDF 字体和匿名性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill paper-compile安装后在 Claude Code 中输入/paper-compile确认已加载。
详细介绍
Paper Compile:将 LaTeX 编译为可直接提交的 PDF
编译 LaTeX 论文并修复所有问题:$ARGUMENTS
常量
- COMPILER =
latexmk— LaTeX 构建工具。会自动处理多轮编译。 - ENGINE =
pdflatex— LaTeX 引擎。选项:pdflatex(默认)、xelatex(用于 CJK/自定义字体)、lualatex。 - MAX_COMPILE_ATTEMPTS = 3 — 修复错误并重新编译的最大尝试次数。
- PAPER_DIR =
paper/— LaTeX 源文件所在目录。 - MAX_PAGES — 页数限制。ML 会议:正文截至结论末尾(不包括参考文献和附录)。ICLR = 9 页,NeurIPS = 9 页,ICML = 8 页。IEEE 会议:参考文献计入页数。 IEEE 期刊约为 12–14 页,IEEE 会议约为 5–8 页(均包含所有内容)。
工作流
第 1 步:检查前置条件
检查编译环境是否已就绪:
# Check LaTeX installation
which pdflatex && which latexmk && which bibtex
# If not installed, provide instructions:
# macOS: brew install --cask mactex-no-gui
# Ubuntu: sudo apt-get install texlive-full
# Server: conda install -c conda-forge texlive-core
确认所有必需文件均存在:
# Must exist
ls $PAPER_DIR/main.tex
# Should exist
ls $PAPER_DIR/references.bib
ls $PAPER_DIR/sections/*.tex
ls $PAPER_DIR/figures/*.pdf 2>/dev/null || ls $PAPER_DIR/figures/*.png 2>/dev/null
第 2 步:首次编译
cd $PAPER_DIR
# Clean previous build artifacts
latexmk -C
# Full compilation (pdflatex + bibtex + pdflatex × 2)
latexmk -pdf -interaction=nonstopmode -halt-on-error main.tex 2>&1 | tee compile.log
第 3 步:诊断并自动修复错误
如果编译失败,请读取 compile.log 并修复常见错误:
缺少宏包:
! LaTeX Error: File `somepackage.sty' not found.
→ 使用 tlmgr install somepackage 安装,或在未使用该宏包时移除 \usepackage。
未定义的引用:
LaTeX Warning: Reference `fig:xyz' on page 3 undefined
→ 检查对应的图环境中是否存在 \label{fig:xyz}。
缺少图片:
! LaTeX Error: File `figures/fig1.pdf' not found.
→ 检查文件是否以不同扩展名(.png 而非 .pdf)存在。更新 \includegraphics 路径。
引用未定义:
LaTeX Warning: Citation `smith2024' undefined
→ 在 references.bib 中添加缺失条目,或修正引用键。
文本中存在 [VERIFY] 标记:
→ 搜索 /paper-write 留下的 [VERIFY] 标记。这些标记表示未经核实的引用或事实。搜索正确信息,或告知用户。
Overfull hbox:
Overfull \hbox (12.5pt too wide) in paragraph at lines 42--45
→ 轻微溢出通常可以忽略。如果严重(>20pt),请改写文本或调整图片宽度。
BibTeX 错误:
I was expecting a `,' or a `}'---line 15 of references.bib
→ 修复 BibTeX 语法(缺少逗号、括号不匹配、标题中的特殊字符)。
自定义定理类型的 \crefname 未定义:
→ 确保在 \newtheorem{assumption} 之后,在导言区添加 \crefname{assumption}{Assumption}{Assumptions} 等类似定义。
第 4 步:迭代修复循环
for attempt in 1..MAX_COMPILE_ATTEMPTS:
compile()
if success:
break
parse_errors()
auto_fix()
对于每个错误:
- 从
compile.log中读取错误消息 - 定位源文件和行号
- 应用修复
- 重新编译
尝试 2 次后仍无法解决? 如果已安装 Codex 插件,请调用 /codex:rescue — Codex 可以独立读取 LaTeX 源文件和 compile.log,找出 Claude 遗漏的问题(例如宏包冲突、编码问题、隐蔽的宏错误)。如果未安装,请继续使用 Claude 自行诊断。
第 5 步:编译后检查
成功编译后,验证输出:
# Check PDF exists and has content
ls -la main.pdf
# Check page count
pdfinfo main.pdf | grep Pages
# macOS: open for visual inspection
# open main.pdf
视觉检查(自动): 如果已生成编译后的 PDF,请直接读取并检查视觉呈现:
- 图片质量:标签清晰可读、文字易读、颜色易于区分
- 排版:没有孤立的节标题,没有不自然的分页
- 图片应出现在正文首次引用附近(而不是相隔数页)
- 表格:列对齐,小数精度一致
- 没有明显超出页边距的内容
这只是快速视觉检查,并非全面审阅 — 改进循环会进行更深入的视觉检查。
自动检查:
- PDF 文件存在且大于 100KB(非空且未损坏)
- 总页数合理(MAX_PAGES + 附录 + 参考文献)
- PDF 中没有“??”(未定义的引用 — 搜索日志)
- PDF 中没有“[?]”(未定义的引文 — 搜索日志)
- 图片已正确渲染(没有缺失图片占位符)
# Check for undefined references
grep -c "LaTeX Warning.*undefined" compile.log
# Check for missing citations
grep -c "Citation.*undefined" compile.log
步骤 6:页数验证
至关重要:确认论文页数不超过 MAX_PAGES。
对于 ML 会议(ICLR/NeurIPS/ICML/CVPR/ACL/AAAI): 正文 = 从第一页到 Conclusion 部分末尾(不一定是 §5,具体取决于结构,也可能是 §6、§7 或 §8)。参考文献和附录不计入页数。
对于 IEEE 会议和期刊: 总页数(包括参考文献)必须不超过限制。没有单独计算“正文”的规则——从第一页到参考文献末尾的所有内容都计入页数。
使用 pdftotext 精确检查:
# Extract text and find where Conclusion ends vs References begin
pdftotext main.pdf - | python3 -c "
import sys
text = sys.stdin.read()
pages = text.split('\f')
for i, page in enumerate(pages):
if 'Ethics Statement' in page or 'Reproducibility' in page:
print(f'Conclusion ends on page {i+1}')
if any(w in page for w in ['References', 'Bibliography']):
lines = [l for l in page.split('\n') if l.strip()]
for l in lines[:3]:
if 'References' in l or 'Bibliography' in l:
print(f'References start on page {i+1}')
break
"
如果 Conclusion 在页面中间结束,而 References 从同一页开始,则正文页数按该页页码计算(例如,如果两者都在第 9 页,正文约为 8.5 页;对于 9 页限制来说没问题,因为还留出了 References 标题的空间)。
如果超过限制:
- 确认篇幅最长的章节
- 提出具体的删减建议(将证明移至附录、压缩表格、精简文字)
- 报告:“正文为 X 页(限制:MAX_PAGES)。建议:将[具体内容]移至附录。”
步骤 6.5:检测过时文件
检查是否有 main.tex 未引用的孤立章节文件:
# Find all .tex files in sections/ and check which are \input'ed by main.tex
for f in paper/sections/*.tex; do
base=$(basename "$f")
if ! grep -q "$base" paper/main.tex; then
echo "WARNING: $f is not referenced by main.tex — consider removing"
fi
done
这可以避免章节结构更改后遗留文件造成混淆(例如,重构为 7 个章节后,旧的 5_conclusion.tex 仍然存在)。
步骤 7:投稿准备情况
投稿至会议前,进行以下额外检查:
- 匿名:不包含作者姓名、所属机构信息或可能泄露身份的自引
- 页数限制:正文不超过 MAX_PAGES(截至 Conclusion 末尾)
- 字体嵌入:PDF 中嵌入所有字体
pdffonts main.pdf | grep -v "yes" # should return nothing (or only header) - 未混入补充材料:附录明确从
\newpage\appendix之后开始 - 文件大小:合理(大多数会议要求小于 50MB,建议小于 10MB)
- 无
[VERIFY]标记:在 PDF 文本中搜索是否有遗留标记
步骤 8:输出摘要
## Compilation Report
- **Status**: SUCCESS / FAILED
- **PDF**: paper/main.pdf
- **Pages**: X (main body to Conclusion) + Y (references) + Z (appendix)
- **Within page limit**: YES/NO (MAX_PAGES = N)
- **Errors fixed**: [list of auto-fixed issues]
- **Warnings remaining**: [list of non-critical warnings]
- **Undefined references**: 0
- **Undefined citations**: 0
### Next Steps
- [ ] Visual inspection of PDF
- [ ] Run `/paper-write` to fix any content issues
- [ ] Submit to [venue] via OpenReview / CMT / HotCRP
主要规则
- 绝不删除用户的源文件——仅修改文件以修复错误
- 保留 compile.log——它有助于调试
- 不要屏蔽警告——报告警告,由用户决定如何处理
- 如果未安装 LaTeX,请提供清晰的安装说明,而不是悄无声息地失败
- 字体嵌入至关重要——某些会议会拒收未嵌入字体的 PDF
- 不同会议和期刊的页数规则不同——ML 会议:正文计算到 Conclusion(不包括参考文献)。IEEE 会议和期刊:计算包括参考文献在内的总页数。
常见会议和期刊要求
| 会议或期刊 | 样式文件 | 引用格式 | 页数限制 | 参考文献是否计入限制? | 投稿平台 |
|---|---|---|---|---|---|
| ICLR 2026 | iclr2026_conference.sty | natbib(\citep/\citet) | 9 页(到 Conclusion 末尾) | 否 | OpenReview |
| NeurIPS 2025 | neurips_2025.sty | natbib(\citep/\citet) | 9 页(到 Conclusion 末尾) | 否 | OpenReview |
| ICML 2025 | icml2025.sty | natbib(\citep/\citet) | 8 页(到 Conclusion 末尾) | 否 | OpenReview |
| IEEE 期刊 | IEEEtran.cls [journal] | cite(\cite{},数字格式) | 约 12-14 页(Transactions)/约 4-5 页(Letters) | 是 | IEEE Author Portal / ScholarOne |
| IEEE 会议 | IEEEtran.cls [conference] | cite(\cite{},数字格式) | 5-8 页(因会议而异) | 是 | EDAS / IEEE Author Portal |