tlmgrとは?

TeXLive Managerの略でTeXLiveのパッケージ管理などが出来る、Pythonでいうpip、Ubuntuでいうapt-get、Rubyでいうgemみたいなもの。Perlスクリプトで動いているのでOSは何でも動く。tlmgr --versionを叩いてtlmgrが見つかりませんなどといわれた場合は「TeXLive2019 インストール」などと検索して礼儀正しくTeXLiveをインストールすれば使えます。(今2019/6/30現在2019が最新です。)

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

tlmgrの使用例【基本編】

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

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

パッケージをアップデートする
tlmgr update --self --all

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

インストールされているパッケージ一覧を表示する(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と同じです。

後述の通り以外と使いやすい。

【番外編】CTANで検索する

https://www.ctan.org/

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

パッケージをインストールする
tlmgr install package-name

この辺りはpipと同じ。後述の通りTeXLiveのリポジトリにあるpackage-nameを正確に指定しないと見つからないといわれる。

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

TeXLive2019に移行したとき、あたらしいパッケージを導入したいときなど、エラーメッセージに対する対処法としての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を介して使うというイメージですね。

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をインストールしなくてよいことがわかりました。何故かパッケージに含まれていて全くいらんドキュメントやソースファイルなども積極的に削除していきたいですね。

Previous Post Next Post