入稿(トンボ・PDF)

LaTeX 文書の投稿でつまずく理由は、たいてい組版とは関係のないところにあります。手元では完璧に通るのに、arXiv のビルドは落ちる。学術誌の編集部からは「フォントが埋め込まれていない」と返される。印刷所からは「トンボと塗り足しがない」と突き返される。どれも文章の質とは無関係で、受け取る側が自動処理をするために決めているルールに引っかかっているだけです。このページは、arXiv が明文化している要件、\listfiles で作る使用パッケージの一覧、pdffonts によるフォント埋め込みの検査、原稿を一枚にまとめる latexpandarlatexbundledoc、二重盲検のための匿名化、そして印刷入稿の PDF/X まで、投稿の準備として送る前に自分で確認できることを順に並べます。

arXiv に LaTeX を投稿するとき何を送るのか

ソースを送ります。PDF ではありません。 arXiv は受け取った .tex を自分の TeX Live で組み直すので、送るのは「向こうでビルドが通る一式」です。arXiv 自身の投稿ヘルプがはっきり書いているのは次の点です。foo.tex に対して foo.auxfoo.logfoo.tocfoo.lotfoo.loffoo.dvifoo.pdf といった付随ファイルは入れないこと。ただし索引の .ind と BibTeX が生成した .bbl例外で、入れること。しかもその .bbl の名前は主 .tex ファイルの名前と一致していなければ参照が処理されません。そして「TeX Live が提供するもの以外のパッケージは用意していない」——つまり学会独自のクラスファイルやあなたが書き換えたスタイルファイルは、自分で同梱する必要があります。

ファイル同梱するか理由
.texはい本体。ビルドはつねに投稿ディレクトリの最上位から実行される
.bblはい例外として同梱する。名前は主 .tex と一致させること
.indはい索引も .bbl と同じ扱いの例外
.sty / .cls自作・改変したものは同梱TeX Live に無いものは向こうで見つからない
.aux / .log / .tocいいえ再ビルドで作り直されるので入れてはいけない
.pdf / .dviいいえ出力そのもの。図としての PDF とは別物

図の形式も向こうの処理系に縛られます。arXiv のヘルプは、プレーン TeX と DVI 経路の LaTeX では PostScript(.ps / .eps)のみ、PDF 経路の LaTeX では .pdf / .png / .jpg と書き分けたうえで、「arXiv は TeX 処理中に図ファイルの『その場での』変換を行わない」と明言しています。つまり .eps.pdf を混ぜたまま送ると落ちます。もう一つ、ビルドはつねに投稿ディレクトリの最上位から実行されるので、主ファイルをサブディレクトリに置いた場合でも \includegraphics{figs/plot} のような相対パスが最上位から見て正しいかを確認してください。絶対パスは動きません。

自動処理が落ちる定番の原因

落ちる原因の大半は、ファイル名とパスと同梱漏れです。 arXiv は「自動処理が失敗する原因になるよくある誤り」を一覧で公開していて、そこに挙がっているのはおおむね次のような、どれも一行で直せることばかりです。自分でスタイルやマクロのファイルを書いた(あるいは標準のものを書き換えた)のに同梱を忘れる。パスを相対ではなく絶対で書いている。ファイル名に空白や特殊文字を使っている——アップロード時にアンダースコアへ変換されるため、\includegraphics{my figure} はその瞬間に参照先を失います。.bbl が手元の BibLaTeX と arXiv 側の TeX Live で食い違う。epsbox.sty のような古い dvips 用スタイルを使っている。図の形式を混ぜている。そしてキャプションの中で保護されていないマクロを使っている(\protect\cite{} と書く)。

この一覧の背後にある共通点は、「自分の環境でしか成立しない前提」がどこかに残っているということです。だから最も効く対策は道具ではなく手順で、投稿用のディレクトリを新しく作り、そこへ送るつもりのファイルだけをコピーし、中間ファイルを一切置かない状態で最初からビルドが通るかを確かめることです。この一手で、絶対パス・同梱漏れ・.aux に依存した通り方のほとんどが表に出ます。締切直前に手を入れた箇所を試さずに送る、というのも arXiv が名指しで挙げている失敗のひとつです。

