paltは結局kernに帰着されているようだけど、それが原因?
paltは結局kernに帰着されているようだけど、それが原因?
LuaTeX-ja の和文処理グルーの挿入処理を行う直前(luaotfload による処理が加わった後)では
MB> 1 kern 1 -0.31pt MB> 0 glyph 256 オ 63 (7.7+0.17)x10.0 MB> 1 kern 1 -0.78pt MB> 1 kern 1 -0.11pt MB> 0 glyph 256 ー 63 (4.23+0.0)x10.0 MB> 1 kern 1 -0.3pt MB> 1 kern 1 -0.21pt MB> 0 glyph 256 デ 63 (8.1+0.68)x10.0 MB> 1 kern 1 -0.21pt MB> 1 kern 1 -1.66pt MB> 0 glyph 256 ィ 63 (5.62+0.58)x10.0 MB> 1 kern 1 -1.92pt MB> 1 kern 1 -0.31pt MB> 0 glyph 256 オ 63 (7.7+0.17)x10.0 MB> 1 kern 1 -0.78pt MB> 0 glyph 256 愛 63 (8.4+0.78)x10.0 MB> 0 glyph 256 好 63 (8.35+0.77)x10.0 MB> 0 glyph 256 家 63 (8.37+0.8)x10.0のようになっており,グリフとグリフの間に位置補正用の kern が2つ入っています. これらの kern は和文処理グルーの挿入処理を飛ばすためフラグが立っています(最初の列の「1」)が, LuaTeX-ja ではそういうグルーが2つ以上続いた場合を想定していなかったと思います.
commit 6ff06d4 だとどうなるでしょうか?
commit 6ff06d4
push しましたか?
commit 6ff06d4
push しましたか?
おっと,push し忘れていました.先程 push しました.
グリフ間にkanjiskip(2pt plus 2pt)が入ることを確認しました。
(略) ....\hbox(0.0+0.0)x9.24713, direction TLT ....\kern -0.28667 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 オ ....\kern -0.72128 ....\kern -0.10172 ....\penalty 10000 ....\glue 2.0 plus 2.0 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 ー ....\kern -0.27742 ....\kern -0.19418 ....\glue 2.0 plus 2.0 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 デ ....\kern -0.19418 ....\kern -2.2748 ....\penalty 150 ....\glue 2.0 plus 2.0 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 ィ ....\kern -1.77545 ....\kern -0.28667 ....\glue 2.0 plus 2.0 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 オ ....\kern -0.72128 (略)
しかし、よく考えてみると、「paltでプロポーショナル組をしよう」とする場合、単純にkanjiskipを入れたでは適切ではなかったようです。
例えば「ーデ」の間は次のようになっていて、この場合は \kern -0.19418 の箇所で行分割可能となります。
....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 ー ....\kern -0.27742 ....\kern -0.19418 ....\glue 2.0 plus 2.0 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 デ
例えば「ディ」の間は次のようになっていて、この場合は \penalty 150 の箇所で行分割可能となります。 (2つ目のカーンの後だからさっきとは異なる。)
....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 デ ....\kern -0.19418 ....\kern -2.2748 ....\penalty 150 ....\glue 2.0 plus 2.0 ....\norule(8.13748+1.10965)x0.0 ....\JY3/SourceHanSerif-Regular.ttc(0)/m/n/10 ィ
そして期待される状態は、恐らく「paltのカーンはグリフと分離せずに消滅もしない」ということなんだと思います。
ちょっと厄介そうです。
ちょっと厄介そうです。
調べていませんが,palt によるカーンと,kern によるカーンがなんとかして区別できないと完全な解決は無理なのかなあ……という気がしています. palt によるカーンは,最悪(負の幅が許されるかもわかりませんが)\novrule に置き換えれば non-discardable になります.
palt(pwidではなく)を有効にしたグリフの周囲で本来kanjiskipが入るべき場所で入らない場合があるようです。
※Source Han Serifは仮名文字のpwidはサポートしていないようなので、プロポーショナル組をしたいという場合、paltを使う必要があります。