以前の記事では,最新の TeX Live 2019 に,高品質なオープンソース和文フォントである原ノ味フォントを埋め込む設定を整えた Docker コンテナのイメージを作成しました。
原ノ味フォントは高品質で大変ありがたいフォントでありますが,macOS ユーザの場合,慣れ親しんだ macOS 付属のヒラギノフォントを埋め込みたいという要望もあるでしょう。そこで,上記記事で作った doratex/texlive2019ja-haranoaji という汎用的イメージをベースとして,「手元の macOS ホスト環境にあるヒラギノフォントを Docker コンテナ内から使うカスタム版イメージ」を生成してみましょう。
方針としては,macOS ホスト側にあるシステムフォントディレクトリを Docker コンテナ内へマウントし,コンテナ内の TEXMFLOCAL
へとシンボリックリンクを張ることで,コンテナ内の TeX Live からホスト側のヒラギノフォントが見える状態にします。
準備
Docker Desktop for Mac の Preferences 画面の File Sharing の項目で,/System/Library/Fonts
をリストに加え,マウント可能にしておきます。
そして,Apply & Restart
ボタンを押し,Docker for Mac を再起動しておきます。
既存イメージのカスタマイズ
次に,ベースとなるイメージ doratex/texlive2019ja-haranoaji をカスタマイズしてゆきましょう。
システムフォントディレクトリをマウントしながらコンテナ内に入る
まず次のコマンドを実行してコンテナ内に入ります。コンテナには tl2019-hiragino-temp
という名前を付け,ホスト側の /System/Library/Fonts
をコンテナ内の /usr/share/fonts/SystemLibraryFonts
へとマウントしておきます。
$ docker run -it \
--name tl2019-hiragino-temp \
--mount type=bind,src=/System/Library/Fonts,dst=/usr/share/fonts/SystemLibraryFonts \
doratex/texlive2019ja-haranoaji \
/bin/bash
コンテナ内でヒラギノフォント埋め込み設定
次に,コンテナ内で,ヒラギノフォントを埋め込み設定をするため,次の一連のコマンドを実行してコンテナから抜けます。
tlmgr repository add http://contrib.texlive.info/current tlcontrib
tlmgr pinning add tlcontrib '*'
tlmgr update --self
tlmgr install \
japanese-otf-nonfree \
japanese-otf-uptex-nonfree \
ptex-fontmaps-macos \
cjk-gs-integrate-macos
cjk-gs-integrate-macos --cleanup --force
cjk-gs-integrate-macos --link-texmf --force \
--fontdef-add=$(kpsewhich -var-value=TEXMFDIST)/fonts/misc/cjk-gs-integrate-macos/cjkgs-macos-highsierra.dat
kanji-config-updmap-sys --jis2004 hiragino-highsierra-pron
luaotfload-tool -u -f
fc-cache -r
exit
これによって,コンテナ内の TEXMFLOCAL
内にホスト側のヒラギノフォントへのシンボリックリンクが作られ,ヒラギノ埋め込み設定がなされます。(cjk-gs-integrate-macos
は,通常ならば起動した macOS のバージョンを自動認識して適切なフォント設定を選んでくれますが,今はコンテナ内の Linux 環境で cjk-gs-integrate-macos
を実行しているので,ホスト側の macOS のバージョンを認識できません。それゆえ --fontdef-add
による明示指定が必要となります。)
※ mac OS のバージョンごとの違い
上記コマンド中の cjkgs-macos-highsierra.dat
と hiragino-highsierra-pron
の部分は,ホスト側 macOS のバージョンに応じて,次のように選びます。
ホスト側 macOS のバージョン | cjk-gs-integrate-macos の fontdef-add の値 | kanji-config-updmap-sys のプリセット名 |
---|---|---|
10.15 Catalina | cjkgs-macos-highsierra.dat | hiragino-highsierra-pron |
10.14 Mojave | cjkgs-macos-highsierra.dat | hiragino-highsierra-pron |
10.13 High Sierra | cjkgs-macos-highsierra.dat | hiragino-highsierra-pron |
10.12 Sierra | cjkgs-macos-sierra.dat | hiragino-elcapitan-pron |
10.11 El Capitan | cjkgs-macos-elcapitan.dat | hiragino-elcapitan-pron |
10.10 Yosemite | cjkgs-macos-mavericks.dat | hiragino-pron |
イメージとして保存
カスタマイズしたコンテナ tl2019-hiragino-temp
を,tl2019-hiragino
というイメージとして保存しておきます。tl2019-hiragino-temp
コンテナ自体はもう使わないので,終わったら削除しておきます。
$ docker commit tl2019-hiragino-temp tl2019-hiragino
$ docker rm tl2019-hiragino-temp
LaTeX 文書をコンパイルする
使い方は前回の記事と同様ですが,
- イメージとしてカスタマイズされた
tl2019-hiragino
を使う。 - イメージ生成時と同様,毎回ホスト側の
/System/Library/Font
をコンテナ内の/usr/share/fonts/SystemLibraryFonts
へとマウントして使う。
という点が違いとなります。そのため,まずエイリアスとして
alias dockertl-hiragino="docker run --rm \
--mount type=bind,src=\"\$(pwd)\",dst=/workdir \
--mount type=volume,src=ltcache,dst=/usr/local/texlive/2019/texmf-var/luatex-cache \
--mount type=bind,src=/System/Library/Fonts,dst=/usr/share/fonts/SystemLibraryFonts \
tl2019-hiragino"
などと設定しておくとよいでしょう。このエイリアスが設定されている下において,
$ dockertl-hiragino ptex2pdf -u -l hoge.tex
などとすれば,コンテナ内の TeX Live を用いて,ホストの macOS 内のヒラギノフォントを埋め込んだ PDF を生成できます。
サンプル
ソース
\documentclass[uplatex]{jsarticle}
\usepackage[deluxe]{otf}
\begin{document}
ヒラギノ明朝のW3だよ☃\par
{\bfseries ヒラギノ明朝のW6だよ☃}\par
{\gtfamily ヒラギノ角ゴシックのW3だよ☃}\par
{\gtfamily\bfseries ヒラギノ角ゴシックのW6だよ☃}\par
{\gtfamily\ebseries ヒラギノ角ゴシックのW8だよ☃}\par
{\mgfamily ヒラギノ丸ゴのW4だよ☃}\par
\end{document}
コンパイルコマンド (upLaTeX + dvipdfmx)
$ dockertl-hiragino ptex2pdf -u -l hoge.tex
コンパイル結果
きちんとヒラギノフォントが埋め込まれていますね!