(前回の続き)
SFD ファイルで「普通の」エンコーディングを定義する
これまで、サブフォント定義ファイル(SFD ファイル)の「本来の」使い方――すなわち、大規模文字集合を複数の TFM ファイルで分割して表現する――について説明してきた。ここからは、SFD ファイルを「サブフォントでない」エンコーディングに適用することを考える。
といっても、何か複雑なトリックが要るわけではない。「大規模な元エンコーディングを分割して複数の TFM にする」のがサブフォントであるが、ここで「分割数を 1 つ」にする(「元エンコーディング」そのものが TFM のものと一致)ことで、普通の(8 ビットの)エンコーディングをサブフォントとみなすことができる。例えば、Samp0TeXStd.sfd という SFD ファイルの内容を
t1 (T1 に対応する Unicode 符号位置の列)
という 1 行だけにしておいて、次のマップ行を指定する。*1
mplus1ps-r-@Samp0TeXStd@ unicode mplus-1p-regular.ttf
SFD ファイルでの指定の原理を考えると、こうすると「mplus1ps-r-t1」が T1 エンコーディングの TFM となることが解るであろう。SFD を用いて通常のエンコーディングを指定する原理はこのようなものである。
さらにもう少し考えれば、先の SFD ファイルで「複数のエンコーディング」が一度に指定できるということが解る。つまり、Samp0TeXStd.sfd の内容を以下のようにする。
ot1 (OT1 に対応する Unicode 符号位置の列) t1 (T1 に対応する Unicode 符号位置の列) ts1 (TS1 に対応する Unicode 符号位置の列) ly1 (LY1 に対応する Unicode 符号位置の列)
すると、前掲のマップ行 1 行だけで、mplus1ps-r-ot1、mplus1ps-r-t1、mplus1ps-r-ts1、mplus1ps-r-ly1 の 4 つの TFM のマップを指定したことになる。そして、TFM 生成は次のように ttf2tfm を一度実行すれば済んでしまう。
ttf2tfm mplus-1p-regular.ttf mplus1ps-r-@Samp0TeXStd@
もちろん、これを実行するためには、各エンコーディングの文字の Unicode 値を調べて「正しい Samp0TeXStd.sfd」ファイルを作らなければならない。しかし、前に述べたように、SFD ファイルはフォントに依存しないので、一回作ってしまえば、それを全てのフォントに適用できる。
という訳で私が作った Samp0TeXStd.sfd を公開することにする。
- 「簡易包装コーナー」 → mplus1ps.zip アーカイブ
この SFD ファイルでは OT1/T1/TS1/LY1 の他に、IL2/L7x/OT2/OT4/QX/T2A/T2B/T2C/T5 のエンコーディングの定義も入れている。また、ttf2tfm で実際に作成した TFM ファイルとマップファイルを同梱した。ファイルの配置や dvipdfmx の設定の方法は .enc ファイルを用いた時と全く同じなので繰り返さないことにする。適切に配置・設定がなされていれば、以下のようなテスト文書(TeX レベルの指定を含めた LaTeX 文書)が正常に PDF 文書に変換できるはずである。
\documentclass[a4paper]{article} \font\testfont=mplus1ps-r-t1 \begin{document} \testfont No one wants to die. Even people who wanna go to heaven don't wanna die to get there. \end{document}
*1:これまでの .enc ファイルによる TFM と区別するため、ファミリ名に s を付加して「mplus1ps」とした。