マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

Windows な XeTeX で TEXMFLOCAL なフォント名する方法

オレ的メモ。(“真っ当な方法”が何なのかは不明。)

前提

TeX Live/Windows 上で XeTeX を使っている。

問題

通常は、XeTeX 上で「フォント名で(ファイル名ではなく)指定できるフォント」は、そのファイルが以下のディレクトリにあるものに限られる。*1

※ファイル名で指定する場合は、通常の Kpathsea の検索に従う。

すなわち、$TEXMFLOCAL に置いたフォントファイルは、ファイル名では指定できるが、フォント名では指定できない、ということになる。これは不便なので、$TEXMFLOCAL に置いたフォントをフォント名で指定できるようにしたい。

解決方法

  1. 以下の内容のファイル local.conf を作成する。ここで <dir>〜</dir> に対象となるディレクトリのフルパス名を書く。

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
    <dir>C:/texlive/texmf-local/fonts/opentype</dir>
    <dir>C:/texlive/texmf-local/fonts/truetype</dir>
    </fontconfig>
    

    ※ここでは $TEXMFLOCAL 以下の opentype および truetype ディレクトリを指定したが、$TEXMFHOME 以下のディレクトリでもよいし、また他の任意のディレクトリでもよい。

  2. このファイルを $TEXMFVAR/fonts/conf/local.conf として配置する。
    ※$TEXMFVAR/fonts/conf は既に存在するはずである。

  3. fc-cache -v -r」を実行する。

これで、local.conf に書いたディレクトリの各々とその下位のディレクトリが「フォント名による指定」の検索対象に入る。

※ $TEXMFVAR を手動で触るのは気持ちが悪いが、他の TEXMF ツリーに配置したのでは認識されないようである。(恐らく、fc-cache は Kpathsea とは無関係なため。)

解説

Windows 上の XeTeX は Fontconfig(の Windows への移植)を利用してフォントを検索している。*2設定ファイルの配置ディレクトリは $TEXMFVAR/fonts/conf である。

$TEXMFVAR/fonts/conf にある fonts.conf をみると、コメントで

  To use "local.conf" for additional directories is recommended.

と書いてあり、また conf.d ディレクトリの中には 51-local.conf(“local.conf”の読込を指示するもの)だけが置かれている。

なので結局、追加の設定は $TEXMFVAR/fonts/conf/local.conf に書くのが正しい、ということになりそう。

*1:LuaTeX + luaotfload の場合はまた話が違う。

*2:Linux 上の XeTeX は OS の Fontconfig を利用していて、macOS 上の XeTeX は OS の機能を利用している。