TeXの最近のブログ記事

息子が新型インフルにかかってしもた。かわいそうに,40 度近い熱で唸っている。吸引タイプの薬をもらってきた。新型インフル問題では,ここのところ罹患率がきわめて高くなり,ワクチン接種運用が混乱している。半年ほど前は宝くじ当籤レベルだったのに。あの当時の大阪などの学校閉鎖騒ぎはいったいなんだったのか。いまこの季節,受験生は戦々恐々だろう。その親もしかり。ああ,俺もなんだか頭が痛くなってきた。

* * *

本を読み飽きて,退屈しのぎに LaTeX で遊んだ。ルイス・キャロルの『鏡の国のアリス』に出てくる鏡の国では,すべてがあべこべ,本の文字も反転している。その鏡の国の文字を組んでみた。
 

alice-mirror.jpg

フォントは Garamond ファミリー。文字の反転は graphicx パッケージの \reflectbox 命令を使っている。

\documentclass[12pt]{article}
\usepackage{graphicx}
\usepackage[T1]{fontenc}
\pagestyle{empty}
\begin{document}
\usefont{T1}{ugm}{m}{n}% Garamond
\begin{center}
\itshape\Large%
\reflectbox{JABBERWOCKY}\\
\reflectbox{'Twas brillig, and the slithy toves}\\
\reflectbox{Did gyre and gimble in the wabe:}\\
\reflectbox{All mimsy were the borogoves,}\\
\reflectbox{And the mome raths outgrabe.}%
\end{center}
\end{document}

コンピュータ関係の書籍を読んでいて,その内容に刺激を受け,著者の力量に感銘を覚えることは少なくない。しかし,私の読書経験のなかで貴重な一冊だと思わせてくれる本はまずない(計算機科学の本なんかで感動するか,普通?)。私にはそんな本が二冊ある。B. W. カーニハン,D. M. リッチーの『プログラミング言語 C』と,D. E. クヌースの『TeX ブック』である。

前者は,C 言語の入門書にして言語仕様の解説書として,決定的な役割を果たし続けている名著中の名著である。私は UNIX サーバの仕事が舞い込みはじめた 1992 年あたりに,本書を購入して C を勉強したのである。計算機の勉強において,そのアーキテクチャに親和性を持つプログラミング言語を学び,システム・プログラムを自分で書いてみることが,OS 理解の王道である。その当時は UNIX といえば C 言語だったのである。

ガチガチの汎用機アセンブラの「文体」にそれまで浸かっていた私は,『プログラミング言語 C』に紛れもなく驚嘆したのである。解説に付したサンプル・コードの簡潔な美しさ。逆ポーランド記法,二分木の再帰探索,クイックソートなどのアルゴリズムのコードを一頁以内で示す書法。高度なアルゴリズムを,まったくムダがなく簡潔にシンプルに,実現してみせる。これこそプログラム書法というものだと,ひいては計算機言語のみならず「日常の文章」もこのように書けたらなあと,心底憧れを覚えたのである。

自分の伝えたい考えをしるすのにこの変数(単語)は必要か? もっとすっきり簡単にできないか? 一パラグラフにだらだら詰め込むのではなく,ある共通部分を関数(キーパラグラフ)に纏めたほうがよくはないか? そんな訳で,その後本書の影響により,私は日本語の文章をしるす場合にも,もう「推敲」などという故事は吹き飛んで,「設計」,「デバッグ」という態度で見直しをするようになってしまった。だけど,本書のコードの無駄のなさ・シンプルさ・明快さはなかなか身に付かない。

いまでも C のプログラムを書きながら本書を参照するたびに,「美しい」と思ってしまう。とくに,二分木アルゴリズムによるワードカウンタのコード例には惚れ惚れしてしまう。自己参照構造体の解説にあるものだ(pp. 168--73)。私は必死こいて本書を研究し,コンコーダンス・プログラムでたくさんのコードを拝借した。

プログラミング言語 C 第 2 版 ANSI規格準拠
B. W. カーニハン, D. M. リッチー 著
石田晴久 訳
共立出版

本書の Amazon 評をみると面白い。ぜひみてください。プログラムの書き方がわかりづらいとか,入門書としては勧められないとか,酷評している者がある(その一方で,Amazon 評者には『プログラミング言語 C』なんて読むより,GNU C コンパイラのソースを読めなどと諭す,どうも TPO を弁えない極端なXXもいるのがまたチョー面白い。C を「学ぶ」ための本が話題になっているのに,C 知識を前提とした提案をするのは,最初から C を知っていたかのような知ったかぶりの典型ではないか?)。これらの評を読んでいると,古典は論理的でなく意味がわからないのでつまらない,この作家ひでえ文体とか,まあそんなのに類する愚評を想起してしまう。なにか別のものを求めてませんか? わかりづらさを翻訳のせいにしている者もいる。評者自らの(本を読む)レベルをまる出しにしている訳だ。そんな人に合わせた甘口の C 言語本が売れる訳だとある意味で納得する。

私は断言する。この本は間違いなく「入門書」であるし,この本のようにコードを書くのが C のマナーである。そして,本書はそれに相応しく「わかり易く」書かれているし,訳されている。ただ,簡潔なのだ。そして読者に媚びない。これが「わかりづらい」という者は,C の前にまずシステマチックな日本語文(正確を志す,科学的主題に相応しい文章)を学ぶべきだということである(偉そうに)。

* * *

『プログラミング言語 C』は,プログラミング言語の習いはじめの第一声として "hello, world" を出力するコードを書いてみる,というあの有名なマナーを定着させた。"hello, Java world" だったり,"hello, Perl" だったり,その後あまりに当たり前になってしまって,病気かこいつらと思うほどになった。そんな常套手段に飽き飽きしていたちょうどその頃,私は古風な病いを得て,病院に収容されてしまった日々のなかで, D. E. クヌース『TeX ブック』に出会ったのである。

TeX, LaTeX そのものの面白さについてはここでは言うまい。この『TeX ブック』も TeX を一からはじめる初学者を対象に書かれた入門書にして決定版である。一方,ユーモアとジョークに満ちたその語り口は,コンピュータ書籍においてかつてないものではないだろうか(これはただの想像)。本書のジョーク精神の最たる部分は,第 6 章「TeX を実行するには」である。読者を端末の前に座らせ,ハイ次はこうやってみましょう,という初心者向けの例を示している。ところが,この最初の実行例の解説は次のようなものである。

うまく実行できると,TeX は次のようなメッセージを表示してくる。
This is TeX, Version 3.14 (preloaded format=plain 89.7.15)
**
 “**” は TeX が入力ファイル名を要求している印である。
 さて次に,\relax と(...)入力し,<改行> キー(...)を押してみよう。そうすると TeX は始動し,長い原稿を読み込む準備をする。しかしこれはごく簡単な実行例で,TeX に休んでいいよ,と言っているのである。つまり \relax は “何もするな” という意味のコントロール・シーケンスである。
D. E. クヌース『改訂新版 TeX ブック』鷺谷好輝訳,アスキー出版局,1989,p. 39.

これがクヌース先生一流の,超一級のジョークだということがおわかりだろうか? いったいどこの誰が,紹介したい対象となっているシステムのはじめの実行例で「休む」,「何もしない」なんて命令を入力させるだろうか? そう,まずは Relax しようという訳だ。でも,プログラミング言語のさまざまなトリックに讃歎した経験をもつ者は,このジョークの表面的な意味の裏に,TeX システムが「何もしない命令」を用意していることの重要性をきちんと読み取るのである。沈黙は金。このシステムはただものではないと知るのである。「今度は Hello? と入力してみる」という紋切型が,このあとに続く(同頁)。

TeX はバージョンが上がるたびに 3.1415... と π に近づく。クヌース先生がお亡くなりになったら(縁起でもないが)バージョン π でシステムは凍結とするのだそうである。こういう完全主義的ジョークで大いなる変化球を投げて来るところが,その後私を虜にしてしまった TeX の深さ,広さ,長いつきあいをさせてしまう親しみ,などなどの根源にあるのだ(仕事ではまったく使いませんが)。

今日,自宅の Windows XP に JIS X 0213:2004(所謂 JIS 2004)対応のMS明朝,MSゴシックのフォント,さらにメイリオ・フォントを導入した。ずいぶん前に,JIS X 0213 について書いたとき,なによりもこの規格でなされた 168 字の字体変更をこき下ろした。けれども,Utf82TeX CJK 統合漢字拡張 B 対応を行ったこともあり,「標準」に追随して行かざるをえないなあという気持ちが強くなったのである。たとえ愚かな君主の決めた愚かな法律・標準であっても,発効すれば文句を言いながらも従うしかありません。「標準」とはそのようなものである。

IE 7 で葛原妙子の「葛」は,もと 葛 だったのが 葛正字体 になった。これはこれで正しい。

しかし,考えれば考えるほど,この JIS 2004 の字体変更の理屈が理解できない。この変更は,国語審議会の答申「表外漢字字体表」に示されている「印刷標準字体」に合わせたものである。それはそれで立派な理由かも知れないが,いまさら国語審議会の尻馬に乗ってどうする,という疑問も否めないのである。この表外漢字字体で「印刷標準字体」として認定された文字は新聞等の出現度数調査に基づいているとのことである。でも,文字の構成要素を度外視した原理・原則(一貫性)がいまひとつよくわからないのである。でもって JIS 2004 字体変更の「必然性」がどうも納得できないのだ。

「疼」は 疼疼正字体 に変えたのに,「冬」はなぜ 冬 のままで 冬正字体 にしないのか。「辻」について,辻 さんは結構いるのに 辻正字体 が標準というのは常識的に解せない。「辻」,「逢」を二点しんにょうにするなら,「道」,「遠」なども正字体にしたらどうかね。などなど。

「冬」,「道」,「遠」はこれが「印刷標準字体」ということなので変更しない訳である。でも,上例のとおり一貫性に欠ける。確かに,「標準」に一貫性が必要であるという訳ではない。だとしても,いままでの文字形を否定する(「変更」は過去の否定なのである)ほどの必然性があるとはとても思われない。

通常,ものごとの取り決めというものは,いったん決定されると,それ自体に不良(目的とする仕様に適合しない事象)が見いだされない限り,なかなか「変更」されないものである。新しい要請に対しては,「追加・拡張」がなされるのが通例だろう。JIS もこれらの変更後の字体を「追加」すればよかったのではないだろうか。なぜなら,「変更」は過去の規範に則っていた者が自らの資産も「変更」を強いられる一方,「追加・拡張」ならば己の事情によってそれを無視できるからである。

この JIS の愚かな自己否定のおかげで企業・官公庁・自治体のシステムは,本当は別のサービス向上の機能追加をしなければならないのに,文字の取り扱いについて「本当に」余計な改修を強いられているのである。この不況のなか全国津々浦々で進行中のこういう「塵も積もれば山となる」調達は,誰からも税金のムダ遣いと言われないのが面白い。しかも、このシステム改造は,JIS 2004 の恩恵を活かすというのではなく,JIS 2004 文字(文字コードなんかになんの頓着もないユーザは Windows Vista の新 IME で知らず知らず入力してしまうのである)がシステムに入って来ないようにブロックするものが大半である。笑ってしまう。JIS が足を引っ張っているのは明らかなのだ。「どうする? 企業情報システムの『JIS X 0213:2004』対応:ITpro」などを参照のこと。

JIS の字体変更は JIS 2004 にはじまった訳ではなく,JIS 83 においてすでに前例がある。どうも JIS は自己否定が好きなようである。これを見ていると,戦後間もないころの国語・国字改革の自己否定(現代仮名遣い,漢字制限)を連想させ,ほんと,日本国の標準策定というものの懲りない性格に呆れてしまうのである(私は現代仮名遣いを否定している訳ではありません)。そのうち,4 年くらいしたら,JIS はまた面白い改訂をしてくれるだろう。こんなことをしていたら,Unicode コンソーシアムが独自に CJK 漢字標準を整備し,日本国の JIS 標準が置いて行かれる --- これがいちばん起こりそうなことだと思う。

自己否定 --- これは,地震ですべてが崩壊し,すべてを一から作り直そうとしてしまう,地震国のお国柄なのだろうか。

私は個人的には文書作成を LaTeX で行う。LaTeX では,JIS X 0208(所謂 JIS 第一・第二水準)で足りない文字を Adobe_Japan1 コードに準拠して出力する方式が,広く浸透している。JIS 2004 の字体変更も Adobe_Japan1 の CID コードのおかげで cmap をちょちょいと変えて対応できる。JIS などの多様な意見を取りまとめなければならないお役所仕事よりも,Adobe という企業が印刷現場の要請に基づき一貫したポリシー(商業印刷の現場でほしいと思う文字を「追加」して行くポリシーだと思う)で作り上げた「標準」のほうが,よっぽど有用だと思う次第である。

※ 以上のとおり,さんざんぱら,JIS 2004 を批判しているのだけど,そうはいっても JIS の活動全般に懐疑を示すものではもちろんない。JIS はわが国のインダストリアル・スタンダードを決める責任ある機関である。上記のような問題は,その功績に比べると誠に微々たる話である。JIS で活動している研究者,企業人はわが国の斯界の権威であり,真に尊敬に値する人達である。私の軽口を大目に見てください。

* * *

上記字体変更の例で使用した文字の画像は LaTeX で出力した文字を,dvips, Ghostscript で png に変換したものである。コマンドラインから文字画像を生成するシェルスクリプトを書いた。以下に掲載しておくので,同じような課題がある場合にお使いください。OTF パッケージが必要。

#!/bin/sh
# tex2image: convert LaTeX command to image file
# コマンドラインの LaTeX 命令を画像(png, eps)出力する。
#                         coded by isao yasuda, July 27 2009.
 
if [ $# -lt 3 ]; then
    echo "usage: `basename $0` -e|-p out-file-base 'LaTeX fragment'"
    exit 1
fi
 
case $1 in
    # アウトライン EPS
    -e) CONV="gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=epswrite \
              -r9600 -sOutputFile=$2.eps $2-wk.eps"
        echo "Outlined EPS file genetation to $2.eps"
        break;;
    # PNG 
    -p) CONV="gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha \
              -dEPSCrop -r72 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
              -sOutputFile=$2.png $2-wk.eps"
        echo "PNG file genetation to $2.png"
        break;;
    # それ以外はエラー
     *) echo "$1 unknown option."
        exit 1;;
