summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-node
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-02-11 23:45:54 +0000
committerKarl Berry <karl@freefriends.org>2010-02-11 23:45:54 +0000
commit9115f9eea3dcb0f57b18a8d194014fd07c282943 (patch)
treeaf7eb1b9e0037737bede0e51c07955da3b076926 /Master/texmf-dist/doc/generic/pst-node
parent3dbd66bd0cf74958b0d4f7fef75425aeceff0345 (diff)
new pstricks package pst-node 1.10 (11feb10)
git-svn-id: svn://tug.org/texlive/trunk@16970 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-node')
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/Changes15
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/README15
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/index.phtml61
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/pst-node-doc.bib60
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/pst-node-doc.pdfbin0 -> 416702 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex942
6 files changed, 1093 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-node/Changes b/Master/texmf-dist/doc/generic/pst-node/Changes
new file mode 100644
index 00000000000..7013b2d5897
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/Changes
@@ -0,0 +1,15 @@
+----- pst-node.tex
+1.10 2010-01-22 - first version with pst-xkey and an own
+ documentation (hv)
+1.02 2009-12-09 - fixed bug with \hskip and fnode in psmatrix
+ which now uses \pshspace#1 for \hskip
+1.01 2008-11-26 - bugfix for \fnode
+1.00 2007-08-18 - new option pcRef for the first node (hv)
+ - new option Circle for psmatrix (hv)
+ - fix bug with pst-node and \\[name=...]. It now uses
+ \ps@ifnextchar for scanning the next token (defined
+ in pstricks.tex)
+
+----- pst-node.sty
+ 2008-12-12 first version (hv)
+
diff --git a/Master/texmf-dist/doc/generic/pst-node/README b/Master/texmf-dist/doc/generic/pst-node/README
new file mode 100644
index 00000000000..621345ddfeb
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/README
@@ -0,0 +1,15 @@
+This version of pst-node uses the xkeyval package, the extended
+version of keyval.
+
+Save the files pst-node.sty|.tex|.pro in a directory, which is part of your
+local TeX node. Then do not forget to run texhash to update this node
+if these packages are new to your TeX distribution.
+For more information see the documentation of your LaTeX distribution
+on installing packages into your LaTeX distribution or the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+pst-node needs pstricks, which should be part of your
+local TeX installation, otherwise get it from a CTAN server, f.ex.
+http://www.dante.de/CTAN/graphics/pstricks/
+
diff --git a/Master/texmf-dist/doc/generic/pst-node/index.phtml b/Master/texmf-dist/doc/generic/pst-node/index.phtml
new file mode 100644
index 00000000000..3c72dd01044
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/index.phtml
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html><head>
+<html>
+<head>
+ <title>The PSTricks web page (Herbert Vo&szlig;)</title>
+</head>
+<body bgcolor="#ffffff" text="#000000" link="#aa0000" alink="#ff3300" vlink="#330099">
+ <hr noshade="noshade">
+ <h1>pstricks by Timothy Van Zandt, Denis Girou and Herbert Vo&szlig;</h1>
+ <h4>All the files have a <strong>Beta-Status</strong>! For a stable
+ version look at <a href="http://mirror.ctan.org/graphics/pstricks/contrib/pst-node">here</a></h4>
+
+ <hr noshade="noshade">
+ <div class=text>
+<?
+$cdir = dir("./");
+
+$entries=array();
+while ($entry = $cdir->read())
+ $entries[] = $entry;
+
+echo "Files in this directory:";
+echo " <hr noshade=\"noshade\">";
+echo "<table>";
+
+asort($entries);
+reset($entries);
+
+//foreach($entries as $entry) {
+while (list(, $entry) = each($entries)) {
+// if (!is_dir($entry) && ($entry != "index.phtml") && ($entry != ".htaccess")) {
+ if (($entry != ".") && ($entry != "index.phtml") && ($entry != ".htaccess")) {
+ echo "<tr>";
+ echo "<td><a href=\"$entry\">$entry</a></td>";
+ if (is_dir($entry))
+ echo "<td>&lt;Dir&gt;</td>";
+ else
+ echo "<td></td>";
+ echo "<td align=\"right\">&nbsp;".filesize($entry)." Byte&nbsp;</td>";
+ echo "<td align=\"right\">&nbsp;".date("D, j F Y, H:i:s",filemtime($entry))."&nbsp;</td>";
+ echo "</tr>";
+ }
+}
+echo "</table>";
+
+?>
+<hr noshade="noshade">
+Page last updated on <?php echo date("d.m.Y", getlastmod() ); ?>
+</p>
+</div>
+<hr>
+<?
+if (file_exists("README")) {
+ $fp = fopen("README","r");
+ while ($line=fgets($fp,1000)) {
+ echo "$line<br>";
+ }
+ fclose($fp);
+}
+?>
+</body>
+</html>
diff --git a/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.bib b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.bib
new file mode 100644
index 00000000000..ba07f2211ce
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.bib
@@ -0,0 +1,60 @@
+%% -*-bibtex-*-
+@STRING{tugboat = {TUGboat} }
+@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} }
+
+@Book{companion,
+ author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Dennis Roegel and Herbert Vo\ss},
+ title = {The {\LaTeX} {G}raphics {C}ompanion},
+ publisher = {{Addison-Wesley Publishing Company}},
+ edition = {second},
+ year = {2007},
+ address = {Boston, Mass.}
+}
+
+@Article{girou:01:,
+ author = {Denis Girou},
+ title = {Pr\'esentation de {PST}ricks},
+ journal = {Cahier {GUT}enberg},
+ year = 1994,
+ volume = {16},
+ month = apr,
+ pages = {21-70}
+}
+
+@Article{girou:02:,
+ author = {{Timothy Van} Zandt and Denis Girou},
+ title = {Inside {PST}ricks},
+ journal = TUGboat,
+ year = 1994,
+ volume = {15},
+ month = sep,
+ pages = {239-246}
+}
+
+@Book{PostScript,
+ Author = {Kollock, Nikolai G.},
+ Title = {Post{S}cript richtig eingesetzt: vom {K}onzept zum
+ praktischen {E}insatz},
+ Publisher = {IWT},
+ Address = {Vaterstetten},
+ year = 1989,
+}
+
+@Manual{multido,
+ Title = {\texttt{multido.tex} - a loop macro, that supports fixed-point addition},
+ Author = {{Timothy Van} Zandt},
+ Organization = {},
+ Address = {\url{CTAN:/macros/generic/multido.tex}},
+ Note = {},
+ year = 1997
+}
+
+@Book{PSTricks2,
+ author = {Herbert Vo\ss{}},
+ title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX},
+ edition = {fifth},
+ publisher = {DANTE -- Lehmanns},
+ year = {2008},
+ address = {Heidelberg/Hamburg}
+}
+
diff --git a/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.pdf b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.pdf
new file mode 100644
index 00000000000..6c2be6391a7
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex
new file mode 100644
index 00000000000..71e00c1f319
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex
@@ -0,0 +1,942 @@
+%% $Id: pst-node-doc.tex 263 2010-01-22 11:13:25Z herbert $
+\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings
+ headexclude,footexclude,oneside]{pst-doc}
+\listfiles
+
+\usepackage[utf8]{inputenc}
+\usepackage{pst-plot}
+\usepackage{pst-node}
+\let\pstFV\fileversion
+\let\belowcaptionskip\abovecaptionskip
+%
+\newcommand\xstrut{\vphantom{\tabular{c}Üg\\Üg\endtabular}}
+\newcommand\psBox[3][white]{\rput(#2){\rnode{#2}{%
+ \psframebox[fillcolor=#1]{\xstrut\makebox[3.2cm]{\tabular{c}#3\endtabular}}}}}
+\def\bgImage{%
+\psscalebox{0.85}{%
+\begin{pspicture}(-1,-1)(21,7)
+\psset{framearc=0.2,shadow=true,fillstyle=solid,shadowcolor=black!55}
+\psBox[blue!30]{7,6}{politische\\Kommunikation}
+\psBox[red!30]{3,4}{interpersonale\\Kommunikation}
+ \psBox[red!30]{13,4}{massenmediale\\Kommunikation}
+\psBox[green!30]{1,2}{starke\\Beziehung}
+ \psBox[green!30]{5,2}{schwache\\Beziehung}
+ \psBox[green!30]{9,2}{Fernsehen}
+ \psBox[green!30]{17,2}{Zeitungen}
+\psBox[cyan!30]{7,0}{öffentlich-rechtl.\\Fernsehen}
+ \psBox[cyan!30]{11,0}{privates\\Fernsehen}
+ \psBox[cyan!30]{15,0}{Boulevard-\\Zeitungen}
+ \psBox[cyan!30]{19,0}{Abonnement-\\Zeitungen}
+\end{pspicture}
+\psset{shadow=false,angleA=-90,angleB=90,linewidth=2pt}
+\ncangles{7,6}{3,4}\ncangles{7,6}{13,4}
+\ncangles{3,4}{1,2}\ncangles{3,4}{5,2}
+\ncangles{13,4}{9,2}\ncangles{13,4}{17,2}
+\ncangles{9,2}{7,0}\ncangles{9,2}{11,0}
+\ncangles{17,2}{15,0}\ncangles{17,2}{19,0}}
+}
+
+\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}}
+
+\begin{document}
+\title{\texttt{pst-node}\\Nodes and node connections%
+\\\small v.\pstFV}
+\docauthor{Michael Sharpe\\Herbert Vo\ss}
+\author{Timothy Van Zandt\\Michael Sharpe\\Herbert Vo\ss}
+\date{\today}
+
+\maketitle
+
+\begin{abstract}
+This version of \LPack{pst-node} uses the extended keyval handling
+of pst-xkey and has a lot of the macros which were recently in
+the package \LPack{pstricks-add}. This documentation describes in the first part
+the basic node commands and connection from the old PSTricks documentation.
+The second part describes only the
+new and changed stuff. .
+
+\vfill
+\noindent
+Thanks to: Denis Girou; Rolf Niepraschk; Sebastian Rahtz;
+\end{abstract}
+
+\clearpage
+\tableofcontents
+
+\clearpage
+\part{Basic commands, connections and labels}
+
+\clearpage
+\setcounter{page}{31}
+\part{New commands}
+%--------------------------------------------------------------------------------------
+\section{Relative nodes with \nxLcs{psGetNodeCenter}}
+%--------------------------------------------------------------------------------------
+
+\begin{BDef}
+\Lcs{psGetNodeCenter}\Largb{node name}\\
+%\Lcs{psGetNodeEdgeA}\Largb{node type}\Largb{node name}
+\end{BDef}
+
+This command makes sense only at
+the PostScript level. It defines the two variables \Larg{node.x}
+and \Larg{node.y} which can be used to define relative nodes. The
+following example defines the node \verb+MyNode+ and a second one
+relative to the first one, with 4 units left and 4 units up.
+\Larg{node} must be an existing node name.
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[showgrid=true,arrowscale=2](5,5)
+\pnode(4.5,0.5){MyNode}
+\psdot(MyNode)
+\pnode(! \psGetNodeCenter{MyNode}
+ MyNode.x 4 sub MyNode.y 4 add){MySecondNode}
+\psdot(MySecondNode)
+\ncline[linecolor=red]{<->}{MyNode}{MySecondNode}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[showgrid=true](5,5)
+\rput(1.5,0.5){\trinode{CN}{NodeA}}
+\rput(3.5,2.5){\trinode{EN}{NodeB}}
+\pnode(! \psGetNodeCenter{CN}
+ CN.x 2 add CN.y 1 add ){MyCNode}
+\ncline[linecolor=red]{<->}{MyCNode}{EN}
+\ncline[linecolor=blue]{<->}{CN}{EN}
+\end{pspicture}
+\end{LTXexample}
+
+%--------------------------------------------------------------------------------------
+\section{\nxLcs{ncdiag} and \nxLcs{pcdiag}}
+%--------------------------------------------------------------------------------------
+With the new option \Lkeyword{lineAngle} the lines drawn by the \Lcs{ncdiag} macro
+can now have a specified gradient. Without this option one has to define the two
+arms (which maybe zero) and PSTricks draws the connection between them. Now there
+is only a static \Lkeyword{armA}, the second one \Lkeyword{armB} is calculated when an angle
+\Lkeyword{lineAngle} is defined. This angle is the gradient of the intermediate line
+between the two arms. The syntax of \Lcs{ncdiag} is
+
+\begin{BDef}
+\Lcs{ncdiag}\OptArgs\Largb{node A}\Largb{node B}\\
+\Lcs{pcdiag}\OptArgs\Largs{node A}\Largs{node B}
+\end{BDef}
+
+
+\begin{tabularx}{\linewidth}{l|X}
+name & meaning\\\hline
+\Lkeyword{lineAngle} & angle of the intermediate line segment. Default is 0, which is the same
+than using \Lcs{ncdiag} without the \Lkeyword{lineAngle} option.\tabularnewline
+\end{tabularx}
+
+
+\begin{LTXexample}[width=5.5cm]
+\begin{pspicture}(5,6)
+ \circlenode{A}{A}\quad\circlenode{C}{C}%
+ \quad\circlenode{E}{E}
+ \rput(0,4){\circlenode{B}{B}}
+ \rput(1,5){\circlenode{D}{D}}
+ \rput(2,6){\circlenode{F}{F}}
+ \psset{arrowscale=2,linearc=0.2,%
+ linecolor=red,armA=0.5, angleA=90,angleB=-90}
+ \ncdiag[lineAngle=20]{->}{A}{B}
+ \ncput*[nrot=:U]{line I}
+ \ncdiag[lineAngle=20]{->}{C}{D}
+ \ncput*[nrot=:U]{line II}
+ \ncdiag[lineAngle=20]{->}{E}{F}
+ \ncput*[nrot=:U]{line III}
+\end{pspicture}
+\end{LTXexample}
+
+
+The \Lcs{ncdiag} macro sets the \Lkeyword{armB} dynamically to the calculated value. Any
+user setting of \Lkeyword{armB} is overwritten by the macro. The \Lkeyword{armA} could be set to
+a zero length:
+
+
+\begin{LTXexample}[width=4.5cm]
+\begin{pspicture}(4,3)
+ \rput(0.5,0.5){\circlenode{A}{A}}
+ \rput(3.5,3){\circlenode{B}{B}}
+ {\psset{linecolor=red,arrows=<-,arrowscale=2}
+ \ncdiag[lineAngle=60,%
+ armA=0,angleA=0,angleB=180]{A}{B}
+ \ncdiag[lineAngle=60,%
+ armA=0,angleA=90,angleB=180]{A}{B}}
+\end{pspicture}
+\end{LTXexample}
+
+
+\begin{LTXexample}[width=4.5cm]
+\begin{pspicture}(4,3)
+ \rput(1,0.5){\circlenode{A}{A}}
+ \rput(4,3){\circlenode{B}{B}}
+ {\psset{linecolor=red,arrows=<-,arrowscale=2}
+ \ncdiag[lineAngle=60,
+ armA=0.5,angleA=0,angleB=180]{A}{B}
+ \ncdiag[lineAngle=60,
+ armA=0,angleA=70,angleB=180]{A}{B}
+ \ncdiag[lineAngle=60,
+ armA=0.5,angleA=180,angleB=180]{A}{B}}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=4.5cm]
+\begin{pspicture}(4,5.5)
+ \cnode*(0,0){2pt}{A} \cnode*(0.25,0){2pt}{C}
+ \cnode*(0.5,0){2pt}{E}\cnode*(0.75,0){2pt}{G}
+ \cnode*(2,4){2pt}{B} \cnode*(2.5,4.5){2pt}{D}
+ \cnode*(3,5){2pt}{F} \cnode*(3.5,5.5){2pt}{H}
+ {\psset{arrowscale=2,linearc=0.2,
+ linecolor=red,armA=0.5, angleA=90,angleB=-90}
+ \pcdiag[lineAngle=20]{->}(A)(B)
+ \pcdiag[lineAngle=20]{->}(C)(D)
+ \pcdiag[lineAngle=20]{->}(E)(F)
+ \pcdiag[lineAngle=20]{->}(G)(H)}
+\end{pspicture}
+\end{LTXexample}
+
+
+%--------------------------------------------------------------------------------------
+\section{\nxLcs{ncdiagg} and \nxLcs{pcdiagg}}
+%--------------------------------------------------------------------------------------
+This is nearly the same as \Lcs{ncdiag} except that
+\Lkeyword{armB}=0 and the \Lkeyword{angleB} value is computed by the
+macro, so that the line ends at the node with an angle like a
+\Lcs{pcdiagg} line. The syntax of \Lcs{ncdiagg}/\Lcs{pcdiagg}
+is
+
+\begin{BDef}
+\Lcs{ncdiag}\OptArgs\Largb{node A}\Largb{node B}\\
+\Lcs{pcdiag}\OptArgs\Largs{node A}\Largs{node B}
+\end{BDef}
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,6)
+ \psset{linecolor=black}
+ \circlenode{A}{A}\quad\circlenode{C}{C}\quad%
+ \circlenode{E}{E}
+ \rput(0,4){\circlenode{B}{B}}
+ \rput(1,5){\circlenode{D}{D}}
+ \rput(2,6){\circlenode{F}{F}}
+ {\psset{arrowscale=2,linearc=0.2,
+ linecolor=red,armA=0.5, angleA=90}
+ \ncdiagg[lineAngle=-160]{->}{A}{B}
+ \ncput*[nrot=:U]{line I}
+ \ncdiagg[lineAngle=-160]{->}{C}{D}
+ \ncput*[nrot=:U]{line II}
+ \ncdiagg[lineAngle=-160]{->}{E}{F}
+ \ncput*[nrot=:U]{line III}}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,6)
+ \psset{linecolor=black}
+ \cnode*(0,0){2pt}{A} \cnode*(0.25,0){2pt}{C}
+ \cnode*(0.5,0){2pt}{E}\cnode*(0.75,0){2pt}{G}
+ \cnode*(2,4){2pt}{B} \cnode*(2.5,4.5){2pt}{D}
+ \cnode*(3,5){2pt}{F} \cnode*(3.5,5.5){2pt}{H}
+ {\psset{arrowscale=2,linearc=0.2,
+ linecolor=red,armA=0.5, angleA=90}
+ \pcdiagg[lineAngle=20]{->}(A)(B)
+ \pcdiagg[lineAngle=20]{->}(C)(D)
+ \pcdiagg[lineAngle=20]{->}(E)(F)
+ \pcdiagg[lineAngle=20]{->}(G)(H)}
+\end{pspicture}
+\end{LTXexample}
+
+The only catch for \Lcs{ncdiagg} is that you need the right
+value for \Lkeyword{lineAngle}. If the node connection is on the wrong
+side of the second node, then choose the corresponding angle,
+e.\,g.: if $20$ is wrong then take $-160$, which differs by $180$.
+
+
+\begin{LTXexample}[width=4cm]
+\begin{pspicture}(4,1.5)
+ \circlenode{a}{A}
+ \rput[l](3,1){\rnode{b}{H}}
+ \ncdiagg[lineAngle=60,angleA=180,armA=.5,nodesepA=3pt,linecolor=blue]{b}{a}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=4cm]
+\begin{pspicture}(4,1.5)
+ \circlenode{a}{A}
+ \rput[l](3,1){\rnode{b}{H}}
+ \ncdiagg[lineAngle=60,armA=.5,nodesepB=3pt,linecolor=blue]{a}{b}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=4cm]
+\begin{pspicture}(4,1.5)
+ \circlenode{a}{A}
+ \rput[l](3,1){\rnode{b}{H}}
+ \ncdiagg[lineAngle=-120,armA=.5,nodesepB=3pt,linecolor=blue]{a}{b}
+\end{pspicture}
+\end{LTXexample}
+
+%--------------------------------------------------------------------------------------
+\section{\nxLcs{ncbarr}}
+%--------------------------------------------------------------------------------------
+This has the same behaviour as \Lcs{ncbar}, but has 5 segments
+and all are horizontal ones. This is the reason why \Lkeyword{angleA}
+must be $0$ or alternatively $180$. All other values are set to
+$0$ by the macro. The intermediate horizontal line is symmetrical
+to the distance of the two nodes.
+
+\begin{BDef}
+\Lcs{ncbarr}\OptArgs\Largb{node A}\Largb{node B}\\
+\end{BDef}
+
+\begin{LTXexample}[width=3.5cm]
+\psset{arrowscale=2}%
+\circlenode{X}{X}\\[1cm]
+\circlenode{Y}{Y}
+\ncbarr[angleA=0,arrows=->,arrowscale=2]{X}{Y}
+\end{LTXexample}
+
+\begin{LTXexample}[width=3.5cm]
+\psset{arrowscale=2}%
+\ovalnode{X}{Xxxxx}\\[1cm]
+\circlenode{Y}{Yyyy}
+\ncbarr[angleA=180,arrows=->,arrowscale=2,linecolor=red]{X}{Y}
+\end{LTXexample}
+
+\begin{LTXexample}[width=3.5cm]
+\psset{arrowscale=2}%
+\ovalnode{X}{Xxxxx}\\[1cm]
+\circlenode{Y}{Yyyy}
+\ncbarr[angleA=20,arm=1cm,arrows=->,arrowscale=2]{X}{Y}
+\end{LTXexample}
+
+%--------------------------------------------------------------------------------------
+\section{\nxLcs{psLNode} and \nxLcs{psLCNode}}
+%--------------------------------------------------------------------------------------
+\Lcs{psLNode} interpolates the Line $\overline{AB}$ by the given value and sets a node at this
+point. The syntax is
+%
+\begin{BDef}
+\Lcs{psLNode}\Largs{P1}\Largs{P2}\Largb{value}\Largb{node name}\\
+\Lcs{psLCNode}\Largs{P1}\Largb{value 1}\Largs{P2}\Largb{value 2}\Largb{node name}
+\end{BDef}
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(5,5)
+\psgrid[subgriddiv=0,griddots=10]
+\psset{linecolor=red}
+\psline{o-o}(1,1)(5,5)
+\psLNode(1,1)(5,5){0.75}{PI}
+\qdisk(PI){4pt}
+\psset{linecolor=blue}
+\psline{o-o}(4,3)(2,5)
+\psLNode(4,3)(2,5){-0.5}{PII}
+\qdisk(PII){4pt}
+\end{pspicture}
+\end{LTXexample}
+
+
+\bigskip
+The \Lcs{psLCNode} macro builds the linear combination of the two given
+vectors and stores the end of
+the new vector as a node. All vectors start at $(0,0)$, so a \Lcs{rput} maybe
+appropriate. The syntax is
+
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[showgrid=true](5,3)
+\psset{linecolor=black}
+\psline[linestyle=dashed]{->}(3,1.5)
+\psline[linestyle=dashed]{->}(0.375,1.5)
+\psset{linecolor=red}
+\psline{->}(2,1)\psline{->}(0.5,2)
+\psLCNode(2,1){1.5}(0.5,2){0.75}{PI}
+\psline[linewidth=2pt]{->}(PI)
+\psset{linecolor=black}
+\psline[linestyle=dashed](3,1.5)(PI)
+\psline[linestyle=dashed](0.375,1.5)(PI)
+\end{pspicture}
+\end{LTXexample}
+
+
+%--------------------------------------------------------------------------------------
+\section{\nxLcs{nlput} and \nxLcs{psLDNode}}
+%--------------------------------------------------------------------------------------
+\Lcs{ncput} allows you to set a label relative to the first node
+of the last node connection. With \Lcs{nlput} this can be done
+absolute to a given node. The syntax is different to the other
+node connection macros. It uses internally the macro
+\Lcs{psLDNode} which places a node absolute to two given points,
+starting from the first one.
+
+\begin{BDef}
+\Lcs{nlput}\OptArgs\Largs{A}\Largs{B}\Largb{distance}\Largb{text}\\
+\Lcs{psLDNode}\OptArgs\Largs{A}\Largs{B}\Largb{distance}\Largb{node name}
+\end{BDef}
+
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(5,2)
+\pnode(0,0){A}
+\pnode(5,2){B}
+\ncline{A}{B}
+\psLDNode(A)(B){1.5cm}{KN}\qdisk(KN){2pt}
+\nlput[nrot=:U](A)(B){1cm}{Test}
+\nlput[nrot=:D](A)(B){2cm}{Test}
+\nlput[nrot=:U](A)(B){3cm}{Test}
+\nlput(A)(B){4cm}{Test}
+\end{pspicture}
+\end{LTXexample}
+
+\section{Extensions}
+\subsection{Quick overview}
+All macros in this section are connected in one way or other with the
+construction or deployment of
+one or more nodes of type \Lcs{pnode}, which is to say in effect,
+named points. For the remainder of this section, node always means \Lcs{pnode}.
+Nodes are one of
+the most powerful features of pstricks---the ``trickiest tricks'' in the words of
+its originator. If used without appropriate caution, they can produce PostScript errors
+that can be difficult to track down. For example, suppose you have defined a node \texttt{A}
+by \verb|\pnode(1,1){A}|, and then, a little later, you want to move the node a bit to the
+right, and you write \verb|\pnode([nodesep=.5cm]A){A}|. On processing the file you will
+see an error message from ghostscript: \Lps{stackunderflow}\verb| in --exch--|.
+The lesson is: you may not assign a node name if a node by that name is involved
+explicitly in its definition. To reassign a node name safely, you have to write instead something like
+\begin{verbatim}
+\pnode([nodesep=.5cm]A){Atemp}
+\pnode(Atemp){A}
+\end{verbatim}
+This problem afflicts a number of other node-forming macros based on a \Lcs{pnode} construction, as most are.
+
+Nodes are more complicated than they appear. Each node is stored not only with a recipe
+for finding its coordinates, but also with the coordinate system in effect when it was
+defined. Part of the retrieval process involves modifying the coordinates if necessary
+so that they represent the same point on the page even if the coordinate system has
+changed. This is important, but has some unexpected consequences. Normally, the simplest
+way to translate an object is with \Lcs{rput}.
+\begin{verbatim}
+\pnode(1,1){P}% define P as (1,1)
+\rput(2,3){\psdot{P}}% places dot at original P=(1,1)
+\end{verbatim}
+is different from
+\begin{verbatim}
+\rput(2,3){\pnode(1,1){P}\psdot{P}}
+% places dot at (1,1)+(2,3)
+\end{verbatim}
+Effectively, \Lcs{rput} and \Lcs{uput} are not useful for translating previously
+defined nodes, but they are useful for defining new nodes relative to fixed positions.
+
+The new macros in this section
+are of several kinds: (i) utility macros, some used
+internally by the package and some of general use; (ii) macros that manipulate one or
+more nodes to produce other nodes; (iii) constructions intended to be used with nodes and
+node sequences. By a node sequence is meant one or more nodes having a common root name
+followed by an index---eg, P0 P1 P2 ... P5 is a node sequence with root name P. It is
+easy to define such node sequences using the \Lcs{multido} macro, or using one of a
+number of macros in this section.
+
+\subsection{Node expressions}
+A number of macros in the package (eg, \Lcs{psxline}) permit the use of node expressions,
+by which is meant an expression like
+\begin{verbatim}
+.25(1,3)+.333(2;90)-1.2([nodesep=.5cm]Q)
+\end{verbatim}
+which specifies a linear combination of points (the items enclosed in parentheses)
+specified in any manner acceptable to \Lcs{SpecialCoor}.
+%The items themselves cannot
+%themselves be node expressions, as they are not acceptable to \Lcs{SpecialCoor}.
+
+Node expressions are handled by \Lcs{nodexn}, which calls the macros \Lcs{hasparen} and
+\Lcs{parsenodexn} to do the real work. If you write code that needs to be able to handle node expressions, you use
+
+\begin{BDef}
+\Lcs{nodexn}\Largb{expr}\Largb{nodename}
+\end{BDef}
+
+which returns a node \verb|<nodename>| once \verb|<expr>| has been fully parsed. It is safe to
+reuse a node name, as in
+\begin{verbatim}
+\nodexn{(P)+.5(1,2)}{P}
+\end{verbatim}
+
+The following macros amount to special cases of node expressions.
+\begin{BDef}
+\Lcs{AtoB}\Largr{A}\Largr{B}\Largb{C}
+\end{BDef}
+ defines a node by name C essentially as B-A, as vectors. It is safe to use
+ \Lcs{AtoB}\verb|(Q)(P){P}| and \Lcs{AtoB}\verb|(Q)(P){Q}|.
+
+\begin{BDef}
+\Lcs{AplusB}\Largr{A}\Largr{B}\Largb{C}
+\end{BDef}
+ defines node by name C essentially as A+B, as vectors. It is safe to use
+ \Lcs{AplusB}\verb|(Q)(P){P}| and \Lcs{AplusB}\verb|(Q)(P){Q}|.
+
+\begin{BDef}
+\Lcs{midAB}\Largr{A}\Largr{B}\Largb{C}
+\end{BDef}
+
+ defines node by name C essentially as $(A+B)/2$, as vectors. It is safe to use \Lcs{midAB}\verb|(Q)(P){P}|
+ and \Lcs{midAB}\verb|(Q)(P){Q}|.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(2.5,2.5)
+\psset{arrows=->,arrowscale=1.5}
+\pnode(2,1){P}\pnode(.5,1){Q}
+\AtoB(Q)(P){QP}
+\AplusB(Q)(P){R}
+\psline(0,0)(P)\uput[-45](P){P}
+\psline(0,0)(Q)\uput[135](Q){Q}
+\psline(0,0)(QP)\uput[-70](QP){QP}
+\psline(0,0)(R)\uput[160](R){R}
+\psline[linestyle=dashed](Q)(P)
+\psline[linestyle=dashed](Q)(R)
+\psline[linestyle=dashed](P)(R)
+\end{pspicture}
+\end{LTXexample}
+
+
+\subsection{The main macros}
+\begin{BDef}
+\Lcs{normalvec}\Largr{coords}\Largb{nodename}
+\end{BDef}
+For example,
+\begin{verbatim}
+\normalvec(P){P}\normalvec(2;30){Q}
+\end{verbatim}
+first redefines the node {\tt P} as a node whose vector interpretation is of the same
+length as the original {\tt P}, but rotated 90 degrees. The second instance has the
+same effect as \Lcs{pnode}\verb|(2;120){Q}|.
+\begin{BDef}
+\Lcs{curvepnode}\Largb{tval}\Largb{expression in t}\Largb{nodename}
+\end{BDef}
+
+For example,
+\begin{verbatim}
+\curvepnode{1}{cos(t) | sin(t)}{P}
+\end{verbatim}
+ sets a node named {\tt P} at \verb|(cos(1), sin(1))| and a node named {\tt Ptang}
+ which represents a unit vector in the tangent direction to the curve at {\tt P}.
+ The expression in {\tt t} in this case is algebraic, which is detected automatically by the macro.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(2.5,2)
+\def\exn{cos(t) | sin(t)}
+\psparametricplot[algebraic]{0}{2}{\exn}
+\curvepnode{1}{\exn}{P}
+\psdot(P)\uput[45](P){P}
+\end{pspicture}
+\end{LTXexample}
+\vspace{2pc}
+
+\begin{BDef}
+\Lcs{psparnode}\Largb{t}\Largb{expression in t}\Largb{<nodename>}
+\end{BDef}
+ is called by the command \Lcs{curvename} if the expression is PostScript, not algebraic.
+
+\begin{BDef}
+\Lcs{algparnode}\Largb{t}\Largb{expression in t}\Largb{nodename}
+\end{BDef}
+ is called by the command \Lcs{curvename} if the expression is algebraic, not PostScript.
+
+\begin{BDef}
+\Lcs{curvepnodes}\Largb{tmin}\Largb{tmax}\Largb{expr. in t}\Largb{nodeRoot}
+\end{BDef}
+ Uses current setting of plotpoints (default 50) to define a node sequence of points along the curve. Eg,
+\begin{verbatim}
+\curvepnodes[plotpoints=100]{0}{1}{t+t^2 | Ex(-t)}{P}
+\end{verbatim}
+ sets nodes {\tt P0 .. P99} at equally spaced {\tt t} values along the curve,
+ and assigns the macro \Lcs{Pnodecount} to 99, the highest index. The expression in {\tt t}
+ may be either algebraic or PostScript, and is handled automatically. The values
+ \verb|<tmin>, <tmax>| may be expressed using PostScript---eg, \verb|{Pi neg}{PiDiv2}|.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(2.5,3)
+\def\exn{t+t^2 | 2*Ex(-t)}
+\psset{plotpoints=100}
+\psparametricplot[algebraic]{0}{1}{\exn}
+\curvepnodes{0}{1}{\exn}{P}
+\psdot(P50)\uput[75](P50){P50}
+\psdot(P99)\uput[75](P99){P99}
+\end{pspicture}
+\end{LTXexample}
+
+
+\begin{BDef}
+\Lcs{fnpnode}\Largb{xval}\Largb{expression in x}\Largb{nodename}
+\end{BDef}
+
+ sets a single node on the graph. Eg,
+
+\begin{verbatim}
+\fnpnode{.5}{x x 1 add mul 2 div}{P}
+\end{verbatim}
+ declares the node P at the point x=0.5 on the graph. It has the same effect as
+
+\begin{verbatim}
+\pnode(!/x 0.5 def x x x 1 add mul 2 div}){P}
+\end{verbatim}
+
+ If your expression in {\tt t} is algebraic, you must specify the keyword {\tt algebraic}, as in
+ \Lcs{fnpnode}\verb|[algebraic]{0.5}{x*(x+1)/2}{P}|.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(2.5,3)
+\def\exn{x x 1 add mul 2 div}
+\psplot{0}{2}{\exn}
+\fnpnode{0.5}{\exn}{Q}
+\psdot(Q)\uput[-45](Q){Q}
+\end{pspicture}
+\end{LTXexample}
+\vspace{2pc}
+
+
+
+\begin{BDef}
+\Lcs{fnpnodes}\Largb{xmin}\Largb{xmax}\Largb{expression in x}\Largb{nodeRoot}
+\end{BDef}
+Is similar to \Lcs{curvenodes}, but for the graph of a function. The keyword \Lkeyword{algebraic}
+must be specified if your expression is indeed algebraic.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(2.5,3)
+\def\exn{x x 1 add mul 2 div}
+\psplot{0}{2}{\exn}
+\fnpnodes[plotpoints=10]{0}{2}{\exn}{A}
+\psdot(A4)\uput[-45](A4){A4}
+\end{pspicture}
+\end{LTXexample}
+\vspace{2pc}
+
+
+\begin{BDef}
+\Lcs{shownode}\Largr{P}
+\end{BDef}
+is a debugging tool, which displays in the console window the coordinates of node P.
+This will not appear until the final stage of processing the PostScript file. You will
+get a PostScript error if the node you specify is undefined.
+
+\begin{BDef}
+\Lcs{getnodelist}\Largb{node root name}\Largb{next command}
+\end{BDef}
+ is useful in writing pstricks macros, where there is a list of parenthesized coordinates
+ to be read and turned into a node sequence, following which \verb|<next command>| is followed.
+
+\begin{BDef}
+\Lcs{pnodes}\Largb{P}\Largr{1,2}\Largr{2;3}\ldots
+\end{BDef}
+is effectively \Lcs{getnodelist}\Largb{P}\Largb{}\verb|(1,2)(2;3)...|, just a quick way to
+turn a list of coordinates into a node sequence P0 P1 ...
+
+\begin{BDef}
+\Lcs{psnline}\OptArgs\Largb{arrows}\Largr{coors}\Largb{name}
+\end{BDef}
+ for example, expects that there are nodes named P3..P8, and gives the same result as
+\begin{verbatim}
+\psline[linewidth=1pt]{->}(P3)(P4)(P5)(P6)(P7)(P8)
+\end{verbatim}
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(2.5,2)
+\pnodes{P}(.1,.1)(1;10)(*2 {x^2/4})(0,1.4)
+%defines P0..P3--now join them
+\psnline[arrowscale=2]{-D>}(0,3){P}
+\end{pspicture}
+\end{LTXexample}
+\vspace{2pc}
+
+
+\begin{BDef}
+\Lcs{psLCNodeVar}\Largr{node A}\Largr{node B}\Largr{factorA,factorB}\Largb{node name}
+\end{BDef}
+
+is similar to \Lcs{psLCNode},
+ and provides a means of forming a linear combination of two nodes, thought of as vectors. Where
+\begin{verbatim}
+\psLCNode(A){a}(B){b}{C}
+\end{verbatim}
+ effectively makes \verb|C=aA+bB|,
+\begin{verbatim}
+\psLCNodeVar(A)(B)(a,b){C}
+\end{verbatim}
+does the same, but the third argument \verb|(a,b)| may be specified in any form acceptable
+to \Lcs{SpecialCoor}. (With \Lcs{psLCNode}, each coefficient may be specified in PostScript code.)
+One other difference is that \Lcs{psLCNodeVar} allows the reuse of a node name in place. For example,
+it is possible to write
+\begin{verbatim}
+\psLCNodeVar(A)(B)(2,3){A}% symbol A reassigned
+\end{verbatim}
+where the equivalent in \Lcs{psLCNode} will lead to a PostScript error. Since \Lcs{AtoB} and \Lcs{AplusB}
+are defined using \Lcs{psLCNodeVar}, they also allow node name reuse: \Lcs{AtoB}\verb|(Q)(P){P}| is legal.
+
+\begin{BDef}
+\Lcs{psRelNodeVar}\Largr{node A}\Largr{node B}\Largr{radius;angle}\Largb{node name}
+\end{BDef}
+is similar to \Lcs{psRelNode}, and provides a means of scaling and rotating a line segment AB about A. The effect of
+\begin{verbatim}
+\psRelNodeVar(A)(B)(2;30){C}
+\end{verbatim}
+ is the same as
+ \begin{verbatim}
+\psRelNode[angle=30](A)(B){2}{C}
+\end{verbatim}
+ but the third argument (2;30) may be specified in any form acceptable to \Lcs{SpecialCoor},
+ while specifying the angle argument in \Lcs{psRelNode} using PostScript is not possible.
+ Note that \Lcs{psRelNodeVar}\verb|(0,0)(A)(B){C}| may be interpreted as defining {\tt C} to
+ be the complex product of {\tt A} and {\tt B}.
+
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\pnode(0,.5){P}\pnode(1.5,.75){Q}
+\psRelNodeVar(P)(Q)(2;20){R}
+\psline(Q)(P)\uput[-45](P){P}
+\uput[-70](Q){Q}
+\psline(P)(R)\uput[-70](R){R}
+\end{pspicture}
+\end{LTXexample}
+
+
+\begin{BDef}
+\Lcs{psRelLineVar}\Largr{node A}\Largr{node B}\Largr{radius;angle}\Largb{node name}
+\end{BDef}
+ stands to \Lcs{psRelLine} as \Lcs{psRelNodeVar} stands relative to \Lcs{psRelNode}.
+
+\Lcs{psRelLine}\verb|Var(A)(B)(a;b){C}| defines the node {\tt C}, and, in addition, draws the line segment {\tt AC}.
+
+\begin{BDef}
+\Lcs{rhombus}\Largb{edge length}\Largr{A}\Largb{B}\Largb{C}\Largb{D}
+\end{BDef}
+computes the two remaining vertices C, D given two opposing vertices A, B
+of a rhombus with specified edge length. It does not draw the rhombus, which
+could be handled easily by \Lcs{psline}. Internally, \Lcs{rhombus} uses
+\Lcs{psRelNodeVar}.
+
+\begin{BDef}
+\Lcs{psrline}\Largr{P}\Largr{Q}\ldots
+\end{BDef}
+ is like \Lcs{psline}, but drawing a line starting at (P), with successive
+ increments (Q)... It has the same options as\Lcs{psline}.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\pnode(0,.5){P}\pnode(1,1){Q}
+\psrline{->}(P)(Q)(2;20)
+\uput[-45](P){P}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\Lcs{psxline}\Largr{basept}\Largb{nodexpr1}\Largb{nodexpr2}
+\end{BDef}
+The {\tt x} here stands for expression. The idea is that one builds a
+line from \verb|<basept>+<nodexpr1>| to \verb|<basept>+<nodexpr2>|.
+
+\begin{LTXexample}[width=.35\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,4)
+\def\pfn{t | t^2/4}
+\psparametricplot[algebraic]{0}{3.5}{\pfn}
+\curvepnode{2}{\pfn}{P}% sets P, Ptang
+\normalvec(Ptang){Q}\uput[-45](P){P}
+\psxline[linecolor=red]{<->}(P){-(Ptang)}{1.5(Ptang)}
+\psxline[linecolor=blue]{->}(P){}{.5(Q)}%can use {} for {(0,0)}
+\end{pspicture}
+\end{LTXexample}
+\vspace{2pc}
+
+\begin{BDef}
+\Lcs{polyIntersections}\Largb{Name1}\Largb{Name2}\Largr{A}\Largr{B}\Largb{P}\ldots\\
+\Lcs{polyIntersections}\Largb{Name1}\Largb{Name2}\Largr{A}\Largr{B}\Largb{P}\Largb{n}\\
+\end{BDef}
+
+is the most complicated macro in the collection. It has two forms.
+
+\begin{verbatim}
+\polyIntersections{<Name1>}{<Name2>}(A)(B)(1,2)(3;30)(6,5)...
+\end{verbatim}
+
+defines the polyline \verb|L=(1,2)(3;30)(6,5)...|, and computes the two points of
+intersection closest to {\tt A} in each direction with the directed line starting at
+A heading toward B. The first intersection point in the positive direction is named
+\verb|<Name1>|, and the first intersection point in the opposite direction (from A)
+is named \verb|<Name2>|. If one or other of these intersections is empty, the nodes are
+set to remote points on the line {\tt AB}. The effect of the line joining the constructed
+nodes depends on the location of {\tt A} and {\tt B} relative to {\tt L}, with two cases worth noting.
+\begin{itemize}
+\item if {\tt L} is closed and if {\tt A, B} are interior to one of its components, the
+resulting line extends across that component of {\tt L}, and contains {\tt AB}.
+\item If {\tt L} is simple and closed, one of {\tt A, B} is inside and the other outside,
+the resulting line segment will contain {\tt A} but not {\tt B}.
+\end{itemize}
+
+\begin{verbatim}
+\polyIntersections{<Name1>}{<Name2>}(A)(B){P}{n}
+\end{verbatim}
+
+has exactly the same effect as
+
+\begin{verbatim}
+\polyIntersections{<Name1>}{<Name2>}(A)(B)(P0)(P1)...(Pn)
+\end{verbatim}
+
+assuming \verb|P0...Pn| to be previously defined nodes.
+
+\begin{LTXexample}[width=.375\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\pnodes{P}(0,.5)(3,.5)(2.5,2)(.5,2.5)(0,.5)
+\pnode(1,1.1){A}\pnode(2,1.5){B}
+\polyIntersections{N1}{N2}(A)(B){P}{4}
+\psnline(0,4){P}
+\psdots(A)(B)\psline(N1)(N2)
+\uput[-60](A){A}\uput[-60](B){B}
+\uput[0](N1){N1}\uput[-180](N2){N2}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=.375\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\pnodes{P}(0,.5)(3,.5)(2.5,2)(.5,2.5)(0,.5)
+\pnode(1,1.1){A}\pnode(2,3){B}
+\polyIntersections{N1}{N2}(A)(B){P}{4}
+\psnline(0,4){P}
+\psdots(A)(B)\psline(N1)(N2)
+\uput[-60](A){A}\uput[-60](B){B}
+\uput[90](N1){N1}\uput[-90](N2){N2}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=.375\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\def\fn{1.5+sin(t)+.4*sin(2*t)%
+ | 1+cos(t)+.2*cos(2*t)+.2*sin(4*t)}%
+\pnode(1,1.1){A}\pnode(2,1.2){B}
+\psset{plotpoints=100}
+\psparametricplot[algebraic]{0}{6.283}{\fn}
+\curvepnodes{0}{6.283}{\fn}{Z}
+\polyIntersections{N1}{N2}(A)(B){Z}{99}
+\psdots(A)(B)\psline(N1)(N2)
+\uput[-60](A){A}\uput[-60](B){B}
+\uput[0](N1){N1}\uput[220](N2){N2}
+\end{pspicture}
+\end{LTXexample}
+\vspace{1pc}
+
+\begin{LTXexample}[width=.375\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\def\fn{1.5+sin(t)+.4*sin(2*t)%
+ | 1+cos(t)+.2*cos(2*t)+.2*sin(4*t)}%
+\pnode(.8,.6){A}\pnode(2.5,-.5){B}
+\psset{plotpoints=100}
+\psparametricplot[algebraic]{0}{6.283}{\fn}
+\curvepnodes{0}{6.283}{\fn}{Z}
+\polyIntersections{N1}{N2}(A)(B){Z}{99}
+\psdots(A)(B)\psline(N1)(N2)
+\uput[90](A){A}\uput[-60](B){B}
+\uput[70](N1){N1}\uput[180](N2){N2}
+\end{pspicture}
+\end{LTXexample}
+\vspace{1pc}
+
+
+\begin{LTXexample}[width=.375\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\pnodes{P}(0,.5)(3,.5)(2.5,2)(.5,2.5)(0,.5)
+\pnode(1,1.1){A}\pnode(2,1.5){B}
+\polyIntersections{N1}{N2}(A)(B){P}{3}
+\psnline(0,3){P}
+\psdots(A)(B)
+\psclip{\psframe[linestyle=none](-.5,-.5)(3.5,2.5)}
+\psline(N1)(N2)\endpsclip
+\uput[-60](A){A}\uput[-60](B){B}
+\uput[0](N1){N1}\uput[-180](N2){N2}
+\end{pspicture}
+\end{LTXexample}
+\vspace{1pc}
+
+\begin{LTXexample}[width=.375\textwidth]
+\begin{pspicture}[showgrid=true](-.5,-.5)(3.5,3)
+\def\fn{x+sin(2*x)}
+\psplot[algebraic]{0}{3.14}{\fn}
+\fnpnodes[algebraic]{0}{3.14}{\fn}{P}
+\pnode(.6,.8){A}\pnode(1.5,1.1){B}
+\polyIntersections{N1}{N2}(A)(B){P}{49}
+\psdots(A)(B)
+\uput[-90](A){A}\uput[-90](B){B}
+\psline(N1)(N2)
+\psset{linestyle=dashed}
+\psline(N1)(N1 | 0,0)
+\psline(N2)(N2 | 0,0)
+\uput[70](N1){N1}\uput[170](N2){N2}
+\end{pspicture}
+\end{LTXexample}
+\vspace{1pc}
+
+\begin{BDef}
+\Lcs{ArrowNotch}\Largb{<NodeName>}\Largb{<nodeindex>}\Largb{<direction>}\Largb{<Notch>}
+\end{BDef}
+takes as inputs the root name of the node sequence, the index at which the arrow
+tip is to be drawn, and the direction (one of \verb+>,<+) of the arrow. It then
+constructs the notch as a node with name \verb|<Notch>|. The arrowhead may then be
+drawn with a command like \Lcs{psline}\verb|{->}(N)(P3)|, assuming the tip was to be {\tt P3}
+and the notch was {\tt N}. Keep in mind that the macro takes its settings for linewidth,
+arrowscale, etc from the current values, so it is generally preferable to include them
+in a \Lcs{psset} before drawing the curve and calling \Lcs{ArrowNotch}.
+(Alternatively, they may be included as optional settings in \Lcs{ArrowNotch}.)
+The first example below shows a case where the native arrow direction is not
+good. The second shows how to make a version using \Lcs{ArrowNotch}. Notice that the minimum and maximum
+parameter values in the second example had to be modified to keep the curve
+from protruding near the end arrowheads.
+
+\Lcs{ArrowNotch} is a computationally expensive macro (quadratic in {\tt plotpoints}) designed to
+improve the placement of arrows on curves in those cases (high curvature, large values of
+linewidth, arrowscale, etc) where the native arrow direction is not optimal. The macro
+depends on the construction of a node sequence, say {\tt P0..Pn}, of samples of the curve
+(eg, with \Lcs{curvepnodes}) from which it computes the position of the notch of the arrow
+so that, when drawn, the arrow notch will be located on the curve in all cases. It operates
+with only two particular arrow shapes---those arrows specified with either
+\verb|->| or \verb|-D>|, or their reverses.
+
+
+\begin{LTXexample}[width=.375\textwidth]
+\def\fn{1.5+1.5*cos(t) | 1+sin(t)}
+\psset{linewidth=2pt,arrowscale=3}
+\begin{pspicture}(0,0)(3.5,3)
+\psparametricplot[algebraic,arrows=<->]{PiDiv2 neg}{Pi}{\fn}
+\end{pspicture}
+\end{LTXexample}
+\vspace{1pc}
+
+\begin{LTXexample}[width=.375\textwidth]
+\def\fn{1.5+1.5*cos(t) | 1+sin(t)}
+\psset{linewidth=2pt,arrowscale=3}
+\begin{pspicture}(0,0)(3.5,3)
+\curvepnodes{PiDiv2 neg}{Pi}\fn{P}%create P0..P49
+\ArrowNotch{P}{0}{<}{Q}
+\ArrowNotch{P}{49}{>}{R}
+\ArrowNotch[arrowscale=1.5]{P}{27}{>}{S}
+\psparametricplot[algebraic]{-1.47}{2.95}{\fn}
+\psline{->}(Q)(P0)
+\psline{->}(R)(P49)
+\psline[arrowscale=1.5]{->}(S)(P27)
+\end{pspicture}
+\end{LTXexample}
+
+
+\section{List of all optional arguments for \texttt{pst-node}}
+
+\xkvview{family=pst-node,columns={key,type,default}}
+
+
+\nocite{*}
+\bgroup
+\RaggedRight
+\bibliographystyle{plain}
+\bibliography{pst-node-doc}
+\egroup
+
+\printindex
+
+
+\end{document}