HOME > 電算 > 貧者の縦書きポストスクリプト

貧者の縦書きポストスクリプト

ごく簡単なシェルスクリプトで縦書きポストスクリプトを作成してみるなり。うちの Ubuntu 10.04 環境だと、ghostscript で見ることができた(使用フォントは Ryumin-Light-UniJIS-UTF8-V。これは、我が家では SazanamiMincho-Regular で置き換えられる)。CUPS での印刷は駄目。ps2pdf12 で pdf にして印刷はできたけど、フォントがボロちいな。

UTF-8 テキストファイルのパスを、次のシェルスクリプトの引数に与えると標準出力からポストスクリプトが出る。一行の字数はあらかじめ nkf -fw か何かで揃えておく。

まあ、いろいろ実用に耐えぬところはあるが、こうも簡単なのがうれしかったので、晒しておく。

#!/bin/sh
lines=30
lnum=`wc -l $1 | cut -d\  -f1`
if [ `expr $lnum % $lines` -ne 0 ]
  then pages=`expr $lnum \/ $lines + 1`
  else pages=`expr $lnum \/ $lines`
fi
cat <<EOF
%!PS-Adobe-2.0
%%BoundingBox: 0 0 841 595
%%EndComments
%%BeginProlog
/mincho /Ryumin-Light-UniJIS-UTF8-V findfont def
/S {save gsave 18 18 translate mincho 11 scalefont setfont 760 500 moveto} def
/N {currentpoint exch 20 sub exch pop 500 moveto} def
/E {grestore restore showpage} def
%%EndProlog
%%BeginSetup
<</PageSize [841 595]>> setpagedevice
%%EndSetup
EOF
n=0
while [ $n -lt $pages ]
do
  p=`expr ${n} + 1`
  echo "%%Page:${p} ${p}"
  echo "S"
  b=`expr $n \* $lines + 1`
  e=`expr $b + $lines - 1`
  sed -ne "$b,$e {s/^/N (/; s/$/) show/; p}" $1
  echo "
E"
  n=`expr $n + 1`
done

evince の表示を撮ったスクリーンショット(縮小)。Unicode の有り難さで、カンダタのカンが正しく表示されている。

——目次——
HOME雑文写真壁紙馬鹿読書語学
│├英語
│└日本語電算地理
│└白地図ブログ