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


目次

各種パッケージの利用

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

パッケージとは

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

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

パッケージの使用例

例えば、多段組みを実現するために “multicol” というパッケージを利用するなら次のように記述します。

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

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

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

パッケージファイルの場所

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

上記の multicol.sty であれば Windows PowerShell またはコマンド プロンプトから

kpsewhich multicol.sty

を実行すると

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

パッケージの入手、インストール

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

ダウンロードするファイル

パッケージ本体のファイル(“.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 が必要となります。

インストール

パッケージ本体である 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 など) は一般に

$TEXMFLOCAL/doc/latex/packagename/

に入れます。ソース (.dtx, .ins) は

$TEXMFLOCAL/source/latex/packagename/

に入れます。本体 (.sty, .cls, .fd, .def, .cfg 等々) は

$TEXMFLOCAL/tex/latex/packagename/

に入れます。 詳細は TeX のディレクトリ構成 を参照してください。

dtx ファイルから説明文書を生成することもできます。 そのためには単に dtx ファイルを LaTeX で処理すればよいのです。 例えば multicol パッケージの説明文書が欲しければ

latex multicol.dtx

を実行します。 すると、通常の TeX 文書を処理したときと同様に multicol.dvi という dvi ファイルが生成されます。 これが説明文書です。

mktexlsr について

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

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

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

この一覧表の実体は ls-R というファイル*2で、手元のシステムで一覧表を利用しているかどうかは ls-R というファイルが存在するかを調べるとわかります。 ls-R ファイルを新規に生成あるいは更新するコマンドが mktexlsr*3であり、mktexlsr は $TEXMFDIST, $TEXMFLOCAL などをたどって、そこにあるファイルのリストを記録した ls-R ファイルを作り出します。

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

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


パッケージのカスタマイズ

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

プリアンブルで再定義する方法

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

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

\usepackage{foo}
\renewcommand\bar{... 20pt ...}

のようにすれば良いわけです。

また、再定義するマクロの名前や再定義の内容に @ が現れる場合は、次のように再定義全体を \makeatletter と \makeatother で挟んでおく必要があります。

\usepackage{foo}
\makeatletter
\renewcommand\bar{... 20pt ...}
\makeatother

マクロの定義などについて詳しくは TeX入門/マクロの作成 などを参考にして下さい。

パッケージファイルを直接書き換える方法

パッケージの実体はテキストファイルであって LaTeX の命令が書いてあるだけですから、その気になれば一部を書き換えたりすることも可能です。 しかし安易に書き換えるのはいけません。 書き換えたパッケージファイルがインターネットなどを通じて他の多くのユーザーの手に渡って混乱が生じたことも過去にあります*4

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

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


パッケージのバージョン確認

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

% 簡潔で良いと思います。ありがとうございます。 -- アセトアミノフェン

TODO:Windows で似たような操作は可能でしょうか。

TeX で読み込まれるパッケージのファイルの場所は、kpathsearch ライブラリを使って探すことができます。

$ kpsewhich graphics.sty
/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty

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)]
 

%% ちょっと面倒かもしれませんけれど、こういうのもどうでしょうか (単に \listfiles を使っているだけです.こんなことをせずとも、普通に \usepackage するだけでも、log のほうにはちゃんと、パスもバージョンも出力されているのですが…)。

次の 6 行からなるファイルを作って、例えば pkgver.tex という名前で保存します:

\documentclass[dvipdfmx]{article}
\listfiles
\typein[\pkgverPkgName]{^^JEnter package name(s):}
\usepackage{\pkgverPkgName}
\begin{document}
\end{document}

この pkgver.tex をプロンプトで latex で処理すると、読み込まれたクラスファイルのパスの表示の後に、

Enter package name(s):
\pkgverPkgName=

と促されるので、例えば、

\pkgverPkgName=graphics,color

のようにパッケージ名を入力すると、\usepackage で読み込まれたファイル (や、更にそれらが読み込んでいるファイル群) のパス一覧が表示され、最後に、読み込まれたファイルすべての *File List* が表示されます。

(注意 1) ドライバは dvipdfmx の決め打ちにしているため、ドライバ指定の要らないパッケージの場合には、

LaTeX Warning: Unused global option(s):
    [dvipdfmx].

という Warning が出ます。

(注意 2) 上では 「latex で処理すると」 と書きましたが、pLaTeX を前提にしているパッケージの場合には、

! LaTeX Error: This file needs format `pLaTeX2e'
               but this is `LaTeX2e'.

というエラーになりますので、その場合は platex で処理する必要があります。

 

*1 \documentclass と \begin{document} に挟まれた部分のことを「プリアンブル」といいます。この用語は覚えておきましょう。
*2 ls-R の名前の由来は UNIX コマンドから来ており、ls コマンドに -R オプションを付けたものです。ls-R の中身はまさに ls -R の結果が吐き出されたようなもので、すなわちファイルの一覧を再帰的に深くまで表示したものです。
*3 環境によっては、コマンド名は mktexlsr ではなく texhash という名前になっているかもしれません。
*4 かつて epsf.sty などで混乱が生じたことがあります。http://www2u.biglobe.ne.jp/~simtak/nenga/graphic.html も参照。

Last-modified: 2015-03-23 (月) 15:15:25 (36d)