SUBMENU

はじめに

dviout Version 3.07.3以降ではBaKoMa(Basil K. Malyshev)及びインプレス社の作成したComputer Modern TrueTypeフォントを利用することができます。dviout Version 3.07.4以降(pLaTeX2e for Windows Another Manual Vol.1 1999がインストールするdvioutの場合、これは第2刷以降の環境です。初刷の場合、自分でdvioutをバージョンアップする必要があります。)では、これらのTrueTypeフォントを利用することで印字速度が劇的に向上することがあります。特にインクジェットタイプのプリンタを使用している場合、「Windows専用」タイプのレーザー・ビームプリンタ(以下LBPと略記)を利用している場合、もしくは、キヤノン、EPSON両社製以外のLBPを利用している場合には効果があります。キヤノン、EPSON社製のLBPを利用しており、そのプリンタがLIPS系制御言語、ESC/Page(ESC/P, ESC/PSではありません)をサポートしている場合、「dviprt機能」を用いてください。また、PostScriptプリンタの場合には、dvips(k)を利用してPSファイルに変換後出力してください(dvioutの「dviprt機能」によって自動的にこの変換と出力を行なうこともできます。詳細はヘルプファイルをご覧ください)。

pLaTeX2e for Windows Another Manual Vol.1 1999がインストールする環境では、BaKoMaのCM TrueTypeフォントをインストールすると(第2刷以降ではインストーラがインストールすることもできるようになっています)、それらを自動的に利用するように設定が行なわれています。しかしながら、この設定が災いし、特定の環境下で不具合を生じる可能性があります。この不具合に対する対処は読者側で自ら行なっていただく必要があります。ここでは、問題の発生点に関するいくつかの議論を行ないます。また、TrueTypeフォント利用時の運用についてもいくつかの議論を行ないます。(このページの内容は、複製・再配布・再利用等に一切の制限がありません。ご自由にご利用ください。)

文字が正しく表示されない現象について

TrueTypeフォントのエンコード

一般にフォント・ファイルにはいくつかのフォントがまとめて格納されています。そして、フォントごとにどの番号にはどの字形が入っているかは固定されています。この配置情報を「エンコード」と呼ぶこともあります。Computer Modernフォント族やAMS, Eulerフォント族もそれぞれフォントの作成者によって決定されたエンコードを持ちます。しかしながら、TrueType化されたこれらのフォントは、元々のフォントと異なるエンコードを持ちます。この理由は簡単です。通常、コンピュータで使用する文字セットは各種の標準化団体(ISO, ANSI, JISなど)によって制定されていますが、最初の32文字は特定の目的のために予約されています(たとえば「改行文字」「タブ文字」など)。この領域は通常は文字自体を表わすためには利用されませんので、これらのエンコードに基づいたOSは、これらの領域に文字データが入っているとは想定していません。TrueTypeフォントは、Apple Macintosh, IBM OS/2, Microsoft Windowsなどで利用されていますが、この理由により、それぞれのフォントの最初の32文字は文字データを持つことができません。しかしながら、TeXのフォントは先頭の32文字分にも文字を割り振ります。この、単純にはTrueType化できない32文字分をどのように格納するかは、TrueTypeフォントの作成者の裁量に任せるよりほかありません。通常は、空いている128番目以降の領域に格納しますが、その配置も決まっているわけではありません。具体的には、BaKoMaのTrueTypeフォントとインプレスのTrueTypeフォントでは実際にこれらに食い違いがあります。dvioutはデフォルトでCM TrueTypeフォントはBaKoMaエンコードであるとしています。これはBaKoMa TrueTypeフォントがフリーで配布されていることに加え、世界的にも広く流通しているからです。そして、pLaTeX2e for Windows Another Manual Vol.1 1999のインストーラも、もしTrueTypeフォントがあれば、それはBaKoMaフォントであると仮定しています。しかも、TrueTypeフォントがあれば、それを優先的に用いるように設定を行ないます。従って、インストーラからインストールしただけの状況では、インプレスのTrueTypeフォントがインストールされている環境では、(特に数式に関して)表示内容が不正なものとなります。

典型的な化ける文字

次の字は、誤って表示される典型的なものです(一部を抜粋)。以下の字体が化けて表示される場合はTrueType周りの設定について調整が必要です。

