METAFONT
出典: フリー百科事典『ウィキペディア(Wikipedia)』
METAFONT(メタフォント)は、フォント作成用のコンピュータプログラムである。組版システムTeXとともにドナルド・クヌースにより開発された。
目次 |
[編集] 概要
METAFONTは文字の形を描くプログラムソースファイルを読み込んで、組版用の情報(文字の大きさや合字などの情報)を持つフォントメトリックファイルと、文字の形の情報(グリフデータ)をもつビットマップフォントファイルを生成するシステムである。フォントファイルを生成する際にいくつかのパラメータを調整することで、同一のソースファイルから幾種ものフォントを生成することも可能であり、それが名称の由来にもなっている。生成する文字の輪郭には、ベジェ曲線が用いられる。
METAFONTは組版システムTeXとともにドナルド・クヌースにより開発された。組版処理をする際、フォントデザインに応じた合字やカーニングなどの情報が必要となる。TeXでは数式組版などにも力点が置かれているが、その際はさらに豊富な組版情報をフォント自体が持つことが期待される。METAFONTは、そのような組版情報を持ったフォントを作成する必要から開発された。METAFONTはTeXと同様にフリーソフトウェアであり、幾つかのプラットフォームに移植されている。
METAFONTで生成したフォントを他の形式(Type1など)に変換するプログラムも開発されている。
また、METAFONT用のプログラムと似た構文のプログラムでPostScript形式の画像ファイルを生成できるMetaPostも開発されている。
[編集] プログラミング言語としてのMETAFONT
プログラミング言語としては、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行目までで三つの点の位置を定めている。三つの点はそれぞれ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行目では、三つの点にラベルを付けて表示させている。
- 9行目で、1行目から続いた文字コード65の文字は終了する。さらに他のコードの文字を描きたければ1行目と同様に続けることもできる。
- 10行目で一文字しかないこのフォントセットが終了する。
(他のプログラム例がw:de:Metafontにも)