マクロツイーター

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

Beamer は dvipdfmx をサポートするか否か? (1)

と書くと、「実際に dvipdfmx で Beamer している」人はあれっと思うかも知れない。しかし、Beamer のマニュアルのほぼ冒頭の箇所(1.1 節)に次のように書かれている。

You can use beamer with pdflatex, latex+dvips, lualatex and xelatex. latex+dvipdfm isn’t supported (but we accept patches!).

果たしてこの「dvipdfmx はサポートされてない」という記述は単に古い情報*1の更新漏れだろうか、それとも今でも dvipdfmx は「公式にサポートされている」と言えない事情があるのだろうか。

dvipdfmx では確かに動かないアレ

現実には、dvipdfmx で Beamer のほとんどの機能は使えているのだが、一つ、dvipdfmx では使えない大事な機能が確かに存在する。それは(標準で)画面の右下に表示される「ナビゲーションシンボル」である。

pdfTeX で PDF に変換した場合は、この要素に含まれるアイコンをクリックすることで、スライド・フレーム・節などの単位で移動することができるのであるが、dvipdfmx で変換した場合にはこれが全く働かない。だから、dvipdfmx の使用を前提とする Beamer の解説では、次の記述を行って、無益な「ナビゲーションシンボル」を非表示にすることが指示していることが多い。

\setbeamertemplate{navigation symbols}{}

ところでこの「ナビゲーションシンボル」について、ChoF 氏*2TUGboat の記事 “DVI specials for PDF generation” で面白いことを書いている。

  • Beamer においては、描画機能は PGF、リンク等の PDF 関連の機能を hyperref が担当している。これらの 2 つのパッケージは(標準の DVI を超える機能を扱うので)ドライバに依存する。
  • 実は、Beamer が持つドライバ依存な部分は全て上述の 2 つのパッケージの担当分であり、Beamer 自身は直接にはドライバの拡張機能を使っていない。((実際、Beamer の実装コードの中には DVI special 命令や \pdf〜 で始まる pdfTeX の拡張プリミティブを呼んでいる箇所は全く存在しない。(pdfTeX 専用の補助パッケージを除く。)))
  • 現在(2009 年)では PGF と hyperref のどちらも「dvipdfmx をサポートしている」。だから、本来は Beamer もそうであるべきである。
  • 「ナビゲーションシンボル」が機能しないのは、dvipdfmx のやや意外な仕様による Beamer のバグが原因である。*3

要するに、「Beamer がどの程度 dvipdfmx に対応しているか」は「PGF/hyperref がどの程度 dvipdfmx に対応しているか」に完全に依拠しているということである。後者については、PGF と hyperref における dvipdfmx の対応の程度は確かに pdfTeX には及ばないが、それでも「対応している」と呼べるほど十分に機能しているように思える。現状で dvipdfmx で使えないのはナビゲーションシンボルに限られるのではないだろうか。

アレが動かないから未対応!?

ところで、最初に挙げた Beamer のマニュアルの文をもう一度見てみると、XeTeX(xelatex)については公式に対応していると見做されていることが判る。ところが、PGF と hyperref のレベルでみると、dvipdfmx と XeTeX のドライバの対応状況はほとんど同じである。(XeTeX は PDF 生成のために「dvipdfmx の拡張版」を利用している。*4)しかし一つ例外があって、XeTeX ではナビゲーションシンボルがちゃんと機能する!*5ここから導かれる帰結は……?

Beamer が dvipdfmx をサポートしないことになっている理由は
「ナビゲーションシンボルが動かない」からである。

ええっ!?

次回に続く)

*1:Tantau が開発を行っていた頃(2007 年、3.07 版まで)の Beamer は確かに dvipdfmx では全く使えなかった。(PGF が非対応だったため。)

*2:dvipdfmx の主要な開発者の一人である Jin-Hwan Cho(趙珍煥)の愛称。

*3:さらに、ChoF 氏はこの不幸なバグが生まれたのは、dvipdfmx の仕様を著した文書が決定的に不足しているからと述べている。そして、当該の記事の本題はまさにその「dvipdfmx の仕様」なのである。

*4:XeTeX は TeX 文書をコンパイルするとき、まず独自拡張の DVI 形式のデータを生成して、それを「dvipdfmx の拡張版」である xdvipdfmx というコマンドで PDF データに変換するという処理を内部で行っている。従って、ドライバ拡張機能については dvipdfmx と XeTeX(xdvipdfmx)は共通する部分が多い。(でも相違点も結構多いような気がする。)

*5:XeTeX が「dvipdfmx の拡張版」を用いているので、本来なら「dvipdfmx と全く同じ理由で」XeTeX でもナビゲーションシンボルは機能しないはずである。これが機能するのは、XeTeX に関しては対策用のコードが加えられているから。