*PSTricks [#c2b5878d]

[FIXME] 以下の内容はかなり古いので,どなたか改訂お願いします。
//気に入らなかったら、再改訂して下さい。
//例があまり良くないのは分かっています。

// 質問です。
// latex->dvips->ps2pdf (Ghostscript 7.07) で処理した PSTricks を含むソースで、
// psdot で出力される dot が、ビットマップ展開されてしまうのはなぜでしょうか?
// 回避する方法を御存じないでしょうか?
//// Ghostscript のバージョンの問題ではないですか?
//// 8.14, 8.15, 8.50 を試してみましたが、いずれも、スケーラブルなグラフィックに
//// 展開されます。
//// 念のため。申し上げると、 dot は PS ファイル中では Type3 フォントです。
// コメント部分にもかかわらず、ご返答ありがとうございます。
// 前半部分に関してかなりショックです。
// 後半部分は知っていましたが、ビットに切って、ビットマップに展開した荒い
// 文字列 (Type 3 の Helvatica?) を並べて表現しているのに比べると、スケーラブル
// であることの魅力は代えがたいです。
// Ghostscript のヴァージョン問題、うーむ、困りました。
// 2006-12-29 (金) 00:33:23 追記: 8.54-gpl をコンパイルし、この下でスケーラブルなグラフィックに
//                      なっていることを確認しました。

PSTricks は TeX,LaTeX 文書ファイルの中で PostScript
の命令を直接使って簡単に表現力豊かな描画ができる便利なパッケージ(スタイルファイル)です。
ただし,dvi ファイルに \special で PostScript
ヘッダ(プロファイル)の内容に依存した PostScript
の命令を埋め込むので,''dvi'' ドライバには、
- そのような PostScript 命令をヘッダの内容と組み合わせて、解釈できる VTeX 等の
ドライバや、組み合わせた PostScript 命令をその場で、 PostScript インタプリタに
処理させられるドライバの類(複数の開発プロジェクトが進行中です。)
- PostScript を解釈せずに(ヘッダとユーザ・コマンドを埋め込むのみで)
次の段階に受け渡す dvips(k), dvipsone, texture 等のドライバ

のいずれかを、使う必要があります。
//現在では、ほとんど使われていない古いドライバにも
//PSTricks を部分的にサポートする物がいろいろあります。
PSTricks マクロの生成する PostScript コード断片は
EPS や、 MetaPost の生成する疑似 EPS のように、
独立して解釈できる物ではありません。
この辺りの事情も含め、''dvi'' ドライバ固有の設定は pstricks.con ファイルに
書き込んでおく事になっています。 pstricks.con では pstricks.tex で定義された、
すべての TeX マクロを再定義できるので、特定のドライバのみ、異なる実装を
使用して、他の方法では対応できない機能をサポートする事もできます。
このファイルは dvi ドライバではなく、 TeX コンパイラの検索パスに置きます。
''dvi'' ドライバの生成物がプロファイルを埋め込んだ PostScript フォーマットの場合は、
PostScript プリンタ(あるいは Ghostscript など)の利用が前提になります。
PostScript 言語はスタックの積み降ろしを直接記述しなければならない、大変、
低レベルの言語であり、設計思想もそれに準じた物になっています。
PostScript 命令への TeX マクロを通しての完全なアクセスを実現する、 PSTricks
のコアのユーザ・インタフェースも、その影響もあり、
METAFONT や [[MetaPost]]
ほど洗練されていないかもしれませんが,
PostScript でできることは何でもできます。
更に、''ノード''の概念と xkeyval を使う事により、高級言語としての
ユーザ・インタフェースを与える事も可能であり、それを実現したパッケージには、
pst-eucl や uml があります。
ドライバが対応していれば、
日本語も使えますし,
曲線のパス長も METAFONT や MetaPost より長くても大丈夫のようです。

PSTricks は [[Timothy Van Zandt:http://faculty.insead.edu/vanzandt/]] (開発当時プリンストン大, 現フランス・INSEAD) が作り,
フランスの Denis Girou によって育てられ,
[[Sebastian Rahtz:http://users.ox.ac.uk/~rahtz/]] も加わって,
1997年春に PSTricks 97 として集大成されました。
その後も修正作業は続いています。
PSTricks 2004 は Herbert Voss と Rolf Niepraschk がメンテナンスを行い、
PSTricks 2005 及び PSTricks 2006 は Herbert Voss が管理しています。
LPPL ライセンスにより配布されているため、著者の Zandt 以外の人間が
変更を加えた場合は、 ''PSTricks'' とは異なる名前に
改めなければならないはずですが、 Girou, Rahtz, Voss には、著者本人から、
例外として、自由な変更の許可が出ているようです。
// 上記の "例外として" という表現には違和感を覚えます。
//// LPPLの内容を十分に確かめずに書いた部分です。適切に書き換えて下さい。
> LPPL は2004年頃の LPPL 1.3 から「改変すると名前を変更する」という要請は
なされなくなっています。
PSTricks 97 のライセンスは「LPPL」とだけあって、
バージョンに関しては何も触れられていません。
(ですから 1.3 が当てはまるのかどうか愛昧です。)
PSTricks 2004 になって「LPPL 1.0 あるいはより新しいバージョン」と、
LPPL 1.3 が明示的に含まれるよう変更されたようです。
ですから、現在は誰でもそのままの名前で改変再配布できるように思われます。
(もちろんライセンス上の話であって、
コミュニティを混乱させるようなものはマナーとして控えるべきでしょう。)
多くの TeX 関連の配布物と同じく、LPPL というライセンスで配布されています。
> 以前の LPPL は、
配布物に変更を加えた場合は名前も変更するよう要請していましたので、
PSTricks のメンテナが交替したのにそのままの名前を使い続けていることを
不思議に思われる方がいらっしゃるかもしれません。
実は2004年頃の新しい LPPL 1.3 からはこの要請がなくなっています。
また PSTricks 97 では「LPPL」とだけ書いてあって
バージョンには触れられていなかったのですが、
PSTricks 2004 では「LPPL 1.0 またはそれ以降のバージョン」
を適用するよう文面が改められて、明らかに LPPL 1.3 が適用できるようになりました。
ですから、現在では誰でもそのままの名前で改変再配布できるようです。
(もちろんこれはライセンス上の話であって、
コミュニティを混乱させるようなやり方はマナーとして控えるべきでしょう。
PSTricks の場合も、新旧のメンテナの間で合意があったものと思われます。)
// 書き換えてみました。

//Girou による
//[[PSTricks:http://www.tug.org/applications/PSTricks/]]
//ホームページにはたくさんの例が載っています。
//このアドレスは現在 Voss のページに飛ばされます。
Web 上の資源については、 Voss による [[PSTricks:http://tug.org/PSTricks]] から
リンクをたどっていくのがよいでしょう。
LaTeX3 プロジェクトチームによる
The LaTeX Graphics Companion
(Michel Goossens, Sebastian Rahtz, Frank Mittelbach 著, Addison Wesley, 1997)
という本にも詳しい解説があります。
現在のバージョンについても、 2006 年 12 月刊行予定の改訂版に解説が載ります。

>邦訳『LaTeXグラフィックスコンパニオン』が出ました
(鷺谷好輝訳,ISBN4-7561-3461-0,本体5400円,アスキー)。

PSTricks は [[CTAN:graphics/pstricks/]] ディレクトリにあります。

以下では、 $TEXMFLOCAL は /usr/local/teTeX/share/texmf-local や $HOME/texmf
更には /usr/local/share/texmf 等に適宜読み替えて下さい。
パッケージのファイルには通常 *.tex (TeX マクロ本体)と*.sty (LaTeX 用ラッパ)
と*.pro (PostScriptヘッダ)がありますので、インストールは,
PSTricks 配布ディレクトリ中の generic ディレクトリの中身は,
 $TEXMFLOCAL/tex/generic/pstricks
というディレクトリを作ってその中に移動し,
PSTricks 配布ディレクトリ中の latex ディレクトリの中身は,
 $TEXMFLOCAL/tex/latex/pstricks
というディレクトリを作ってその中に移動し,
PSTricks 配布ディレクトリ中の dvips ディレクトリの中身は,
 $TEXMFLOCAL/dvips/pstricks
というディレクトリを作ってその中に移動します。
あとは必要に応じて contrib
の中の *.tex を
 $TEXMFLOCAL/tex/generic/pstricks
に,*.sty ファイルを
 $TEXMFLOCAL/tex/latex/pstricks
に,*.pro ファイルを
 $TEXMFLOCAL/dvips/pstricks
に入れます
(たとえば contrib/pst-poly の中身)。
//VTeX を使う場合は、すべて、$TEXMF/tex/generic/pstricksに入れる。
~*.dtx ファイルの扱いは通常の LaTeX 用パッケージと同じです。
同一パッケージに属する、 *.tex, *.sty, *.pro ファイルはすべて
同じバージョンを使用して下さい。異なるバージョンを混ぜて使用すると、
容易には理解できないトラブルの原因になる事があります。

2004 年 9 月 22 日以降のバージョンの PSTricks は xkeyval (pst-xkey) を
使用しています。できるだけ新しい xkeyval もインストールして下さい。
pst-xkey は xkeyval の内部マクロにアクセスするため、従来の pst-key を使用する
パッケージを後から、ロードすると、正しく処理されない事があります。
\usepackage の順序には気をつける必要があります。
PSTricks 関連のパッケージの場合、相互に必要なパッケージをロードするので、
xkeyval (pst-xkey) を使用するパッケージと
keyval (pst-key) を使用するパッケージが混在していると、
トラブルを解決できない事もあります。
2006 年中には、主要な PSTricks 関連のパッケージは xkeyval 対応になりましたが、
特別な理由が無い限り、 最新のパッケージか、2004 年以前のパッケージで、
すべてを固めた方が安全です。
xcolor もできるだけ新しいバージョンをインストールしてください。
現在の PSTricks に対応しているのは、 2005 年 10 月 15 日の xcolor v2.06 以降です。

最後に,システムによっては mktexlsr コマンドの実行が必要です。

基本的な使い方は,LaTeX2e ならプリアンブルで

 \usepackage[dvipsnames]{pstricks}

とします。さらに,特定の拡張機能を使うなら,
必要なファイルを \usepackage します。
''dvipsname'' は実は xcolor パッケージのオプションです。
PSTricks のコマンド自身のオプションを指定するには、
 \psline[linecolor=blue,linestyle=dotted,linewidth=1.6pt](-2,1.41421)(3,-1.73205)
と言ったように、 [  ] の中に、個別のコマンド毎に、指定するか、
 \psset{linecolor=blue,linestyle=dotted,linewidth=1.6pt}
と大域的に指定します。

まず、拡張機能を使うための、 PSTricks のコアとなるパッケージ群は

|''multido'' |ループマクロ|
|''pst-3d''|3次元射影|
|''pst-coil''|コイルとジグザグ|
|''pst-eps'' |EPS への変換|
|''pst-fill''|パターン・タイリング|
|''pst-grad''|色のグラディエント|
|''pst-node''|ノードとその接続|
|''pst-plot''|関数とデータのプロット|
|''pst-text''|文字をパスに沿わせる、文字のアウトラインをパスにする|
|''pst-tree''|樹形図|
|''pst-all'' |以上すべてを読み込む|

これらのいずれかを読み込めば,
\usepackage{pstricks} は省略できます。

次に、 PSTricks を利用するパッケージのうち、主要なものを挙げます。

|''pst-3dplot''|3次元空間での関数とデータのプロット|
|''pstricks-add''|pstricks/pst-node/pst-plot の実験的拡張機能|
|''pst-asr''|言語学、音声学|
|''pst-bar''|棒グラフ|
|''pst-barcode''|バーコード|
|''pst-blur''|ドロップ・シャドウ|
|''pst-calendar''|カレンダー|
|''pst-circ''|電気・電子回路|
|''pst-eucl''|幾何学作図、関数のグラフの交点計算|
|''pst-func''|特殊関数定義|
|''pst-geo''|地理データ|
|''pst-gr3d''|3次元格子|
|''pst-IIID''|3次元空間での曲面のレンダリング|
|''pst-jtree''|言語学、樹形図|
|''pst-labo''|化学実験器具|
|''pst-lens''|部分拡大図|
|''pst-light3d''|3次元空間での帯状曲面のレンダリング|
|''pst-optic''|光学|
|''pst-pdgr''|遺伝系統図|
|''pst-slpe''|色のグラディエント改良版|
|''pst-stru''|都市工学|
|''pst-V3D''|3次元空間での曲面のレンダリング|
|''pst-vue3d''|3次元射影|
|''uml''|UML図|

LaTeX2e 通常の graphics パッケージ集を使う場合は,
PSTricks の後にロードすれば,
同じ名前の命令は graphics パッケージの方が生きます。
PSTricks は xcolor を通じて、color を読み込むので、 (x)color
はロードしないで下さい。

***pspicture 環境 [#f54da89b]
PSTricks のグラフィック・オブジェクトは dvi ドライバが PostScript の
コマンドを処理して始めて目に見えるように描画可能になるのであって、
TeX から見た場合は、幅、高さ、深さ、いずれも 0 のボックスでしかありません。
ですから、テキスト中に \pscircle(0,0){4mm} などと直接書いたのでは、
文字と同じ位置に重ねて印刷されてしまいます。
そこで、通常、描画は、そのための専用の領域をボックスとして確保してから、
その中で行います。そのために用意されているのが、 pspicture 環境です。
 \begin{pspicture}(x,y)(X,Y)
 \end{pspicture}
これで、幅 |X − x| 、高さ |Y − y| 、深さ 0 のボックスが描画用に確保されます。
x, X, y, Y は整数でなくても構いません。単位を省略すると現在の unit が補われます。
この環境内には、 TeX はタイプセットしませんから、好きなように
グラフィック・オブジェクトを配置できます。 shift オプションを使うと、
 \begin{pspicture}[shift=r](x,y)(X,Y)
 \end{pspicture}
高さは r + |Y − y| に、深さは −r になります。

描画用に領域を確保したからと言って、その範囲にしか描画できない訳では
ありません。ところが、グラフをプロットする時など、これでは、
不便な時もあります。そのような時には、pspicture*環境を使って、
枠からはみ出す部分をクリップします。
以下の左右の図を比較してみて下さい。
 \documentclass{article}
 \usepackage{pstricks-add}
 \begin{document}
 $y=0.4x^{4}-2x^{2}+2x$のグラフの概形は
 \psset{unit=0.6}%単位がついていないと、現在の値 (1cm) に対する比率。
 \psset{algebraic=true, VarStep=true,VarStepEpsilon=0.001}
 \noindent\begin{pspicture}(-4,-6)(4,6)
 \psaxes[linewidth=1.2pt,labels=none,ticks=none]{->}(0,0)(-4,-6)(4,6)
 \psplot[linecolor=red]{-4}{4}{0.4*x^4-2*x^2+x}
 \uput[240](4,0){$x$}\uput[210](0,6){$y$}\uput[135]{$\mathrm{O}$}
 \end{pspicture}
 \hfill\begin{pspicture*}(-4,-6)(4,6)
 \psaxes[linewidth=1.2pt,labels=none,ticks=none]{->}(0,0)(-4,-6)(4,6)
 \psplot[linecolor=red]{-4}{4}{0.4*x^4-2*x^2+x}
 \uput[240](4,0){$x$}\uput[210](0,6){$y$}\uput[135](0,0){$\mathrm{O}$}
 \end{pspicture*}
 \end{document}
***\pscustom [#ld3ac648]
\pscustom を用いて、複数のグラフィック・オブジェクトを一つに連結できます。
これが特に有用なのは、塗りつぶしと、クリッピング・パスの設定です。
// 塗りつぶしと liftpen の解説が必要
 \documentclass{article}
 \usepackage[x11names]{pstricks}
 \begin{document}
 \psset{unit=0.6,linestyle=none}
 \noindent\begin{pspicture}(-4,-4)(4,4)
 \begin{psclip}{\pscircle(-2,0){3}\pscircle(2,0){3}}
 \psframe[fillstyle=vlines,hatchcolor=CadetBlue3](-4,-4)(4,4)
 \end{psclip}
 \end{pspicture}
 \hfill\begin{pspicture}(-4,-4)(4,4)
 \begin{psclip}{\pscustom{\pscircle(-2,0){3}\pscircle(2,0){3}}}
 \psframe[fillstyle=vlines,hatchcolor=DarkSeaGreen1](-4,-4)(4,4)
 \end{psclip}
 \end{pspicture}
 
 \vfill
 \noindent\begin{pspicture}(-4,-4)(4,4)
 \begin{psclip}{\psarc(0,0){2}{0}{360}\psarcn(0,0){4}{360}{0}}
 \psframe[fillstyle=vlines,hatchcolor=CadetBlue3](-4,-4)(4,4)
 \end{psclip}
 \end{pspicture}
 \hfill\begin{pspicture}(-4,-4)(4,4)
 \begin{psclip}{
   \pscustom{\psarc(0,0){2}{0}{360}\closepath\psarcn(0,0){4}{360}{0}\closepath}}
 \psframe[fillstyle=vlines,hatchcolor=DarkSeaGreen1](-4,-4)(4,4)
 \end{psclip}
 \end{pspicture}
 \end{document}
上左側の図では、二つの円を別個のクリッピング・パスとして指定しているので、
その共通部分しか見えません。一方、上右側では、二つの円が連結されて、
一つのクリッピング・パスになっているので、その和集合の内部が描画されます。
下図も同様です。同心円の向きを互い違いに設定している事にご注意下さい。
***ノード [#e1584503]
ノードを用いて、点に名前をつける事ができます。これらの点は、
直線や、曲線などで結んだり、他の点を定義する際の基準点として使えます。
ノードには、主に、テキスト中の要素に名前をつける
\rnode, \Rnode, \circlenode, \ovalnode, \dianode, \trinode などと、
(グラフィック中の)点に名前をつける
\pnode, \cnode, \Cnode, \cnodeput, \dotnode, \fnode などがあります。
テキスト中の要素に名前をつけるノード定義のうち、描画を伴う物は、
そのための枠を描くスペースが挿入されるため、文章の組が変化します。
それが、望ましくない時は、 boxsep=false にして下さい。

具体例として、まず。次の直角三角形の図を見て下さい。
 \documentclass{jarticle}
 \usepackage{pst-node}
 \begin{document}
 \begin{center}
 \begin{pspicture}(0,0)(5,4)
 \pspolygon(0,0)(5,4)(5,0)
 \pcline(0,0)(5,4)\ncput*[nrot=:U]{斜辺}
 \end{pspicture}
 \end{center}
 \end{document}
これをノードを用いて書き換えると、
 \documentclass{jarticle}
 \usepackage{pst-node}
 \begin{document}
 \begin{center}
 \begin{pspicture}(0,0)(5,4)
 \pnode(0,0){O}\pnode(5,4){A}\pnode(5,0){B}
 \SpecialCoor
 \pspolygon(O)(A)(B)
 \ncline{O}{A}\ncput*[nrot=:U]{斜辺}
 \end{pspicture}
 \end{center}
 \end{document}
となります。点の位置を取り換える必要が出て来た場合など、
変更箇所が一箇所で済む事が分かります。
このぐらいでは、あまり、ありがた味を感じないかも知れませんが、
点から斜辺に垂線を下ろそうとしたとすると、例えば、こうなります。
 \documentclass{jarticle}
 \usepackage{infix-RPN,pst-node}
 \begin{document}
 \begin{center}
 \begin{pspicture}(0,0)(5,4)
 \SpecialCoor
 \def\a{38.65981}
 \def\x{5}
 \infixtoRPN{\x *sin(\a)/cos(\a)}
 \pnode(0,0){O}\pnode(!\x\space\RPN){A}\pnode(A|O){B}
 \pspolygon(O)(A)(B)
 \ncline{O}{A}\ncput*[nrot=:U]{斜辺}
 \rput{\a}{\pnode(B|O){H}}
 \ncline[linestyle=dashed]{B}{H}\ncput*[nrot=:D]{垂線}
 \end{pspicture}
 \end{center}
 \end{document}
点の座標をすべて、直交座標で与えると、 \rput の引数の sanity check を外す
TeX のマクロ・テクニックや、 tx@NodeDic の内部構造に関する PostScript の知識が
必要になって来るため、ここでは、点 A を x 座標と偏角で与え、
点 B は x 座標が A と同じ、 y 座標が O と同じ点として、定義しています。
点 H は、座標軸を ∠BOA 回転した状態で、
x 座標が B と同じ、 y 座標が O と同じ点として、定義しています。
もし、点の座標をすべて具体的に与えるならば、回転や拡大・縮小によって、
座標系が変化する度に、同じ点でもその座標を計算し直さなければなりません。
点に名前をつけておけば、座標系が変わっても、何時でも同じ名前で参照できます。
いかがでしょうか? もっと複雑な作図をするのであれば、 pst-eucl を使用した方が良いでしょう。
***逆ポーランド式記法 [#lb61b314]
適当な計算式
#mimetex((x^{2}-x)2^{x(x+1)})
を例にします。この式は加法、減法、乗法、冪乗と言った、二項演算を
繰り返す事で、計算できますが、その手順を樹形図で表す事ができます。
 \documentclass{article}
 \usepackage{amssymb,pst-tree}
 \begin{document}
 \psset{levelsep=12mm}
 $
 \pstree{\Tdia{\times}}{
   \pstree{\Tdia{-}}{
     \pstree{\Tdia{\bigcirc^{\square}}}{
       \Tcircle{x}
       \Tcircle{2}}
     \Tcircle{x}}
   \pstree{\Tdia{\bigcirc^{\square}}}{
     \Tcircle{2}
     \pstree{\Tdia{\times}}{
       \Tcircle{x}{
       \pstree{\Tdia{+}}{
         \Tcircle{x}
         \Tcircle{1}}}}}}
 $
 \end{document}
そこで、二変数の関数
#mimetex(f_{\mathrm{add}}[x,y]=x+y)
#mimetex(f_{\mathrm{exp}}[x,y]=x^{y})
#mimetex(f_{\mathrm{mul}}[x,y]=xy)
#mimetex(f_{\mathrm{sub}}[x,y]=x-y)
を定義してやると、この計算式は
#mimetex(f_{\mathrm{mul}}[f_{\mathrm{sub}}[f_{\mathrm{exp}}[x,2],x],f_{\mathrm{exp}}[2,f_{\mathrm{mul}}[x,f_{\mathrm{add}}[x,1]]]])
と、計算の優先順位を示す ( ) を使わずに、表されます。ここで、更に、関数を
引数を並べた右側に置く記法を使うと、
 x 2 exp x sub 2 x x 1 add mul exp mul
と書き表される事になります。
これを''逆ポーランド式記法 (Reverse Polish Notation)'' と呼びます。
逆ポーランド式記法で表記された数式は、後入先出の1次元記憶領域さえあれば、
容易に処理できるため、計算機の実装には良く使われます。
実際、これが、 PostScript が理解できる、計算式の表記法です。
そこで、
 \documentclass{jarticle}
 \usepackage{pst-plot}
 \begin{document}
 \psset{plotstyle=curve,plotpoints=100}
 \noindent\begin{pspicture*}(-2,-2)(2,6)
 \psaxes[linewidth=1.2pt,labels=none,ticks=none]{->}(0,0)(-2,-2)(2,6)
 \psplot[linecolor=red]{-2}{2}{x 2 exp x sub 2 x x 1 add mul exp mul}
 \end{pspicture*}
 \end{document}
で、グラフがプロットできます。とは言え、人間が数式を逆ポーランド式記法で
入力するのでは、大変ですし、誤りも起きやすいので、入力支援が必要になります。
それには、 infix-RPN パッケージを使い TeX に処理させる方法と、
pstricks-add パッケージの algebraic オプションを使い PostScript に処理させる
方法があります。
TeX に処理させるには、 \usepackage{infix-RPN} とプリアンブルに追加し、
\infixtoRPN の引数に infix notation の数式を与えます。すると、 \RPN マクロの
内容が逆ポーランド式記法の数式になります。
 \documentclass{jarticle}
 \usepackage{infix-RPN}
 \begin{document}
 \infixtoRPN{(x^2-x)*2^(x*(x+1))}\RPN
 \end{document}
もちろん、 \RPN は \psplot の最後の引数にそのまま使えます。
三角関数を扱う時には、 PostScript では角度を度数法で測る事に
注意しなければなりません。例えば、
#mimetex(z=\frac{2\cos\left(x^{2}-y^{2}\right)}{x^{2}+y^{2}+1})
をプロットするには
 \documentclass{jarticle}
 \usepackage{infix-RPN,pst-3dplot}
 \begin{document}
 \psset{xPlotpoints=50,yPlotpoints=50,hiddenLine=true,plotstyle=curve}
 %\infixtoRPN{2*cos(x^2-y^2)/(x^2+y^2+1)} <--- これは誤り
 \infixtoRPN{2*cos(57.29578*(x^2-y^2))/(x^2+y^2+1)}
 \begin{pspicture}(-6,-6)(6,6)
 \psplotThreeD[linecolor=blue](-5,5)(-5,5){\RPN}
 \end{pspicture}
 \end{document}
\parametricplot にはもちろん、 \edef を使えば良いです。
 \documentclass{jarticle}
 \usepackage{infix-RPN,pst-3dplot}
 \begin{document}
 \psset{xPlotpoints=50,yPlotpoints=50,hiddenLine=true,plotstyle=curve}
 \infixtoRPN{1.5*cos(3*57.29578*t)}\edef\xComp{\RPN}
 \infixtoRPN{1.5*sin(5*57.29578*t)}\edef\yComp{\RPN}
 \infixtoRPN{0.5*sin(2*57.29578*t)}\edef\zComp{\RPN}
 \begin{pspicture}(-2,-2)(2,2)
 \parametricplotThreeD[linecolor=blue](-3.14159,3.14159)%
   {\xComp\space\yComp\space\zComp}
 \end{pspicture}
 \end{document}
PostScript に処理させるには、 \usepackage{pstricks-add} とプリアンブルに追加し、
algebraic オプションの値を true にします。
 \documentclass{jarticle}
 \usepackage{pstricks-add}
 \begin{document}
 \psset{plotstyle=curve,plotpoints=100}
 \noindent\begin{pspicture*}(-2,-2)(2,6)
 \psaxes[linewidth=1.2pt,labels=none,ticks=none]{->}(0,0)(-2,-2)(2,6)
 \psplot[algebraic=true,linecolor=red]{-2}{2}{(x^2-x)*2^(x*(x+1))}
 \end{pspicture*}
 \end{document}
algebraic=true の時は、角度は弧度法で測ります。 \parametricplot では、
x 成分と y 成分は | で区切ります。
 \documentclass{jarticle}
 \usepackage{pstricks-add}
 \begin{document}
 \psset{plotstyle=curve,plotpoints=100}
 \noindent\begin{pspicture*}(-1.25,-1.25)(1.25,1.25)
 \parametricplot[algebraic=true,linecolor=red]{-3.14159}{3.14159}{cos(3*t)|sin(7*t)}
 \end{pspicture*}
 \end{document}
***例(1) [#vb5fe04c]
以下はごく簡単な例です。
 \documentclass[svgnames]{article}
 \usepackage{multido,pst-slpe,pst-eucl}
 \pagestyle{empty}
 \parindent=0pt
 \psset{unit=0.35,linestyle=none,PointSymbol=none,PointName=none}
 \psset{fillstyle=slope,slopebegin=SkyBlue,slopeend=Tomato}
 \begin{document}
 \begin{pspicture}(-12,-12)(12,12)
 \rput(1,2){
 \pstGeonode(0,0){O}(1;0){S_0}(1;120){S_1}(1;240){S_2}(1;0){S_3}
 \pstGeonode(-3,0){X_0}
 \pstTranslation[DistCoef=4]{S_1}{S_2}{X_0}[A_0]
 \pstTranslation{O}{S_2}{A_0}[B_0]
 \pstTranslation{S_1}{S_2}{B_0}[C_0]
 \pstTranslation{O}{S_0}{C_0}[D_0]
 \multido{\ia=0+1,\ib=1+1}{4}{
   \pstRotation[RotAngle=120]{X_0}{A_\ia,B_\ia,C_\ia,D_\ia}[A_\ib,B_\ib,C_\ib,D_\ib]}
 \multido{\ia=0+1,\ib=5+1}{10}{
   \pstRotation[RotAngle=120]{O}{A_\ia,B_\ia,C_\ia,D_\ia}[A_\ib,B_\ib,C_\ib,D_\ib]}
 \begin{psclip}{\pscustom[fillstyle=none]{\pscircle(0,0){16}
   \pspolygon(D_7)(C_7)(D_6)(C_6)(D_5)(C_5)
   \pspolygon(A_5)(A_6)(A_7)}}
 \multido{\ia=0+1,\ib=1+1,\ic=2+1,\id=30+120}{3}{
   \pspolygon[slopeangle=\id](A_\ic)(B_\ic)(C_\ib)(D_\ia)(C_\ia)(B_\ib)}
 \end{psclip}
 \begin{psclip}{\pscustom[fillstyle=none]{\pscircle(0,0){16}
   \pspolygon(D_12)(C_12)(D_11)(C_11)(D_10)(C_10)
   \pspolygon(A_10)(A_11)(A_12)}}
 \multido{\ia=5+1,\ib=6+1,\ic=7+1,\id=150+120}{3}{
   \pspolygon[slopeangle=\id](A_\ic)(B_\ic)(C_\ib)(D_\ia)(C_\ia)(B_\ib)}
 \end{psclip}
 \begin{psclip}{\pscustom[fillstyle=none]{\pscircle(0,0){16}
   \pspolygon(D_2)(C_2)(D_1)(C_1)(D_0)(C_0)
   \pspolygon(A_0)(A_1)(A_2)}}
 \multido{\ia=10+1,\ib=11+1,\ic=12+1,\id=270+120}{3}{
   \pspolygon[slopeangle=\id](A_\ic)(B_\ic)(C_\ib)(D_\ia)(C_\ia)(B_\ib)}
 \end{psclip}}
 \end{pspicture}\hfill
 \psset{unit=0.75}
 \begin{pspicture}(-16,-16)(16,16)
 \rput(0,0){
 \pstGeonode(0,0){O}(1;0){S_0}(1;120){S_1}(1;240){S_2}(1;0){S_3}
 \pstTranslation[DistCoef=7.5]{S_1}{S_2}{O}[A_0]
 \pstTranslation{O}{S_2}{A_0}[B_0]
 \pstTranslation{S_1}{S_2}{B_0}[C_0]
 \pstTranslation{O}{S_0}{C_0}[D_0]
 \multido{\ia=0+1,\ib=1+1}{4}{%
   \pstRotation[RotAngle=120]{O}{A_\ia,B_\ia,C_\ia,D_\ia}[A_\ib,B_\ib,C_\ib,D_\ib]}
 \multido{\ia=0+1,\ib=5+1}{10}{%
   \pstRotation[RotAngle=40]{O}{A_\ia,B_\ia,C_\ia,D_\ia}[A_\ib,B_\ib,C_\ib,D_\ib]}
 \begin{psclip}{\pscustom[fillstyle=none]{\pscircle(0,0){20}
   \pspolygon(D_7)(C_7)(D_6)(C_6)(D_5)(C_5)
   \pspolygon(A_5)(A_6)(A_7)}}
 \multido{\ia=0+1,\ib=1+1,\ic=2+1,\id=30+120}{3}{
   \pspolygon[slopeangle=\id](A_\ic)(B_\ic)(C_\ib)(D_\ia)(C_\ia)(B_\ib)}
 \end{psclip}
 \begin{psclip}{\pscustom[fillstyle=none]{\pscircle(0,0){20}
   \pspolygon(D_12)(C_12)(D_11)(C_11)(D_10)(C_10)
   \pspolygon(A_10)(A_11)(A_12)}}
 \multido{\ia=5+1,\ib=6+1,\ic=7+1,\id=70+120}{3}{
   \pspolygon[slopeangle=\id](A_\ic)(B_\ic)(C_\ib)(D_\ia)(C_\ia)(B_\ib)}
 \end{psclip}
 \begin{psclip}{\pscustom[fillstyle=none]{\pscircle(0,0){20}
   \pspolygon(D_2)(C_2)(D_1)(C_1)(D_0)(C_0)
   \pspolygon(A_0)(A_1)(A_2)}}
 \multido{\ia=10+1,\ib=11+1,\ic=12+1,\id=110+120}{3}{
   \pspolygon[slopeangle=\id](A_\ic)(B_\ic)(C_\ib)(D_\ia)(C_\ia)(B_\ib)}
 \end{psclip}}
 \end{pspicture}
 \end{document}
3-Brunnian link を 2 種類程、書いてみた物です。
左側の物は、所謂、ボロメオの輪 (Boromean rings) です。
既に説明したテクニック以外何も使っていないので、すぐに理解できると思います。
 \documentclass[dvipsnames]{article}
 \usepackage{geometry,pst-plot,pst-eucl}
 \geometry{margin=0pt,paperwidth=10cm,paperheight=10cm}
 \parindent=0pt\pagestyle{empty}
 \begin{document}
 \psset{unit=4cm,plotpoints=200}
 \expandafter\def\csname T0\endcsname{1}
 \expandafter\def\csname T1\endcsname{x}
 \multido{\ia=0+1,\ib=1+1,\ic=2+1}{5}{%
 \expandafter\xdef\csname T\ic\endcsname{2 x \csname T\ib\endcsname\space
   mul mul \csname T\ia\endcsname\space sub}
 \begin{pspicture*}(-1.25,-1.25)(1.25,1.25)
 %\rput[lt](-1.25,1.25){\ic 次のChebyshev多項式とその零点}
 \psaxes{->}(0,0)(-1.25,-1.25)(1.25,1.25)
 \pstGeonode[PointName=none,PointSymbol=none](0,0){O}(1,0){X}(0,1){Y}
 \psplot[linecolor=red]{-1.25}{1.25}{\csname T\ic\endcsname}
 \psset{PointSymbol=o}
 \multido{\I=1+1}{\ic}{
   \pstInterFL[linecolor=red]{\csname T\ic\endcsname}{O}{X}%
     {2 \I\space 1 sub mul \ib\space div 1 sub}{C_\I}
   \pstTranslation[PointName=none,PointSymbol=none]{O}{Y}{C_\I}
   \pstLineAB[linecolor=yellow,linestyle=dashed,nodesepA=-1]{C_\I}{C_\I'}}
 \pstCircleOA[linecolor=blue]{O}{Y}
 \multido{\I=1+1}{\ic}{
   \pstInterLC[linecolor=blue]{C_\I}{C_\I'}{O}{Y}{D_\I}{E_\I}
   \pstLineAB[linecolor=yellow,linestyle=dotted]{O}{D_\I}
   \pstLineAB[linecolor=yellow,linestyle=dotted]{O}{E_\I}}
 \end{pspicture*}\clearpage}
 \end{document}
これは、次数の低い Chebyshev 多項式の零点を図示する物です。
まず、 Chebyshev 多項式を漸化式
#mimetex(T_{0}(x)=1)
#mimetex(T_{1}(x)=x)
#mimetex(T_{n+2}(x)=2xT_{n+1}(x)-T_{n}(x))
で定義します。 &mimetex(T_{n}(x)); をプロットし、 &mimetex(k=1,\ldots,n);
に対し、このグラフと x 軸の交点のうち、 &mimetex(x=\frac{2(k-1)}{n}-1);
の近傍にあるものを求め、 &mimetex(C_{k}); と名付けます。 &mimetex(n); が
小さければ、これで、すべての零点が、洩れも重複もなく、求まります。
&mimetex(n); が大きい時は、この場合、正確な値 &mimetex(-\cos\frac{(2k-1)\pi}{n});
が分かっている訳ですから、それを第一近似として与えてやれば良いでしょう。
さて、 &mimetex(C_{k}); を y 軸方向に 1 平行移動した点を &mimetex(C^{\prime}_{k});
と名付けます。原点を中心として半径 1 の円を描き、その円と直線
&mimetex(C_{k}C^{\prime}_{k}); の交点を &mimetex(D_{k});, &mimetex(E_{k}); と名付けます。
***例(2) [#ye01953c]
PostScript は PDF や SVG と言った、静的なページ記述言語とは異なり、
動的なプログラミング言語です。これを TeX と組み合わせる事により、
数値計算などの、 TeX 自身の苦手な処理を担わせ、多彩なグラフィックを
その場で動的に生成する事ができます。
pst-text パッケージの pstextpath は、 PostScript 言語のテキスト描画ルーティンを
再実装して実現されていますし、既に見たように、 pst-eucl パッケージは
Newton-Raphson 法により、方程式の実数解の近似値を計算してくれます。
ここでは、 pstricks-add パッケージのダイナミックな側面を使った例を紹介します。

// 少なくとも、数値積分による、常微分方程式の解曲線の描画例を挙げる必要あり
// どなたか、見栄えのする積分曲線を持った常微分方程式の例を挙げて下さいませんか?
// 作図は私でやってみます。

ともかく、書きかけ。
**実際に'''使える'''画像ファイルを作るには [#d57cdc19]
独立の EPS を作るためには,PSTricks の中の pst-eps
パッケージの PSTtoEPS という命令を使います。
ただし,これを使うと図中に文字を書き込む命令 \rput
などが使えなくなります。
文字を含む EPS を作るには,PSTtoEPS を使わず,
いったん dvi ファイルにしておいて,
dvips の -E オプションを使う方法しかないようです。
しかし,これではバウンディングボックス情報が正しく入らないため,
後で EPS ファイルを編集する必要があり,面倒です。

そこで PSTtoEPS や dvips の -E オプションを使わずに PSTricks の PDF 変換の
ためのマクロ pstpdfmx を作りました.目標は dvipdfm(x) を使って PSTricks の
図をPDFで取り込み,完全なPDFを作成することです.まずは『丸ごとパック &ref(pstpsrc.tgz);を
ダウンロードしてください (Unix 系 OS 専用です,要 bash/Make/gcc).
これを使うとデバイスドライバに dvipdfm(x)を使って PSTricks のある程度のマクロを
使えるようになります.使い方はmakeするだけです.個別にPDFファイルを作成するには
 ./genpdf.sh filename
とします.

:丸ごとパック &ref(pstpsrc.tgz);| pstpdfmx, bbb, genpdf.sh 等がすべて含まれています.
:pstpdfmx の解説 &ref(pstpdfmx.pdf);| pstpdfmx パッケージの説明書.
:出力例 &ref(p2p.pdf);| 実際に pstpdfmx, genpdf.sh, bbb, Make を使って作成した PDF.

原稿中の PSTricks による図を一度別ファイル fig.tex に書き出し,そのファイルを
次のように処理します.
 platex fig.tex
 pdvips -Ppdf -o fig.ps fig.dvi
 epstopdf fig.ps fig.pdf
 gs -sDEVICE=pbm -fig.ps -sOutputFile=fig.pbm
 bbb < fig.pbm > fib.bb
上記の作業 genpdf.sh が図の数だけ自動的に行います.そうすると正しいバウンディングボックス
情報 fig.bb と,PSTricks 画像から PDF に変換したファイル fig.pdf ができます.元原稿では
ファイル fig.pdf が存在する時だけ fig.pdf を読み込むようにしています.

上記の PDF を生成するスクリプトは genpdf.sh というファイルにまとめています.
すると完全な PDF ファイル file.pdf は次のように作ることになります.
 platex file
 ./genpdf.sh file
 platex file
 dvipdfmx file
dvips にこのマクロを流用するには 1 行か 2 行の修正で済みます (デバイスドライバに
dvips を指定し, genpdf.sh の中で fig.ps の BoundingBox を awk/perl で
プログラム bbb が出力した正しいものに置換するだけです).しかし、やはり大変面倒です. 
pdfLaTeX などが日本語化されれば pdftricks や ps4pdf などのパッケージが使える
ようになるでしょう.いずれにしても pdfTeX/pdfLaTeX で日本語が使
えるようになるまでは,このような面倒な処理が必要になると思います.

**実際に'''使える'''画像ファイルを作るには (別解) [#cddb53cd]

gs/gs[VER]/lib/ps2epsi.bat を使うことで,かなりよい BoundingBox を得ることができるように思います.

 #!/usr/bin/ruby -w
 open(ARGV[0],"r").each_line{|line|;if line =~ /%%BoundingBox/; print line; break; end;}

のような ruby のスクリプト (perl でも何でもいいと思うけど) bb (パーミッションにフラグ x を立てておく) と,

 IMGSRCS = fig.tex
 TEX    = platex
 DVIPS  = dvipsk
 PS2EPS = ps2epsi.bat
 PS2PDF = epstopdf -d --nogs
 BB     = ./bb
 all    : $(IMGSRCS:.tex=.pdf) $(IMGSRCS:.tex=.bb) $(IMGSRCS:.tex=.eps)
 .tex.dvi:
 	$(TEX) $<
 
 .dvi.pdf:
 	$(DVIPS) -Ppdf -z $<
 	$(PS2EPS) $*.ps $*.eps
 	$(PS2PDF) --outfile=$*.pdf $*.eps
 
 .pdf.bb:
 	$(BB) $*.pdf > $*.bb
 
 .dvi.eps:
 	$(DVIPS) -D600 -z $<
 	$(PS2EPS) $*.ps $*.eps

のような Makefile を作れば,make を実行することでまともな BoundingBox を持った (表した) fig.pdf, fig.bb, fig.eps を得ることができるように思います.[''追記'': '''しかし,これでも少し小さめに BoundingBox が測られるように思います.GSView の [File] -> [PS to EPS] で変換したときくらいの BoundingBox を持った矩形を切り出したいのですが,手作業をいれずにできる方法を誰かご存じないでしょうか?''']

強引に,でもよければ,ghostscript を用いて BoundingBox を得て,それを eps ファイルに入れ込むシェルスクリプトを [[ここ>http://www.misojiro.t.u-tokyo.ac.jp/suribt/#tips_boundingbox]] に載せましたので,どうぞ.

**実際に'''使える'''画像ファイルを作るには (別解2) [#r5c8eeee]

[[epstool>http://www.cs.wisc.edu/~ghost/gsview/epstool.htm]] を使うと,
よい BoundingBox を得ることができます.
PSTricks で描く図だけを別ファイル foo.tex に保存して,
 $ (p)latex foo
 $ (p)dvips(k) -E foo
 $ epstool --copy --bbox foo.ps foo.eps
などとします.さらに
 $ epstopdf foo.eps foo.pdf
 $ ebb foo.pdf
としておけば,pdflatex, dvipdfmx, dvips などいろいろなドライバで共通に使える画像
セットになります.

[[Herbert Voss 2006-10-10 の文書>http://www.perce.de/LaTeX/misc/PST2PDF]] でも epstopdf を使っているみたいです.
// 上に例で挙げた Chebyshev 多項式の零点の図のように、ソースにサイズを
// 書き込んでしまうのでは、解答になりませんか?
//// pspicture 環境の (x,y)(X,Y) でですか?
//// その指定では,その枠内ぴったりに図を描くようにがんばらないといけませんよね?
//// アルファベットの `O' 1 文字だけを描いた図でもそれをやろうとすると,
//// 文字の太さとかを考えないと,きちんと BoundingBox の中にぴったり収めることは
//// 神技に近いです.BoundingBox は,図を描くときに手で指定するのではなく,
//// できあがった図から事後処理で補正できる方が reasonable だと思います.