LaTeXでPDF/XやPDF/Aを出力するメモ

LaTeXで書いた文書は普通はPDFとして閲覧・配布すると思います。このPDFですが、用途によってはPDF/XやPDF/Aなどの標準化されたサブセットにしたいかもしれません。

よくあるやり方は、LaTeXで生成したPDFをAdobe等の製品を使ってPDF/XやPDF/Aに変換する方法です。しかし、ここではpdfxというLaTeXパッケージを使ってPDF/XやPDF/Aを生成する方法をやってみます。

この話題については既存の記事もあるので、それも参考にしてください。

最近のLaTeXでは標準の機能でPDFメタデータを埋め込めるやつもあるようですが、ここでは従来の(?)pdfxパッケージを使います。

基本

私はLuaTeXを使いました。pdftexやXeTeXでも行けるかもしれません(よくわかってない)。pTeX系の状況はよくわかりません。

基本的な使い方としては、pdfxパッケージのパッケージオプションに準拠したい標準を指定します。

\usepackage[x-1a]{pdfx}

hyperrefパッケージはpdfxパッケージが読み込んでくれるので、オプションを指定したいなら \hypersetup を使います。

メタデータは ファイル名.xmpdata として用意しておく必要があります。内容は

\Title{すごい本}
\Author{Mou Damepo}
\Language{ja-JP}
\Keywords{森羅万象}
\Publisher{すごい秘密結社}

みたいな感じです。詳しくはマニュアルを見てください。別ファイルとして用意するのが面倒なら

\begin{filecontents*}{\jobname.xmpdata}
\Title{すごい本}
\Author{Mou Damepo}
\Language{ja-JP}
\Keywords{森羅万象}
\Publisher{すごい秘密結社}
\end{filecontents*}
\documentclass{book}

という風に filecontents* 環境を使うのも良いでしょう。 filecontents* 環境は \documentclass の前に置くことに注意してください。

注意点として、埋め込む画像については色空間の指定とかが適用されないので、埋め込む画像がマズいと生成されるPDFが指定した規格に準拠しなくなります。

同じソースからPDF/XとPDF/Aの両方を出したい場合

ソース中に \usepackage[x-1a]{pdfx} とベタ書きするとPDF/Aを出したくなった時にソースを書き換える必要が出てきます。面倒ですね。

そういう時は、メインの文書ファイルには規格の指定はせずに \usepackage{pdfx} と書いておき、別のファイル(例えば、main-x1a.tex)に

\PassOptionsToPackage{x-1a}{pdfx}
\input main.tex 

と書けば良いです。

ClutTeXとpdfxパッケージ

pdfxパッケージを使った文章をClutTeXで普通に処理すると処理が収束しません(ClutTeXは相互参照を解決するために複数回処理を行うが、pdfxを使うと何回処理しても「もう一回処理が必要です」みたいな状況になる)。これは、pdfxパッケージがPDFファイルの作成日時を秒単位で補助ファイルに書き出しているためだと考えられます。

PDFファイルの作成日時は環境変数 SOURCE_DATE_EPOCH で固定することができます。詳しくは以下を参照してください:

上の記事を書いた頃はLuaTeXには効かなかったようですが、今の(私が使っているTeX Live 2023の)LuaTeXには効くようです。

というわけで、Unix系であればこんな感じでClutTeXを実行すれば有限回で処理が収束するようになります:

$ SOURCE_DATE_EPOCH=$(date '+%s') cluttex -elualatex main.tex

Makefileに書くならこんな感じでしょうか:

env SOURCE_DATE_EPOCH=$(shell date '+%s') cluttex -elualatex main.tex

そのうち、この環境変数を指定するオプションをClutTeXに実装するかもしれません。

専用のPDFソフトは要らなくなるのか?

先ほど書いたように、埋め込む図によってはpdfxパッケージを使っても生成物が規格に準拠しなくなるので、本当に規格に準拠したPDFが欲しいなら念の為規格への準拠をチェックできるソフトでチェックした方が無難だとは思います。私はAdobe Acrobatを使いました。

その他:フォントのエンコーディング

無事PDF/X-1aに準拠したPDFが生成できたとしましょう。Adobe様のお墨付きも得られたとしましょう。

このPDFはどこに出しても問題なく印刷できるでしょうか?

私が今回同人誌を印刷所に出したところ、「フォントのエンコーディングがビルトインだと良くない」と言われました。数式に使われているフォントがまずいみたいです。

これはunicode-mathパッケージを使うことで対処できます。

注意点として、unicode-mathを使うと黒板太字 \mathbb の字体が変わります。私は \mathbf を使うので関係ありませんが……。


私はPDFのプロではないし、この記事に書いたやり方は自己流なので、内容の正確さは保証しません。真似するときは自己責任でお願いします。