文字列が枠内におさまるように文字列の横幅を自動調整する(PostScript)。

PostScriptで表を作るとき、長い文字列でも枠からはみ出さないように文字列の横幅を自動調整します。

%!PS-Adobe-3.0
2.834645669 2.834645669 scale
newpath 

/vPosition   297 20 sub def  % A4 297mm

/Space 3 def

/CellW 100 def
/ADJW CellW Space 2 mul sub def

0.3 setlinewidth

/Left 20 def

/Ryumin-Light-EUC-H findfont 10 scalefont setfont

/SameLength {
     % (------------SameLength-----------\n) print
     dup stringwidth pop     % 名前の文字列を複製し、文字列の幅を求める
                             % スタックには0:文字列の幅、1:文字列 がつまれている
     % 文字列の幅を複製し、ADJW(幅からスペースを引いた)で割る
     dup ADJW div           % (文字列幅+左右のスペース) / 表示枠幅
     % (== dup ADJW div\n) print
     % pstack
     dup
     gsave
     % 比率が1より大きいときは (横比率 1 scale) を実行します。
     % そうでなければ比率を捨てます。
     1 gt { 1 exch div 1 scale } {pop} ifelse
     pop
     show
     grestore
  } def

Left      vPosition moveto 
CellW       0 rlineto
0        -100 rlineto
CellW neg   0 rlineto
closepath stroke

/hPosition Left Space add def

/newline { /vPosition vPosition 15 sub def
            hPosition vPosition moveto } def 

hPosition vPosition moveto 
newline (本日は晴天なり) SameLength 
newline (本日は晴天なり本日は晴天なり) SameLength 
newline (本日は晴天なり本日は晴天なり本日は晴天なり) SameLength
newline (本日は晴天なり本日は晴天なり本日は晴天なり本日は晴天なり) SameLength
newline (我輩は猫である。名前はまだない。) SameLength
newline (枠内に入るよう横幅を調整しています。) SameLength

showpage