2 R パッケージとしての tinytex

TinyTeX を管理し, LaTeX 文書をコンパイルするヘルパー関数について

オリジナルのページ: https://yihui.org/tinytex/r/

オリジナルの更新日: 2017/12/03


CRAN または GitHub から tinytex パッケージをインストールできます.

# CRAN 版
install.packages('tinytex')

# Github 上の開発版
remotes::install_github('yihui/tinytex')

パッケージは主に2種類の関数の集合からなります. TinyTeX を管理する関数と, LaTeX 文書を PDF にコンパイルするのを助ける関数です.

2.1 TinyTeX を管理する

tlmgr_* シリーズの関数は TeX Live を管理するためのユーティリティコマンドである tlmgr を呼び出します. 例えば LaTeX パッケージのインストールと更新です. ?tinytex::tlmgr でドキュメントの完全版を見てください. tlmgr_search(), tlmgr_install(), tlmgr_update() は TeX Live を自分で管理したい場合に最もよく使う関数です.

2.2 LaTeX 文書をコンパイルする

LaTeX の「最高に愛すべき」機能は, PDFを取得するのにしょっちゅう, 相互参照 (例えば索引や引用文献リスト) があるときに文書を複数回コンパイルしなければならないことです.

LaTeX の失敗のよくある原因は LaTeX パッケージが足りないことです. どのパッケージが欠けているかがすぐには分からないことがあります (いくつかのパッケージは複数の *.sty*.cls ファイルを含んでいます). あなたがパッケージ化された TeX Live を使っているなら, この問題は悪化する可能性があります. 例えば Debian/Ubuntu では LaTeX パッケージはグループ分けされ, それぞれ異なる Debian パッケージとしてビルドされるので LaTeX パッケージが1つ欠けていただけでも, あなたが必要としているものに加え, 不要な多くのパッケージを含んでいるかもしれない巨大な Debian パッケージをインストールしなければなりません.

tinytexlatexmk() 関数はこれら2つの問題を自動的に解決しようとします. 指定された LaTeX エンジン (pdflatex, xelatex, lualatex)8 を使用し, デフォルトで LaTeX 文書を3回コンパイルします9. また, デフォルトで不足しているパッケージをインストールしようとします. この関数は足りないパッケージを tinytex::parse_packages() 関数を介して LaTeX ログ からインストールしようとします.

文書をコンパイルする最大回数を変えることも, 不足パッケージの自動インストールを無効化することもできます. 詳しくは ?tinytex::latexmk を見てください.10

pdflatex(), xelatex(), lualatex() という3つの関数は latexmk() ベースのラッパ関数です. 例えば pdflatex() は基本的に latexmk(engine = 'pdflatex', emulation = TRUE) と同じです.

その実装はぎこちないです. ソースコードを読まないでください. 将来的にも改善されることはないでしょう. LaTeX に対して十分に時間を費やしてきましたし, この洗練されていない実装によって多くの時間を節約するべきでしょう. 「最善は善の敵」というやつです.

2.3 デバッグ

LaTeX を PDF にコンパイルするときにエラーが起こったなら, 問題が解消されるまで以下のような段階を1つづつ踏んでください.

  1. R と LaTeX パッケージを全て更新する:

    update.packages(ask = FALSE, checkBuilt = TRUE)
    tinytex::tlmgr_update()
  2. LaTeX パッケージの更新時に “tlmgr: Remote repository is newer than local (2018 < 2019)” のようなエラーが発生したら, それはあなたの TinyTeX が古すぎることを意味します. 以下のようにして新しいバージョンを再インストールしてください.

    tinytex::reinstall_tinytex()
  3. 更新でも再インストールでも問題を解決できないなら, 文書をコンパイルする前に以下のように R のオプションを設定してください:

    options(tinytex.verbose = TRUE)

    これで問題のデバッグをする助けになる追加のメッセージが表示されます. R Markdown と RStudio の knit ボタンを使用しているなら R Markdown 文書のコードチャンク内でこのオプションを設定すべきです.

    ```{r, include=FALSE}
    options(tinytex.verbose = TRUE)
    ```

    あなたができること, そしてもしかするとすべきことなのは, デバッグを終えたあとにこのオプションを削除することです (もはや完全なログを読む必要はなく, LaTeX を静かにさせるため

  4. 上記いずれも効果がなかったら, このガイドに従って問題を報告してください.11 あなたがとても忙しい場合, 問題の報告に際してもっとも重要なもの, 「必要最小限の再現例」を忘れないでください.

2.4 その他の LaTeX ディストリビューション

(当然ながら) tinytex パッケージは TinyTeX との組み合わせで最もよく動いてくれるはずですが, TinyTeX と完全に不可分なわけではありません. 特に以下に注意してください.

  1. LaTeX 文書の相互参照が解決するまで数回にわたって自動コンパイルする機能はどの LaTeX ディストリビューションでも有効です. お望みなら Windows 上で MiKTeX を使うこともできます.12

  2. LaTeX の不足しているパッケージを自動インストールする機能はディストリビューションが TeX Live であることが必要です (TinyTeX は TeX Live のカスタム版なので TinyTeX でも動作することを思い出してください). パッケージをインストールできるようにするには tlmgr install も必要です. システム管理者によってインストールされた TeX Live や TinyTeX のコピーを使用しているなら, あなたには変更する権限が与えられておらず, この機能は使えません. あなたが自分のPCにTinyTeXをインストールしているなら, できる公算が大きいです. この機能は MiKTeX ユーザには使えませんが, MikTeX 自体も不足パッケージを自動インストールできるため, そもそも必要ないでしょう.


  1. 訳注: 日本語ユーザはまだあまり使うことがないかもしれませんが, 最近 (v0.3.1) は tectonic もサポートしています.↩︎

  2. 訳注: 文献引用と数式やセクション番号といった相互参照を含んだ, 典型的な LaTeX によるレポート・学術論文ならば3回で十分です.↩︎

  3. 訳注: それぞれ min_times/max_timesinstall_packages で指定できます.↩︎

  4. 訳注: こちらの窓口は当然ながら英語 (中国語も可?) での対応となります. 日本語の質問フォーラムとしてスタック・オーバーフロー日本語版や, TeX Wiki のフォーラム, teratail がありますが, 日本語ユーザの間でかならずしもTinyTeXが知られているとは限らないことに注意してください.↩︎

  5. 訳注: 日本語コミュニティでは Windows に対しては従来 W32TeX がよく使われていると思います. これも最近のバージョンは TeX Live をベースにしているため, 概ねうまく動作するはずです. Windows 上での従来の TeX 事情はこちらを参考に: https://texwiki.texjp.org/?Microsoft%20Windows↩︎