マクロツイーター

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

そのドライバはドライバか、あるいはドライバか

今回は「ドライバ」についてやや詳しい話をする。

……というと「またか」と思った人もいるだろう。dvipdfmx を使うならドライバオプションは dvipdfmx にしろ、云々。そう、確かにそのドライバの話なんだが、ここで質問。「ドライバ」という用語はどういうものを指すのであろうか?

「ドライバ」は「dviドライバ」

『美文書』の愛読者であればきっとこう答えるだろう。

「えっ、ドライバ? dvips や dvipdfmx とかの『dvi ドライバ』のことでしょ、当然」

「dvi ドライバ」というのは、要するに「DVI ウェア」(DVI ファイルを処理するプログラム)のことである。日本では「DVI ウェア(dviware)」の方が優勢なのであまり馴染みがない人が多いだろうが、英語圏では(少なくとも現在は)“dviware”より“DVI driver”の呼称の方が一般的らしく、例えば UK TeX FAQ のページでもこの用語が使われている。

『美文書』ではこの点を意識してか、全体を通して「dvi ドライバ」の用語を用いている。そして、graphicx パッケージの説明はいたって普通で、オプションに「ドライバ名」を指定する旨が解説されている。この「ドライバ」が「dvi ドライバ」と同義なのかを特に明記されてないが、明らかに“dvips”や“dvipdfmx”が「ドライバ」なのだから、ほとんどの読者は同義だと解釈するであろう。

ZR 氏の「ドライバ」

一方で、「マクロツイーター」の筆者である某 ZR 氏は「ドライバ」の語を少し違う意味で使っている。

これらの記事を見ると明らかなように、dvipdfm(x).def のことを「ドライバ」(または「ドライバファイル」)と呼んでいるのである。さらに氏はこんなことを言っている。

氏がオレオレ用語を多用することは確かだが、でもしかしこの「ドライバ」については全くのオレオレ用語でもないようである。