ΓΔΘΛΞΠΣΥΦΨΩ
ff, fi, fl, ffi, ffl
i, j(上の点なし)
`´(などアクセント記号)
エスツェット, ae, oe, AE, OE, 空集合記号など
↑↓
αβγδεζηθικλμνξπρστυφχ
-・×*÷◇±◯○●≡⊆⊇≦≧~⊂⊃≪≫
()[]{}〈〉

対処方法に関する考察

すでに明らかになったように、対処方法は次の二つとなります。

インプレス社のTrueTypeフォントをアンインストールする

この方法は、最も確実なものです。インプレス社のTrueTypeフォントをアンインストールし(手動で行なう必要があります)、BaKoMaのTrueTypeフォントをインストールします(dviout Version 3.07.4以降ではTrueTypeフォントを利用することを推奨します)。

しかしながら、この方法では、インプレス社のWinDvi, WinDviProは利用できません。(dviout.exeをwdvip32.exe、windvi32.exeという名前でコピーすれば、これらの代用を行なうことができます。)

dvioutでインプレス社のTrueTypeフォントを用いるように設定する

こちらを選択した場合、決してBaKoMaのTrueTypeフォントをインストールしないでください。また、インプレスより別売りされているAMS TrueTypeフォントを購入することを強く推奨します。

dvioutをインプレス社のTrueTypeエンコードにあわせる方法は簡単です。[Option]-[Setup Parameters]で[WinJFont]ページを開きます。


次の手順で上に表示されているように調整します。

  1. [jfm(omit pt)/tfm](左下)で、[edefault]を選択
  2. [TrueType Font](左上)で[cmr10]を選択
  3. [Japanese TT]のチェックをはずす。
  4. [code type](右下)で[WinTeX]を選択
  5. [Define]ボタンを押す
  6. [Save]ボタンを押す

TrueTypeフォントを利用しない

pLaTeX 2e for Windows Another Manual Vol.1 1999のインストーラはTrueTypeフォントを優先的に利用します。インプレス社のTeX for Winowsの環境と共存させるには、上で記したように、TrueTypeフォント周りの設定を調整しなければなりません。これが面倒であれば、dviout側のTrueTypeフォントを用いる設定を変更してしまうという方法があります。

[Option]-[Setup Parameters]で[Font]ページを開きます。

  1. [TEXPK]の先頭にある``^r\tfm\public\cm\^s.tfm;^r\tfm\ams\\^s.tfm;''を削除する。
  2. [Save]をおす。

dvioutがページ違反を起こす

testplatex2e.dviファイルを表示しようとすると、いきなりdvioutがページ違反を発生してしまうことがあります。「ページ」とはCPUがメモリ(物理・仮想を問わず)の連続する領域を管理するときの最小単位で、通常は4KB、特定のCPUで8KBです。Windowsの場合、CPUのページ機構が有効になっています。このページに対する属性によって、システムはアプリケーションの不正な処理から他のアプリケーションや自分自身を保護します。通常、「32bitポインタ」と呼ばれるメモリ番地は「セグメント・ディスクリプタ」「ページ番号」「ページ・オフセット」から構成されています。「ページ違反」とはアクセスできないようにマークされたポインタに対するアクセスを行なった(違反)を表わします。一般には、今の説明から明らかなように、何らかのアドレスをシステムに要求した場合にシステムが不正な領域を返した、プログラム上のロジックミスで存在しないアドレスを算出してしまった、などが原因です。

本論に戻ります。「dvioutのページ違反です。モジュール:DVIOUT.EXE、アドレス:015f:00442de7」などのエラーメッセージはdvioutのプログラム内のアドレスを示しています(これ以外の表示される情報はほとんど役に立ちません)。このアドレスは、dvioutがWindowsからTrueTypeフォントの字形を取得する箇所です。すなわち、TrueTypeフォントを利用しようとしたときに、dvioutが想定しなかった結果が返ってきたためにdvioutが混乱したことを表わしています。

これの原因は次のものだと考えられます。

この問題に関するより詳しい情報を求めています。詳しい情報は、乙部まで。

ここ以降で触れられている内容はやや深い議論を含んでいます。このページ全体に以下の記号がつけられていると考えてください。しかしながら、極めて重要な内容について説明していますので、できる限り印刷するなどして落ち着いて読むことを推奨します。

TrueTypeフォント利用に関する考察

dvioutがTrueTypeフォントを見つけるメカニズム

TEXPKはその名に反して、フォントに関する大部分の設定を行ないます。また、TEXFONTSはその名に反して、現在ではほとんど利用されません。dvioutは表示するフォントを探すために、まずTEXPKの最初に書いてある項目から探します。見つかればそれを用い、見つからなければTEXPKで ; で区切られた次の項目を探します。

この規則に従ってフォントを探した結果、dvioutが見つけたフォントが、PKフォントだった場合、dvioutは伝統的な方法に従ってそのPKフォントを表示します。しかしながら、見つかったフォントがPKフォント以外だった場合には話は複雑になります。

見つかったフォントがVFフォントだった場合、それは、Virtual Font(仮想フォント)です。Virtual Fontについての説明と議論は別の機会に譲りたいと思います。

見つかったフォントがTFMだった場合、これはきわめて特殊な状態に陥ったということです。TFM(TeX Font Metrices)は、一般にTeXの組版のときにのみ利用されます。なぜなら、TFMファイルにはその名の通り、フォントの配置情報しか書いていないからです。また一方において、配置情報はPKフォントにもかかれています。従って、TFMファイルを見つけてしまったということはすなわち、PKフォントが存在しないという意味であると解釈せざるを得ません(そうでなければ、設定が間違っており、コンピュータは間違った設定に対しても正直に動くものです)。しかしながら、TFMファイルは字形の情報を一切持っていないことは周知の事実です。そうなると、dvioutはTFMファイルを見つけたとき、それを「PKフォント以外から」取得せよという意味であると解釈します。また同時にPKフォントではないので配置情報を得るためにTFMファイルも必要となります。その意味できわめて妥当な指示方法です。

では「PKフォント以外」と指定されたときのdvioutの動作ですが、こうなると自然な選択肢は「TrueTypeフォント」を利用することです。そこで、dvioutはtfmファイルを見つけてしまうと、TrueTypeフォントを探しに行きます。ここからあとの話はもはや[Fonts]ページとは関係なく、[WinJFont]の話です。

さて、dvioutはTEXPKに従ってtfmファイルを見つけると、(Version 3.07.6以降では)まずfttでフォントマッピング・ファイルが指定されているかどうかを確認します。ただし、この仕組みはやや煩雑なものとなりますので、ここではまずfttでフォントマッピング・ファイルは指定されていないとしておきます。

そのとき、dvioutはそのtfmファイルに対応する字形を得るために、[WinJFont]を参照します。[WinJFont]の[tfm(omit pt)/jfm]の欄に記されているのが、対応するTrueTypeフォントの存在を定義されたtfmファイルです。注意してください。ここで対応が記述されていなければ、TEXPKに従ったフォント検索ルーチンは、見つからなかった旨を返しますから、dvioutはTEXPKの次の項目を探します。[tfm(omit pt)/jfm]の欄には、[default]、[tdefault]、[edefault]の3つの「デフォルト指定」があり、順に、横組み日本語tfm(jfm)、縦組み日本語tfm(jfm)、欧文tfmを意味します。これらデフォルト指定が指定されていると、この指定は明示的に対応が定義されていないtfmファイルに対して使用するTrueTypeフォントを意味します。

和文tfmファイルは、TEXPKで指定がされているはずです。たとえば、min10.tfmがTEXPKで検索にかかると、[WinJFont]の[tfm(omit pt)/jfm]の欄に`min'が指定されているかどうかを判定します。通常これは指定されており、MS明朝に結びつけられています。従ってdvioutはMS明朝を用いて表示を行ないます。次に、もしjisg.tfmが見つかったとしましょう。一般にこれは「ゴシック」を意図して用いられています。そして、[tfm(omit pt)/jfm]にjisgと記述されており、それがたとえばMSゴシックに結びつけられていれば、dvioutはおそらく作成者が意図したとおり。ゴシック体で出力します。しかしながら、もしjisgに対する定義がなければ、dvioutは日本語tfmのデフォルトである`default'が定義されているかどうかを調べます。もしdefaultが定義されていれば、その定義に従って出力します。一般にはMS明朝が斜体で登録されていますので、そのような出力が得られます。もしjisg, default共に定義されていなければ、TrueType検索ルーチンは「発見できず」と返します。dvioutはその時点でTEXPK設定解釈に戻り、引き続いて別の設定を探します。(しかしながら和文の場合には通常はこのあとTEXPKに従って探しても、適切なフォントは見つからないでしょう。そして、dvioutはTEXPKに基づいて探した全フォントの候補を表示し、見つからなかったというエラーと共にそれを表示するでしょう。)

