Ticket #37610

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

Date d'ouverture: 2017-10-29 16:36 Dernière mise à jour: 2017-11-01 19:18

Rapporteur:
Propriétaire:
(Aucun)
Type:
État:
Ouvert
Composant:
(Aucun)
Jalon:
(Aucun)
Priorité:
5 - moyen
Sévérité:
5 - moyen
Résolution:
Aucun
Fichier:
Aucun

Détails

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を使う必要があります。

Ticket History (3/8 Histories)

2017-10-29 16:36 Updated by: zrbabbler
  • New Ticket "palt有効のグリフの周囲にkanjiskipが入らない" created
2017-10-29 16:37 Updated by: zrbabbler
Commentaire

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

2017-10-29 17:23 Updated by: h7k
Commentaire

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 Updated by: h7k
Commentaire

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

2017-10-29 20:35 Updated by: kmaeda
Commentaire

commit 6ff06d4

push しましたか?

2017-10-29 20:57 Updated by: h7k
Commentaire

commit 6ff06d4

push しましたか?

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

2017-11-01 16:25 Updated by: zrbabbler
Commentaire

グリフ間に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 Updated by: h7k
Commentaire

ちょっと厄介そうです。

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

Attachment File List

No attachments

Modifier

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Connexion