tlmgrの使用例と何かしらのエラーメッセージが出たときの解決法を乗せて置く。TeXに関するエラーのほとんどはtlmgrで解決できるでしょう。

tlmgrとは?

TeXLive Managerの略でTeXLiveのパッケージ管理などが出来る、Pythonでいうpip、Ubuntuでいうapt-get、Rubyでいうgemみたいなもの。Perlスクリプトで動いているのでOSは何でも動く。Windowsの場合多分PerlのインタプリタはTeXLiveにゴリゴリにバンドルされているのでPerlを別途インストールする必要もない。tlmgr --versionを叩いてtlmgrが見つかりませんなどといわれた場合は「TeXLive インストール」などと検索して礼儀正しくTeXLiveをインストールすれば使えます。

TeXのディレクトリ構造を自分で管理するのは苦痛なのでW32TeXのtexinstwinなどでインストールしてtlmgrが使えない状態の場合はTeXLiveに移行(再インストール)することをオススメする。

tlmgrの使用例【基本編】

http://www.tug.org/texlive/doc/tlmgr.html

この公式のドキュメントを見れば大概わかります。

パッケージをアップデートする

tlmgr update --self --all

これでローカルのものよりもリモートのもののほうが新しいパッケージ全てを更新する。tlmgrそのもののupdateも含まれる。--selfがtlmgr自体で--allが全てのパッケージを意味している。

インストールされているパッケージ一覧を表示する(1)

tlmgr info --only-installed

この場合はパッケージ名とそれぞれに関連付けられているshortdesc(短いパッケージの説明)の一覧が羅列される。

インストールされているパッケージ一覧を表示する(2)

tlmgr info --only-installed --data name

こうすると名前だけが各行に表示される。pipなどのイメージはこれ。

インストールされているパッケージ一覧を表示する(3)

tlmgr info --only-installed --data "name,size,shortdesc"

のようにすると欲しい情報を表示してくれる。どういうdataが指定できるかは公式を参照。longdescは超長いのでtlmgr info package-nameで個別に見ること推奨。

リポジトリのパッケージを検索する(1)

tlmgr search --global kerword

こうするとリモートとローカルまとめてkeywordをname,shortdesc,longdescのいずれかに含むパッケージを検索してくれる。短いkeywordは大量に結果が出るので注意。Perlの正規表現が使える。

リポジトリのパッケージを検索する(2)

tlmgr info package-name/filename

こうすると、もしpackage-nameというパッケージがローカル・リモート関わらず存在すればそのパッケージの情報(name,size,etc...)を表示する。存在しなければ「見つかりません」ではなくローカル・リモートの両方から(1)name, shortdesc, longdescにpackage-nameを含んでいるパッケージ、(2)パッケージに属するファイル名一覧にfilenameが含まれているパッケージの両方を検索する。2019/6/28の最新tlmgr時点の動作。なんという忖度。(1)はtlmgr searchと同じです。

後述の通り忖度ありのinfoが結構使いやすい。

【番外編】CTANで検索する

https://www.ctan.org/

tlmgrではないけどCTANで検索をかければどんなパッケージがあるかの検索は間に合うし見やすい。上記の検索は次に示すtlmgr installをやる時に正式なパッケージ名がいる時に使うといいだろう。

パッケージをインストールする

tlmgr install package-name

この辺りはpipと同じ。後述の通りTeXLiveのリポジトリにあるpackage-nameを正確に指定しないと見つからないといわれる。手動でパッケージをインストールしたことがあるならこれだけでインストールできる便利さったらないですね。

tlmgrの使用例【応用編】/トラブルシューティング

TeXLiveに移行したときの最初のコンパイル、あたらしいパッケージを導入したいときなど、エラーメッセージに対する対処法としてのtlmgrの使い方。tlmgrさえあればTeXのほとんどのエラーは怖くありません。

File `bbm.sty' not found. \usepackage

こういうメッセージが出た場合は単純にそのpackageがインストールされていません。tlmgr install package-nameで基本的に解決しますが、場合によってはusepackageで指定する名前とtlmgr installで指定する名前が異なるので注意が必要です。例えば上記のエラーはtlmgr install bbmだけでは解決しません。この場合にはbbm.styを「リポジトリのパッケージを検索する(2)」の方法で直接検索します。

λ tlmgr info bbm.sty
tlmgr.pl: cannot find package bbm.sty, searching for other matches:

Packages containing `bbm.sty' in their title/description:

Packages containing files matching `bbm.sty':
bbm-macros:
        texmf-dist/tex/latex/bbm-macros/bbm.sty
sauterfonts:
        texmf-dist/tex/latex/sauterfonts/sbbm.sty

すると、bbm.styが含まれているパッケージはbbmではなく、bbm-macrosというパッケージであることがわかります。bbmはフォントそのもので、macroを介して使うというイメージですね。tlmgr install bbbm-macrosで解決します。

File `mathrsfs.sty' not found. \usepackage

これも同様ですがやや悪質?です。というのも、

λ tlmgr info mathrsfs.sty
tlmgr.pl: cannot find package mathrsfs.sty, searching for other matches:

Packages containing `mathrsfs.sty' in their title/description:

Packages containing files matching `mathrsfs.sty':
jknapltx:
        texmf-dist/tex/latex/jknapltx/mathrsfs.sty

usepackageではmathrsfsを指定しますがtlmgr installの時にはjknapltexを指定しないとmathrsfsが使えるようにならないのです。

tlmgr install jknapltx

こんなんでmathrsfs使える用になると思わないですよね。しかしこれで解決します。

Font T1/ptmr/m/n/10=ptmr8t at 12.0pt not loadable: Metric (TFM) file not found.

この場合はフォント定義ファイル(.fd)で定義されている.tfmファイルが見つかっていません。=ptmr8tとありますが、これが.tfmのファイル名です。この場合はptmr8t.tfmを同じように検索します。

λ tlmgr info ptmr8t
tlmgr.pl: cannot find package ptmr8t, searching for other matches:

Packages containing `ptmr8t' in their title/description:

Packages containing files matching `ptmr8t':
tex4ht:
        texmf-dist/tex4ht/ht-fonts/alias/adobe/times/ptmr8t.htf
times:
        texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm
        texmf-dist/fonts/vf/adobe/times/ptmr8t.vf

これでptmr8t.tfmが含まれているパッケージがtimesであることがわかりました。インストール時にbasicスキームを使っていたので基本的なものが含まれていないんですね。

tlmgr install times

これで解決します。

つまりファイル名をtlmgrで検索してインストールすればよい

以上の具体例を踏まえるとそういうことです。まずはエラーメッセージから足りていないファイル名が何なのかを推測します。拡張子っぽいものがついていればそれです.fdでも.mfでも.encでも.tfm何でも。あとは.clsとか.styとかも定番です。複数のパッケージ間で内容の違う同じ名前のファイルが無ければこれで必ず解決します。

だったら無い時点でエラーを吐かずに自分で取ってきてくれよと思うんですけどそうもいかないんですね。でもとりあえずこのように無いものは取ってこれるので大量のディスクスペースを無駄にしてまでTeXLiveをfullスキームでインストールしなくてよいことがわかりました。何故かパッケージに含まれていて全くいらんドキュメントやソースファイルなども積極的に削除していきたいですね。