フォント METAFONTのソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[フォント]]に戻る == '''概要''' == TeXでも有名なドナルド・クヌースさんが作ったタイポグラフ用のプログラミング言語です。2次元空間座標で関数を使ってアウトラインを指定したり、点と点を座標で指定したりして、どういう設定でつなぎ合わせるか?そういう感じのプログラムをして、*.mf(ファイル拡張子 mf)というファイルを作成できるものです。METAFONTのフォントファイルはtype1と呼ばれる形式に変換できるのも有名ですが、これができるということは、他の形式のファイルにも変換はできるということでして、TeXから始めるOpenTypeフォントもありえるわけです。但し、METAFONTでは1セットで256個づつしか字体を収録できません。マクロでものすごい数のフォントを読み込ませるという手法でMETAFONTを使うこともできますが、マクロを使っても、読み込みできるフォントセットの上限もあるため、それほどたくさんの字体をMETAFONTで認識させることはできません。どちらかというと1セットをtype1フォントに変換して、Unicode対応フォント制作アプリでTrueTypeフォントやOpenTypeフォントに変換して、つなぎ合わせる作業によって日本語フォントおよびUnicodeフォントを作ることになるんでしょう。日本人なら漢字の対応は第二水準くらいまで頑張らないとだめなんすかね。スッゴイ数のグリフになるんですけど…METAFONTはプログラムによって制作するフォントなので、いくらかは自動化できますが他のアプリの方が使いやすいって人もいるかもしれません。METAFONTと違うフォントアプリを組み合わせるというのもおもしろいやり方かもですね。Unicodeフォントで名を馳せるタイプグラファがこの記事を発端として、誕生したなら素晴らしいことなのですが…タイプデザインをやってみようと思って辿り着いた人の熱意の方が凄いんでしょう。タイプデザインの巨匠になってAdobeやMicrosoftやAppleのタイプデザインディレクターとかになるもよし!METAFONTを使いこなせ! とはいいつつも、1990年代というインターネットがまだ日本で広まる前からの技術ですので、この上なく面倒くさいフォント作成手法になると思います。私は、このMETAFONTという技術から現在あるフォントエディタのありがたみを感じてみてもいいかなと基礎的なことをやっていようかと思っている次第です。このような回り道をしないで、ある程度お金を出して、もうちょっと便利なツールを使うのは効率的で大事なことでもあります。ヒラギノフォントみたいな凄いの作りたいという方は、大きい会社の保持しているような、すんごいシステムを使ってチームワークで、決め事を試案し、それを守って作るという、そういう流れがあるということも知っておいた方がいいかもしれません。6万グリフの書体だと2年くらいかかる場合もあるそうです。計画的にやらないと終わりません。1年は365日しかありません。1日1文字とかそんなペースでやったらどえらい時間がかかるなぁとすぐに分かっていただけるかと思います。ましてやUnicodeフォントともなると各国の文化を調べたり、美しいと感じる書体とはどんなものかを国ごとに切り分けたりしないとだめですし、作業が無駄になってしまいます。そして、それを無償で提供することなんてできるでしょうか?よく考えて、どういう規模でどうやって広めて、どうやって展開するかとか、そういうことまで考えておく必要も…ってこれ以上の無駄話は必要ないですね。 == '''導入''' == METAFONTを使ってみたいと思った場合、TeXのシステムインストールするのが近道です。METAFONTはTeXシステムの一部ですので、組み込まれています。METAFONTだけ使うというのは難しいでしょう。また、試しに作ったMETAFONTの出力ファイルもなにかしらに表示させようとするとさらなる変換によって、PDFに出力したりしてプログラムの動作確認が必要です。それもTeXのシステムが補ってくれます。 Windows10にTeXlive2017をインストールします。*.isoファイルというDVDとかCDのイメージファイルで提供されています。 [http://www.tug.org/texlive/acquire-iso.html http://www.tug.org/texlive/acquire-iso.html] download from a nearby CTAN mirror というリンクからダウンロードして下さい。デッドリンクになってた場合は「TeXLive」で検索してみて下さい。 本来であれば、これをもとにCDやDVDを作るソフトウェアでDVDにして、これをDVDドライブに入れて、その中に構成されたインストールファイルを起動するという感じになるのですが、DVDとかDVDドライブとかを使わないで*.isoファイルをWindows内に作った仮のDVDドライブにisoファイルを読み込ませるソフトウェアがありまして、DEAMON Tool Liteを入手してインストールしましょう。無料の奴でいいです。とはいいつつも、いろいろ他に不要のファイルをインストールしてこようとするので、インストーラーでDEAMON Tool以外をインストールしようとしてくるダイアログでことごとく同意しないとか、閉じるとかキャンセルを押さないとダメです。ものすごい数の罠がありますので、拒否します。 この時点で素人は手を出せない感ハンパない。 そして、インストールしたら、仮想ドライブを作成→作った仮想ドライブにisoを読み込みます→で、ドライブの自動起動とか、設定した仮想ドライブの中身の起動ファイル開くなどします。 インストールダイアログでは、ほぼデフォルト設定で次へボタンを押していく感じです。 *インストールディレクトリ :C:\texlive\2017 *規定用紙寸法 :A4 *設定 :スタートメニューを追加/CheckON TeXWorksフロントエンドを導入/CheckON これで、おおよそ5GByteほどの容量をもった膨大なプログラム群が配置されます。 [[フォント METAFONT TeXLive2017インストールプログラム]] METAFONTとはかけ離れた作業ですが、ダウンロードだけで30分くらい、インストールでは軽く2時間くらいはかかる作業になります。TeXのメンドクサイ版の全部入りみたいな感じですかね。[[TeX]]の方法でインストールしたのは違うPCでして、こちらのやり方でも使えるとは思います。管理人はこの機会にDynaPad N72というタブレット端末にTeXLive2017を導入しました。Intel Atom-x5 Z8300 1.44GHzプロセッサのしょっぱい奴なので時間がかかったのかもしれません。 == '''簡単なMETAFONTの流れ''' == 一番最初にHelloWorldプログラムを作るような基本的なことをやってみます。 上記の手順に従ってTeXLiveをインストールしたら、TeXLive Command Lineというプログラムが追加されていますので、スタートメニューから選択して起動します。WindowsのCommandプロンプトとなんら変わりのないウィンドウが表示・描画され、コマンドを実行できる状態になります。C:\texlive\2017\tlpkg\installer\tl-cmd.batが実行されて、TeXLiveのコマンドが実行できる状態になります。 次にMETAFONTのコマンドを使うために以下のコマンドを実行します。できればカレントディレクトリをmfプログラムを実行するための作業用ディレクトリに変更した方がよいと思います。今から行う作業によって、いくつかファイルが生成されます。関係のないファイルがあるディレクトリで作業をすると何が生成されたか、わからなくなります。 >'''mf''' This is METAFONT, Version 2.7182818 (TeX Live 2017/W32TeX) (preloaded base=mf) ** <nowiki>**</nowiki>という状態で新たなコマンドを受け付ける状態になって停止します。通常はこの状態でMETAFONTプログラムが記述された*.mf(メタフォント)ファイルを選択するようなコマンドで*.gf(グリフファイル)ファイルを生成する操作をしますが、まずは簡単な一行の一筆書きのグリフを作るだけなので、コマンドだけでmfプログラムを記述するため以下のコマンドでメタフォントプログラムを記述できるモードにします。 **'''\relax''' * とすると次は*という状態で新たなコマンドを受け付ける状態になります。この状態で、メタフォントプログラムを記述できるので、試しに何も考えないで以下のコマンドを実行します。 *'''draw (20,40)..(20,20)..(80,20)..(80,40); showit; shipit;''' [0] これで、何やら描画されたウィンドウが表示がされると思います。これがdrawからはじまる構文によって、生成されたMETAFONTの図形です。またコマンドプロンプトにもどって、さらに *'''end;''' Output written on mfput.2602gf (1 character, 192 bytes). Transcript written on mfput.log. これで、先ほど表示されたウィンドウが閉じられて、shipitという命令も実行された結果、[0]という番号1つだけのグリフ情報をもったgf(グリフファイル、注意:作者のクヌースさんはジェネリックフォントと呼んでいます。)であるmfput.2602gfファイルが生成されます。生成するべきグリフファイル名を指定していないので、このような名前のファイルが生成されます。2602gfとなっていますが、これは1インチ2602ピクセルのグリフという意味の数値で、これも規定値として扱われる拡張子です。ただし、これでは表示するためのビュワーがないのでdviというファイルに変換をします。そのまえにgfファイルをdviファイルにするために必要なtfm(フォントメトリック 注意:覚え方はTeX Font Metric テフ フォント メトリック)ファイルを生成します。tfmファイルの情報はバイナリー(1と0の情報でテキストではない)になっていますが、tftopl('''tf'''m→'''pl'''ane情報という変換)コマンドでフォントメトリック情報がテキストで閲覧できます。tftopl xxx.tfm > xxx.txtという具合にコマンドを使うことでテキストとして保存できます。 >'''mktextfm gray''' mf-nowin.exe --progname=mf --base=mf \mode:=ljfour; \mag:=1; nonstopmode; input gray; This is METAFONT, Version 2.7182818 (TeX Live 2017/W32TeX) (preloaded base=mf) (c:/texlive/2017/texmf-dist/fonts/source/public/knuth-local/gray.mf (c:/texlive/2017/texmf-dist/fonts/source/public/knuth-local/graylj.mf (c:/texlive/2017/texmf-dist/fonts/source/public/knuth-lib/grayf.mf [0] [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] ) ) ) Font metrics written on gray.tfm. Output written on gray.600gf (123 characters, 13144 bytes). Transcript written on gray.log. mktexupd failed C:/Users/speci/.texlive2017/texmf-var/fonts/tfm/public/knuth-local/gray.tfm 上記コマンドによって *c:/texlive/2017/texmf-dist/fonts/source/public/knuth-local/gray.mf *c:/texlive/2017/texmf-dist/fonts/source/public/knuth-local/graylj.mf *c:/texlive/2017/texmf-dist/fonts/source/public/knuth-lib/grayf.mf を参照し gray.tfm/gray.logおよび123文字のグリフを持つgray.600gfやその他にcmr8.600pk/gray.600pk/logo8.600pkが生成されます。(*.pk=PacKed bitmap fonts パックされたビットマップフォント) mktextfmコマンドはmetafontプログラムで適切なプログラムが記述されていなければ、tfmファイルを生成することはできません。texliveでインストールした場合、grayやblackなどのmfコマンドのmodeによって必要となるtfmが不足しています。mfファイルはあるので、mktextfmコマンドでtexliveのインストールディレクトリを再帰的に検索してmfファイルを検索します。イメージとしては、tfmは文字コードごとのグリフを収める器みたいなもので、これに文字の解像度とか、文字の幅、文字間、高さといった情報を持っていて、pkファイルには解像度ごと、グリフ情報をもっていて、文字の太さごとにもpkファイルを準備したりもします。gfグリフファイルからpkファイルを生成するにはgftopkコマンドを使います。texのフォントセットとしてはtfmと解像度や倍率に適合するxxx.(nnn)pkファイルが対で必要になります。(nnn)にはdpiという単位の数字が入ります。いろいろと説明しましたが、これでdviファイルを生成するのに必要なファイルがそろったので、以下のコマンドを実行します。dviファイルを作るにはgfファイルとgray.tfmなどのmodeごとに必要となるtfmファイルがあればよいということになります。Windows10の場合は各コマンドで生成したファイルでカレントディレクトリに置くだけでは動作しないようなpkファイルはコマンドによっては、C:\User\ユーザ名\.texlive2017\texmf-var\fontsというフォルダ以下に適切に分類されて保管される仕組みになっています。あれ?どこにいった?と思ったときはこのあたりを覗くとよいでしょう。 >'''GFtoDVI mfput.2602gf''' これでmfput.dvi(DeVice Independent デバイス独立ファイル)が生成されました。このdviファイルにはビューワがありますので、以下のコマンドを実行することで、実行結果をゆっくりとみることができます。dviをpdfに変換('''dvipdfmx'''コマンド)することもできるので、一般的にも普及しているAcrobatReader系のビューワで閲覧ができるようになります。 >'''dviout mfput.dvi''' そんなところです。これでMETAFONTプログラムへの道が開けたかと思います。習得を急いでいる方は、他の文献をあさればMETAFONTプログラムのすべてを理解できると思います。急いでいない方は、管理人と少しづつ、METAFONTプログラムからOpenTypeフォントやTrueTypeフォントなどいろいろなものをつくる勉強をしましょう。なんど、このページにやってきても全然更新されていない!とかっていう展開もあるかもしれません。 == '''TEXにフォントを認識させる''' == '''tex testfont'''コマンドを実行する場合には :1倍表示:*.600pk :2倍表示:*.1200pk :4倍表示:*.2400pk ファイルが必要になります。C:\User\ユーザ名\.texlive2017\texmf-var\fonts以下に移動させる必要があるでしょう。dpiを特に指定しない場合のデフォルト値2602になるようです。但しmfコマンドで\mode=localfontを指定したりして、使った場合は600dpiがデフォルト値となります。tex testfontでName of the font to test = xx.mf '''scaled 4000'''と4倍指定した場合はxx.mfに対応するxx.2400pkが必要になりますので、mfコマンドで\mode=localfont; mag=4;input xx.mfとして生成されるxx.2400gfが必要になります。場合によっては、そうして、gfフォントから圧縮されたpk形式に変換するgftopkコマンドでgftopk xx.2400gfとしてxx.2400pkを生成する必要があります。これをC:\User\ユーザ名\.texlive2017\texmf-var\fonts以下に移動させるとtestfontで必要なgfファイルもしくはpkファイルが見つかり、mfでプログラムしたフォントがtestfontで表示されます。管理人のPCではgfファイルは認識しなかったので、現在、入手できるMETAFONTに関する説明とは異なる動作だと感じています。管理人はpkファイルに変換しなければならないと思い込んでいます。 例えばmixtureというtestfontを実行するには以下のように指定します。 >'''tex testfont''' This is TeX, Version 3.14159265 (TeX Live 2017/W32TeX) (preloaded format=tex) (c:/texlive/2017/texmf-dist/tex/plain/knuth-lib/testfont.tex Name of the font to test = xx.mf scaled 4000 Now type a test command (\help for help):) *'''\mixture''' background character = '''1''' starting character = '''a''' ending character = '''h''' *\end [1] Output written on testfont.dvi (1 page, xxx bytes). Transcript written on testfont.log. きちんとxx.2400pkファイルが先に説明したようにしかるべきところにあれば、上記のような方法でtestfont.dviの中には1に対応するASCIIコード番号のフォントを中心に1行づつaからhまでのコード番号に格納されたフォントをランダムに混ぜてくれるテストができます。例えば文字コードと文字のフォント指定した形状が同じ場合は 1a111aa11aa 1b11111bbb1b ... 1h1111hh111h という感じです。aからhのコードとカタチを無視すれば、コード1は固定ですが、いろいろなバランスにした同じ文字を比較したりもできます。 [[フォント]]に戻る
フォント METAFONT
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