最終更新:2017-04-08 (土) 17:40:55 (586d)

TeX用語集

Meta{Font,Post} 目次

Meta 入門

MetaFont, MetaPost とは、TeX に標準で実装されているだろう、 フォント作成ツール、図画作成ツールです。
とりあえず、 使ってみてください。
結構、難解です。
1 日 2 日でできるような代物ではない、 と思う。
Knuth の著書で METAFONTbook というやつの日本語版が 7000 円 弱であるのだが、450 ページくらいある。
もうやだ、と思う。
書かれていることは 論理的なのだが、面倒くさい。
ここはもっとがりっとやろうと思う。
まず、 PowerShell とかコンソールとかを起動していただきたい。

mf

と打ち込んでもらいたい。そうしたら次のようになるはずである。

This is METAFONT, Version 2.7182818 (TeX Live 2017/W32TeX) (preloaded base=mf)
**

アスタリスク * が二つ表示されて、何かファイルを入力しろといっている。
しかし、ここでは実験的にしか遊ばないために、\relax と入力して改行する。
そうしたらアスタリスクが一つになるはずである。

**\relax <ENTER>

*

これで準備は万全である。

点の描画

次はいよいよ、描画である。
何か点なり図形なりを 描きたいところである。
ここでは一番最初に点を描画しよう。
以下のようにや っていただきたい。

* drawdot (0,0); showit; <ENTER>

このソフトを作ったのはかの有名な数学者、特に代数幾何学やアルゴリズムの専門 の Knuth 博士が作ったために、記述が数学的になっているのがよくわかるだろう。
drawdot という関数に x と y の 2 次元の座標系で (x,y) に対してそれぞれ 0,0 の値を与える。
セミコロンは文章の区切りとでも思えばよい。
次にその点 (ドット) を "showit" で表示しろとなっている。
数学的である。
drawdot の段階ではまだ、値が代入されたに等しい。
そのために、 それを画面に出力しなければならない。
まあ、説明はこの辺でいいだろう。
METAFONT というのは 2 次元の座標系に点を描画するソフトである、 と極論付けることができる。

直線の描画

次に何かもっと面白いものが描きたい。
以下のコマンドを実行していただきたい。

* draw (0,0)..(100,0); showit; 
* draw (0,0)..(0,100); showit; 

これで、xy 座標の軸が出来上がった。
見た目はアルファベットの "L" などに似ている。
今度は曲線を描いてみよう。

* draw (0,100)..(100,100)..(100,0); showit;

今度は言葉では表現するのが難しいような図形が出来上がった。
この曲線の描き方は数学的な原理に基づいているがここでは深入りしない。

ここで "end." または "\bye" と入力して一度 METAFONT を終了しよう。

未来大学のシンボルの描画

今度は有名なものを描こうではないか。
そう、未来大学のシンボルマーク、アメーバ。
これができれば楽しいなあ。
打つのが面倒くさいのでコピーアンドペーストでもして いただきたい。
この fill...cycle というのは点の集合で囲まれた領域を塗りつぶす ことを意味している。

$ mf 
This is METAFONT, Version 2.7182818 (TeX Live 2017/W32TeX) (preloaded base=mf)
**\relax
* fill (0,47)..(5,54)..(11,57)..(19,55)..(24,51)..(28,41)..(36,41)..\
(40,49)..(35,54)..(28,65)..(35,86)..(59,80)..(59,62)..(61,61)..(69,61)..\
(78,63)..(87,57)..(88,46)..(76,40)..(73,36)..(71,31)..(75,26)..(73,4)..\
(52,5)..(43,15)..(35,13)..(30,5)..(18,6)..(17,19)..(22,24)..(19,32)..\
(5,36)..(1,43)..cycle; 
* showit;

ちょっと形が変かもしれないが、でもなんとなく出来上がっているだろう。

MetaPost

じゃあ、このあたりで MetaPost で遊んでみましょう。
"mpost" と打てば起動できます。
まずは以下のような内容のファイル、 たとえば filename.mp を用意します。

beginfig(1)
u=100;
draw (u,u)--(2u,u)--(2u,2u)..cycle;
draw (u,u)..(2u,u)..(2u,2u)..(u,2u)..cycle;
endfig;
end.

これを見ても何がなんだかわかりませんが、とりあえず保存しておきます。

$ mpost filename.mp && rungs filename.1 

とりあえず、使ってみてください。
うまくいけば、円とその円に内接する直角二等辺三角形が 描けるはずです。