METAFONTは、
ドナルド・クヌースによって開発されたフォント作成用の
コンピュータプログラムです。彼は、
組版システム
TeXと共にこのシステムを開発しました。
概要
METAFONTは、文字の形状を記述するプログラムソースファイルを読み込み、
組版に必要な情報(文字サイズ、
合字など)を含むフォントメトリックファイルと、文字の形状データ(グリフデータ)を含むビットマップフォントファイルを生成します。このシステムの特徴は、フォントファイルを生成する際にパラメータを調整することで、同一のソースファイルから多様なフォントを作成できる点にあります。この柔軟性が、名称の由来となっています。生成される文字の輪郭は、ベジェ曲線を使用して滑らかに表現されます。
METAFONTは
TeXとともに、
ドナルド・クヌースによって開発されました。
組版処理において、フォントのデザインに応じた
合字や
カーニングなどの情報が不可欠です。
TeXは数式
組版にも重点を置いており、そのためにはフォント自体が豊富な
組版情報を持つことが望まれます。METAFONTは、このような
組版情報を持つフォントを作成するために開発されました。
TeXと同様に、METAFONTは自由ソフトウェアとして提供されており、様々なプラットフォームに移植されています。
METAFONTで生成されたフォントを他の形式(Type1など)に変換するプログラムも存在します。さらに、METAFONTのプログラムと似た構文を持つMetaPostも開発されており、
PostScript形式の画像ファイルを生成できます。
METAFONTは
プログラミング言語として、以下の特徴があります。
フォントメトリックファイルとフォントグリフファイルを生成する機能
フォント作成に特化した命令セット
数式的な方程式を直接扱い、連立一次方程式を用いて変数の値を決定できる機能
演算子の意味さえ変更できる柔軟なカスタマイズ性
プログラム例
簡単なサンプルプログラムとその出力を以下に示します。
1: beginchar(65,10pt#,10pt#,0pt#);
2: pickup pencircle xscaled 1.2pt yscaled 0.5pt rotated 120;
3: z1=(0.1w,0.75h);
4: z2-z1=whatever
(8,1);
5: x2=0.9w;
6: z3=(0.8w,0.1h);
7: draw z1--z2{z1-z2}..{z2-z1}z3;
8: labels(1,2,3);
9: endchar;
10: end.
1行目: 文字の情報を定義します。この例では、
文字コード65の文字を幅10pt、高さ10pt、深さ0ptで作成することを宣言しています。
2行目: 文字を描画するために使用する「ペン」を定義します。このペンは、単位円を縦横異なる比率で拡大縮小し、120度回転させた楕円形です。
3-6行目: 3つの点の位置を定義します。これらの点はそれぞれ`z1`、`z2`、`z3`で、図中では1、2、3とラベル付けされています。`w`と`h`の値は1行目の宣言によって決定され、左下の座標が(0,0)、右下が(w,0)、右上が(w,h)となります。
`z1`と`z3`はそれぞれ3行目と6行目で明示的に定義されます。
`z2`の決定方法に、METAFONTの特徴がよく表れています。4行目では、「`z1`から`z2`へ向かうベクトルが、(8,1)という成分を持つベクトルの何倍かになっている」ということだけが定義されています。5行目で`z2`のx成分が明示的に与えられると、`z2`の位置が自動的に決定されます。METAFONT内部では、4行目の段階で一次
方程式が作成され、5行目と合わせて解かれます。
7行目: 文字を描画します。まず、`z1`から`z2`へ直線を引き、`z2`からは、`z2`から`z1`へ向かう方向へ線を引き始めます。その線は滑らかな曲線を描きながら`z3`へと向かい、最終的に`z3`に到達する際には`z1`から`z2`へ向かう方向を向くようにします。
8行目: 3つの点にラベルを付けて表示します。
9行目: 1行目から始まった文字コード65の文字の定義を終了します。他のコードの文字を描画する場合は、1行目と同様に続けることができます。
10行目: このフォントセット(1文字のみ)の定義を終了します。
関連項目
MetaPost (en)
Computer Modern:METAFONTで作られた
TeX標準のフォント。