OldSlav 教会スラヴ語聖書環境

OldSlav 1.1 を開発したところであるが,1 点致命的なバグを見つけた。OldSlav は \< という気息記号アクセント命令を定義している。ところが,ptetex UTF-8 対応のためにこれを \DeclareTextAccent で登録したため,グローバルに \< を書き換えてしまい,通常このコントロール・シーケンスに割り当てられている \inhibitglue を上書きしてしまっていたのだった。訂正版(同じアーカイブ名なんだけど)をアップしたので差し替えていただけると幸いである。oldchurchslavonic 環境外では \inhibitglue\< で機能するようになるはずである。

ところで,教会スラヴ語訳聖書を眺めていて,その組み方を LaTeX の環境命令として実現するマクロがあると便利だと思った。聖書の組み方は次のようなものである。章の第一節・第一文字をインデントなしでドロッピングする,つまり,文頭の一文字だけを大きな文字で飾り組みする(古い文献によくあるマナーである)。二節目以降はインデントして教会スラヴ語様式で節番号を表示し,本文を続ける。その実際の教会スラヴ語聖書での姿をここに掲載したので,関心のある方は確かめてみてほしい。

ocsbiblija 環境マクロを作成してみた。ドロッピングは第一文字を \LARGE にし,\lower 命令で文字を下にずらすことによりレイアウトする。改段落のつどカウンタを回して,それが 2 以上の場合,自動的に教会スラヴ語の節番号を先頭に出力する。これは \everypar を再定義して実現する。第一節の 1 行目をインデントしないよう,\setbox0=\lastbox でインデントのボックスを取り除く。 一方,2 行目だけはドロッピング文字とのバランスを考慮し,所定サイズの字下げを付け,3 行目以降はインデントしないよう,\parshape 命令で調整する。設計はこのようなものである。以下にそのコードを示す。

% ocsbiblija 環境の定義
% - \begin{ocsbiblija}[<d|other>]{第一文字}本文 \end{ocsbiblija}
% - オプション d なら第一文字をドロッピング(デフォルト),それ以外はそのまま
% - 第一文字はグルーピングが必要
\makeatletter
% ocsbiblija 環境の設定パラメータ初期値
\newdimen\ocsbibindent \ocsbibindent=0.65em\relax% 節番号前のインデント
\newdimen\ocsbibskip \ocsbibskip=0.3em\relax% 節番号と本文のアキ
\newdimen\ocsdropsize \ocsdropsize=0.45em\relax% 開始文字の下げ寸法
\newdimen\ocshangsize \ocshangsize=1.65em\relax% 第一節 2 行目のインデント
\def\ocsbiblija{\@ifnextchar[\@ocsbiblija{\@ocsbiblija[d]}}%
\def\@ocsbiblija[#1]#2{% #1 最初の文字; #2 ドロッピング対象文字;
  % 第一段落の定義
  \dimen0=\linewidth \advance\dimen0 by-\ocshangsize
  \if#1d% dropping の場合 2 行目だけを \oocshangsize 分インデント
    \parshape 3 0pt \linewidth \ocshangsize \dimen0 0pt \linewidth
  \else% そうでない場合インデントしない
    \parshape 1 0pt \linewidth
  \fi%
  \leavevmode\setbox0=\lastbox% \parindent>0でもインデントを除去
  \if#1d\lower\ocsdropsize\hbox{\LARGE#2}\else#2\fi% dropping
  % 第二段落以降の定義
  \@tempcnta=1\relax
  \everypar{%
    \advance\@tempcnta by1\relax
    \ifnum\@tempcnta<1\relax% 第一節は節番号を振らない
    \else% 第二節以降は教会スラヴ語様式で節番号を振る
      \makebox[1em][c]{\slnum(\the\@tempcnta).}%
      \hskip\ocsbibskip\relax
    \fi%
  }%
  \parindent=\ocsbibindent\relax% 第二節目以降は \ocsbibindent 分インデント
}%
\def\endocsbiblija{\par}%
\makeatother

\begin{ocsbiblija}[オプション]\end{ocsbiblija} の間に本文を記述する。オプションに d 以外を指定すると,ドロッピングせずノーマルサイズで第一文字を組む。各種アキ,インデント幅,字下げ量はパラメータ初期値にあるコントロール・シーケンスを再設定すれば調整できる。本文の第一文字はグルーピングしなければならない。節毎に空行を入れて本文を記述してゆくと,第二節以降,自動的に節番号が教会スラヴ語様式で段落冒頭に出力される。

このマクロをプリアンブルに記述し,upLaTeX で組んだ画像を以下に示す。LaTeX 原稿: ocsbiblija.tex と PDF: ocsbiblija.pdf も掲載しておく。multicol.sty で二段組みにし,段組み線を入れると,まさに教会スラヴ語聖書らしくなった。

ocsbiblija-example.png
ocsbiblija 組版例

upLaTeX 原稿は以下のとおり。ocsbiblija 環境の定義は割愛してある。

% -*- coding: utf-8; mode: latex; -*-
% OldSlav UTF-8 対応試験 
\documentclass[a5paper,uplatex,papersize]{jsarticle}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8x]{inputenc}% ロシア語・ギリシア語向け。OldSlav は不要
\usepackage[polutonikogreek,oldchurchslavonic,russian,nippon]{babel}
\languageattribute{oldchurchslavonic}{utf8}% OldSlav UTF-8
\usepackage{multicol}% 多段組
\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
% SlavTeX フォントを 1.12 倍に拡大して使用
\DeclareFontFamily{LST}{cmr}{}%
\DeclareFontShape{LST}{cmr}{m}{n}{<-> s * [1.12] fslavrm}{}%
\setlength{\topmargin}{-15truemm}
\setlength{\headheight}{7mm}
\addtolength{\textheight}{20truemm}
\renewcommand{\baselinestretch}{0.75}
\pagestyle{empty}
% ocsbiblija 環境の定義 省略(上記参照)
\begin{document}
\selectlanguage{nippon}
\hfil OldSlav教会スラヴ語聖書組版マクロ\quad 露・希語混在試験\hfil
 
