LoginSignup
5
6

More than 3 years have passed since last update.

macOS 付属のヒラギノフォントを Docker コンテナ内の TeX Live から使えるようにする

Last updated at Posted at 2020-01-05

以前の記事では,最新の 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 をリストに加え,マウント可能にしておきます。

名称未設定2.png

そして,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

コンテナ内でヒラギノフォント埋め込み設定

次に,コンテナ内で,ヒラギノフォントを埋め込み設定をするため,次の一連のコマンドを実行してコンテナから抜けます。

 ホスト側が macOS  10.13  High  Sierra  以降の場合
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.dathiragino-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 を生成できます。

サンプル

ソース

hoge.tex
\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

コンパイル結果

スクリーンショット 2020-01-05 15.48.14.png

きちんとヒラギノフォントが埋め込まれていますね!

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6