使用しているPostScriptコードに精通していますか?それとも、どこかから盲目的にコピーして貼り付けただけですか?それを理解したい場合は、「PostScript言語リファレンス」または「レッドブック」または「PLRM」をグーグルで検索する必要があります。これらのリソースは、AdobeからPDFとして入手できます。
PostScriptスニペットは次の手順を使用します。
(test)
文字列「test」をスタックの一番上に配置します。
dup
スタックの一番上のアイテムを複製します。(これで、スタックに文字列が2回表示されます。)
stringwidth
。この演算子が実行された後、最上位の「テスト」文字列が消費され、代わりに2つの値がスタックに追加されます。文字列の高さ(最上部)と文字列の幅(上から2番目)です。[更新: 実際には、「文字列の高さ」は完全には正しくありません。文字列の描画が終了した後の現在のポイントの垂直方向のオフセットです... ]
- 次に、を使用します
pop
。これは、スタックの最上位の値を削除するだけです。これで、文字列の幅だけがスタックの一番上に残ります。
2 div
その値を2で除算し、結果(文字列幅の半分)を残します。
neg
スタックの最上位の値を無効にします。これで、負の値がスタックの最上位になります。
0
値「0」をスタックの一番上に配置します。
rmoveto
次に、スタックの一番上の2つの値を消費し、現在のポイントをその距離(文字列の幅の半分)だけ左に移動します。
show
スタックの一番下に常に残っている最初の「テスト」文字列を消費し、それを「表示」します。
では、弦の高さを考慮に入れるにはどうすればよいでしょうか。最後の行として試してください:
200 700 moveto (test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
私の変更を理解するには、The Red Bookで、、、、、および演算子のcharpath
意味を調べてくださいdiv
。exch
pathbbox
roll
sub
このコマンドは、Ghostscriptを使用して、コードからWindows上にPDFファイルを作成します(結果の表示と確認が簡単です)。
gswin32c.exe ^
-o my.pdf ^
-sDEVICE=pdfwrite ^
-c "/Helvetic-Oblique findfont 10 scalefont setfont 200 700 1 0 360 arc fill 0 0 moveto (test test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
Linuxの使用:
gs \
-o my.pdf \
-sDEVICE=pdfwrite \
-c "/Helvetic-Oblique findfont 10 scalefont setfont 200 700 1 0 360 arc fill 0 0 moveto (test test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
より読みやすいフォームは次のとおりです。
gswin32c ^
-o my.pdf ^
-sDEVICE=pdfwrite ^
-c "/Helvetic-Oblique findfont 10 scalefont setfont" ^
-c "200 700 1 0 360 arc fill 0 0 moveto (test test) dup" ^
-c "true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll" ^
-c "sub 2 div exch 200 700 moveto rmoveto show"
と
gs \
-o my.pdf \
-sDEVICE=pdfwrite \
-c "/Helvetic-Oblique findfont 10 scalefont setfont" \
-c "200 700 1 0 360 arc fill 0 0 moveto (test test) dup" \
-c "true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll" \
-c "sub 2 div exch 200 700 moveto rmoveto show"