「インフォシーク isweb ライト」サービス終了に伴い、 本サイトは以下のURLに移転することになりました。
現在のサイトは、10月末を以て終了となります。
http://zrbabbler.sp.land.to/note.html

蛇足事項、その他

本サイトで配布されているLaTeXパッケージを使う上で知っておくことが 望ましいTeX関係の知識を書いておく場所。

TeX がいっぱいです

エンジン TeX--XeT e-TeX 拡張 pdfTeX 拡張 Omega 拡張 LuaTeX 拡張 XeTeX 拡張 pTeX 拡張 upTeX 拡張
TeX ×××× ××××
e-TeX ×× ××××
pdfTeX × ××××
Omega ×× ××××
Aleph × ××××
LuaTeX × ×××
XeTeX ×× ×××
pTeX ×××× ×××
e-pTeX ×× ×××
upTeX ×××× ××
e-upTeX ×× ××
  • ◎: 完全サポート; ○: 変更が加えられている; △: 一部のみサポート; ×: サポートなし。
  • TeX--XeT 拡張: e-TeX の TeX に対する拡張のうち、 右横書き言語処理に関するもの。
  • e-TeX 拡張: e-TeX の TeX に対する拡張のうち、 「TeX--XeT 拡張」でないもの。 レジスタ数の増加(32768 個)等。
  • pdfTeX 拡張: pdfTeX の e-TeX に対する拡張。 PDF 直接出力と PDF 機能のサポート。
  • Omega 拡張: Omega の TeX に対する拡張。 符号空間の 16 ビットへの拡張、 レジスタ数の増加(65536 個)、 数式ファミリの増加(256 個)、 多様な書字方向への対応、 OTP 処理、等。
  • LuaTeX 拡張: LuaTeX の Aleph + pdfTeX に対する拡張。 Lua インタプリタの搭載とそれによる内部処理のカスタム拡張のサポート、 符号空間の Unicode 全体への拡張、 TrueType・OpenType フォントのサポート、 他にも全般に及ぶ拡張が行われている。
  • XeTeX 拡張: XeTeX の e-TeX に対する拡張。 符号空間の Unicode 全体への拡張、 数式ファミリの増加(256 個)、 TrueType・OpenType フォントの広範なサポート、 一部の言語特有処理のサポート、 トークン自動挿入処理、等。
  • pTeX 拡張: pTeX の TeX に対する拡張。 説明は省略。
  • upTeX 拡張: upTeX の pTeX に対する拡張。 和文符号空間の Unicode 全体への拡張、 入力文字の和文取扱に対する制御、等。
エンジン 欧文符号空間 和文符号空間 出力形式 レジスタ数 数式fam数
TeX 8ビット×DVI 25616
e-TeX 8ビット×DVI 3276816
pdfTeX 8ビット×DVI/PDF 25616
Omega Unicode BMP×DVI 65536256
Aleph Unicode BMP×DVI 65536256
LuaTeX Unicode×DVI/PDF 65536256
XeTeX Unicode×XDV 32768256
pTeX 8ビットJIS X 0208DVI/縦書DVI 25616
e-pTeX 8ビットJIS X 0208DVI/縦書DVI 3276816
upTeX 8ビットUnicodeDVI/縦書DVI 25616
e-upTeX 8ビットUnicodeDVI/縦書DVI 3276816
  • Unicode BMP は 16 ビット(0~0xFFFF)、 Unicode 全体は 21 ビットに収まる(0~0x10FFFF)。
  • 仕様上は pTeX の和文符号空間は「ISO 2022 の 94² 文字集合」 であるが、実際には JIS X 0208 が用いられる。 エンコーディング形式は、 DVI 上では ISO-2022-JP 相当、内部処理では Shift_JIS または EUC-JP のいずれかである。 なお、内部エンコーディングが Shift_JIS の場合は Shift_JIS 拡張領域も(実装仕様上は)扱える。
  • XeTeX の出力形式は XDV と呼ばれる独自の拡張 DVI である (拡張子は .xdv)。 しかし実際の XeTeX のコマンドは、 内部で自動的に xdvipdfmx コマンドを起動して XDV → PDF の変換を行っている。
  • pTeX で和文縦書きを用いる場合は縦書処理命令を含む独自拡張の DVI を出力する。 横書きの和文のみを含む場合は通常の DVI の仕様に合致する DVI を出力する。

「パッケージ」の意味

TeX のコミュニティで、「パッケージ」 という用語は次の異なる 2 種類の意味で使われている。

  • その 1(以降「パッケージ¹」と記す): TeX(LaTeX も含む)に関連するある機能を実現するために提供される一連のファイルの集まり。 TeX 言語で記述されたファイルの他に、 DVI ウェアの設定ファイルや TFM ファイルや Type1 フォント等の、 他の形式のファイルを含むことがある。
  • その 2(以降「パッケージ²」と記す): LaTeX2e において機能拡張を提供する標準のファイル形式で、拡張子は .sty。 (これは LaTeX 特有の用語である。)