esac
 
echo "% 文字画像生成テンプレート
\documentclass[12pt]{jsarticle}
\usepackage[dvips]{graphicx,color}
\usepackage[multi,deluxe,expert]{otf}
\pagestyle{empty}
\begin{document}
\parindent=0pt
$3% こいつを LaTeX 処理
\end{document}" > $2.tex
 
# pLaTeX UTF-8 処理
platex --kanji=utf8 $2.tex
if [ $? -ne 0 ]; then
    echo "LaTeX error $2.tex."
    exit 1
fi
 
# dvips でまず普通の EPS にする
dvips -E -D 9600 $2.dvi -o $2-wk.eps
if [ $? -ne 0 ]; then
    echo "dvips error $2.dvi."
    exit 1
fi
 
# 画像変換
$CONV
 
# 後始末
rm -f $2-wk.eps $2.dvi $2.log $2.aux $2.tex
echo "done."

これを例えば tex2image というファイル名で,パスの通ったことろに UTF-8 エンコードで格納し,実行属性を付与する(chmod +x tex2image)。

tex2image -p ファイルベース名 'LaTeXコマンド'

とすると,LaTeXコマンド を処理した文字列が ファイルベース名.png という名の png 画像で生成される。LaTeXコマンド に前後のアポストロフィを付加しないと,特殊文字,空白文字を記述できないので注意。

png 画像はアルファ・チャンネルをもつ透過画像なので,背景色に追従可能である。文字そのものを着色したければ,LaTeX コマンドに "\textcolor{色名}{文字}" を指定すればよい。オプションを -e とすると文字のアウトラインを取った EPS 画像で出力する。ベクトル画像なので,Illustrator などで拡大編集してもギザギザで汚れはしないはずである。独自に必要な LaTeX スタイルがあれば,テンプレートに \usepackage 命令などを追加してほしい。dvips,Ghostscript がアウトラインフォントを拾える環境でないと動作しない(要するに,PK ビットマップフォントが混入しているとエラーになる)ので注意。

「葛」の JIS 2004 字体の画像: 葛正字体 の出力は,次のとおりとした。

tex2image -p 1kuzu '\LARGE\CID{7652}'

妻が札幌から帰ってきた。北大構内,大通り公園,すすきの,下宿のあった北19条近辺など,学生時代の懐かしい場所を散歩してきたらしい。羨ましい。北大クラーク会館のすぐ裏手の,私が住んでいた北6条西8丁目付近は JR の高架化で様変わりしていたという。お土産は懐かしい六花亭のマルセイバターサンド。

今日の晩ご飯は私がビーフシチューを拵えた。肉が足りないので近所のマルエツにお買い物。肉売り場では「好き好きお肉! 好き好きお肉!」という歌が何度も何度も繰り返され,なかなかシチュー用のバラ肉を見つけられなかった私は,チョーイライラ。肉のついでに,安物 780 円のカリフォルニアワインもゲット。シチューは子供たちにも評判だった。

昼は,ロシア人からのメールへの返信文を書いた。北園克衛詩ロシア語訳の問題点をいくつか指摘して,LaTeX で作成した PDF を添付送信した。

* * *

Lemmatizer ライブラリを使った lemmatized コンコーダンスプログラムを設計中。私は O'Reilly から出た G. Satir, D. Brown による入門書で C++ をさらった程度で,この機会にもう少しきちんと勉強しなくちゃとさらに一冊 C++ 本を購入した。柏原正三『美しい C++ プログラミング見本帖』(翔泳社,2004年)。私は C++ のプログラムを何本も書いたけれど,「クラス・型の実装を強化した C」程度に C++ を扱っていた。オブジェクト指向云々も Java ほど気にする必要を感じなかった。それでも動く C++ プログラムが作れる訳である。

本書は C と C++ はまったく別のプログラミング言語であると強く主張する。 printf などの C の標準ライブラリ関数を使ってはいけない,プリプロセッサの #define による記号定数を使ってはいけない,などなど,私にとってびっくりするような指南がなされている。それが「美しい」ということか。でも,ちょっと納得のいかない点もある。

問題は,fprintf( ) 関数が C の入出力ストリームの関数であることです。C++ は C++ 独自の入出力システムとして入出力ストリームをサポートしていますが,それが C の入出力システムの関数と整合するという保証はありません。
柏原正三『美しい C++ プログラミング見本帖』翔泳社,2004年,p. 20.

「整合しない」例をどうして示してくれないの? このため,問題点の問題点たる所以がどこにあるのか,さっぱりわからないのである。C++ が C とは異なる言語だという考え方は正しい。でも,C++ の設計者は C++ を C のスーパーセットと位置付けているのではなかったか。やはり,ソフトウェアに関する日本人の著作は,米国人の足元にも及ばない,と思ってしまった。米国人なら「必ず」,きちんと具体例をあげ己れの命題の根拠を説明する。

まあ,それでも C に凝り固まった私にはこれくらい刺激的なことを言ってくれる本がよいのかも知れない。上記のような納得できない点もあるにせよ,C との違いを懇切に説明してくれる本である。

C++プログラミング入門
グレゴリー・サティア,ダウグ・ブラウン
オライリー・ジャパン

