『数式組版』を組む技術:PDFの生成(1)
本稿において,“本書”とは木枝祐介著『数式組版』ラムダノート(2018)のことである.
>>> https://www.lambdanote.com/collections/mathtypo
また,本書はLuaLaTeXを用いて組まれた.したがって本稿ではLuaLaTeXの使用を前提としている.
本書が組まれた当時はTeX Live 2017が用いられたが,多くのコードはそれより後のTeX Live 2019まで共通して使用可能である.
本稿では,バージョンに強く依存する場合を除いて,各バージョンは明記されないことがある.
出力されるPDFの形式の制御
印刷所入稿のためのPDFは,最終的には印刷所の要求する仕様を満足する必要がある.
PDF/X-1aあるいはPDF/X-4といったものは,規格化されているという意味で印刷所から要求されるものの中でわかりやすいものである.
ここでは,PDF/X-1aおよび,PDF/X-4を生成することを考える.
◆PDFの規格準拠を確かめる方法
PDFがある規格に準拠しているかを調べるのは次のアプリケーションを用いることができる.
▶ pdfoolbox(https://www.callassoftware.com/en/products/pdftoolbox)
▶ Adobe Acrobat(https://acrobat.adobe.com/jp/ja/acrobat.html)
▶ veraPDF(https://verapdf.org/)
注:veraPDFはPDF/Aの準拠のみを確認することができる
我々が目標とするのは,これらのアプリケーションで問題なく準拠が確認できることである.
◆TeXファミリーによりPDFを得るルート
よく知られたように,`platex`や`uplatex`は標準ではDVIファイルを生成する.
これはもちろんPDFファイルではない.
このことは,とくに`platex`や`uplatex`を用いて目的の規格に則ったPDFファイルを得ることは,それほど単純ではないことを意味している.
我々がTeXファミリーを用いて,とくに日本語を含む文書をPDFとして比較的簡易に得る方法は,大きく次の2つの方法に分れる.
▶ DVIファイルをPDFファイルに変換する
▶ 直接PDFファイルを出力する
以下,直接PDFファイルを得る方法を扱う.
◆TeXファミリーで直接PDFファイルを得る方法
以下では,話を簡単にするために,準拠を目指すターゲットをPDF/X-1aと仮定する.
◇使用するエンジン
PDF/X-1aに準拠したPDFファイルを得るもっともスマートな方法は,DVIファイルを経由しないで直接PDFファイルを得る方法である.
TeXファミリーで直接PDFファイルを得るには次の3つの内いずれかのエンジンを利用する方法がよく知られている.
▶ `pdftex`による方法
▶ `xetex`による方法
▶ `luatex`による方法
この中で日本語を含む文書を商業出版レベルで取り扱うには,現状では`luatex`エンジンのもとで`lualatex`にLuaTeX-jaパッケージを援用するのが最も適している方法である.
◇`pdfx.sty`
`lualatex`にLuaTeX-jaパッケージを援用すれば,比較的容易に日本語を含むPDFファイルを直接得ることができる.
一方で,そのようにして得られたPDFファイルは依然としてPDF/X-1aではない.
たとえばpdftoolboxで検証すると,次のような問題が報告される(以下,検証結果の画像はpdftoolboxのものである).
この問題を解決するために,pdfxパッケージ(https://www.ctan.org/pkg/pdfx)を用いる.
最初の手続はpdfxパッケージを準拠ターゲットとするPDFをオプションで指定して(クラスファイルの中で)読み込むことである.
今回は例としてPDF/X-1aをターゲットを仮定しているが,もちろん目的に応じたオプションを与えればよい.
\RequirePackage[x-1a]{pdfx}
注:pdfxは様々なバージョンのPDF出力に対応している.
現在のところ,“Experimental, not fully implemented.”というものも含めれば,PDF/Aのいくつかもサポートされている.
単にpdfxパッケージをオプション付きで読み込んでも,まだPDF/X-1a準拠とはならない.
問題が報告されているのは,“文書のタイトルがないまたは空欄”であるので,これを解決する必要がある.
注:ここでいう“文書のタイトル”はPDFのメタ情報についてであり,文書中に現れているか否かの問題ではない.
この問題を解決するために,たとえば次のように`\documentclass`よりも前に記述する.
\begin{filecontents*}{\jobname.xmpdata}
\Title{数式組版}
\end{filecontents*}
注:クラスファイルではなく,`\documentclass`が記述されるTeXファイルであることに注意せよ.
`lualatex`での日本語使用がそうであるように,`\Title`の引数はUTF-8で記述している.
そのようにすることによって,問題なく日本語が使用できる.
この`filecontents*`環境で様々なメタデータを直接指定できる.
代表的なものは`Title`も含めて次のものである.
詳細はpdfxパッケージのマニュアルを参照のこと.
▶ `Title`(`\Title`)
▶ `Keywords`(`\Keywords`)
▶ `Author`(`\Author`)
▶ `Publisher`(`\Publisher`)
▶ `Producer`(`\Producer`)
▶ `Copyright`(`\Copyright`)
このメタデータを与える操作により,無事PDF/X-1aへの準拠を確認することができる.
◆ターゲットのPDF規格に準拠させるタイミング
今回の例でいえば,PDF/X-1aに準拠させるタイミングは最初に出力を得るタイミングである.
したがって,最初期にpdfxパッケージを用いPDF/X-1aに準拠していることを検証しておく必要がある.
これは,図版に代表されるような当該TeXシステム外で作成されたPDFもまたターゲットのPDF規格でなければならず,図版を組み込むような状況や,あるいは,`tikz`を用いて飾り罫などを文書内で使う状況が,ターゲットのPDF規格準拠に影響するためである.
pdfxパッケージを用いたからといって,ターゲットPDF規格の条件に準拠しない各パーツをPDF規格に準拠するように変換してくれるわけではない.
最初期にターゲットPDF規格準拠を達成しておくことで,それらを用いるようなデザインであったり,原稿中の図版などが原因でPDF/X-1aに準拠できない状況を防いでいくことになる.
ターゲットのPDF規格準拠達成を阻害する外部要因を改めて挙げれば次のようになる.
▶ 図版
▶ グラデーション
▶ 透明
これらがターゲットのPDF規格に準拠しないかたちで仕様されていた場合は,最終版での発覚は致命的な遅延になりかねない.
したがって,これらが用いられた場合は,毎回PDFの規格準拠を検証する必要がある.
注:とくにPDF/X-1aでは透明情報を含められない.
◆PDFを特定の規格に沿わせる意味
今回であれば,PDF/X-1aといった特定の規格に準拠させることは,印刷時におけるトラブルを回避する方策のひとつである.
商業レベルの印刷においては,一般に民生品のプリンターで出力するときよりもシビアな要求がなされる.
これはたとえば,自分の画面でみえているからであるとか,自宅のプリンターや出力サービス店の複合機で印刷できたからといって,必ずしも商業印刷レベルの要求に応えてはいないことを想定する必要があることを意味する.
商業印刷にかかわる組版者は,印刷全体の工程の一端を担っている.
プレスに対しプリプレスと呼ばれることもあるその工程は,プレス工程に対し的確に工程を受け渡す義務と責任を負う.
このことは,工程が移った後でも,必要に応じてプレス工程からしばしば発生するリクエストに応えることも意味する.
これは双方の工程にとって負担であるのは疑いようのない事実である.
このリクエスト発生を最小限にすることが規格化されたものに準拠することの理由のひとつである.
プリプレス工程の責任とプリプレス工程からのリクエスト発生やその応対義務の点において,いわゆる同人系印刷所ではまったく工程のフローが異なるので,規格に準拠しないPDFを同人印刷できた経験は意味をなさない.
また,責任の範囲という点においては,著者として出版に渡したPDFにクレームがつかなかったという経験も同様に意味をなさない.