パッケージのインストール

人見祥磨
作成 作成

LaTeX の機能を拡充させたり、新たな機能を追加するのがパッケージです。 LaTeX 文書のプリアンブルで \usepackage{<package>} とすることで、外部のパッケージを読み込み、LaTeX の機能を拡充させることができます。

ここでは、実際にパッケージを読み込む話には深く触れず、 パッケージを利用する下準備として、パッケージをインストールする方法を紹介します。

TeX のディレクトリ構成

例えば、graphicx パッケージを利用したくて、\usepackage{graphicx} と記述したとします。 この LaTeX 文書をタイプセットすると、LaTeX は\usepackage{graphicx} の記述を見つけて、システムから graphicx.sty というファイルを探して、それを読み込みます。

このとき、graphicx.sty というファイルをシステム全体から探すと、 膨大な時間がかかってしまううえに、TeX とは関係のないファイルまで検索されてしまうので、 都合が悪いです。ということで、TeX では一定の規則に従って、 関連するファイルを配置することにしています。これを TDS (TeX Directory Structure) といいます。 すなわち、graphicx.sty は TDS の構成に従った場所に配置されており、 LaTeX は TDS の構成に基づいて graphicx.sty を検索するのです。 逆に言えば、自分の手で新しくパッケージを導入する場合、 TDS の構成に基づいて新しいパッケージを配置しなければ、 TeX はそれを見つけることができないということです。

TEXMF ツリー

では、実際に TeX ではどのようなディレクトリ構成をとっているかというと、 多重 TEXMF ツリーという形式をとっています。 一定の規則に従ってファイルを配置した、TEXMF ツリーを複数用意し、 それを使い分けるという運用方法です。

ひとつの TEXMF ツリーではなく、複数の TEXMF ツリーを利用することで、 ディストリビューションが用意したファイル群と、 マシンのユーザーが用意したファイル群を明確に分離することができます。 それによって、システムをアップデートしたときに、 ユーザーが用意したファイル群が上書きされることを防ぐことができます。

多重 TEXMF ツリーという通り、TEXMF ツリーには 7 つほどありますが、 (詳しくは TeX Wiki の当該ページ参照) 実際に重要なのは TEXMFDIST と、TEXMFLOCAL の 2 つです。それぞれ、ディストリビューションによって構成されたものと、 ユーザーが各自のマシンに各々用意するものとなります。 それぞれの TEXMF ツリーがどこに存在するかは、kpsewhich コマンドで確認することができます。

% kpsewhich -var-value TEXMFLOCAL
/usr/local/texlive/texmf-local
% kpsewhich -var-value TEXMFDIST
/usr/local/texlive/2020/texmf-dist

ということで、TEXMFDIST は /usr/local/texlive/2020/texmf-dist、 TEXMFLOCAL は /usr/local/texlive/texmf-local/ であることがわかりました。 上に例示したのは、自分の環境 (macOS) で実行した結果のコピペですが、 他の UNIX な OS でも、デフォルトではほとんど同じ結果になると思います。 先程も述べたとおり、ユーザーが自分で用意するものは、TEXMFLOCAL に入れることになっているので、/usr/local/texlive/texmf-local/ に自前のものを格納します。

TEXMF ツリーの構造

自前のものを格納する場所を把握しても、その中身がどのような構造になっているかを知らないと、 適切に格納することができません。ということで、 TEXMF ツリーの内部がどのようになっているかのお話に移ります。

実際に、どのようなディレクトリ構造になっているかを知るために、 TEXMFLOCAL がどのようになっているかを tree コマンドで確認してみます。 なお、以下の例は、ある程度カスタマイズを進めた私の環境での例なので、 どのような環境も以下のようになるわけではないことに気をつけてください。

% tree -d -L 2 /usr/local/texlive/texmf-local
/usr/local/texlive/texmf-local
├── bibtex
│   ├── bib
│   └── bst
├── doc
│   ├── fonts
│   ├── latex
│   └── lualatex
├── dvips
│   └── local
├── fonts
│   ├── afm
│   ├── enc
│   ├── fonts
│   ├── map
│   ├── opentype
│   ├── pfm
│   ├── source
│   ├── tfm
│   ├── truetype
│   ├── type1
│   └── vf
├── metapost
│   └── local
├── source
│   └── latex
├── tex
│   ├── latex
│   ├── lualatex
│   └── plain
├── texdoc
├── tlpkg
└── web2c

32 directories

こうしてみると、どのディレクトリに何を配置するべきか、 ディレクトリ名である程度類推できるようになっています。 この中で、特に重要なのは、texdocsource の 3 つのディレクトリです。 フォントをインストールするとなると、fonts も重要ですが、 TeX システムに新しくフォントをインストールする人は多くはないでしょう。

