Baldanders.info

TeX 覚え書き(upLaTeX から PDF/A まで)

昨日で TeX の更新が終わったので,前々から気になっていた upLaTeX を試してみる。

> uplatex -v
e-upTeX 3.14159265-p3.5-u1.11-130605-2.6 (utf8.uptex) (TeX Live 2014/W32TeX)
kpathsea version 6.2.0
ptexenc version 1.3.2
Copyright 2014 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the e-upTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the e-upTeX source.
Primary author of e-upTeX: Peter Breitenlohner.

(組版結果の最新は spiegel-im-spiegel/charset_document を参照して下さい)

まずは latexmk 用に設定ファイルを作成する。

#!/usr/bin/env perl
$latex        = 'uplatex -synctex=1';
$latex_silent = 'uplatex -synctex=1 -interaction=batchmode';
$bibtex       = 'upbibtex';
$biber        = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf       = 'dvipdfmx -z9 -V 4 %O -o %D %S';
$makeindex    = 'mendex %O -o %D %S';
$max_repeat   = 5;
$pdf_mode	  = 3; # generates pdf via dvipdfmx

$pvc_view_file_via_temporary = 0;

続いて文書ファイルのプリアンブルを変更する。 といってもドキュメントクラスのオプションを追加するのと bibTeX の設定を追加するだけ。

\documentclass[a4j,10pt,fleqn,uplatex]{jsarticle}
...
\usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{charset.bib}

参考文献の記述はドキュメントの最後の方にまとめてしていたが,設定はプリアンブルに移動したので,document 内の記述は実際に出力する場所に以下を書けばよい。

\printbibliography[title=参考文献]

楽! 楽チン過ぎる。 これで latexmk でビルドすれば OK。

> latexmk charset.tex

ちなみにビルド結果をクリアする場合には -C オプションで起動する。 また -pvc オプションを付けてビルドすると,ビルド後も常駐してファイルを監視し,ファイルに変更がある度にビルドが走るという恐ろしいモードになる。 あれか? 擬似 Just-in-Time Compilation ってやつか?

私はコレで EPS を止めました

あちこちのサイトを回ってたらdvipdfmx は EPS を処理する際に内部で ps2pdf を呼ぶので,画像データを読み込むなら PDF 形式がよいみたいな記述があって,そういや divpdfmx ってそんな動作するって随分昔に聞いたような... ってことで,あっさり EPS を捨てた。 これが後々効いてくるのだが,それは後述する。

私の TeX に関する知識というかイメージは20世紀末あたりで固定されていて,当時はどうやって EPS ファイルを(フリーのツールで)作るかってんで苦労してたのに,今はもう「EPS は捨て!」なんですねぇ。 そういや TeX のデバドラも今は PDF 出力が当たり前になってしまった。 大昔に某社のレーザープリンタ用の TeX デバドラ開発に携わってた時があって,その美しさに感動したものだった(まぁその縁で TeX/LaTeX を使うようになったのだが)。 ラインプリンタじゃ出せないもんね(笑うところだよ)。 そもそも DVI って DeVice Independent の略称だったと思ったのだが,今は special 入りまくりで「どこが Independent やねん!」って心のなかでツッコミ入りまくり。

何が「正しい」 PDF なの?

これも私のオヤジ臭いイメージで恐縮なのだが,大昔は「PDF は軽量であるべし」と言われてて,権利の問題もあるし

(基本的に「書体」には著作権はないとされ物品性もないので意匠権もないとされていたが(パッケージに対しては不正競争防止法が適用されるはず),近年は創作性の強い書体には著作権が認められるケースもある。 まぁ情報の電子化が進み「印刷」技術そのものが昔の「写植屋」さんのごとく絶滅危惧の伝統芸能みたいになる時代もそう遠くないだろうから,せめてフォントでかっぱぐしかないよねぇ。 こうやってみんなして未来の足を引っ張り合うといいよw)

文書ファイルにフォントを埋め込むだなんて「もっての外」だったのだが,今は PDF にはフォントを埋め込まなくちゃいけないらしい(フォントが埋め込まれていない PDF は拒否する学会もあるとか)。 時代は変わるものである。

日本語の場合は IPA フォントがあるし,これに Noto フォントの CJK Serif バージョンが加われば(美術的な要件を除けば)ほぼ怖いものなしといえる。 フォントを探してたっかいパッケージを買わされていたあの頃はもうない。

というわけで時代は PDF/A になったのだが

ネットを回るも日本語の情報では PDF/A に関する情報がおどろくほど少ない。 PDF/X はあるんだよ。 てか, PDF/X しかないんだよ。 みんなそんなに印刷所と心中したいのか?

PDF のメリットは「印刷しなくて済む」ことなので,印刷所互換の PDF/X なんて殆どの人にとってはどうでもいい話だし, PDF/X 万世な人は TeX 処理系なんか使わず,諦めて Adobe 製品を買えと言いたい。

