次の例では、呼び出されたときにスタックに 2 つの値を配置するプロシージャを実行時に作成します。
72 720 moveto
/cp [ currentpoint ] cvx def
cp
100 100 moveto
cp
これにより、スタックに 72 720 72 720 が残ります。cp の定義が最初に 2 つの値で配列を埋めます。cp が呼び出されると、現在のポイント位置の変更に関係なく、 is が呼び出されるたびに 2 つの格納された値がスタックにプッシュされるように、実行可能になります。
もちろん、これの有用性は、明示的なポイントに到達することではなく、実行中にポイントをキャプチャすることです。コードフラグメントが
72 720 moveto
(Begin with, end with) show
/cp [ currentpoint ] cvx def
% intervening code ...
cp moveto
(, whatever!) show
これの有用性はより明白です。
これが機能するには、現在のポイントが存在する必要があることに注意してください。質問セクションでは、実行が保留されているため、プロシージャ {currentpoint} を作成できます。ただし、 currentpoint が現在のポイントなしで呼び出されると、postscript エラーが発生します。これを調べるために、短い追記プログラムが続きます。
%!
/fontsize 14 def
/lineheight 16 def
/Times-Roman findfont fontsize scalefont setfont
/newline
{72 currentpoint exch pop lineheight sub
dup 72 lt {showpage pop 720} if
moveto
} def
/cp2 { currentpoint } def
72 720 moveto
/cp1 [ currentpoint ] cvx def
cp1
cp2
(Test line) show
cp1
cp2
144 500 moveto
cp1
cp2
/cp1 [ currentpoint ] cvx def
cp1
cp2
(Test line) stringwidth
newline
(-top of stack-) show
newline
count {30 string cvs show newline} repeat
(-bottom of stack-) show newline
showpage
これを理解するためにインターネットで多くの参考文献を検索しましたが、何も表示されませんでした。x と y の値を別々の変数に格納するという手段に頼っていましたが、そのアプローチの優雅さから、このアプローチを思いつきました。これが何らかのキーワードで扱われるトピックであることがわかっている場合は、お知らせください。