TeX のディレクトリ構成 (TDS)

TDS (TeX Directory Structure) とは,TeX の標準的なディレクトリ構成です。 TeX LiveW32TeX はこの TDS に従っています。

実際にどのように TeX に関するファイルやディレクトリを配置したらよいのか考えます。 パッケージフォントを追加する際,あるいは使用しているパッケージの置き場を探す際に参考になるはずです。

[TODO] TDS のバージョンによる違いはどの程度でしょうか?



TEXMF ツリー・多重 TEXMF ツリーとは

現在の TeX ディストリビューションのほとんどは TEXMF ツリー*1を採用しています。 TEXMF ツリーには,パッケージやクラスファイル・フォント・スクリプト・説明文書などが規則に従って分類され,収録されています。

TeX Live や W32TeX では複数の TEXMF ツリーを使い分ける「多重 TEXMF ツリー」が採用されています。 これにより,ディストリビューションが用意したファイルとユーザが追加したローカルなファイルなどを明確に区別できます。

TeX Live では例えば(以下の YYYY には年が入ります)

W32TeX では

などのディレクトリがそれにあたります。

以下では,これらのディレクトリを一般に texmf とします。

TEXMF ツリーの中身

texmf ルートディレクトリの下位には,主に次のようなディレクトリがあります:

TeX でファイル検索を行う kpathsea ライブラリは,このディレクトリ構成に従って必要なファイルを検索します。 kpathsea ライブラリは多重 TEXMF ツリーにも対応しています。

TeX のマクロ,LaTeX のパッケージなど:texmf/tex

LaTeX のパッケージなどのファイルは,「TeX のフォーマット→パッケージの名前」に従って配置します。

まず,<format> とはフォーマットの名前です(例:latex, context, plain, amstex, texinfo)。 次のフォーマット名は TDS によって予約されています。

次に,<package> は TeX のパッケージ名です(例:babel, hyperref)。 次のパッケージ名は TDS によって予約されています。

例えば,hyperref パッケージは texmf/tex/latex/hyperref/ 以下に置かれているはずです。 これは hyperref パッケージが LaTeX フォーマットを必要とすることに由来します。

フォント:texmf/fonts

フォントに関するファイルは,大きく分けて2種類あります。

フォントファイル本体の配置

多くのファイルは「ファイルの種類→メーカー→書体名」の順で分類します。

一般ユーザが良く使う,または目にするファイルの種類 <type> は以下の6つでしょう。

以上6つのほかに TDS によって予約されているものは5つです:

次に,<supplier> はメーカーの名前,<typeface> は書体ファミリの名前です(例:cm, euler, times)。 次のメーカーは TDS によって予約されています。

次の書体名は TDS によって予約されています。

上を使い,例えば次のような配置にします。

フォント関連ファイルの配置

以下の3つは他の種類のファイルとは性質が違います。 これらも TDS によって予約されています。

これらのファイルは「ファイルの種類→シンタックス→パッケージ」

ここで,<syntax> には dvips, dvipdfmx などのフォントを扱うプログラムの種類が入ります。 ただし,updmap(-sys) プログラムを使うようにすれば,ほとんどの場合 dvips のみを使えば済みます。 lig ファイルは afm2pl というプログラムによって使われます。

ドキュメント:texmf/doc

ほとんどのパッケージには,解説書や見本といったドキュメントが付属しています。 ドキュメントには,テキストファイル,TeX のソースファイル,PDF ファイル,PostScript ファイル,DVI ファイルなどが含まれます。 これらはファイルの種類によらず,以下のように分類されて収録されます。

ここで,<category> には次のようなものが入ります。

TDS は次の <category> を予約しています。

それぞれの <category> の中では base というディレクトリが TDS によって予約されています。

ユーザがファイルを追加したい場合は(ローカルな追加)

はじめに述べたとおり,TeX Live や W32TeX では「多重 TEXMF ツリー」を採用し,「ローカルなファイル」を置く場所を明確に分けています。

2015年6月3日以降,W32TeX の TEXMF 等の変数には以下の値が設定されています(上のものほど優先)。 なお,W32TeX が C:\w32tex 以下にインストールされていると仮定します。

