Hatena::ブログ(Diary)

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

2015-10-06

LuaTeX で一部の TTC/OTC フォントが扱えない?

昨日の LuaTeX の進歩で、OpenType Collection (OTC) フォントであるヒラギノや游明朝を LuaTeX で PDF に埋め込むことができるようになった。しかし、ここで一つ新たな問題点が見つかった。「いくつかの TTC/OTC フォントが、LuaTeX で埋め込めない」のである。これには2種類の現象が確認されている。

Windows の一部の TTC フォントについて(開発版は修正済み)

Windows バンドルの TrueType Collection フォントの一部 (batang.ttc, gulim.ttc, simsun.ttc) は、TeX Live 2015 に入っている LuaTeX-0.80.0 + luaotfload 2.5-4 (2014-08-10) で PDF への埋め込みに失敗する。たとえば以下のソース。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{SimSun} % または \setmainfont{simsun.ttc}
\begin{document}
SimSun宋体字
\end{document}

SimSun とは simsun.ttc のインデックス0番のフォントの PostScript Name である。この場合のエラーがかなりわかりくい。

<c:/windows/fonts/simsun.ttc(bad-fontname-simsun:-1)Invalid TTC index number

メーリスの中で kmaeda さんに調べていただいたところによると、これは「何らかの事情でフォント名の読み取りに失敗した場合にフォールバックとして bad-fontmane-* という実在しない名前を付けて LuaTeX に渡し、それを見つけられない LuaTeX にインデックス -1 番と返させて落とす」ということらしい。既に2014年の段階で報告されており、CTAN にアップロードされている luaotfload では未だに直っていなかったというわけだ。幸い、開発版のほうで試してみると SimSun を正常に埋め込むことができるようになっていた。

待っていればそのうち CTAN に新バージョンが入るだろうとは思うが、先取りしたい場合は開発版リポジトリから luaotfload をとってきて適切に TEXMFLOCAL 以下に配置すればよい。

  • src と misc の中身を TEXMFLOCAL/texmf/tex/luatex/luaotfload へ
  • scripts の中身を TEXMFLOCAL/texmf/scripts/luaotfload へ

のように置けば認識してくれるそうだ(Thanks: doraTeX さん)。

OS X (Mac) El Capitan の一部の OTC フォントについて(現在検証中)

まずこれを試すには北川さんによるパッチを施した LuaTeX-0.80.1 (dev) SVN5330 をビルドする必要がある(末尾の補足参照)。この開発版 LuaTeX + luaotfload 開発版をもってしても、以下の OTC フォントを埋め込もうとすると

</Users/Shared/TeXLive/texmf/fonts/opentype/klee/Klee.ttc(AppleKlee-Medium:-1)Invalid TTC index number

というこれまた同じようなエラーが出るらしい(本実験は doraTeX さんによる)。

  • HiraginoSans-W{0,1,2,4,5,7,9}
  • Klee-{Medium,Demibold}
  • TsukuARdGothic-{Regular,Bold}
  • TsukuBRdGothic-{Regular,Bold}

現在、日本の TeX 開発コミュニティのメーリスでこの問題について精査中であるが、実はパッケージ側がコード修正を行わずとも“とりあえずは強引にフォントを埋め込める方法”というのが存在する。少々長くなりそうなので、次回に回すことにしよう。

追記 (2015-10-07):luaotfload の内部で PostScript Name をフォントから読み取ってキャッシュに書き込む処理に問題があったことが判明し、修正するパッチが完成した(Thanks: kmaeda さん)。このパッチを適用すれば、LuaTeX で El Capitan 搭載の OTC フォントを含むおそらく全てのフォントを正しく扱えるようになる見込み。

補足:LuaTeX のビルド方法 (SVN5330)

kmaeda さんにビルド方法を教えていただいたので、それを簡単にここに書いておく。僕は Cygwin でビルドしたが、LinuxOS X でも同様にビルド可能だそうだ。なお、あらかじめ svn (subversion) と makeinfo (texinfo) が入っていることを確認した方がよいかもしれない。また、最初のコマンド実行時に求められるパスワードについてはここを参照。

$ svn checkout -r 5330 --username anonsvn https://foundry.supelec.fr/svn/luatex/trunk
$ cd trunk
$ CFLAGS="-O2 -march=native" CXXFLAGS=$CFLAGS ./build.sh --parallel --jit      <= OS X では末尾に --clang も付ける

これでビルドが成功すれば luatex と luajittex のバイナリが生成しているはずである。

$ cd build/texk/web2c      <= OS X では build-clang/texk/web2c に生成
$ ls -l luatex luajittex

これを TeX Live 2015 のツリーに配置する(元々あった luatex, luajittex はリネームして退避させておくと安心)。そして、フォーマットファイルを更新する。

$ fmtutil-sys --byfmt luatex      <= Linux, OS X では sudo 必要
$ fmtutil-sys --byfmt lualatex    <= Linux, OS X では sudo 必要

これで Source Han Sans などの OTC フォントを扱えるようにはなるはずである。

続く

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


画像認証