InDesignに標準テキストをペーストしたときの挙動と謎の整理

  • InDesign CS、CS2、CS3に標準テキストをペーストしたときの振る舞いについて、簡単にまとめてみた。
  • 下図の左端の列が、オリジナルのテキスト。これを標準テキスト・モードのJedit Xでコピーし、InDesign CS、CS2、CS3にペーストした結果が2列目以降。ペースト後に符号位置が変わっている場合、赤字で示した。また、字形が変わっている場合、黄色地で示した。


  • 網羅的に検証したわけではないが、今回のサンプルから得られた結果を見た限りでは、CSはNFKC (Normalization Form KC)で正規化し、CS2は正規化を行わず、CS3はNFC (Normalization Form C)で正規化しているようだ。
  • OpenTypeフォントはグリフ置換用のテーブルを内蔵しているが、そのテーブルは、図の1行目(aと結合グレーブ・アクセント)のような最も基本的な合成についてはカバーしておらず、この合成(グリフ置換)処理はOS任せとなっている。その結果、InDesignのようにプラットフォーム独立であることを求められるアプリケーションでは、このような合成処理を(Mac OS X版であればAATのライブラリを用いることなく)独自実装しなければならない。しかし、独自実装は容易ではない。そこで、入り口のところで正規化して、結合文字列は合成済み文字に置換してしまおう……という考え方は、わかる気がする。
  • しかし、CSはなぜNFKCを使うのだろう。乱暴に言えば、NFKCというのは「意味が同じなら見た目が違っても統一する」という正規化であって、検索やソートなどの用途を想定しているものと思われる。どう考えても、組版アプリケーションで使うようなものではない。なぜ、より適切なNFCを使わないのだろう(実際にはNFCにも問題があるので、「互換漢字を例外としたNFC」が望ましいと思うが)。
  • CS2はなぜ正規化を行わないのだろう。もちろん正規化は決して必須ではないのだが、CSとCS2のギャップがあまりにも大きい。分音記号(ダイアクリティカル・マーク)付きラテン文字のことを考えるなら、繰り返しになるが、「互換漢字を例外としたNFC」あたりが適当ではないかという気がする。
  • CS3はなぜNFCを使うのだろう。すでに述べたように、NFCはNFKCよりは穏当だが、互換漢字の問題が残る。また、InDesign CS3は、CS2以前のバージョンとは異なり、結合文字処理を独自に実装している。これを実現したのなら、もう正規化など必要ないのではないかと思うのだが、なぜ今さら、一度は捨てた正規化を採用したのだろう。