キリル文字・ギリシア文字の表示 | ムーミントロールのブログ

ムーミントロールのブログ

ムーミン谷に行きたい

ロシア語とかの文章は、ワープロソフトで綺麗な出力が得られます。が、今回はポストスクリプトにこだわって・・・・。

筆者の環境にはプロポーショナルフォントのキリル文字がないようです。ネットを見れば、ロシア方面のサイトで入手できるようですが、私の技量ではちょっと無理。
手元にあるフォントには等幅、つまり全角データしかなくて、いざ文章を出してみると、
どうも文字と文字の間があいていて、見栄えが悪い気がします。読みづらいし。

そこで、少し工夫してみました。MS明朝(MS-Mincho-90ms-RKSJ-H)でやってます。

出力サンプル

上の図の説明ですが、1行目、2行目が

(Good morning!) show
(Доброе утро!) show

と普通に出したものです。英字は i などの細い字が幅をとってません。2行目はすかすかですね。等幅フォントなので、律儀に1文字ずつ進んでます。カーニング、リガチャとか以前の問題。

3行目がX方向(文字の進行方向)を1文字書いたら、ちょっと戻ってというふうにしたもの。フォントスケールとの兼ね合いもあるのですが、今回は -40 にしてます。

-40 0 (Доброе утро!) ashow

としたもの。X方向の増分をマイナス値にすることで戻してくっつけてます。
4行目は均等配置を施したもの

400 (Доброе утро!) str_even

400ポイント枠に均等分割したものです。文字幅まで縮小されてしまいますから、細長い文字になってしまいます。

こうしてみると ashow を使うのが、よさそうですね。好みの数値で増やすようにすれば。
あと、文字によってくっつきすぎたりするようなので、気になるところだけカレントポインタ増分をいじればよいでしょう。


(課題点・・・かな)
もうひとつ考えてるのは文字ひとつずつの増値を個別に配列で持たせて、処理する方法。
これも気が向いたらトライしてみます。


4行目の均等配置ですが、下記のようなコードでやってます。これを工夫してみてもいいのかな・・・。

/str_even {
 1 dict begin
 /str exch def
 /boxWidth exch def
 /strWidth str stringwidth pop def
 /lengthRatio strWidth boxWidth div def
 gsave
 1 lengthRatio div 1 scale
 str show
 grestore
 end
} def