欧文の場合にはやや事情が異なります。TEXPKに従ってPKフォントが見つかれば最初から何の問題もありません。そこで、TFMファイルが見つかった場合を考えましょう。仮に、いまcmmi12.tfmファイルが見つかったとします。dvioutはもちろん、[tfm(omit pt)/jfm]の欄にcmmi12を探します。たとえばもしcmmi12に対してTimes New Romanが定義されていれば、それを用います。しかしながら一般にはこれは困った結果を引き起こすでしょう。cmmi12などのフォントは本来PKフォントで用意されるべきものですし、決して他のフォントを代用すべきではありません。ただし、和文の場合と異なり、欧文TFMファイルの場合には、cmmi12.tfmファイルに対してはcmmi8フォントを、cmmi10.tfmファイルに対してはcmmi10フォントを、という割り当てが可能です。しかしながら、Computer Modernフォントはそれぞれのフォントの大きさに応じて適切なデザインがなされており、このような代用を行なうと、出力バランスがとれなくなります。このような理由で、一般にComputer Modern族などに対しては、[tfm(omit(pt)/jfm]では明示的な指定はないと思われます。そこで、dvioutは`edefault'が定義されているかどうかを調べます。注意してください。和文の場合と異なり、欧文の場合には、`edefault'が定義されているかどうかということだけが意味を持ちます。もし`edefault'が定義されていなければ、TrueType検索ルーチンは失敗し、dvioutはTEXPKの検索ルーチンに戻ります。もし定義されていれば、dvioutはtfmファイルの名前のTrueTypeフォントを探します。edefaultが具体的にどのフォントに定義されているかどうかは関係がありません。デフォルトでは、edefaultはcmr10と記述されていますが、これは全く無関係のTrueTypeフォントでもよく、実際dvioutはこのフォント名を読みとりません。再度強調しておきますが、ここで重要なのは、「edefaultが定義されている」ということだけです。

さて、edefaultが(何かに)定義されている状態でcmmi12.tfmファイルがTEXPK検索中に見つかったとしましょう。そうするとdvioutは上述の仕様により、cmmi12という名前でシステムに登録されているフォントを、システムに対して要求します。もし見つかればそれを用いて出力を行ない、見つからなければTrueTypeフォント検索ルーチンは失敗し、dvioutはTEXPK検索ルーチンに戻ります。さて、このページですでに述べたように、Computer Modern族のエンコードはTrueTypeと合致しないので、dvioutは実際にTrueTypeフォントが見つかると、エンコード変換を行なわなければなりません。そのエンコード変換が必要な場合、dvioutが参照するtfm定義でエンコードを指定しなければなりません。通常はいま述べたように、edefaultの定義でBaKoMa, WinTeXのいずれかを選択しなければならないでしょう。

欧文TrueTypeを用いたいが、しかしCM TrueTypeを用いたくない場合には、edefaultの定義を解除するか、TrueTypeフォントをインストールしないか、またはTEXPKにComputerModernのtfmを記述しないかを選択しなければなりません。ところで、書籍のインストーラはComputer Modernのtfmを優先的に検索するように設定を行なっています。これは重要なことです。もしPKフォントよりもあとに書いてしまうと、PKフォントが存在しなかったフォントに関してのみ、TrueTypeフォントが検索されます。従って、同じフォントであっても、その大きさにより、PKフォントが使われたりTrueTypeフォントが使われたりということになります。これは見る目を持った人に違和感を与えるでしょう。必ずどちらかに統一してください。そして、キヤノン、EPSON両社のLBP以外のプリンタではTrueTypeフォントを用いた方が印刷速度が圧倒的に高速なので、TrueTypeに統一することを推奨します。また、PDF Writerを用いたPDF出力では、必ずTrueType出力を行なってください。逆にキヤノン、EPSON両社のLBPを用いる人は、TrueTypeフォントを使う使わないに関わらず、印刷のときにはdviprt機能を使うことを推奨します。

フォントマッピングファイルを利用する場合

次に、Version3.07.6以降で追加されたfttオプションでフォントマッピング・ファイルが指定されていたときのことを考えます。このフォントマッピングファイルは、dviファイル内で指定されているフォントの名前がTEXPKでtfmファイルとして発見されたあと、[WinJFont]の指定に従って検索するよりもまえにフォントの名前を変換してしまうメカニズムです。フォントのエンコードなどを変更するものではありません。ではこれの指定について説明する前にまず、なぜそのような奇妙なメカニズムが必要となるのかの理由について説明をします。

まず、最初に除去しなければならないよくある誤解は、「TeXの欧文とはCoumputer Modernフォントを用いて出力されるものである」というものです。そしてまたそれと同時によくある誤解は、「TeXで用いるフォントはMETAFONTで生成したフォントである」というものです。これらは両方とも完全な誤解であり、そのような考えはまず最初に捨て去ってください。

KnuthはThe Art of Computer Programmingを執筆するためにTeXを開発しましたが、そこで使えるフォントがなかったため、METAFONTを作成しました(筆者はTeXに比べればMETAFONTの方が圧倒的にすばらしい作品であると思いますが、それについての議論はここでは行ないません)。そして、Computer Modernフォントを作成しました。KnuthがTeXを配布したとき、Computer ModernフォントはTeXと共に配布されましたが、それはTeXとMETAFONTの融合したところにある一つの「サンプル」でした。しかしながら、サンプルの出来映えがあまりにもすばらしかったため、多くの人はComputer Modern以外を使用しませんでした。一方でKnuthがそれ以後作った、世界的に名高い名著であるConcrete MathematicsではComputer Modernフォントは使用されませんでした。そこで使われたConcreteフォントはある意味でComputer Modernフォントと同系統のフォントでしたが、見栄えなどの点では全く異なっていました。その他にも多くのTeXを使った出版物が出ましたが、Computer Modernフォントをそのまま用いたものはそれほど多いわけではありません。

TeXで使用できるフォントとは「TFMファイルが準備できるフォント」であり、さらに印刷結果を得るためには「そのTFMファイルを解釈し、正しいフォントを用いて出力ができる出力装置」が必要です。その点で、Computer Modernフォントを用いる必然性は全くなく、たとえばAMSもEulerフォントなどComputer Modernフォントとは全く異なるフォントを作成しています。さらに、METAFONTで設計されたフォントは、確かにTeXとの相性は抜群なのですが、TFMファイルがあり、出力できる仕組みがあればよいということは、METAFONTにこだわる必要は全くないということです。

たとえば、PostScriptプリンタは業界標準であり、少なからぬ出版物がAdobeの標準フォントであるTimes, Courier, Helveticaで印刷されています。またその他にもAdobeの数多くのフォントが利用されたり、Monotype, BitStreamなど数多くのフォントメーカーの提供するフォントが利用されます。PostScriptは確かに業界標準ですが、パーソナルユースではあまり普及していません。さらに、PostScriptプリンタを購入しても、標準フォントセットの欧文では実際のところ、Computer Modernフォントを用いた方がよい出力になってしまうことも多くあります。しかしながら、高価なType 1フォントを購入することは、パーソナルユースでは負担の大きなものです。

昨今、Windows環境は爆発的に普及し、莫大な数のアプリケーションソフトが発表されています。それらのアプリケーションソフトには、各ソフトメーカーがフォントメーカーと契約するなどして、各種のフォントがTrueType形式として添付されています。そこで、パーソナルユースとしてはこのTrueTypeフォントを利用しない手はありません。

ところがここで大きな問題が発生します。TFMファイルは別途作成することで準備できたとしましょう。そして、仮に"Times New Roman.tfm"というTFMファイルを用いてdviファイルを作成したとします。dvioutでそのdviファイルを表示しようとし、dvioutがTEXPKを調べているときにTimes New Roman.tfmというファイルを発見したとします。そうして、[WinJFont]の[tfm(omit pt)/jfm]に[edefault]が定義されていれば、dvioutはWindowsに登録されているTimes New Romanを用いて出力を行なうことができます。しかしながら、ここには大きな困難があります。それは、Times New Romanというフォント名を用いることができないということです。なぜなら、Times New Romanという名前には、空白文字が含まれているからです。

そこで、たとえばTimes New Roman.tfmのかわりにBerryの命名規則を用いてwtmr7.tfmというファイルをTimes New Roman用に作成してdviファイルを作成します。TEXPKに従ってwtmr7.tfmというファイルが見つかったなら、この時点でdvioutはfttの欄の指定を調べます。この欄にはフォントマッピングファイルが指定されます。空欄であれば[WinJFont]の指定を直ちに調べます。しかしながらあるファイルが指定されていれば、そのファイルの中を読みとります。そして、そのファイルに次のような行が含まれているとしましょう。

wtmr7   "Times New Roman"

するとdvioutは現在検索中のフォント名をここでの指定に置き換えてしまいます。具体的には、今の場合にはTimes New Romanと置き換えてしまいます 。このTimes New Romanという名前で[WinJFont]の設定を読みとるわけです。もし、[tfm(omit pt)/jfm]にそのフォントが指定されていなければ、dvioutは[edefault]が定義されているかどうかを見ます。そして、定義されていれば、検索中のフォント名でWindowsに登録されているフォントを調べ、もし登録されていればそのフォントを用いて出力します。これはdvipsで用いられるpsfonts.mapファイルと基本的には同一の動作です。

しかしながら、ここで注意事項があります。これはうまく使えば和文フォントの拡張性を飛躍的に高めるでしょうが、強烈な裏技の温床になるかもしれません。上で説明したように、フォントマッピングファイルで変換を受けた後のフォント名を見たあと、dvioutは[edefault]が設定されていれば、その名前のWindowsフォントを検索します。すなわち、フォントマッピングファイルで対応が定義されているフォントが和文フォントであるか、欧文フォントであるかという事実は問いません。たとえば

jis     "min"

と指定しておけば、[WinJFont]の[tfm(omit pt)/jfm]欄には通常"min"が指定されているでしょうから、おそらくその指定である「MS 明朝」が利用されることでしょう。しかしながら、

wtmr7     "MS 明朝"

のように指定して欧文部分にも和文フォントであるMS明朝の「半角文字」を利用することすらできるわけです。うまく用いれば、半角カタカナを扱うこともできるかもしれません(半角カタカナはもうやめた方がよいとは思いますが...)。もちろん、"MS 明朝"でなく、"min"と指定しても同じ結果が得られます。

TrueTypeフォントを用いた印刷

前項では、dvioutがフォントを探すときに、TrueTypeフォントがどのように扱われるかということおよびTrueTypeフォントを用いるための方法を説明しました。しかしながら、これは、「印刷時にTrueTypeフォントを用いる」ということとは無関係です。これはしばしば誤解を受けることです。

dvioutが表示のときの字形データをTrueTypeフォントから得るということは、PKフォントがなくてもページのイメージを作成できることを意味し、ハードディスクの節約にもつながります。しかしながら、伝統的には、dvioutはプリンタに印刷を指示するとき、自分で作成したページイメージを(写真のように)プリンタに送り、プリンタにそれを印刷してもらうという手法をとってきました。もう少し直観的にいえば、dvioutがコンピュータ内部に仮想的に印刷用のフィルムを作成し、それをプリンタに出力してもらうと思ってもよいでしょう。この方法はグラフィックソフトが印刷するときに通常用いられる方法です。

しかしながら、一般のワープロソフトなどの印刷方式はこれとは異なります。ワープロソフトがプリンタに出力を命じるとき、一般には「該当フォントの該当文字を出力せよ」と指示を送るにすぎません。Windowsにインストールされているプリンタドライバはこの指示を読みとり、またいくつかの命令を受け取るまで待ち、自分自身に最適化した方法を選択することができます。しかしながら、命令の解釈と最適化にはプリンタドライバごとに少し差異があったり、あるいは印刷精度が保てなくなる可能性も否定できません。Version 3.07.3のdvioutは字形データの取得をTrueTypeフォントからできるようになりましたが、印刷の際にはやはり一旦出力ページイメージを完全に内部で作成し、それをプリンタに渡していました。しかしながら、Version 3.07.4以降では、TrueTypeフォントから得た字形データが存在すると、プリンタに送る段では、それらの字形を抜いてしまいます。そして、その位置に入るべきフォントの名前と文字とをプリンタに指定するようになりました。これはよりワープロソフトに近い出力方式だといえます。現在のプリンタドライバはこのような印刷に対して極めて特化した最適化処理を行ないます。特に普及型のプリンタでは、このような処理によってナンセンス(無意味な)ベンチマークが雑誌に紹介され、またその情報を元に購入者がプリンタを選択する傾向にあるため、これらの処理に対して特に速度面で厳しく特化がなされています。

dviout 3.07.4以降ではデフォルトの動作は上記のようになりました。これの変更は、dvioutのプロパティーシートのうち、[Graphic]の[color specials]で行ないます。ここでこの設定が行なわれるというのはやや違和感があるかもしれません。これを自然だと感じるためには、dvioutの内部動作についてほんの少しですが知っておく必要があります。

[color special]は色つきの文字を出す\special命令の扱いについて設定をする項目であるというのが本来の意味でしたが、現在ではこれは拡大解釈されます。すなわち、この設定項目は、dvioutが作成するページイメージに対して、あとから合成すべき文字の挿入方式を決定する項目です。色つきの文字を実際のページイメージに埋め込むと、dvioutが内部で作成しなければならないページイメージのための内部領域が膨大なものとなります。(これは現実に「膨大な」量であって数十MB以上必要です。)このクラスのメモリ量になると処理速度も著しく落ちてしまいます。カラー命令を実装するときに最も問題とされたのはこのメモリ量増大と速度低下をどのようにして回避するかという問題です。これを回避するために、色つきの文字は別のメモリ上にその文字だけについて一旦イメージを作成しておき、それをあとでページイメージに合成するという処理が行なわれます。色つきの文字だけではなく、カラー画像も同様の手法で合成されます。つまり、[color special]の設定項目とはすなわち、

  • ページイメージを作成するときに除去する要素
  • ページイメージを作成し終わってから合成する要素
を設定する項目です。

「印刷時にTrueTypeフォントを用いて出力せよ」とプリンタに指示することはすなわち、それらの文字以外をプリンタに送ったのち、TrueTypeフォントの文字をさらに上書きせよとプリンタに指示することであって、ここで指示するのが妥当ということです。(dvioutのプロパティーシートは、操作したことがある人であればよくわかっていると思いますが、誰でも簡単に設定を行なうことができるというよりはむしろ、dvioutの内部動作を調整するために提供されているものです。dvioutの操作にとって本質的な設定項目を、より使いやすい形で提供してくれる人は常に募集されています。)

以上の説明により、PDF Writerを用いてPDFファイルを作成する場合の問題点は完全に明白になったことと思います。すなわち、ワープロなどからPDF Writerを用いて出力した場合、文字部分は基本的にはすべてTrueTypeフォントを用いて出力するようにプリンタに指示されたものであり、画像部分は真に画像部分です。それに対して、dvioutでは、TrueTypeフォントが実際に用いられた部分だけがTrueTypeフォントで出力するように指示されており、そうでないPKフォントを用いて出力を行なう部分は画像です。BaKoMa, Impressの両TrueTypeフォントとも、当然ながら、すべての文字についてTrueTypeフォントを用意しているのではありません。一般には

が提供されているにすぎません。

従って、すべての欧文部分がこれらから構成されていないようなDVIファイルをPDF Writerで出力した場合、特にTrueTypeフォントを用いない部分に関して出力品質は著しく低下します。その一方で、DVIPSを用いてPSファイルを一旦生成した場合、Type1フォントが用意されていなかった場合にはPKフォントが埋め込まれるにも関わらず、PSフォントの中ではそれは依然として「文字」であって、画像ではありません。単にスケーラブルではない、ビットマップフォントであるだけです。従って、Acrobat Distillerを用いて変換しても出力品質の低下はほとんどありません(ただし、最低でも600dpiのPKフォントを埋め込んでください)。

以上の考察より、PDFファイルを生成する場合にはどんな場合であっても、DVIPSでPSファイルを一旦生成し、DistillerでPDFに変換することが理想的だといえます。しかしながら、Type1フォントを埋め込んだPSを変換する場合に比べると、TrueTypeフォントを埋め込んだ場合の方が(TrueTypeはデータ量が少ないからか)PDFファイルの大きさはやや小さくなります。すべてのフォントがTrueTypeで出力されることがわかっている場合であれば、PDF Writerで出力してもかまいません。

なお、dvioutで表示されている文字がPKフォントから得られたものであるか、もしくはTrueTypeフォントから得られたものであるかは、その文字の上にマウスカーソルをあわせ、[Ctrl]と[Shift]を共に押した状態で、マウスの左ボタンをクリックすることで調べることができます。そのように操作すると、そのフォントがTEXPKのどの項目に該当したかという情報や、文字のサイズなど詳細な情報が表示されます。もしファイル名として拡張子がtfmで与えられていれば、それはTrueTypeフォントで表示されているということです(前項の説明を参照)。もちろん、DVIファイル全体にわたるフォント情報は[Help]-[Font Info]で得ることができます。

ところで、LIPS IVやESC/Pageなどのページ言語を搭載したプリンタの場合、印刷に対する最適化はdvioutに内蔵されているdviprt機能が行ないます。これはWindowsのプリンタドライバを介さず、プリンタが持っているページ制御言語を直接操作し、しかも出力をdvioutが最大に最適化して出力します。日本語フォントはプリンタに内蔵されているフォントに置き換えて出力しますし、PKフォントは使用頻度の高いものから順にプリンタのメモリに一旦送り込んで、それを最初からプリンタに内蔵されているフォントのように扱って出力を行ないます。Windowsのプリンタドライバを用いれば、MS明朝をプリンタ内蔵和文フォントに置き換えたりするなどの調整ももちろん可能ですが、しかしながら、印刷品質でdviprt機能を抜くことはできませんし、速度的にも劣ります。従って、これらのプリンタであれば、dviprt機能を用いて出力を行なってください。

dviprt機能用の制御ファイルが用意されているその他のプリンタの場合には、一般にTrueTypeフォントを用いてWindowsドライバに出力させた方が高速です(TrueTypeフォントがほとんど用いられていないような文書、たとえばconcreteパッケージを用いて作成した欧文のみの文書などは、TrueTypeフォントを利用できませんので、dviprt機能を用いた方が速いでしょう)。

参考リンク

TrueTypeフォントのインストール・アンインストール

まず、[コントロールパネル]を開きます。([マイコンピュータ]-[コントロールパネル]または、[スタート]-[設定]-[コントロールパネル]。)


その中から、[フォント]アイコンを探してダブルクリックし、フォントフォルダを開きます。


インストールする場合

[ファイル]メニューから、[新しいフォントのインストール]を選びます。すると、[フォントの追加]ダイアログボックスが開きます。

[ドライブ]で書籍付録のCD-ROMドライブを選択し、[フォルダ]で[cm-truetype]を選びます。しばらくすると、フォントが[フォントの一覧]の欄に表示されますので、[すべて選択]ボタンを押し、すべてを選択状態にします(上図)。
[OK]ボタンを押すと、インストールされます。

アンインストールする場合

フォントフォルダで、アンインストールしたいフォントを選択します。このとき、[Ctrl]キーを押しながらマウスをクリックすると複数を同時に選択することができます。または、[Ctrl]キーを押しながらマウスで範囲選択をすると、多数のフォントを手軽に選択することができます。アンインストールしたいフォントを選択できたら、[ファイル]メニューから[削除]を選びます。

インストールされるフォント

BaKoMa CM TrueTypeフォント(140個)

cmb10 cmbsy10 cmbsy6 cmbsy7 cmbsy8 cmbsy9 cmbx10
cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
cmbxti10 cmcsc10 cmcsc8 cmcsc9 cmdunh10 cmex10 cmex7
cmex8 cmex9 cmff10 cmfi10 cmfib8 cminch cmitt10
cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9
cmmib10 cmmib6 cmmib7 cmmib8 cmmib9 cmr10 cmr12
cmr17 cmr5 cmr6 cmr7 cmr8 cmr9 cmsl10
cmsl12 cmsl8 cmsl9 cmsltt10 cmss10 cmss12 cmss17
cmss8 cmss9 cmssbx10 cmssdc10 cmssi10 cmssi12 cmssi17
cmssi8 cmssi9 cmssq8 cmssqi8 cmsy10 cmsy5 cmsy6
cmsy7 cmsy8 cmsy9 cmtcsc10 cmtex10 cmtex8 cmtex9
cmti10 cmti12 cmti7 cmti8 cmti9 cmtt10 cmtt12
cmtt8 cmtt9 cmu10 cmvtt10 euex10 euex7 euex8
euex9 eufb10 eufb5 eufb6 eufb7 eufb8 eufb9
eufm10 eufm5 eufm6 eufm7 eufm8 eufm9 eurb10
eurb5 eurb6 eurb7 eurb8 eurb9 eurm10 eurm5
eurm6 eurm7 eurm8 eurm9 eusb10 eusb5 eusb6
eusb7 eusb8 eusb9 eusm10 eusm5 eusm6 eusm7
eusm8 eusm9 msam10 msam5 msam6 msam7 msam8
msam9 msbm10 msbm5 msbm6 msbm7 msbm8 msbm9

Impress CM TrueTypeフォント(154個)

インプレスのCM TrueTypeフォントをアンインストールするときの参考資料として、インプレスが準備したTrueTypeフォントをあげておきます。フォントフォルダでは、小文字で表示されていると思います。BaKoMaフォントをインストールする前に、以下のフォントを削除してください。なお、標準フォントとは「TeX for Windows」についていたもの、AMSフォントとは別売りされていたものです。

標準フォント(65個)

ASCGRP CMBSY10 CMBX10 CMBX12 CMBX5 CMBX6
CMBX7 CMBX8 CMBX9 CMCSC10 CMEX10 CMMI10
CMMI12 CMMI5 CMMI6 CMMI7 CMMI8 CMMI9
CMMIB10 CMR10 CMR12 CMR17 CMR5 CMR6
CMR7 CMR8 CMR9 CMSL10 CMSL12 CMSL8
CMSL9 CMSS10 CMSS12 CMSS17 CMSS8 CMSS9
CMSY10 CMSY5 CMSY6 CMSY7 CMSY8 CMSY9
CMTI10 CMTI12 CMTI7 CMTI8 CMTI9 CMTT10
CMTT12 CMTT8 CMTT9 LASY10 LASY5 LASY6
LASY7 LASY8 LASY9 LASYB10 LCIRCLE1 LCIRCLEW
LINE10 LINEW10 LOGO10 LOGO8 LOGO9

AMSフォント(89個)---別売のAMSフォントを購入した場合のみ

CMBSY5 CMBSY6 CMBSY7 CMBSY8 CMBSY9 CMCSC8 CMCSC9
CMEX7 CMEX8 CMEX9 CMMIB5 CMMIB6 CMMIB7 CMMIB8
CMMIB9 EUEX10 EUEX7 EUEX8 EUEX9 EUFB10 EUFB5
EUFB6 EUFB7 EUFB8 EUFB9 EUFM10 EUFM5 EUFM6
EUFM7 EUFM8 EUFM9 EURB10 EURB5 EURB6 EURB7
EURB8 EURB9 EURM10 EURM5 EURM6 EURM7 EURM8
EURM9 EUSB10 EUSB5 EUSB6 EUSB7 EUSB8 EUSB9
EUSM10 EUSM5 EUSM6 EUSM7 EUSM8 EUSM9 MSAM10
MSAM5 MSAM6 MSAM7 MSAM8 MSAM9 MSBM10 MSBM5
MSBM6 MSBM7 MSBM8 MSBM9 WNCYB10 WNCYB5 WNCYB6
WNCYB7 WNCYB8 WNCYB9 WNCYI10 WNCYI5 WNCYI6 WNCYI7
WNCYI8 WNCYI9 WNCYR10 WNCYR5 WNCYR6 WNCYR7 WNCYR8
WNCYR9 WNCYSC10 WNCYSS10 WNCYSS8 WNCYSS9