TEXMFHOMEC:/Users/ユーザ名/texmf
TEXMFPROJECTC:/w32tex/share/texmf-project
TEXMFCONTEXTC:/w32tex/share/texmf-context
TEXMFFONTSC:/w32tex/share/texmf-fonts
TEXMFLOCALC:/w32tex/share/texmf-local
TEXMFMAINC:/w32tex/share/texmf-dist
TEXMFDISTC:/w32tex/share/texmf-dist

また,TEXMF という変数にはこれらすべての値が優先順位に従って格納されています。

> kpsewhich -var-value=TEXMF
{C:/Users/ユーザ名/texmf,C:/w32tex/share/texmf-project,C:/w32tex/share/texmf-context,C:/w32tex/share/texmf-fonts,C:/w32tex/share/texmf-local,C:/w32tex/share/texmf-dist}

% [TODO] TeX Live の場合について要加筆

このうち重要なものは TEXMFDIST と TEXMFLOCAL,それに TEXMFHOME です。

TEXMFDIST は,TeX ディストリビューションの配布者がパッケージなどを入れる場所です。 TEXMFDIST は TeX ディストリビューションをアップデート*2すれば上書きされてしまいます。 そこで,一般ユーザ用に用意されているのが TEXMFLOCAL や TEXMFHOME です。 これらははユーザのための場所ですので,アップデートで上書きされることはありません。 追加パッケージなどのファイルを置くには,個人所有とするかシステム全体で共有するかで,置き場が二通り考えられます。

インストール先TEXMFHOMETEXMFLOCAL
及ぼす影響の範囲その個人のみシステム全体
Unix 系の場合の root 権限不要必要
用いるコマンドupdmapupdmap-sys

TEXMFLOCAL か TEXMFHOME のいずれかに TEXMFDIST に入っていないファイルを入れる場合は,TEXMFDIST を参考に同じ構造のディレクトリを掘ってください。 ファイルを入れたら必要に応じて mktexlsr を実行(後述)します。 これで,TeX が追加のファイルを見つけられるようになります。

一覧表の作成と更新 (mktexlsr) について

LaTeX がファイルを読み込むときは TeX のディレクトリの中から目当てのファイルを探します。 しかし,ファイルが膨大になるにつれ,プログラムがいちいち「ファイルがどこにあるのか」を検索するのに時間がかかるようになってしまいました。 そのため,「どこにどのファイルがあるのか」を記述した一覧表をあらかじめ作っておき,それをもとにファイルを探すという仕組みが作られました。 この一覧表の実体は ls-R というファイルで,これは Unix 系の

ls -R /usr/share/texmf-dist >ls-R

という一覧表を作るコマンドに由来します。 ls-R の中身はまさに ls -R の結果が吐き出されたようなもので,すなわちファイルの一覧を再帰的に深くまで表示したものです。 この ls-R の中身がプラットフォームによって微妙に異なるという問題を防ぐため,TeX では mktexlsr という専用のプログラムが配布されるようになりました。 mktexlsr は TEXMFDIST, TEXMFLOCAL などをたどり,そこにあるファイルのリストを記録した ls-R ファイルを新規に生成あるいは更新します*3

手元のシステムでこの一覧表を利用しているかどうかは,ls-R というファイルが存在するかどうかを調べるとわかります。

近年はハードディスク等も高速になっていることから,必ずしも ls-R が必要でなくなったようです。

rm `kpsewhich --expand-path='$TEXMFMAIN'`/ls-R

として ls-R を削除してしまっても構わない場合もあるでしょう。 削除した方がファイルの追加を気がねなく行えるという意見もあります。

% 少しずつ作業を進めていきたいと思います.


*1 TEXMF とは,TeXMETAFONT という意味です。
*2 アップデートは,TeX Live の場合は tlmgr を使用し,W32TeX の場合は初回インストールと同様の操作を繰り返すことになるでしょう。
*3 環境によっては,コマンド名は mktexlsr ではなく texhash という名前になっているかもしれません。

Last-modified: 2017-09-09 (土) 03:10:28 (827d)