パッケージ・フォント管理

インストール直後の TeX 環境にも、後から足したいパッケージや、規約上同梱できないフォントが必ず出てきます。このページでは、日々の運用で実際に叩くコマンド——TeX Live の tlmgr と GUI の tlshell、配布外フォントを入れる getnonfreefonts、そして「あのファイルはどこにあるのか」を即答させる kpsewhich——を、何をするコマンドでなぜ必要なのかとあわせて見ていきます。

パッケージ管理 — tlmgr

tlmgr(TeX Live Manager)は、TeX Live のパッケージを入れる・消す・更新する公式コマンドです。CTAN にある何千ものパッケージのうち、自分のインストールに足りないものを後から追加するときの主役で、日本語環境でも英語環境でも使い方は同じです(MiKTeX は別系統。後述)。まずは欲しいパッケージを名前で入れます。依存パッケージも既定で一緒に入ります。

terminal
# パッケージを 1 つ以上インストール(依存も自動で入る)
tlmgr install siunitx
tlmgr install collection-fontsrecommended

# 依存を引かずに本体だけ/既存の上書き再インストール
tlmgr install --no-depends siunitx
tlmgr install --reinstall siunitx

システム全体のツリーに入れる構成では、tlmgr管理者権限 で実行する必要があります(Unix 系なら sudo tlmgr install …、Windows は管理者のシェルで)。逆に各ユーザのツリー(TEXMFHOME)へ手で置く方法もありますが、tlmgr が管理するのは配布のツリーです。どのツリーに何が置かれるか・パスがどう解決されるかは「ディレクトリ構成とパス」で扱うので、ここでは「tlmgr が正しいツリーへ置いてくれる」前提で進めます。

更新はセットで覚えます。--selftlmgr 自身(インフラ)を、--all がそれ以外の全パッケージを最新へ揃えます。両方を一度に指定するのが定番で、tlmgr が先に自分を入れ替えてから残りを更新します。サーバ側で消えたパッケージの自動削除や、コレクションに加わった新パッケージの自動導入もこのとき行われます。

terminal
# 定番:自分自身 → 全パッケージの順で最新化
tlmgr update --self --all

# 特定パッケージだけ更新/更新があるか一覧で確認
tlmgr update siunitx
tlmgr update --list

パッケージの素性を調べるのが tlmgr info。引数なしなら全パッケージを並べ、インストール済みのものは行頭に i が付きます。パッケージ名を付ければ、説明・ライセンス・サイズ・収録ファイル、TeX Catalogue の情報まで表示します(未導入でもリポジトリ側を見て答えます)。名前がうろ覚えのときは search が便利で、--global を付けるとローカルではなくリポジトリ側を、--file を付けるとファイル名で横断検索できます。

terminal
# パッケージの詳細(説明・ライセンス・収録ファイル)
tlmgr info siunitx

# 名前・説明から探す/ファイル名で横断検索
tlmgr search --global siunit
tlmgr search --global --file tikz.sty

リポジトリ(CTAN ミラー)の設定

tlmgr がパッケージを取りに行く先が リポジトリ です。既定では CTAN の自動ミラー振り分けが使われますが、回線が遅い・特定ミラーに固定したいときは tlmgr option repository で恒久的に切り替えます。ctan という別名は https://mirror.ctan.org/systems/texlive/tlnet の省略形で、これを指定すると近くの CTAN ミラーへ自動で割り当てられます。

terminal
# 既定(近くの CTAN ミラーへ自動振り分け)に設定
tlmgr option repository ctan

# 特定ミラーへ固定(例:好きな tlnet ミラーの URL)
tlmgr option repository https://example.org/CTAN/systems/texlive/tlnet

# 今の設定をまとめて確認(repository だけでなく paper なども)
tlmgr option show

一時的に別ミラーから入れたいだけなら、恒久設定を変えずにその実行限りで --repository <url> を付けられます。なお tlmgr option は用紙サイズなどの既定値もまとめて持っており、用紙を変えるなら tlmgr paper a4(プログラム個別なら tlmgr dvips paper a4 のように)で全ツールの既定を切り替えられます。

GUI(tlshell)と MiKTeX の場合

コマンドが苦手なら、TeX Live には tlshell という Tcl/Tk 製の GUI が付属します(tlshell で起動)。中身は tlmgr をそのまま呼ぶフロントエンドなので、できることは同じ——パッケージの検索・導入・削除・一括更新、リポジトリの切り替えがウィンドウから行えます。コマンドの結果ログも見えるので、tlmgr の挙動を覚える入口としても向いています。

