さまざまなアクセントの組み合わせがあるので、非常に面倒です。lcdf-typetools を使えばある程度自動化できるのでしょうが、TrueType flavoured な OpenType フォントの場合はうまくできない場合があったりします。
そんなときは自分で .tfm ファイルを書き換える必要があります。
.tfm はバイナリなので、人間の読めるように変換します。
$ tftopl greekfont.tfm greekfont
次のポイントに従って作業していきます。ただし、CB.enc に沿ったエンコーディングであるとします。
.pl に書き込むときはかっこの対応やスペースの数に注意します。また、同じ文字に対する LABEL が2つ以上あるとエラーになります。(STOP) の対応にも気をつけます。
(LABEL O 0) (LIG O 55 O 177) (STOP) (LABEL O 55) (LIG O 55 O 0) (STOP)
アクセント・気息記号・分離記号・イオタサブスクリプトについて行います。
小文字については約120個の合字(リガチャ)を定義します。
(LABEL O 47) (LIG O 42 O 43) (LIG O 47 O 35) (LIG O 74 C V) (LIG O 76 O 136) (LIG C a O 210) (LIG C h O 240) (LIG C w O 270) (LIG C e O 350) (LIG C o O 354) (LIG C i O 320) (LIG C u O 324) . . . (STOP)
大文字についてはカーニングを調整します。
. . . (KRN C A R -0.25) (KRN C E R -0.05) (KRN C H R -0.05) (KRN C I R -0.05) (KRN C O R -0.15) (KRN C U R -0.03) (KRN C W R -0.15) . . .
(LABEL O 50) (LIG O 50 O 173) (STOP) (LABEL O 51) (LIG O 51 O 175) (STOP)
(LABEL O 47) . . . (LIG O 47 O 35) . . . (STOP) . . . (LABEL O 140) . . . (LIG O 140 O 34) . . . (STOP)
8進数で375を boundary char とします。
(BOUNDARYCHAR O 375)
(LABEL C s) (LIG/ O 56 C c) (LIG/ O 54 C c) (LIG/ O 73 C c) (LIG/ O 72 C c) (LIG/ O 77 C c) (LIG/ O 41 C c) (LIG/ O 51 C c) (LIG/ O 57 C c) (LIG/ O 135 C c) (LIG/ O 375 C c) (LIG/ O 52 C c) (LIG/ O 35 C c) (STOP)
(CHARACTER C v が定義されていなければ、先に定義しておきます。
(LABEL C v) (LIG C v C v) (LIG C A C A) (LIG C B C B) (LIG C G C G) (LIG C D C D) (LIG C E C E) (LIG C Z C Z) (LIG C H C H) (LIG C J C J) (LIG C I C I) (LIG C K C K) (LIG C L C L) (LIG C M C M) (LIG C N C N) (LIG C X C X) (LIG C O C O) (LIG C P C P) (LIG C R C R) (LIG C S C S) (LIG C T C T) (LIG C U C U) (LIG C F C F) (LIG C Q C Q) (LIG C Y C Y) (LIG C W C W) (STOP)
ある種のフォントでは標準で stigma を用います。
(LABEL C s) . . . (LIG C t O 6) . . . (STOP)
stigma を使わないものもあった方が(普通は)よいので、greekfont.tfm と greekfontst.tfm の2つを作るとよいでしょう。.enc, .pfb は同じものが使えます(.tfm, .map, .fd は別に用意します)。
を参考にしてください。
以上については、永田氏の s-dayroman に関する文書が大変参考になります。
フォントの機構に関する一般的な解説は、ページ・エンタープライゼズ、『LaTeX2ε マクロ&クラスプログラミング基礎解説』(技術評論社、2002)、203--269 にあります。