全角ダッシュをつなげる

全角ダッシュをつなげる
漫画や小説用のフォントとして使う際に問題になることの一つに、
「全角ダッシュ (―) を複数個並べた時に、隙間が空いて線が繋がらない」があります。

これは、全角ダッシュのグリフのアウトラインの幅が、全角分の長さになっていないために起こります。

ならば、全角ダッシュのグリフを修正して、繋がるようにすればよいのです。
横書きグリフの修正
まずは、横書きの全角ダッシュから修正します。

FontForge でフォントを開き、全角ダッシュのグリフを検索します。

「表示」>「移動」で、"U+2015" または "―" と入力して、「OK」ボタンを押すと、全角ダッシュグリフに移動できます。

見つけたグリフをダブルクリックすると、アウトラインウィンドウが開きます。

繋がらない全角ダッシュの場合は、以下のような状態になっているので、これを横幅いっぱいに延ばします。

送り幅を確認
まず、「メトリック」>「幅を設定」のウィンドウ内の「グリフ幅の設定値」で設定されている値を確認して、憶えておいてください。

もしくは、アウトラインウィンドウの上部にある X 方向のルーラーのすぐ下に、黒色で数字が表示されていると思いますが、この値が「グリフの送り幅」なので、この値を見ても構いません。

この「グリフの送り幅」は、グリフを描画した後に、グリフの原点 (0, 0) の位置から、次のグリフ位置へ移動するための、横書き用の移動幅、つまり、グリフの幅です。

この値の単位は EM 値と関係しているので、等幅の全角ダッシュであれば、基本的に EM 値と同じ値になっているはずです。
プロポーショナルフォントであれば、幅はグリフごとに可変となるので、EM 値と異なる場合があります。
アウトラインの点を移動
それでは、このグリフのアウトラインの点を移動させて、横線を延ばしていきます。

左上
まずは、四角形の左上の点を、左端に移動します。

グリフの座標は (0, 0) が原点となっており、↑→という方向の座標系になっています。
横書き時の左端は X = 0 となるので、四角形の左側の点を X = 0 の位置に移動することで、前の文字の全角ダッシュと繋がるようにします。

左上の ■ のポイントを左クリックして、点を選択してください。
ポイントの色が変わっていれば、選択されています。

その後、メニューの「エレメント」>「情報を得る (Ctrl+I)」で、点の情報ウィンドウを表示してください。
選択している点の情報が表示されます。

ここで、「基点」の左側の X 座標値に、"0" を入力してください。
すると、点の位置が移動します。

右上
次は、右上の点を移動します。

点の情報ウィンドウの「次>」のボタンを押すと、選択されている点から、進行方向に対して次の点が選択されます。
右上の点が選択されているのを確認してください。
もしくは、点をクリックでも選択できます。

今度は、点を右端に移動させるため、最初に確認した「グリフの送り幅の値」を入力します。

グリフの右端は、次のグリフへの位置、つまり、このグリフの幅となります。
次のグリフの位置まで横線を伸ばせば、次に描画される全角ダッシュと線が繋がるというわけです。

残りの点
あとは、同じように操作して、
次の右下の X 座標を「グリフ幅の値」に、その次の左下の X 座標は "0" に設定して、最後に「OK」ボタンを押してください。

※「OK」ボタンを押さないと、これまでに変更したすべての点は適用されません。
確認と調整
「メトリック」>「メトリックウィンドウを開く」で、実際に文字を並べて確認してみましょう。

文字入力部分には、あらかじめ全角ダッシュが入力されているので、それを Ctrl+C でコピーして、Ctrl+V で隣に貼り付けてください。

なお、メトリックウィンドウの高さを変更すると、文字のサイズも、ウィンドウサイズに合わせて変化します。

確認してみると、文字サイズによっては繋がることもありますが、少しだけ隙間が出る場合もあると思います。
アウトラインからピクセルへ描画する際には、計算上の誤差が生じるので、このように、ぴったりとは繋がらないことがあります。

対策としては、右上/右下の点の X 座標を +1〜+2 程度増やして、少し横線を長くすることです。

アウトラインウィンドウに戻って、少し修正してみましょう。

まず、右上の点をクリックで選択して、右矢印キーを押すと、X 座標を +1 できます。
次に、Tab キーを押すと、進行方向に対する次のポイントへ移動できるので、右下の点が選択されたのを確認して、右矢印キーを押し、X 座標を +1 します。