で, TeX 処理系では pdfx.sty というのがあるそうで,これが PDF/A 準拠のファイルを吐いてくれるらしいのだが,困ったことに pdfTeX 用なのですよ。 なんで困るかというと,日本語処理では歴史的経緯から pTeX 系が大きなシェアを占めていて,かく言う私もそのひとりで,はっきり言って乗り換えるのが面倒なのである。 環境がガラッと変わるからね。 ちなみに日本語処理では LuaTeX-ja ってのがほぼ pdfTeX 互換で pdfx.sty も使えるらしい。 すでに LuaTeX に移行している人はそれで問題ないだろう。

で,私としては少ししょんぼりしながらネットを回ってみると ps2pdf に -dPDFA オプションをつけると PDF/A 準拠のファイルを吐いてくれるらしいではないか! しかも ps2pdf は PDF ファイルも PDF ファイルに変換してくれるらしい。 素晴らしい!

ただこれが簡単にはいかなくて。 なんかねぇ

GPL Ghostscript 9.10: Annotation set to non-printing,
 not permitted in PDF/A, reverting to normal PDF output

とか言ってくるのよ。 なにそれ? PDF にパーミッションを付けろって言ってるわけじゃないよなぁ...

他にも似たような症例が散見されるがちゃんとした解決法は示されておらず悶々としていたが,ふと閃いて「ひょっとして画像データの PDF が悪いんじゃないの?」と気がついた。 そう,さっきのアレである。

最初は SVG ファイルを Inkscape で PDF に変換していたのだが,大元の LibreOffice/Draw ファイルから直接 PDF を出力してみた。

Export to PDF/A by Draw
Export to PDF/A by Draw

PDF/A オプションあるぢゃん!

これで作った PDF ファイルを画像データとして読み込ませて PDF を作り,さらに ps2pdf で PDF/A に変換する。

> ps2pdf14 -dPDFA -dPDFACompatibilityPolicy=1 -sProcessColorModel=DeviceCMYK charset.pdf charset-pdfa.pdf
GPL Ghostscript 9.10: Annotation set to non-printing,
 not permitted in PDF/A, annotation will not be present in output file

例のエラーが出て「おや?」と思ったが,オープンソースの文書ビュア Evince で読んでみると

Property of charset-pdfa.pdf
Property of charset-pdfa.pdf

やっほい! ちゃんと PDF/A になっている。 念のため Adobe Reader で読んでみると

Property of charset-pdfa.pdf (2)
Property of charset-pdfa.pdf (2)

と表示された。 よーし,うむうむ,よーし。

ちなみに PDF/A-1a と PDF/A-1b の違いは

PDF/A-1bは、PDFを表示するときの見栄えがデバイス(機器)や表示ソフトに独立で常に同じになるように作成することと、メタデータの埋め込みを要求している。PDF/A-1aは、さらにPDF内にドキュメントの論理構造を示すタグがついていること、すなわち、タグ付きPDFであることを要求している
PDF/A - Wikipediaより

だそうだ。 まぁ TeX 処理系で PDF/A-1a は無理ぽいよなぁ。 かっちりマークアップされていればいいけど,意外にそうでもなかったりするからなぁ。

思うのだが,ネット上での情報交換という観点で考えると TeX 処理系はいかにも時代遅れの感を拭えない。 Sphinx のようにタイプセットの手段として TeX 処理系を使うというのは今後もあるだろうけど,手動でフルスクラッチでゴリゴリ TeX/LaTeX コマンドを書くというのはなくなっていくんじゃないだろうか。 そういうのもあって LuaTeX は及び腰になっちゃうんだよなぁ。

まぁ,とりあえず, Inkscape においては PDF/A で出力できるオプションを追加していただきたいです。 (9月5日:追記)勘違い。 -dPDFACompatibilityPolicy=1 をつけてれば画像ファイルに関係なくちゃんと PDF/A 準拠のファイルを吐いてくれるようだ。 ゴメンペコン。

(9月8日:追記) ファイル構成によっては ps2pdf で変換すると埋め込んだフォントが全部ビットマップ化してしまうらしい。 フィードバック感謝です。

参考図書

photo
[改訂第6版] LaTeX2ε美文書作成入門
奥村 晴彦 黒木 裕介
技術評論社 2013-10-23
評価

LaTeX2e辞典 用法・用例逆引きリファレンス (DESKTOP REFERENCE) 数学文章作法 基礎編 (ちくま学芸文庫) はやわかりMathematica 第3版 ロボット考学と人間―未来のためのロボット工学― LATEXはじめの一歩―Windows8/7対応 (やさしいプログラミング)

reviewed by Spiegel on 2014/09/03 (powered by G-Tools)