LaTeX2e 用のパッケージ¹においては、 パッケージ¹とパッケージ²は同じ名前をもつことが一般的である。 例えば、hyperref パッケージ¹のメインとなるパッケージ²の名前は hyperref(ファイル名は hyperref.sty)である。 しかし、少数ながら両者の名前が異なることもあり、 例えば、unicode パッケージ¹のメインのパッケージ² (直接読み込まれることは少ないが)の名前は ucs であり、 unicode という名前のパッケージ²は存在しない。

本サイトでは、便宜的に両者を区別したい場合には、 「パッケージ¹」のことを「(パッケージ)バンドル」 と呼ぶことにしている (混同の恐れがない場合は「パッケージ」と呼ぶこともある)。 この用語は、 「無関係な複数の機能についての『提供するためのファイル』の集まり」 を指すことが多いのであまり適当ではないと感じているが、 今のところ通用されている他の用語が見当たらない。

大文字 vs 小文字

PXbase vs pxbase 等

拙作の TeX 関連ソフトウェアにおいては、 「パッケージ¹」には BX~、PX~ 等の大文字から始まる名前を、 「パッケージ²」には bx~、px~ 等の小文字から始まる名前を慣習的に用いている。 アーカイブファイル名は pxbase.zip のように 「パッケージ¹名を小文字に直したもの」にしている。

注意: 説明書等に記載されているインストール先パスの中で、 パッケージ¹名に相当する部分の大文字小文字が現状では統一されていないことが気になっている。 別にどちらにしても動作には影響ないので、 好みでどちらかに統一しても構わない。

Babel vs babel 等

拙作のパッケージ以外でも、 「パッケージ¹」と「パッケージ²」 で大文字と小文字の使用が異なるものがある。 例えば Babel パッケージ¹の中核のパッケージ²の名前は babel であり、また、 otf パッケージ²が含まれるパッケージ¹の通称は 「OTF パッケージ」である。

TeX vs tex 等

大文字交じりの「TeX」や「LaTeX」は「ソフトウェアの名称」であり、 小文字の「tex」や「latex」は「コマンド名」である (前者は所謂「ロゴ」で書かれることもある)。 例えば、LaTeX を起動するコマンドが latex であり、 pLaTeX を起動するコマンドが platex である。 この辺りは、基本的に「Perl と perl」、「Ruby と ruby」 の関係と同じである。

ただし、「tex」については少し注意が必要で、 正確には「TeX のコマンド名が tex」ではなく 「plain TeX のコマンド名が tex」というのが正しい。 同じように、「plain pTeX のコマンド名が ptex」であり、 また pdftex、xetex、luatex 等についても同様である。

参考: TeX は組版用言語(組版エンジン)の名であり、 「実際に起動されるもの(ソフトウェア)」 は「TeX を用いて組み立てられた組版ソフトウェア(LaTeX、plain TeX、等)」 であると考えられる。 このことを「LaTeX は TeX の一種である」と呼ぶのであれば (そうするのが通例)、 tex も latex も「TeX の起動コマンド名」 だということになる。

なお、「Tex」や「TEX」等の他の組み合わせは、 (誤記でない限りは)TeX とは無関係なものを指す (参照:Wikipedia)。

.dtx に立ち向かう方策

例えば、foo という名前の 「パッケージ²」 (foo.sty ファイル) が必要になり、インストールされていないことが判明したので、 Web から foo.sty があると思しき 「パッケージ¹(アーカイブ)」である foo.zip (或いは foo.lzh とか foo-2.0.tar.gz といった名前のファイル) をダウンロードしてきたとする。

参考: ちなみに、foo.sty がインストールされているかを調べるには、 「kpsewhich foo.sty」というコマンドを実行すればよい。 何かパス名が表示された場合は、foo.sty はそこに存在していて使用可能のはずである。 何も表示されない場合は、foo.sty はインストールされていない。

ところが、それを展開(解凍)すると、確かに foo.sty の解説文書 (テキストや PDF ファイル)があるが、肝心の foo.sty が入ってなくて、 foo.dtx というファイルがある、というケースがある。 この dtx 形式(DocStrip 文書形式)のファイルは、簡単に言うと 「パッケージ²本体(foo.sty)と解説文書が 1 つのファイルにまとめたもの」 であり、これを TeX エンジンで処理することで、 パッケージ²のファイルや解説文書(DVI 文書か PDF 文書) を得ることができる。

ところが困ったことに、この「ファイルを取り出す方法」 に幾つかの「流儀」があり、これがユーザを混乱させる原因になっている。 CTAN では「ファイルを取り出す方法を、.dtx の中身以外の場所 (例えば別にプレーンテキストの README ファイルを用意する、等) に記述しておく」ことを要請しているが、 何故か判らないがこれも守られないことが多い。

ここでは、現在行われている幾つかの方法について解説する。 以下では、DocStrip ファイルの名前を foo.dtx とし、 パッケージ¹を構成するファイルを foo.sty の 1 つだけとする (複数の場合もありうる)。 この場合、解説文書のファイル名は foo.dvi (もし PDF 形式に変換したのならば foo.pdf)となる。

