参照に関する警告

各種のフォントフォーマットには参照の使用方法に関する制限があり、その内容はそれぞれ少しずつ異なっています。だからと言って、参照を使うなと言いたいわけではありません——たとえフォントフォーマットのサポートによって直接それを扱えない場合でも、参照が情報をカプセル化する有用な方法であることに変わりありません。グリフ参照を参照の形のままでフォントに書き出せない場合でも、FontForge はなんとかして問題を解決しようと試みます。具体的な解決策としては、参照をそれと等価なアウトラインに置き換えるのが普通です。

最もありふれたフォントフォーマットについて確認してみましょう:

TrueType
  TrueType では、任意のグリフを参照することができます。また、TrueType では参照に適用される可能性がある線形変換のほとんど全ての範囲をサポートしていますが、参照を 200% 以上 (または -200% 以下) の比率で拡大したときには、TrueType では表現不可能です。

  また、TrueType は、アウトラインと参照との混在をサポートしていません。

  あるグリフに使用できない参照が 1 つでも含まれている場合 (または、アウトラインと参照が混在している場合)、グリフに含まれる全ての参照が出力時にアウトラインに変換されます。

  結論を言えば、グリフ内に含まれる命令はすべて意味を失い、参照されているグリフに含まれる参照されたグリフに含まれることを意味します。
  注意: 一般的な変換がサポートされているからと言うだけで、それを使用するのは常によい考えであるわけではありません。参照を反転すると、ラスタライザはたぶんそれに対して困難を抱えることになるでしょう (輪郭線の向きが正しい方向の逆になるでしょう)。参照を回転すると、そこに含まれる命令はおそらくは正しく働かなくなるでしょう。

Type1
  Type1 (および Type2) フォントは、参照に適用することのできる変換は平行移動だけであり、拡大/縮小・回転・反転は許されないという根本的な制限があります。Type1 フォントでは、参照を使用するための機構として 2 つの異なる方式が用意されています。最初の方式は説明が最も簡単です。

  あるグリフに、Adobe 標準エンコーディングに属する文字への参照 2 個だけが含まれでいて、そのうちのどちらかの参照に適用されている変換行列が単位行列であり (すなわち、移動・拡大/縮小・反転などが一切行われていない)、もう片方は平行移動しか行われていない (移動量が 0 でも構いませんが、拡大/縮小・回転・反転などは不可) という条件が満たされているときに限って、FontForge はこれら 2 つを参照として書き出すことができます (それには‘seac’命令を使います)。CID キー指定フォントはこれをサポートしていません。
  これから解ることは、この方式の参照はラテン文字以外の用字系には役に立たないということです (ラテン文字とその他の用字系で共有されているグリフは除きます。ラテン文字の A と同じ形のグリフをギリシャ文字やキリル文字で使うのはよくあることです)。
  FontForge はちょっとした拡張を行っており、平行移動を含まない 1 個の参照のみからなるグリフがある場合、FontForge は空白へのダミー参照を追加して、参照の個数がちゃんと 2 個になるようにします。

  第 2 のフォーマットはある意味ではより汎用的ではありますが、上記の方式に比べて一層複雑な制約条件を満たしている必要があります。PostScript フォントには、いくつかのグリフで共用される輪郭を定義するのに使用可能な“サブルーチン”の概念があります。FontForge のアルゴリズムは極めて複雑で、どのようにしてグリフ参照を行ったかによっても結果が変わります。しかし基本的には、あるグリフがヒント置換も flex ヒントも含んでいないならば、そのデータをサブルーチンに置くことができます。それらが含まれている場合は、平行移動を行わないときに限りサブルーチン化可能です。複数の参照を含むグリフでは、ある参照をサブルーチン化できない場合でも、その他の参照はサブルーチン化できる可能性があります (TrueType では常に全て参照にするかしないかのどちらかに限られるが、PostScript ではそうとは限らないということです)。参照をサブルーチン化できない場合でも、(参照先のグリフが参照を含む場合であれば) 一部の構成要素をサブルーチン化できることもあります。

  FontForge は‘seac’を参照の定義と解釈しますが、サブルーチン呼出しは参照とは見なしません。いったん Type1 フォントを読み込んでから `編集(E)`→`参照に置換` を使用してください。

Type2 (“OpenType”)
  Type1 と同様に、参照は平行移動のみが可能 (拡大/縮小、回転などは不可) です。Type2 は‘seac’命令と等価なメカニズムは全く存在しません (まあ、無いことはないのですがその命令は廃止されているので FontForge はそれを出力しないことにしています) が、サブルーチンはサポートしています。

  Type2 では、参照されたグリフ記述をサブルーチンに置くことができるのは、ヒント置換が全く含まれていない場合か、ヒント置換を含む参照が元と同じ位置に置かれ、最後以外の構成要素にはヒントが全く含まれていない場合に限られます。Type1 と同様、部分的に参照を使用することができます。

  FontForge は Type2 (OTF, CFF, CEF, GAI) フォントの読み込み時に参照をいっさい認識しません。フォントを読み込んだ後に `編集(E)`→`参照に置換` を使用してください。

Type3
  参照に関する制約は存在しません。
SVG
  参照を取り扱う手軽な方法は存在しないようです。