GNU a2psの日本語NLSデータを作ろう

テキスト文字の印刷にテキストからPostscriptに変換するa2psは大変便利です。 a2psのバージョン 4.10以降gettext化されていますのでこれも日本語NLSに対応 させました。 この版は日本で普及しているa2ps 1.39(Perlによるもの)と違い、さらにソー スなどを印刷すると字句解析してキーワードが目立つように違うフォントにな るので大変出力結果が見やすいです。

ただし、残念ながらこの版のa2psは日本語の印字には対応しておりません。せっ かく日本語NLSを作成してもこれでは意味がないので、しかたなしにその場し のぎで、これは片山 紀夫さんの fixeucfont のcompositefontのPostscriptを適当にカスタムして埋め込んで、 a2psで日本語が印刷できるようにしています。手を思いっきり抜いているので 2バイトEUCコードにべったり依存したコードしか書いておりません。

このパッチは a2ps-4.13-ja_nls.patch に置いておきます。a2ps-4.13bをベースに作成しています。 内部で倉光 君 郎さんによるlibjcodeを(適当にカスタムして)用いてEUC コードに変換するように処理するようにしていますのでユーザレベルでは JIS/SJIS/EUCを意識しなくていいようになっています。あと、簡略化のため、 libjcodeはパッチ内に含めてしまいました(いいのかな?)ので、パッチを当て たあと普通にconfigure, make すればいいと思います。

下に、このパッチを当てたa2psの出力例を載せておきます。 『a2ps -1』として印刷した例です。これが見やすいと思うかどうかは好みの 問題ですが‥‥。

Japanese a2ps output example

さらに、

なんてやると、カラーPostscriptを出力します。お試しあれ。
Japanese a2ps color output example

対象コマンド

a2ps

●LC_TIMEロケールデータについて

Linuxでは注意点がひとつあります。 a2psは印刷日時やファイル更新日時の出力にlibcにあるstrftime()関数を使っ ていて、このためシステムのLC_TIME データ(日付/時刻表示のためのロケールデータファイル)が参照されます。 個人的な趣味でこの部分もきちんと日本語化させたかったので、申し訳ありま せんが応急処置としてglibc用の私の作成したいんちきLC_TIMEデータ LC_TIME.glibc/usr/share/locale/ja_JP.ujis/LC_TIME へコピーして下さい。古いlibc5だと、 このLC_TIMEです。 無くても動作はしますが、日本語LC_TIMEをコピーすると、 日付の表示が日本語の形式に従います。

こんなオンボロ日本語LC_TIMEロケールデータはいらない、無効にしたいとい う人は、パッチを当てた後、NLSファイル(po/ja.poファイル)中の

のように日付の日本語訳部分を『""』へ変更してください(似たような部分は 同ファイル中に全部で2箇所あります)。それ以外の環境では、 日本語のLC_TIMEデータファイルは大抵のシステムでは用意されているので大 丈夫だと思います。

●訳のカスタマイズ方法

もし、訳が気に入らなくて、自分でNLS用のPOファイル(テキスト)を作成し直 したい場合、ソースツリーのトップディレクトリ上で、

としてから、ja.poを最初から作り直すか、もしくはパッチに含まれている、 ja.poファイルの気になる部分だけを編集するなどして、自分好みの訳(例えば 関西弁風とか)が完成したら などとすればいいでしょう。NLSのためのロケールディレクトリは、特に自分 で普通にコンパイルしたものは、上記ディレクトリではなく、 /usr/local/share/localeにあります。 このディレクトリはconfigure時に『--prefix』オプションか『--datadir』オ プションなどを使えば変更できます。

また、msgfmtやxgettextコマンド自体は GNU-gettext に含まれています。

●うまくコンパイルできない人へ

このパッチはconfigureスクリプトだけでなく、その元になるconfigure.inや Makefile.inも改変してしまいます。そのため、パッチを当ててしまうと、勝 手にaclocalやautoconfが起動してしまい、おかしなconfigureスクリプトが再 作成されてしまってコンパイルできないという方がいるのではないかと思いま す。そういう場合、ちょっと反則的な方法ですが、パッチを当てた後、 configure実行前に(ソースツリーのトップで)

なんかを実行するといいかもしれません。

●半角を全角の1/2の大きさにしたい

パッチデフォルトでは全角文字と半角文字の大きさのバランスは、 英字のフォントのサイズはオリジナルサイズのままにして、見た感じで適当に チューニングしています。ただし、全角半角のサイズ比が2:1になっていない ので、テキストで表を作成していて、それをa2psで通すとバラバラになってし まいます。その対処方法を書いておきます。 この場合、漢字フォント幅はオリジナルの大きさのままで、英字が若干小さめ になります。ただし、フォントの全体の大きさは『-f』オプションにて変更で きます。

インストール後、 $prefix/share/a2ps/encoding/euc-jp ($prefixにはデフォルトでは/usr/localが入ります)中に、

というのがあると思います。最後の『1.1』という引数が半角:全角のサイズ 比です。この大きさを『0.8333』あたりに変更して下さい。ノーマル固定文字 に関してはこれで望みの結果が得られると思います。

他の太字フォントなども、例えば

のように変更すればいいと思います。なお、Courier系ではないフォント (Helvetica等)はもともとの英字がプロポーショナルフォントなので、固定幅 にはできません。

●Perl版a2ps(1.39)からの移行に際しての注意

従来のPerl版からこのGNU a2ps 4.1x に移行する際、仕様が違うので注意して ください。Perl版a2psでは単なるフィルタとして動作しますが、このa2psでは、 いきなりプリンタへ出力します。そのため、

としないとファイルに落とせません(ファイル名が『-』で標準出力)。ただし、 逃げ道はあります。それは、 $prefix/etc/a2ps-site.cfg中の をコメントにして、 とすることです。思いっきりその場しのぎの設定ですが、違和感はとりあえず なくなります…。

あと、GNU版 a2ps の特徴に外部フィルタリング機能があります。 HTMLや、Texファイルを入力とした場合、Netscapeや、latexなどの外部アプリ ケーションを通して、自動的に整形したPostscriptを生成します。 ただ、日本語関係で必ずしもうまくいかないものもあり、これを止めさせたい 場合も多々あると思います。その場合、

というようにすれば、外部アプリによるフィルタリングを抑制することができ ます。