Missing Points at Extrema
フォント出力時に「Validate Before Saving」を ON にしてエラーをチェックしたり、
「エレメント」>「Validation」>「Validate」で、手動で問題をチェックすると、かなりのグリフで "Missing Points at Extrema" というエラーが出る場合があります。
エラーを直訳しても意味はわかりにくいですが、"Extrema" は日本語で「極値」。
FontForge 上では「極大点」という言葉が出てくるので、これのことです。
エラーの意味としては、「極大点が欠落している」ということです。
ここでは、このエラーの意味と、極大点について説明します。
「エレメント」>「Validation」>「Validate」で、手動で問題をチェックすると、かなりのグリフで "Missing Points at Extrema" というエラーが出る場合があります。
エラーを直訳しても意味はわかりにくいですが、"Extrema" は日本語で「極値」。
FontForge 上では「極大点」という言葉が出てくるので、これのことです。
エラーの意味としては、「極大点が欠落している」ということです。
ここでは、このエラーの意味と、極大点について説明します。
エラーの意味
「エレメント」>「Validation」>「問題点を発見」の、「パス」>「極大点の欠落をチェック」にカーソルを合わせた時に表示されるツールチップの説明を見ると、以下のようになっています。
つまり、PostScript (OpenType) と TrueType では、グリフのアウトラインの輪郭上の、X または Y の最小/最大値が、パスのポイント (制御点を除く) と同じ位置にある必要がある、ということです。
最小/最大値がパスのポイントと同じ位置にならないのは、以下のような場合です。
FontForge 上では、○の中に十字がある点は、輪郭上の極大点を示しています。
このように、アウトラインの輪郭の線が、ポイントの位置より外側にはみ出している場合に、"Missing Points at Extrema" のエラーが出ます。
PostScript and TrueType require that when a path reaches its maximum or minimum position there must be a point at that location. [翻訳] PostScript と TrueType では、パスが最大または最小の位置に到達したときに、 その位置にポイントが存在する必要があります。
つまり、PostScript (OpenType) と TrueType では、グリフのアウトラインの輪郭上の、X または Y の最小/最大値が、パスのポイント (制御点を除く) と同じ位置にある必要がある、ということです。
最小/最大値がパスのポイントと同じ位置にならないのは、以下のような場合です。
FontForge 上では、○の中に十字がある点は、輪郭上の極大点を示しています。
このように、アウトラインの輪郭の線が、ポイントの位置より外側にはみ出している場合に、"Missing Points at Extrema" のエラーが出ます。
極大点が必要な理由
TrueType などでは、グリフのアウトラインの正確な輪郭の範囲 (X/Y の座標の最小値と最大値) を、フォント内に格納します。
グリフの輪郭が、ポイントの最小値/最大値で囲まれた枠内に収まる場合は、ポイントの最小値/最大値をセットすればよいのですが、そうでない場合は、グリフの実際の輪郭を計算した上で、最小値と最大値をセットしなければなりません。
フォント上では、ポイントの最小値/最大値と、輪郭の最小値/最大値は同じでなくても構わないのですが、同じにした方がパフォーマンスが向上するということがあるため、FontForge では、同じになるように固定化しているものと思われます。
そのため、極大点がパスのポイント上にない場合は、エラーを出すというわけです。
グリフの輪郭が、ポイントの最小値/最大値で囲まれた枠内に収まる場合は、ポイントの最小値/最大値をセットすればよいのですが、そうでない場合は、グリフの実際の輪郭を計算した上で、最小値と最大値をセットしなければなりません。
フォント上では、ポイントの最小値/最大値と、輪郭の最小値/最大値は同じでなくても構わないのですが、同じにした方がパフォーマンスが向上するということがあるため、FontForge では、同じになるように固定化しているものと思われます。
そのため、極大点がパスのポイント上にない場合は、エラーを出すというわけです。
エラーを無視した場合
このエラーを無視した場合、フォント内のグリフの輪郭の範囲には、実際の輪郭上の位置ではなく、ベジェ曲線の制御点の座標がセットされていました。
パスの位置をセットすると、輪郭がはみ出してしまうので、大きめに範囲を取るために、制御点の位置を使っているのでしょう。
(輪郭が制御点より外にはみ出すことはありません)
エラーを無視しても、フォントの実用上はさほど問題はありません。
パスの位置をセットすると、輪郭がはみ出してしまうので、大きめに範囲を取るために、制御点の位置を使っているのでしょう。
(輪郭が制御点より外にはみ出すことはありません)
エラーを無視しても、フォントの実用上はさほど問題はありません。
極大点をセットする
FontForge 上では、このエラーを回避するために、「エレメント」>「極大点を追加」を使うことができます。
これを実行すると、パスのポイントからはみ出している極大点の位置に、アウトラインの形が変わらないようにして、パスのポイントを追加します。
極大点の位置を指定したりするのではなく、極大点の位置自体をパスのポイントとしてしまう、というわけです。
これを実行すると、パスのポイントからはみ出している極大点の位置に、アウトラインの形が変わらないようにして、パスのポイントを追加します。
極大点の位置を指定したりするのではなく、極大点の位置自体をパスのポイントとしてしまう、というわけです。