MiKTeX(主に Windows)は別系統で、tlmgr ではなく mpm(MiKTeX Package Manager)がコマンドライン、MiKTeX Console が GUI にあたります。MiKTeX の特徴は オンザフライ導入:文書が要求した未導入パッケージを、組版の最中に自動でダウンロードして入れてくれます(既定の挙動は Console の設定で「常に入れる/毎回確認する/入れない」を選べます)。考え方は同じでも、コマンド名と運用が違う点だけ押さえておきましょう。

配布外フォントを入れる — getnonfreefonts

一部のフォントは「使うのは自由だが販売は不可」といったライセンスのため、DVD でも頒布される TeX Live 本体には同梱できません。こうしたフォントの導入を肩代わりするのが TUG の getnonfreefonts スクリプトです。CTAN にはフォント本体と TeX 用サポートファイルが置かれており、スクリプトがそれらを取得して、TeX が見つけられる形に設定まで行ってくれます。

スクリプト自体はまず一度だけ入れます(入手手順は tug.org/fonts/getnonfreefonts/ に従う)。導入できるフォントの一覧は --lsfonts で確認でき、あとは名前を指定して入れるだけ。たとえば等幅フォントの luximono などが対象です。

terminal
# 入れられるフォントの一覧を見る
getnonfreefonts --lsfonts

# 個別に入れる/配布元のものを全部入れる
getnonfreefonts luximono
getnonfreefonts --all

鍵は -sys 版です。getnonfreefonts は自分専用のツリー(TEXMFHOME)へ入れ、**getnonfreefonts-sys** はシステム全体のツリーへ入れます。全ユーザで使うなら後者を管理者権限で実行します。導入後はファイル名データベースの更新(mktexlsr)が必要なことがありますが、スクリプトがふつう面倒を見てくれます。これらのフォント・データベース更新コマンドの詳細は「フォント・DB 管理コマンド」で扱います。

terminal
# システム全体のツリーへ(全ユーザ向け・要管理者権限)
sudo getnonfreefonts-sys luximono

# 念のため手動でファイル名 DB を更新する場合
sudo -H mktexlsr

ファイルの在りかを調べる — kpsewhich

TeX はファイルを kpathsea という探索ライブラリで見つけます。その探索を手元から問い合わせる道具が kpsewhich です。「このクラスは実際にどのファイルが使われているのか」「複数のバージョンが衝突していないか」を一発で確かめられ、トラブル調査の第一歩になります。引数にファイル名を渡すと、TeX が実際に拾う最初のパスを返します。

terminal
# このファイルが解決される実際のパスを表示
kpsewhich article.cls
kpsewhich siunitx.sty

# 同名ファイルが複数あれば全部出す(衝突の発見に)
kpsewhich -all siunitx.sty

パスだけでなく 設定変数の値 も引けます。-var-value=VAR は変数 VAR を展開して表示し、ユーザツリーの場所(TEXMFHOME)や設定ツリー(TEXMFCONFIG)の実体を確認するのに使います。文字列の展開には 2 種類あり、-expand-var は変数のみを展開、-expand-path は中括弧やパス全体まで含めて完全に展開します。

terminal
# 設定変数の値を見る(ユーザツリーの場所など)
kpsewhich -var-value=TEXMFHOME
kpsewhich -var-value=TEXMFCONFIG

# 変数だけ展開 / パス全体を完全展開
kpsewhich -expand-var='$TEXMFHOME'
kpsewhich -expand-path='$TEXMF'

同名でも種類の違うファイルを区別するのが -format=NAME。たとえば BibTeX のスタイル .bst と文献データ .bib は探索パスが別なので、ファイル種別を明示すると正しい場所を引けます。-show-path=NAME はその種別の探索パス全体を出力し、「どのディレクトリがどの順で探されるか」を確認できます。種別名の一覧は kpsewhich --help で見られます。

terminal
# ファイル種別を指定して探す(.bst と .bib は別パス)
kpsewhich -format=bst plainnat.bst
kpsewhich -format=bib mybibliography.bib

# その種別の探索パス全体を表示(探索順の確認)
kpsewhich -show-path=tex

エンジンによって探索パスが変わる場合は -engine=NAME-progname=NAME で文脈を合わせられます(例:-progname=lualatex)。探索の挙動そのもの——texmf.cnf の役割や、どのツリーをどう辿るかの仕組み——は「ディレクトリ構成とパス」に譲り、ここでは kpsewhich を「確認のための道具」として使う立場に徹しています。