この休日,教会スラヴ語 LaTeX パッケージ OldSlav の UTF-8 対応作業をしていた。久しぶりの LaTeX マクロへの取り組みだったので,現状の作りを思い出すのに苦労した。とりあえず,SlavTeX オリジナル記法と互換性を確保しつつ,Unicode 古スラブ文字を直截原稿に記述できる拡張まで漕ぎ着けた。いまのところ,Babel スタイルのみの対応である。また,アクティブアクセントモード(アクセント命令を \ なしで記述できるモード)の試験のみ。いまのところ問題はなさそうである。
OldSlav UTF-8 対応の方式設計の基本は,使用する UTF-8 キリル文字の第一オクテット X"D0",X"D1",X"D2" をアクティブ(catcode 13)に設定し,第二オクテットを引数として取る命令として定義する点である。第二オクテットになりうる文字コード 128--191 の分類コードを通常文字(catcode 11)に変更する。第二オクテットで文字を特定でき,それに応じて教会スラヴ語の文字に置き換えてゆく。Dominique Unruh 氏によるめっちゃトリッキーな Unicode パッケージ utf8x.def との共存で苦労した。これと併用できないと,他の言語,例えば古典ギリシア語の直截入力と混在できないことを意味する。ゆえに utf8x.def 共存は OldSlav にとってぜひとも解決の必要な課題だったのである。このため,OldSlav 環境を抜けるとき,utf8x.def がローディングされている場合,キリル文字第二オクテット文字の分類コードを 13 に設定しなおす必要があった。
そのうち,ドキュメントを含めパッケージを整理して公開する予定である。IR 版(本パッケージはこの先ずっとβ版だろうけど,それ以下ということ)を置いておくので,すでに OldSlav をお使いでかつ興味のある方のみ,次の二つのファイルをダウンロードして既存ファイルに上書きして試してほしい。ocscommon.def, oldchurchslavonic.ldf。
SlavTeX オリジナル記法が使い方の基本である。さらに ѧ і ї ѣ є ѡ ѿ などの古スラヴ文字を使うことができる。いまのところアクセント引数のグルーピングにバグがある('{ѣ} などとするとうまく動作しない。'ѣ と書く必要がある。ただし,教会スラヴ語では複数文字をグルーピングすることにより引数を指定する局面はないはずである)。原稿例(ギリシア語,ロシア語混在試験)とその出力は以下のとおり。教会スラヴ語テキストはヨハネ福音書の冒頭である。uplatex が必要である。原稿では inputenc.sty,utf8x オプション付が指定されているが,これはロシア語,古典ギリシア語の直截入力のためであり,OldSlav だけならこれがなくても UTF-8 入力が可能である。
% -*- coding: utf-8; -*-
% OldSlav UTF-8 対応試験
\documentclass[b5paper,uplatex,papersize]{jsarticle}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8x]{inputenc}% ロシア語・ギリシア語向け。OldSlav は不要
\usepackage[polutonikogreek,oldchurchslavonic,russian]{babel}
\languageattribute{oldchurchslavonic}{utf8}% OldSlav UTF-8
\pagestyle{empty}
\kcatcode`б=15\relax% Cyrillic U+0400--U+04FF
\kcatcode`ς=15\relax% Greek U+0370--U+03FF
\kcatcode`Ἄ=15\relax% Greek Extended U+1F00--U+1FFF
\parindent=0pt\relax
\begin{document}
\selectlanguage{oldchurchslavonic}
\parbox[t]{100mm}{%
Въ нач'алѣ б`ѣ сл'ово, \и сл'ово б`ѣ къ б_гу, \и б_гъ б`ѣ сл'ово.
С'ей б`ѣ ^искон`и къ б_гу:
вс^ѧ т'ѣмъ б'ыша, \и без\ъ нег`ѡ ничт'оже б'ысть, "єже б'ысть.
Въ т'омъ жив'отъ б`ѣ, \и жив'отъ б`ѣ св'ѣтъ челов'ѣкѡмъ:
\и св'ѣтъ во тм`ѣ св'ѣтитсѧ, \и тм`а <єг`ѡ не <ѡб\ъ'ѧтъ.
Б'ысть челов'ѣкъ п'осланъ ѿ б_га, "имя <єм`у <іѡ'аннъ:
с'ей прї'иде во свид'ѣтелство, да свид'ѣтелствуетъ
<ѡ св'ѣтѣ, да вс`и в'ѣру "имутъ <єм`у.
Не б`ѣ т'ой св'ѣтъ, но да свид'ѣтелствуетъ <ѡ св'етѣ:
б`ѣ св'ѣтъ "истинный, "иже просвѣщ'аетъ вс'ѧкаго челов'ѣка
гряд'ущаго въ м'іръ:
въ м'ірѣ б`ѣ, \и м'іръ т'ѣмъ б'ысть, \и м'іръ <єг`ѡ не позн`а:
}%
\vspace{2em}
\selectlanguage{polutonikogreek}
\parbox[t]{100mm}{%
Ἄνδρα μοι ἔννεπε, Μοῦσα, πολύτροπον, ὃς μάλα πολλὰ\\
πλάγχθη, ἐπεὶ Τροίης ἱερόν πτολίεθρον ἔπερσε.\\
πολλῶν δ'' ἀνθρώπων ἴδεν ἄστεα καὶ νόον ἔγνω,\\
πολλὰ δ'' ὅ γ᾽ἐν πόντῳ πάθεν ἄλγεα ὃν κατὰ θῡμόν,\\
ἀρνύμενος ἥν τε ψῡχὴν καὶ νόστον ἑταίρων.\\
ἀλλ'' οὐδ'' ὧς ἑτάρους ἐρρύσατο, ἱέμενός περ;\\
}%
\vspace{2em}
\selectlanguage{russian}
\selectruencoding{T2A}%
\parbox[t]{100mm}{%
Прежде всего откроем тайну которую
Мастер не пожелал открыть Иванушке.
Возлюбленную его звали Маргаритою Николаевной.
Все, что Мастер говорил о ней,
было сущей правдой.
Он описал свою возлюбленную верно.
Она была красива и умна.
}%
\end{document}