天地有情

[METAFONT] METAFONT で文字を作る(初心用)

METAFONT で文字を作る(初心用)

§1 はじめに

METAFONT はフォントを作成するシステムであり,(La)TeX において利用されます.
METAFONT を利用するには,フォントを生成するプログラムを作成します.この
プログラムコードをMETAFONT によって処理することでフォントファイルを作り出します.
本編では簡単な文字(シンボル)を作成し,METAFONT の使い方の理解に努めます.

1.1 インストール

TeXLive/W32TeX などでは,標準でインストールされています.
bin ディレクトリ内にMETAFONT関連のコマンド mf.exe, mktexpk.exe, mktextfm.exe, gftopk.exe
gftodvi.exe が存在することを念のため確認してください.

1.2 マニュアル

a) METAFONTに関するマニュアルは,なかなか見つかりません.それで急遽,以下を作成しました.ご一読ください.
  自分自身の備忘録でもあります.
   http://hayato1224.web.fc2.com/MFmain.pdf

b) METAFONTから派生したMetaPostとは思想を共有していると思います.MetaPostのマニュアルは次を
  参考にしてください. https://www.tug.org/docs/metapost/mpman.pdf


§2 サンプル

下図に示す「八卦」(はっけ)のシンボルを作成し,LaTeX側 で表示することにします.

mf01.png


余談:
ーーーー
長棒(1)と破断棒(0)を2種を3つ1組にして組み合わせると(2の3乗)=8種類のができます.
これが「八卦」のシンボルです.これを2進数で表し,さらに10進数にすると 0~7 となります.
ーーーー

それでは,以下の手順で「八卦」シンボルを作成します.

(1)METAFONTファイル hakke.mf (拡張子は必ず .mf) プログラムを作成.

■■■■■ hakke.mf ■■■■■■
mode_setup;
u#:=1pt#;
define_pixels(u);
beginchar(0,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(4u,1u);
draw (6u,1u)--(10u,1u);
draw (0,4u)--(4u,4u);
draw (6u,4u)--(10u,4u);
draw (0,7u)--(4u,7u);
draw (6u,7u)--(10u,7u);
endchar;
beginchar(1,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(10u,1u);
draw (0,4u)--(4u,4u);
draw (6u,4u)--(10u,4u);
draw (0,7u)--(4u,7u);
draw (6u,7u)--(10u,7u);
endchar;
beginchar(2,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(4u,1u);
draw (6u,1u)--(10u,1u);
draw (0,4u)--(10u,4u);
draw (0,7u)--(4u,7u);
draw (6u,7u)--(10u,7u);
endchar;
beginchar(3,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(10u,1u);
draw (0,4u)--(10u,4u);
draw (0,7u)--(4u,7u);
draw (6u,7u)--(10u,7u);
endchar;
beginchar(4,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(4u,1u);
draw (6u,1u)--(10u,1u);
draw (0,4u)--(4u,4u);
draw (6u,4u)--(10u,4u);
draw (0,7u)--(10u,7u);
endchar;
beginchar(5,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(10u,1u);
draw (0,4u)--(4u,4u);
draw (6u,4u)--(10u,4u);
draw (0,7u)--(10u,7u);
endchar;
beginchar(6,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(4u,1u);
draw (6u,1u)--(10u,1u);
draw (0,4u)--(10u,4u);
draw (0,7u)--(10u,7u);
endchar;
beginchar(7,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(10u,1u);
draw (0,4u)--(10u,4u);
draw (0,7u)--(10u,7u);
endchar;
end.
■■■■■■■■■■■■■■■■

(2)事前準備

   (a) hakke.mf を fonts/source/public/hakke に格納する.
     (hakke ディレクトリを新たに作成しています.)
   (b) TeX が検索できるように mktexlsr を実行する.
   (c) LaTeX ファイルの作成とコンパイルは以下を参照.

(3)LaTeX ファイルの作成とコンパイル

mf02.png


(4)コンパイル コマンド

   ptex2pdf -l hakke.tex (あるいは platex + dvipdfmx)
   
   結果:
   (a) hakke.pdf が生成される.
   (b) C:\w32tex\share\texmf-dist\fonts\pk\ljfour\public\hakke に hakke.600pk が自動生成される.
   (c) C:\w32tex\share\texmf-dist\fonts\tfm\public\hakke に hakke.tfm が自動生成される.

(注)現在は tfm や pk を自動的に生成してくれますが,以前は mfコマンドや gftopkコマンドを操作していました.


(5)追加のサンプル --- 乾坤一擲

mf03.png



§3 デバッグ操作

よりよいMETAFONTソースを作るには,何度もフォント(シンボル)の出来具合を確認する必要があります.
そのために,gftodviコマンドが用意されております.以下にデバッグ操作を示します.

(1)先ほど提示された「八卦」シンボルを例にとります.
最初部分を抜き出し,次のプログラムfoo.mf を対象にします.
すべて Desktop 上で処理することにします.終了したら削除してください.

■■■■■ foo.mf ■■■■■■
mode_setup;
u#:=1pt#;
define_pixels(u);
beginchar(0,10u#,10u#,0);
pickup pensquare scaled 1.5u;
draw (0,1u)--(4u,1u);
draw (6u,1u)--(10u,1u);
draw (0,4u)--(4u,4u);
draw (6u,4u)--(10u,4u);
draw (0,7u)--(4u,7u);
draw (6u,7u)--(10u,7u);
endchar;
end.
■■■■■■■■■■■■■■■

(2)コンパイル

   (a) mf foo.mf
     この操作で foo.2602gf が生成されます.
     
   (b) gftodvi foo.2602gf
     この操作で foo.dvi が生成されます.
     
   (c) dviout foo.dvi
     dvifファイルが開き,フォント(シンボル)の出来具合をチェックできます.

(3)foo.dvi を表示

mf04.png


フォント(シンボル)の全体をもう少し上方修正し,さらに左右両端を枠内に入るように
微調整すれば,よくなると思われます.

このようにして何回か修正を繰り返し,最良のフォント(シンボル)を作り出すことになります.


(EOF)


スポンサーサイト
  1. 2016/06/13(月) 04:29:44|
  2. METAFONT