summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/ptex/base/jfm.tex
blob: 9e97f594e38938a086f9d59b7936706d330720b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
\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}