FreeBSD 10.1-RELEASE 環境で拙作旧字・旧仮名遣い変換プログラム misima をテストしていたら,LaTeX 変換機能でタイ語を指定したときに呼ばれる swath プログラムがないとエラーが出た。FreeBSD システムを更改したあと,これをインストールし忘れていたわけである。
swath はタイ語語境界分析プログラムである。タイ語は西欧語と異なり語を空白文字で区切ることなく表記するが,文書を組版するに際して行末で改行するときは,語の境界でこれを行わなければならない正書法がある。LaTeX で自動的に文書をタイプセットするにあたり,LaTeX システムが適切に語の区切りで改行するようにするために,タイ語文字列を swath で前処理を行って語の境界をマーキングしておくという工夫が必要である。
FreeBSD に swath をインストールするメモを残しておく。といっても,./configure; make; sudo make install で組み込むマナーであって,標準的な UNIX フリーソフトウェアのインストール方法とまったく変わらない。コンパイラは clang 3.4.1 (x86_64) である。swath は Linux でも動作するし,Windows 用のバイナリも提供されている。https:
swath インストール
swath は文字列解析エンジンライブラリ libdatrie を前提ソフトウェアとする。まず,libdatrie を組み込んでおく必要がある。私の環境では,libdatrie をインストールしたあと,swath の configure で libdatrie の場所が見つけられなかったので,環境変数 PKG_CONFIG_PATH に datrie-0.2.pc の格納されているディレクトリを指定して configure を実行することでうまくコンパイル出来た。tcsh 仮想端末でのオペレーションは次のとおり。
% cd ~/tmp % wget -nH -nd https://linux.thai.net/pub/thailinux/software/libthai/\ libdatrie-0.2.10.tar.xz % xz -dv libdatrie-0.2.10.tar.xz % tar xvf libdatrie-0.2.10.tar % cd libdatrie-0.2.10 % ./configure % gmake % sudo gmake install % cd ~/tmp % wget -nH -nd ftp://linux.thai.net/pub/thailinux/software/swath/\ swath-0.5.4.tar.xz % xz -dv swath-0.5.4.tar.xz % tar xvf swath-0.5.4.tar % cd swath-0.5.4 % env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure % gmake % sudo gmake install
swath 実行と LaTeX 組版の例
さて,LaTeX で組むためにタイ語テキスト(タイ王国の Wikipedia から借用した)を swath で語境界マーキングを施してみる。以下の図 1 にその様子を示す。swath -f latex -u u,u は,語境界に {\wbr} という LaTeX 向けコントロールシーケンスを埋め込み,入力/出力テキストがともに UTF-8 である,という指定である。
図 1. swath の実行
{\wbr} の埋め込まれたところが語境界である。この出力テキストをコピーして,以下のような LaTeX 文書に貼付ける。文字コードは UTF-8 である。inputenc パッケージ(入力文字コード処理マクロ)のオプションに utf8x を指定する。Babel 多言語パッケージオプションにタイ語と日本語を指定している。ここでは便宜上,タイ語テキストを適当な長さのところで改行してある。
\documentclass[a4paper]{jarticle} \usepackage[utf8x]{inputenc}% UTF-8拡張 \usepackage[thai,japanese]{babel}% Babel タイ語,日本語 % \wbr 語境界改行制御定義 \def\wbr{\hskip0pt plus0.6pt minus0.6pt\relax}% \begin{document} \fontencoding{LTH}\fontfamily{norasi}\selectfont ใน{\wbr}ปี พ.{\wbr}ศ. 2475 ประเทศ{\wbr}ไทย{\wbr}ได้{\wbr}มี{\wbr}การ{\wbr}% ปฏิวัติ{\wbr}เปลี่ยนแปลง{\wbr}จาก{\wbr}ระบอบ{\wbr}สม{\wbr}บูร{\wbr}ณาญา{\wbr}% สิทธิ{\wbr}ราช{\wbr}มา{\wbr}เป็น{\wbr}ระบอบ{\wbr}ราชาธิปไตย{\wbr}ภาย{\wbr}% ใต้{\wbr}รัฐธรรมนูญ{\wbr}ตาม{\wbr}บริบท{\wbr}ของ{\wbr}การ{\wbr}เปลี่ยนแปลง{\wbr}% ทั่ว{\wbr}โลก และ{\wbr}ไทย{\wbr}ได้{\wbr}เข้า{\wbr}กับ{\wbr}ฝ่าย{\wbr}อักษะ{\wbr}% ใน{\wbr}ระหว่าง{\wbr}สงคราม{\wbr}โลก{\wbr}ครั้ง{\wbr}ที่{\wbr}สอง จน{\wbr}% ช่วง{\wbr}สงคราม{\wbr}เย็น ไทย{\wbr}ได้{\wbr}ดำเนิน{\wbr}นโยบาย{\wbr}เป็น{\wbr}% พันธมิตร{\wbr}กับ{\wbr}สหรัฐ{\wbr}อเมริกา{\wbr}และ{\wbr}เข้า{\wbr}มา{\wbr}% มี{\wbr}บทบาท{\wbr}ใน{\wbr}การ{\wbr}สนับสนุน{\wbr}รัฐบาล{\wbr}ทหาร{\wbr}% ใน{\wbr}ยุค{\wbr}นั้น{\wbr}เป็น{\wbr}อย่าง{\wbr}มาก และ{\wbr}แม้{\wbr}% ประเทศ{\wbr}ไทย{\wbr}จะ{\wbr}เริ่ม{\wbr}เปลี่ยน{\wbr}มา{\wbr}สู่{\wbr}ยุค{\wbr}% รัฐบาล{\wbr}ของ{\wbr}พลเรือน แต่{\wbr}ความ{\wbr}เสถียรภาพ{\wbr}ของ{\wbr}% ระบบ{\wbr}การเมือง{\wbr}การ{\wbr}ปกครอง{\wbr}ไทย{\wbr}ยัง{\wbr}คง{\wbr}% ขาด{\wbr}ความ{\wbr}ต่อ{\wbr}เนื่อง{\wbr}อัน{\wbr}มี{\wbr}ปัญหา{\wbr}มา{\wbr}% จาก{\wbr}การ{\wbr}แทรกแซง{\wbr}โดย{\wbr}กองทัพ{\wbr}จวบ{\wbr}จน{\wbr}% ปัจจุบัน{\wbr} แต่{\wbr}ความ{\wbr}เสถียรภาพ{\wbr}ของ{\wbr}ระบบ{\wbr}การเมือง{\wbr}% การ{\wbr}ปกครอง{\wbr}ไทย{\wbr}ยัง{\wbr}คง{\wbr}ขาด{\wbr}ความ{\wbr}% ต่อ{\wbr}เนื่อง{\wbr}อัน{\wbr}มี{\wbr}ปัญหา{\wbr}มา{\wbr}จาก{\wbr}การ{\wbr}% แทรกแซง{\wbr}โดย{\wbr}กองทัพ{\wbr}จวบ{\wbr}จน{\wbr}ปัจจุบัน \selectlanguage{japanese} タイ語のテストでした。 \end{document}
ここのポイントは \wbr コントロールシーケンスに対する定義:
% \wbr 語境界改行制御定義 \def\wbr{\hskip0pt plus0.6pt minus0.6pt\relax}%
である。\wbr のところにマイナス 0.6 ポイントから 0.6 ポイントまで伸び縮みするグルー(日本の印刷文化の用語でいえば「クワタ」)を挿入することで,結果的にここで改行を許容することを指示するマクロ定義である。これにより,文字間に適度のグルーが挿入されながら,行末がきれいに揃ったかたちで単語の切れ目で行送りがなされるようになる。もし版面の行の長さによりグルー挿入の具合が気に入らない場合,0.6 という数値を変えてグルーの量を調整する。
日本語と混植可能である。pTeXLive を用いた組版オペレーションは次のとおり。
% platex thai.tex % dvipdfmx thai.dvi
組版結果の画像は図 2 のとおり。{\wbr} の挿入された位置で行送りがなされているはずである。とはいえ,私はタイ語を知らないので,この例において swath が正しく語境界を処理しているのか評価できない。悪しからず。
図 2. 組版結果