paper-compile について
投稿準備中の研究者向けに、LaTeX論文をPDFにコンパイルし、ビルド問題を診断するスキルです。latexmkを使い、ページ制限、参照、フォント、PDFの表示を確認してレポートを作成します。
主な機能
- 01latexmkによるLaTeX論文のコンパイル
- 02一般的なビルドエラーの診断と修正
- 03ページ制限と参照の確認
- 04PDFのフォントと図の表示確認
- 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 ページ(すべて込み)です。
ワークフロー
Step 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
Step 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
Step 3:エラーの診断と自動修正
コンパイルに失敗した場合は、compile.log を読み、よくあるエラーを修正します:
パッケージが見つからない場合:
! LaTeX Error: File `somepackage.sty' not found.
→ tlmgr install somepackage でインストールするか、使用していない場合は \usepackage を削除します。
参照が未定義の場合:
LaTeX Warning: Reference `fig:xyz' on page 3 undefined
→ 正しい figure 環境に \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 が未定義の場合:
→ \crefname{assumption}{Assumption}{Assumptions} などが、\newtheorem{assumption} の後のプリアンブルにあることを確認します。
Step 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 自身による診断を続けます。
Step 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 に「??」がない(未定義の参照 — ログを grep する)
- PDF に「[?]」がない(未定義の引用 — ログを grep する)
- 図がレンダリングされている(画像の欠落を示すプレースホルダーがない)
# 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)の場合:**本文は1ページ目から結論セクションの末尾までです(必ずしも§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
"
結論がページの途中で終わり、同じページから参考文献が始まる場合、本文のページ数はそのページ番号になります(たとえば、両方が9ページ目にある場合、本文は約8.5ページであり、参考文献の見出しを置く余地があるため、9ページ制限内に収まっています)。
制限を超えている場合:
- 最も長いセクションを特定します
- 具体的な削減案を提案します(証明を付録に移す、表を圧縮する、文章を簡潔にする)
- 次のように報告します:「本文は 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 以内(結論の末尾まで)
- フォント埋め込み:すべてのフォントが 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 カンファレンス:結論までの本文(参考文献は除外)。IEEE の会場:参考文献を含む総ページ数。
一般的な会場の要件
| 会場 | スタイルファイル | 引用形式 | ページ制限 | 参考文献を制限に含めるか | 投稿先 |
|---|---|---|---|---|---|
| ICLR 2026 | iclr2026_conference.sty | natbib(\citep/\citet) | 9ページ(結論の末尾まで) | いいえ | OpenReview |
| NeurIPS 2025 | neurips_2025.sty | natbib(\citep/\citet) | 9ページ(結論の末尾まで) | いいえ | OpenReview |
| ICML 2025 | icml2025.sty | natbib(\citep/\citet) | 8ページ(結論の末尾まで) | いいえ | OpenReview |
| IEEE Journal | IEEEtran.cls [journal] | cite(\cite{}、数値形式) | 約12~14ページ(Transactions)/約4~5ページ(Letters) | はい | IEEE Author Portal/ScholarOne |
| IEEE Conference | IEEEtran.cls [conference] | cite(\cite{}、数値形式) | 5~8ページ(会議により異なる) | はい | EDAS/IEEE Author Portal |