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

チケット #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" となっている)ので, 別の処理を考える必要があります.

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

2017-09-23 09:49 更新者: h7k
  • 新しいチケット "縦組時のグリフの高さ" が作成されました
2019-07-24 23:53 更新者: h7k
  • 解決法なし から 修正済み に更新されました
  • 詳細が更新されました
コメント

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

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

2019-07-25 00:00 更新者: h7k
コメント

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

添付ファイルリスト

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

編集

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