\selectlanguage{oldchurchslavonic}
\setlength{\columnseprule}{0.4pt}
\begin{multicols}{2}
\begin{ocsbiblija}[d]
{В}ъ нач'алѣ б`ѣ сл'ово, \и сл'ово б`ѣ къ б_гу, \и б_гъ б`ѣ сл'ово.\par
С'ей б`ѣ ^искон`и къ б_гу:\par
вс^ѧ т'ѣмъ б'ыша, \и без\ъ нег`ѡ ничт'оже б'ысть, "єже б'ысть.\par
Въ т'омъ жив'отъ б`ѣ, \и жив'отъ б`ѣ св'ѣтъ челов'ѣкѡмъ:\par
\и св'ѣтъ во тм`ѣ св'ѣтитсѧ, \и тм`а <єг`ѡ не <ѡб\ъ'ѧтъ.\par
Б'ысть челов'ѣкъ п'осланъ ѿ б_га, "имя <єм`у <іѡ'аннъ:\par
с'ей прї'иде во свид'ѣтелство, да свид'ѣтелствуетъ 
<ѡ св'ѣтѣ, да вс`и в'ѣру "имутъ <єм`у.\par
Не б`ѣ т'ой св'ѣтъ, но да свид'ѣтелствуетъ <ѡ св'етѣ:\par
б`ѣ св'ѣтъ "истинный, "иже просвѣщ'аетъ вс'ѧкаго челов'ѣка 
гряд'ущаго въ м'іръ:\par
въ м'ірѣ б`ѣ, \и м'іръ т'ѣмъ б'ысть, \и м'іръ <єг`ѡ не позн`а:
\end{ocsbiblija}
\end{multicols}
 
\selectlanguage{polutonikogreek}
\begin{verse}
Ἄνδρα μοι ἔννεπε, Μοῦσα, πολύτροπον, ὃς μάλα πολλὰ\\
πλάγχθη, ἐπεὶ Τροίης ἱερόν πτολίεθρον ἔπερσε.\\
πολλῶν δ'' ἀνθρώπων ἴδεν ἄστεα καὶ νόον ἔγνω,\\
πολλὰ δ'' ὅ γ᾽ἐν πόντῳ πάθεν ἄλγεα ὃν κατὰ θῡμόν,\\
ἀρνύμενος ἥν τε ψῡχὴν καὶ νόστον ἑταίρων.\\
ἀλλ'' οὐδ'' ὧς ἑτάρους ἐρρύσατο, ἱέμενός περ;\\
αὐτῶν γὰρ σφετέρῃσιν ἀτασθαλίῃσιν ὄλοντο,\\
νήπιοι, οἳ κατὰ βοῦς Ὑπερίονος Ἠελίοιο\\
ἤσθιον; αὐτὰρ ὁ τοῖσιν ἀφείλετο νόστιμον ἦμαρ.\\
\end{verse}
\hfill {\em [ \textit{Ὅμηρος} ]}\qquad\qquad
 
\selectlanguage{russian}
\begin{verse}
Ты проходишь без улыбки,\\
Опустившая ресницы,\\
И во мраке над соборам\\
Золотятся купола.\par
\vspace{1em}
Как лицо твое похоже.\\
На вечерних богородиц,\\
Опускающих ресницы,\\
Пропадающих во мгле...\par
\vspace{1em}
Я стою в тени портала,\\
Там, где дует резкий ветер,\\
Застилающий слезами\\
Напряженные глаза.
\end{verse}
\hfill {\em Александр Блок}\qquad\qquad
\end{document}

このマクロを OldSlav にも入れようかと思ったが,その他の教会スラヴ語マナーを含めもう少し総合的なマクロ集ができた段階にすることにした。

今回,\parshape\everypar,インデントの仕組み等々の解説で Victor Eijkhout の著書『TeX by Topic』がとても役に立った。LaTeX マクロを自作したい方は必携の文献である。