(前回の続き)
「思想」の話だけで終わるのもアレなので、ここでは実際に「dviout 流」のフォント設定を実践してみる。目的は
timesnr-r "Times New Roman"
のような「素直な dviout の欧文マップ設定」を基にして、LaTeX で新たな欧文フォントを「普通に」使えるようにすることである。なお、dviout の話なので、Windows(特に W32TeX)を前提とする。そういう訳で、例として用いる欧文フォントは、Windows Vista で新しく導入された欧文フォントの一つである「Constantia」とする。このファミリについては Berry 命名規則のファミリ名「jk4」が与えられている。*1ここでは Regular シェープのみを扱う。このフォントのファイルは C:\windows\fonts\constan.ttf にある。
なお、以下の作業で用いるデータ(.enc ファイル等)をまとめて奥底に置いておく。
- 簡易包装コーナー → aencdviout.zip
TTNFSS の方法を踏襲する
まずは、TTNFSS が用いている方法をそのまま(「名前の濫用」も含めて)実行することにする。すなわち、「dviout 流の 8r」である Windows-1252 を原エンコーディングとし、「dviout 流」の T1 エンコーディングを VF で実現するという方法である。なお、NFSS のファミリ名として wconstan1 を用いる。
これを新たなフォントに適用する場合、両者のエンコーディングに対する .enc ファイルが必要であるが、dviout の配布物の中には含まれていないようである。よって、前掲の aencdviout.zip の中に win8r.enc と ecwin.enc を再現したものを含めた。この win8r.enc は基本的には Windows-1252 であるが、TTNFSS の TFM の実態と合わせて、「〈Ž〉(0x8E)〈ž〉(0x9E) を省く*2」「TeX に不要な文字(space (0x20) や soft-hyphen (0xAD) 等)を省く」という変更を加えている。ecwin.enc は前回に示した winenc.sty から導出したものである。
Berry 命名規則に従うと、「dviout 流 8r」のフォントの TFM 名は jk4r8r、「dviout 流 T1」のフォントは jk4r8t となる。従って、TFM/VF 生成のコマンドは以下のようになる。*3
ttf2tfm constan.ttf -p win8r.enc -t ecwin.enc -v jk4r8t jk4r8r vptovf jk4r8t
dviout のマップ行で指定するのは、原エンコーディングの方、つまり jk4r8r である。
jk4r8r "Constantia"
フォント定義ファイル(.fd ファイル)は通常の T1 エンコーディングの場合と全く同様に記述する。
\DeclareFontFamily{T1}{wconstan1}{} \DeclareFontShape{T1}{wconstan1}{m}{n}{<->jk4r8t}{}
これらのファイルを適切に配置すれば設定は完了である。以下にテスト用の LaTeX 文書を示す。「dviout 流の T1」を使うので winenc パッケージの読込が必要になることに注意。
\documentclass[a4paper]{article} \usepackage{textcomp} \usepackage{winenc} % T1 の定義を修正する! \begin{document} % T1/wconstan1(実際は「TTNFSS的T1」)に切替 \usefont{T1}{wconstan1}{m}{n} Ich m\"ochte s\"u{\ss}eren K\"ase. % なぜか ttf2tfm が /Euro を拾ってくれない... \$1 = \texteuro 4.2 = \textyen 53 \par ``Macros are pass\'e --- it's so mid-20th-century!'' \par % CP1252 の範囲を超えるので一部化ける R\'ownie dobrze mog{\l}oby to by\'c po chi\'nsku. \par % 本物の T1 エンコーディングの使用には影響しない. \usefont{T1}{lmr}{m}{n} % T1 の Latin Modern Roman R\'ownie dobrze mog{\l}oby to by\'c po chi\'nsku. \par % 正常出力 % しかし textcomp とは衝突する \$1 = \texteuro 4.2 = \textyen 53 \par \end{document}
この出力結果を見て解るように、winenc を読んだ後でも「本物の T1」を用いた出力は正常に行える。しかし、textcomp パッケージ(TS1 エンコーディング)とは衝突してしまう。
「dviout 流」を再解釈してみる
先に見た衝突は、勿論、本来 T1 でないものを T1 として扱ったところから来ている。このような細かい齟齬を別にしても、現代的な TeX システムでは「普通の」8r や T1 が厳然と存在することは否めず、結局のところ、独自の解釈は「同じ名前をもつ別のものの存在」を生み出してしまい望ましいものではない。従って、この話の締めくくりとして、「dviout 流」を継承しつつ(だから先の「単純なマップ行」が通用する)、「普通の」ものとの矛盾が生じない方法を模索して見る。
まず、「dviout の 8r」についてだが、これは表(LaTeX)から見えないので 8r と呼ばれる必然性がない。だから素直に「Windows-1252」を表す名前を用いればよい。fontname の資料を見ると、「8w」が Windows-1252(WinANSI)を指すとみて間違いない。従って、TFM のエンコーディング識別子も 8w とすればよいであろう。なお、折角新しい方式を考えているのだから、win8r.enc で削られた 〈Ž〉〈ž〉 も含める(現在の Windows-1252 に合わせる)こととし、この変更を行ったエンコーディングを bx-8w.enc に記した。
より大きな問題が「dviout の T1」である。「T1」のままでは不適当なので、このエンコーディングを使うならば、TFM と NFSS のエンコーディング名を別に与えることになるだろう。ただ、そうしてもそれが dviout 独自の産物であることに難がある。ところが、実は「dviout の T1」と同様の考えをもち、かつ TeX コミュニティにもっと受け入れられているエンコーディングが存在する――それは LY1 エンコーディングである。これも Windows-1252 の文字セットをもつフォントを可能な限り「効率的に」用いることを目的として設計されている。従って、私は、独自の winenc パッケージの代わりに LY1 エンコーディングを用いることが、「dviout 流」のより筋のよい実現方法だと考える。そこで、LY1 エンコーディングの .enc ファイル bx-ly1.enc を用意した。*4
この考えに従った方法は、「Windows-1252 を原エンコーディングとした『8w』*5の名前をもつ TFM を作り、LY1 エンコーディングをそれを参照する VF で実現する」ということになる。先の場合と類似の手順になるので、簡単に手順のみを示す。NFSS ファミリ名を wconstan2 とし、TFM 名に ZR 命名規則を用いるものとする。*6
ttf2tfm constan.ttf -p bx-8w.enc -t bx-ly1.enc -v wconstan2-r-ly1 wconstan2-r-8w vptovf wconstan2-r-ly1
wconstan2-r-8w "Constantia"
\DeclareFontFamily{LY1}{wconstan2}{} \DeclareFontShape{LY1}{wconstan2}{m}{n}{<->wconstan2-r-ly1}{}
\documentclass[a4paper]{article} \usepackage[LY1,OT1]{fontenc} \usepackage{textcomp} \begin{document} % LY1/wconstan2 に切替 \usefont{LY1}{wconstan2}{m}{n} Ich m\"ochte s\"u{\ss}eren K\"ase. % やっぱり ttf2tfm が /Euro を拾ってくれない... \$1 = \texteuro 4.2 = \textyen 53 \par % TeX-ligature のテスト ``Macros are pass\'e --- it's so mid-20th-century!'' \par % \l は CP1252 にないので落ちる. \'c や \'n は合成になる. R\'ownie dobrze mog{\l}oby to by\'c po chi\'nsku. \par % もちろんこれも大丈夫 \usefont{T1}{lmr}{m}{n} % T1 の Latin Modern Roman R\'ownie dobrze mog{\l}oby to by\'c po chi\'nsku. \par % 正常出力 % 今度は textcomp も大丈夫 \$1 = \texteuro 4.2 = \textyen 53 \par % 正常出力 \end{document}
*2:恐らく、TTNFSS が作られた当時の Windows-1252 にはこれらの文字が無かったのだと思われる。
*3:jk4r8r.tfm、jk4r8t.{tfm,vf,vpl} が生成される。VPL ファイルは TFM/VF への変換が終われば消して構わない。
*4:ここでは述べないが、fontname パッケージの texnansi.enc や texnansx.enc はそれぞれ欠点があるので、この bx-ly1.enc を用いたほうがよい。
*5:「8w」は Berry 規則の場合だが、それ以外の場合も、とにかく「TeXBase1」とは異なる「Windows-1252」自体を現す名前であること。
*6:「8r」や「8w」は LaTeX で直接用いられないので NFSS 名がない。そこで、ZR 規則のエンコーディング識別子はそのまま「8r」「8w」とする。