ライブラリ検索パスについて

ここでは、kpathsearchライブラリによる、新しいライブラリ検索パスについて 説明をしています。


■kpathsearchについて

pTeX 2.0以降は、フォントファイルやマクロファイルを探しにいくとき、 kpathsearchライブラリを用いてディスク内を検索します。

kpathsearchライブラリの設定ファイルは、 texmf.cnfというファイルです。 通常、$TEXMF/web2cディレクトリに収められています。 環境変数 TEXMFCNF に、texmf.cnfのあるディレクトリを指定すれば、 マルチユーザ環境の場合などで、個人ごとに設定を変更することもできます。

texmf.cnf内では、つぎのようにして検索パスを設定します。

    TEXINPUTS.platex = .:$TEXMF/tex/platex2e//:$TEXMF/tex/latex2e//:$TEXMF/tex//
上記の例では、platexというコマンドの環境変数TEXINPUTSの設定を行っています。 このように、kpathsearchでは、「何々のコマンドの環境変数」のような指定が 可能になっています。

なお、$TEXMFは、TeXのライブラリディレクトリのルートが設定されている変数です。 デフォルトでは、/usr/local/lib/texmf ディレクトリです。

肝心の検索パスですが、先ほどの例では、

  1. . (カレントディレクトリ)
  2. $TEXMF/tex/platex2e//
  3. $TEXMF/tex/latex2e//
  4. $TEXMF/tex//
のような順序で探しにいきます。ここで「//」という表記は、 「サブディレクトリも検索せよ」という表記です。 したがって、kpathsearchライブラリを用いると、
    TEXINPUTS=.:$TEXMF/tex/platex2e/base:$TEXMF/tex/platex2e/misc:
                $TEXMF/tex/latex2e/base:$TEXMF/tex/latex2e/contrib:
                ... :$TEXMF/tex/amstex: ... $TEXMF/tex/plain ...:
のように、すべてのディレクトリを指定する必要がないので、とても簡単で、 わかりやすくなります。

2重スラッシュ「//」を付けないと、サブディレクトリ内のファイルを探しに はいきません。

つぎのように、ディレクトリパスの途中で用いることもできます。

    TFMFONTS = .:$TEXMF/fonts//tfm
このように用いると、$TEXMF/fontsディレクトリの下にある、 最後が「tfm」のディレクトリにあるファイルだけを探し、 「src」や「pk」ディレクトリなどにはアクセスしません。
    $TEXMF/fonts/adobe/.../tfm
    $TEXMF/fonts/public/cm/tfm
    $TEXMF/fonts/public/dc/tfm
     ...


■ls-R

kpathsearchライブラリは、便利なのですが、 ディレクトリ構造が深くなっていくにつれ、 ファイルを見つけだすまでの時間がかかってきます。

ファイル検索に時間がかかるようになってきた場合は、 つぎのコマンドを実行して、$TEXMFディレクトリに「ls-R」という名前の ファイルを作ります。

    ls -R $TEXMF > $TEXMF/ls-R
ls-Rは、$TEXMFディレクトリからではなく、ルートディレクトリからである ことに注意をしてください。


■kpsewhich

検索パスにサブディレクトリを指定しなくてもよいので、 設定を調べるのは簡単になりましたが、そのぶん、どこにあるファイルが 読み込まれているのかを調べることが難しくなりました。 また、TeXのライブラリディレクトリの階層が深くなったので、 一つ一つ探すのもたいへんです。

このように、どのファイルが読み込まれているのかを調べるためのプログラムが kpsewhichです。 このプログラムのソースは、kpathsearchライブラリのソースと一緒に入っています。

使い方は、

    kpsewhich cmr10.tfm
のようにすれば、そのファイルがある場所が、
    /usr/local/lib/texmf/public/cm/tfm/cmr10.tfm
のように表示されます。

また、特定のプログラムの環境変数を調べるときには、 つぎのようにします。

    kpsewhich -program platex -expand '$TEXINPUTS'


[pTeX home page]