TDS (TeX Directory Structure) とは,TeX の標準的なディレクトリ構成です。 TeX Live はこの TDS に従っています。
実際にどのように TeX に関するファイルやディレクトリを配置したらよいのか考えます。 パッケージやフォントを追加する際,あるいは使用しているパッケージの置き場を探す際に参考になるはずです。
[TODO] TDS のバージョンによる違いはどの程度でしょうか?
現在の TeX ディストリビューションのほとんどは TEXMF ツリー*1を採用しています。 TEXMF ツリーには,パッケージやクラスファイル・フォント・スクリプト・説明文書などが規則に従って分類され,収録されています。
TeX Live では複数の TEXMF ツリーを使い分ける「多重 TEXMF ツリー」が採用されています。 これにより,ディストリビューションが用意したファイルとユーザが追加したローカルなファイルなどを明確に区別できます。
TeX Live では例えば(以下の YYYY には年が入ります)
などのディレクトリがそれにあたります。
以下では,これらのディレクトリを一般に texmf とします。
texmf ルートディレクトリの下位には,主に次のようなディレクトリがあります:
TeX でファイル検索を行う kpathsea ライブラリは,このディレクトリ構成に従って必要なファイルを検索します。 kpathsea ライブラリは多重 TEXMF ツリーにも対応しています。
LaTeX のパッケージなどのファイルは,「TeX のフォーマット→パッケージの名前」に従って配置します。
まず,<format> とはフォーマットの名前です(例:latex, context, plain, amstex, texinfo)。 次のフォーマット名は TDS によって予約されています。
次に,<package> は TeX のパッケージ名です(例:babel, hyperref)。 次のパッケージ名は TDS によって予約されています。
例えば,hyperref パッケージは texmf/tex/latex/hyperref/ 以下に置かれているはずです。 これは hyperref パッケージが LaTeX フォーマットを必要とすることに由来します。
フォントに関するファイルは,大きく分けて2種類あります。
多くのファイルは「ファイルの種類→メーカー→書体名」の順で分類します。
一般ユーザが良く使う,または目にするファイルの種類 <type> は以下の6つでしょう。
以上6つのほかに TDS によって予約されているものは5つです:
次に,<supplier> はメーカーの名前,<typeface> は書体ファミリの名前です(例:cm, euler, times)。 次のメーカーは TDS によって予約されています。
次の書体名は TDS によって予約されています。
上を使い,例えば次のような配置にします。
以下の3つは他の種類のファイルとは性質が違います。 これらも TDS によって予約されています。
これらのファイルは「ファイルの種類→シンタックス→パッケージ」
ここで,<syntax> には dvips, dvipdfmx などのフォントを扱うプログラムの種類が入ります。 ただし,updmap(-sys) プログラムを使うようにすれば,ほとんどの場合 dvips のみを使えば済みます。 lig ファイルは afm2pl というプログラムによって使われます。
ほとんどのパッケージには,解説書や見本といったドキュメントが付属しています。 ドキュメントには,テキストファイル,TeX のソースファイル,PDF ファイル,PostScript ファイル,DVI ファイルなどが含まれます。 これらはファイルの種類によらず,以下のように分類されて収録されます。
ここで,<category> には次のようなものが入ります。
TDS は次の <category> を予約しています。
それぞれの <category> の中では base というディレクトリが TDS によって予約されています。
はじめに述べたとおり,TeX Live では「多重 TEXMF ツリー」を採用し,「ローカルなファイル」を置く場所を明確に分けています。
TeX Live 2023 の TEXMF 等の変数には以下の値が設定されています(上のものほど優先)。 なお,TeX Live 2023 が C:\texlive\2023 以下にインストールされていると仮定します。
TEXMFCONFIG | C:/Users/ユーザ名/.texlive2023/texmf-config |
TEXMFVAR | C:/Users/ユーザ名/.texlive2023/texmf-var |
TEXMFHOME | C:/Users/ユーザ名/texmf |
TEXMFLOCAL | C:/texlive/texmf-local |
TEXMFSYSCONFIG | C:/texlive/2023/texmf-config |
TEXMFSYSVAR | C:/texlive/2023/texmf-var |
TEXMFDIST | C:/texlive/2023/texmf-dist |
また,TEXMF という変数にはこれらすべての値が優先順位に従って格納されています。
> kpsewhich -var-value=TEXMF {{}C:/Users/ユーザ名/.texlive2023/texmf-config,C:/Users/ユーザ名/.texlive2023/texmf-var,C:/Users/ユーザ名/texmf,!!C:/texlive/texmf-local,!!C:/texlive/2023/texmf-config,!!C:/texlive/2023/texmf-var,!!C:/texlive/2023/texmf-dist}
このうち重要なものは TEXMFDIST と TEXMFLOCAL,それに TEXMFHOME です。
TEXMFDIST は,TeX ディストリビューションの配布者がパッケージなどを入れる場所です。 TEXMFDIST は TeX ディストリビューションをアップデート*2すれば上書きされてしまいます。 そこで,一般ユーザ用に用意されているのが TEXMFLOCAL や TEXMFHOME です。 これらははユーザのための場所ですので,アップデートで上書きされることはありません。 追加パッケージなどのファイルを置くには,個人所有とするかシステム全体で共有するかで,置き場が二通り考えられます。
インストール先 | TEXMFHOME | TEXMFLOCAL |
及ぼす影響の範囲 | その個人のみ | システム全体 |
Unix 系の場合の root 権限 | 不要 | 必要 |
用いるコマンド | updmap | updmap-sys |
TEXMFLOCAL か TEXMFHOME のいずれかに TEXMFDIST に入っていないファイルを入れる場合は,TEXMFDIST を参考に同じ構造のディレクトリを掘ってください。 ファイルを入れたら必要に応じて mktexlsr を実行(後述)します。 これで,TeX が追加のファイルを見つけられるようになります。
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 というファイルが存在するかどうかを調べるとわかります。
mktexlsrを実行して一覧表を更新する必要があります。 Unix 系であれば管理者権限が必要ですので,
sudo mktexlsrとして実行します。
% 少しずつ作業を進めていきたいと思います.