次世代の TeX / LaTeX 環境をどうしようか、あれこれ document を読みながら考えているのだが、これが実は結構悩ましい。
次世代の TeX / LaTeX 環境としてぱっと頭に浮かぶのは、
- XeTeX / XeLaTeX
- LuaTeX / LuaLaTeX
- ConTeXt (w LuaTeX)
という感じだろう。ConTeXt を使う気は今のところないので、早い話が XeTeX か LuaTeX か、という話である。
日本語環境ということで考えると、LuaTeX-ja プロジェクトが存在する以上、LuaTeX を選択するのが現実的なのは言うまでもない。しかし、LuaTeX と XeTeX を比較した場合、ひとつだけ僕が問題に感ずることがあって、それは polyglossia のことである。
polyglossia は、多言語を XeTeX 上で扱うためのパッケージである。従来の TeX / LaTeX 業界では、この目的にはもっぱら babel が用いられていたが、polyglossia はこの後継とでも言うべき存在である。有用なパッケージで、日本語に関しては九州大学の岩瀬則夫氏が、babel の japanese パッケージに相当する gloss-japanese.ldf と gloss-nihongo.ldf を『XeTeX を使ってみよう(事故で全部消してしまったのでサービス停止中)』で公開されている。
僕は polyglossia の存在を知った当初、これが LuaLaTeX でも使えるだろうと思い込んで喜んだ。しかし……残念ながら、少なくとも現状では polyglossia は XeLaTeX でしか使えないようなのだ。ググってみると、海外でも polyglossia を LuaLaTeX で使いたい、というニーズはあるようなのだが……
じゃあ素直に babel を使えばいいじゃないか、という話になるかもしれない。たしかに babel は LuaLaTeX 上で使えるのだが、japanese パッケージは LaTeX2ε での使用しか考慮されていない。どうやら、LuaLaTeX で多言語環境(日本語を含めて)を享受したいなら、polyglossia を LuaTeX でも動作するようにするか、japanese パッケージを LuaLaTeX + LuaTeX-ja の環境下で使えるように書き換えるかするしかない、ということのようだ。むう。まあ、自力で細々と始めてみましょうか……
まず、babel で japanese.ldf を使った場合に出るエラーをチェックすると、
(/usr/local/texlive/2011/texmf-dist/tex/platex/japanese/japanese.ldf
Package babel Warning: No hyphenation patterns were loaded for
(babel) the language `Japanese'
(babel) I will use the patterns loaded for \language=0 instead.
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H for immediate help.
...
l.53 \newif\if西
暦 \西暦true%
?
……と出て止まる。これって……アレじゃないの? platex とかではプリミティブに日本語の文字を使っても OK だったけど、LuaTeX ではダメ……ってこと?
ということで、japanese.ldf を見てみると……
\newif\if西暦 \西暦true%
\def\西暦{\西暦true}%
\def\和暦{\西暦false}%
……この辺りからの記述で、
が登場してくるのだけど、とりあえずこれらを、
- \if西暦 → \ifSeireki
- \西暦 → \Seireki
- \和暦 → \Wareki
のように置換する。ついでに、このファイルを japanesedash.ldf とすることにして、マクロ中の japanese という文字列を japanesedash に置換する。これを japanesedash.ldf という名前で保存して、/usr/local/texlive/texmf-local/tex/platex/japanesedash 辺りに置くことにする。
まさかこれだけで……いや、これだけでいいのである。これを行った後、LuaLaTeX + babel で japanese が(japanesedash という名前に変わっているわけだが)使えるようになったことを確認している。ということで、当面はこれでしのぐことにしようと思う。
txfonts や Mathptmx を使っていた僕も、最近は(ようやく?) TeX Gyre Termes をメインの欧文フォントとして使っているのだけど、最近、どうも何かおかしい、と気付いたのだ。TeX Gyre Termes を使うと、日本語フォントに影響が出ていないだろうか? と。
今迄安易に:
\usepackage{tgtermes}
としていたのだが、この tgtermes パッケージを使うと、日本語のフォントが明朝体のみに固定されてしまうようだ。OTF パッケージを併用して、 tgtermes パッケージの使用を宣言する行の位置を変えてみても、これは変わらない。ということで、現時点では:
\renewcommand{\rmdefault}{qtm}
のように指定して使っている状態である。
意外な盲点だったのだが、でも TeX Gyre Termes が高品質で、こうやってでも使いたいフォントであることは変わらない。他によりよいものが出てくるまでは、こうやって使い続けるであろう。
僕は別に TeX / LaTeX 関連を専門としているわけでもないし、いわゆる TeXnician という存在でもない。この20年近くの間、文書を作成するのに比較的よく TeX / LaTeX を使ってきて、そのプロセスで必要なことを自力で(他者のコメントに助けられながら、であることは言うまでもない)行ってきて、その余力で、たとえば『TeX Live を使おう――Linux ユーザと Mac OS X ユーザのために――』を書いたり、 各種パッケージのバグを見つけたり……ということに至っているだけである。だから、殊この分野に関しては、先生とか呼んだり「教授」という言葉を向けられたりする(もっとも最近は「教授」と「教示」の区別がつかない人が多いのだけど)のは御勘弁願いたいところである。この点、まずは断り書きをしておくことにする。
さて、『TeX Live を使おう……』でも:
おそらく LuaTeX-ja が更に進展してきたら、また日本語処理環境のベストなかたちを模索するときがくるかもしれませんが、とりあえずは TeX Live で済ませられるかな、と思っています。あと1年か、2年か、あるいはもう少しか。LuaTeX-ja プロジェクトの成果が TeX Live に組込まれるかもしれませんし、まだ僕には何とも分かりません。とりあえず、今後も動向を見守りつつ、環境整備を行い続けることになりそうです。
と書いたけれど、どうやら、そろそろこの時期が来ているような気がするのだ。勿論、確実な処理を要求するならば、ここ何年かのデファクトスタンダードである platex + dvipdfmx が優れていることは間違いないのだが、この先に向けた助走に入ることを考えてもよさそうな状況が整いつつあるのだ。
まず、何と言っても大きいのが、先週末に LuaTeX-ja が CTAN に submit された、ということ。今現在、TeX Live 2011 をインストールして、tlmgr で最新のパッケージにアップデートするだけで、LuaTeX-ja は使えるようになるのだ!
実際、横書きに限定するならば、LuaTeX-ja は相当使える状態である。以下に、同じ文書を LuaLaTeX + LuaTeX-ja で組版して PDF としたもの (sauerbruch.pdf) と pLaTeX + dvipdfmx で組版して PDF としたもの (sauerbruch2.pdf) を示す。ほぼ同一の組版内容になっていることがお分かりかと思う。
ただし、現状では両者の間には様々な相違がある。まず、上の2文書は体裁としては同一であり、双方ともフォントを埋め込んでいるのだが、そのサイズは倍程違っている。これは dvipdfmx による埋め込みの場合、欧文フォントが CFF (Compact Font Format) と呼ばれるコンパクトな形式で埋め込まれるのに対して、LuaTeX での埋め込みの場合は type 0 フォントが埋め込まれているからである。
また、上2ファイルは各々 jarticle.cls と ltjarticle.cls を使用しているのだが、これを jsarticle.cls と ltjsarticle.cls で行った場合、組版結果には相応の相違が生ずる。これはおそらく http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/ の「FAQ 長さがずれます」で書かれているような処理の相違によるものだと思うのだが……また、長さの単位に zw を使いたい場合は \zw とする必要があるし、XeLaTeX の場合と同様、en-dash や em-dash を出すためには、プリアンブルに:
\defaultfontfeatures{Ligatures=TeX}
と書いておく必要がある。
そして、今月に入ってからのことのようなのだけど、conTeXt で UTF-8 の日本語を扱ってみると、扱えないこともないようだ……という話が出ているのだ。おそらく、ここをお読みの方で conTeXt を御存じの方はそう多くないかもしれないけれど、TeX をエンジンとして使った新しいマークアップ型の組版システムである。欧米では既に結構広まっているようなのだけど、日本語を突っ込んだ場合、複数行に渡る文字列の扱いがうまくいかない、という問題があった。しかし、W32TeX で有名な近畿大の角藤氏が書いたコメントで、この問題が回避できるんじゃないの? という話になったのであった。既に、Z. R. 氏のマクロツイーターの記事 (http://d.hatena.ne.jp/zrbabbler/20120416/1334595982) にある例で試して、これがうまくいくことを確認している。
ただし、これも問題がないというわけではない。まず、ヒラギノフォントでこれを行おうとすると、どうもうまくいかない。最新の ConTeXt Mk IV ではうまくいく、という話もあるのだけど、現時点で TeX Live に収録されているバイナリでは、この問題が不可避だった。
そして、LuaTeX-ja でも同様なのだけど、処理にかかる時間が非常に長い。ConTeXt の場合は、おそらく無駄な処理を何度も繰り返していると思われるのだが、LuaTeX-ja の場合は、初回にフォントのキャッシュを作成するのに非常に長い時間を要するものの、2回目以降はそう問題になることもなさそうな時間で処理できる。
このように、未だ pLaTeX + dvipdfmx と同様に、あるいはそれらを凌駕するような速度・質での処理ができる、というところには達していないのだけど、将来的には現状の pTeX / pLaTeX を凌駕するものになる可能性は非常に高い。ワールドワイドで見たら、今後は LuaTeX / LuaLaTeX や、それをエンジンとして用いている ConTeXt が defact standard になる可能性が大なので、日本人としても、これを無視するわけにはいくまい。eptex や uptex が登場する少し前までの日本語 TeX / LaTeX 環境がガラパゴス化寸前の状態だったことを考えると、現状の安定したシステムだけに依存するのは、やはり危ういと言わざるを得ないのだ。
Linux を使い始めてもう20年近くなるわけだが、kernel panic に出喰わすことは滅多になかった。ブートローダーやブートストラップ絡みで見ることはあっても、動作中に見る、ということは、まあまずなかった。
ところが、kernel を 3.4-rc3 に更新してから、もう3度も kernel panic に遭遇している。ファイルシステム等に高い負荷がかかったときに出るようなのだけど、どうもその周辺の挙動がログに残らないようで、未だ原因特定には至っていない。
最近は、普段使いには1種類の kernel だけを入れておくようにしていたのだけど、以前と同じように、安定版と開発版、各々の最新 kernel を入れておくようにしよう、ということで、現在 3.3.2 を build 中である。しかしなあ……こんなこと、まずこの何年かなかったのだけど、一体何が起きているのか。とりあえず状況のメモがてら、ここに書いておくことにしよう。