[[TeX入門]]/
[[最初の例>TeX入門/最初の例]]/
[[簡単な数式 (1)>TeX入門/簡単な数式(1)]]/
[[簡単な数式 (2)>TeX入門/簡単な数式(2)]]/
各種パッケージの利用/
[[レポート>TeX入門/レポート]]/
[[HTML と LaTeX の比較>TeX入門/HTMLとLaTeXの比較]]/
[[複雑な数式>TeX入門/複雑な数式]]/
[[図表>TeX入門/図表]] /
[[文献引用]]/
[[索引作成]]/
[[マクロの作成>TeX入門/マクロの作成]]/
[[スライドの作り方(jsarticle 編)>TeX入門/スライドの作り方(jsarticle編)]]/
[[応用的な使い方>TeX入門/応用的な使い方]]

----

''目次''
#contents


* 各種パッケージの利用 [#l5aceaca]

この項では、LaTeX におけるパッケージとは何か、あるいはそれらの利用法について説明します。

** パッケージとは [#q3279849]

LaTeX の機能を拡張したり、新たな機能を追加したりするために用いるのが「パッケージ」です。
既に TeX 入門では、[[簡単な数式(1)>TeX入門/簡単な数式(1)]] で
amsmath, amssymb という数学用パッケージや
newtxtext, newtxmath という Times 系フォント用パッケージを紹介しました。
他にも多数の便利なパッケージがありますので、[[目的別パッケージ簡易リファレンス]]を覗いてみてください。

パッケージは具体的には以下のようなファイルから成ります。

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

** パッケージの使用例 [#z7340739]

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

 \documentclass{jsarticle}
 \usepackage{multicol}

 \begin{document}

 ここは一段組み。

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

 \end{document}

このファイルのプリアンブル((\documentclass と \begin{document} に挟まれた部分のことを「''プリアンブル''」といいます。この用語は覚えておきましょう。))にある
“\usepackage{multicol}” というのが、multicol パッケージを読み込む指示です。
ファイルの拡張子は省いてあっても multicol.sty というテキストファイルが読み込まれます。
このファイルには multicols という環境の定義が書かれているので、本文中で
“\begin{multicols}{3}” のようにして三段組みの機能を使用することができるのです。

このようなパッケージファイルは自分で作ることもできますし、他人が作ったものをダウンロードすることもできます。
自分で作った場合は世界中に配布してもよいでしょう。

** パッケージファイルの場所 [#p3338b79]

LaTeX システムを一式インストールした場合は、標準的なパッケージも既に入っています。
C:\texlive\2014\texmf-dist\tex\latex のようなフォルダーや、そのサブフォルダーを探してみてください。

上記の multicol.sty であれば Windows PowerShell またはコマンド プロンプトから
 kpsewhich multicol.sty
を実行すると

-TeX Live の場合は
 c:/texlive/2014/texmf-dist/tex/latex/tools/multicol.sty
-W32TeX の場合は
 c:/w32tex/share/texmf-dist/tex/latex/tools/multicol.sty

のように表示されて multicol.sty の場所がわかります。
お使いのコンピュータの中の、LaTeX が見つけることのできる場所にパッケージファイルが置いてあれば、上記の “\usepackage” コマンドによって読み込むことができます。

** パッケージの入手、インストール [#n0d876cf]

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

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

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

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

パッケージ本体である sty ファイルが無い場合には、他のファイルから生成します。
dtx ファイルと ins ファイルを同じフォルダーに保存した上で、LaTeX に ins ファイルを処理させます。

例えば multicol.sty を生成するにはコマンドラインから
 latex tools.ins
を実行します。
tools.ins には、multicol.dtx を読み込んで multicol.sty を生成するような指示が書いてあるので、そのとおりに sty ファイルが生成されます。
このときに、説明文書や使用方法を示すサンプル文書が一緒に生成されることもあります。

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

ファイル群は TDS (TeX Directory Structure) に従って各ディレクトリに入れないと,
本体が使用不可だったり,texdoc コマンドで説明文書が読めなかったりします。
慣れないと,これが一番やっかいなところです。
LaTeX パッケージの場合,説明文書 (.pdf, README, .txt, .doc, .tex など) は一般に
ファイル群は TDS (TeX Directory Structure)
に従って各ディレクトリに入れないと、本体が使用不可だったり、texdoc
コマンドで説明文書が読めなかったりします。
慣れないと、これが一番やっかいなところです。
LaTeX パッケージの場合、説明文書 (.pdf, README, .txt, .doc, .tex など) は一般に
 $TEXMFLOCAL/doc/latex/packagename/
に入れます。ソース (.dtx, .ins) は
 $TEXMFLOCAL/source/latex/packagename/
に入れます。 本体 (.sty, .cls, .fd, .def, .cfg 等々) は
に入れます。本体 (.sty, .cls, .fd, .def, .cfg 等々) は
 $TEXMFLOCAL/tex/latex/packagename/
に入れます。
詳細は [[TeX のディレクトリ構成]] を参照してください。

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

*** mktexlsr について [#tc299bdb]
LaTeX がファイルを読み込むときは、コンピュータの中から目当てのファイルを探します。
ファイルを探すのはそれなりの時間がかかります。

[[TeX Live]] では、ファイルを探す時間を短縮するために予めコンピュータ内のファイルとその保存場所の一覧表を作っておいて、ファイルを探すときにその一覧表を参照するように設定されています。
TeX Live はこの一覧表でファイルを管理しているため、新しいパッケージなどをインストールするたびに一覧表を更新してやらないとせっかくインストールしたつもりのパッケージも LaTeX から見つけてもらえずに使用できません。

一覧表を使わないシステムにおいては,そのような更新作業は必要ありません。
一覧表を使わないシステムにおいては、そのような更新作業は必要ありません。
[[W32TeX]] では、一覧表を使う運用と全く使わない運用の両方が可能です。

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

'''TODO''':[[TeX のディレクトリ構成]]あたりで $TEXMF についての説明を書かないと、何を言っているかわからないかも。詳しく知りたい人向けに。

カスタマイズまでは TeX 入門で取り上げなくても良いかもしれないので、別所に移すことを検討中です。 -- アセトアミノフェン (2015-02-23)

----

** パッケージのカスタマイズ [#ef28e4ed]

パッケージが自分の利用目的にぴったり合えばよいですが,時にはパッケージの提供する機能を少し変更して利用したいこともあるかもしれません.
ここでは,既存のパッケージの機能をカスタマイズする方法を説明します.
パッケージが自分の利用目的にぴったり合えばよいですが、時にはパッケージの提供する機能を少し変更して利用したいこともあるかもしれません。
ここでは、既存のパッケージの機能をカスタマイズする方法を説明します。

*** プリアンブルで再定義する方法 [#ca904922]

パッケージの中で定義されるマクロなどを,パッケージ読み込み後に再定義するという方法です.
パッケージの中で定義されるマクロなどを、パッケージ読み込み後に再定義するという方法です。

例えば,パッケージ foo.sty の中で \newcommand\bar{... 10pt ...}
のような定義があって,この中の “10pt” を “20pt” にしたいとします.
\newcommand は LaTeX で「新しいマクロを定義する」という意味で,定義済みのマクロを再定義するには \''re''newcommand を使います.
例の場合,読み込み側のファイルで
例えば、パッケージ foo.sty の中で \newcommand\bar{... 10pt ...}
のような定義があって、この中の “10pt” を “20pt” にしたいとします。
\newcommand は LaTeX で「新しいマクロを定義する」という意味で、定義済みのマクロを再定義するには \''re''newcommand を使います。
例の場合、読み込み側のファイルで
 \usepackage{foo}
 \renewcommand\bar{... 20pt ...}
のようにすれば良いわけです.
のようにすれば良いわけです。

また,再定義するマクロの名前や再定義の内容に @ が現れる場合は,次のように再定義全体を \makeatletter と \makeatother で挟んでおく必要があります.
また、再定義するマクロの名前や再定義の内容に @ が現れる場合は、次のように再定義全体を \makeatletter と \makeatother で挟んでおく必要があります。
 \usepackage{foo}
 \makeatletter
 \renewcommand\bar{... 20pt ...}
 \makeatother
マクロの定義などについて詳しくは [[TeX入門/マクロの作成]] などを参考にして下さい.
マクロの定義などについて詳しくは [[TeX入門/マクロの作成]] などを参考にして下さい。

*** パッケージファイルを直接書き換える方法 [#tee3be98]

パッケージの実体はテキストファイルであって LaTeX の命令が書いてあるだけですから,その気になれば一部を書き換えたりすることも可能です.
しかし''安易に書き換えるのはいけません''.
書き換えたパッケージファイルがインターネットなどを通じて他の多くのユーザーの手に渡って混乱が生じたことも過去にあります((かつて epsf.sty などで[[混乱が生じた>ePrint#p6c5ac8a]]ことがあります.http://www2u.biglobe.ne.jp/~simtak/nenga/graphic.html も参照.)).
パッケージの実体はテキストファイルであって LaTeX の命令が書いてあるだけですから、その気になれば一部を書き換えたりすることも可能です。
しかし''安易に書き換えるのはいけません''。
書き換えたパッケージファイルがインターネットなどを通じて他の多くのユーザーの手に渡って混乱が生じたことも過去にあります((かつて epsf.sty などで[[混乱が生じた>ePrint#p6c5ac8a]]ことがあります。http://www2u.biglobe.ne.jp/~simtak/nenga/graphic.html も参照。))。

やむを得ずパッケージファイルを直接書き換える場合は,''ファイル名も変更''して元のものと区別がつくようにする必要があります.
\usepackage で読み込むところでも変更後の名前で読み込むようにします.
やむを得ずパッケージファイルを直接書き換える場合は、''ファイル名も変更''して元のものと区別がつくようにする必要があります。
\usepackage で読み込むところでも変更後の名前で読み込むようにします。

また,当然ながらパッケージの書き換えの可否は製作者の意向に従う必要があります.
詳しくはパッケージに付属の文書(readme.txt など)を調べてください.
安全な「プリアンブルで再定義する方法」がほんとうに不可能かどうか,まずは検討してみてください.
また、当然ながらパッケージの書き換えの可否は製作者の意向に従う必要があります。
詳しくはパッケージに付属の文書(readme.txt など)を調べてください。
安全な「プリアンブルで再定義する方法」がほんとうに不可能かどうか、まずは検討してみてください。

----

'''TODO''':以下もまだ整理が必要ですね。何かいい案はないでしょうか。
** パッケージのバージョン確認 [#k1782eb2]

% バージョンだけを拾うわけではないですが、例えば以下でどうでしょうか? -- kmaeda

** ディレクトリ [#k1782eb2]
% 簡潔で良いと思います。ありがとうございます。 -- アセトアミノフェン

パッケージファイルを探し、バージョンを確認する例
'''TODO''':Windows で似たような操作は可能でしょうか。

% どうやら teTeX 時代に書き込まれたものの名残のようです。2010年頃に
teTeX 用に書き込まれたものを、TeX Live 用に無理やり書き換えたもののようです。
いまでは kpsewhich って探すのが普通ではないでしょうか?

% それから、!! は確か Unix 系で直前に実行したコマンドを意味するのでしたっけ。
cat を実行するとファイルの内容全体が表示されるわけですが、もう少し端的に
バージョン情報だけを取得できる方法はないでしょうか?

% バージョンだけを拾うわけではないですが,例えば以下でどうでしょうか? -- kmaeda

TeX で読み込まれるパッケージのファイルの場所は,kpathsearch ライブラリを使って探すことができます.
TeX で読み込まれるパッケージのファイルの場所は、kpathsearch ライブラリを使って探すことができます。
 $ kpsewhich graphics.sty
 /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty
Unix のシェルでは,バッククォートでコマンドを括ると,その出力を引数として別のコマンドに渡すことができます.このことを用いて,grep を利用すれば次のようにしてパッケージのバージョンを出力することができます.
Unix のシェルでは、バッククォートでコマンドを括ると、その出力を引数として別のコマンドに渡すことができます。このことを用いて、grep を利用すれば次のようにしてパッケージのバージョンを出力することができます。
 $ grep -C1 \\ProvidesPackage `kpsewhich graphics.sty`
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesPackage{graphics}
           [2014/10/28 v1.0p  Standard LaTeX Graphics (DPC,SPQR)]

// % Unix では、!! で直前に実行したコマンドを取得できます。
// cat を実行するとファイルの内容全体が表示されます。
// 端的にバージョン情報だけを取得したい場合は grep を実行するのがよさそうです。
//
//-TeX の kpathsearch ライブラリを使って探す場合
//
// $ kpsewhich graphics.sty
// /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty
// $ cat `!!`
//    :
//    :
// \ProvidesPackage{graphics}
//           [2014/10/28 v1.0p  Standard LaTeX Graphics (DPC,SPQR)]
//    :
//
//-Unix 系のコマンド find を使って探す場合
//
// $ find /usr/local/texlive -name graphics.sty -print
// /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty
// $ cat `!!`
//    :
//    :
// \ProvidesPackage{graphics}
//           [2014/10/28 v1.0p  Standard LaTeX Graphics (DPC,SPQR)]
//    :