ファイル抽出の「流儀」の数々

本節の例では、ファイル抽出に用いる TeX エンジンは 8 ビット欧文 TeX(tex/latex)としたが、 例えば、対象が「pLaTeX 用のパッケージ」であるなら、 pTeX(ptex/platex)を用いるのが正しいかも知れない (XeLaTeX 等の場合も同じ)。

流儀 1: dtx + drv + ins の 3 点セット

foo.dtx(DocStrip 本体)の他に、foo.drv(ドライバファイル) と foo.ins(インストーラファイル)がある場合は、 ほぼ間違いなくこの流儀に従っている。 DocStrip が用いられた最初期に用いられた方法。

  • foo.sty を得るには「latex foo.ins」とする。
  • foo.dvi を得るには「latex foo.drv」とする。

流儀 2: dtx + ins の 2 点セット

foo.dtx と foo.ins があるが、foo.drv はないという場合はこの流儀に従っていると思われる。 恐らく最も一般的に用いられている方法。

  • foo.sty を得るには「latex foo.ins」とする。
  • foo.dvi を得るには「latex foo.dtx」とする。

流儀 3: dtx のみで plain と LaTeX で処理分別

foo.dtx しかない、という場合の可能性の 1 つ。 ただし「説明されないと絶対に判らない方法」なので、 この方法を採る場合は必ずどこかに説明があるはずである。

  • foo.sty を得るには「tex foo.ins」とする。 つまり、plain TeX で処理する。
  • foo.dvi を得るには「latex foo.dtx」とする。 こちらは LaTeX で処理する。

恐らくファイルを 1 つだけにするために考え出された方法であるが、 欠点として、「説明されても判らない」危険性を伴うということがある。 例えば、「plain TeX で処理してね」などという説明だと 「plain TeX て何ですか?」ということになりかねないだろう。

流儀 4: dtx のみで一括処理

foo.dtx しかない、という場合のもう 1 つの可能性。 最近流行している方法である。

  • 全ての処理を「latex foo.dtx」で行う。 つまり、まず foo.sty が生成され、 その後に foo.dvi の組版が行われる。

ファイルを 1 つにする方法として、 前の「流儀 3」よりもこちらの方が合理的である。 なぜなら、foo.sty の抽出と解説文書の組版の処理を分ける必然性は一見してないように思えるし、 またこの方法だと foo.dvi の組版に foo.sty 自身を利用することが可能になるからである。 しかしこの方法には次のような重大な欠点が存在する。

解説文書の LaTeX ソースで使われているパッケージ (勿論 foo.sty ではない) がインストールされていない等の理由でエラーが起こった場合の対処が非常に分かりにくい。

もし本当に解説文書を自力で組版したいのであれば、 その必要なパッケージを追加インストールしていくしかないのであるが、 実際にはその必要がない場合が多い。 CTAN ではパッケージ(アーカイブ) 中に解説文書を組版・変換した PDF 文書を含めることを要請している (Web 上での解説文書の閲覧を可能にするために必須)ので、 解説文書を自力で組版する環境を整える必要はないことが多いのである。

それでは、実際にエラーが起こったときの正しい対処方法であるが、 これは上の説明を理解していれば推測できる。 すなわち、次のようである。

エラープロンプトに対して「x」を入力する等の方法で、 LaTeX の処理を中止する。

つまり、解説文書の組版が行われるのは、本体ファイル抽出の後なので、 そこで処理を諦めて中止したとしても、 目的のファイル foo.sty の生成は正常に完了しているのである。 もし本当にファイルの生成が正常に完了したかを確かめたい場合は、 画面表示を調べて、 以下に示すような感じでファイル生成のメッセージがあることを確認すればよい。

This is pdfTeX, Version 3.1415926-1.40.11 (Web2C 2010)
 restricted \write18 enabled.
entering extended mode

……(中略)……

********************************************************
* No Configuration file found, using default settings. *
********************************************************

)

Generating file(s) ./foo.sty

Processing file foo.dtx (foo) -> foo.sty        + ← この表示がある
File xeCJK.dtx ended by \endinput.              +  ならば foo.sty
Lines  processed: 10112                         +  は正常に生成
Comments removed: 10086                         +  されている
Comments  passed: 0                             +
Codelines passed: 3                             +

(c:/usr/local/share/texmf/tex/latex/base/ltxdoc.cls
Document Class: ltxdoc 2007/11/11 v2.0u Standard LaTeX documentation class
*************************************
* Local config file ltxdoc.cfg used
*************************************

……(中略)……

! LaTeX Error: File `pxmika.sty' not found.     + ← パッケージ
                                                +  不足のため
Type X to quit or <RETURN> to proceed,          +  組版処理中に
or enter new name. (Default extension: sty)     +  エラー発生

Enter file name: x                              + ← x 入力で処理中止