2021-01-18 9:00 JST 〜 メンテナンスによるサービス全停止予定

チケット #37610

palt有効のグリフの周囲にkanjiskipが入らない

登録: 2017-10-29 16:36 最終更新: 2017-11-01 19:18

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

palt(pwidではなく)を有効にしたグリフの周囲で本来kanjiskipが入るべき場所で入らない場合があるようです。

  1. % plain LuaTeX; UTF-8
  2. \input luatexja.sty
  3. \ltjsetparameter{kanjiskip=10pt}
  4. \jfont\jA={file:SourceHanSerif-Regular.ttc(0):jfm=prop;-kern;-palt}
  5. \jA オーディオ愛好家
  6. \jfont\jB={file:SourceHanSerif-Regular.ttc(0):jfm=prop;-kern;+palt}
  7. \jB オーディオ愛好家
  8. \jfont\jC={file:SourceHanSerif-Regular.ttc(0):jfm=prop;+kern;+palt}
  9. \jC オーディオ愛好家
  10. \bye

※Source Han Serifは仮名文字のpwidはサポートしていないようなので、プロポーショナル組をしたいという場合、paltを使う必要があります。

チケットの履歴 (8 件中 3 件表示)

2017-10-29 16:36 更新者: zrbabbler
  • 新しいチケット "palt有効のグリフの周囲にkanjiskipが入らない" が作成されました
2017-10-29 16:37 更新者: zrbabbler
コメント

paltは結局kernに帰着されているようだけど、それが原因?

2017-10-29 17:23 更新者: h7k
コメント

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つ以上続いた場合を想定していなかったと思います.

2017-10-29 17:36 更新者: h7k
コメント

commit 6ff06d4 だとどうなるでしょうか?

2017-10-29 20:35 更新者: kmaeda
コメント

commit 6ff06d4

push しましたか?

2017-10-29 20:57 更新者: h7k
コメント

commit 6ff06d4

push しましたか?

おっと,push し忘れていました.先程 push しました.

2017-11-01 16:25 更新者: zrbabbler
コメント

グリフ間に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のカーンはグリフと分離せずに消滅もしない」ということなんだと思います。

ちょっと厄介そうです。

2017-11-01 19:18 更新者: h7k
コメント

ちょっと厄介そうです。

調べていませんが,palt によるカーンと,kern によるカーンがなんとかして区別できないと完全な解決は無理なのかなあ……という気がしています. palt によるカーンは,最悪(負の幅が許されるかもわかりませんが)\novrule に置き換えれば non-discardable になります.

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする