Ubuntu 7.10 の LaTeX 環境でドイツ語処理 [12/02/2007]

0. 前書き
VineLinux を4.1にアップしてから、 特に何事もなく使いつづけていたのだが、 ひょんなこと からドイツ語機として利用しているThinkPad T60 に、Ubuntu 7.10 のドイツ語環境(こんな感じ)を作った。 ディスクトップ機では、Ubuntu 7.10の日本語環境を作ってあったので、 いろいろと比較してみた。今回は、Ubuntu 7.10 で、babel を利用したドイツ語ハイフネーションの話。

TeXのインストール自体は、 JapaneseLocalizedDerivative/LaTeXForJapanese を参考にSynaptic あるいは、 apt-get を使って必要と思われるパッケージを選択してインストールする。 ただし、現時点では、まだメタパッケージ latex-env-ja は完成していない模様。

babel package 自体は、 texlive-latex-baseに入っている。 apt-cache search babel をやってみれば分かる。 注意したいのは、アスキーが開発している日本語版LaTeXは、 teTeXを土台にしているが、 Ubuntu(Gutsy以降) では、 teTeX がすでに開発を終了(2006年5月)しているため、 TeX Live へ移行しているという点。 結論としては、texlive-lang-german パッケージをインストールすれば LaTeXで 普通に、 babel でのハイフネーションや ngerman.sty などが使える状態になる。 参考までに texlive-lang-german パッケージに入っているもの (Synaptic の情報)をメモしておく。

german -- Support for German typography.
germbib -- German variants of standard BibTeX styles.
mkind-german -- The mkind-german package.
r-und-s -- Chemical hazard codes.
uhrzeit -- Time printing, in German.
umlaute -- German input encodings in LaTeX.
hyphen-german -- German hyphenation patterns

Ubuntu は、土台がDebian なので、Debian 流に言語の設定ファイルはそれぞれ texlive-lang-* の形で提供されている。 以下は、このことが分かるに至るまでのドタバタである。

1. babel の language.dat を探す
Ubuntu 7.10 で、 babel を使った LaTeX ソース・ファイルをLaTeX でコンパイルしても、 ハイフネーションが英語流になってしまっていることから、 ハイフネーション用の設定ができていないことがわかった。 ログファイルにも以前に見た悲しいメッセージが…。

