#contents

**概要 [#q3279849]
LaTeX の機能を拡張したり、新たな機能を追加するには“パッケージ”というものを読み込ませます。パッケージの実体(の主要部分)はテキストファイルで、いろいろなコマンドの定義が書かれています。パッケージファイルの拡張子は“.sty”です。
>ただし、パッケージによっては sty ファイルのみからなるとは限らず、
他のファイルを必要とするものもあります。
例えば、graphicx パッケージの場合、
“ドライバ指定”に応じた def ファイルも用いられます。
非標準のフォントを利用するためのパッケージの場合には、
タイプセット時に tfm/jfm ファイルや fd ファイルも用いられ、
さらに出力時に dviware に応じた map ファイルも用いられることでしょう。

例えば、多段組みを実現するために“multicol”というパッケージを利用するなら次のように記述します。
// multicol って,商用利用は禁止されていましたよね?ライセンスはユーザが
// きちんと確認する必要がありそうです.

 \documentclass{jarticle}
 \usepackage{multicol}
 
 \begin{document}
 
 ここは一段組み。
 
 \begin{multicols}{3}
 ここは三段組み。
 でも三段組みにするためにはもっと長い例文が必要なので、意味も無いことをここにだらだら書き連ねています。
 このくらい書けば三段に分かれて組み上げられるでしょうか?
 \end{multicols}
 
 \end{document}

このファイルの2行目の所にある“\usepackage{multicol}”というのが、multicolパッケージを読み込む指示です。ファイルの拡張子は省いてあっても multicol.sty というテキストファイルが読み込まれます。このファイルには multicols という環境の定義が書かれているので、本文中で“\begin{multicols}{3}”のようにして三段組みの機能を使用することができるのです。

このようなパッケージファイルは自分で作ることもできますし、他人が作ったものをダウンロードすることもできます。自分で作った場合は世界中に配布してもよいでしょう。LaTeX システムを一式インストールした場合は標準的なパッケージも既に入っています。\texmf\tex\latex のようなフォルダや、そのサブフォルダを探してみてください。上記の multicol.sty であれば \texmf\tex\latex\tools の中にあるでしょう。お使いのコンピュータの中の、LaTeX が見つけることのできる場所にパッケージファイルが置いてあれば、上記の“\usepackage”コマンドによって読み込むことができます。

** パッケージの入手、インストール [#n0d876cf]
手元にないパッケージは外部から入手してインストールしましょう。
世界中に公開されているパッケージは[[CTAN]]サーバーからダウンロードできます。あるいは、パッケージ作成者の方が個人のウェブサイトからダウンロードできるようにしているものもあります。

*** ダウンロードするファイル [#w767dc76]
パッケージ本体のファイル(“.sty”)だけでなく関連する他のファイルも一式あった方が良いでしょう。それぞれ用意されていたり用意されていなかったりします。
: .sty | パッケージ本体
: .dtx | パッケージ本体と説明文書を合わせたもの
: .ins | dtx ファイルから、パッケージ本体である sty ファイルを生成するためのもの
: readme.txt など | ダウンロードする前に読むべき説明書。ファイル名は“Read me.(=私を読んで)”ということ
: .pdf | 説明文書(PDF形式)
: .doc | 説明文書(txt形式。“doc”という拡張子であっても Microsoft Wordの文書であることは稀で、単なるテキストファイル)

パッケージ本体が用意されていない場合がありますが、そのときは dtx ファイルと ins ファイルによって本体を生成します。関連のあるパッケージ群をひとまとめにして配布している場合などは、一つの dtx ファイルから複数のそれぞれ異なる名前の sty ファイルを生成することもありますから、目当ての sty ファイルが無い場合には他の名前の dtx ファイルや ins ファイルが必要となるかもしれません。例えば、multicol.sty を生成するためには multicol.dtx および tools.ins が必要となります。

*** インストール [#n18c984a]
パッケージ本体である sty ファイルがあれば、それを LaTeX が見つけることのできる場所に保存すればインストールは完了です(注:下記「mktexlsr について」を参照)。

パッケージ本体である sty ファイルが無い場合には、他のファイルから生成します。dtx ファイルと ins ファイルを同じフォルダに保存した上で、LaTeX に ins ファイルを処理させます。例えば multicol.sty を生成するにはコマンドラインから
 platex tools.ins
を実行します。tools.ins には、multicol.dtx を読み込んで multicol.sty を生成するような指示が書いてあるので、そのとおりに sty ファイルが生成されます。(このときに、説明文書や使用方法を示すサンプル文書が一緒に生成されることもあります)

無事に sty ファイルが生成されたら、それを LaTeX が見つけることのできる場所に保存すればインストールは完了です(注:下記「mktexlsr について」を参照)。

dtx ファイルから説明文書を生成することもできます。そのためには単に dtx ファイルを LaTeX で処理すればよいのです。例えば multicol パッケージの説明文書が欲しければ
 platex multicol.dtx
を実行します。すると、通常の TeX 文書を処理したときと同様に multicol.dvi という dvi ファイルが生成されます。これが説明文書です。
// pLaTeX では処理できない dtx ファイルも結構あるような感じがしますけれど。
// ドキュメントの中で、例えば、 pdfLaTeX 依存のコマンドを使っていても、
// pLateX でも、部分的に利用可能なパッケージもありますし、
// ただ単に 8 bit の文字が使われているだけの事もありますし。

*** mktexlsr について [#tc299bdb]
LaTeX がファイルをなにか読み込むときには,コンピューターの中から目当てのファイルを探し出すのにそれなりの時間がかかります. システムによっては,この時間を短縮するために予めコンピュータ内のファイルとその保存場所の一覧表を作っておいて,ファイルを探すときにはその一覧表を参照するように設定されているものがあります. この一覧表でファイルを管理しているシステムにおいては,新しいパッケージなどをインストールするたびに一覧表を更新してやらないとせっかくインストールしたつもりのパッケージも LaTeX から見つけてもらえずに使用できません. 一覧表を使わないシステムにおいては,そのような更新作業は必要ありません. 手元のシステムで一覧表を利用しているかどうかは,ls-R というファイルが存在するかを調べるとわかります。

この一覧表の実体は ls-R というファイルである.ls-R の名前の由来は,UNIX コマンドから来ており,ls コマンドに -R オプションを付けたものである.ls-R の中身は,名前の由来通り,ls -R の結果が吐き出されたようなものであり,すなわち,ファイルの一覧を再帰的に深くまで表示したものである. ls-R ファイルを新規に生成あるいは更新するコマンドが mktexlsr((環境によっては,コマンド名は mktexlsr ではなく texhash という名前になっているかもしれない)) であり,mktexlsr は $TEXMFDIST, $TEXMF, $TEXMFLOCAL などをたどって,そこにあるファイルのリストを記録した ls-R ファイルを作る.

ただ,今は,mktexlsr よりも汎用的に TeX 関連の環境設定をする texconfig{,-sys} コマンドに,rehash というオプションを付けて実行するほうがよいかもしれない 
(sys 付きのものは,ホームディレクトリの下の texmf ディレクトリや .texmf-config ディレクトリなどは見ない).

** カスタマイズ [#ef28e4ed]
パッケージが自分の利用目的にぴったり合えばよいですが、パッケージの提供する機能を少し変更して利用したいこともあります。

*** パッケージファイルを直接書き換える方法 [#tee3be98]
パッケージの実体はテキストファイルであって LaTeX の命令が書いてあるだけですから、その気になれば一部を書き換えたりすることも可能です。しかし安易に書き換えるのはいけません。書き換えたパッケージファイルがインターネットなどを通じて他の多くのユーザーの手に渡って混乱が生じたことも過去にあります
//<!-- epsf.sty?など -->
。
止むを得ず書き換える場合は、''ファイル名も変更''して元のものと区別がつくようにする必要があります。\usepackage で読み込むところでも変更後の名前で読み込むようにします。(書き換えの可否などはパッケージの製作者の意向に従う必要があります。詳しくはパッケージに付属の文書(readme.txt など)を調べてください。)

*** プリアンブルで再定義する方法 [#ca904922]
パッケージの中で定義されるマクロなどをパッケージ読み込み後に再定義することもできます。

例えば、foo.sty の中で \newcommand\bar{... 10pt ...} のような定義があって、この中の“10pt”を“20pt”にしたいとします。この場合読み込み側のファイルで、
 \usepackage{foo}
 \renewcommand\bar{... 20pt ...}
のようにすれば良いわけです。\newcommand は新しいマクロを定義しますが、定義済みのマクロを再定義するには \''re''newcommand を使います。
また、再定義するマクロの名前や再定義の内容に @ が現れる場合は、次のように再定義全体を \makeatletter と \makeatother で挟んでおく必要があります。
 \usepackage{foo}
 \makeatletter
 \renewcommand\bar{... 20pt ...}
 \makeatother
マクロの定義などについて詳しくは[[TeX入門/マクロの作成]]などを参考にして下さい。