summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-node
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-07-29 14:12:10 +0000
committerKarl Berry <karl@freefriends.org>2011-07-29 14:12:10 +0000
commit554b089e59c2631f8a6cbd760beabc02ea227ef7 (patch)
treef77643f779d2d45213918c4301e9f9dfb83e1056 /Master/texmf-dist/doc/generic/pst-node
parent3af8d5df17178a99b098a782c231b0060fd29b4d (diff)
pst-node 1.00/1.17 (9jul11)
git-svn-id: svn://tug.org/texlive/trunk@23268 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/Changes3
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/pst-node-doc.pdfbin307821 -> 528405 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex1436
-rw-r--r--Master/texmf-dist/doc/generic/pst-node/pst-node97.tex390
4 files changed, 1822 insertions, 7 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-node/Changes b/Master/texmf-dist/doc/generic/pst-node/Changes
index 214aa07bf1e..ec43a8bab8e 100644
--- a/Master/texmf-dist/doc/generic/pst-node/Changes
+++ b/Master/texmf-dist/doc/generic/pst-node/Changes
@@ -1,4 +1,6 @@
----- pst-node.tex
+1.17 2011-07-04 - added optional argument for \pnode for relative
+ node setting
1.16 2011-05-05 - fixed bug with missing star version for \nput
1.15 2011-02-28 - fixed bug with nodealign
1.14 2010-10-28 - added the macros
@@ -16,6 +18,7 @@
----- pst-node.sty
+1.00 2011-06-05 - make ancient variant 97 available (hv)
2008-12-12 first version (hv)
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
index 0e0a19a8a8b..b06e768cad3 100644
--- a/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.pdf
+++ 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
index 2f9a18c5eb0..4f74469c446 100644
--- a/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex
+++ b/Master/texmf-dist/doc/generic/pst-node/pst-node-doc.tex
@@ -1,4 +1,4 @@
-%% $Id: pst-node-doc.tex 465 2011-02-28 16:08:12Z herbert $
+%% $Id: pst-node-doc.tex 536 2011-07-09 21:40:33Z herbert $
\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings
headexclude,footexclude,oneside]{pst-doc}
\listfiles
@@ -6,6 +6,7 @@
\usepackage[utf8]{inputenc}
\usepackage{pst-plot}
\usepackage{pst-node}
+%\usepackage{pax}
\let\pstFV\fileversion
\let\belowcaptionskip\abovecaptionskip
%
@@ -35,6 +36,12 @@
\ncangles{9,2}{7,0}\ncangles{9,2}{11,0}
\ncangles{17,2}{15,0}\ncangles{17,2}{19,0}}
}
+\newbox\filebox
+\setbox\filebox=\hbox{%
+ \pspicture(-1,-.5)(1,.7)
+ \pspolygon[linearc=2pt,shadow=true,shadowangle=45,xunit=1.1]%
+ (-1,-.55)(-1,.5)(-.8,.5)(-.8,.65)(-.2,.65)(-.2,.5)(1,.5)(1,-.55)
+ \endpspicture}
\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}}
@@ -55,6 +62,10 @@ the basic node commands and connection from the old PSTricks documentation.
The second part describes only the
new and changed stuff. .
+For some copatibility reason you can use the optional argument \Loption{97}
+for the package, it loads the version from 1997, which only makes sense
+when also running the main package \LPack{pstricks} with this option.
+
\vfill
\noindent
Thanks to: Marco Daniel; Denis Girou; Rolf Niepraschk; Sebastian Rahtz;
@@ -66,14 +77,1423 @@ Thanks to: Marco Daniel; Denis Girou; Rolf Niepraschk; Sebastian Rahtz;
\clearpage
\part{Basic commands, connections and labels}
-The following pages are from the original documentation of
-\PST. This documentation file \LFile{pst-docfull} should be part of any
-\TeX\ distribution and was inserted here with the following command:
+\leavevmode
+\marginpar{%
+ \leavevmode\lower 20pt\hbox{%
+ \hbox to0pt{\hbox to \linewidth{\hss\rnode{file}{\copy\filebox}\hss}\hss}%
+ \raise 10pt\hbox to \linewidth{\hss\large\bfseries\sffamily pst-node\hss}}}%
+
+The node and node connection macros let you connect information and place
+labels, without knowing the exact position of what you are connecting or where
+the lines should connect. These macros are useful for making graphs and trees,
+mathematical diagrams, linguistic syntax diagrams, and connecting ideas of any
+kind. They are the trickiest tricks in PSTricks!
+
+There are three components to the node macros:
+\begin{description}
+ \item[Node definitions] The node definitions let you assign a name and shape
+ to an object. See Section \ref{S-nodes}.
+ \item[Node connections] The node connections connect two nodes, identified
+ by their names. See Section \ref{S-nc}.
+ \item[Node labels] The node label commands let you affix labels to the node
+ connections. See Section \ref{S-nodelabels}.
+\end{description}
+
+You can use these macros just about anywhere. The best way to position them
+depends on the application. For greatest flexibility, you can use the nodes in
+a \Lenv{pspicture}, positioning and rotating them with \Lcs{rput}. You can also use
+them in alignment environments. \LPack{pst-node} contains a special alignment
+environment, \Lenv{psmatrix}, which is designed for positioning nodes in a grid,
+such as in mathematical diagrams and some graphs. \Lcs{psmatrix} is described in
+Section \ref{S-psmatrix}. \LPack{pst-node} also contains high-level macros for
+trees. These are described in Part~\ref{P-trees}.
+
+But don't restrict yourself to these more obvious uses. For example:
+\begin{center}
+ \rnode{A}{%
+ \parbox{12cm}{\raggedright
+ I made the file symbol a node. Now I can draw an
+ arrow so that you know what I am talking about.}}
+ \ncarc[nodesep=8pt]{->}{A}{file}
+\end{center}
+
+\begin{lstlisting}
+ \rnode{A}{%
+ \parbox{4cm}{\raggedright
+ I made the file symbol a node. Now I can draw an
+ arrow so that you know what I am talking about.}}
+ \ncarc[nodesep=8pt]{->}{A}{file}
+\end{lstlisting}
+
+\section{Nodes}\label{S-nodes}
+
+Nodes have a name. a boundary and a center.
+The center of a node is where node connections point to. The boundary is for
+determining where to connect a node connection. The various nodes differ in
+how they determine the center and boundary. They also differ in what kind of
+visable object they create.
+
+
+The\XInfoDanger[0]{} name is for refering to the node when making node connections and labels.
+You specify the name as an argument to the node commands. The name must
+contain only letters and numbers, and must begin with a letter. Bad node names
+can cause PostScript errors.
+
+
+Here are the nodes:
+
+\begin{BDef}
+\Lcs{rnode}\OptArg{refpoint}\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ \Lcs{rnode} puts \Larg{stuff} in a box. The center of the node is \Larg{refpoint}, which
+you can specify the same way as for \Lcs{rput}.
+
+\begin{BDef}
+\Lcs{Rnode}\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ \Lcs{Rnode} also makes a box, but the center is set differently. If you align
+\Lcs{rnode}'s by their baseline, differences in the height and depth of the nodes
+can cause connecting lines to be not quite parallel, such as in the following
+example:
+
+\begin{LTXexample}[width=0.4\linewidth]
+ \Large
+ \rnode{A}{sp} \hskip 2cm \rnode{B}{Bit}
+ \ncline{A}{B}
+\end{LTXexample}
+
+With \Lcs{Rnode}, the center is determined relative to the baseline:
+
+\begin{LTXexample}[width=0.4\linewidth]
+ \Large
+ \Rnode{A}{sp} \hskip 2cm \Rnode{B}{Bit}
+ \ncline{A}{B}
+\end{LTXexample}
+
+You can usually get by without fiddling with the center of the node, but to
+modify it you set the
+ \LKeyword{href=num} or
+ \LKeyword{vref=dim}
+parameters. In the horizontal direction, the center is located fraction
+\Lkeyword{href} from the center to the edge. E.g, if \LKeyword{href=-1}, the center is on
+the left edge of the box. In the vertical direction, the center is located
+distance \Lkeyword{vref} from the baseline. The \Lkeyword{vref} parameter is evaluated each
+time \Lcs{Rnode} is used, so that you can use \verb|ex| units to have the distance
+adjust itself to the size of the current font (but without being sensitive to
+differences in the size of letters within the current font).
+
+The command \Lcs{pnode} creates a zero dimensional node at \Largr{\CAny}.
+It
+knows an optional argument for an \CAny\ offset, which
+expects the two values for $x$ and $y$ separated by a comma:
+
+\begin{BDef}
+\Lcs{pnode}\OptArg*{\Largs{\Larga{offset}}}\Largr{\CAny}\Largb{\Larga{node name}}
+\end{BDef}
+
+
+\begin{LTXexample}[width=6cm]
+\begin{pspicture}[showgrid](0,-2)(6,2)
+\pnode{A}\psdot(A)\uput[90](A){A}
+\pnode[0,-2]{B}\psdot(B)\uput[90](B){B}
+\pnode(2,0){C}\psdot(C)\uput[90](C){C}
+\pnode[1,-2](2,0){D}\psdot(D)\uput[90](D){D}
+\pnode[2,2](3.5,0){E}\psdot(E)\uput[90](E){E}
+\end{pspicture}
+\end{LTXexample}
+
+
+\begin{BDef}
+\LcsStar{cnode}\OptArgs\Largr{\CAny}\Largb{radius}\Largb{name}
+\end{BDef}
+
+ This draws a circle. Here is an example with \Lcs{pnode} and \Lcs{cnode}:
+
+\begin{LTXexample}
+\begin{pspicture}[showgrid](3,1.25)
+ \cnode(0,1){.25}{A}
+ \pnode(3,0){B}
+ \ncline{<-}{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{Cnode}\OptArgs\Largr{\CAny}\Largb{name}
+\end{BDef}
+
+ This is like \Lcs{cnode}, but the radius is the value of \LKeyword{radius=dim}
+This is convenient when you want many circle nodes of the same radius.
+
+\begin{BDef}
+\LcsStar{circlenode}\OptArgs\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ This is a variant of \Lcs{pscirclebox} that gives the node the shape of the
+circle.
+
+\begin{BDef}
+ \LcsStar{cnodeput}\OptArgs\Largb{angle}\Largr{\CAny}\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ This is a variant of \Lcs{cput} that gives the node the shape of the
+circle. That is, it is like
+\begin{lstlisting}
+ \rput{<angle>}(<x>,<y>){\circlenode{<name>}{<stuff>}}
+\end{lstlisting}
+
+
+\begin{BDef}
+\LcsStar{ovalnode}\OptArgs\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ This is a variant of \Lcs{psovalbox} that gives the node the shape of an
+ellipse. Here is an example with \Lcs{circlenode} and \Lcs{ovalnode}:
+
+\begin{LTXexample}[width=0.3\textwidth]
+\circlenode{A}{Circle} and \ovalnode{B}{Oval}
+\ncbar[angle=90]{A}{B}
+\end{LTXexample}
+
+
+\begin{BDef}
+\LcsStar{dianode}\OptArgs\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ This is like \Lcs{diabox}.
+
+
+\begin{BDef}
+\LcsStar{trinode}\OptArgs\Largb{name}\Largb{stuff}
+\end{BDef}
+
+ This is like \Lcs{tribox}.
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,3)
+ \rput[tl](0,3){\dianode{A}{Diamond}}
+ \rput[br](4,0){\trinode[trimode=L]{B}{Triangle}}
+ \nccurve[angleA=-135,angleB=90]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{dotnode}\OptArgs\Largr{\CAny}\Largb{name}
+\end{BDef}
+
+ This is a variant of \Lcs{psdot}. For example:
+\begin{LTXexample}
+\begin{pspicture}(3,2)
+ \dotnode[dotstyle=triangle*,dotscale=2 1](0,0){A}
+ \dotnode[dotstyle=+](3,2){B}
+ \ncline[nodesep=3pt]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+
+\begin{BDef}
+\LcsStar{fnode}\OptArgs\Largr{\CAny}\Largb{name}
+\end{BDef}
+
+ The ``f'' stands for ``frame''. This is like, but easier than, putting a
+\Lcs{psframe} in an \Lcs{rnode}.
+
+\begin{LTXexample}
+\begin{pspicture}(3,2)
+ \fnode{A}
+ \fnode*[framesize=1 5pt](2,2){B}
+ \ncline[nodesep=3pt]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+There are two differences between \Lcs{fnode} and \Lcs{psframe}:
+\begin{itemize}
+ \item There is a single (optional) coordinate argument, that gives the
+ \emph{center} of the frame.
+ \item The width and height of the frame are set by the
+ \LKeyword{framesize=dim1 `dim2'} parameter. If you omit <dim2>, you get a square frame.
+\end{itemize}
+
+
+\section{Node connections}\label{S-nc}
+
+All the node connection commands begin with \nxLcs{nc}, and they all have the same
+syntax:\footnote{%
+The node connections can be used with \Lcs{pscustom}. The beginning of the node
+connection is attached to the current point by a straight line, as with
+\Lcs{psarc}.}$^,$\footnote{%
+See page \protect\pageref{S-SpecialCoor} if you want to use the nodes as
+coordinates in other PSTricks macros.}
+
+\begin{BDef}
+ \nxLcs{<nodeconnection>*}\OptArgs\Largb{<arrows>}\Largb{<nodeA>}\Largb{<nodeB>}
+\end{BDef}
+
+A line of some sort is drawn from <nodeA> to <nodeB>. Some of the node
+connection commands are a little confusing, but with a little experimentation
+you will figure them out, and you will be amazed at the things you can do.
+When we refer to the \verb|A| and \verb|B| nodes below, we are referring only to the
+order in which the names are given as arguments to the node connection
+macros.\footnote{%
+When a node name cannot be found on the same page as the node connection
+command, you get either no node connection or a nonsense node connection.
+However, \TeX{} will not report any errors.}
+
+The node connections use many of the usual graphics parameters, plus a few
+special ones. Let's start with one that applies to all the node connections:
+ \LKeyword{nodesep=dim}
+
+\Lkeyword{nodesep} is the border around the nodes that is added for the purpose of
+determining where to connect the lines.
+
+For this and other node connection parameters, you can set different values
+for the two ends of the node connection. Set the parameter \Lkeyword{nodesepA} for
+the first node, and set \Lkeyword{nodesepB} for the second node.
+
+The first two node connections draw a line or arc directly between the two
+nodes:
+
+\begin{BDef}
+\LcsStar{ncline}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+This draws a straight line between the nodes. For example:
+\begin{LTXexample}
+\begin{pspicture}(4,3)
+ \rput[bl](0,0){\rnode{A}{Idea 1}}
+ \rput[tr](4,3){\rnode{B}{Idea 2}}
+ \ncline[nodesep=3pt]{<->}{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{ncarc}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+This connects the two nodes with an arc.
+\begin{LTXexample}
+\begin{pspicture}[shift=*](3.5,2.5)
+ \cnodeput(0,0){A}{X}
+ \cnodeput(3,2){B}{Y}
+ \psset{nodesep=3pt}
+ \ncarc{->}{A}{B}
+ \ncarc{->}{B}{A}
+\end{pspicture}
+\end{LTXexample}
+
+The angle between the arc and the line between the two nodes is\footnote{%
+Rather than using a true arc, \Lcs{ncarc} actually draws a bezier curve. When
+connecting two circular nodes using the default parameter values, the curve
+will be indistinguishable from a true arc. However, \Lcs{ncarc} is more
+flexible than an arc, and works right connecting nodes of different shapes and
+sizes. You can set \Lkeyword{arcangleA} and \Lkeyword{arcangleB} separately, and you can
+control the curvature with the \Lkeyword{ncurv} parameter, which is described on page
+\pageref{p+ncurv}.} \LKeyword{arcangle=angle}
+
+
+\Lcs{ncline} and \Lcs{ncarc} both determine the angle at which the node
+connections join by the relative position of the two nodes. With the next
+group of node connections, you specify one or both of the angles in absolute
+terms, by setting the
+ \LKeyword{angle=angle}
+(and \Lkeyword{angleA} and \Lkeyword{angleB}) parameter.
+
+You also specify the length of the line segment where the node connection
+joins at one or both of the ends (the ``arms'') by setting the
+ \LKeyword{arm=dim}
+(and \Lkeyword{armA} and \Lkeyword{armB}) parameter.
+
+These node connections all consist of several line segments, including the
+arms. The value of \Lkeyword{linearc} is used for rounding the corners.
+
+Here they are, starting with the simplest one:
+
+\begin{BDef}
+\LcsStar{ncdiag}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
-\verb+\includepdf[pages=6-32]{pst-docfull}+
+
+An arm is drawn at each node, joining at angle \Lkeyword{angleA} or \Lkeyword{angleB},
+and with a length of \Lkeyword{armA} or \Lkeyword{armB}. Then the two arms are connected
+by a straight line, so that the whole line has three line segments.
+For example:
+
+\begin{LTXexample}[width=0.4\textwidth]
+\begin{pspicture}(4,3)
+ \rput[tl](0,3){\rnode{A}{\psframebox{Node A}}}
+ \rput[br](4,0){\ovalnode{B}{Node B}}
+ \ncdiag[angleA=-90, angleB=90, arm=.5, linearc=.2]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+You can also set one or both of the arms to zero length. For example, if you
+set \LKeyword{arm=0}, the nodes are connected by a straight line, but you get to
+determine where the line connects (whereas the connection point is determined
+automatically by \Lcs{ncline}. Compare this use of \Lcs{ncdiag} with \Lcs{ncline}
+in the following example:
+
+\begin{LTXexample}[width=0.4\textwidth]
+\begin{pspicture}[shift=*](4,2.5)
+ \rput[r](4,1){\ovalnode{R}{Root}}
+ \cnodeput(1,2){A}{XX}
+ \cnodeput(1,0){B}{YY}
+ \ncdiag[angleB=180, arm=0]{<-}{A}{R}
+ \ncline{<-}{B}{R}
+\end{pspicture}
+\end{LTXexample}
+
+(Note that in this example, the default value \LKeyword{angleA=0} is used.)
+
+\begin{BDef}
+\LcsStar{ncdiagg}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+\Lcs{ncdiagg} is similar to \Lcs{ncdiag}, but only the arm for node A is drawn.
+The end of this arm is then connected directly to node B. Compare
+\Lcs{ncdiagg} with \Lcs{ncdiag} when \LKeyword{armB=0}:
+
+\begin{LTXexample}[width=0.4\textwidth]
+\begin{pspicture}[shift=*](3.5,1)
+\cnode(0,0){12pt}{a}
+\rput[l](3,1){\rnode{b}{H}}
+\rput[l](3,-1){\rnode{c}{T}}
+\ncdiagg[angleA=180,armA=1.5,nodesepA=3pt]{b}{a}
+\nbput[npos=1.2]{\texttt{\string\ncdiagg}}
+\ncdiag[angleA=180,armA=1.5,armB=0,
+ nodesepA=3pt]{c}{a}
+\naput[npos=1.2]{\texttt{\string\ncdiag}}
+\end{pspicture}
+\end{LTXexample}
+
+ You can use \Lcs{ncdiagg} with \LKeyword{armA=0} if you want a straight line that
+joins to node A at the angle you specify, and to node B at an angle that is
+determined automatically.
+
+\begin{BDef}
+\LcsStar{ncbar}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+ This node connection consists of a line with arms dropping ``down'', at
+right angles, to meet two nodes at an angle \Lkeyword{angleA}. Each arm is at least
+of length \Lkeyword{armA} or \Lkeyword{armB}, but one may be need to be longer.
+
+\begin{LTXexample}[width=0.4\textwidth]
+\rnode{A}{Connect} some \rnode{B}{words}!
+\ncbar[nodesep=3pt,angle=-90]{<-**}{A}{B}
+\ncbar[nodesep=3pt,angle=70]{A}{B}
+\end{LTXexample}
+
+ Generally, the whole line has three straight segments.
+
+\begin{BDef}
+\LcsStar{ncangle}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+
+ Now we get to a more complicated node connection. \Lcs{ncangle} typically
+draws three line segments, like \Lcs{ncdiag}. However, rather than fixing the
+length of arm A, we adjust arm A so that the line joining the two arms meets
+arm A at a right angle. For example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,3)
+ \rput[tl](0,3){\rnode{A}{\psframebox{Node A}}}
+ \rput[br](4,0){\ovalnode{B}{Node B}}
+ \ncangle[angleA=-90,angleB=90,armB=1cm]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+Now watch what happens when we change \Lkeyword{angleA}:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,3)
+ \rput[tl](0,3){\rnode{A}{\psframebox{Node A}}}
+ \nput[labelsep=0]{-70}{A}{%
+ \psarcn(0,0){.4cm}{0}{-70}
+ \uput{.4cm}[-35](0,0){\texttt{angleA}}}
+ \rput[br](4,0){\ovalnode{B}{Node B}}
+ \ncangle[angleA=-70,angleB=90,armB=1cm,linewidth=1.2pt]{A}{B}
+ \nput[labelsep=0]{90}{B}{%
+ \rput[bl](2pt,1pt){%
+ \valign{%
+ \vfil#\vfil\cr
+ \hbox{\psscaleboxto(.3,.95cm){\}}}\cr%
+ \hbox{\kern 1pt{\texttt{armB}}}\cr}}}
+ \ncput[nrot=:U,npos=1]{\psframe[dimen=middle](0,0)(.35,.35)}
+\end{pspicture}
+\end{LTXexample}
+
+\Lcs{ncangle} is also a good way to join nodes by a right angle, with just two
+line segments, as in this example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2)
+ \rput[tl](0,2){\rnode{A}{\psframebox{Node A}}}
+ \rput[br](4,0){\ovalnode{B}{Node B}}
+ \ncangle[angleB=90, armB=0, linearc=.5]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{ncangles}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+ \Lcs{ncangles} is similar to \Lcs{ncangle}, but the length of arm A is fixed by
+he \Lkeyword{armA} parameter. Arm A is connected to arm B by two line segments that
+eet arm A and each other at right angles. The angle at which they join arm B,
+and the length of the connecting segments, depends on the positions of the two
+arms. \Lcs{ncangles} generally draws a total of four line segments.\footnote{%
+Hence there is one more angle than \Lcs{ncangle}, and hence the \texttt|s| in
+\Lcs{ncangles}.}
+For example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,4)
+ \rput[tl](0,4){\rnode{A}{\psframebox{Node A}}}
+ \rput[br](4,0){\ovalnode{B}{Node B}}
+ \ncangles[angleA=-90, armA=1cm, armB=.5cm, linearc=.15]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+Let's see what happens to the previous example when we change \Lkeyword{angleB}:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,4)
+ \rput[tl](0,4){\rnode{A}{\psframebox{Node A}}}
+ \rput[br](4,0){\ovalnode{B}{Node B}}
+ \ncangles[angleA=-90, angleB=135, armA=1cm, armB=.5cm,
+ linearc=.15]{A}{B}
+ \nput[labelsep=0]{-90}{A}{%
+ \psarcn(0,0){.4cm}{0}{-90}
+ \uput{.4cm}[-45](0,0){\texttt{angleA}}
+ \rput[tr](-2pt,0){%
+ \valign{%
+ \vfil#\vfil\cr
+ \hbox{\texttt{armA}\kern 1pt}\cr
+ \hbox{\psscaleboxto(.28,.95cm){\{}}\cr\cr}}}
+ \nput[labelsep=0]{135}{B}{%
+ \psarc(0,0){.4cm}{0}{133}
+ \uput{.4cm}[50.5](0,0){\texttt{angleB}}}
+ \ncput[nrot=:L,npos=2]{\psline(0,-.35)(-.35,-.35)(-.35,0)}
+ \ncput[npos=3.5]{%
+ \rput[r](-.8,0){\rnode{arm}{\texttt{armB}}}
+ \pnode{brak}}%
+ \ncline[nodesep=3pt]{->}{arm}{brak}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{ncloop}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+ \Lcs{ncloop} is also in the same family as \Lcs{ncangle} and \Lcs{ncangles}, but
+now typically 5 line segments are drawn. Hence, \Lcs{ncloop} can reach around
+to opposite sides of the nodes. The lengths of the arms are fixed by \Lkeyword{armA}
+and \Lkeyword{armB}. Starting at arm A, \Lcs{ncloop} makes a 90 degree turn to the
+left, drawing a segment of length
+ \LKeyword{loopsize=dim}
+This segment connects to arm B the way arm A connects to arm B with \Lcs{ncline};
+that is, two more segments are drawn, which join the first segment and each
+other at right angles, and then join arm B. For example:
+
+\begin{LTXexample}[pos=t]
+ \vrule width 0pt height 1cm
+ \rnode{a}{\psframebox{\Huge A loop}}
+ \ncloop[angleB=180,loopsize=1,arm=.5,linearc=.2]{->}{a}{a}
+ \ncput[npos=3.5,nrot=:U]{\psline{|<->|}(.5,-.2)(-.5,-.2)}
+ \nbput[npos=3.5,nrot=:D,labelsep=.35cm]{{\tt loopsize}}
+ \kern .5cm
+\end{LTXexample}
+
+In this example, node A and node B are the same node! You can do this with all
+the node connections (but it doesn't always make sense).
+Here is an example where \Lcs{ncloop} connects two different nodes:
+
+\begin{LTXexample}[pos=t]
+ \parbox{3cm}{%
+ \rnode{A}{\psframebox{\large\textbf{Begin}}}
+ \vspace{1cm}\hspace*{\fill}
+ \rnode{B}{\psframebox{\large\textbf{End}}}
+ \ncloop[angleA=180,loopsize=.9,arm=.5,linearc=.2]{->}{A}{B}}
+ \ncput[npos=1.5,nrot=:U]{\psline{|<->|}(.45,-.2)(-.45,-.2)}
+ \nbput[npos=1.5,nrot=:D,labelsep=.35cm]{\texttt{loopsize}}
+ \kern .5cm
+\end{LTXexample}
+
+
+The next two node connections are a little different from the rest.
+
+\begin{BDef}
+\LcsStar{nccurve}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+ \Lcs{nccurve} draws a bezier curve between the nodes.
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,3)
+ \rput[bl](0,0){\rnode{A}{\psframebox{Node A}}}
+ \rput[tr](4,3){\ovalnode{B}{Node B}}
+ \nccurve[angleB=180]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+You specify the angle at which the curve joins the nodes by setting the
+\Lkeyword{angle} (and \Lkeyword{angleA} and \Lkeyword{angleB}) parameter. The distance to the
+control points is set with the
+ \LKeyword{ncurv=num}
+(and \Lkeyword{ncurvA} and \Lkeyword{ncurvB}) parameter. A lower number gives a tighter
+curve. (The distance between the beginning of the arc and the first control
+point is one-half \Lkeyword{ncurvA} times the distance between the two endpoints.)
+
+\begin{BDef}
+\LcsStar{nccircle}\OptArgs\OptArg*{\Largb{arrows}}\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+\Lcs{nccircle} draws a circle, or part of a circle, that, if complete, would
+pass through the center of the node counterclockwise, at an angle of
+\Lkeyword{angleA}.
+
+\begin{LTXexample}
+\vrule width 0pt height 1.4cm
+\rnode{A}{\textbf{back}}
+\nccircle[nodesep=3pt]{->}{A}{.7cm}
+\end{LTXexample}
+
+\Lcs{nccircle} can only connect a node to itself; it is the only node
+connection with this property. \Lcs{nccircle} is also special because it has an
+additional argument, for specifying the radius of the circle.
+
+
+The last two node connections are also special. Rather than connecting the
+nodes with an open curve, they enclose the nodes in a box or curved box. You
+can think of them as variants of \Lcs{ncline} and \Lcs{ncarc}. In both cases, the
+half the width of the box is
+ \LKeyword{boxsize=dim}
+You have to set this yourself to the right size, so that the nodes fit inside
+the box. The \Lkeyword{boxsize} parameter actually sets the \Lkeyword{boxheight} and
+\Lkeyword{boxdepth} parameters. The ends of the boxes extend beyond the nodes by
+\Lkeyword{nodesepA} and \Lkeyword{nodesepB}.
+
+
+\begin{BDef}
+\LcsStar{ncbox}\OptArgs\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+ \Lcs{ncbox} encloses the nodes in a box with straight sides. For example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](4,2.5)
+ \rput[bl](.5,0){\rnode{A}{Idea 1}}
+ \rput[tr](3.5,2){\rnode{B}{Idea 2}}
+ \ncbox[nodesep=.5cm,boxsize=.6,linearc=.2,
+ linestyle=dashed]{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{ncarcbox}\OptArgs\Largb{nodeA}\Largb{nodeB}
+\end{BDef}
+
+ \Lcs{ncarcbox} encloses the nodes in a curved box that is \Lkeyword{arcangleA} away
+from the line connecting the two nodes.
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](4,2.5)
+ \rput[bl](.5,0){\rnode{A}{1}}
+ \rput[tr](3.5,2){\rnode{B}{2}}
+ \ncarcbox[nodesep=.2cm,boxsize=.4,linearc=.4,
+ arcangle=50]{<->}{A}{B}
+\end{pspicture}
+\end{LTXexample}
+
+The arc is drawn counterclockwise from node A to node B.
+
+
+There is one other node connection parameter that applies to all the node
+connections, except \Lcs{ncarcbox}:
+ \LKeyword{offset=dim}
+(You can also set \Lkeyword{offsetA} and \Lkeyword{offsetB} independently.) This shifts the
+point where the connection joins up by <dim> (given the convention that
+connections go from left to right).
+
+There are two main uses for this parameter. First, it lets you make two
+parallel lines with \Lcs{ncline}, as in the following example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](3.5,2.5)
+ \cnodeput(0,0){A}{X}
+ \cnodeput(3,2){B}{Y}
+ \psset{nodesep=3pt,offset=4pt,arrows=->}
+ \ncline{A}{B}
+ \ncline{B}{A}
+\end{pspicture}
+\end{LTXexample}
+
+Second, it lets you join a node connection to a rectangular node at a right
+angle, without limiting yourself to positions that lie directly above, below,
+or to either side of the center of the node. This is useful, for example, if
+you are making several connections to the same node, as in the following
+example:
+
+\begin{LTXexample}
+ \rnode{A}{Word1} and \rnode{B}{Word2} and \rnode{C}{Word3}
+ \ncbar[offsetB=4pt,angleA=-90,nodesep=3pt]{->}{A}{B}
+ \ncbar[offsetA=4pt,angleA=-90,nodesep=3pt]{->}{B}{C}
+\end{LTXexample}
+
+Sometimes you might be aligning several nodes, such as in a tree, and you want
+to ends or the arms of the node connections to line up. This won't happen
+naturally if the nodes are of different size, as you can see in this example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](3.5,3)
+ \psset{unit=.9}
+ \Huge
+ \cnode(1,3){4pt}{a}
+ \rput[B](0,0){\Rnode{b}{H}}
+ \rput[B](2,0){\Rnode{c}{a}}
+ \psset{angleA=90,armA=1,nodesepA=3pt}
+ \ncdiagg{b}{a}
+ \ncdiagg{c}{a}
+\end{pspicture}
+\end{LTXexample}
+
+%%??? FIXME
+If you set the \Lkeyword{nodesep} or \Lkeyword{arm} parameter to a negative value, PSTricks
+will measure the distance to the beginning of the node connection or to the
+end of the arm relative to the center of the node, rather than relative to the
+boundary of the node or the beginning of the arm. Here is how we fix the
+previous example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](3.5,3)
+ \psset{unit=.9}
+ \Huge
+ \cnode(1,3){4pt}{a}
+ \rput[B](0,0){\Rnode{b}{H}}
+ \rput[B](2,0){\Rnode{c}{a}}
+ \psset{angleA=90,armA=1,YnodesepA=12pt}
+ \ncdiagg{b}{a}
+ \ncdiagg{c}{a}
+\end{pspicture}
+\end{LTXexample}
+
+Note also the use of \Lcs{Rnode}.
+
+One more parameter trick: By using the \Lkeyword{border} parameter, you can create
+the impression that one node connection passes over another.
+
+The node connection commands make interesting drawing tools as well, as an
+alternative to \Lcs{psline} for connecting two points. There are variants of
+the node connection commands for this purpose. Each begins with \verb|pc| (for
+``point connection'') rather than \verb|nc|. E.g.,
+ \verb|\pcarc{<->}(3,4)(6,9)|
+gives the same result as
+
+\begin{lstlisting}
+ \pnode(3,4){A}
+ \pnode(6,9){B}
+ \pcarc{<->}{A}{B}
+\end{lstlisting}
+
+Only \Lcs{nccircle} does not have a \nxLcs{pc} variant:
+
+
+
+
+\begin{center}
+\addtolength{\tabcolsep}{8pt}
+\def\c#1{\Largb{node#1}}
+\begin{tabular}{ll}\bottomrule
+ \emph{Command} & \emph{Corresponds to:}\\\midrule
+
+ \Lcs{pcline}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncline}\\
+
+ \Lcs{pccurve}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{nccurve}\\
+
+ \Lcs{pcarc}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncarc}\\
+
+ \Lcs{pcbar}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncbar}\\
+
+ \Lcs{pcdiag}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncdiag}\\
+
+ \Lcs{pcdiagg}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncdiagg}\\
+
+ \Lcs{pcangle}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncangle}\\
+
+ \Lcs{pcangles}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncangles}\\
+
+ \Lcs{pcloop}\OptArg*{\Largb{arrows}}\c1\c2 & \Lcs{ncloop}\\
+
+ \Lcs{pcbox}\c1\c2 & \Lcs{ncbox}\\
+
+ \Lcs{pcarcbox}\c1\c2
+ & \Lcs{ncarcbox}
+\end{tabular}
+\end{center}
+
+
+
+
+\section{Node connections labels: I}\label{S-nodelabels}
+
+Now we come to the commands for attaching labels to the node connections. The
+label command must come right after the node connection to which the label is
+to be attached. You can attach more than one label to a node connection, and a
+label can include more nodes.
+
+The node label commands must end up on the same \TeX{} page as the node
+connection to which the label corresponds.
+
+There are two groups of connection labels, which differ in how they select the
+point on the node connection. In this section we describe the first group:
+
+\begin{BDef}
+ \LcsStar{ncput}\OptArgs\Largb{stuff}\\
+ \LcsStar{naput}\OptArgs\Largb{stuff}\\
+ \LcsStar{nbput}\OptArgs\Largb{stuff}
+\end{BDef}
+
+
+These three command differ in where the labels end up with respect to the line:
+
+\begin{tabular}{@{}ll}
+ \Lcs{ncput} & \emph{on} the line\\
+ \Lcs{naput} & \emph{above} the line\\
+ \Lcs{nbput} & \emph{below} the line
+\end{tabular}
+
+(using the convention that node connections go from left to right).
+
+Here is an example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(3.5,1.5)
+ \cnode(0,0){.5cm}{root}
+ \cnode*(3,1.5){4pt}{A}
+ \cnode*(3,0){4pt}{B}
+ \cnode*(3,-1.5){4pt}{C}
+ \psset{nodesep=3pt}
+ \ncline{root}{A}
+ \naput{above}
+ \ncline{root}{B}
+ \ncput*{on}
+ \ncline{root}{C}
+ \nbput{below}
+\end{pspicture}
+\end{LTXexample}
+
+\Lcs{naput} and \Lcs{nbput} use the same algorithm as \Lcs{uput} for displacing
+the labels, and the distance beteen the line and labels is \Lkeyword{labelsep} (at
+least if the lines are straight).
+
+\Lcs{ncput} uses the same system as \Lcs{rput} for setting the reference
+point. You change the reference point by setting the
+ \LKeyword{ref=ref}
+parameter.
+
+Rotation is also controlled by a graphics parameter:
+ \LKeyword{nrot=rot}
+<rot> can be in any of the forms suitable for \Lcs{rput}, and you can also use
+the form
+\verb|{:<angle>}|
+
+The angle is then measured with respect to the node connection. E.g., if the
+angle is \verb|{:U}|, then the label runs parallel to the node connection. Since
+the label can include other put commands, you really have a lot of control
+over the label position.
+
+The next example illustrates the use \verb|{:<angle>}|, the \Lkeyword{offset} parameter,
+and \Lcs{pcline}:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2.3)
+ \pspolygon(0,0)(4,2)(4,0)
+ \pcline[offset=12pt]{|-|}(0,0)(4,2)
+ \ncput*[nrot=:U]{Length}
+\end{pspicture}
+\end{LTXexample}
+
+Here is a repeat of an earlier example, now using \verb|{:<angle>}|:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(3.5,1.5)
+ \cnode(0,0){.5cm}{root}
+ \cnode*(3,1.5){4pt}{A}
+ \cnode*(3,0){4pt}{B}
+ \cnode*(3,-1.5){4pt}{C}
+ \psset{nodesep=3pt,nrot=:U}
+ \ncline{root}{A}
+ \naput{above}
+ \ncline{root}{B}
+ \ncput*{on}
+ \ncline{root}{C}
+ \nbput{below}
+\end{pspicture}
+\end{LTXexample}
+
+The position on the node connection is set by the
+ \LKeyword{npos=num}
+parameter, roughly according to the following scheme: Each node connection has
+potentially one or more segments, including the arms and connecting lines.
+A number \Lkeyword{npos} between 0 and 1 picks a point on the first segment from node
+\verb|A| to \verb|B| (fraction \Lkeyword{npos} from the beginning to the end of the segment),
+a number between 1 and 2 picks a number on the second segment, and so on.
+
+Each node connection has its own default value of \Lkeyword{npos}. If you leave the
+\Lkeyword{npos} parameter value empty (e.g., \verb|[npos=]|), then the default is
+substituted. This is the default mode.
+
+Here are the details for each node connection:
+\begin{center}
+% \catcode`\@=11\setbox\@tempboxa=\hbox{1.5}%
+% \edef\t#1{\noexpand\hbox to \the\wd\@tempboxa{\noexpand\tt\noexpand\hss#1}}
+ \begin{tabular}{lccc}
+ \emph{Connection} & \emph{Segments} & \emph{Range} & \emph{Default}\\[2pt]
+ \Lcs{ncline} & 1 & $0\leq pos\leq 1$ & 0.5\\
+ \Lcs{nccurve} & 1 & $0\leq pos\leq 1$ & 0.5\\
+ \Lcs{ncarc} & 1 & $0\leq pos\leq 1$ & 0.5\\
+ \Lcs{ncbar} & 3 & $0\leq pos\leq 3$ & 1.5\\
+ \Lcs{ncdiag} & 3 & $0\leq pos\leq 3$ & 1.5\\
+ \Lcs{ncdiagg} & 2 & $0\leq pos\leq 2$ & 0.5\\
+ \Lcs{ncangle} & 3 & $0\leq pos\leq 3$ & 1.5\\
+ \Lcs{ncangles} & 4 & $0\leq pos\leq 4$ &1.5\\
+ \Lcs{ncloop} & 5 & $0\leq pos\leq 5$ & 2.5\\
+ \Lcs{nccircle} & 1 & $0\leq pos\leq 1$ & 0.5\\
+ \Lcs{ncbox} & 4 & $0\leq pos\leq 4$ & 0.5\\
+ \Lcs{ncarcbox} & 4 & $0\leq pos\leq 4$ & 0.5
+ \end{tabular}
+\end{center}
+
+
+Here is an example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,3)
+\rput[tl](0,3){\rnode{A}{\psframebox{Node A}}}
+\rput[br](3.5,0){\ovalnode{B}{Node B}}
+\ncangles[angleA=-90,arm=.4cm,linearc=.15]{A}{B}
+\ncput*{d}
+\nbput[nrot=:D,npos=2.5]{par}
+\end{pspicture}
+\end{LTXexample}
+
+With \Lcs{ncbox} and \Lcs{ncarcbox}\, the segments run counterclockwise, starting
+with the lower side of the box. Hence, with \Lcs{nbput} the label ends up
+outside the box, and with \Lcs{naput} the label ends up inside the box.
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](4,2.5)
+ \rput[bl](.5,0){\rnode{A}{1}}
+ \rput[tr](3.5,2){\rnode{B}{2}}
+ \ncarcbox[nodesep=.2cm,boxsize=.4,linearc=.4,
+ arcangle=50,linestyle=dashed]{<->}{A}{B}
+ \nbput[nrot=:U]{set}
+ \nbput[npos=2]{II}
+\end{pspicture}
+\end{LTXexample}
+
+If you set the parameter
+ \LKeyword{shortput=none/nab/tablr/tab}
+to \Lkeyval{nab}, then immediately following a node connection or another node
+connection label you can use \verb|^| instead of \Lcs{naput} and \verb|_| instead of
+\Lcs{nbput}.
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}[shift=*](3.5,1.5)
+ \cnode(0,0){.5cm}{root}
+ \cnode*(3,1.5){4pt}{A}
+ \cnode*(3,-1.5){4pt}{C}
+ \psset{nodesep=3pt,shortput=nab}
+ \ncline{root}{A}^{$x$}
+ \ncline{root}{C}_{$y$}
+\end{pspicture}
+\end{LTXexample}
+
+You can still have parameter changes with the short \verb|^| and \verb|_| forms. Another
+example is given on page~\pageref{nab-example}.
+
+If you have set \Lkeyset{shortput=nab}, and then you want to use a true \verb|^| or \verb|_|
+character right after a node connection, you must precede the \verb|^| or \verb|_| by
+\verb|{}| so that PSTricks does not convert it to \Lcs{naput} or \Lcs{nbput}.
+
+You can change the characters that you use for the short form with the
+
+\begin{BDef}
+\Lcs{MakeShortNab}\Largb{<char1>}\Largb{<char2>}
+\end{BDef}
+
+command.\footnote{%
+You can also use \Lcs{MakeShortNab} if you want to use \texttt{\textasciicircum} and \texttt{\_} with
+non-standard category codes. Just invoke the command after you have made your
+\Lcs{catcode} changes.}
+
+The \Lkeyset{shortput=tablr} and \Lkeyset{shortput=tab} options are described on
+pages~\pageref{tablr} and \pageref{tab}, respectively.
+
+\section{Node connection labels: II}
+
+Now the second group of node connections:
+\begin{BDef}
+\LcsStar{tvput}\OptArgs\Largb{stuff}\\
+\LcsStar{tlput}\OptArgs\Largb{stuff}\\
+\LcsStar{trput}\OptArgs\Largb{stuff}\\
+\LcsStar{thput}\OptArgs\Largb{stuff}\\
+\LcsStar{taput}\OptArgs\Largb{stuff}\\
+\LcsStar{tbput}\OptArgs\Largb{stuff}
+\end{BDef}
+
+The difference between these commands and the \verb|\n*put| commands is that these
+find the position as an intermediate point between the centers of the nodes,
+either in the horizontal or vertical direction. These are good for trees and
+mathematical diagrams, where it can sometimes be nice to have the labels be
+horizontally or vertically aligned. The \verb|t| stands for ``tree''.
+
+You specify the position by setting the
+ \LKeyword{tpos=num}
+parameter.
+
+\Lcs{tvput}, \Lcs{tlput} and \Lcs{trput} find the position that lies fraction
+<tpos> in the \emph{vertical} direction from the upper node to the lower
+node. \Lcs{thput}, \Lcs{taput} and \Lcs{tbput} find the position that lies fraction
+<tpos> in the \emph{horizontal} direction from the left node to the right
+node.
+Then the commands put the label on or next to the line, as follows:
+\begin{center}
+\begin{tabular}{lll}\toprule
+ \emph{Command} & \emph{Direction} & \emph{Placement}\\\midrule
+ \Lcs{tvput} & vertical & middle\\
+ \Lcs{tlput} & vertical & left\\
+ \Lcs{trput} & vertical & right\\
+ \Lcs{thput} & horizontal & middle\\
+ \Lcs{taput} & horizontal & above\\
+ \Lcs{tbput} & horizontal & below\\\bottomrule
+\end{tabular}
+\end{center}
+
+Here is an example:
+\begin{LTXexample}[pos=t]
+ \[
+ \setlength{\arraycolsep}{1.1cm}
+ \begin{array}{cc}
+ \Rnode{a}{(X-A)} & \Rnode{b}{A} \\[1.5cm]
+ \Rnode{c}{x} & \Rnode{d}{\tilde{X}}
+ \end{array}
+ \psset{nodesep=5pt,arrows=->} \everypsbox{\scriptstyle}
+ \ncline{a}{c}\tlput{r} \ncline{a}{b}\taput{u}
+ \ncline[linestyle=dashed]{c}{d}\tbput{b}
+ \ncline{b}{d}\trput{s}
+ \everypsbox{}
+ \begin{array}{cc}
+ \rnode{a}{(X-A)} & \rnode{b}{a} \\[1.5cm]
+ \rnode{c}{x} & \rnode{d}{\tilde{X}}
+ \end{array}
+ \psset{nodesep=5pt,arrows=->}\everypsbox{\scriptstyle}
+ \ncline{a}{c}\nbput{r} \ncline{a}{b}\naput{u}
+ \ncline[linestyle=dashed]{c}{d}\nbput{b}
+ \ncline{b}{d}\naput{s}
+ \]
+\end{LTXexample}
+
+On the left is the diagram with \Lcs{tlput}, \Lcs{trput}, \Lcs{tbput} and \Lcs{Rnode},
+as shown in the code. On the right is the same diagram, but with \Lcs{naput},
+\Lcs{nbput} and \Lcs{rnode}.
+
+These do not have a rotation argument or parameter. However, you can rotate
+\Larg{<stuff>} in 90 degree increments using box rotations (e.g., \Lcs{rotateleft}).
+
+If you set \Lkeyset{shortput=tablr}, then you can use the following single-character
+abbreviations for the \verb|t| put commands:\label{tablr}
+\begin{center}
+ \begin{tabular}{rl}\toprule
+ \emph{Char.} & \emph{Short for:}\\\midrule
+\rule{0pt}{4ex}
+ \verb|^| & \Lcs{taput} \\
+ \verb|_| & \Lcs{tbput} \\
+ \verb|<| & \Lcs{tlput} \\
+ \verb|>| & \Lcs{trput}\\\bottomrule
+ \end{tabular}
+\end{center}
+
+
+You can change the character abbreviations with
+
+\begin{BDef}
+\Lcs{MakeShortTablr}\Largb{<char1>}\Largb{<char2>}\Largb{<char3>}\Largb{<char4>}
+\end{BDef}
+
+The \verb|t| put commands, including an example of \Lkeyset{shortput=tablr}, will be
+shown further when we get to mathematical diagrams and trees.
+
+The\XInfoDanger{~} node macros use \Lcs{pstVerb} and \Lcs{pstverbscale}.
+
+\section{Attaching labels to nodes}
+
+The command
+
+\begin{BDef}
+\LcsStar{nput}\OptArgs\Largb{refangle}\Largb{name}\Larg{stuff}
+\end{BDef}
+
+
+affixes \Largb{<stuff>} to node \Largb{<name>}. It is positioned distance \Lkeyword{labelsep} from
+the node, in the direction \Largb{<refangle>} from the center of the node. The
+algorithm is the same as for \Lcs{uput}. If you want to rotate the node, set the
+ \LKeyword{rot=rot}
+parameter, where \Larg{<rot>} is a rotation that would be valid for \Lcs{rput}.%
+\footnote{Not to be confused with the \Lkeyword{nput} parameter.}
+The position of the label also takes into account the \Lkeyword{offsetA}
+parameter. If \Lkeyword{labelsep} is negative, then the distance is from the center
+of the node rather than from the boundary, as with \Lkeyword{nodesep}.
+
+Here is how I used \Lcs{nput} to mark an angle in a previous example:
+
+\begin{LTXexample}[width=4cm]
+\begin{pspicture}(4,3)
+\rput[br](4,0){\ovalnode{B}{Node B}}
+\rput[tl](0,3){\rnode{A}{\psframebox{Node A}}}
+\nput[labelsep=0]{-70}{A}{%
+ \psarcn(0,0){.4cm}{0}{-70}
+ \uput{.4cm}[-35](0,0){\texttt{angleA}}}
+\ncangle[angleA=-70,angleB=90,armB=1cm,linewidth=1.2pt]{A}{B}
+\ncput[nrot=:U,npos=1]{\psframe[dimen=middle](0,0)(.35,.35)}
+\end{pspicture}
+\end{LTXexample}
+
+\section{Mathematical diagrams and graphs}\label{S-psmatrix}
+
+For some applications, such as mathematical diagrams and graphs, it is useful
+to arrange nodes on a grid. You can do this with alignment environments, such
+as \TeX's \Lcs{halign} primitive, \LaTeX's \Lenv{tabular} environment, and \AmS-\TeX's
+\Lcs{matrix}, but PSTricks contains its own alignment environment that is
+especially adapted for this purpose:
+
+\begin{BDef}
+\Lcs{psmatrix}\OptArgs \ldots \Lcs{endpsmatrix}
+\end{BDef}
+
+Here is an example
+\begin{LTXexample}[width=5cm]
+ $
+ \psmatrix[colsep=1cm,rowsep=1cm]
+ & A \\
+ B & E & C \\
+ & D &
+ \endpsmatrix
+ $
+\end{LTXexample}
+
+As an alignment environment, \Lcs{psmatrix} is similar to \AmS-\TeX's
+\Lcs{matrix}. There is no argument for specifying the columns. Instead, you can
+just use as many columns as you need. The entries are horizontally centered.
+Rows are ended by \verb|\\|. \Lcs{psmatrix} can be used in or out of math mode.
+
+Our first example wasn't very interesting, because we didn't make use of the
+nodes. Actually, each entry is a node. The name of the node in row <row> and
+column \Largb{<col>} is \verb|{<row>,<col>}|, with no spaces. Let's see some node
+connections:
+
+\begin{LTXexample}[width=5cm]
+ $
+ \psmatrix[colsep=1cm]
+ & X \\
+ Y & Z
+ \endpsmatrix
+ \everypsbox{\scriptstyle}%
+ \psset{nodesep=3pt,arrows=->}
+ \ncline{1,2}{2,1}
+ \tlput{f}
+ \ncline{1,2}{2,2}
+ \trput{g}
+ \ncline[linestyle=dotted]{2,1}{2,2}
+ \tbput{h}
+ $
+\end{LTXexample}
+
+You can include the node connections inside the \Lcs{psmatrix}, in the last entry
+and right before \Lcs{endpsmatrix}. One advantage to doing this is that
+\Lkeyset{shortput=tab} is the default within a \Lcs{psmatrix}.
+
+\begin{LTXexample}
+$ \begin{psmatrix}
+ U \\
+ & X\times_Z Y & X \\
+ & Y & Z
+ \psset{arrows=->,nodesep=3pt}
+ \everypsbox{\scriptstyle}
+ \ncline{1,1}{2,2}_{y}
+ \ncline[doubleline=true,linestyle=dashed]{-}{1,1}{2,3}^{x}
+ \ncline{2,2}{3,2}<{q}
+ \ncline{2,2}{2,3}_{p}
+ \ncline{2,3}{3,3}>{f}
+ \ncline{3,2}{3,3}_{g}
+ \end{psmatrix} $
+\end{LTXexample}
+
+You can change the kind of nodes that are made by setting the
+ \LKeyword{mnode=type}
+parameter. Valid types are \Lkeyval{R},
+\Lkeyval{r},
+\Lkeyval{C},
+\Lkeyval{f}, \Lkeyval{p}, \Lkeyval{circle}, \Lkeyval{oval}, \Lkeyval{dia},
+\Lkeyval{tri}, \Lkeyval{dot} and \Lkeyval{none},
+standing for \Lcs{Rnode}, \Lcs{rnode}, \Lcs{Cnode}, \Lcs{fnode},
+\Lcs{pnode}, \Lcs{circlenode}, \Lcs{ovalnode}, \Lcs{dotnode} and no node,
+respectively. Note that for circles, you use \Lkeyset{mnode=C} and set the radius
+with the \Lkeyword{radius} parameter.
+
+For example:\label{nab-example}
+\begin{LTXexample}
+ \psmatrix[mnode=circle,colsep=1]
+ & A \\
+ B & E & C \\
+ & D &
+ \endpsmatrix
+ \psset{shortput=nab,arrows=->,labelsep=3pt}
+ \small
+ \ncline{2,2}{2,3}^[npos=.75]{a}
+ \ncline{2,2}{2,1}^{b}
+ \ncline{3,2}{2,1}^{c}
+ \ncarc[arcangle=-40,border=3pt]{3,2}{1,2}%
+ _[npos=.3]{d}^[npos=.7]{e}
+ \ncarc[arcangle=12]{1,2}{2,1}^{f}
+ \ncarc[arcangle=12]{2,1}{1,2}^{g}
+\end{LTXexample}
+
+Note that a node is made only for the non-empty entries. You can also specify
+a node for the empty entries by setting the
+ \LKeyword{emnode=type}
+parameter.
+
+You can change parameters for a single entry by starting this entry with the
+parameter changes, enclosed in square brackets. Note that the changes affect
+the way the node is made, but not contents of the entry (use \Lcs{psset} for
+this purpose). For example:
+\begin{LTXexample}
+$ \psmatrix[colsep=1cm]
+ & [mnode=circle] X \\
+ Y & Z
+ \endpsmatrix
+ \psset{nodesep=3pt,arrows=->}
+ \ncline{1,2}{2,1}
+ \ncline{1,2}{2,2}
+ \ncline[linestyle=dotted]{2,1}{2,2} $
+\end{LTXexample}
+
+If you want your entry to begin with a \verb|[| that is not meant to indicate
+parameter changes, the precede it by \verb|{}|.
+
+You can assign your own name to a node by setting the
+ \LKeyword{name=<name>}
+parameter at the beginning of the entry, as described above. You can still
+refer to the node by \verb|{<row>,<col>}|, but here are a few reasons for giving
+your own name to a node:
+\begin{itemize}
+ \item The name may be easier to keep track of;
+ \item Unlike the \verb|{<row>,<col>}| names, the names you give remain valid
+ even when you add extra rows or columns to your matrix.
+ \item The names remain valid even when you start a new \Lcs{psmatrix} that
+ reuses the \verb|{<row>,<col>}| names.
+\end{itemize}
+
+
+Here a few more things you should know:
+\begin{itemize}
+ \item The baselines of the nodes pass through the centers of the
+ nodes. \Lcs{psmatrix} achieves this by setting the
+ \LKeyword{nodealign=true/false}
+parameter to \verb|true|. You can also set this parameter outside of \Lcs{psmatrix}
+when you want this kind of alignment.
+
+ \item You can left or right-justify the nodes by setting the
+ \LKeyword{mcol=l/r/c}
+parameter. \verb|l|, \verb|r| and \verb|c| stand for \verb|left|, \verb|right| and \verb|center|,
+respectively.
+
+ \item The space between rows and columns is set by the
+ \LKeyword{rowsep=dim} and
+ \LKeyword{colsep=dim}
+parameters.
+
+ \item If you want all the nodes to have a fixed width, set
+ \LKeyword{mnodesize=dim}
+to a positive value.
+
+ \item If \Lcs{psmatrix} is used in math mode, all the entries are set in math
+ mode, but you can switch a single entry out of math mode by starting and
+ ending the entry with \verb|$|. %$
+
+ \item The radius of the \verb|c| \Lkeyword{mnode} (corresponding to \Lcs{cnode}) is set by
+the \Lkeyword{radius} parameter.
+
+ \item Like in \LaTeX, you can end a row with \verb|\\[<dim>]| to insert an extra
+ space <dim> between rows.
+
+ \item The command \Lcs{psrowhookii} is executed, if defined, at the beginning of
+ every entry in row \verb|ii| (row 2), and the command \Lcs{pscolhookv} is executed at
+ athe beginning of every entry in column \verb|v| (etc.). You can use these hooks,
+ for example, to change the spacing between two columns, or to use a special
+ \Lkeyword{mnode} for all the entries in a particular row.
+
+ \item An entry can itself be a node. You might do this if you want an entry
+ to have two shapes.
+
+ \item If you want an entry to stretch across several (\Largb{<int>}) columns, use the
+
+\begin{BDef}
+\Lcs{psspan}\Largb{int}
+\end{BDef}
+
+ \emph{at the end of the entry}. This is like Plain \TeX's \Lcs{multispan}, or
+ \LaTeX's \Lcs{multicolumn}, but the template for the current column (the first
+ column that is spanned) is still used. If you want wipe out the template as
+ well, use \Lcs{multispan}\Largb{<int>} \emph{at the beginning of the entry} instead.
+ If you just want to wipe out the template, use \Lcs{omit} before the entry.
+
+ \item \Lcs{psmatrix} can be nested, but then all node connections and other
+ references to the nodes in the \verb|{<row>,<col>}| form for the nested matrix
+ \emph{must go inside} the \Lcs{psmatrix}. This is how PSTricks decides which
+ matrix you are referring to. It is still neatest to put all the node
+ connections towards the end; just be sure to put them before \Lcs{endpsmatrix}.
+ Be careful also not to refer to a node until it actually appears. The whole
+ matrix can itself go inside a node, and node connections can be made as
+ usual. This is not the same as connecting nodes from two different
+ \Lcs{psmatrix}'s. To do this, you must give the nodes names and refer to them
+ by these names.
+
+\end{itemize}
+
+\section{Obsolete put commands}
+
+This is old documentation, but these commands will continue to be supported.
+
+There is also an obsolete command \Lcs{Lput} for putting labels
+next to node connections. The syntax is
+
+\begin{BDef}
+ \Lcs{Lput}\Largb{<labelsep>}\Largs{<refpoint>}\Largb{<rotation>}\Largr(<pos>)\Largb{<stuff>}
+\end{BDef}
+
+It is a combination of \Lcs{Rput} and \Lcs{lput}, equivalent to
+
+\begin{BDef}
+ \Lcs{lput}\Largr{<pos>}\Largb{\Lcs{Rput}\Largb{<labelsep>}\Largs{<refpoint>}\Largb{<rotation>}\Largr{0,0}\Largb{<stuff>}}
+\end{BDef}
+
+\Lcs{Mput} is a short version of \Lcs{Lput} with no
+\verb|{<rotation>}| or \verb|(<pos>)| argument. \Lcs{Lput} and \Lcs{Mput} remain part of
+PSTricks only for backwards compatibility.
+
+Here are the node label commands:
+
+\begin{BDef}
+\LcsStar{lput}\OptArgs\Largs{refpoint}\Largb{rotation}\Largr{pos}\Largb{stuff}
+\end{BDef}
+
+The \verb|l| stands for ``label''. Here is an example illustrating the use of the
+optional star and \verb|:<angle>| with \Lcs{lput}, as well as the use of the
+\Lkeyword{offset} parameter with \Lcs{pcline}:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2.3)
+ \pspolygon(0,0)(4,2)(4,0)
+ \pcline[offset=12pt]{|-|}(0,0)(4,2)
+ \lput*{:U}{Length}
+\end{pspicture}
+\end{LTXexample}
+
+(Remember that with the \nxLcs{?put} commands, you can omit the coordinate if you
+include the angle of rotation. You are likely to use this feature with the
+node label commands.)
+
+With \Lcs{lput} and \Lcs{rput}, you have a lot of control over the position of the
+label. E.\,g.,
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2)
+ \pcline(0,0)(4,2)
+ \lput{:U}{\rput[r]{N}(0,.4){label}}
+\end{pspicture}
+\end{LTXexample}
+
+puts the label upright on the page, with right side located .4 centimeters
+``above'' the position 0.5 of the node connection (above if the node
+connection points to the right). However, the \Lcs{aput} and \Lcs{bput} commands
+described below handle the most common cases without \Lcs{rput}.\footnote{%
+There is also an obsolete command \Lcs{Lput} for putting labels
+next to node connections. The syntax is
+
+\begin{BDef}
+ \LcsStar{Lput}\Largb{<labelsep>}\Largs{<refpoint>}\Largb{<rotation>}\Largr{<pos>}\Largb{<stuff>}
+\end{BDef}
+
+It is a combination of \Lcs{Rput} and \Lcs{lput}, equivalent to
+
+\begin{BDef}
+ \LcsStar{lput}\Largr{<pos>}\Largb{\Lcs{Rput}\Largb{<labelsep>}\Largs{<refpoint>}\Largb{<rotation>}\Largr{0,0}\Largb{<stuff>}}
+\end{BDef}
+
+\Lcs{Mput} is a short version of \Lcs{Lput} with no
+\texttt{\{<rotation>\}} or \texttt{(<pos>)} argument. \Lcs{Lput} and \Lcs{Mput} remain part of
+PSTricks only for backwards compatibility.}
+
+\begin{BDef}
+\LcsStar{aput}\Largs{labelsep}\Largb{angle}\Largr{pos}\Largb{stuff}
+\end{BDef}
+
+ \Largb{<stuff>} is positioned distance \Lcs{pslabelsep} \emph{above} the node
+connection, given the convention that node connections point to the right.
+\Lcs{aput} is a node-connection variant of \Lcs{uput}. For example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2)
+ \pspolygon(0,0)(4,2)(4,0)
+ \pcline[linestyle=none](0,0)(4,2)
+ \aput{:U}{Hypotenuse}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{BDef}
+\LcsStar{bput}\Largs{labelsep}\Largb{angle}\Largr{pos}\Largb{stuff}
+\end{BDef}
+
+ This is like \Lcs{aput}, but \Largb{<stuff>} is positioned \emph{below} the node
+connection.
+
+
+ It is fairly common to want to use the default position and rotation with
+these node connections, but you have to include at least one of these
+arguments. Therefore, PSTricks contains some variants:
+
+\begin{BDef}
+\Lcs{mput}\Largs{refpoint}\Largb{stuff}\\
+\Lcs{Aput}\Largs{labelsep}\Largb{stuff}\\
+\Lcs{Bput}\Largs{labelsep}\Largb{stuff}
+\end{BDef}
+
+of \Lcs{lput}, \Lcs{aput} and \Lcs{bput}, respectively, that have no angle or
+positioning argument. For example:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2)
+ \cnode*(0,0){3pt}{A}
+ \cnode*(4,2){3pt}{B}
+ \ncline[nodesep=3pt]{A}{B}
+ \mput*{1}
+\end{pspicture}
+\end{LTXexample}
+
+Here is another:
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(4,2)
+ \pcline{<->}(0,0)(4,2)
+ \Aput{Label}
+\end{pspicture}
+\end{LTXexample}
\clearpage
-\setcounter{page}{33}
\part{New commands}
\section{Setting bounding box nodes with \nxLcs{psDefBoxNodes}}
@@ -105,6 +1525,8 @@ characters, like umlauts or an active \PS\ character, like \texttt{(}.
\end{LTXexample}
+
+
\clearpage
%--------------------------------------------------------------------------------------
@@ -812,7 +2234,7 @@ line from \verb|<basept>+<nodexpr1>| to \verb|<basept>+<nodexpr2>|.
\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)}
+\psxline[linecolor=blue]{->}(P){}{.5(Q)}%can use } for {(0,0)}
\end{pspicture}
\end{LTXexample}
\vspace{2pc}
diff --git a/Master/texmf-dist/doc/generic/pst-node/pst-node97.tex b/Master/texmf-dist/doc/generic/pst-node/pst-node97.tex
new file mode 100644
index 00000000000..5df456f3d0b
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-node/pst-node97.tex
@@ -0,0 +1,390 @@
+%% BEGIN: pst-node.tex
+%% Generated on <1993/3/12> from `pst-node.doc'.
+%% For use with the PostScript header file `pst-node.pro'.
+%%
+\def\fileversion{0.93a}
+\def\filedate{93/03/12}
+%%
+%% pst-node.tex: Node macros for PSTricks.
+%% See the PSTricks read-me file and the User's Guide for documentation.
+%%
+%% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% Copying of part or all of any file in the pstricks.tex package
+%% is allowed under the following conditions only:
+%% (1) You may freely distribute unchanged copies of the files. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of any file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the files, for personal use or for use
+%% in a macro package for distribution, as long as credit is given
+%% where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% these files or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+\csname PSTnodesLoaded\endcsname
+\let\PSTnodesLoaded\endinput
+\ifx\PSTricksLoaded\endinput\else
+\def\next{\input pstricks.tex}\expandafter\next
+\fi
+\edef\TheAtCode{\the\catcode`\@}
+\catcode`\@=11
+\pstheader{pst-node.pro}
+\def\pst@nodedict{tx@NodeDict begin }
+\def\pst@getnode#1#2{%
+\pst@expandafter\pst@@getnode{#1} * \@nil{#1}#2}
+\def\pst@@getnode#1#2 #3\@nil#4#5{%
+\ifcat#1a\relax
+\def#5{/TheNode#1#2 }%
+\else
+\def#5{/BadNode }%
+\@pstrickserr{Bad node name: `#4'}\@ehpa
+\fi}
+\def\tx@NewNode{NewNode }
+\def\pst@newnode#1#2#3#4{%
+\leavevmode
+\pst@getnode{#1}\pst@thenode
+\pst@Verb{%
+\pst@nodedict
+{ #3 } \pst@thenode #2 { #4 } \tx@NewNode
+end}}
+\def\tx@InitPnode{InitPnode }
+\def\pnode{\@ifnextchar({\pnode@}{\pnode@(0,0)}}
+\def\pnode@(#1)#2{%
+\pst@@getcoor{#1}%
+\pst@newnode{#2}{10}{\pst@coor}{\tx@InitPnode}%
+\ignorespaces}
+\def\tx@InitCnode{InitCnode }
+\def\cnode{\def\pst@par{}\pst@object{cnode}}
+\def\cnode@i{\@ifnextchar({\cnode@ii}{\cnode@ii(0,0)}}
+\def\cnode@ii(#1)#2#3{%
+\begingroup
+\use@par
+\pscircle@do(#1){#2}%
+\pst@@getcoor{#1}%
+\pssetlength\pst@dimc{#2}%
+\pst@newnode{#3}{11}{%
+\pst@coor
+\pst@number\pst@dimc
+\pst@number\pslinewidth
+\psk@dimen .5 sub mul sub}%
+{\tx@InitCnode}%
+\endgroup
+\ignorespaces}
+\def\cnodeput{\def\pst@par{}\pst@object{cnodeput}}
+\def\cnodeput@i{%
+\begingroup
+\pst@killglue
+\leavevmode
+\pst@getrputrot
+\cnodeput@ii}
+\def\cnodeput@ii(#1)#2{%
+\pst@makebox{\cput@iii{\cnodeput@iii{#2}}(#1)}}
+\def\cnodeput@iii#1{%
+\pst@newnode{#1}{11}{\pscirclebox@iv \pst@number\pslinewidth add}%
+{\tx@InitCnode}}
+\def\circlenode{\def\pst@par{}\pst@object{circlenode}}
+\def\circlenode@i#1{\pst@makebox{\pscirclebox@ii{\cnodeput@iii{#1}}}}
+\def\tx@GetRnodePos{GetRnodePos }
+\def\tx@InitRnode{InitRnode }
+\def\rnode{\begingroup\pst@getref\rnode@}
+\def\rnode@#1{\pst@makebox{\rnode@@{#1}}}
+\def\rnode@@#1{%
+\ifx\refpoint@x\relax
+\def\refpoint@y{.5}%
+\def\refpoint@x{.5}%
+\fi
+\pst@newnode{#1}{16}{}{%
+\ifx\refpoint@x\relax .5 \else \refpoint@y\space \fi
+\pst@number{\ht\pst@hbox}%
+\pst@number{\dp\pst@hbox}%
+\ifx\refpoint@y\@empty true \else false \fi
+\refpoint@x\space
+\pst@number{\wd\pst@hbox}%
+\tx@InitRnode}%
+\box\pst@hbox
+\endgroup}
+\def\tx@InitRNode{InitRNode }
+\def\Rnode{\@ifnextchar({\Rnode@}{\Rnode@(\RnodeRef)}}
+\def\Rnode@(#1)#2{\pst@makebox{\Rnode@@(#1){#2}}}
+\def\Rnode@@(#1)#2{%
+\begingroup
+\pst@@getcoor{#1}%
+\pst@newnode{#2}{16}{%
+\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}%
+\pst@number{\wd\pst@hbox}\pst@coor}{\tx@InitRNode}%
+\box\pst@hbox
+\endgroup}
+\def\RnodeRef{0,.7ex}
+\def\tx@GetOnodePos{GetOnodePos }
+\def\ovalnode{\def\pst@par{}\pst@object{ovalnode}}
+\def\ovalnode@i#1{\pst@makebox{\psovalbox@ii{\ovalnode@ii{#1}}}}
+\def\ovalnode@ii#1{%
+\pst@newnode{#1}{14}{}{%
+/X \pst@number{\wd\pst@hbox}2 div def
+/Y \pst@number\pst@dimg 2 div \pst@number{\dp\pst@hbox}sub def
+/w \pst@number\pst@dima def
+/h \pst@number\pst@dimb def
+/NodePos { \tx@GetOnodePos } def}}
+\def\tx@GetCenter{GetCenter }
+\def\tx@GetAngle{GetAngle }
+\def\tx@GetEdge{GetEdge }
+\def\tx@GetPos{GetPos }
+\def\check@arrow#1#2{%
+\check@@arrow#2-\@nil
+\if@pst
+\addto@par{arrows=#2}%
+\def\next{#1}%
+\else
+\def\next{#1{#2}}%
+\fi
+\next}
+\def\check@@arrow#1-#2\@nil{%
+\ifx\@nil#2\@nil\@pstfalse\else\@psttrue\fi}
+\def\tx@InitNC{InitNC }
+\def\nc@object#1#2#3#4{%
+\begin@OpenObj
+\showpointsfalse
+\pst@getnode{#1}\pst@tempa
+\pst@getnode{#2}\pst@tempb
+\gdef\lputpos@default{#3}%
+\addto@pscode{%
+\pst@nodedict
+\psk@offsetA
+\psk@offsetB neg
+\psk@nodesepA
+\psk@nodesepB
+\pst@tempa
+\pst@tempb
+\tx@InitNC { #4 } if
+end}%
+\def\use@pscode{%
+\pst@Verb{gsave \tx@STV newpath \pst@code\space grestore}%
+\gdef\pst@code{}}%
+\end@OpenObj}
+\def\lputpos@default{.5}
+\def\pc@object#1{%
+\@ifnextchar({\pc@@object#1}{\pst@getarrows{\pc@@object#1}}}
+\def\pc@@object#1(#2)(#3){%
+\pnode(#2){@@A}\pnode(#3){@@B}%
+#1{@@A}{@@B}}
+\def\psset@nodesepA#1{\pst@getlength{#1}\psk@nodesepA}
+\def\psset@nodesepB#1{\pst@getlength{#1}\psk@nodesepB}
+\def\psset@nodesep#1{%
+\psset@nodesepA{#1}\let\psk@nodesepB\psk@nodesepA}
+\psset@nodesep{0}
+\def\psset@offsetA#1{\pst@getlength{#1}\psk@offsetA}
+\def\psset@offsetB#1{\pst@getlength{#1}\psk@offsetA}
+\def\psset@offset#1{%
+\psset@offsetA{#1}\let\psk@offsetB\psk@offsetA}
+\psset@offset{0}
+\def\psset@armA#1{\pst@getlength{#1}\psk@armA}
+\def\psset@armB#1{\pst@getlength{#1}\psk@armB}
+\def\psset@arm#1{\psset@armA{#1}\let\psk@armB\psk@armA}
+\psset@arm{10pt}
+\def\psset@angleA#1{\pst@getangle{#1}\psk@angleA}
+\def\psset@angleB#1{\pst@getangle{#1}\psk@angleB}%
+\def\psset@angle#1{\pst@getangle{#1}\psk@angleA
+\let\psk@angleB\psk@angleA}
+\psset@angle{0}
+\def\psset@arcangleA#1{\pst@getangle{#1}\psk@arcangleA}
+\def\psset@arcangleB#1{\pst@getangle{#1}\psk@arcangleB}%
+\def\psset@arcangle#1{\pst@getangle{#1}\psk@arcangleA
+\let\psk@arcangleB\psk@arcangleA}
+\psset@arcangle{8}
+\def\psset@ncurvA#1{\pst@checknum{#1}\psk@ncurvA}
+\def\psset@ncurvB#1{\pst@checknum{#1}\psk@ncurvB}%
+\def\psset@ncurv#1{\psset@ncurvA{#1}\let\psk@ncurvB\psk@ncurvA}
+\psset@ncurv{.67}
+\def\tx@LineMP{LineMP }
+\def\tx@NCCoor{NCCoor }
+\def\tx@NCLine{NCLine }
+\def\ncline{\def\pst@par{}\pst@object{ncline}}
+\def\ncline@i{\check@arrow{\ncline@ii}}
+\def\ncline@ii#1#2{\nc@object{#1}{#2}{.5}{\tx@NCLine}}
+\def\pcline{\def\pst@par{}\pst@object{pcline}}
+\def\pcline@i{\pc@object\ncline@ii}
+\def\ncLine{\def\pst@par{}\pst@object{ncLine}}
+\def\ncLine@i{\check@arrow{\ncLine@ii}}
+\def\ncLine@ii#1#2{\nc@object{#1}{#2}{.5}%
+{\tx@NCLine
+/LPutVar [
+nodeA \tx@GetCenter
+nodeB \tx@GetCenter
+3 1 roll 4 1 roll
+] cvx def }}
+\def\tx@BezierMidpoint{BezierMidpoint }
+\def\tx@GetArms{GetArms }
+\def\tx@NCCurve{NCCurve }
+\def\nccurve{\def\pst@par{}\pst@object{nccurve}}
+\def\nccurve@i{\check@arrow{\nccurve@ii}}
+\def\nccurve@ii#1#2{\nc@object{#1}{#2}{.5}{%
+/AngleA \psk@angleA\space def /AngleB \psk@angleB\space def
+\psk@ncurvB\space \psk@ncurvA\space
+\tx@NCCurve}}
+\def\pccurve{\def\pst@par{}\pst@object{pccurve}}
+\def\pccurve@i{\pc@object\nccurve@ii}
+\def\ncarc{\def\pst@par{}\pst@object{ncarc}}
+\def\ncarc@i{\check@arrow{\ncarc@ii}}
+\def\ncarc@ii#1#2{\nc@object{#1}{#2}{.5}{%
+\tx@GetAngle dup
+\psk@arcangleA\space add /AngleA ED
+\psk@arcangleB\space sub 180 add /AngleB ED
+\psk@ncurvB\space \psk@ncurvA\space
+\tx@NCCurve}}
+\def\pcarc{\def\pst@par{}\pst@object{pcarc}}
+\def\pcarc@i{\pc@object\ncarc@ii}
+\def\tx@AnglesMP{AnglesMP }
+\def\tx@NCAngles{NCAngles }
+\def\ncangles{\def\pst@par{}\pst@object{ncangles}}
+\def\ncangles@i{\check@arrow{\ncangles@ii}}
+\def\ncangles@ii#1#2{%
+\nc@object{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngles}}
+\def\ncangles@iii{%
+tx@Dict begin
+\ifdim\pslinearc>\z@
+/r \pst@number\pslinearc def
+/Lineto { \tx@Arcto } def
+\else
+/Lineto { L } def
+\fi
+end
+/AngleA \psk@angleA\space def /AngleB \psk@angleB\space def
+/armA \psk@armA\space def /armB \psk@armB\space def }
+\def\pcangles{\def\pst@par{}\pst@object{pcangles}}
+\def\pcangles@i{\pc@object\ncangles@ii}
+\def\tx@NCAngle{NCAngle }
+\def\ncangle{\def\pst@par{}\pst@object{ncangle}}
+\def\ncangle@i{\check@arrow{\ncangle@ii}}
+\def\ncangle@ii#1#2{%
+\nc@object{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngle}}
+\def\pcangle{\def\pst@par{}\pst@object{pcangle}}
+\def\pcangle@i{\pc@object\ncangle@ii}
+\def\tx@NCBar{NCBar }
+\def\ncbar{\def\pst@par{}\pst@object{ncbar}}
+\def\ncbar@i{\check@arrow{\ncbar@ii}}
+\def\ncbar@ii#1#2{\nc@object{#1}{#2}{1.5}{%
+\ncangles@iii /AngleB \psk@angleA def \tx@NCBar}}
+\def\pcbar{\def\pst@par{}\pst@object{pcbar}}
+\def\pcbar@i{\pc@object\ncbar@ii}
+\def\tx@NCDiag{NCDiag }
+\def\ncdiag{\def\pst@par{}\pst@object{ncdiag}}
+\def\ncdiag@i{\check@arrow{\ncdiag@ii}}
+\def\ncdiag@ii#1#2{%
+\nc@object{#1}{#2}{1.5}{\ncangles@iii \tx@NCDiag}}
+\def\pcdiag{\def\pst@par{}\pst@object{pcdiag}}
+\def\pcdiag@i{\pc@object\ncdiag@ii}
+\def\tx@NCDiagg{NCDiagg }
+\def\ncdiagg{\def\pst@par{}\pst@object{ncdiagg}}
+\def\ncdiagg@i{\check@arrow{\ncdiagg@ii}}
+\def\ncdiagg@ii#1#2{%
+\nc@object{#1}{#2}{.5}{\ncangles@iii \tx@NCDiagg}}
+\def\pcdiagg{\def\pst@par{}\pst@object{pcdiagg}}
+\def\pcdiagg@i{\pc@object\ncdiagg@ii}
+\def\tx@LoopMP{LoopMP }
+\def\tx@NCLoop{NCLoop }
+\def\psset@loopsize#1{\pst@getlength{#1}\psk@loopsize}
+\psset@loopsize{1cm}
+\def\ncloop{\def\pst@par{}\pst@object{ncloop}}
+\def\ncloop@i{\check@arrow{\ncloop@ii}}
+\def\ncloop@ii#1#2{%
+\nc@object{#1}{#2}{2.5}%
+{\ncangles@iii /loopsize \psk@loopsize\space def \tx@NCLoop}}
+\def\pcloop{\def\pst@par{}\pst@object{pcloop}}
+\def\pcloop@i{\pc@object\ncloop@ii}
+\def\tx@NCCircle{NCCircle }
+\def\nccircle{\def\pst@par{}\pst@object{nccircle}}
+\def\nccircle@i{\check@arrow{\nccircle@ii}}
+\def\nccircle@ii#1#2{%
+\pssetlength\pst@dima{#2}%
+\nc@object{#1}{#1}{.5}{%
+/AngleA \psk@angleA def
+/r \pst@number\pst@dima def
+\tx@NCCircle \psarc@v end}}
+\def\pst@getlputrot#1{%
+\@ifnextchar(%
+{\def\pst@rot{}#1}%
+{\pst@@getlputrot{\@ifnextchar({#1}{#1(\lputpos@default)}}}}
+\def\pst@@getlputrot#1#2{%
+\pst@expandafter{\@ifnextchar:{\pst@@@getlputrot}%
+{\@ifstar{\pst@@@getrot}{\pst@@getrot}}}{#2}\@nil
+\ifx\pst@rotlist\@empty\else
+\edef\pst@rotlist{\pst@rotlist \pst@rot add }%
+\fi
+#1}
+\def\pst@@@getlputrot#1#2\@nil{%
+\pst@@getrot#2\@nil
+\edef\pst@rot{langle \ifx\pst@rot\@empty\else\pst@rot add \fi}}%
+\def\tx@LPutCoor{LPutCoor }
+\def\psput@lput#1#2{%
+\pst@checknum{#1}\pst@tempa
+\hbox{%
+\pst@Verb{%
+\pst@nodedict
+/t \pst@tempa\space def
+\tx@LPutCoor
+end
+\tx@PutBegin}%
+\box#2%
+\pst@Verb{\tx@PutEnd}}}
+\def\lput{\begin@psput{\pst@getref{\pst@getlputrot{\end@psput\lput@i}}}}
+\def\lput@i(#1){%
+\pst@makesmall\pst@hbox
+\ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi
+\psput@lput{#1}\pst@hbox}
+\def\mput{%
+\begin@psput{\def\pst@rot{}\pst@getref{\end@psput\lput@i(\lputpos@default)}}}
+\def\aput@#1{\begin@psput{%
+\def\pst@refangle{#1 }%
+\@ifnextchar[{\aput@i}{\pst@getlputrot{\end@psput\aput@ii}}}}
+\def\aput@i[#1]{%
+\pssetlength\pslabelsep{#1}\pst@getlputrot{\end@psput\aput@ii}}
+\def\aput@ii(#1){%
+\uput@iv\aput@iii
+\psput@lput{#1}\pst@hbox}
+\def\aput@iii{exch pop add a \tx@PtoC h1 add exch w1 add exch }
+\def\aput{\aput@{langle 90 add}}
+\def\bput{\aput@{langle 90 sub}}
+\def\Aput@#1{\begin@psput{%
+\def\pst@refangle{#1 }%
+\def\pst@rot{}%
+\@ifnextchar[{\Aput@i}{\end@psput\aput@ii(\lputpos@default)}}}
+\def\Aput@i[#1]{%
+\pssetlength\pslabelsep{#1}%
+\end@psput\aput@ii(\lputpos@default)}
+\def\Aput{\Aput@{langle 90 add}}
+\def\Bput{\Aput@{langle 90 sub}}
+\def\Lput{%
+\begin@psput{\pst@getlabelsep{\pst@getlputrot{\end@psput{\Rput@i\lput@i}}}}}
+\def\Mput{%
+\begin@psput{%
+\def\pst@rot{}%
+\pst@getlabelsep{\end@psput{\Rput@i\lput@i}(\lputpos@default)}}}
+\def\node@coor#1;#2\@nil{%
+\pst@getnode{#1}\pst@tempg
+\edef\pst@coor{%
+\pst@nodedict
+tx@NodeDict \pst@tempg known
+{ \pst@tempg load \tx@GetCenter }
+{ 0 0 }
+ifelse
+end }}
+\def\Node@coor[#1]#2;#3\@nil{%
+\begingroup
+\psset{#1}%
+\pst@getnode{#2}\pst@tempg
+\xdef\pst@tempg{%
+\pst@nodedict
+tx@NodeDict \pst@tempg known
+{ \psk@offsetA \psk@angleA \psk@nodesepA \pst@tempg load \tx@GetEdge }
+{ 0 0 }
+ifelse
+end }%
+\endgroup
+\let\pst@coor\pst@tempg}
+\catcode`\@=\TheAtCode\relax
+\endinput
+%%
+%% END: pst-node.tex