(なお、この“ZR 氏が言うところの「ドライバ」が指す概念”については、これを指す他の用語がないため、この記事では仮に「ドライバ☃」と呼ぶことにする。

例えば、graphics パッケージでは、使用するドライバ☃のファイル名を \Gin@driver というマクロに保存している。

\def\Gin@driver{dvipdfmx.def}

「.def」までついたファイル名を格納するマクロに「driver」という名前を付けているのだから、これは“driver”が dvi ドライバではなくドライバ☃を指すことの傍証となるだろう。

もっと直接的な証拠は、CTAN における dvipdfmx-def パッケージ(dvipdfmx.def を配布するためのパッケージ)のページである。

これを見ると、紹介文は次のようになっている。(強調は筆者、以下同じ)

This is the graphics driver for use when output is to be processed by dvipdfmx.

“graphics”の語には graphics パッケージへのリンクがあるので、この文の意味するところは「このパッケージ(つまり dvipdfmx.def)は graphics パッケージのドライバである」となることは疑いない。おまけに、このパッケージのカテゴリ(Topics)は「‘driver’ for output from graphics ‘kernel’ packages」となっている。graphics パッケージの「カーネル」と「ドライバ」を対比させているのだから、これはドライバ☃を指すとしか解釈できない。

grfguide を読んでみたらアレ

どうやらどちらの「ドライバ」も真っ当な用語であるようだ。しかし『美文書』を読んでいる初級者は多いだろうから、「ドライバ☃」については混同を避けるために別の語を使いたい。何かよい代替はないだろうか。

ドライバ☃は LaTeX 特有の概念なので、取りあえず LaTeX チームの公式の文書である grfguide を読んでみることにした。「ドライバ」の解説がある 2 節(“Driver support”)を読んでみると……アレレレレ!?

予備知識

これからその文書の内容を紹介するが、その前に次の事実を知っておいてほしい。

  • graphics および graphicx パッケージを作成・配布しているのは LaTeX チームである。
  • 昔は、全ての dvi ドライバに対する graphics/x のドライバ☃が graphic/x の本体に付属する形で、LaTeX チームが作成して配布していた。
  • ところが、ある時点で(確か 5 年ほど前だと思う)方針が変わり、graphic/x のドライバ☃は、各 dvi ドライバの作者(またはそれを支援する他の作者)が作成・配布することになった。先に見たように dvipdfmx.def が単独で CTAN のパッケージとなているのはこの方針に基づくものである。
第 1 段落

All these packages rely on features that are not in TeX itself. These features must be supplied by the ‘driver’ used to print the dvi file. Unfortunately not all drivers support the same features, and even the internal method of accessing these extensions varies between drivers. Consequently all these packages take options such as ‘dvips’ to specify which driver is being used.

これを見ると「‘driver’ used to print the dvi file」(dvi ファイルを印刷するのに使われる“ドライバ”)とあるので、driver が「dvi ドライバ」を指していることは明白である。

詳細は略すが、これにひき続く第 2〜6 段落でも driver は dvi ドライバを意味している。

第 7〜8 段落

There is a suitable dvi2ps.def file in the standard distribution. It is not enabled by default as it is not well tested as the driver is no longer available to me. The following driver files are similarly distributed but not enabled by default.

dvi2ps, dvialw, dvilaser, dvitops, psprint, pubps, ln

Most of these driver files are generated from the source file drivers.dtx. That file has the sources for other versions (for example older versions of dvips and textures) which are not generated by default.

「It is not enabled by default as it is not well tested as the driver is no longer available to me.」(それ(dvi2ps.def ファイル)は既定で有効になっていない、それはそのドライバが自分には手に入らないのでテストが十分に行えないからである。)ではやはり“driver”は dvi2ps.def ファイル(ドライバ☃)ではなく dvi2ps のプログラム(dvi ドライバ)を指している。

しかし次の文では“driver files”という怪しい用語があり、これは dvi2ps.def などのドライバ☃のファイル群を指しているようにみえる。おまけに、“driver files”の基となる dtx ファイルの名は drivers.dtx である。

第 9 段落

Different TeX systems support different drivers and the drivers are usually maintained by the developers of the TeX variants or post-processors. Hence they are always linked to some program and since the TeX distributors decide which programs they support, it is up to them to make sure the necessary drivers are included with their distribution. The graphics bundle contains the installation file graphics-drivers.ins which can be used to extract drivers from drivers.dtx but we cannot guarantee that these are up to date. Not all of the aforementioned drivers are available in drivers.dtx (some like pdftex and dvipdfm can be found on CTAN).

ちょっと言っていることが解りにくいが、これは実は先に「予備知識」として述べた方針転換についての話である。ここで「the drivers are usually maintained by the developers of the TeX variants or post-processors」(ドライバは通常は TeX 変種および後処理器の開発者によってメンテナンスされている)とある。“TeX variants”は pdfTeX や LuaTeX などの各種 TeX エンジンを指すのに用いられる語である。これと並列されていることを考慮すると、“post-processors”は何らかのソフトウェアを指していて、しかもドライバオプションの話をしているのだから*1、これが dvips や dvipdfmx などの dvi ドライバを指すことが判る。すると、この文の“drivers”は明らかに dvi ドライバとは別のものを指していることになる。そして少し先を見ると、「extract drivers from drivers.dtx」(drivers.dtx からドライバを抽出する)とある。実際に drivers.dtx を見れば判るが、これは紛れもなくドライバ☃を収めた dtx ファイルなのである。すると、ここではドライバ☃のことを(さっきは“driver files”であったが)“drivers”と呼んでいることが決定的になる。

第 10 段落

If you use a driver that is not covered by any of these possibilities, you may try to write a .def file by analogy with one of the existing ones, and then specify a suitable option in graphics.cfg and color.cfg, as for the above example of dvi2ps.

あれっ!? 「未知のドライバである場合は .def ファイルを新たに作れ」だからここの「ドライバ」は .def ファイル(ドライバ☃)でなくて dvi ドライバである。いきなり意味が元に戻った!?

考察してみる

公式文書の 1 つの節の 1 ページ強の文章の中で「ドライバ(driver)」の意味が見事に揺れ動いていることが判明した。

何故こんなアレなことになっているかは、再びさっきの予備知識を思い出せば解る。第 9 段落の部分は「方針の転換」について述べた部分である。ということは、ここの部分は方針転換があった時点(約 5 年前)以降に追記されたものということにある。実際、私は同じ文書(grfguide)の 1999-01-13 の版を持っているが、そこには例の第 9 段落だけが載っていない。

この grfguide は LaTeX2e の最初期から存在する文書なので、元からある部分と追記された部分の間では恐らく 10 年以上の年月が流れている。従って、「ドライバ」は本来「dvi ドライバ」を指していたのが次第に「ドライバ☃」の意味に変化したと推測できる。しかも追記をした人は「10 年前には違う意味だった」ことに気付いていないのである。

というわけで

「ドライバ」の語は……さあ、どうしよう?

割と“権威的”であると思える文書を調べてみたが、この有様ではここから指針を得るのは難しい。

ヒントになりそうなのは、“driver file”が第 7〜8 段落にあることかも知れない。この部分は 1999 年版にもあるので、結局、1999 年の時点では“driver”が dvi ドライバ、“driver file”がドライバ☃を指していたといえる。

従って、「ドライバ☃」に対する代替語としては、少なくともそれがファイルである場合には、「ドライバファイル」を使うことにすればよいのかも知れない。もちろんこの場合「ドライバファイル」が「ドライバであるファイル」ではない、という難点がある。

*  *  *

*「いっそのこと“ドライバ☃”にしてしまえばいいじゃん!」
ZR「えっ」

*1:ドライバ名になるのは pdftex などの TeX エンジンか dvips などの dvi ドライバの何れかである。