\documentclass[twoside]{jarticle}
\addtolength{\textwidth}{0.9in}
\setlength{\oddsidemargin}{.4in}
\setlength{\evensidemargin}{.4in}
\pagestyle{headings}
\begin{document}
\section{JFM file format}
%JFMファイルフォーマット
JFMファイルのフォーマットは、
基本的にはTFMファイルのフォーマットに準拠しており、
TFMを拡張した形になっている。
ここでは、主にその拡張部分について説明を行い、
その他の部分に関しては、
\TeX\ the program等のTFMの説明を参照してもらいたい。
\subsection{JFMファイルの構成}
JFMファイル全体の構成は、
Table\ref{構成}(\pageref{構成}ページ)に示すとおりである。 \\
ここでTFMと異なるのは次の点である。
\begin{enumerate}
\item {\it char\_type}のテーブルが付け加えられたこと。
\item {\it ligature}の換わりに{\it glue}のテーブルが設けられたこと。
\item 2に関連して、{\it lig\_kern}から{\it glue\_kern}テーブルへ変更されたこと。
\item これらに伴い、先頭のファイル内の各部分を規定する
	パラメータ表が変更されている。
	また、オリジナルのTFMとの区別のためにidを付加している。
\end{enumerate}

\subsection{char\_type}
今回の\TeX の日本語化においては、同一の文字幅、
高さ前後に挿入されるグルー等、その文字が持つ属性全てが
同じものを、1つの{\it `char\_type'}として英字フォントの1キャラクタと
同様にして扱うようにしている。
そこで、漢字の2バイトコードとこの{\it char\_type}との対応付けを
このテーブルを使って行う。

このテーブルの各エントリーは1ワードで構成され、
上位半ワードに漢字コード、下位半ワードに{\it char\_type}を持ち、
テーブル内にはコードの値の順番に収められていなければならない。
またこのテーブルの先頭には、デフォルトのインデックスとして
漢字コード及び{\it char\_type}の項が0のものが、
必ず1つ存在しなければならず、このテーブルに登録されていない文字は、
$char\_type = 0$として扱う。
つまり、このデフォルト以外の文字幅、カーン等の属性を持つキャラクタ
のコードとタイプが2番目以降のエントリーとして存在しなければならない。

\subsection{char\_info}
{\it char\_type}をインデックスとしてこのテーブルを
参照することにより、各{\it char\_type}の属性を検索する。
各テーブルへのインデックス等の情報を次の順番でパッキング
して1ワードに収めてある。
\begin{description}
\item{width\_index(8bits)} width\_table へのインデックス
\item{height\_index(4bits)} height\_table へのインデックス
\item{depth\_index(4bits)} depth\_table へのインデックス
\item{italic\_index(6bits)} italic\_table へのインデックス
\item{tag(2bits)}
	\begin{description}
	\item{tag=0} {\it remainder}の項は無効であり使用しないことを示す。
	\item{tag=1} {\it glue\_kern}プログラムが{\it glue\_kern[remender]}
		からに収めれれていることを示す。
	\item{tag=2、3} 使用しない。
	\end{description}
\item{remainder(8bits)}
\end{description}
%
\subsection{glue\_kern}
特定のキャラクタタイプの組み合せ時に挿入すべきglue又はkernを
簡単なプログラム言語によって指定する。
各命令は、以下の4バイトで構成される。
\begin{description}
\item{第1バイト} 128以上の時、このワードでプログラム終了。
\item{第2バイト}
	\begin{itemize}
	\item 次の文字のキャラクタタイプが、
		このバイトで示すキャラクタタイプと同じ場合、
		第3バイトの処理を実行し、プログラム終了。
	\item そうでなければ次のステップへ。
	\end{itemize}
\item{第3バイト}
	この値によってグルーを扱うかカーンを扱うかを規定する。
	\begin{itemize}
	\item 127以下の場合{\it glue[remainder$\times$3]}のグルーを挿入。
	\item 128以上の場合{\it kern[remainder]}のカーンを挿入。
	\end{itemize}
\item{第4バイト} remainder
\end{description}
\subsection{glueテーブル}
3ワードで1つのグルーを構成する。
各値は、$design size\times2^{-20}$を単位として表す。
\begin{description}
\item{第1ワード} width
\item{第2ワード} stretch
\item{第3ワード} shrink
\end{description}
\subsection{paramテーブル}
\begin{description}
\item{param[1]} italic slant。
\item{param[2][3][4]} 漢字フォント間に挿入するグルーのデフォルト値。
\item{param[5][6][7]} 漢字--英字フォント間に挿入するグルーのデフォルト値。
\end{description}
\newpage
\begin{table}[h]
\begin{minipage}[b]{2in}
\begin{tabular}{|c|c|} \hline
\hbox to.8in{\hfil$id$\hfil} & \hbox to.8in{\hfil$nt$\hfil} \\ \hline
$lf$ & $lh$ \\ \hline
$bc$ & $ec$ \\ \hline
$nw$ & $nh$ \\ \hline
$nd$ & $ni$ \\ \hline
$nl$ & $nk$ \\ \hline
$ng$ & $np$ \\ \hline
\multicolumn{2}{|c|}{} \\
\multicolumn{2}{|c|}{header} \\ 
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{} \\
\multicolumn{2}{|c|}{char\_type} \\ 
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{char\_info} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{width} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{height} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{depth} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{italic} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{glue\_kern} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{kern} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{glue} \\
\multicolumn{2}{|c|}{}\\ \hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{patam} \\
\multicolumn{2}{|c|}{}\\ \hline
\end{tabular}
\end{minipage}
\begin{minipage}[b]{3.3in}
\noindent
\begin{tabular}{l}
$id=$ JFM\_ID number. ($=11$) \\
$nt=$ number of words in the character type table. \\
$lf=$ length of the entire file, in words. \\
$lh=$ length of the header data, in words. \\
$bc=$ smallest character type in the font. \\
$ec=$ largest character type in the font. \\
$nw=$ number of words in the width table. \\
$nh=$ number of words in the height table. \\
$nd=$ number of words in the depth table. \\
$ni=$ number of words in the italic correction table. \\
$nl=$ number of words in the glue/kern table. \\
$nk=$ number of words in the kern table. \\
$ng=$ number of words in the glue table. \\
$np=$ number of font parameter words. \\
\end{tabular}
\end{minipage}
\caption{JFMファイルの構成\label{構成}}
\end{table}
\end{document}
