mcpField
P
paper-compile

paper-compile

github.com/wanshuiyin文档处理18.2k516 次安装4 天前更新
代码仓库

关于 paper-compile

用于将 LaTeX 论文编译为 PDF 并排查构建问题的技能,面向准备投稿的研究者。它通过 latexmk 执行编译,检查页面限制、引用、字体及 PDF 呈现,并生成编译报告。

主要功能

  1. 01使用 latexmk 编译 LaTeX 论文
  2. 02诊断并修复常见构建错误
  3. 03检查页面限制与引用
  4. 04验证 PDF 字体和图表呈现
  5. 05生成编译状态报告

适用场景

  1. 01编译投稿论文并定位报错
  2. 02检查未定义引用与缺失图表
  3. 03核对会议或 IEEE 页数要求
  4. 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()

对于每个错误:

  1. 从 compile.log 中读取错误消息
  2. 定位源文件和行号
  3. 应用修复
  4. 重新编译

尝试 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 2026iclr2026_conference.stynatbib(\citep/\citet)9 页(到 Conclusion 末尾)否OpenReview
NeurIPS 2025neurips_2025.stynatbib(\citep/\citet)9 页(到 Conclusion 末尾)否OpenReview
ICML 2025icml2025.stynatbib(\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

评论

支持 Markdown