Re: CJKフォントのpalt(詰め組)とkernの関係

村上です。

> 現在の、典型的な日本語OpenTypeフォントを用いた場合、「ツメ組」用の疑似的なプロポーショナルメトリクスに切り替える役割をもつ'palt'及びその縦組み用の'vpal'の情報とカーニングテーブルの'kern'及び'vkrn'をもっている場合には、利用者がアプリケーションからその両方を有効にした場合には、組み方向に応じて、横組みの時には横組みの'palt'と'kern'の情報が用いられ、縦組み時には'vpal'と'vkrn'の情報が用いられます。つまりツメ組もカーニングも、共に自動的に、組み方向に応じて切り替わります。それによって、どちらの組み方向でも、フォント開発者が組み方向ごとに設定したとおりの仮名ツメの効果と、ペアカーニングの効果が得られるようになっています。



これについて、CSSの現在の仕様とChromeなどでの実装において、それが実現されていないのが問題だと感じています。

現状では、ツメ組用のプロポーショナルメトリクスを利用するには font-feature-settings プロパティで横組なら 'palt'、縦組なら 'vpal' を指定する必要があります。組方向で自動的に変わることはなくて不便です。CSS仕様ではこの font-feature-settings プロパティについて次の記述があります(https://drafts.csswg.org/css-fonts-4/#font-feature-settings-prop)。

> This property provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.
(このプロパティは、OpenTypeフォント機能に対する低レベルの制御を提供する。これは、広く使用されていないが、特定のユースケースで必要とされるフォント機能へのアクセスを提供する方法として意図されている。)

日本語のツメ組が「広く使用されていない」というのにはとても疑問です。
ツメ組を簡単に指定できるCSSプロパティがあるべきです。あ、ありました。font-kerningプロパティです。
https://drafts.csswg.org/css-fonts-4/#font-kerning-prop 

font-kerningプロパティでカーニングを有効にしたとき(font-kerning: normal を指定)、OpenTypeの 'kern' だけではなく 'palt' も on になるとよいです(縦書きでは 'vkrn' と 'vpal')。最新のFirefox(開発版)を試したところ、そのようになってました。すべてのブラウザでこの仕様に統一してほしいです。

そして font-kerningプロパティの初期値 auto では日本語文字について 'palt' も 'kern' も off であるべきです。現状の Chrome では、デフォルトで日本語についても 'kern' がonになるので、ツメ組にしたいわけではないのに、ひらがなやカタカナの特定の組み合わせでだけ文字間が詰まってしまう問題があります。

現状の Chrome のデフォルトの動作('palt' が off で 'kern' が on)が必要とされることはまずないでしょう。
また、ツメ組にするがペアカーニングは行わない('palt' が on で 'kern' が off)もあまり必要性がなさそうに思います。
ですので、デフォルトの font-kerning: auto では欧文はカーニングするけど日本語はカーニングしない、ツメ組にするなら font-kerning: normal を指定('palt' と 'kern' ともに on)、ベタ組で欧文カーニングもしないようにするには  font-kerning: none を指定('palt' と 'kern' ともに off)でよいと思います。
(もしもそれ以外の指定をしたいことがあれば font-feature-settings で直接 OpenType feature を指定するのでよいでしょう。)


ぜひそのように CSS font-kerningプロパティの仕様が明確になって、すべてのブラウザでそれが利用できるようになることを期待します。


----
村上 真雄 (MURAKAMI Shinyu)
Vivliostyle Foundation



> On Dec 9, 2022, at 16:04, Taro Yamamoto <tyamamot@adobe.com> wrote:
> 
> 
>> ひとつのドキュメントに縦組用と横組用のカーニングテーブルがあったとします.その場合,ドキュメントを見る人が表示を縦組にしたら縦組用のテーブルが適用され,表示を横組にしたら組用のテーブルが適用されるということになるのでしょうか?
> 
> この議論でこれまでカーニングテーブルと呼んできたものは、少なくとも私が考えてきたものは、フォント側に埋め込まれているカーニングテーブルを意味しています。アプリケーション側が、フォント内の情報とは別にもっていたり利用者がカスタマイズできるようにしている、フォントのレベルよりも上位の層の、アプリケーションレベルのカーニングテーブルのことではありません。
> 
> OpenTypeフォントの場合、その情報は横組み用はGPOSテーブルの'kern'に、縦組み用は'vkrn'にもたせることができます。(ただし、これはフォント開発者がそれを設定してフォントに埋め込まなければなりません)。
> 
>> あるいは,表示の組方向の変更にしたがって,SCCで設定を自動的に変えるというか,変わるということが可能でしょうか?
> 
> 現在の、典型的な日本語OpenTypeフォントを用いた場合、「ツメ組」用の疑似的なプロポーショナルメトリクスに切り替える役割をもつ'palt'及びその縦組み用の'vpal'の情報とカーニングテーブルの'kern'及び'vkrn'をもっている場合には、利用者がアプリケーションからその両方を有効にした場合には、組み方向に応じて、横組みの時には横組みの'palt'と'kern'の情報が用いられ、縦組み時には'vpal'と'vkrn'の情報が用いられます。つまりツメ組もカーニングも、共に自動的に、組み方向に応じて切り替わります。それによって、どちらの組み方向でも、フォント開発者が組み方向ごとに設定したとおりの仮名ツメの効果と、ペアカーニングの効果が得られるようになっています。
> 
> 山本太郎
> 

Received on Friday, 9 December 2022 10:32:38 UTC