ロシアの TeX ユーザーズグループのメーリングリスト CyrTeX-ru@vsu.ru で,「段落のはじめの単語のみ自動的にボールド書体にしたいのだが,マクロ中の \expandafter がうまく動かないのは何故」との質問が出ていた(Message #8242)。私にとって,\expandafter 云々はどうでもよかったが,段落冒頭単語を自動的にボールドにする工夫にはちょっと興味があった。自分でマクロを書いて,こんなのどう?と投稿してみた。

段落は \par で改段落される。その際に,\everypar の設定によって新しい段落のはじまり方を変えることができる。しかし, latex.ltx が別の環境への切替えのときなどに \everypar を頻繁にリセットしてしまうようで,一度 \everypar をカスタマイズしてもすぐ元通りになってしまい,なかなか思うようにはいかない。こんなことで悩むより,段落の最初の単語に対し,素直に \textbf{} をマークアップするほうが早く確実だともいえる。

とはいえ,できたものを一応掲載しておく。boldpar 環境内で,段落の冒頭の単語だけをノーマルではなくボールドにする。ただし,あくまで欧文用であり「単語」は最初の空白文字までのテキストである。和文だと,空白を探して段落の終わりに到達し,段落全体,あるいはセクション全体がゴシック体で組まれてしまうかも知れない。この環境内にはいかなる環境も記述することができない。そんなこんなであまり使い勝手がよろしくない。

% -*- coding: utf-8; -*-
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\makeatletter
\let\new@everypar=\everypar% get \everypar on the time
\newtoks\new@everypar%
\catcode32=13\relax% set space to catcode 13 
\def {\mdseries\space\catcode32=10\relax}% space is command \md
\def\boldpar{% make only the head word of paragraphs bold
\par\everypar\expandafter{\the\new@everypar%
\if@afterindent\else{\setbox\z@\lastbox}\@afterindenttrue\fi%
\bfseries\catcode32=13\relax}}%
\catcode32=10\relax% recover catcode
\def\endboldpar{\@nobreakfalse}% 
\makeatother
\begin{document}
\section{hogehoge}
\begin{boldpar}
Как лицо твое похоже на вечерних богородиц,
опускающих ресницы, пропадающих во мгле.
 
Как лицо твое похоже на вечерних богородиц,
опускающих ресницы, пропадающих во мгле.
 
Как лицо твое похоже на вечерних богородиц,
опускающих ресницы, пропадающих во мгле.
\end{boldpar}% recover bfserise --> mdserise
 
Как лицо твое похоже на вечерних богородиц,
опускающих ресницы, пропадающих во мгле.
\end{document}

上例では,boldpar 環境内で先頭の "Как" だけがボールド書体になるはずである。原稿の \makeatletter から \makeatother までが boldpar 環境定義マクロである。\everypar\bfseries 命令とインデント制御を埋め込む。空白文字の分類コードを一時的に 13 に変更して,これを \mdseries に置き換える。"\def {\mdseries\space ... }" の \def の次に空白がひとつあるのは,空白文字に命令を割り付けている訳である。命令を定義したすぐそのあとで,空白の分類コードを 10 に戻しておく必要がある。こうして,段落が開始された時点で \bfserise が実行され,最初の空白文字で \mdseries が実行され,見た目に元に戻るようにするというものである。デフォルト書体が bold だとドッチラケなんだけど。現時点のウェイトをチェックして振る舞いを変える必要があるだろう。\section 命令のあとのインデントの有無をコントロールするのに悩んだ。\@afterindenttrue\@nobreakfalse を設定しないと,\sectiton 命令指定時にインデントがおかしくなり,また3段落目でボールド化が解除されてしまうのである。

昨夜公開した Utf82TeX モジュール(utf82tex 本体プログラム)につまらないバグがあった。U+2000 から U+2FFF の JISX 0208 にない記号類が \UTFM0{xxxx} になってしまうというもの(正しくは \UTFM{xxxx})。

めったに使わない文字だと思いますが,早速ダウンロードしてくださった方には申し訳ありません。もう一度アーカイブを落としていただくか,utf82tex モジュールをこれと差換えてください。

Utf82TeX 0906 をリリースした。Unicode CJK Unified Ideographs Extension B(CJK 統合漢字拡張 B)をサポートし,Unicode 漢字の \UTFx, \CIDx 命令変換を改善した。漢字についてはほぼ遺漏なく処理できるようになったはずである。本サイトのダウンロード頁から取得できる。ドキュメントも改訂した。

Windows Vista がリリースされてから入力文字の範囲が拡張され,CJK 統合漢字拡張 B の文字も IME から普通に入力できるようになった。例えば,吉野屋の吉(つちよし):牛丼の吉野家の「吉」=「つちよし」もこのエリアに定義されている。従来の Utf82TeX だとそのまま出力されてしまい,コンパイルでエラーとなっていた。Utf82TeX 0906 は「つちよし」(U+20BB7)を \CID{13706} に変換する。

齋藤さんの OTF パッケージを前提としている。CJK 統合漢字拡張 B 領域文字を OTF パッケージで出力するには,安定版(stable)ではだめで,開発版(devel)を導入する必要があることに注意いただきたい。

今回いちばん苦労したのが,変換テーブル。Unicode コードポイントとそれに対応する CID 番号の対である。TeX コミュニティの権威者・角藤先生の utf8toutf 変換ツールがこのテーブルを持っていることを知った。先生にメールを書いて,流用許諾をお願いした。先生は快く了承してくださった。

テーブル構築用のプログラムを何本も書いた。UCS コードとビット列との相互変換などのコードを書くうちに,UTF-8 や UTF-16BE の符号化方式についても勉強になった。

Unicode Home Page にある Unihan database: Unihan.txt をダウンロードし,UCS と Adobe_Japan1_6 コード(つまり CID 番号)の対を抽出し,プログラムで加工した。Adobe Reader に添付されている CMap(日本語用 UniJIS-UTF16-H,中国語簡体字用 UniGB-UTF16-H,中国語繁体字用 UniCNS-UTF16-H,韓国語用 UniKS-UTF16-H)と突き合わせして,UCS --- CID JP, CID CS, CID CT, CID KR のレコードを生成した。これでできたテーブルを角藤先生のテーブルデータとマッチングして不足,不正をチェックした。最終的に 15,790 字のテーブルとなった。このうち CJK 統合漢字拡張 B 領域の変換可能文字は日本語,中国語合わせ(韓国語のハンチャはそもそもこの領域には定義されていない)1,939 文字となっている。

0906 の改修で少し Perl コードを整理した。strict でないし,余計な処理の残骸もこれまで野ざらしにしていたのだ。まだ misima にはこの変更を反映していない。もうしばらく時間がかかりそうである。

昨日,セダコヴァの著書の引用で教会スラヴ語を組版するのに Utf82TeX を使用したところ,バグを見つけた。

アーカイブそのものを修正すべきなんだろうけど,面倒なので本体訂正版だけ utf82tex-090613.zip としてサイトに置いた。ユーザの方は古い版をこれに差換えていただきたい。もちろん OldSlav 教会スラヴ語を使用しない場合はその必要はない。misima の TeX 変換の同様処理についても訂正済みである。

upLaTeX を使うようになったいま,たいていの欧文を UTF-8 で直接 TeX 原稿に記述できるので,Utf82TeX をほとんど使わない。教会スラヴ語,ギリシア語を用いるときくらいである(タイ語についても,upLaTeX ではまだ直接入力はダメで,Utf82TeX があると便利だと思う)。ほとんど存在意義を喪失しており,もうメンテナンスの必要性をまったく感じなくなってしまった。

オリガ・セダコヴァ Ольга Александровна Седакова の著した教会スラヴ語辞典を Ozon から入手した。原題は «Словарь трудных слов из богослужения. --- церковнославяно-русские паронимы» М., 2008.(『正教会典礼文献の難語辞典 --- 教会スラヴ・ロシア同語源語』)。本書は,現代ロシア語と同義のようにみえて意味の異なる教会スラヴ語単語の辞典である。日本語でも古語の「をかし」と現代語の「おかしい」とでは意味が違う。そういう異義語を解説した辞典と考えてもらえばよい。

セダコヴァはなにより詩人,西欧文学翻訳家として高名である。一方,モスクワ大学のスラヴ文献学研究科を終えた学者でもあり,このような教会スラヴ語関連の学術的著作もなしている。

本書では,教会スラヴ語に対応するギリシア語が併記されている。西欧語がラテン語から多くの語彙を相続しているとすれば,ロシア語にとってその関係にあるのはギリシア語だからである。キリル文字そのものがギリシア文字を範としているのだ。

黄土色のクロス・ハードカバー装丁は,私の好きなタイプの本。教会スラヴ語のクラシックなフォントが美しい。その引用を LaTeX(upLaTeX)で組版してみた。教会スラヴ語は SlavTeX フォント,ロシア語,ギリシア語はそれぞれ LH フォント,CB フォントのコンピュータ・モダン書体を使用した。LaTeX 原稿 sedakova_slovar_cite.tex組版結果 PDF sedakova_slovar_cite.pdf も置いておく。

sedakova_slovar54.jpg

sedakova_slovar.jpg

先日壊してしまった Web 環境の復旧がほぼ完了した。misima 関連コンテンツも一部を除きファイルを再登録した。バックアップデータと最新バージョンの整合性を確認するのに手間取ってしまった。misima.html はまだですが,とりあえず misimaservlet/​misima.html もしくは misima SOAP Web-Service をお使いください。

BSD で動作するロシア語形態素解析ソフトウェアをかねてから探していた。二つの目的がある。ひとつは,プーシキンのコンコーダンス・プログラムの単語集計において,現行の出現形ではなく lemmatized な見出語でまとめること。いまひとつは,現時点の私の関心事であるロシア語旧正字法について,misima のような新・旧正字法変換のプログラムを書くこと。ロシア語旧正字法も語彙に依存する複雑な特性をもっており,そのためには misima 旧仮名遣い変換における「茶筌」と同じように,ロシア語形態素解析器が必要なのである。さらにその正字法変換ツールの用途としては,LaTeX T2D 旧正字法ロシア語用ハイフネーションパターンの作成を考えている。ここまで成せば,ロシア人にも果たせなかった LaTeX contribution となるはずだ。

FreeBSD russian ports にはそれらしいのが見当たらなかった。"Russian tagset and Russian statistical taggers" サイト(Serge Sharoff 氏による)によれば,インターネットリソースには TreeTagger, SVMTagger などのいわゆる tagger プログラムがいくつか公開されている。でも,残念ながら,私の愛用する FreeBSD,Mac OS X においてコマンドラインから使用できるツールがなかったのである。

ところが昨日,ロシアのサイトを探し回っていて lemmatizer(http://www.aot.ru/)を見つけた。ウクライナ・キエフ大学の Алексей Сокирко(アレクセイ・ソキルコ)によるプログラムである。このサイトでは,Graphematics 書記素解析ツール GraphmatThick,Syntax 統辞解析ツール TestSynan も公開されていて,私はしばらく勉強させてもらおうと思っているところである。lemmatizer は外部データを切り替えることで英語,ロシア語,ドイツ語の解析が可能な形態素解析ツールである。ライブラリとして使用することを主たる目的に書かれたものだが,TestLem という簡易試験ツールも添付している。ロシア語については,かの有名なザリズニャクの文法辞書の考え方に準拠している。Windows 及び Linux 用のアーカイブが用意されている。FreeBSD にもじつは textproc 分類で ports が存在することも判明。そこで早速 FreeBSD と Mac OS X Tiger にインストールしてみた。それぞれ,動作させるのにかなり苦労した。このソフトについて紹介・説明している日本語サイトは皆無のようである。通常の手順では組込みできないので,ここでインストール手順と使い方とを紹介する。

【FreeBSD インストール】

ports が用意されているが,通常の make install clean 発行だけではダメである(ports のバグなのか,説明が足りないのか)。スーパーユーザ権限で以下のオペレーションによってインストールする。これにより,ロシア語,英語,ドイツ語の形態素解析辞書も同時にインストールされる。

# cd /usr/ports/textproc/lemmatizer2
# make
# make install generatemorph installmorph
# cd /var/db/lemmatizer/Dicts/Morph
# chmod a+rx Eng Ger Rus

FreeBSD では lemmatizer の付属プログラムを使用するに先立って,環境変数 RML に辞書の組込みディレクトリ名をセットしておく。.tcshrc にも記述しておくとよい。

% setenv RML /var/db/lemmatizer

【Mac OS X インストール】

Mac OS X については lemmatizer 本体とロシア語辞書のみのインストール方法に留める。もちろん,英語,ドイツ語用の辞書も取り寄せて組込むことができる。詳細は Docs/Morph_UNIX.txt に記載されている。

  1. インストールするディレクトリ(ここでは $HOME/pkg/lemmatizer とする)を作成し,そこに http://www.aot.ru/download.php から lemmatizer.tar.gz と rus-src-morph.tar.gz をダウンロード格納する。
  2. lemmatizer は PCRE(Perl Compatible Regular Expressions)ライブラリを使用する。http://www.pcre.org/ からアーカイブをダウンロードし,これをインストールする。展開したディレクトリにおいて,./configure, make, make install とごく一般的な手順で組込むことができるが,UTF-8 でも使う可能性があるなら configure のオプションに "--enable-utf8 --enable-unicode-properties" を追加してビルドすることをお勧めする(FreeBSD ports は UTF-8 オプション付きで自動的に組込まれる)。
  3. % ./configure --enable-utf8 --enable-unicode-properties
    % make
    % sudo make install
    

  4. 環境変数をセットする。これはインストールのみならず,lemmatizer 利用の際にも必要である。
  5. % setenv RML /Users/isao/pkg/lemmatizer
    % setenv RML_PCRE_LIB /usr/local/lib
    % setenv RML_RCRE_INCLUDE /usr/local/include
    

  6. lemmatizer の C++ コンパイル,リンク用インストーラに定義されたオプションは,そのままでは Mac OS X Tiger ではエラーとなるので,次にこれに訂正を施す。Source/common/common_exe_mak ファイルを以下のように書き換える。
  7. 〔前〕:

    libs_argument := -Wl,--start-group $(pcre_libs) $(subst .$(lib_ext),,$(lib_pathes)) -Wl,--end-group
     
    ifeq ($(libmode), static)
        lib_mode_switch := -static
    endif
    

    〔後〕: -Wl,--start(end)-group, -static オプションを削除

    libs_argument :=  $(pcre_libs) $(subst .$(lib_ext),,$(lib_pathes))
     
    #ifeq ($(libmode), static)
    #    lib_mode_switch := -static
    #endif
    
  8. コンパイル,リンク,辞書生成をスクリプトによって実行する。
  9. % ./compile_morph.sh
    % ./generate_morph_bin.sh Russian
    

  10. $HOME/pkg/lemmatizer/Bin にパスを通しておく。

【使い方】

lemmatizer 付属の TestLem は,lemmatizer ライブラリを用いたテストプログラムである。これで手軽にロシア語テキストの形態素解析を行うことができる。ただし,解析対象ロシア語テキストファイルの作成に際しては,以下の2点に注意する。

  1. ロシア語は Windows cp1251 エンコードで記述する。iconv などのコード変換プログラムを用いて UTF-8 などから変換すればよい。Emacs なら以下のコードを .emacs に記述すれば,cp1251 キリルエンコーディングを直接扱うことができるようになる。
  2. (codepage-setup 1251)
    (define-coding-system-alias 'windows-1251 'cp1251)
    

  3. 1行1単語の形にしておく。このため,通常のテキストファイルを扱う場合は,適当な tokenizer ツールを用いて前処理する形態となるだろう。

試しに,次のようなテキストファイル r.txt を準備するとしよう。

Я
люблю
вас
,
Надя
!

これをコマンドラインにおいて TestLem プログラムで処理する。

% TestLem Russian r.txt
Loading..
read r.txt
process r.txt
Count of words = 6
Time = 0 seconds; 0 ticks
too few words to measure the speed
writing to r.lem

Russian という第一引数はロシア語形態素辞書を指示するものである。English,German とすれば,それぞれ英語,ドイツ語の形態素解析が可能である。ファイル名(r.txt)を省略すると標準入力からテキストを読む。処理結果は,この場合 r.lem というファイル名で生成される。その出力は次のようなものである。

Я -> Я ча#
ЛЮБЛЮ -> ЛЮБИТЬ кб#
ВАС -> ВЫ чучхчч#
, -> , яя#
НАДЯ -> НАДЯ до#
! -> ! яя#

出力結果例においては,ЛЮБЛЮ は ЛЮБИТЬ という不定形の動詞で,一人称・単数・現在形であるということが,"ЛЮБИТЬ кб#" という形式で示されている。"ВЫ чучхчч" は,ВАС という出現形が二人称複数代名詞 ВЫ の生格,対格もしくは前置格であることを示す。このように,文法解析結果は "->" の先に「見出語 xx..#」で示され,文法構造は "кб","чу","до" など二文字からなるニモニックの組合せで示される。語として複数解がある場合は "xx...#" が複数出力される。こうして,語の出現形の lemmatize された見出語と文法構造が得られるのである。コンコーダンスにおいて見出語で出現度数を分析する等の処理が可能となる。

ロシア語文法構造ニモニック,文法略号の意味は Dicts/Morph/rgramtab.tab 及び http://www.aot.ru/technology.html に解説がある。詳細はそちらを参照。

先日「OldFonts 古ロシア語フォント集成」について書いた。そのときは Adobe Minion と Palatino Linotype のインストールには触れなかった。今日はこの2フォントの追加インストールと,upLaTeX で組版し,dvipdfmx で日本語混在の PDF を作成する概略を示す。

【Minion, Palatino フォントの設定】

  1. OldFonts パッケージは Adobe Minion と Palatino Linotype のフォントを添付していない。これは権利問題のためである。OldFonts の INSTALL ドキュメントによれば,Adobe Minion Pro は Adobe Reader に添付されている OpenType フォント(MinionPro-Regular.otf など4書体),Palatino Linotype は Windows XP/Vista に添付されている TrueType フォント(pala.ttf など4書体)を想定している。システムにこれらフォントファイルが存在していれば,TeX システムから参照できるよう TDS フォントツリーに適切なシンボリックリンクを設定する。
  2. OldFonts パッケージで組んだ dvi 中の Minion, Palatino フォントを dvips で処理するための map 及び enc ファイルが Mariusz Wodzicki 教授によって提供されている(ドミートリエフ教授のサイトにある pala-enc.tar.gz)。しかしながら,dvipdfmx で使うためには,別途 map を準備する必要がある。また Wodzicki 教授の enc ファイルだと,dvipdfmx ではコンマやピリオドなどの記号が拾えず(原因不明),ロシア文字以外を既存の enc ファイルから移植してこれを訂正する必要があった。私が作成したこれらのファイル: oldfonts-dvipdfmx.map, t2a-pala-iy.enc, t2d-pala-iy.enc をこのリンクからダウンロードして,TeX ツリーに格納し,さらにマップファイル登録をして欲しい。
  3. % ls
    oldfonts-dvipdfmx.map    t2a-pala-iy.enc   t2d-pala-iy.enc
    % su -m
    # cp oldfonts-dvipdfmx.map $TEXDIR/fonts/map/dvipdfm/oldfonts/
    # cp t2a-pala-iy.enc $TEXDIR/fonts/enc/dvips/oldfonts/
    # cp t2d-pala-iy.enc $TEXDIR/fonts/enc/dvips/oldfonts/
    # mktexlsr
    # updmap --enable KanjiMap=oldfonts-dvipdfmx.map 
    

【OldFonts 使い方】

ロシア語旧正字法テキストをタイプセットするには,TeX のフォントエンコーディングは T2D を使用しなければならない。t2denc.def がシステムに組込まれている必要がある。もしなければ,ドミートリエフ教授のサイト等から入手して,TeX ツリーに格納しておく。

upLaTeX を用いると,旧正字法ロシア語テキストをそのまま原稿に記述することができる。革命前の旧正書法の文字 ѣ (ять ヤッチ), ѵ (ижица イージツァ), ѳ (фита フィター), і (и с точкой イー・ス・トーチコイ) を直接タイプできるのである。ただし,そのためには Dominique Unruh 氏による unicode パッケージ(Unicode support for LaTeX)に含まれる utf8x.def ファイルが必要である。LaTeX 標準の utf8.def では T2D 古ロシア文字が処理できない。

upLaTeX でキリル文字を組版するときは,\kcatcode`б=15 をプリアンブルで指定しておく。これによりキリル文字テキストが欧文として扱われるようになる。

OldFonts の各ファミリーを使用するためのスタイル,[ファミリー名] は以下のとおり。

- Академическая (Academy Old): AcademyOld, [fao]
- Академическая Узкая (Academy Old Narrow): AcademyOldN, [fan]
- Елизаветинская (Elizavet): Elizavet, [fez]
- Елизаветинская Узкая (Elizavet Narrow): ElizavetN, [fen]
- Литературная (Latin): Latin, [flt]
- Литературная Узкая (Latin Narrow): LatinN, [fln]
- Обыкновенная новая (New Standard): NewStandard, [fns]
- Обыкновенная новая Узкая (New Standard Narrow): NewStandardN, [fnn]
- ПТ-Курьер (CourierRO): CourierRO, [tcr]
- Миньон (Minion Pro): Minion, [pmn]
- Палатино (Palatino Linotype): Palatino, [pmn]
- Древнерусский (Drevnerusskij): Drevnerus, [fdr]
- Пушкин (Pushkin): Pushkin, [tpk]
例えば Академическая フォントファミリー fao を使う場合は,AcademyOld.sty を読込んでおき,\usefont 命令でフォント切替えを行う。
\usepackage[T2D]{fontenc}%フォントエンコーディング
\usepackage[utf8x]{inputenc}% unicode utf8x を使用
\usepackage{AcademyOld}% Академическая (Academy Old)
\begin{document}
\fontencoding{T2D}\selectfont% T2D 切替え
...
\usefont{T2D}{fao}{m}{n}% ファミリー切替え
Пушкинъ ...

ただし,unicode utf8x.def を用いて直接旧正字法ロシア文字でテキストを作成し,T2D フォントエンコーディングでタイプセットするとき,注意事項がある。utf8x.def は古ロシア語文字 і(U+0456)を \cyrii 命令(T2A で定義されているウクライナ文字)に展開するが,T2D ではこの文字は \cyrii ではなく \cyrizhe で定義されているため,エラーとなってしまうのである。このため,T2D フォントエンコーディングが選択されている場合は,\cyrii\cyrizhe として処理するよう,以下のような互換命令をプリアンブルで定義しておく。

\makeatletter%
\def\@td{T2D}%
\let\CYRIItmp=\CYRII%
\let\cyriitmp=\cyrii%
\def\cyrii{\ifx\cf@encoding\@td\cyrizhe\else\cyriitmp\fi}% lower case
\def\CYRII{\ifx\cf@encoding\@td\CYRIZHE\else\CYRIItmp\fi}% upper case
\makeatother%

【タイプセット試験】

すべてのファミリーを使うタイプセット例を示す。ただし,ノーマル立体のみの例であって,斜体,スモールキャピタルなどの書体は例示していない。各自,適宜試していただきたい。比較の参考として Babel 標準の LH フォントによる出力例も付加してある(LH T2D Type1 フォントについては「LH キリル T2D/OT2 Type1 フォント集」を参照)。以下のような LaTeX 原稿 orj.tex を準備した。原稿は UTF-8 エンコーディングで記述しなければならない。

旧正字法で用いられる文字の入力をサポートする IME が必要である。私は Emacs 用のインプットメソッド Elisp をダウンロードサービスで公開している。「Emacs スラヴ語/古典ギリシア語汎用インプットメソッド」を参照。

% -*- coding: utf-8; -*-
%
%     OldFonts 試験
%     Примѣръ русской дореволюціонной орѳографіи
%     -- coded by isao yasuda, June 2, 2009.
%
\documentclass[b5paper,papersize,10pt,uplatex]{jsarticle}
\usepackage[T2D,T2A]{fontenc}
\usepackage[utf8x]{inputenc}% from the unicode package
\usepackage{AcademyOld, AcademyOldN}
\usepackage{NewStandard, NewStandardN}
\usepackage{Elizavet, ElizavetN}
\usepackage{Latin, LatinN}
\usepackage{CourierRO}
\usepackage{Palatino, Minion}
\usepackage{Drevnerus, Pushkin}
\pagestyle{empty}
\kcatcode`б=15% disable cjk for cyrillic by upLaTeX
\makeatletter%
% \cyrii 互換命令(T2D 選択時 \cyrizhe 機能)
% \CYRII\cyrii T2D compatible (they become \CYRIZHE\cyrizhe in T2D)
\def\@td{T2D}%
\let\CYRIItmp=\CYRII%
\let\cyriitmp=\cyrii%
\def\cyrii{\ifx\cf@encoding\@td\cyrizhe\else\cyriitmp\fi}%
\def\CYRII{\ifx\cf@encoding\@td\CYRIZHE\else\CYRIItmp\fi}%
% フォント切替え命令の定義 definitions for fonts switching
\def\aks{\usefont{\cf@encoding}{fao}{m}{n}}% Academy Old Standard
\def\akn{\usefont{\cf@encoding}{fan}{m}{n}}% Academy Old Narrow
\def\els{\usefont{\cf@encoding}{fez}{m}{n}}% Elizavet Standard
\def\eln{\usefont{\cf@encoding}{fen}{m}{n}}% Elizavet Narrow
\def\cre{\usefont{\cf@encoding}{tcr}{m}{n}}% CourierRO
\def\lts{\usefont{\cf@encoding}{flt}{m}{n}}% Latin Standard
\def\ltn{\usefont{\cf@encoding}{fln}{m}{n}}% Latin Narrow
\def\ons{\usefont{\cf@encoding}{fns}{m}{n}}% New Standard
\def\onn{\usefont{\cf@encoding}{fnn}{m}{n}}% New Standard Narrow
\def\drs{\usefont{\cf@encoding}{fdr}{m}{n}}% Archic Russain (map deffers)
\def\psk{\usefont{\cf@encoding}{tpk}{m}{n}}% Pushkin (some glyphs lacking)
\def\plt{\usefont{\cf@encoding}{lpl}{m}{n}}% Palatino (from Windows XP ttf)
\def\mno{\usefont{\cf@encoding}{pmn}{m}{n}}% Minion (from Adebe Reader otf)
\def\ldr{\usefont{\cf@encoding}{cmr}{m}{n}}% LH cmr (ldrm)
\makeatother%
\def\fnm#1{\makebox[22ex][l]{#1}}%
\begin{document}
% sample texts
\def\testtxt{Пушкинъ, свѣдѣніе, мѵро, Ѳедоръ Достоевскій}%
% sample texts for CourierRO
\def\testtxtc{Пушкинъ, свѣдѣнiе, мѵро, Ѳедоръ Достоевскiй}%
\noindent%
\large%
\textbf{{\aks OldFonts} ロシア語旧正字法試験}
 
\fontencoding{T2D}\selectfont%
\noindent%
\aks\textbf{Примѣръ русской дореволюціонной орѳографіи}
 
\vspace{1em}
\normalsize
\aks \fnm{Academy Old: }\aks\testtxt\par
\aks \fnm{Academy Old N: }\akn\testtxt\par
\aks \fnm{Elizavet: }\els\testtxt\par
\aks \fnm{ }(dvipdfmxでは{\aks і}のアキが不正。dvipsならOK)\par
\aks \fnm{Elizavet N: }\eln\testtxt\par
\aks \fnm{CourierRO: }\cre\testtxtc\par% і ない
\aks \fnm{ }({\aks і}ない,ラテン文字iで代用)\par
\aks \fnm{Latin: }\lts\testtxt\par
\aks \fnm{Latin N: }\ltn\testtxt\par
\aks \fnm{New Standard: }\ons\testtxt\par
\aks \fnm{New Standard N: }\onn\testtxt\par
\aks \fnm{Palatino: }\plt\testtxt\par
\aks \fnm{Minion: }\mno\testtxt\par
\aks \fnm{Drevnij: }\drs\testtxt\par
\aks \fnm{ }(フォントマップT2Dと異なる)\par 
\aks \fnm{Pushkin: }\psk\testtxt\par
\aks \fnm{ }({\aks і, ѵ, ѳ}ない)\par
\aks \fnm{LH cmr: }\ldr\testtxt\par
\end{document}

これを uplatex orj.tex で処理し,dvipdfmx -p b5 orj.dvi で PDF を生成する。その結果 PDF の画像を以下に示す。PDF も orj.pdf として掲載しておく。

ファミリーによっては旧正字法グリフの欠落がある。Elizavet では i のあとに不正なアキが入っている。原因は不明である。私の使用している dvipdfmx-20070409 が古いからかも知れない。xdvi, dvips, pdflatex では問題ない。

oldfonts-test.jpg

ロシアの LaTeX メーリングリスト CyrTeX-ru@vsu.ru で先日,OldFonts キリルフォントパッケージの話題が出ていて,興味を掻き立てられた。「Шрифты OLD FONTS А.В. Дмитриева (8063)」以降のスレッドである。

OldFonts はモスクワ大学のサイト http://lizard.phys.msu.su/home/compu_sci/oldfonts-koi.html で公開されている。ところが,私の自宅からは何故か DNS でアドレスを解決できず,本サイトにアクセスできなかった。どうしてもこのフォントを得たかったので,私は Mariusz Wodzicki 教授に泣きついた。メールを書いてパッケージ,情報について教えを乞うた。彼は,私が以前 Babel ロシア語言語定義についてメールのやりとりをしたカリフォルニア大学バークレイ校数学教授だ。彼は OldFonts の開発にも協力したらしい。教授は親切にもパッケージアーカイブを送付してくれ,私は自分の TeX システムにセットアップすることができた。

今日は OldFonts の概要とインストールについてメモしておく。パッケージはモスクワ大学 А. В. ドミートリエフ教授のサイトから取得する。ただし,私のように DNS 解決ができない場合があるかも知れないことをお断りしておく。

【OldFonts 概要】

OldFonts はモスクワ大学のアレクセイ・ドミートリエフ А. В. Дмитриев が開発した LaTeX フォントパッケージである。コンセプトは「ロシア革命前の正字法テキスト組版に適したフォント集成」。革命後の正字法改正(※)で廃止された文字 і[イ・ス・トーチコイ],ѣ[ヤッチ],ѳ[フィター],ѵ[イージツァ]を含む PostScript Type1 フォントが,バージョン 37(2008.1)では 13 ファミリー添付されている。そして,これらのファミリーは立体,斜体などのシェープをほぼ備えている。ロシアの往時の文書を再現するのに優れている。パッケージのライセンスは Aladdin Free Public License (Version 9, September 18, 2000) に準拠している。

(※)現行正字法は 1918 年 10 月に布告された。ロシア革命以前の旧正字法では,例えばフョードル・ドストエフスキイ Федор Достоевский は Ѳедоръ Достоевскій と表記した。日本語でも戦後,現代仮名遣いで仮名文字「ゐ」,「ゑ」が排されたのと同じようなものである。ロシアでも一部に旧正字法にこだわるひともいるようである。これまた,日本でも歴史的仮名遣いを使いたがるひとがいるのと同じである。

ファミリー内訳は次のとおり:[1, 2] Академическая (Academy, 標準・ナローの 2 ファミリー),[3, 4] Обыкновенная новая (New Standard Old, 標準・ナローの 2 ファミリー),[5, 6] Елизаветинская (Elizavet, 標準・ナローの 2 ファミリー),[7, 8] Литературная (Latin, 標準・ナローの 2 ファミリー),[9] Миньон (Adobe Minion Pro),[10] Палатино (Palatino Linotype),[11] ПТ-Курьер (CourierRO),[12] Пушкин,[13] Древнерусский。ただし,[9], [10] はスタイルのみであり,フォントそのものは添付されていない。

[1] 〜 [8] は学術書,文学書などで使用される一般的なフォント。とくに Елизаветинская は懐かしい古風な感じがする。面白いのはデザインフォント Пушкин だ。詩人プーシキンの自筆書体を参考にしてデザインしたという筆記体である。Древнерусский はその名のとおり古ロシア語フォントである。ただし,титло チトロなど教会スラヴ語独自の組版に最適化されている訳ではなさそうである。書体サンプル fonts-sample.pdf を掲載しておく。このドキュメントには OldFonts の解説,使い方もしるされている。機会があればこの場でも紹介したいと思う。

【OldFonts インストール】

簡単にインストール方法を示す。Type1 フォント用リソースをインストールする UNIX 系の手順である(TrueType フォント用設定は行わない)。Windows でもファイルを TDS に合わせて格納すればよい。OldFonts は古いキリル文字を含むため,T2D フォントエンコーディングを使用する(旧正字法固有の文字を使用しないなら T2A フォントエンコーディングでもよい)。t2denc.def ファイルなどの関連定義ファイルを CTAN からダウンロードして組込んでおく。ただし,[9] Миньон (Adobe Minion Pro),[10] Палатино (Palatino Linotype) についてはフォントが添付されていないので,この手順では利用できない。これについては別途改めて紹介する。

  1. OldFonts アーカイブをモスクワ大学 А. В. ドミートリエフ教授のサイトからダウンロードする。OldFonts-dist-37.tar.bz2, Courie_A.zip, Courie_OR.zip が必要である。T2D の定義ファイル(А. Лебедева アレクサンドル・レーベジェフ教授によるもの)もここで入手できるはずである。ローカルでワークディレクトリ(~/tmp/dmitriev とする)に解凍する。
  2. 解凍してできた texmf 以下のツリーが TDS に適合するよう,一部ファイルを移動する。
  3. % cd ~/tmp/dmitriev
    % mkdir -p ./texmf/fonts/enc/dvips/oldfonts
    % mv ./texmf/dvips/base/*.enc ./texmf/fonts/enc/dvips/oldfonts/
    % mkdir -p ./texmf/fonts/map/pdftex/oldfonts
    % mv ./texmf/pdftex/config/*.map ./texmf/fonts/map/pdftex/oldfonts/
    

  4. Courier Type1 フォントのファイル名を訂正し,ツリーに格納する。
  5. % cp ./Courier_A/PostScript/CRR__a.PFB \
         ./texmf/fonts/type1/paratype/courier/crr35__a.pfb
    % cp ./Courier_OR/PostScript/CRR_OR.PFB \
         ./texmf/fonts/type1/paratype/courier/crr35_or.pfb
    

  6. ワークのツリーを TeX システムのツリーにコピーする。次の手順では,環境変数 TEXDIR に texmf-local の位置を記憶させている。
  7. % cd texmf
    % su -m
    # setenv TEXDIR /usr/local/teTeX/share/texmf-local
    # tar cf - ./fonts/ ./tex/ | ( cd $TEXDIR ; tar xvf - )
    # mktexlsr
    

  8. フォントマップを登録する。
  9. # updmap --enable Map=oldf-ps.map
    # exit
    

【タイプセット】

試験用の原稿を OldFonts-sample.tar.gz として掲載しておくので,以下のようにタイプセットしてみてほしい。ただし,コンパイルには別途 ncctools パッケージ(А. Роженко によるキリル組版のためのツール集)が必要であり,CTAN から取り寄せて組込んでおく。この .tex 原稿は Windows CP1251 キリルエンコーディングで記述されており,編集にはこれをサポートしたエディタが必要なので注意。結果 PDF は OldFonts_test.pdf のとおりである。なお,この文書は http://narod.ru/disk/8944080000/OldFonts_test_2_PROBLEMA.rar.htmlCyrTeX-ru@vsu.ru 8063 記事参照)にあるアーカイブの原稿に,私が少し手を入れたものである。

% cd OldFonts-sample
% pdflatex OldFonts_test.tex

サンプルは pdflatex コマンドで処理しなければならなかったが,フォントそのものは pLaTeX2e, upLaTeX でも使えるはずである。

旧正字法で使用される文字を含む TeX フォントは,これまで LH キリルフォントに限られていたのではないだろうか。LH は学術論文に相応しい気品を有する万能フォントであるが,少し硬い。OldFonts の登場により,実際のロシア語文献で見かけるような書籍活字デザインで,旧正字法テキストが組版できるようになった。ロシアの文学研究年報などでしばしば眼に触れる Академическая フォントでもって自分の文書を作成できるなんて,私などは感激してしまうのである。

※ 09.7.7 付記:OldFonts の利用方法,Palatino, Minion フォントのインストールについて,ここにしるした。

最近,語学を勉強するときシステム手帳にメモをとり,暇なときにぱらぱら読み直すようなことをしている。電車のなかで読むためにロシア詩を書き写したりもする(大きな本を持ち歩きたくないので。バイブルサイズのシステム手帳ならば背広の内ボケットに収まる)。これまで手書きでメモを作っていたが,何度も参照するならもう少し綺麗に作りたいものである。そこで,バイブルサイズ(95mm × 170mm)リフィルの版面に文書を LaTeX 組版するためのスタイルファイルを作成してみた。

いろいろ細かい調整がまだまだ必要かも知れないが,参考までにそのスタイルファイルのコードを末尾に掲げておく。これを LaTeX のパスの通った場所に,refile.sty というファイル名,ISO-2022-JP(いわゆる JIS コード)エンコードで格納する。一方,原稿のプリアンブルに \usepackage{refile} を記述してタイプセットすればよい。奥村先生の jsarticle.cls が前提である。\documentclass[9pt,twoside]{jsarticle}\pagestyle{headings} を指定することをお勧めする。私はキリル文字を多用するので,これを簡易に使うためのマクロも最後のほうに定義している。使用するプリンタによってはマージンなどの値を調整する必要があると思う。

このスタイルファイルを使って,プーシキン『青銅の騎士』 А. С. Пушкин «Медный Всадник. Петербургская повесть» (1833) を組版してみた。ソヴィエト科学アカデミー版(1977 年第4巻)のテクストによる。興味のある方はここから PDF をダウンロードしてください。リフィルに印刷して電車のなかででも読んでください。

%%  -*- coding: iso-2022-jp; -*-
%%   リフィル・ページ設定(jsarticle.cls前提)
%%                       2009(c) isao yasuda, All Rights Reserved.
\ProvidesFile{refile.sty}%
\ProvidesPackage{refile}[2009/05/03 V1.0;
  page style for refile bible size, isao yasuda.]
% バイブルサイズ・リフィル用レイアウトパラメータ調整
\setlength{\paperwidth}{95truemm}%%          95×170mm
\setlength{\paperheight}{170truemm}
\AtBeginDvi{\special{papersize=95mm,170mm}}
\setlength{\oddsidemargin}{-1truein}%%       奇数頁 左余白 10mm
\addtolength{\oddsidemargin}{10truemm}%
\setlength{\evensidemargin}{-1truein}%%      偶数頁 左余白 8mm
\addtolength{\evensidemargin}{8truemm}
\setlength{\textwidth}{\paperwidth}
\addtolength{\textwidth}{-20truemm}%%        右余白 10mm となる
\setlength{\fullwidth}{\textwidth}%          only jsclasses
\setlength{\topmargin}{-1truein}%%           上余白 3mm
\addtolength{\topmargin}{3truemm}%%
\setlength{\headheight}{6truemm}%%           ヘッダー 6mm
\setlength{\headsep}{2truemm}%%              ヘッダーと本文の空き 2mm
\setlength{\textheight}{\paperheight}%
\addtolength{\textheight}{-17truemm}%%       下余白 8mm となる
% section 文字を大きくせず,空きもほどほどに
\if@twocolumn
  \renewcommand{\section}{%
    \@startsection{section}{1}{\z@}%
    {0.3\Cvs}{0.2\Cvs}%
    {\normalfont\headfont\raggedright}}
\else
  \renewcommand{\section}{%
    \if@slide\clearpage\fi
    \@startsection{section}{1}{\z@}%
    {\Cvs \@plus.25\Cdp \@minus.1\Cdp}% 前アキ
    {.25\Cvs \@plus.15\Cdp}% 後アキ
    {\normalfont\headfont\raggedright}}
\fi%
% pagestyle とりあえず頁上部にノンブル等を出す headings を想定
\def\ps@headings{%
  \let\@oddfoot\@empty
  \let\@evenfoot\@empty
  \def\@evenhead{\if@mparswitch \hss \fi
    \hbox to \fullwidth{\textbf{\thepage}\hfil\leftmark}%
    \if@mparswitch\else \hss \fi}%
  \def\@oddhead{%
    \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}\hss}%
  \let\@mkboth\markboth
  \def\sectionmark##1{\markboth{%
      \ifnum \c@secnumdepth >\z@ \thesection \hskip1zw\fi
      ##1}{}}%
  \def\subsectionmark##1{\markright{%
      \ifnum \c@secnumdepth >\@ne \thesubsection \hskip1zw\fi
      ##1}}%
}%
% 少し行間をつめる
\renewcommand{\baselinestretch}{0.9}
% for Slavonic
\def\russianhyphenmins{\tw@\thr@@}% OT2用ハイフネーション調整
\long\def\cyrtxt#1{% ロシア語(babel 前提)
  \bgroup\selectlanguage{russian}\fontencoding{OT2}\selectfont #1\egroup}%
\long\def\cyrold#1{% 古ロシア語
  \bgroup\fontencoding{T2D}\selectfont #1\egroup}%
\long\def\cyrocs#1{% 教会スラヴ語(babel,OldSlav 言語定義前提)
  \bgroup\selectlanguage{oldchurchslavonic}#1\egroup}%
\def\nippongo{\selectlanguage{nippon}}% 日本語(babel,nippon 言語定義前提)
\endinput
%%%%

Amazon のリストマニアでロシア語学本と,LaTeX 本のリストを公開した。いずれも私を培ってくれた良書。

ロシア語学・私の必携
LaTeX 本・精選!

misima 辞書,Servlet フォーム,Utf82TeX テーブルの訂正をした。

misima の旧字辞書から,奇,却,脚の3文字に対応する旧字エントリを削除した。要するに,従来は異体字に変換していたのをしないようにした訳である。ある方から指摘をいただき,再考した結果である。

misima Servlet 版では,サーバ側 Servlet / JSP コンテナ Tomcat の POST テキスト最大長を 8,000 バイトに制限している。不用意なユーザから長大なテキスト変換を要求され,サーバがその処理で占有されたら堪ったものではないからだ。従来,これを越える入力を行うとプログラムに渡ったとき 8,000 バイトで切り落とされるため UTF-8 符号化において欠落が生じて文字化けしてしまっていた。今回,ユーザ入力段階で JavaScript でチェックして,上限値を越えた場合はエラーを出力するように改善した。

Utf82TeX については,ロシア語変換における合字抑止命令挿入のバグを訂正した。例えば,"становится" というような "тс" という綴りがあるロシア語文字列では,"stanovit\-sya" のように "t" に続く "s" の前に "\-" (合字抑止命令) を挿入して変換してやらないと,LaTeX OT2 キリルフォントエンコーディングで組版した時に "ts" の合字が拾われて "становиця" となってしまう。"тс" が "ц" に化けてしまうのである。昨年ドイツ語・BibTeX オプションをサポートした時,この処理にデグレードを作り込んでしまい,"\-s" のあとに空白文字を挿入するようになってしまっていたのだった。プログラムを直してもよかったのだが,テーブルエントリを "\-s\empty" に訂正することによって,空白を命令の区切りとして機能させるようにして,ごまかした。utf82tex-0902 としてアーカイブを改訂して公開した。misima の TeX 変換にも同じ処理があるので,こちらも訂正した。

今日は,Perl で misima SOAP クライアントを簡単に作成する方法について述べる。

misima 旧字・旧仮名遣い変換支援は Web 版を数多くの方に使っていただいている。しかし,misima SOAP Web Service を利用しているひとはほとんどいない。misima SOAP Web Service パッケージには,Emacs / Meadow 用,Microsoft Word 用,Jedit X 用,TeXShop 用,秀丸用のクライアント,Java API クラスライブラリが添付されている。これによって,まるで自分の PC で misima が動いているかのような使い方ができるのに。作者としては残念である。

SOAP といえば Java という印象があるけれども,一方,Perl の世界でも,SOAP 通信基盤モジュール SOAP::Lite が提供されており,CPAN (Comprehensive Perl Archive Network) から入手できる。これを使うと,いとも簡単に misima SOAP クライアントが書けてしまう。misima 変換オプションと対象文字列を二つのパラメータにセットし,SOAP サービスオブジェクトを生成し,パラメータを引数にして misimaConvert メソッドを実行すると,misima 変換結果が返却される。

#!/usr/bin/perl
use utf8;
use SOAP::Lite;
binmode STDOUT, ":utf8";
my $p1 = "-kyitq -s a -x fki"; # 旧字旧仮名TeX変換指定
my $p2 = "鴎外は団扇であおいだ。Я люблю вас. Ça, déjeunons!"; # 変換対象 text
my $uri = "http://yasuda.homeip.net/axis/services/misimaSoapConnector";
my $svc = SOAP::Lite->service("$uri?wsdl");
print $svc->misimaConvert($p1, $p2);

以上のような Perl コードを misimaconvert とでも名前を付けて格納する。コマンドラインでこれを実行すると「\CID{7646}外は團\CID{13883}であふいだ。YA lyublyu vas. \c Ca, d\'ejeunons!」(旧字・旧仮名遣い・多言語 TeX 変換)と出力される。

もちろん,これは核心部分だけのコードなので,実用的なプログラムには,パラメータの組立て,変換対象文字列の取得,結果の編集・加工など,その前段,後段が必要なのは言うまでもない。でも,misima の遠隔変換オペレーションはこれだけでできてしまうのである。SOAP はいかに簡単なのかということが分かると思う。misima サーバが Java で記述されているなんてことはまったく意識しないでよい。XML による標準化というものがいかに強力なのかが分かるというものである。

おそらく SOAP::Lite モジュールの組込みの方がよっぽど面倒だろう。MIME-Lite, MIME-Tools, XML-Parser, Compress-Zlib など,いくつかの前提モジュールを別途インストールしておく必要があるからである。FreeBSD ならば ports: net/p5-SOAP-Lite が用意されているので,cd /usr/ports/net/p5-SOAP-Lite && make install clean 一発でインストールできる。私の場合,前提 Perl モジュールの版が古かったためか,「.../Base64.so: Undefined symbol "Perl_Tstack_sp_ptr"」などのエラーが出て make が失敗するという問題があった。エラーになっているライブラリ(例では BASE64.so)の Perl モジュールを再インストール(make deinstall reinstall)すればうまくいった。

ユーザでもし独自に misima アクセスクライアントを作成し運用する場合は,私に連絡いただきたい。

古代教会スラヴ語 LaTeX パッケージ OldSlav 1.0 をリリースした。\today を教会スラヴ語で出力するオプション,命令をサポートした。これまで OldSlav は \today をロシア語で出力するものだった。これを教会スラヴ語様式で出すものである。これを機に,バージョン番号を一気に 1 とした。ダウンロードはここから。「OldSlav 利用の手引き」ドキュメントも改訂した。

Babel oldchurchslavonic 言語指定で利用する場合は,\languageattribute{oldchurchslavonic}{slavdate} をプリアンブルで指定すると,教会スラヴ語で出力する。Babel を用いず,oldslav.sty を利用する場合は,\usepackage[slavdate]{oldslav} と指定する。いずれの場合も,\slavdateon, \slavdateoff 命令によって出力様式を教会スラヴ語,ロシア語に切替えることができる。\slavtoday 命令を用いると,日本語環境でも教会スラヴ語 \today 出力が得られるようになっている。

例えば,次のような記述を行うと,その下に示すような出力が得られる。どれも「2009 年 2 月 7 日」の表示である。

\documentclass[a4j]{jsarticle}
\usepackage[oldchurchslavonic, nippon]{babel}
\begin{document}
\selectlanguage{oldchurchslavonic}
  \textlatin{1:} \today\par% russian (default)
  \slavdateon%
  \textlatin{2:} \today\par% old church slavonic (on)
  \slavdateoff%
  \textlatin{3:} \today\par% russian (off)
\selectlanguage{nippon}
  4: \today\par% japanese
  5: \slavtoday\par% russian (off)
  \slavdateon%
  6: \slavtoday\par% old church slavonic (on)
\end{document}

ex1.jpg

教会スラヴ語出力での月の名称の一覧は以下のとおり。日付で出力するため,各名称は生格形で掲げている。

ex2.jpg

これらの月名は,ふたつの資料を典拠とした。ひとつは Андрей Лебедев (アンドレイ・レーベヂェフ) 氏のサイト "Соборник двунадесяти месяцей --- Из церковно-славянского требника издания 1882 года." にある требник の写本画像。こういう貴重な写本画像を公開してくれる方がいるものである。

もうひとつは 1900 年に出版された Священник магистр Григорий Дьяченко (学士司祭グリゴーリイ・ヂヤチェンコ) 編・教会スラヴ語辞典全二巻 "Полный церковно-славянскій словарь въ 2-хъ томахъ." である。これは,モスクワ Терра -- книжный клуб 出版社が 1998 年に出版したリプリントである。 革命前の旧正書法で印刷されており,なかなか味わいがある。これを Ozon の古書で見つけたとき,私は小躍りしたものである。

oldchurchdic.jpg

OldSlav 教会スラヴ語自作 LaTeX パッケージの \today 命令出力を教会スラヴ語に相応しい形式で出力する方法を考えていた。これまでは教会スラブ語固有の日付出力方法が思いつかず,ロシア語で出すようにしていたのである。

古代ルーシには固有の月名,というか一年における時期の区分があった訳だが,それで月日を出力するのも時代錯誤のような気がする。日本語 pLaTeX2e でも \today 命令は現在の日付を「2009 年 2 月 1 日」などと出力する。これを「二千九年如月朔日」なんて古典的名称で出力したら,偏向を帯びる。気取りが過ぎて気味が悪い。教会スラブ語でもやはり,その雰囲気を保ちつつ,ある程度の近代的な出力を目指すべきだろう。

いろいろ調べ,考えた末,ローマ暦に由来する月名称と教会スラブ語数値表現で行うことにした。月の名称は,19 世紀ロシア正教会で用いられた требник 聖事経 --- 儀式や祈禱奉事についてしるした正教会文献 --- を典拠として採用することにした。インターネットで 1882 年の写本を見つけたのである。これなら現代ロシア語との乖離も少なく,月名の意味もわかりやすい。以下に現代ロシア語とともに,教会スラブ語として採用した月名を示す。

- 1月 --- Январь --- І҄аннѹа'рїй
- 2月 --- Февраль --- Феѵрѹа'рїй
- 3月 --- Март --- Ма'ртъ
- 4月 --- Апрель --- А҄прi'лїй
- 5月 --- Май --- Ма'їй
- 6月 --- Июнь --- І҄ѹнїй
- 7月 --- Июль --- І҄ѹлїй
- 8月 --- Авгст --- А'ѵгстъ
- 9月 --- Сентябрь --- Септе'мбрїй
- 10月 --- Октябрь --- О҄ктѡ'брїй
- 11月 --- Ноябрь --- Ное'мбрїй
- 12月 --- Декабрь --- Деке'мбрїй

もちろん,ロシア語で月名を出力する現行仕様もオプションとして残すべきだと思う。時間が取れれば,この \today 出力改造をしようと思っている。

角川文庫『源氏物語 ビギナーズ・クラシックス』を読んだ。「あらすじ+さわり古文」でもって,よいとこどりをしようとした。それなりに全体の趣きを把握することはできた。でも,時間をかけて本文全体をすべて読まないと,やはり作品時間を共有できない。まるで,いいときだけ顔を出す遊び仲間になったような気後れがある。よい一節も退屈な部分もおしなべて付き合ってこそ味わえる達成感がない。とはいえ,作品の世界的古典たる所以,源氏香,仮名遣いなどについて,いろいろ自分なりに考えることがあり,興味深い時間を過ごすことができた。

昔,大学の教養部時代,国文学の講義で大朝雄二教授 --- 岩波新古典文学体系本『源氏物語』の校注者である --- が「源氏物語は女性のための文学だ」というようなことを冗談混じりにおっしゃっていたことを思い出した。作品は主に主人公の雅な女性遍歴を物語る訳だけど,雨夜の品定め,源の内侍 (好色な老女官) や末摘花 (鼻の赤い醜女) の描写などに,男性の独善的でご都合主義な女性観が如実に,残酷なまでに描かれていて,一方でそんな男の身勝手さを皮肉に眺める作者の眼差しも散見される。

「[ ... ] 今よりのちの御心にかなはざらむなむ,言ひし違ふ罪も負ふべき」など,さしもおぼされぬことも,情け情けしう聞こえなし給ふことどももあめり。(現代語訳: [ 源氏は ]「[ ... ] 今後あなた [ 末摘花 ] に不満があった場合には,約束違反の罰を受けよう」と,それほど真剣に考えていないのに,いかにも情のこもったふうに言いくるめた。)
『源氏物語 ビギナーズ・クラシックス』p. 158

もちろん『源氏物語』は現代的な意味でのジェンダー文学ではない。しかし,薫を拒絶する浮舟の姿 --- 大ロマンの掉尾を飾る名場面 --- は,男女の仲,世の動かせない規範にしばられた女性の「ものあはれ」,運命的抵抗を象徴して感動的である。

* * *

本書には源氏香の解説が掲載されている。源氏香とは香道の遊技である。5 種類のお香をそれぞれ 5 袋づつ計 25 袋用意し,このなかから無作為に 5 袋を取り出し,順に聞き分けて同じ香の出現パターンを,対応する源氏の巻名で答える。香を聞き分ける熟練と古典の知識とを競う優雅な遊びである。香の組み合わせは全部で 52 通りあり,そのパターンは縦線とそれを結ぶ横線とで記号化され,「桐壷」と「夢浮橋」以外の (つまりはじめと終わりを除いた) 52 の巻名に対応づけられている。その印は本書中,巻の中扉に掲げられている。

さて,そこで問題: 源氏香が 52 パターンとなることを数学的に示せ。これは高校数学における順列・組合せの面白い問題である。河添健・林邦彦共著『楽しもう!数学を』(日本評論社, 2002) に掲載されていた。同じ香が 1〜5 の何種類含まれるかで場合分けして,それぞれの組合せの数の和を求めればよい,とあった。源氏香は同じ香りがどこで現れるかに焦点があり,5 種類の香 A〜E において,ABBCD も CDDEA も同じ「夕顔」であるところが,この問題の難しいところである。高校生の方は自力で解いてみてください。なんでこんな話題を書いているのか。来年,子供が受験生になるからか。

* * *

さてさて,また一方で源氏香の記号を LaTeX で組版できないか探ってみた。それが今昔文字鏡フォントに含まれていることを知った。源氏香文様は,同じ香の場合縦線を横線で繋ぐシンプルなものなので,フォント形式でなくても TeX の作図命令で描画することもそれほど難しくはないと思う。とはいえ,さすが文字鏡である。ちょっと遊びで組んでみた。

今昔文字鏡 LaTeX 用パッケージ一式,文字鏡フォントは『パソコン悠悠漢字術 2002』の付録 CD に収録されている。今昔文字鏡サイトなどのインターネット・リソースからもダウンロードできるはずである (ただし今昔文字鏡サイトのダウンロードサービスは 2009/1 現在再構築のためサービス停止中であり,多少古くても書籍を購入したほうがよいかも知れない)。

TEXPACK.TBZbzip2, tar で解凍し,添付の install.txt ドキュメントに従って LaTeX システムに追加する。もちろん文字鏡フォントも,TrueType ないし Type1 いずれかの形式のファイルを TeX, dviware が参照できるパスに格納しておく必要がある。ここでは,『パソコン悠悠漢字術 2002』添付 CD から UNIX システム (Mac OS X 含む) にインストールする方法を,以下に示す。pLaTeX2e はすでにインストール済みとする。tcsh シェルでのオペレーションである。

  1. まず CD 内 TEX ディレクトリ以下にあるファイル TEXPACK.TBZ 及び PFB, TFM, JFM ディレクトリ一式をワークディレクトリ (仮に ~/tmp/mojikyo とする) にコピーする。オペレーションは省略。
  2. ワークにコピーした PFB ディレクトリの下にある文字鏡 Type1 (PostScript) フォントを解凍する。フォントアーカイブがいくつもあり,ひとつひとつ解凍するのは面倒なので,tcsh foreach 文で纏めて処理する例である。解凍にはしばらく時間がかかる。
  3. % cd ~/tmp/mojikyo/
    % ls -F
    JFM/        TEXPACK.TBZ*
    PFB/        TFM/
    % cd ~/tmp/mojikyo/PFB
    % foreach i (PFB TFM JFM)
    foreach? cd $i
    foreach? foreach j (*.TBZ)
    foreach? bzcat $j | tar xvf -
    foreach? end
    foreach? cd ..
    foreach? end
    ... 解凍にしばらく時間がかかる ...
    

  4. TEXPACK.TBZ を解凍し,スタイルファイル,マップファイルを TDS(TeX Directory Standard)所定の位置にコピーする。さらに各種フォントファイルも TeX フォントツリーに移動しておく。次のようなオペレーションを行えばよいはずである。

    % cd ~/tmp/mojikyo
    % ls -F
    JFM/        TEXPACK.TBZ*
    PFB/        TFM/
    % bzcat TEXPACK.TBZ | tar xvf -
    % su -m
    # setenv TEXDIR /usr/local/teTeX/share/texmf-local
    # mkdir -p $TEXDIR/fonts/{map/dvips,tfm,type1}/mojikyo
    # mkdir -p $TEXDIR/tex/latex/mojikyo
    # cp -p style/* $TEXDIR/tex/latex/mojikyo/
    # cp -p dvips/* $TEXDIR/fonts/map/dvips/mojikyo/
    # mv TFM/*.tfm JFM/*.tfm $TEXDIR/fonts/tfm/mojikyo/
    # mv PFB/*.pfb $TEXDIR/fonts/type1/mojikyo/
    # mktexlsr
    

  5. フォントマップを登録する。
  6. # updmap-sys --nomkmap --enable Map=momin.map
    # updmap-sys --nomkmap --enable Map=moten.map
    # updmap-sys
    

これで文字鏡 LaTeX 環境の作成は完了である。文字鏡フォントを LaTeX で使うためには,Type1 フォント使用オプション指定でスタイルファイル mojikyo.sty を読込んでおく (\usepackage[type1]{mojikyo})。\MO{文字鏡番号} 命令によって文字鏡フォントを出力することができる。源氏香フォントは文字鏡番号 064801--064852 範囲にある。dvips, dvipdfmx によって dvi ファイルから,それぞれフォント埋め込み PostScript ファイル,PDF ファイルを生成できる。EUC で記述した LaTeX 原稿 (genjiko.tex) をコンパイルし,PostScript, PDF を生成するまでは以下のとおりである。

% platex --kanji=euc genjiko
% dvips genjiko.dvi -o
% dvipdfmx genjiko.dvi

以下のような LaTeX 原稿を書いて組版してみた。組版結果の画像を原稿の下に示す。PDF もここに置いておく。

% 今昔文字鏡フォント 源氏香出力
\documentclass[a4j,12pt]{jsarticle}
\usepackage[type1]{mojikyo}% 今昔文字鏡スタイル (PostScript フォント指定)
\pagestyle{empty}
\long\def\kan#1#2{% 巻名・源氏香出力マクロ
  \parbox[c]{5zw}{\hfil(#1)\hfil\baselineskip=18pt\relax\par%
  \centering\bgroup\LARGE\ifx#2\empty  \else\MO{#2}\fi\egroup}}%
\begin{document}
\def\arraystretch{2.5}%
\begin{center}
  \begin{tabular}[c]{cccccc}
    \kan{桐壺}{\empty}&\kan{帚木}{064801}&\kan{空蝉}{064802}&
    \kan{夕顔}{064803}&\kan{若紫}{064804}&\kan{末摘花}{064805}\\
    \kan{紅葉賀}{064806}&\kan{花宴}{064807}&\kan{葵}{064808}&
    \kan{賢木}{064809}&\kan{花散里}{064810}&\kan{須磨}{064811}\\
    \kan{明石}{064812}&\kan{澪標}{064813}&\kan{蓬生}{064814}&
    \kan{関屋}{064815}&\kan{絵合}{064816}&\kan{松風}{064817}\\
    \kan{薄雲}{064818}&\kan{朝顔}{064819}&\kan{少女}{064820}&
    \kan{玉鬘}{064821}&\kan{初音}{064822}&\kan{胡蝶}{064823}\\
    \kan{螢}{064824}&\kan{常夏}{064825}&\kan{篝火}{064826}&
    \kan{野分}{064827}&\kan{行幸}{064828}&\kan{藤袴}{064829}\\
    \kan{真木柱}{064830}&\kan{梅枝}{064831}&\kan{藤裏葉}{064832}&
    \kan{若菜上}{064833}&\kan{若菜下}{064834}&\kan{柏木}{064835}\\
    \kan{横笛}{064836}&\kan{鈴虫}{064837}&\kan{夕霧}{064838}&
    \kan{御法}{064839}&\kan{幻}{064840}&\kan{匂宮}{064841}\\
    \kan{紅梅}{064842}&\kan{竹河}{064843}&\kan{橋姫}{064844}&
    \kan{椎本}{064845}&\kan{総角}{064846}&\kan{早蕨}{064847}\\
    \kan{宿木}{064848}&\kan{東屋}{064849}&\kan{浮舟}{064850}&
    \kan{蜻蛉}{064851}&\kan{手習}{064852}&\kan{夢浮橋}{\empty}\\
  \end{tabular}
\end{center}
\end{document}

genjiko.jpg

* * *

さてさて,角川文庫『源氏物語 ビギナーズ・クラシックス』を読んでいて,仮名遣いについても少し考えるところがあった。

本書に「鈴虫」の一節からの写本表記が掲載されている。紫式部による『源氏物語』オリジナルは失われたことになっている。現在残っているのは鎌倉時代以降の写本だという。それでもその写本は,紫式部の時代の書き方からそう隔たっていないと思う。それらは変体仮名を含む草書体である。

次はその表記をこんにちの活字にしたものである:「十五夜農遊ふくれ二佛の於万へ二宮於盤して八しちかくな可め堂万ひつゝ念珠し堂万婦わ可支あ万支三多ち二三人盤那多て万徒るとてなら須あ可つ支の於と,三徒のけ者ひなときこゆ」(pp. 330-1) 云々。ちなみにこのくだりは二千円札の裏面にその一部が刷られている。大学の国文学科でまじめに印影本を解釈する訓練を受けた者には,これがすらすら読める。私などは本当に尊敬してしまう。

しかし,普通の読書人には,次のように歴史的仮名遣いに「改変」されていないと理解できないのではないだろうか:「十五夜の夕暮れに,仏の御前に宮おはして,端近うながめ給ひつゝ念誦し給ふ。若き尼君たち二三人,花奉るとて,鳴らす閼伽坏の音,水のけはひなど聞こゆ」。

写本の表記は,変体仮名を含むだけでなく漢字の宛て方も独特であり,歴史的仮名遣いとの差異が著しい。歴史的仮名遣いでは多様な変体仮名が,現代でも使われる仮名文字に包摂され,画一化され,書写したひとが籠めたかも知れぬ意図(草書体としての見た目の麗しさ等)が捨象される。「歴史的仮名遣いこそが日本の伝統的な仮名遣いである。現代仮名遣いは愚かな誤謬であり,日本の伝統との断絶を齎す。すべからく歴史的仮名遣いに復古すべきである」と宣うひとたちは,この『源氏物語』写本の仮名遣いを見てなんと言うだろうか。「伝統」って何? この写本から,「歴史的仮名遣い」が自然に,合理性に基づいて生まれ出た伝統的形式などではなく,むしろ,仮名遣いとはその時代の要請に応じた統制を受け,変幻自在に変化してきたということが,窺われる。古典は,校訂者による言わば「歴史的仮名遣いによる改竄」によってこそ,我々にとって親しいものとなっているのだ。

歴史的仮名遣い復古主義者・「正字正仮名」信奉者には,きちんと一次文献を調べ表記の「実態」をよく知る国語国文学研究者ではなく,雰囲気として古めかしい「歴史的仮名遣い」こそが「伝統的で正しい」と勘違いしているに過ぎないひとが,実は多いのではなかろうか。彼らは仮名遣いの「実態」を知らずに,契沖及び明治以降戦前までの仮名遣いを基準に議論しているだけのように私には思われる。

国語表記は「伝統」の本質ではない。「正字正仮名」信奉者が大げさに言う歴史的仮名遣い表記の「正統性」を杓子定規に受入れてしまうと,現代人が『源氏物語』などの古典と真に繋がるための本性を逆に喪失してしまう。古典の表記の真の姿は「歴史的仮名遣い」から大きく乖離しているのだから。まあ,「正字正仮名」信奉者が「現代仮名遣いは伝統との断絶だ」なんて大げさに危機感を煽るのは,文化人ぶっているだけだと私には思われる。

* * *

本書は今昔文字鏡フォント活用の実践的解説書である。付録 CD にはフォントだけでなく,上記 LaTeX パッケージなどのツールが収録されている。惜しむらくは,この 2002 年版では LaTeX での活用方法が割愛されてしまったこと。でも,添付 CD の TEX ディレクトリにある usage.pdf を参照すれば,使い方を知ることができる。

Profile

ISAO。システムエンジニア。昭和 30 年代を懐かしむオヤジ。ロシアに興味があります。
[more], [About our site]

Notice

この文書はフィクションであり,実在する個人,団体等とは一切関係ありません。

文書の記述内容は無保証です。不適切な表現があればコメントにてご指摘ください。

管理者が公序良俗に反すると判断したコメント,トラックバックは,断りなく削除される場合があります。

Links

About this archive

All Entries of Category TeX

Previous: MacOSX

Next: ars

Recent Entries in Main Index.
All Entries in Archive Index.

Web Pages

Powered by Movable Type 4.1