terminal
# build the submission the way the other end will
mkdir -p /tmp/submit && cp paper.tex refs.bbl mystyle.sty figs/*.pdf /tmp/submit/
cd /tmp/submit && pdflatex paper.tex   # must succeed with no .aux present

# a caption calling a macro needs \protect:
%   \caption{Following the method of \protect\cite{knuth1984}}
# and a file name with a space will be renamed on upload:
%   my figure.pdf  ->  my_figure.pdf

\listfiles で「何で組んだか」の一覧を残す

\documentclassの行に \listfiles と一行足すだけで、.log の末尾に読み込まれた全ファイルとそのバージョンが並びます。実際に走らせた出力の冒頭はこうです——article.cls 2023/05/17 v1.4n Standard LaTeX document classamsmath.sty 2023/05/13 v2.17o AMS math featureshyperref.sty 2024-01-20 v7.01h Hypertext links for LaTeX。数十行になりますが、この一覧があると「先方でだけ落ちる」原因の切り分けが一気に楽になります。半年後に編集部から「再現できない」と言われたときに、当時のバージョン表がログに残っているのは決定的な違いです。

log
*File List*
 article.cls    2023/05/17 v1.4n Standard LaTeX document class
  size11.clo    2023/05/17 v1.4n Standard LaTeX file (size option)
 fontenc.sty    2021/04/29 v2.0v Standard LaTeX package
 amsmath.sty    2023/05/13 v2.17o AMS math features
graphicx.sty    2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
hyperref.sty    2024-01-20 v7.01h Hypertext links for LaTeX
 ***********

もう一段きちんとやるなら snapshot パッケージです。\usepackage{snapshot} を足して組むと、.tex と同じ名前の .dep ファイルが生成され、中身は \RequireVersions{ ... } という再現用の宣言になります——*{application}{pdfTeX} {0000/00/00 v1.40.26}*{format} {LaTeX2e} {2023-11-01 v2.e}*{class} {article} {2023/05/17 v1.4n} といった具合に、エンジン・フォーマット・クラス・全パッケージのバージョンが機械可読な形で並びます。この .dep は次の節で bundledoc の入力にもなります。

pdffonts でフォント埋め込みを確認する — Type 3 が拒否される理由

pdffonts paper.pdf を一度打つだけで済みます。poppler に付属するこのコマンドは、PDF が使っているフォントを一行ずつ並べ、type(Type 1 / Type 3 / TrueType など)と emb(埋め込み済みか)、sub(サブセット化)、uni(Unicode への対応表があるか)を示します。arXiv は PDF 直接投稿について「非標準・非埋め込みのフォントを理由に PDF 投稿を拒否することがある」と述べ、「ビットマップ(Type3)ではなくアウトライン(TrueType/Type1)のフォントを使うこと」を求めています。学術誌の入稿規定もほぼ同じで、要するに emb の列がすべて yes で、type の列に Type 3 が無いことが合格条件です。

terminal
$ pdffonts paper.pdf
name                                 type              encoding   emb sub uni object ID
------------------------------------ ----------------- ---------- --- --- --- ---------
NLRVKI+SFBX1440                      Type 1            Custom     yes yes yes      9  0
LLYCJX+CMMI10                        Type 1            Builtin    yes yes yes     11  0
JHYTSG+CMR10                         Type 1            Builtin    yes yes yes     12  0

$ pdffonts bitmap.pdf     # the same document forced onto bitmap fonts
F28                                  Type 3            Custom     yes no  no       4  0

上の二つ目の出力に、この話のいちばん意地の悪い点が現れています。Type 3 のフォントも embyes なのです。 ビットマップは PDF の中に埋め込まれているので、「フォントは全部埋め込み済みですか」という質問には正直に「はい」と答えられてしまう。違いは右の uni の列で、no になっています——Unicode への対応表が無いので、その PDF は検索もコピーもできません。査読者が本文中の語を検索できない、という形で最初に露見します。pdfTeX でこの状態を意図的に作るには \pdfmapfile{} でマップを空にすればよく、逆に言えば、フォントマップの設定を壊した環境や、Type 3 を吐く古い作図ツールの出力を貼り込んだときに、知らないうちにこうなります。

PDF のバージョンも投稿要件になることがあります。TeX Live 2024 の pdfTeX が既定で書き出すのは PDF 1.5 で、pdfinfoPDF version: 欄で確認できます。指定されたバージョンに合わせるには、プリアンブル最上部で \pdfminorversion=7(pdfTeX の原始命令)を置くか、いまの LaTeX なら \DocumentMetadata{pdfversion=1.7}\documentclass の前に書きます。実測ではどちらも PDF version: 1.7 になりました。PDF/A の生成そのものは別ページの担当なので、そちらを参照してください。

分割した原稿を一つにまとめる — latexpandarlatexbundledoc

章ごとに \input で分けた原稿は書きやすいものですが、投稿窓口はしばしば「一つの .tex」を求めます。TeX Live には目的の違う三つの道具が入っています。latexpand main.tex > flat.tex\input\include を展開して一枚の .tex にします。arlatex --document=paper.tex intro.tex --outfile=selfcontained.tex は、補助ファイルを filecontents* 環境に包んで一つの .tex に格納します——実測ではこの出力もそのまま pdflatex で通りました。bundledocsnapshot.dep を読んで必要なファイル一式を tar.gz に固めます

terminal
# one flat .tex (latexpand 1.7.2); NOTE: comments are stripped by default
latexpand main.tex > flat.tex
latexpand --keep-comments main.tex > flat.tex   # keep them if you must

# one self-contained .tex carrying its own auxiliary files
arlatex --document=paper.tex intro.tex --outfile=selfcontained.tex

# a tar.gz of exactly what the document needs, excluding TeX Live itself
pdflatex paper.tex          # with \usepackage{snapshot} -> paper.dep
bundledoc --localonly --manifest=MANIFEST paper.dep
tar tzf paper.tar.gz
#   paper/
#   paper/intro.tex
#   paper/MANIFEST
#   paper/paper.tex

ここで一つ、匿名性にも関わる重要な挙動があります。latexpand は既定でコメントを取り除きます。 マニュアルにも「既定では latexpand は……コメントを含まない単一の LaTeX ファイルを出力する」と書かれており、残したい場合は --keep-comments を明示します。裏を返せば、素の .tex を送ると % で書いた私信もそのまま相手に届くということです。「この段落は査読者2への当てつけ」といったメモが投稿ファイルに残っている事故は珍しくありません。bundledoc--localonly も同じ発想で、TeX Live 側のファイルを除外し、自分が書いたものだけを固めます——arXiv の「TeX Live にあるものは同梱不要、自作のものは同梱必須」という要求にちょうど噛み合います。

二重盲検のための匿名化 — PDF のメタデータとコメントを消す

本文から著者名を消すだけでは足りません。PDF のメタデータとソース中のコメントの二つを別に確認します。 実測すると、\title\author は既定では PDF のメタデータに漏れません——pdfinfoTitle:Author: は空のままで、書き込まれるのは Creator: LaTeX with hyperrefProducer: pdfTeX-1.40.26、そして作成日時だけでした。漏れるのは、\hypersetup{pdfauthor={...}, pdftitle={...}} を自分で書いたときや、テンプレートがそれを仕込んでいるときです。この場合 pdfinfo に本名がそのまま出ます。投稿前に pdfinfo anon.pdf を打って Author: 欄を目で見る、これだけで防げます。

terminal
$ pdfinfo anon.pdf | head -6
Title:
Subject:
Keywords:
Author:
Creator:         LaTeX with hyperref
Producer:        pdfTeX-1.40.26

# strip your own margin notes out of the source you upload
latexpand main.tex > anon.tex      # comments removed by default

学会のクラスファイルが匿名モードを持っていることも多く、たとえば ACM の acmart にはクラスオプションとして anonymous が定義されています(クラスファイル内で真偽値オプションとして宣言されており、有効にすると Using anonymous mode というログを出します)。使えるならこれがいちばん確実です——著者ブロックだけでなく、謝辞・助成番号・\thanks の扱いまでクラス側が面倒を見てくれるからです。自作で隠す場合は、謝辞、助成金番号、自己引用(「我々の先行研究 [12] では」)、そして図の中に焼き込まれた所属ロゴを忘れずに。pdffontspdfinfo では見つからない情報は、結局のところ自分で読み返すしかありません。

印刷所への入稿 — トンボ・塗り足し・PDF/X

印刷所が求めるのは、学術誌とはまた別の三点です——断裁位置を示すトンボ(crop marks)、端まで色を届かせる塗り足し(bleed)、そして多くの場合 CMYK でフォントを完全に埋め込んだ PDF/X。欧文組みなら crop パッケージ(\usepackage[cam,center]{crop})でトンボが付きます。日本語の同人誌・自費出版で使われる本格的なデジタルトンボは texjporg の gentombow が描き、既定で 3mm の塗り足しを取り、PDF の /TrimBox(仕上がりサイズ)と /BleedBox(塗り足し込み)を設定します。jsclasses の tombow クラスオプションはトンボ風の表示にとどまるので、実際の入稿では gentombow を併用します。塗り足しとは、端まで届く絵柄を仕上がり線より約 3mm 外まで伸ばすこと——断裁のわずかなずれで白い筋が出るのを防ぐためです。

PDF/X(X-1a・X-3・X-4)は PDF/A の印刷版にあたる規格で、CMYK(と特色)、フォントの完全埋め込み、印刷機向けの出力インテント(ICC プロファイル)、正しい TrimBox/BleedBox を要求します(CropBox は設定せず、ArtBox は禁止)。LaTeX からは pdfx パッケージで出力でき、\usepackage[x-1a]{pdfx} が X-1a(CMYK と特色のみ)に相当します。画像の解像度は一般に 300〜350 dpi が目安、色は印刷所の指定に従います。仕上げに veraPDF のような検証ツールで規格準拠を確認し、最終的にはその印刷所の入稿仕様書に従ってください——規格に通っていても、印刷所ごとの追加要件は別にあります。

latex
% Western: crop marks from the crop package
\usepackage[cam,center]{crop}

% Japanese self-publishing: jsclasses option plus gentombow for real tombow
\documentclass[tombow]{jsarticle}

% PDF/X-1a output (CMYK and spot colours only)
\usepackage[x-1a]{pdfx}

送る前のチェックリスト

  • 一時ファイルを消してから、クリーンなディレクトリで最初から組み直す。.aux が残っていると通ってしまう不備がある。
  • \listfiles を有効にして組み、.log 末尾のファイル一覧を保存しておく。snapshot.dep があればなお良い。
  • pdffonts paper.pdf を実行し、emb の列がすべて yestype の列に Type 3 が無いことを確認する。
  • pdfinfo paper.pdfAuthor:Title: を見る。二重盲検なら空であること、PDF バージョンが指定どおりであること。
  • 自作の .sty / .cls を同梱し、.aux / .log / .pdf を外す。.bbl は入れ、名前を主 .tex に合わせる。
  • 図の形式をエンジンに合わせる(PDF 経路なら .pdf / .png / .jpg、DVI 経路なら .eps)。相対パスが最上位から解決するか確認する。
  • 一枚にまとめる指定があれば latexpand(コメントは既定で除去される)、一式を固めるなら bundledoc --localonly
  • 印刷入稿なら、トンボと約 3mm の塗り足し、TrimBox/BleedBox、pdfx による PDF/X 出力を確認する。