(前回の続き)
文字範囲指定の詳細
サブフォント定義ファイル(SFD ファイル)における各サブフォントごとの定義の行
<識別子> <符号位置範囲>
の <符号位置範囲>
は次のように記述する。
- 通常は TFM の符号位置 0 から 255 に対応する実フォントの Unicode 符号位置(整数値、
0x
を前置すると 16 進表記になる)の列を空白区切りで書く。1 行で書くことになるが、行末に「\
」を置くことで継続行を用いることができる(つまり直前に\
がある改行は無視される)。 <数値1>_<数値2>
の形式は範囲表記で、<数値1>
から<数値2>
までの整数値を順に並べたのと同じ。- もしある TFM の符号位置が未定義にすべきときは、
<数値>:
の形式を書く。この場合、以降に書かれる実フォントの符号位置の列は、その数値から始まる TFM の符号位置に対応するようになる。(例えば、47: 0x21 0x966_0x96F
と書くと、47 → 0x21、48 → 0x966、49 → 0x967、…… と対応付けられる。)
例えば、これまでに用いた「Unicode サブフォント」の先頭サブフォント(識別子 00
)の場合、0〜255 にそのまま U+0000〜U+00FF(要するに 0〜255)を対応させるので、これに対応する SFD ファイルの行の記述は単純に以下のように書ける。
00 0x0000_0x00FF
次の識別子 01
は 0〜255 に U+0100〜U+01FF だからこれも同様に書けて、全部で 256 行の SFD となった訳である。
01 0x0100_0x01FF 02 0x0200_0x02FF ……(以下同様に ff まで続く)……
この仕組を用いると、Unicode 以外の大規模な符号化文字集合に対しても、それを表すサブフォントを作ることができる。*1例として、JIS 基本漢字(JIS X 0208)を(区点位置をそのまま用いて)表す SFD ファイルを挙げると次のようになる。*2
01 1: 0x3000_0x3002 0xFF0C 0xFF0E 0x30EB …(中略)… 0x25C7 02 1: 0x25C6 0x25A1 0x25A0 0x25B3 0x25B2 …(中略)… 0x25EF 03 16: 0xFF10_0xFF19 33: 0xFF21_0xFF3A 65: 0xFF41_0xFF5A 04 1: 0x3041_0x3093 05 1: 0x30A1_0x30F6
このサブフォント定義に従う TFM 群 sample-r-x@SamplJIS@ があったとすると、例えばこれを用いて文字〈の〉(4 区 46 点)を出力するには、「sample-r-x04 を指定して \char46
を実行すればよい」ことになる。*3
*1:ただし、実フォントの文字は必ず Unicode で指定するので、当該の文字集合中の全ての文字に対応する Unicode 文字がなければならない。
*2:これは単なる例であり、このような形式のサブフォントが何らかのパッケージで使われている訳ではない。
*3:全く余談であるが、この JIS 基本漢字の SFD の定義を見て、NTT jTeX の和文フォントの構造を思い出した人がいるかも知れない。jTeX の和文フォントを SFD で表現することは可能で、実際、拙作の JXempt パッケージ(jLaTeX で jsclasses 類似の文書クラスを提供する)では、そのようなサブフォントを用いている。