マクロツイーター

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

紙面サイズの指定 (1/2)

周知の通り、オリジナルの TeX は出力(DVI)に紙面の大きさを記録しない(そもそも「紙面の大きさ」という概念がない)。従って、PDF に変換する時に紙面の大きさを DVI ドライバの起動オプションで指定する必要がある。ただし、pdfTeX や XeTeX のような「直接 PDF を出力する」エンジンでは(論理的に)自身が DVI ドライバを兼ねることになるので、紙面の大きさのパラメタをもつことになる。また DVI ドライバによっては、紙面の大きさを指定する special 拡張命令を提供するものもある。

ここでは PDF に変換することのみを考え、また「ドライバ」として、dvips、dvipdfmx、pdfTeX(pdfTeX/LuaTeX の PDF モード)、XeTeX を取り上げる。紙面の大きさを指定する方法は次のようなものがある。

  1. papersize special。(例:\special{papersize=10cm,12cm})[pdfTeX 以外]
  2. pdf:pagesize special。(例:\special{pdf:pagesize width 10cm height 12cm})[dvipdfmx、XeTeX]
  3. landscape special。(\special{landscape})[pdfTeX 以外]
  4. 各 DVI ドライバのオプション[pdfTeX 以外]
  5. \pdfpagewidth\pdfpageheight 変数。[XeTeX、pdfTeX]

XeTeX は見掛け上は PDF を直接出すが、内部では、まずエンジンが「XDVI 形式」(DVI の拡張)のファイルを書き出し、それを xdvipdfmx(dvipdfmx の拡張)が PDF に変換するという手順をとっている。実際に処理を分けて実行することも可能で、4 は xdvipdfmx のオプションを指す。

複数の指定をした時に、どれが優先されるかを調べてみた。

[dvips]

  1. 「-t landscape」オプション、または landscape special。
  2. 「-t 〈名前〉」オプション。(例:「-t b4」)
  3. 「-T」オプション。(例:「-T 10cm,12cm」)
  4. papersize special。
  • まず、C か D がある場合は A を無効化する。
  • その上で、「B+A」→「C」→「D」→「既定値+A」の順で、指定がある最初のものを採用する。ただし「+A」は「A が有効ならば縦と横の長さを交換する」を意味する。用紙サイズの既定値は TeX システムにより異なる(多くは A4 かレター)。

例えば、「papersize=10cm,12cm」「landscape」の special を含む DVI を「dvips -Ppdf -t landscape -t b5 -T 11cm,13cm」→「ps2pdf」で PDF に変換した場合、紙面サイズは「B5 縦」となる。

[dvipdfmx/XeTeX]

  1. 「-l」オプション、または landscape special。
  2. papersize special または pdf:pagesize special。
  3. 「-p」オプション。(例:「-p 10cm,12cm」)
  • 「B」→「C+A」→「既定値+A」の順で、指定がある最初のものを採用する。
  • XeTeX の場合、XDV の各ページの最初(bop 直後)に自動的に「pdf:pagesize width 〈\pdfpagewidth の値〉 height 〈\pdfpageheight の値〉」の special を挿入する。ただし \pdfpagewidth/height のいずれかがゼロ(0.0pt 以下)の場合は代わりに「pdf:pagesize default」を出力する(これは全く何の働きもしないようだ)。
  • B が複数ある場合は、各ページについて、その末尾においてそれ以前に指定された中で最後のものが採用される。

[pdfTeX]

各ページについて、shipout 時の \pdfpagewidth/height が使われる。

[special や起動オプションの中の長さ単位の true 指定]

  • dvips では true 付の単位は許されず、かつ単位は常に true なものと扱われる。(dviout も同じ。)
  • dvipdfmx では true はあってもなくてもよく、単位は常に true なものと扱われる。
  • XeTeX は、special 中では true は本来の意味をもつ。つまり true 無しの長さは mag 値の影響を受ける。xdvipdfmx のオプション中では、dvipdfmx と同じく true は無視される。
  • もちろん、\pdfpagewidth/height は普通の dimen パラメタなので、これに関する true の扱いは通常の TeX の文法に従う。