JFMファイルの構成要素

JFMは、TFMと似たような構造になっています。TFMとの違いはつぎのとおりです。

JFMファイルは、ワード(4バイト)を単位としてデータが記述されています。 また、1ワード内の各バイトは、上位バイトから下位バイトの順に並べられています。

最初の7ワードは、半ワードずつに区切られ、 JFMファイルを構成する14個の要素のサイズが収められています。

これらの値は、すべて「2の15乗」よりも小さい非負の値です。 また、つぎの条件を満たしていなければなりません。

    bc = 0
lf = 7 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ng + np


figure of jfm id …… JFM_ID番号(横組用では11、縦組用では9)
nt …… char_typeテーブルのワード数
lf …… ファイルのワード数
lh …… headerのワード数
bc …… フォント内に含まれる一番小さなコード(JFMでは必ずゼロ)
ec …… フォント内に含まれる一番大きなコード
nw …… widthテーブルのワード数
nh …… heightテーブルのワード数
nd …… depthテーブルのワード数
ni …… italicテーブルのワード数
nl …… glue/kernテーブルのワード数
nk …… kernテーブルのワード数
ng …… glueテーブルのワード数
np …… paramテーブルのワード数

header
char_type
char_info
width
height
depth
italic
glue/kern
kern
glue
param


■header

header部には、最低限「チェックサム(check sum)」と 「デザインサイズ(design size)」の2ワードが収められている必要があります。 TeXはここまでの情報を使いますが、Xeroxの印刷ソフトウェアなどで用いるTFMには、 最低限18ワードが必要です。

■char_type

漢字の文字コードとchar_typeとの対応付けを行ないます。

このテーブルの各エントリは1ワードで構成され、上位半ワードに漢字文字コード、 下位半ワードにchar_typeを持っています。 また、このテーブルの先頭には、デフォルトのインデックスとして、 漢字コードおよびchar_typeがゼロのものが必ず存在します。

テーブルの2番目以降には、デフォルト以外の属性を持つ文字コードと char_typeが、漢字コードの値の順番に収められています。 このテーブルに登録されていない文字はchar_type=0として扱われます。 テーブル内の各ワードは、つぎのような構造になっています。


■char_info

bcからecまでのchar_typeに対する 各パラメータのインデックスが1ワードにパックされ記述されています。 JFMでは、bcは必ずゼロですから、1つのJFMに含まれる char_infoは全部でec+1ワードになります。

それぞれのchar_infoは、つぎの6つのフィールドを持っています。
  • width_index (8ビット)
  • height_index (4ビット)
  • depth_index (4ビット)
  • italic_index (6ビット)
  • tag (2ビット)
  • remainder (8ビット)
charinfo

実際の文字幅はwidth[width_index](デザインサイズ単位)で 示されています。TFMファイルは、256種類の文字幅を持つことができますが、 高さと深さは16種類、イタリック補正値は64種類しか持つことはできません。

なお、width[0]=height[0]=depth[0]=italic[0]=0という 関係は、いつでも保たれているので、あるインデックスがゼロの場合は、その他の値も ゼロであることを意味します。 また、width_indexは、その文字がそのフォントに含まれている限りは、 決してゼロにはなりません。したがって、 ある文字が有効であるならば、その文字はbcecの間にあり、 非ゼロのwidth_indexを持っています。

tagフィールドは、remainderフィールドをどのような 目的で使うかを示しています。


■width, height, depth, italic

それぞれの値は、デザインサイズの「2の-20乗」倍が1単位です。 これらの値は、char_infoからのインデックスにより参照されます。


■glue/kern

gluekern

glue_kernには、特定のchar_typeの組合せのときに、 挿入するglueまたはkernが簡単なプログラム構造として含まれています。


■kern

glue/kernプログラムで用いるカーニング量です。 デザインサイズの「2の-20乗」が1単位です。


■glue

glue/kernプログラムで用いるグルー量です。 デザインサイズの「2の-20乗」を1単位として、 自然長、伸び長、縮み長の3ワードで記述されています。したがって、 ngは必ず3の倍数になります。


■param

JFMファイルの最後はparam部です。

param[1]は、純粋に「2の-20乗」を単位としており、 デザインサイズの影響を受けません。それ以外のパラメータは、 デザインサイズの「2の-20乗」を単位として記述されています。


[pTeX home page] [TFM,JFMの目次]