2007年12月25日火曜日

TeX — 日本語名のファイルを扱いたい

 巷では,TeX 文書のソースファイル名を日本語にするなんてことは余り推奨されていない.しかしそれはあくまで TeX 自体と OS の技術的都合から派生する問題である.エンドユーザーにとっては,ファイルの名前は日本語にしておいた方が圧倒的に管理しやすい.日本語ならファイル名が短くても内容を的確に表現することができるし,検索もしやすい(*1).だからユーザーにとっては日本語ファイル名を使う方が生産的であり,望ましい.そこで,僕は Mac OS9 や Windows で TeX を使うときは実際そのようにしている.

 ところが,MacOS X になってから日本語のファイル名が使えなくなってしまった.具体的には,TeX のソースファイルの中で ¥includegraphic¥input などのコマンドにより外部ファイルを読込む場合,ファイル名やパス名に日本語が入っているとファイルが見つけられず,コンパイルができない.

 その理由は,Mac OS X が複数の文字コードを状況によって使い分けていることにある.OS X はファイル名を UTF-8 で管理しているが,テキストファイルの中身は Shift JIS になっている.
 例として,次の記述:
 ¥input{漢字.tex}
を含む,Shift JIS でエンコードされたソースを Shift JIS ベースの TeX コンパイラにかけた場合について考えよう.

 ファイル名 “漢字.tex” は Shift JIS によって
  8A BF 8E 9A 2E 74 65 78 
   (16進表記;下線部が「漢字」に相当)
とエンコードされているので,コンパイラはこのデータ列をOS X に渡してファイルを開くようリクエストする.ところが OS X は “漢字.tex” という名前を UTF-8 で
  E6 BC A2 E5 92 97 2E 74 65 78 
   (16進表記;下線部が「漢字」に相当)
とエンコードし,このデータ列を名前として登録しているから,両者が一致せず,ファイルは存在しないものと見なされてしまう.

 コンパイルの最中に外部ファイルを読込む必要が生じたとき,ファイルの名前がコンパイラ内部で UTF-8 形式になっていれば,問題は解決する.したがって, UTF-8 で内部処理が行える TeX コンパイラがあれば良い.そこで,そのようなブツが存在するのか探索した.調査の結果はTeX — utf-8 への対応にまとめた通りである.

 ここでは,各プログラムが本懸案の打開策となり得るかどうか整理しておこう(pTeX の Unicode 化に向けた動きのコンセプトからは大きく逸脱した用途ではあるけれども).

■ pteTeX3
 platex のオプション -kanji=UTF8 を指定すると,UTF-8 形式のソースがコンパイルできる.内部では UTF-8 を EUC に変換してから組版を行う.したがって,ここで意図する目的には使用できない.

■ XeTeX
 もともと Mac OS X 用に開発された UTF-8 ベースの TeXシステム.日本語も一応扱えるようだが,日本語の組版ルールをよく知っているわけではない等,扱いは不完全で,現状ではまだまともではない模様。よって見送る.

■ Utf82TeX
 本家の説明に「Utf82TeX は,UTF-8 文字テキストを pTeX で利用可能な形式に変換するプログラム」とある.プリプロセッサ的な役割を果たすという事であろうか.組版を行うのが pTeX なのであれば,やはりここで考えている目的には使えない.

■ upLaTeX
 本家の冒頭に「ASCII pTeX の内部コードを Unicode にする実験」とある.少し分かり難い表現だが,説明を読むと,UTF-8 形式のソースをそのまま内部処理して組版を行えるということのようだ.ビンゴ! これこそ探し求めていたものに他ならない.

 それでは早速 upLaTeX をインストールしてみよう.その記録は次項で.

(*1)
 英語だと,まず名前を付ける時点で無駄な時間を要してしまう.内容を的確に表す英語名を付けるにはそれなりの素養が必要だ.いい名前が思い浮かばない時はあきらめてつい適当な名前をつけてしまうが,これだと後日そのファイル名を見ても中身が何なのかさっぱり分からない.逆に,ファイルを検索するときには,適切な名前が付いていないファイルが候補に挙がらなくなってしまう.あれこれと検索語を変えて見つかるまで探し続けざるを得ない.さらに,もしその時付けた英語名にスペルミスでもあろうものなら,検索しても絶対に引っかからない.膨大なファイルの中から目的のファイルが見つけられないときのストレスと無駄な時間は仕事にとって大きな損失だ.だからファイル名は日本語に限る.
さらに,日本語なら一瞥するだけで名前の意味を了解できるが,英語だと文字をある程度読まなければならない.これは漢字が表意文字であることから来る大きなメリットだ.

0 件のコメント: