LaTeXとTravis CIでヒラギノフォント埋め込みPDFを作る

# 注意

この記事で紹介しているテクニックを用いて作成した文書を、配布したり販売したりしてよいかについては現在調査中であるので、この記事の内容はあくまでも「そういうこともできる」程度に考えて欲しい。また、もしTravis CIで作成した成果物のライセンスなどに関する情報をお持ちの方がいらっしゃいましたら、この記事のコメントなどで知らせて欲しいと思う。

## 2016/6/25

AppleのLegal Questionに問い合わせメールを送ったものの、返答がありません……。


# はじめに

本や冊子などをLaTeXで作成する際には、フォントにこだわりたくなることがある。有名なフォントとして**ヒラギノフォント**があるが、ヒラギノフォントは有償なので、フォントを購入するかあるいはMacを買う必要がある。この記事では、Travis CIを使ってお金を支払うことなくヒラギノフォントが埋め込まれたPDFをLaTeXで生成する方法について述べる。
この記事の手法を用いると、次のようなPDFファイルをTravis CI上で作成することができる。

- [platex.pdf](https://y-yu.github.io/travis-tex/platex.pdf)
- [lualatex.pdf](https://y-yu.github.io/travis-tex/lualatex.pdf)

なお、この記事で述べていることのサンプルリポジトリがGitHub上の[travis-tex](https://github.com/y-yu/travis-tex)にあるので、こちらも参考にして欲しい。

# アイディア

Travis CIにはiOS向けアプリケーションなどをコンパイルするために、OSXの環境が用意されている。OSXにはヒラギノフォントが標準でインストールされているので、それを用いてフォント埋め込みPDFを生成する。

# やり方

次のようなことを実行する`.travis.yml`を作成する。

1. ビルド環境をOSXにする
2. BasicTeXをダウンロードしてインストールする
3. 日本語文書をコンパイルするためのパッケージをインストールする
4. フォント埋め込みの準備をする
5. LaTeXファイルのコンパイルする
6. GitHubの`gh-pages`ブランチへアップロードする

これらについて順に説明する。なお、完成した`travis.yml`は次の場所からダウンロードできる。

https://github.com/y-yu/travis-tex/blob/master/.travis.yml

## ビルド環境をOSXにする

次のような記述を`.travis.yml`に追加する。

```yaml:.travis.yml
os:
  - osx
```

## キャッシュの設定

LuaTeXはフォントに関する情報のキャッシュを生成する。キャッシュの生成には時間がかかるため、Travis CIのキャッシュ機能でフォントのキャッシュを持っておくようにする。

```yaml:.travis.yml
cache:
  directories:
    - "$HOME/Library/texlive/2016basic/texmf-var/luatex-cache"
```

## BasicTeXをダウンロードしてインストール

Mac環境でTeX環境を整える場合、MacTeXというディストリビューションが有名であるが、こちらはファイルサイズが巨大であるためダウンロードに時間がかかり、結果としてビルド時間が伸びてしまう。そこで、最小限のパッケージで構成されているBasicTeXをダウンロードしてインストールする。最後にパスを通しておく。

```yaml:.travis.yml
install:
  - curl -L -O http://mirrors.concertpass.com/tex-archive/systems/mac/mactex/BasicTeX.pkg
  - sudo installer -pkg BasicTeX.pkg -target /
  - rm BasicTeX.pkg
  - export PATH=$PATH:/usr/texbin
```

## 日本語文書をコンパイルするためのパッケージをインストールする

これらはpTeXやdvipdfmxで用いるフォントマップファイルなど、日本語文書をコンパイルする際に必要となる諸々をインストールする。これにはTeXLiveのパッケージマネージャーである`tlmgr`を用いて、次のようにすればよい。
また、LuaLaTeXで日本語組版をするためのLuaTeX-jaパッケージの依存は自力で解決したため、このように多くのパッケージを`tlmgr`でインストールしている。

```yaml:.travis.yml
  - sudo tlmgr update --self --all
  - sudo tlmgr install latexmk collection-luatex collection-langjapanese collection-fontsrecommended filehook type1cm mdframed needspace
```

## フォント埋め込みの準備をする

ヒラギノフォントのシンボリックリンクをTeXLiveの見える場所に置く必要がある。この時、`texmf-local`を作成する場所に注意する必要がある。TeX Wikiなどには`/usr/local/texlive/texmf-local`となっているが、BasicTeXの場合は`/usr/local/texlive/2016basic/texmf-local`でなければ正しく動作しない。

```yaml:.travis.yml
before_script:
  - sudo mkdir -p /usr/local/texlive/2016basic/texmf-local/fonts/opentype/public/hiragino/
  - cd /usr/local/texlive/2016basic/texmf-local/fonts/opentype/public/hiragino/
  - sudo ln -s "/Library/Fonts/ヒラギノ明朝 Pro W3.otf" HiraMinPro-W3.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ明朝 Pro W6.otf" HiraMinPro-W6.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf" HiraKakuPro-W3.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ角ゴ Pro W6.otf" HiraKakuPro-W6.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ角ゴ Std W8.otf" HiraKakuStd-W8.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf" HiraMaruPro-W4.otf
  - sudo ln -s "/System/Library/Fonts/ヒラギノ明朝 ProN W3.otf" HiraMinProN-W3.otf
  - sudo ln -s "/System/Library/Fonts/ヒラギノ明朝 ProN W6.otf" HiraMinProN-W6.otf
  - sudo ln -s "/System/Library/Fonts/ヒラギノ角ゴ ProN W3.otf" HiraKakuProN-W3.otf
  - sudo ln -s "/System/Library/Fonts/ヒラギノ角ゴ ProN W6.otf" HiraKakuProN-W6.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ角ゴ StdN W8.otf" HiraKakuStdN-W8.otf
  - sudo ln -s "/Library/Fonts/ヒラギノ丸ゴ ProN W4.otf" HiraMaruProN-W4.otf
  - sudo mktexlsr
  - cd -
  - sudo kanji-config-updmap-sys hiragino-pron
  - sudo fmtutil-sys --byfmt lualatex
```

## LaTeXファイルのコンパイル

pLaTeXとdvipdfmxを用いて次のようにすればよい。また、LuaLaTeXは直接PDFを生成するので、dvipdfmxのようなものは必要ない。

```yaml:.travis.yml
script:
  - platex src/platex.tex
  - dvipdfmx platex
  - lualatex src/lualatex.tex
```

これで、リポジトリ直下に`platex.pdf`と`lualatex.pdf`が生成される。

## GitHubの`gh-pages`ブランチへアップロードする

まず、次のWebサイトに従って、デプロイ用の公開鍵をリポジトリに登録し、秘密鍵を暗号化してリポジトリに追加する。

> [Travis-CI でコミットして GitHub にプッシュする - 公開鍵認証を利用してみる](http://blog.eiel.info/blog/2014/02/18/github-push-from-travis/)

後はGitを操作して成果物を`gh-pages`へコミットし、プッシュする。

```yaml:.travis.yml
after_success:
  - echo -e "Host github.com\n\tStrictHostKeyChecking no\nIdentityFile ~/.ssh/deploy.key\n" >> ~/.ssh/config
  - openssl aes-256-cbc -k "$SERVER_KEY" -in deploy_key.enc -d -a -out deploy.key
  - cp deploy.key ~/.ssh/
  - chmod 600 ~/.ssh/deploy.key
  - git config --global user.email "m@yyu.pw"
  - git config --global user.name "Yoshimura Yuu"
  - git fetch origin gh-pages:gh-pages
  - git stash -u
  - git checkout gh-pages
  - rm platex.pdf lualatex.pdf
  - git stash pop
  - git add platex.pdf lualatex.pdf
  - git commit -a -m "auto commit on travis $TRAVIS_JOB_NUMBER $TRAVIS_COMMIT"
  - git push git@github.com:y-yu/travis-tex.git gh-pages:gh-pages
```

# まとめ

このようにすることで、お金を支払うことなくヒラギノフォントが埋め込まれたPDFファイルをLaTeXを用いて生成することができた。~~今後の課題としてLuaLaTeXでもヒラギノフォントを埋め込みたいが、僕が試した限りは上手くいかなかった[^lualatex_fail]。この問題に対しては[@aminophen](https://twitter.com/aminophen)さんからいろいろな助言を頂いたが、結局解決はできなかった。~~
上記の問題は、TeXLive2016でLuaTeXがアップデートされたことで解決した。本文を加筆し、LauLaTeXによる方法も追記した。
ただ、冒頭でも述べたようにこの方法を用いて作成した文書のライセンスなどが不明瞭なので、この方法を何か重大なものに採用するのは控えた方がよいだろう。

[^lualatex_fail]: [この記事](http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1849)と同じエラーが発生して日本語が脱落する。

# 参考文献

- [教授でもできる、TeXShop + MacTeX /UpTeX でのヒラギノ フォントの埋め込み](http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/embed_hiragino.html)
- [TeX Wiki](https://texwiki.texjp.org/?TeX%20Live%2FMac#d19a1537)
- [MacにBasicTexで最小限のTex環境構築](http://qiita.com/yohm13/items/0b1c5a65cb9ac968a25f)
- [Travis-CI でコミットして GitHub にプッシュする - 公開鍵認証を利用してみる](http://blog.eiel.info/blog/2014/02/18/github-push-from-travis/)
- [scala_text](https://github.com/dwango/scala_text)