マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

出力 PDF のバージョン(とか)を指定する(補足)

昨日の記事では「TeX レベルの話」を敢えて避けていたが、ここではその辺りについて解説する。

pdfTeX/LuaTeX

pdfTeX では以下に挙げるプリミティブで出力 PDF のバージョンと圧縮を設定する。

  • \pdfminorversion:[整数パラメタ;読書可] 出力する PDF のマイナーバージョン(バージョン 1.x の‘x’の部分の数字)を指定する。可能な値の範囲は 0〜9 である。エンジンでの既定値は 4。((ただし TeX Live 2010 以降ではフォーマット作成時に \pdfminorversion の値が 5 に変更されている。))

    実際の pdfTeX の動作でこの値が意味を持つのは次に挙げる点に限られるようである。

    • PDF ファイルのヘッダに記載されるバージョン。
    • 文書に挿入する PDF 文書のバージョンの上限。
    • オブジェクトストリームの使用にはバージョン 1.5 以上が必須である。従って、\pdfminorversion が 4 以下でかつ \pdfobjcompresslevel が 1 以上の値になっている場合は警告を表示して \pdfobjcompresslevel = 0 に相当する動作を行う。
  • \pdfcompresslevel:[整数パラメタ;読書可] ストリームの圧縮の使用を設定する。0 は圧縮無し、1〜9 は圧縮有りを表す。圧縮有りの場合、数が大きいほど圧縮率が良く、小さいほど処理が軽い。既定値は 9(圧縮有り;圧縮率最高)。
  • \pdfobjcompresslevel: [整数パラメタ;読書可] ストリームオブジェクトの使用を設定する。この値によって、ストリームオブジェクトとして格納される(非ストリームの)オブジェクトの範囲が異なる。
    • 0 : 無し。*1
    • 1 : /Info 辞書および「挿入された PDF 文書に由来するオブジェクト」を除く全て。
    • 2 : /Info 辞書を除く全て。
    • 3 : 全て。

    エンジンでの既定値は 0 である。((ただし TeX Live 2010 以降ではフォーマット作成時に \pdfobjcompresslevel の値が 2 に変更されている。))

    なお、\pdfobjcompresslevel が 0 の場合は、オブジェクトストリームが使われないので「オブジェクトの記述」が圧縮されることは決してない。オブジェクトストリームで表される「オブジェクトの記述」が圧縮されているかは \pdfcompresslevel の値に依存する。((だから、厳密にいうと、\pdfobjcompresslevel 自体は「何かを圧縮するかどうか」を示すものではない。))

dvipdfmx/xdvipdfmx

dvipdfmx では以下に挙げる special 命令で出力 PDF のバージョンを設定できる。残念ながら圧縮の設定に関する special 命令はなく、これは dvipdfmx 起動時のコマンドオプションで指定するしかないようである。

  • pdf:minorversion 〈整数〉 : 出力する PDF のマイナーバージョンを指定する。((pdf:minorversion〈整数〉 の間に「=」が入っていてもよい。))可能な値の範囲は 3〜7 である。エンジンでの既定値は 4 であるが、設定ファイル(dvipdfmx.cfg)において再設定ができる(V パラメタ)。*2

    実際の dvipdfmx の動作でこの値が意味を持つのは次に挙げる点に限られるようである。

    • PDF ファイルのヘッダに記載されるバージョン。
    • 文書に挿入する PDF 文書のバージョンの上限。
    • マイナーバージョンが 5 以上の場合はオブジェクトストリームが使用され、4 以下の場合はオブジェクトストリームが使用されない。

    *1:この場合、xref の書式も 1.4 以前のものが使われる。

    *2:TeX Live 2010 以降では 5、それより前は 4 が設定されている。