これで、横線を少し長くできました。
再度メトリックウィンドウで確認してみると、隙間が軽減されていると思います。
ヒント
OpenType で出力したい場合は、最後に、グリフのヒント情報を更新しておきましょう。
(TrueType の場合は、必要ありません)
ヒントについては、ヒント (ヒンティング) について をご覧ください。

OpenType から読み込んだ場合は、元のグリフのヒント情報が残っているので、まずは、すべてのヒント情報を削除します。

「ヒント」メニューから、「水平ステムヒントを削除」と「垂直ステムヒントを削除」を実行してください。
緑や紫の塗りつぶしが消えると思います。

通常は、「自動ヒント」でヒント情報を自動生成すればよいのですが、四角形のアウトラインの場合、水平ヒントしか生成されません。
この場合は垂直ヒントも生成したいので、手動で生成することにします。

まずは、点の選択を解除します。
「編集」>「選択」>「すべて選択解除」で、選択を解除してください。
Escape キーでも行えます。

次に、左上の点をクリックして選択。
そして、右下の点を Shift+クリックして、追加選択します。

その後、「ヒント」>「水平ヒントを追加」と「垂直ヒントを追加」を実行して、水平/垂直ヒントを生成してください。

四角形が紫で塗りつぶされている状態であれば、問題ありません。
縦書きグリフの修正
全角ダッシュの場合は、横書きと縦書きでグリフ形状が異なるので、縦書きに対応しているフォントの場合は、縦書き用の全角ダッシュグリフも修正する必要があります。

グリフの編集の前に、まずは、「エレメント」>「フォント情報」でフォント情報を開き、「一般情報」の項目で、「高さ」と「深さ」の値を確認して、憶えておきます。

CID フォントの場合は、「CID」>「CIDフォント情報」で見てください。
「フォント情報」の方では、現在選択されているサブフォントの情報が表示されます。

「一般情報」の値は灰色になっているので、「OS/2」の項目から、「メトリック」のタブを選択します。
ここから、「組版上の高さ」「組版上の深さ」の値を見ます。

CID フォントにおける、各サブフォントの「高さ」と「深さ」は、主にグリフのレイアウトのヒントとして使うためのもので、この値を変更しても、フォント全体の情報には適用されません。
縦書きグリフの検索
次に、全角ダッシュの縦書き用グリフがどこにあるかを調べる必要があります。

置換一覧から
元の横書き用の全角ダッシュを選択して、
グリフ一覧上で「エレメント」>「その他の情報」>「Show Dependent」>「置換一覧」を実行するか、
アウトラインウィンドウ上で「エレメント」>「依存するグリフを表示」>「置換一覧」を実行してください。

GSUB 置換情報により、このグリフからの置き換え先として設定されているグリフの一覧が表示されるので、表示したいグリフを選択して「表示」ボタンを押すと、そのグリフのアウトラインウィンドウが開きます。

縦書き時の置換は、vert または vrt2 で登録されるので、そのいずれかのグリフを選んでください。

グリフ情報から
グリフ情報で設定されている項目から見ることも出来ます。

横書き用のグリフを選択して、「エレメント」>「グリフ情報」でグリフ情報を開き、「置換」の項目を見ます。

Lookup のサブテーブル名と、置き換え先のグリフ名のリストが登録されているので、vert または vrt2 の項目のグリフ名を見ます。

このグリフ名を、憶えておくか、コピーしてどこかに貼り付けておいてください。
※グリフ情報のウィンドウを閉じると、ここでコピーした文字列は貼り付けることができなくなります。

後は、「表示」>「移動」で、そのグリフ名を入力して、移動します。
(例えば、"uniFE31.vert" など)
(なお、全角ダッシュの縦書き文字は Unicode に登録されているので、"U+FE31" でも移動できます)
グリフの編集
横書きグリフ時と同じように、今度は縦のアウトラインを上端と下端に伸ばすことになります。

なお、縦書き用のグリフであっても、基本は常に横書きのレイアウトの状態で座標を指定することになるので、FontForge では、縦書き時にそれ専用のモードにするといったことはありません。

縦書き時は、フォント情報で確認した「高さ (ascent)」が全角の上端、「深さ (descent)」が全角の下端となります。
たとえば、高さが 880、深さが 120 の場合、上端は Y = 880、下端は Y = -120 となります。

※「深さ」は、Y = 0 から下方向への幅となるので、座標上ではマイナスの値となります。

ということは、左上/右上の Y 座標を「高さ」の値に、左下/右下の Y 座標を「-(深さ)」の値にすれば、線を上端と下端に伸ばせることになります。

後は、横書き時と同じように処理し、必要であればヒント情報も設定してください。