mcpField
P
paper-compile

paper-compile

github.com/wanshuiyinドキュメント18.2k516 回インストール4 日前に更新
リポジトリ

paper-compile について

投稿準備中の研究者向けに、LaTeX論文をPDFにコンパイルし、ビルド問題を診断するスキルです。latexmkを使い、ページ制限、参照、フォント、PDFの表示を確認してレポートを作成します。

主な機能

  1. 01latexmkによるLaTeX論文のコンパイル
  2. 02一般的なビルドエラーの診断と修正
  3. 03ページ制限と参照の確認
  4. 04PDFのフォントと図の表示確認
  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 ページ(すべて込み)です。

ワークフロー

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()

エラーごとに:

  1. compile.log からエラーメッセージを読む
  2. ソースファイルと行番号を特定する
  3. 修正を適用する
  4. 再コンパイルする

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 2026iclr2026_conference.stynatbib(\citep/\citet)9ページ(結論の末尾まで)いいえOpenReview
NeurIPS 2025neurips_2025.stynatbib(\citep/\citet)9ページ(結論の末尾まで)いいえOpenReview
ICML 2025icml2025.stynatbib(\citep/\citet)8ページ(結論の末尾まで)いいえOpenReview
IEEE JournalIEEEtran.cls [journal]cite(\cite{}、数値形式)約12~14ページ(Transactions)/約4~5ページ(Letters)はいIEEE Author Portal/ScholarOne
IEEE ConferenceIEEEtran.cls [conference]cite(\cite{}、数値形式)5~8ページ(会議により異なる)はいEDAS/IEEE Author Portal

コメント