Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

注意

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

2016/6/25

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

はじめに

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

なお、この記事で述べていることのサンプルリポジトリがGitHub上の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に追加する。

.travis.yml
os:
  - osx

キャッシュの設定

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

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

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

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

.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でインストールしている。

.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でなければ正しく動作しない。

.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のようなものは必要ない。

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

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

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

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

Travis-CI でコミットして GitHub にプッシュする - 公開鍵認証を利用してみる

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

.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でもヒラギノフォントを埋め込みたいが、僕が試した限りは上手くいかなかった1。この問題に対しては@aminophenさんからいろいろな助言を頂いたが、結局解決はできなかった。
上記の問題は、TeXLive2016でLuaTeXがアップデートされたことで解決した。本文を加筆し、LauLaTeXによる方法も追記した。
ただ、冒頭でも述べたようにこの方法を用いて作成した文書のライセンスなどが不明瞭なので、この方法を何か重大なものに採用するのは控えた方がよいだろう。

参考文献


  1. この記事と同じエラーが発生して日本語が脱落する。 

yyu
暗号やプログラム言語の記事をよく書きます。 I'm interested in Programming and Cryptography.
https://twitter.com/_yyu_
recruitmp
結婚・カーライフ・進学の情報サイトや『スタディサプリ』などの学びを支援するサービスなど、ライフイベント領域に関わるサービスを提供するリクルートグループの中核企業
http://www.recruit-mp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした