diff options
Diffstat (limited to 'Master/texmf-dist/source/generic/pstricks/psd-node.tex')
-rw-r--r-- | Master/texmf-dist/source/generic/pstricks/psd-node.tex | 1279 |
1 files changed, 1279 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/pstricks/psd-node.tex b/Master/texmf-dist/source/generic/pstricks/psd-node.tex new file mode 100644 index 00000000000..e6504ca8bf2 --- /dev/null +++ b/Master/texmf-dist/source/generic/pstricks/psd-node.tex @@ -0,0 +1,1279 @@ +%% BEGIN psd-node.tex + +\part{Nodes and Node Connections\label{P-nodes}} + +% This is a file marker for pst-node (e.g., \File{pst-node}), defined as a node: +\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}}}% +All the commands described in this part are contained in the file +"pst-node.tex" / "pst-node.sty". + +The node and node connection macros let you connect information and place +labels, without knowing the exact position of what you are connecting or of +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! + +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 \n\pspicture, positioning and rotating them with \n\rput. You can also use +them in alignment environments. "pst-node.tex" contains a special alignment +environment, \n\psmatrix, which is designed for positioning nodes in a grid, +such as in mathematical diagrams and some graphs. \n\psmatrix{} is described in +Section \ref{S-psmatrix}. "pst-node.tex" 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{example**} + \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{example**} + +\Section{Nodes\label{S-nodes}} + +Nodes have a name. a boundary and a center. + +\begin{Warning} +The 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. +\end{Warning} + +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. + +Here are the nodes: + +\begin{description} + +\mitem \rnode`[refpoint]'{name}{stuff} + + \n\rnode{} puts <stuff> in a box. The center of the node is <refpoint>, which +you can specify the same way as for \n\rput. + +\oitem \Rnode{name}{stuff} + + \n\Rnode{} also makes a box, but the center is set differently. If you align +\n\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{example**} + \Large + \rnode{A}{sp} \hskip 2cm \rnode{B}{Bit} + \ncline{A}{B} +\end{example**} +With \n\Rnode, the center is determined relative to the baseline: +\begin{example**} + \Large + \Rnode{A}{sp} \hskip 2cm \Rnode{B}{Bit} + \ncline{A}{B} +\end{example**} + +You can usually get by without fiddling with the center of the node, but to +modify it you set the +\begin{Ex} + \Par{href=num} + \Par{vref=dim} +\end{Ex} +parameters. In the horizontal direction, the center is located fraction +\p{href} from the center to the edge. E.g, if \p{href=-1}, the center is on +the left edge of the box. In the vertical direction, the center is located +distance \p{vref} from the baseline. The \p{vref} parameter is evaluated each +time \n\Rnode{} is used, so that you can use "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). + +\mitem \pnode`\c~'{name} + + This creates a zero dimensional node at \c{}. + +\oitem \cnode`\c~'{radius}{name} + + This draws a circle. Here is an example with \n\pnode{} and \n\cnode: +\begin{MEx}(3,1.25) + \cnode(0,1){.25}{A} + \pnode(3,0){B} + \ncline{<-}{A}{B} +\end{MEx} + +\oitem \Cnode`\c~'{name} + + This is like \n\cnode, but the radius is the value of +\begin{Ex} + \Par{radius=dim} +\end{Ex} +This is convenient when you want many circle nodes of the same radius. + +\oitem \circlenode{name}{stuff} + + This is a variant of \n\pscirclebox{} that gives the node the shape of the +circle. + +\oitem \cnodeput`{angle}\c~'{name}{stuff} + + This is a variant of \n\cput{} that gives the node the shape of the +circle. That is, it is like +\begin{LVerb*} + \rput{<angle>}(<x>,<y>){\circlenode{<name>}{<stuff>}} +\end{LVerb*} + +\oitem \ovalnode{name}{stuff} + + This is a variant of \n\psovalbox{} that gives the node the shape of an +ellipse. Here is an example with \n\circlenode{} and \n\ovalnode: +\begin{example**} + \circlenode{A}{Circle} and \ovalnode{B}{Oval} + \ncbar[angle=90]{A}{B} +\end{example**} + + +\oitem \dianode{name}{stuff} + + This is like \n\diabox. + + +\oitem \trinode{name}{stuff} + + This is like \n\tribox. + +\begin{MEx}(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{MEx} + +\oitem \dotnode`\c~'{name} + + This is a variant of \n\psdot. For example: +\begin{MEx}(3,2) + \dotnode[dotstyle=triangle*,dotscale=2 1](0,0){A} + \dotnode[dotstyle=+](3,2){B} + \ncline[nodesep=3pt]{A}{B} +\end{MEx} + + +\oitem \fnode`\c~'{name} + + The "f" stands for ``frame''. This is like, but easier than, putting a +\n\psframe{} in an \n\rnode. +\begin{MEx}(3,2) + \fnode{A} + \fnode*[framesize=1 5pt](2,2){B} + \ncline[nodesep=3pt]{A}{B} +\end{MEx} +There are two differences between \n\fnode{} and \n\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 +\begin{Ex} + \Par{framesize=dim1 `dim2'} +\end{Ex} + parameter. If you omit <dim2>, you get a square frame. +\end{itemize} + +\end{description} + + +\Section{Node connections\label{S-nc}} + +All the node connection commands begin with "nc", and they all have the same +syntax:\footnote{% +The node connections can be used with \n\pscustom. The beginning of the node +connection is attached to the current point by a straight line, as with +\n\psarc.}$^,$\footnote{% +See page \protect\pageref{S-SpecialCoor} if you want to use the nodes as +coordinates in other PSTricks macros.} +\begin{LVerb*} + \<nodeconnection>[<par>]{<arrows>}{<nodeA>}{<nodeB>} +\end{LVerb*} +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 "A" and "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: +\begin{Ex} + \Par{nodesep=dim} +\end{Ex} +\p{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 \p{nodesepA} for +the first node, and set \p{nodesepB} for the second node. + +The first two node connections draw a line or arc directly between the two +nodes: +\begin{description} + +\oitem \ncline`{arrows}'{nodeA}{nodeB} + +This draws a straight line between the nodes. For example: +\begin{MEx}(4,3) + \rput[bl](0,0){\rnode{A}{Idea 1}} + \rput[tr](4,3){\rnode{B}{Idea 2}} + \ncline[nodesep=3pt]{<->}{A}{B} +\end{MEx} + +\oitem \ncarc`{arrows}'{nodeA}{nodeB} + +This connects the two nodes with an arc. +\begin{MEx}[-.5,-.5](3.5,2.5) + \cnodeput(0,0){A}{X} + \cnodeput(3,2){B}{Y} + \psset{nodesep=3pt} + \ncarc{->}{A}{B} + \ncarc{->}{B}{A} +\end{MEx} +The angle between the arc and the line between the two nodes is\footnote{% +Rather than using a true arc, \n\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, \n\ncarc{} is more +flexible than an arc, and works right connecting nodes of different shapes and +sizes. You can set \p{arcangleA} and \p{arcangleB} separately, and you can +control the curvature with the \p{ncurv} parameter, which is described on page +\pageref{p+ncurv}.} +\begin{Ex} + \Par{arcangle=angle} +\end{Ex} + +\end{description} + +\n\ncline{} and \n\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 +\begin{Ex} + \Par{angle=angle} +\end{Ex} +(and \p{angleA} and \p{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 +\begin{Ex} + \Par{arm=dim} +\end{Ex} +(and \p{armA} and \p{armB}) parameter. + +These node connections all consist of several line segments, including the +arms. The value of \p{linearc} is used for rounding the corners. + +Here they are, starting with the simplest one: + +\begin{description} + +\oitem \ncdiag`{arrows}'{nodeA}{nodeB} + +An arm is drawn at each node, joining at angle \p{angleA} or \p{angleB}, +and with a length of \p{armA} or \p{armB}. Then the two arms are connected +by a straight line, so that the whole line has three line segments. +For example: +\begin{MEx}(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{MEx} + +You can also set one or both of the arms to zero length. For example, if you +set \p{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 \n\ncline). Compare this use of \n\ncdiag{} with \n\ncline{} +in the following example: +\begin{MEx}[0,-.5](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{MEx} +(Note that in this example, the default value \p{angleA=0} is used.) + +\oitem \ncdiagg`{arrows}'{nodeA}{nodeB} + +\n\ncdiagg{} is similar to \n\ncdiag, but only the arm for node A is drawn. +The end of this arm is then connected directly to node B. Compare +\n\ncdiagg{} with \n\ncdiag{} when \p{armB=0}: +\begin{MEx}[-.5,-1](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{MEx} + + You can use \n\ncdiagg{} with \p{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. + +\oitem \ncbar`{arrows}'{nodeA}{nodeB} + + This node connection consists of a line with arms dropping ``down'', at +right angles, to meet two nodes at an angle \p{angleA}. Each arm is at least +of length \p{armA} or \p{armB}, but one may be need to be longer. +\begin{example**} + \rnode{A}{Connect} some \rnode{B}{words}! + \ncbar[nodesep=3pt,angle=-90]{<-**}{A}{B} + \ncbar[nodesep=3pt,angle=70]{A}{B} +\end{example**} + Generally, the whole line has three straight segments. + +\oitem \ncangle`{arrows}'{nodeA}{nodeB} + + + Now we get to a more complicated node connection. \n\ncangle{} typically +draws three line segments, like \n\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{MEx}(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{MEx} +Now watch what happens when we change \p{angleA}: +\begin{MEx}(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{MEx} + +\n\ncangle{} is also a good way to join nodes by a right angle, with just two +line segments, as in this example: +\begin{MEx}(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{MEx} + +\oitem \ncangles`{arrows}'{nodeA}{nodeB} + + \n\ncangles{} is similar to \n\ncangle, but the length of arm A is fixed by +he \p{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. \n\ncangles{} generally draws a total of four line segments.\footnote{% +Hence there is one more angle than \n\ncangle, and hence the "s" in +\n\ncangles.} +For example: +\begin{MEx}(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{MEx} + +Let's see what happens to the previous example when we change \p{angleB}: +\begin{MEx}(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{MEx} + +\oitem \ncloop`{arrows}'{nodeA}{nodeB} + + \n\ncloop{} is also in the same family as \n\ncangle{} and \n\ncangles, but +now typically 5 line segments are drawn. Hence, \n\ncloop{} can reach around +to opposite sides of the nodes. The lengths of the arms are fixed by \p{armA} +and \p{armB}. Starting at arm A, \n\ncloop{} makes a 90 degree turn to the +left, drawing a segment of length +\begin{Ex} + \Par{loopsize=dim} +\end{Ex} +This segment connects to arm B the way arm A connects to arm B with \n\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{example**} + "\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{example**} +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 \n\ncloop{} connects two different nodes: +\begin{example**} + \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{example**} + +\end{description} + +The next two node connections are a little different from the rest. + +\begin{description} +\oitem \nccurve`{arrows}'{nodeA}{nodeB} + + \n\nccurve{} draws a bezier curve between the nodes. +\begin{MEx}(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{MEx} +You specify the angle at which the curve joins the nodes by setting the +\p{angle} (and \p{angleA} and \p{angleB}) parameter. The distance to the +control points is set with the +\begin{Ex} + \Par{ncurv=num} +\end{Ex} +(and \p{ncurvA} and \p{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 \p{ncurvA} times the distance between the two endpoints.) + +\oitem \nccircle`{arrows}'{node}{radius} + +\n\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 +\p{angleA}. +\begin{example**} + "\vrule width 0pt height 1.4cm + \rnode{A}{\textbf{back}} + \nccircle[nodesep=3pt]{->}{A}{.7cm} + \kern 5pt +\end{example**} +\n\nccircle{} can only connect a node to itself; it is the only node +connection with this property. \n\nccircle{} is also special because it has an +additional argument, for specifying the radius of the circle. + +\end{description} + +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 \n\ncline{} and \n\ncarc. In both cases, the +half the width of the box is +\begin{Ex} + \Par{boxsize=dim} +\end{Ex} +You have to set this yourself to the right size, so that the nodes fit inside +the box. The \p{boxsize} parameter actually sets the \p{boxheight} and +\p{boxdepth} parameters. The ends of the boxes extend beyond the nodes by +\p{nodesepA} and \p{nodesepB}. + +\begin{description} + +\oitem \ncbox{nodeA}{nodeB} + \n\ncbox{} encloses the nodes in a box with straight sides. For example: +\begin{MEx}[0,-.5](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{MEx} + +\oitem \ncarcbox{nodeA}{nodeB} + + \n\ncarcbox{} encloses the nodes in a curved box that is \p{arcangleA} away +from the line connecting the two nodes. +\begin{MEx}[0,-.5](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{MEx} +The arc is drawn counterclockwise from node A to node B. + +\end{description} + +There is one other node connection parameter that applies to all the node +connections, except \n\ncarcbox: +\begin{Ex} + \Par{offset=dim} +\end{Ex} +(You can also set \p{offsetA} and \p{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 \n\ncline, as in the following example: +\begin{MEx}[-.5,-.5](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{MEx} + +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{example**} + \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{example**} + +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{MEx}[-.5,0](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{MEx} + +%%??? FIXME +If you set the \p{nodesep} or \p{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{MEx}[-.5,0](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{MEx} +Note also the use of \n\Rnode. + +One more parameter trick: By using the \p{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 \n\psline{} for connecting two points. There are variants of +the node connection commands for this purpose. Each begins with "pc" (for +``point connection'') rather than "nc". E.g., +\begin{LVerb} + \pcarc{<->}(3,4)(6,9) +\end{LVerb} +gives the same result as +\begin{LVerb} + \pnode(3,4){A} + \pnode(6,9){B} + \pcarc{<->}{A}{B} +\end{LVerb} + +Only \n\nccircle{} does not have a "pc" variant: +\begin{center} +\def\oitem{\GetMacroDef\oitemi} +\def\oitemi#1{\addtoquickref{object}{#1}{\MainFont\Main#1}} +\addtolength{\tabcolsep}{8pt} +\begin{tabular}{ll} + \emph{Command} & \emph{Corresponds to:}\\ + + \oitem \pcline`{arrows}'\c1\c2 + & \n\ncline\\ + + \oitem \pccurve`{arrows}'\c1\c2 + & \n\nccurve\\ + + \oitem \pcarc`{arrows}'\c1\c2 + & \n\ncarc\\ + + \oitem \pcbar`{arrows}'\c1\c2 + & \n\ncbar\\ + + \oitem \pcdiag`{arrows}'\c1\c2 + & \n\ncdiag\\ + + \oitem \pcdiagg`{arrows}'\c1\c2 + & \n\ncdiagg\\ + + \oitem \pcangle`{arrows}'\c1\c2 + & \n\ncangle\\ + + \oitem \pcangles`{arrows}'\c1\c2 + & \n\ncangles\\ + + \oitem \pcloop`{arrows}'\c1\c2 + & \n\ncloop\\ + + \oitem \pcbox\c1\c2 + & \n\ncbox\\ + + \oitem \pcarcbox\c1\c2 + & \n\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{Ex} + \object \ncput`*[par]'{stuff} + \object \naput`*[par]'{stuff} + \object \nbput`*[par]'{stuff} +\end{Ex} + +These three command differ in where the labels end up with respect to the line: +\begin{quote} +\begin{tabular}{ll} + \n\ncput & \emph{on} the line\\ + \n\naput & \emph{above} the line\\ + \n\nbput & \emph{below} the line +\end{tabular} +\end{quote} +(using the convention that node connections go from left to right). + +Here is an example: +\begin{MEx}[0,-1.5](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{MEx} + +\n\naput{} and \n\nbput{} use the same algorithm as \n\uput{} for displacing +the labels, and the distance beteen the line and labels is \p{labelsep} (at +least if the lines are straight). + +\n\ncput{} uses the same system as \n\rput{} for setting the reference +point. You change the reference point by setting the +\begin{Ex} + \Par{ref=ref} +\end{Ex} +parameter. + +Rotation is also controlled by a graphics parameter: +\begin{Ex} + \Par{nrot=rot} +\end{Ex} +<rot> can be in any of the forms suitable for \n\rput, and you can also use +the form +\begin{LVerb*} + {:<angle>} +\end{LVerb*} +The angle is then measured with respect to the node connection. E.g., if the +angle is "{: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 "{:<angle>}", the \p{offset} parameter, +and \n\pcline: +\begin{MEx}(4,2.3) + \pspolygon(0,0)(4,2)(4,0) + \pcline[offset=12pt]{|-|}(0,0)(4,2) + \ncput*[nrot=:U]{Length} +\end{MEx} + +Here is a repeat of an earlier example, now using "{:<angle>}": +\begin{MEx}[0,-1.5](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{MEx} + +The position on the node connection is set by the +\begin{Ex} + \Par{npos=num} +\end{Ex} +parameter, roughly according to the following scheme: Each node connection has +potentially one or more segments, including the arms and connecting lines. +A number \p{npos} between 0 and 1 picks a point on the first segment from node +"A" to "B" (fraction \p{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 \p{npos}. If you leave the +\p{npos} parameter value empty (e.g., "[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] + \n\ncline & 1 & $0\leq pos\leq 1$ & "0.5"\\ + \n\nccurve & 1 & $0\leq pos\leq 1$ & "0.5"\\ + \n\ncarc & 1 & $0\leq pos\leq 1$ & "0.5"\\ + \n\ncbar & 3 & $0\leq pos\leq 3$ & "1.5"\\ + \n\ncdiag & 3 & $0\leq pos\leq 3$ & "1.5"\\ + \n\ncdiagg & 2 & $0\leq pos\leq 2$ & "0.5"\\ + \n\ncangle & 3 & $0\leq pos\leq 3$ & "1.5"\\ + \n\ncangles & 4 & $0\leq pos\leq 4$ & "1.5"\\ + \n\ncloop & 5 & $0\leq pos\leq 5$ & "2.5"\\ + \n\nccircle & 1 & $0\leq pos\leq 1$ & "0.5"\\ + \n\ncbox & 4 & $0\leq pos\leq 4$ & "0.5"\\ + \n\ncarcbox & 4 & $0\leq pos\leq 4$ & "0.5" + \end{tabular} +\end{center} + +Here is an example: +\begin{MEx}(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{MEx} + +With \n\ncbox{} and \n\ncarcbox, the segments run counterclockwise, starting +with the lower side of the box. Hence, with \n\nbput{} the label ends up +outside the box, and with \n\naput{} the label ends up inside the box. +\begin{MEx}[0,-.5](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{MEx} + +If you set the parameter +\begin{Ex} + \Par{shortput=none/nab/tablr/tab} +\end{Ex} +to "nab", then immediately following a node connection or another node +connection label you can use "^" instead of \n\naput{} and "_" instead of +\n\nbput. +\begin{MEx}[0,-1.5](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{MEx} +You can still have parameter changes with the short "^" and "_" forms. Another +example is given on page \pageref{nab-example}. + +If you have set \p{shortput=nab}, and then you want to use a true "^" or "_" +character right after a node connection, you must precede the "^" or "_" by +"{}" so that PSTricks does not convert it to "\naput" or "\nbput". + +You can change the characters that you use for the short form with the + \Mac \MakeShortNab{<char1>}{<char2>} +command.\footnote{% +You can also use \n\MakeShortNab{} if you want to use "^" and "_" with +non-standard category codes. Just invoke the command after you have made your +"\catcode" changes.} + +The \p{shortput=tablr} and \p{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{Ex} + \object \tvput`*[par]'{stuff} + \object \tlput`*[par]'{stuff} + \object \trput`*[par]'{stuff} + \object \thput`*[par]'{stuff} + \object \taput`*[par]'{stuff} + \object \tbput`*[par]'{stuff} +\end{Ex} + +The difference between these commands and the "\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 "t" stands for ``tree''. + +You specify the position by setting the +\begin{Ex} + \Par{tpos=num} +\end{Ex} +parameter. + +\n\tvput, \n\tlput{} and \n\trput{} find the position that lies fraction +<tpos> in the \emph{vertical} direction from the upper node to the lower +node. \n\thput, \n\taput{} and \n\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} + \emph{Command} & \emph{Direction} & \emph{Placement}\\[3pt] + \n\tvput & vertical & middle\\ + \n\tlput & vertical & left\\ + \n\trput & vertical & right\\ + \n\thput & horizontal & middle\\ + \n\taput & horizontal & above\\ + \n\tbput & horizontal & below +\end{tabular} +\end{center} + +Here is an example: +\begin{example*} + \[ + \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{example*} +On the left is the diagram with \n\tlput, \n\trput\, \n\tbput{} and \n\Rnode, +as shown in the code. On the right is the same diagram, but with \n\naput\, +\n\nbput{} and \n\rnode. + +These do not have a rotation argument or parameter. However, you can rotate +<stuff> in 90 degree increments using box rotations (e.g., \n\rotateleft). + +If you set \p{shortput=tablr}, then you can use the following single-character +abbreviations for the "t" put commands:\label{tablr} +\begin{center} + \begin{tabular}{rl} + \emph{Char.} & \emph{Short for:}\\[2pt] + "^" & \n\taput \\ + "_" & \n\tbput \\ + \DeleteShortMeta "<" & \n\tlput \\ + ">" & \n\trput + \end{tabular} +\end{center} + +You can change the character abbreviations with + \Mac \MakeShortTablr{<char1>}{<char2>}{<char3>}{<char4>} + +The "t" put commands, including an example of \p{shortput=tablr}, will be +shown further when we get to mathematical diagrams and trees. + +\begin{drivers} The node macros use \n\pstVerb{} and \n\pstverbscale. +\end{drivers} + +\Section{Attaching labels to nodes} + +The command + \Mac \nput`*[par]'{refangle}{name}{stuff} +affixes <stuff> to node <name>. It is positioned distance \p{labelsep} from +the node, in the direction <refangle> from the center of the node. The +algorithm is the same as for \n\uput. If you want to rotate the node, set the +\begin{Ex} + \Par{rot=rot} +\end{Ex} +parameter, where <rot> is a rotation that would be valid for \n\rput.% +\footnote{Not to be confused with the "nput" parameter.} +The position of the label also takes into account the \p{offsetA} +parameter. If \p{labelsep} is negative, then the distance is from the center +of the node rather than from the boundary, as with \p{nodesep}. + +Here is how I used \n\nput{} to mark an angle in a previous example: +\begin{MEx}(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{MEx} + +\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 "\halign"primitive, \LaTeX's "tabular" environment, and \AmS-\TeX's +"\matrix", but PSTricks contains its own alignment environment that is +especially adapted for this purpose: +\begin{Ex} + \object \psmatrix{} ... \string\endpsmatrix +\end{Ex} + +Here is an example +\begin{example**} + $ + \psmatrix[colsep=1cm,rowsep=1cm] + & A \\ + B & E & C \\ + & D & + \endpsmatrix + $ +\end{example**} + +As an alignment environment, \n\psmatrix{} is similar to \AmS-\TeX's +"\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 "\\". \n\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 <col> is "{<row>,<col>}", with no spaces. Let's see some node +connections: +\begin{example**} + $ + \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{example**} + +You can include the node connections inside the \n\psmatrix, in the last entry +and right before \n\endpsmatrix. One advantage to doing this is that +\p{shortput=tab} is the default within a \n\psmatrix. +\begin{example**} + $ + \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{example**} + +You can change the kind of nodes that are made by setting the +\begin{Ex} + \Par{mnode=type} +\end{Ex} +parameter. Valid types are "R", "r", "C", "f", "p", "circle", "oval", "dia", +"tri", "dot" and "none", standing for \n\Rnode, \n\rnode, \n\Cnode, \n\fnode, +\n\pnode, \n\circlenode, \n\ovalnode, \n\dotnode{} and no node, +respectively. Note that for circles, you use \p{mnode=C} and set the radius +with the \p{radius} parameter. + +For example:\label{nab-example} +\begin{example**} + \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{example**} + +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 +\begin{Ex} + \Par{emnode=type} +\end{Ex} +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 \n\psset{} for +this purpose). For example: +\begin{example**} + $ + \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{example**} +If you want your entry to begin with a "[" that is not meant to indicate +parameter changes, the precede it by "{}". + +You can assign your own name to a node by setting the +\begin{Ex} + \Par{name=<name>} +\end{Ex} +parameter at the beginning of the entry, as described above. You can still +refer to the node by "{<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 "{<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 \n\psmatrix{} that + reuses the "{<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. \n\psmatrix{} achieves this by setting the +\begin{Ex} + \Par{nodealign=true/false} +\end{Ex} +parameter to "true". You can also set this parameter outside of \n\psmatrix{} +when you want this kind of alignment. + + \item You can left or right-justify the nodes by setting the +\begin{Ex} + \Par{mcol=l/r/c} +\end{Ex} +parameter. "l", "r" and "c" stand for "left", "right" and "center", +respectively. + + \item The space between rows and columns is set by the +\begin{Ex} + \Par{rowsep=dim} + \Par{colsep=dim} +\end{Ex} +parameters. + + \item If you want all the nodes to have a fixed width, set +\begin{Ex} + \Par{mnodesize=dim} +\end{Ex} +to a positive value. + + \item If \n\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 "$". + + \item The radius of the "c" \p{mnode} (corresponding to \n\cnode) is set by +the \p{radius} parameter. + + \item Like in \LaTeX, you can end a row with "\\[<dim>]" to insert an extra + space <dim> between rows. + + \item The command "\psrowhookii" is executed, if defined, at the beginning of + every entry in row "ii" (row 2), and the command "\pscolhookv" is executed at + athe beginning of every entry in column "v" (etc.). You can use these hooks, + for example, to change the spacing between two columns, or to use a special + \p{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 (<int>) columns, use the + \Mac \psspan{int} + \emph{at the end of the entry}. This is like Plain \TeX's \n\multispan, or + \LaTeX's \n\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 "\multispan{<int>}" \emph{at the beginning of the entry} instead. + If you just want to wipe out the template, use "\omit" before the entry. + + \item \n\psmatrix{} can be nested, but then all node connections and other + references to the nodes in the "{<row>,<col>}" form for the nested matrix + \emph{must go inside} the \n\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 \n\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 + \n\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 \n\Lput\MainIndex\Lput{} for putting labels +next to node connections. The syntax is +\begin{LVerb*} + \Lput{<labelsep>}[<refpoint>]{<rotation>}(<pos>){<stuff>} +\end{LVerb*} +It is a combination of \n\Rput{} and \n\lput, equivalent to +\begin{LVerb*} + \lput(<pos>){\Rput{<labelsep>}[<refpoint>]{<rotation>}(0,0){<stuff>}} +\end{LVerb*} +\n\Mput\MainIndex\Mput{} is a short version of \n\Lput{} with no +"{<rotation>}" or "(<pos>)" argument. \n\Lput{} and \n\Mput{} remain part of +PSTricks only for backwards compatibility. + +Here are the node label commands: +\begin{description} + +\mitem \lput`*[refpoint]{rotation}'(pos){stuff} + +The "l" stands for ``label''. Here is an example illustrating the use of the +optional star and ":<angle>" with \n\lput, as well as the use of the +\p{offset} parameter with \n\pcline: +\begin{MEx}(4,2.3) + \pspolygon(0,0)(4,2)(4,0) + \pcline[offset=12pt]{|-|}(0,0)(4,2) + \lput*{:U}{Length} +\end{MEx} +(Remember that with the "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 \n\lput{} and \n\rput, you have a lot of control over the position of the +label. E.g., +\begin{MEx}(4,2) + \pcline(0,0)(4,2) + \lput{:U}{\rput[r]{N}(0,.4){label}} +\end{MEx} +puts the label upright on the page, with right side located .4 centimeters +``above'' the position ".5" of the node connection (above if the node +connection points to the right). However, the \n\aput{} and \n\bput{} commands +described below handle the most common cases without \n\rput.\footnote{% +There is also an obsolete command \n\Lput\MainIndex\Lput{} for putting labels +next to node connections. The syntax is +\begin{LVerb*} + \Lput{<labelsep>}[<refpoint>]{<rotation>}(<pos>){<stuff>} +\end{LVerb*} +It is a combination of \n\Rput{} and \n\lput, equivalent to +\begin{LVerb*} + \lput(<pos>){\Rput{<labelsep>}[<refpoint>]{<rotation>}(0,0){<stuff>}} +\end{LVerb*} +\n\Mput\MainIndex\Mput{} is a short version of \n\Lput{} with no +"{<rotation>}" or "(<pos>)" argument. \n\Lput{} and \n\Mput{} remain part of +PSTricks only for backwards compatibility.} + +\mitem \aput`*[labelsep]{angle}'(pos){stuff} + + <stuff> is positioned distance \n\pslabelsep{} \emph{above} the node +connection, given the convention that node connections point to the right. +"\aput" is a node-connection variant of \n\uput. For example: +\begin{MEx}(4,2) + \pspolygon(0,0)(4,2)(4,0) + \pcline[linestyle=none](0,0)(4,2) + \aput{:U}{Hypotenuse} +\end{MEx} + +\mitem \bput`*[labelsep]{angle}'(pos){stuff} + + This is like \n\aput, but <stuff> is positioned \emph{below} the node +connection. + +\end{description} + + 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{Ex} + \object \mput`*[refpoint]'{stuff} + \object \Aput`*[labelsep]'{stuff} + \object \Bput`*[labelsep]'{stuff} +\end{Ex} +of \n\lput, \n\aput{} and \n\bput, respectively, that have no angle or +positioning argument. For example: +\begin{MEx}(4,2) + \cnode*(0,0){3pt}{A} + \cnode*(4,2){3pt}{B} + \ncline[nodesep=3pt]{A}{B} + \mput*{1} +\end{MEx} +Here is another: +\begin{MEx}(4,2) + \pcline{<->}(0,0)(4,2) + \Aput{Label} +\end{MEx} + +\endinput + +%% END psd-node.tex |