# フォントの自動生成

基本的なフォント作成手順/環境は、あらかじめフォント作成のテンプレートファイルに設定し、それを -gen: で指定する必要があります。dvioutは、テンプレートファイルの設定に従って必要なフォントの名前やサイズなどのデータを挿入したバッチファイルを作成し、実行します。
当然、メタフォントが既にインストールされていて、正常に動作している環境が必要です(cf. Q_F6)。
また、METAFONTソースが見つからない、あるいは設定パラメータにミスがあった場合など、自動生成できなかったフォントについては、必要なルーチンをまとめて別のバッチファイルに出力して手作業で必要なフォントの生成ができるようにしています。
templateというテンプレートファイルのサンプルを付けてありますので、それを参照してください。書式は以下の通りです。
ただし、%2ndに属する１行のみのテンプレートファイルに対応する場合は、-gen: にテンプレートファイル名でなく、先頭に `を付けて直接内容を書くことができます。
1文字目が # で始まる行はコメント文であり、バッチファイルには出力されません。ただし、1つだけ例外があります。2文字目が ! の場合は、そのまま出力されます。
# この文は出力されない
#! この行は出力される。
テンプレートファイルは、4つの領域からなります。各領域は、各々1文字目が %で始まる、3種類の行
%1st
%2nd
%3rd
で区切られます。
%1st 行より前は、特殊なパラメータを設定する領域です。この領域で設定できるパラメータは4つあります。
auto=no : 子プロセスで自動的にフォント生成を行なうのを禁止し、gen_font で指定した名前のバッチファイルのみ生成します。
extra_size=300 : dvioutの実行で足りないフォントが見つかった時に、別の解像度のフォントも作りたい場合に、作成したいdpi値を設定します。この値は、^e の計算に使用されます。
gen_tmp= : 子プロセスに用いるバッチファイルの名前をフルパス名で指定します。環境変数 TMP あるいは TEMP が示すディレクトリ（それが存在しなければ、カレントディレクトリ）の gen_tmp.bat がデフォルトです。
gen_font= : 子プロセスでは生成できなかったフォントを作成するためのバッチファイル名をフルパス名で設定します。デフォルトは、gen_font.bat です。
mode_name= : dpi値とMETAFONTのmode名の対応関係を設定します。書式は、
mode_name=<dpi値>:<mode名>
です。例えば、mode_name=300:CanonCX は、300dpiの場合は CanonCX というmode名を対応させることを表わします。
このmode_name の行は、テンプレートファイルの中に何回でも書けますが、extra_size= の行よりは後に書いてください。
2番目の %1st と %2nd の間には、echo offのようなバッチファイルの前処理コマンドを入れておきます。また、4番目の %3rd 以降には、エラー処理などの後処理コマンドを入れておきます。
3番目の、%2nd と %3rd の間の領域が、実際にフォントを作成するためのルーチンです。この領域では、^ + 英小文字 (例 ^s)を使うことで、必要な情報を挿入することができます。
^s は、見つからなかったフォント名に置換されます。
^m は、そのフォントの倍率に置換されます。
^d は、そのフォントのサイズ(dpi値x倍率)に置換されます。
^D は、dpi値 に置換されます。
^M は、^d/^D を分数の形で表します。たとえば、^d が1500, ^D が600 のとき、^M は 2+300/600 となります。
^n は、dpi値に対応したmode名に置換されます。
^N は、extra_size= で設定されたdpi値に対応するmode名に置換されます。
^e は、1番目の領域で設定された dpi値x倍率に置換されます。
例えば、dvioutの実行で、足りないフォントが見つかった時に、ついでに別の解像度用のフォントも作ってしまいたい場合に、1番目の領域で extra_size=360 のように書いて作成したいdpi値を設定しておくわけです。
^ を含む文字列をバッチファイルに出力したい場合は、^^ と2つ続けてください。例えば、^^s とすれば、置換は行なわれず、^s という文字列が出力されます。
フォント作成のテンプレートの簡単な例を挙げておきます。