と書くと、「実際に dvipdfmx で Beamer している」人はあれっと思うかも知れない。しかし、Beamer のマニュアルのほぼ冒頭の箇所(1.1 節)に次のように書かれている。
You can use beamer withpdflatex
,latex
+dvips
,lualatex
andxelatex
.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 氏*2が TUGboat の記事 “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 に関しては対策用のコードが加えられているから。