* texmf.cnf ファイル [#acde7a64]

// 記事タイトルは多分 "Kpathsearch ライブラリ"の方が的確なんだろうけど、
// 一般ユーザにとって"ライブラリ"は把握が難しいものだからなあ…。

TeX および関連ソフトウェアに関する設定は texmf.cnf というファイルで集約して管理されています。((“texmf”の名前は「%%%TeX%%% と %%%M%%%eta%%%F%%%ont」に由来します。))

#contents

** 概要 [#ab004e09]

大昔の TeX 環境では入力ファイルの検索パス等の設定を(OS の)環境変数(TEXINPUTS 等)で行っていました。
TeX 関連のソフトウェアの数や設定項目の件数が増えたためにこの方法での管理は困難となり、「TeX 環境版の環境変数」を管理するためのライブラリである Kpathsearch が開発されました。
現在では、TeX Live や W32TeX を含めほとんど全ての TeX 環境がこの Kpathsearch ライブラリを利用しています。

Kpathsearch における設定データの構造は、OS の環境変数のモデルを基礎としていて、「任意の“変数名”に任意の“値”(文字列)を割り当てる」という非常に単純なものです。
しかし、OS の環境変数と比べて以下のような点で拡張されています。

-設定ファイルの階層化(優先度の順を付けて複数の設定ファイルを利用できる)
-プログラム名によって同じ変数の値が異なるようにする

TeX 環境での設定項目(変数)の多くは OS の実行パス(PATH 変数)に類似した形式の検索パスリストです。
Kpathsearch は、このような変数について単に検索パスの値を格納するのみでなく、実際にファイルの検索を行う機能も備えています。

** texmf.cnf ファイルの場所 [#r5008864]

現在有効な texmf.cnf ファイルのある場所(これ自体も Kpathsearch で管理されている)は次のコマンドで知ることができます。

 kpsewhich -all texmf.cnf

最近の TeX Live の場合は、次の例(これは Windows の TeX Live 2015)のように 2 つのパスを返します。

 c:/texlive/2015/texmf.cnf
 c:/texlive/2015/texmf-dist/web2c/texmf.cnf

このように複数の有効な texmf.cnf がある場合、前にあるものほど高い優先度をもちます。
つまり、後ろ(低い優先度)の texmf.cnf で設定された値は、前(高い優先度)の texmf.cnf によって上書きされます。
TeX Live においては、この後ろが「マスタの設定ファイル」、前が「カスタム用設定ファイル」であり、ユーザが設定をカスタマイズしたい場合は、c:/texlive/2015/texmf.cnf の方を編集します。

一方、W32TeX においては既定では次のように「マスタの設定ファイル」しかありません。

 c:/usr/local/share/texmf-dist/web2c/texmf.cnf

これについては、新たに「カスタム用設定ファイル」を作成して TeX Live と同様に運用することも可能であり、あるいは、この「マスタの設定ファイル」を編集する運用にすることも(それと差支えなければ)可能です。
自分用の「カスタム用設定ファイル」は,「マスタの設定ファイル」より優先されるもの,例えば

 c:/usr/local/share/texmf-local/web2c/texmf.cnf

作成して編集します。これは再インストール時に上書きされることがありません。ここで

 c:/usr/local

とは,インストール ディレクトリであり,

 c:/w32tex

の場合は,それに置き換えて解釈して下さい。

texmf.cnf を“置くことができる”ディレクトリは次のコマンドで調べることができます。

 kpsewhich -var-value=TEXMFCNF

この出力についても、前にあるパスの方が優先度が高いものとなります。

** texmf.cnf ファイルの書式 [#uf6ee363]

(準備中)


** 変数の値を調べる [#ke1c37e3]

kpsewhich コマンドは、Kpathsearch ライブラリのコマンドラインインタフェースであり、これを用いて現在の変数の値を調べることができます。((ちなみに、Perl や Ruby 等のスクリプト言語で書かれたソフトウェアが Kpathsearch 変数の値を読みだす場合は kpsewhich コマンドを実行するのが普通です。))

例えば、変数 shell_escape の値を調べるには以下のコマンドを実行します。

 kpsewhich -var-value=shell_escape

※ shell_escape は[[外部コマンドの実行]]の許可の既定設定を表します。
この変数の値が p ならば -shell-restricted 相当、t ならば -shell-escape 相当、f ならば -no-shell-escape 相当です。

** 変数の値を変更する [#t6a321fb]

(準備中)