PostScript
GhostScriptには色んな機能がありパラメータが複雑です。ps2pdfはPostScript から PDFを生成する機能に特化したツールで内部でGhostScriptを呼んでいます。 GhostScriptのコマンドで書くとこんな感じ。 gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile…
スタックに積んで渡された値を辞書に登録するとローカル変数のように使えて便利です。 登録は以下のような手続きで行います。 /valueName exch def スタックの値を登録するのに exch でスタックの順番を入れ替えて def しています。 その様子を見てみます。 …
「PostScript実習マニュアル 3.8.12 文字列の輪郭」に文字列の輪郭の輪郭を描く例があります。 (文字列) false charpath false は、塗りつぶすのに適したパスを作成するか、線を描画するのに適したパスを作成するかを示すもので、この場合は線を描画するのに…
PostScriptで表を作るとき、長い文字列でも枠からはみ出さないように文字列の横幅を自動調整して印字する手続きを作りましたが、今度は同じ機能ですが、横幅をスタックにつんで渡すバージョンです。辞書によるローカル変数を使っていますのでコードがすっき…
表の枠内に印字するときに1行に収まらないときは改行するというのは作りました。 今度は1行に収まるときは縦位置を中央に、2行、3行と増えても縦位置を中央に印字したいのです。 そのために文字の幅に応じて文字列を分割し、配列に入れて表示する手続きに渡…
%!PS-Adobe-3.0 2.834645669 2.834645669 scale newpath /vPosition 297 20 sub def % A4 297mm /newLineHight 12 def /Left 20 def /Space 3 def /hPosition Left Space add def /newline { /vPosition vPosition newLineHight sub def hPosition Space add…
配列にオブジェクトを一個追加する手続きです。 % 配列にオブジェクトを追加する。 % stack : obj array /s3dict 1 dict def /addToArray { s3dict begin /obj exch def % 追加するobj /baseArray exch def % 受け取った配列 /baseLen baseArray length def …
スタックに詰まれた二つの文字列を連結する手続きです。 % stack : string string /s2dict 1 dict def /joinString { s2dict begin /str exch def /strBase exch def /baseLen strBase length def /strLen str length def /newString baseLen strLen add str…
PostScript TUTORIAL and COOKBOOKの72ページ。72 Chapter 7: LOOPS AND CONDITIONALS に再帰でフラクタルを描くサンプルがあります。パラメータを変えると図形も変ります。 /depth 0 def /maxdepth 15 def /down {/depth depth 1 add def} def /up {/depth …
PostScriptで再帰が出来るのだからとフィボナッチ数列を計算してみました。 %! /fib { dup 0 eq { pop 1} {dup 1 eq { pop 1 } { dup 1 sub fib exch 2 sub fib add } ifelse }ifelse } def 0 1 20 {fib ==} for else へ値を渡すのには dup によりスタックの…
PostScriptの配列が構築される様子が面白い。 配列の先頭の'['はスタックにマークを作るためのオペレータです。 '['が実行されるとスタックにマークオブジェクトが作られます。 PostScriptの配列が構築される様子を見てみます。 GS>[ % マークオブジェクトが…
PostScript TUTORIAL and COOKBOOKの70ページ。70 Chapter 7: LOOPS AND CONDITIONALS に再帰で階乗計算の結果を印刷するサンプルがあります。その階乗計算の部分。 /factorial %stack: n --- n! (after) { dup 1 gt {dup 1 sub factorial mul} if } def pri…
repeat、forが繰り返す条件を指定して手続きを呼ぶのに対し、loopは無限ループを作り実行中に条件を判定して脱出します。 GPL Ghostscript 9.06 (2012-08-08) Copyright (C) 2012 Artifex Software, Inc. All rights reserved. This software comes with NO …
スタックに 100 が積まれているときに /xpos exch def という動作はどのようになるのか追ってみます。 %!PS-Adobe-3.0 GPL Ghostscript 9.06 (2012-08-08) Copyright (C) 2012 Artifex Software, Inc. All rights reserved. This software comes with NO WAR…
先の「文字列が枠内におさまるように自動改行しながら印刷する(PostScript)」はEUC-JPバージョンでした。これを Shift-JIS で行うには1文字と残りの文字列に分けるための判定方法を変更する必要があります。 Shift-JISの半角文字は0x80〜0x9F、0xE0〜0xFF を…
今までは以下の理由でEUC-JPのフォントを使ってきました。 Shift-JIS は0x5cを含む文字が文字化けを起こす。 UTF-8 はデフォルトでインストールされていないこともある。 日本語文字列出力を参考に、EUC-JPでテキストを作り、/Ryumin-Light-EUC-H のように E…
Cygwin + Ghostscrpit + Windows TrueTypeフォントに Ghostscrpit で Windows TrueTypeフォントを使う方法が掲載されていました。 GhostscrpitはC:\Program Files\gs\gs9.06\lib\cidfmap に記載されているフォント使いますので、ここにフォントを追加します…
PostScriptで表を作るとき、長い文字列でも枠からはみ出さないように自動改行しながら印刷します。 %!PS-Adobe-3.0 % EUC-JP で記述すること。 2.834645669 2.834645669 scale % これでポイントだった単位がミリになります。 newpath /Ryumin-Light-EUC-H fi…
文字列を出力して行末に達したときは、改行して次の行の先頭から表示しなければなりません。 行末に達したかどうかは currentpoint で現在の位置を求め、 stringwidth で印刷しようとする文字列の幅を求めれば良いのですが、長い文章全体の幅を求めても意味…
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 su…
PostScript で日本語の文字列を扱う場合、半角文字は1文字を長さ1と数えますが、全角文字は1文字を長さ2として計算します。 %! /Ryumin-Light-EUC-H findfont 20 scalefont setfont % 文字列の長さ (1) length == % -> 1 (日) length == % -> 2 (abcあいう) …
PostScript TUTORIAL and COOKBOOKの51ページに星の形を描くプログラムがあります。文字列を表示する print とスタックを表示する pstack を使って動作する様子を追いかけてみます。 Chapter 6: MORE GRAPHICS (Saving the Graphics State) /starside { 72 0…
PostScript TUTORIAL and COOKBOOKの42ページ。右寄せ印刷の動作が分かりにくいので追ってみます。 /rightshow % stk: string { dup stringwidth pop %get length of string 120 exch sub %calc. white space 0 rmoveto %Move over that much show } def %sh…
EUC で記述し、EUC-H、EUC-V のフォントを使用すれば日本語をそのまま表示することが出来ます。 %!PS-Adobe-3.0 EPSF-3.0 % bluebook P40 Chapter 5: PRINTING TEXT % EUC で保存。 % mm の定義 % 10 mm と記述すれば 10 * 2.834645669 の値となり、10 mmを…
PosScript の型を調べる命令 type を見つけたので表示させてみます。 GPL Ghostscript 9.06 (2012-08-08) Copyright (C) 2012 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. % 1 が…
私は日本語訳の本を見ているのですが、PostScript TUTORIAL and COOKBOOKの39ページに内部でexchを使ってスタックの状態を入れ替えている手続きの定義がわかりづらかったので追ってみました。 x 座標、y 座標をスタックに積んで showGorilla を呼ぶと指定さ…