なお、TEXMF ツリーからファイルを検索するときに、 ファイル名やファイルの拡張子によって、検索するディレクトリを決め打つので、 ファイルを配置するときは、正しいディレクトリに配置しなければ、 正しく検索されません。注意しましょう。

Kpathsea と ls-R ファイル

先程、kpsewhich というコマンドが出てきましたが、 それは、Kpathsea ライブラリに含まれており、 TeX が TEXMF ツリーから必要なファイルを探し出す役割を担っています。 大昔の TeX では、ファイルの検索に必要なパスの設定などを、 OS の環境変数で行っていました。しかし、TeX 関連のソフトウェアの数や、 設定項目の件数が増えたことなどから、「TeX 環境版の環境変数」 を管理するために、Kpathsea が開発されました。 また、今述べたとおり、Kpathsea は TeX の環境変数の管理のみならず、 TeX 関連のファイル検索をする役割も担っています。

さて、Kpathsea がファイル検索をする役割を持つことは述べたとおりですが、 ファイルを検索するに際して、膨大な量のファイルを検索するのには時間がかかります。 そこで、予めファイルの一覧を作成して、その一覧からファイルを検索するという手法を取ります。 このファイルの一覧は ls-R というファイル名で作成されます。このファイル名は、 ls -R < ls-R というコマンドでファイル一覧を作成していたことに由来します。

ls-R を利用するのは、ls-R を利用すると設定したパスだけです。 具体的には、全ての TEXMF ツリーを表示する kpsewhich -var-value TEXMF を実行したときに、 !! が前置されているパスだけです。 通常は、TEXMFLOCAL は ls-R を利用する設定になっています。 最近のコンピューターは十分高速なので、ls-R を利用しない設定にする人もいるようです。

ls-R ファイルを作成するには、mktexlsr コマンドを用います。 通常は TEXMFLOCAL に書き込むには管理者権限が必要になるので、 必要に応じて、sudo で管理者権限で実行します。 また、TEXMF ツリーに変更を加えた場合も、その変更を ls-R に反映させるため、 mktexlsr を実行する必要があります。

パッケージをインストールする

では、実際にパッケージをインストールしてみましょう。

例として、 地球流体電脳倶楽部 TeX スタイルファイル (Dennou Style) を挙げます。まず、ファイルを取得して必要なファイルを生成します。 アーカイブに含まれている *.doc や、*.ins は、動作に必要な *.sty や、 ドキュメントを生成するのに必要なファイルです。 中間生成物は不要なので削除します。

% wget http://www.gfd-dennou.org/library/cc-env/TeXmacro/dennou/dennou-sty-6-current.tar.gz
% tar xf dennou-sty-6-current.tar.gz
% cd dennou_sty/DOC
% make
% make doc
% make doc-dev
% ls *.dvi | xargs -L 1 dvipdfmx
% rm *.drv *.idx *.log *.dvi *.toc *.ilg *.glo *.ind *.aux *.gls

さて、これで動作に必要な *.sty や、ドキュメント *.pdf を生成することができました。 次に、TEXMFLOCAL にこれらを配置します。

TEXMFLOCAL/tex/latex/<packagename>

tex ディレクトリの中には、TeX の動作に必要なものを配置します。 具体的には、今回は *.sty ファイルが該当します。 Dennou Style は LaTeX で動作するパッケージなので、 latex というサブディレクトリを掘って、さらにその中に Dennou 6 というディレクトリを配置し、その中に *.sty 一式を全て入れましょう。

TEXMFLOCAL/doc/latex/<packagename>

doc ディレクトリには、ドキュメント類を格納します。 doc ディレクトリに置いてなければ、tecdoc コマンドでドキュメントを表示することができません。 今回、ドキュメントに該当するのは、*.pdf, *.tex, README, COPYRIGHT, WHATS_NEW_and_TODO の計 7 つのファイルです。 先程と同様に、サブディレクトリを掘って格納します。

TEXMFLOCAL/source/latex/<packagename>

source ディレクトリには、ソースコードを格納します。 今回は、*.sty や *.pdf (とその元になる *.tex)を生成する *.doc や *.ins が該当します。 Makefile は該当しませんが、入れても特に支障はないので、 上 2 つのディレクトリに入れなかったもの全てを格納して大丈夫です。 同じようにサブディレクトリを掘って格納しましょう。

実際にパッケージを配置し終えたら、mktexlsr を実行して ls-R を作成します。先程も述べたとおり、mktexlsr を実行しなければ、 ファイル一覧に載らないので、検索されません。

% sudo mktexlsr