Hatena::ブログ(Diary)

アセトアミノフェンの気ままな日常

2015-10-05

TeX で OpenType Collection フォントを扱ってみると(その3)

昨日の記事で「(x)dvipdfmx で OTC が(一部微妙な点があるとはいえ)サポートされたのは 2015 年 4 月末から」であることが判明した。pTeX / upTeX が事前にメトリクス (TFM) がある前提で map ファイルを元にフォントを参照する仕組みであるのに対し、XeTeX はフォントをシステムから見つけ出して自動でメトリクスを読み取る仕組みになっている。LuaTeX も自動でメトリクスを取得する能力を持つうえ、XeLaTeX も LuaLaTeX も通常 fontspec のインタフェースを使ってフォントを指定するという点でも共通している。では、LuaTeX で OTC を扱ってみるとどうか?

LuaTeX の場合

LuaTeX の場合は、LuaTeX-ja のチケットStack Exchange での質問にもあるとおり、OTC に非対応である。ソースは XeTeX の場合と同じものを用いることができる。

\documentclass{bxjsarticle}
\usepackage{fontspec}
\setmainfont{SourceHanCodeJP-Regular}
\begin{document}
これは源ノ角ゴシックCode JP Rです。
\end{document}

これを LuaLaTeX で処理すると、xdvipdfmx と同じく

sfnt: table not found

というエラーで終了してしまう。…ん? なんか (x)dvipdfmx とエラーの書式が同じだぞ? おやおや…?

それもそのはず、今回はじめて知ったのだが

LuaTeX と xdvipdfmx はフォントの取り扱い(特に PDF へ書き込む段階)についてほとんどソースコードが共通なのである! というわけで、LuaTeX 側のソースを見てみよう。たとえば現在の LuaTeX に入っている writetype2.w を dvipdfmx の cidtype2.c と比べてみると、r37053 で入った「TTC のうち CFF なもの(すなわち OTC)」に対する例外処理が入っていないように見える(そのせいで sfnt.w に書かれている sfnt: table not found なるエラーが出現する)。

LuaTeX が dvipdfmx のソースを取り込んだのは半年以上前らしく、まだ4月の変更が反映されていないと見えるのである。このことがわかれば、あとは LuaTeX 開発陣にはたらきかけて修正してもらえば、少なくともヒラギノの OTC を LuaTeX-ja で扱えるようになると期待できるのである。…なんだか初めて開発者として貢献できたような気分がする。

追記:この報告からわずか半日で、北川さんによる OTC 対応パッチが提供された! これにより、本記事で例示した Source Han Code JP のみならず Source Han Sansヒラギノなどの OpenType Collection フォントを LuaTeX で扱えるようになった。これは開発版 LuaTeX リポジトリr5330 として既に experimental branch にコミットされている。TeX Live にいずれは反映されると期待したい。なお、SVN5330 を取得すれば自力でビルドして楽しむことも可能である(方法は次回解説)。このとき、luaotfload も CTAN の最新バージョン 2.5-4 (2014-08-10) より新しい開発版に更新する必要があるかもしれない(Segmentation fault などのよく分からない挙動を防ぐため)。

追記 (2015-10-07):r5336 で experimental branch が trunk にマージされた。現在 LuaTeX-0.81 リリース直前のテスト中で、既に TeX Live 側のリポジトリのほうも r38575 でこの LuaTeX 開発版 trunk と sync している。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

Connection: close