教会スラヴ語 SlavTeX Type1 フォントと Adobe Reader 8

昨年,このブログで『Adobe Reader 8 Type1 フォント抽出失敗』の記事を書いた。この時は Ghostscript で作成した PDF では,また Adobe Reader 7 では問題なかったので,その後この問題を放置していた。ところが今日 (4日),素晴らしい多言語 LaTeX Web サイトを公開されている稲垣さんから,拙作 OldSlav 教会スラヴ語 LaTeX パッケージのドキュメントを Adobe Reader 8 で閲覧しようとしたら「埋め込みフォント『XXXX+slav10』を抽出できません」のエラー (下図) で SlavTeX フォントが出力できないとの指摘を受け,この問題をきちんと対策すべきとの意欲が掻き立てられた。

ar8err.png

当時から SlavTeX Type1 フォントのエンコーディングに問題があるのではないかと思っていた。このフォントは В. Волович さんが SlavTeX パッケージを再編成する際に,А. Слепухин さんの SlavTeX オリジナル MF フォントから MF トレーサを使って生成したものである。今回,私は mftrace を用いて,フォントのエンコーディングに tex256.enc ファイルを参照するように指示して Type1 フォントを独自に生成してみた。

% mftrace --magnification=4000 --encoding=tex256.enc slav10
% t1binary slav10.pfa slav10.pfb

ってな具合。これを slav7 〜 slav24, islav7 〜 islav24 のすべてのフォントについて行うわけだが,ひとつひとつ実行するのは面倒なので,次のようなシェルスクリプトを書いた。これは,できるだけ大きな解像度で METAFONT 解析を試みつつ,pfb フォントと同時にマップファイルも生成する。

#!/bin/sh
#   SlavTeX Type1 Fonts Generation for OldSlav
#   using mftrace 1.2.5 and t1binary.
#
#                          2008(c) isao yasuda, All Rights Reserved.
# Fonts Type
FFT="slav islav"
# Size
GENB="7 8 9 10 12 14 17 18 24"
# Encoding file
ENCF="tex256.enc"
# Map file
MAPF="oldslav.map"
# starting.
echo "* SlavTeX Type1 fonts generation for OldSlav started at `date`."
cp /dev/null $MAPF
# font list generation
FLIST=""
# type 1 list
for i in $FFT; do for j in $GENB; do FLIST="$FLIST $i$j"; done; done
# SlavTeX Computer Modern Type1 Fonts generation
for i in $FLIST
do
    # When return code == 0 (mftrace normal end)
    # - break and go to processing of the next fonts
    # When return code != 0 (mftrace abnormal end)
    # - decrease mag by 100 and retry mftrace
    mag=4000
    while [ $mag -ne 0 ]
    do
        echo "* $i try magnification=$mag --encoding=$ENCF."
        mftrace --magnification=$mag --encoding=$ENCF $i
        if [ $? -eq 0 ]
        then
            echo "* mftrace $i pfa gen succeeded at $mag magnification."
            t1binary $i.pfa $i.pfb
            echo "* t1binary $i pfb gen succeeded."
            rm -f $i.pfa
            echo "$i $i <$i.pfb" >> $MAPF
            mag=0
        else
            mag=`expr $mag - 100`
        fi
    done
done
echo "* SlavTeX Type1 fonts generation for OldSlav ended at `date`."

これでできた Type1 フォントで古いものを置き換え,OldSlav ドキュメントを再組版してみたところ,Adobe Reader 8 でも問題なく出力できるようになった。ビンゴ! OldSlav パッケージにこの Type1 フォントを添付して公開しようと思っている。パッケージ修正はいささか時間がかかるので,とりあえず新しい SlavTeX Type1 フォント・アーカイブを暫定的に掲載しておく。これをダウンロード,解凍して,古い SlavTeX Type1 フォント ($TEXMF-LOCAL/fonts/type1/public/slavtex 配下にあると思う) と差換えればよい。

もうひとつ稲垣さんの指摘でわかったこと。OldSlav では教会スラヴ語の数値表現を自動的に出力する命令 (\slnum) をサポートしているが,稲垣さんによれば,\slnum の 10 台の数文字出力で 10 の位の数と 1 の位の数が逆転しているように思われるとのこと。しかし,А. Плетнева, А. Кравецкий 共著による教会スラヴ語教科書を再確認したところ,教会スラヴ語の数表現様式では 11 〜 19 の数字だけは文字を逆転させるのが規則である。よって,OldSlav 現状仕様の出力で正しいようである。私は OldSlav を作った際,この教科書で組版の正否を試験したのだが,この規則は読み落としていた。私も勉強になった。OldSlav の \slnum 命令は Слепухин さんの SlavTeX オリジナルコードを pTeX に忠実に移植しただけなので,要するに Слепухин さんが適切だったということなんだけど。

この 10 台の数値だけ位取りが逆転する規則は,考えてみれば別におかしくない。ロシア語では,たとえば 12 を десять (10)два (2) の組み合わせではなく,двенадцать (12) という特別な語で示す (英語でも "ten two" ではなく "twelve" という独立した語である)。22 は двадцать два で 20 と 2 の結合となる。これに従えば,12 の表現において 2 の部分が 10 を表す文字より前に出る (две (2) - надцать (10)) のも納得できるわけである。

教会スラヴ語の数値表現を下図に示す。12 の例でだけ,10 の文字と 2 の文字がひっくり返っている。

slnum.png