Package babel Warning: No hyphenation patterns were loaded for
(babel)                the language `German'
(babel)                I will use the patterns loaded for \language=0 instead.

without-german-hyphenation
ここでは、 KündigungsschutzKündigungss-chutz に分けられ、 ArbeitslebenArbeit-sleben に分けられてしまっている。

そこで、これまでの経験から、 (1) dehyphn.tex と、dehypht.texCTAN から取ってきて、 /usr/share/texmf-dist/tex/generic/hyphen/ に置き、 (2) babellanguage.dat を探して、そこに上記のファイル を指定し、 (3) mktexlsr すればよい、と思った。

そこで、 language.datlocate language.datで探してみると
(1) /var/lib/texmf/tex/generic/config/language.dat
(2) /usr/share/doc/texlive-latex-base/generic/babel/language.dat
(3) /usr/share/doc/texlive-doc/generic/babel/language.dat
(4) /usr/share/texmf-texlive/tex/generic/config/language.dat
にあることが分かった。doc ははずすとして、(4) を見ると、 (1) のリンクだった。 (4) を見てみると、以下のようなコメントがあった。

%%% This file was automatically generated by update-language.
%
% Please do not edit it directly. If you want to add or change
% anything here, please have a look at the files in:
%
%    /etc/texmf/language.d/
%
% and invoke update-language.
%
%%%

ということは、 /var/lib/texmf/tex/generic/config/language.dat を編集すればよいわけだが、update-language の仕組が気になったので、上のコメントに従って、 /etc/texmf/language.d/ を見てみることにした。

2. /etc/texmf/language.d/ の中のファイル
上記のコメントから推測すると、/etc/texmf/language.d/ の中のどれかのファイルを修正して、update-language というコマンドで、lanuguage.dat の修正からフォーマットファイルの生成までやってくれるようだ。 そこで、さっそく、このディレクトリの中を見てみた。

00tex.cnf
09texlive-base.cnf

がある。ファイルの頭の数字を見て、おお、システムVだ、なんて考えながら、 00tex.cnfを覗いてみると、 またしてもつれない返事。このファイルは、別のファイルによって生成され たもので、ただの雛型だということがわかった(確かに00が頭に付くのは、 readme の典型だった)。

% In Debian, language.dat is a file that is generated from
% configuration files in /etc/texmf/language.d/.  This file, 00tex.cnf,
% contains only some comments on how to edit these files.

そこで、09texlive-base.cnfこそ、 大元のファイルであろうと期待して見てみると、 確かに修正してよい config file らしい。

% 09texlive-base.cnf
% You can change/add entries to this file and changes will be preserved
% over upgrades, even if you have removed the main package prior
% (not if you purged it). You should leave the following pseudo comment
% present in the file!
% -_- DebPkgProvidedMaps -_-
%
% language.us (and the start of language.dat)
% - initial hyphenation patterns.
% Created long ago by Sebastian Rahtz and others.  Public domain.
%
% language.us is concatenated with the other language.*.dat files
% desired by the user to create language.dat.  This is done at the end
% of install-tl.sh.
...snip...

このファイルに、ドイツ語のハイフネーションファイル名を書いて、 language-update で一発か、 と思ったが、その前に、用心のためにネットで Debian 流の TeX の扱い方を少し勉強してから先に進むことにした。

3. Debian 勉強会資料集 2006年夏号
ネット上で最初に見つけたのは、「あんどきゅめんてっどでびあん」( Debian 勉強会資料集 2006年夏号) だった(debianmeetingresume2006-natsu.pdf)。この文書のP.38〜P.42 に DebianTeXファイル構造が解説してある (/usr/share/texmf-common/Debian-TeX-Policy.pdf.gzの和訳)。 P. 41 の「6.4.4 言語/ハイフネーション設定」には、次のように書いてある。

dh installtex を利用すればよいです. 必要なファイルをTEXMFMAIN に配置し, .cnf ファイルを/etc/texmf/language.d にインストール, update-language を呼び出すと /var/lib/texmf/tex/generic/config/language.dat が生成されます. ここまでいくと,あとは fmtutil-sys --byhyphen ‘kpsewhich --progname=latex language.dat‘ を呼び出すと再生成処理が行われ,利用できるようになります. 削除するときもこのコマンドです. 現状,update-language はLATEX 以外のhyphenation 設定ファイルを利用しているものには提供されていません.

ここでふと思い出して、
$ kpsewhich hyphen.tex
とやってみると、答えは /usr/share/texmf-texlive/tex/generic/hyphen/hyphen.tex
となり、ようやく、ハイフネーション関係は、 すべてTeX Live のパッケージになっていることが想像できた。そこで、 Synapticで、texlive をキーワードに検索してみると、 texlive-lang-german パッケージが見つかり、インストールした。

with-german-hyphenation
今度は、 unterstützenun- terstützen に、 KündigungsschutzKündigungs- schutz に分けられていれる。 英語のハイフネーションが適用されてしまっていた時(上の例)では、 4ヶ所で分綴されてしまっていたが、今回は2ヶ所となり、 かなり読み易くなった。ついでに、ログファイルの頭の所を見てみると、 ちゃんとハイフネーションパタンがロードされているのが分かる。

This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=latex 2007.11.16)  16 NOV 2007 06:47
entering extended mode
 %&-line parsing enabled.
**praktikum-2.tex
(./praktikum-2.tex
LaTeX2e <2005/12/01>
Babel  and hyphenation patterns for english, usenglishmax, dumylang, noh
yphenation, german, ngerman, german, ngerman, loaded.
(/usr/share/texmf-texlive/tex/latex/base/article.cls
Document Class: article 2005/09/16 v1.4f Standard LaTeX document class
(/usr/share/texmf-texlive/tex/latex/base/size12.clo
File: size12.clo 2005/09/16 v1.4f Standard LaTeX file (size option)
... snip ...

latex xxx.tex を実行すると、 Ubuntu 7.10 の場合は、 pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) が呼び出されるが、 VineLinux 4.1 の場合は、 pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) が呼び出される。 VineLinux 4.1pdfeTeX は、e-TeXの仲間で、DVI ファイルと同様に PDF の出力のできるものだ (その意味では、pdfeTeX は、 eTeX と以下に言及する pdfTeX を合体させたもの、とも言われている)。 従来の TeX/LaTeX との互換モードの他に、 拡張モード(extended mode) を持つのが eTeX だが、互換モードと拡張モードの区別がなく、 DVI ファイルと同様に PDF を出力できるのが pdfTeX とも言える。 なお、pdfTeXk のように、k のついたログが残るということは、 拡張機能が ON になっている、ということらしい(参考: man pdftex 等)。

4. Debian/Ubuntu での TeX 環境
texlive-lang-german をインストールすると、 /var/lib/dpkg/info/以下に、
texlive-lang-german.conffiles, texlive-lang-german.md5sums, texlive-lang-german.postrm,
texlive-lang-german.list, texlive-lang-german.postinst, texlive-lang-german.preinst
が置かれる。これらのファイルを見れば、config file の配置、 md5sum、インストールの前処理、後処理が分かる。

texlive-lang-german をインストールすると、 /etc/texmf/language.d/ 以下に 10texlive-lang-german.cnf が置かれた。 10texlive-lang-german.cnf の中には、 以下のようなハイフネーションの定義がある(なんでダブっているのか不明)。

german          xu-dehypht.tex
ngerman         xu-dehyphn.tex
german          xu-dehypht.tex
ngerman         xu-dehyphn.tex

xu-dehypht.texは、 /usr/share/texmf-texlive/tex/generic/xu-hyphen/ 以下にあるが、実は、XeTeX 用のウムラウト付きの文字を、utf-8 で扱えるようにする wrapper で、ハイフネーション自体は、 /usr/share/texmf-texlive/tex/generic/hyphen/dehypht.tex が使われている。 ついでに、apt-cache search XeTeX をしてみると、
texlive-base TeX Live: Essential programs and files
context - poweful TeX format
texlive-xetex - TeX Live: XeTex macros
となり、 texlive-base の中には、xetex.ini があるだけだった。

5. 感想
パッケージ環境というのは、一度使いはじめると、確かに便利だ。 昔のように、tarballを展開し、 付属の文書を読み、Makefile の設定をして、 自己責任でコンパイルしてインストールする世界から見ると、 なんと簡単なことか、と思う。
が、しかし、今回のように、たかがbabel のハイフネーションファイルを導入するだけのために、 ここまでパッケージにする必要があるのか、と思ってしまう。 Debian 流のパッケージ管理は確かにすぐれている。 前処理では、md5sum のチェックから、 古いパッケージとの整合性をチェックしてくれるし、 後処理では、config file の設定、 今回のケースでは、さらに(pdf)latex.fmt の生成や mktexlsr の実行などなど、一連の作業をこなしてくれる。 ユーザとしては、ただapt-get install texlive-lang-german を実行すればいいだけだ(あるいは、Synaptic でパッケージを選んで、クリック x 3)。

パッケージ化するにあたっては、そのディストリビューションごとの個性がでる。 VineLinux のパッケージでは、 LaTeX(pdfeTeX)(ASCIIの開発したpTeX ではない)は、初めから英語、ドイツ語、フランス語の他に、 28言語のハイフネーションをロードしたフォーマットファイルを提供している。 例えば、babel を使っていて、 途中で、オランダ語を使いたくなったら、\selectlanguage{dutch} とすればよい。一方、Ubuntu/Debian なら、 初めに apt-get install texlive-lang-dutch をする(インストールする)必要がある。 必要のあるものだけインストールするというポリシーなら、 この場合は Ubuntu/Debian の方がよいということになるが、 今のコンピュータは、babel のハイフネーションファイルが増えたところで処理速度上、 特に問題ないので、VineLinux 4.1 のように、初めから入れておくというのも考え方だ。

ただし、Ubuntu 7.10 で提供されている texlive-lang-* に必ずハイフネーション・ ファイルが含まれているかといえば、そうではない (e.g. texlive-lang-african)。 また提供されている texlive-lang-* の言語/文字も限定されている。例えば、 アイスランド語のハイフネーションをbabel で適用したい場合、VineLinux 4.1 なら、LaTeX のソースファイルに、 \selectlanguage{icelandic} と指定すればよいが、Ubuntu 7.10 では、予想に反して、texlive-lang-icelandic は提供されておらず、texlive-lang-other パッケージをインストールしなければならない。 「必要なものだけをインストールする」というのは、結局無理なのだ。昔だったら、 不要なファイルを手動でせっせと消せたのだが、パッケージ管理をしていると、そこらへんの自由がない。

ちなみに、このUbuntu 7.10 のパッケージに含まれるハイフネーションは、 コプト語、エスペラント語、エストニア語、アイスランド語、 バハサ・インドネシア語、インテルリングア語, ルーマニア語、セルビア語、 スロベニア語、トルコ語、高地ソルブ語、ウェールズ語 (copthyph.tex, eohyph.tex, ethyph.tex, icehyph.tex, inhyph.tex, iahyphen.tex, rohyphen.tex, srhyphc.tex, sihyph.tex, tkhyph.tex, sorhyph.tex, cyhyph.tex)だ。

面白いのは、このパッケージに、かの偉大な数学者ペアノ (Peano, Giuseppe) が作ったという人工国際語「インテルリングア語」(Interlingua) のハイフネーションが入っているということだ。 エスペラント語が入っているから、不公平にならないように、ということかな。 気になったのは、VineLinux 4.1/usr/share/texmf-dist/tex/generic/hyphen には、cyhyph.tex がないこと。 language.dat にもウェールズ語のハイフネーションがリストされていないにもかかわらず、 pdfeTeX のログには ..., welsh loaded と出ているのはなぜ?

1 TBのハードディスクが3〜4万円程で買える時代(2007年12月)だ。 たとえTeX Live の総量がおよそ 1 GB あろうとも、 1 TB のハードディスクだったら、 その容量のおよそ「千分の一」しか占有しない、なんて考えることもできる。 ただ、無駄なファイルは消去するのが基本だと考えている人間としては、 あまりすっきりしない。