「スラッシュを用いた分数」の仕様変更

  • Adobe-Japan1フォントには、分数に関して4つのスタイルが用意されている。下図は「1/2」を例としたもの。3番目の「斜め型・グリフの動的合成」以外については、前回のエントリでも触れた。


  • OpenTypeフォントには、分数に関するフィーチャとして、'afrc'(分数)、'frac'(スラッシュを用いた分数)、'numr'(分子)、'dnom'(分母)がある。Proフォントでは、これらのフィーチャによる置換結果は、各スタイルと下図のように対応する。


  • 一方、Mac OS X 10.5以降に付属するヒラギノProNやAdobe CS4に付属する小塚Pr6Nなどでは、'frac'(スラッシュを用いた分数)の仕様が、下図のように変更されている。常識的に考えてJISの例示字形と'frac'の仕様は関係なさそうなので、たぶん単純にヒラギノProNや小塚Pr6Nのほうが新仕様なのだろう。


  • 旧仕様のフォント(小塚Proなど)で作成したドキュメントに'frac'フィーチャが使われていた場合、新仕様のフォント(小塚Pr6Nなど)に変更すると、分数の幅が変わりオーバーフローなどを起こす危険がある。また、(あまりやらないとは思うが)文中のすべての分数を一発で置換する目的でテキスト全体に'frac'フィーチャが適用されていた場合、新仕様のフォントに変更すると、分数ではない数字まで上付き数字(分子)に置換されてしまう。下図は「1+2/3」というテキストに'frac'を適用した結果を示す。赤字は置換されたグリフ。


  • 'frac'フィーチャの新仕様のロジックは、次のとおり*1
feature frac {
  @NUMERATOR = [\9377 \160 \157 \158 \9378 \9379 \9380 \9381 \9382 \9383];
  @DENOMINATOR = [\9384 \9385 \9386 \9387 \9388 \9389 \9390 \9391 \9392 \9393];
  substitute [\16 \246 \663 \8261 \9459 \9547 \9755 \9775] by \104;
  substitute [\17 \247 \780 \9384 \9460 \9704 \9738 \9758 \9872 \12661] by \9377;
  substitute [\18 \248 \781 \9385 \9461 \9705 \9739 \9759 \9873 \12662] by \160;
  substitute [\19 \249 \782 \9386 \9462 \9706 \9740 \9760 \9874 \12663] by \157;
  substitute [\20 \250 \783 \9387 \9463 \9707 \9741 \9761 \9875 \12664] by \158;
  substitute [\21 \251 \784 \9388 \9464 \9708 \9742 \9762 \9876 \12665] by \9378;
  substitute [\22 \252 \785 \9389 \9465 \9709 \9743 \9763 \9877 \12666] by \9379;
  substitute [\23 \253 \786 \9390 \9466 \9710 \9744 \9764 \9878 \12667] by \9380;
  substitute [\24 \254 \787 \9391 \9467 \9711 \9745 \9765 \9879 \12668] by \9381;
  substitute [\25 \255 \788 \9392 \9468 \9712 \9746 \9766 \9880 \12669] by \9382;
  substitute [\26 \256 \789 \9393 \9469 \9713 \9747 \9767 \9881 \12670] by \9383;
  substitute [\104 @DENOMINATOR] @NUMERATOR' by @DENOMINATOR;
} frac;

*1:http://www.adobe.com/devnet/font/で公開されてる「Building JIS2004-Savvy OpenType Fonts」中の「aj15-gsub-jp04+8.txt」より。