待辦事項 #37531

縦組時のグリフの高さ

啟用日期: 2017-09-23 09:49 最後更新: 2019-07-25 00:00

回報者:
負責人:
(無)
類型:
狀態:
開啟
元件:
(無)
里程碑:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
修正
檔案:

細節

Twitter 上の これこれ で報告されている Source Han Serif の 〳〵 が LuaTeX-ja で組むと

  • 横組ではリガチャ になり,周りの文字より上下に高いグリフが使われる
  • 縦組でもリガチャ になるが,標準メトリックにはこのグリフ用の専用クラスがないので「幅1全角」とみなされ,周りの文字と重なる

となります(リガチャ抑制は 〳\null 〵 とか 〳\penalty0〵 とかでできる). 標準メトリック jfm-ujisv.lua に専用の文字クラスを

t[200]=table.fastcopy(t[0])
t[200].chars={'〱', '〲'}
t[200].width = 2
for i,v in pairs(t) do
  if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
    if v.glue and v.glue[0] then v.glue[200] = v.glue[0] end
    if v.kern and v.kern[0] then v.kern[200] = v.kern[0] end
  end
のように作れば,縦組で は2文字分の幅を専有しますが,それでもグリフ自体は確保された領域から半角分だけ上にずれ,前の文字と重なってしまう症状が発生しています.


これは縦組時のグリフの高さを固定値 (fontloader で言うところの ascent) だと仮定してしまっているためです. OpenType フォントの VORG テーブルを使えれば最も簡単ですが,luafontloader も luaotfload も VORG テーブルを読まない(後者は "todo" となっている)ので, 別の処理を考える必要があります.

Ticket History (3/3 Histories)

2017-09-23 09:49 Updated by: h7k
  • New Ticket "縦組時のグリフの高さ" created
2019-07-24 23:53 Updated by: h7k
  • Details Updated
  • 處理結果 Update from to 修正
評語

luafontloader も luaotfload も VORG テーブルを読まない(後者は "todo" となっている)ので, 別の処理を考える必要があります.

以前は t[200].left = -0.5 のように手動で適当に調整していました.しかし luaotfload v2.9902-2019-07-24 で縦組時のグリフの原点位置を知ることができるようになったので,d63cda7 でその情報を使うように書き換えました.

2019-07-25 00:00 Updated by: h7k
評語

ふと思ったのですが,「縦組時のグリフの原点位置(VORG テーブル相当の内容)を無視する」挙動への需要はあるのでしょうか?

Attachment File List

No attachments

編輯

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