diff options
Diffstat (limited to 'Master/texmf-dist/source/generic/pstricks/psd-cust.tex')
-rw-r--r-- | Master/texmf-dist/source/generic/pstricks/psd-cust.tex | 406 |
1 files changed, 0 insertions, 406 deletions
diff --git a/Master/texmf-dist/source/generic/pstricks/psd-cust.tex b/Master/texmf-dist/source/generic/pstricks/psd-cust.tex deleted file mode 100644 index 03441baca4f..00000000000 --- a/Master/texmf-dist/source/generic/pstricks/psd-cust.tex +++ /dev/null @@ -1,406 +0,0 @@ -%% BEGIN psd-cust.tex - -\part{Custom graphics\label{P-custom}} - -\Section{The basics} - -PSTricks contains a large palette of graphics objects, but sometimes you need -something special. For example, you might want to shade the region between two -curves. The - \Mac \pscustom`*[par]'{commands} -command lets you ``roll you own'' graphics object. - -Let's review how PostScript handles graphics. A \emph{path} is a line, in the -mathematical sense rather than the visual sense. A path can have several -disconnected segments, and it can be open or closed. PostScript has various -operators for making paths. The end of the path is called the \emph{current -point}, but if there is no path then there is no current point. To turn the -path into something visual, PostScript can \emph{fill} the region enclosed by -the path (that is what \p{fillstyle} and such are about), and \emph{stroke} the -path (that is what \p{linestyle} and such are about). - -At the beginning of \n\pscustom, there is no path. There are various commands -that you can use in \n\pscustom{} for drawing paths. Some of these (the open -curves) can also draw arrows. \n\pscustom{} fills and strokes the path at the -end, and for special effects, you can fill and stroke the path along the way -using \n\fill{} and \n\stroke{} (see below). - -\begin{drivers} -\n\pscustom{} uses \n\pstverb{} and \n\pstunit. There are system-dependent -limits on how long the argument of "\special" can be. You may run into this -limit using \n\pscustom{} because all the PostScript code accumulated by -\n\pscustom{} is the argument of a single "\special" command. -\end{drivers} - -\Section{Parameters} - -You need to keep the separation between drawing, stroking and filling paths in -mind when setting graphics parameters. The \p{linewidth} and \p{linecolor} -parameters affect the drawing of arrows, but since the path commands do not -stroke or fill the paths, these parameters, and the \p{linestyle}, -\p{fillstyle} and related parameters, do not have any other effect (except -that in some cases \p{linewidth} is used in some calculations when drawing the -path). \n\pscustom{} and \n\fill{} make use of \p{fillstyle} and related -parameters, and \n\pscustom{} and \n\stroke{} make use of p{linestyle} and -related parameters. - -For example, if you include -\begin{LVerbatim} - \psline[linewidth=2pt,linecolor=blue,fillstyle=vlines]{<-}(3,3)(4,0) -\end{LVerbatim} -in \n\pscustom, then the changes to \p{linewidth} and \p{linecolor} will -affect the size and color of the arrow but not of the line when it is stroked, -and the change to \p{fillstyle} will have no effect at all. - -The \p{shadow}, \p{border}, \p{doubleline} and \p{showpoints} parameters are -disabled in \n\pscustom, and the \p{origin} and \p{swapaxes} parameters only -affect \n\pscustom{} itself, but there are commands (described below) that let -you achieve these special effects. - -The \p{dashed} and \p{dotted} line styles need to know something about the -path in order to adjust the dash or dot pattern appropriately. You can give -this information by setting the -\begin{Ex} - \Par{linetype=int} -\end{Ex} -parameter. If the path contains more than one disconnected segment, there is -no appropriate way to adjust the dash or dot pattern, and you might as well -leave the default value of \p{linetype}. Here are the values for simple paths: -\begin{center} -\begin{tabular}{cl} - \emph{Value} & \emph{Type of path}\\ - 0 & Open curve without arrows.\\ - -1 & Open curve with an arrow at the beginning.\\ - -2 & Open curve with an arrow at the end.\\ - -3 & Open curve with an arrow at both ends.\\ - 1 & Closed curve with no particular symmetry.\\ - $n$\textgreater 1 & Closed curve with $n$ symmetric segments. -\end{tabular} -\end{center} - -\Section{Graphics objects} - -You can use most of the graphics objects in \n\pscustom. These draw paths and -making arrows, but do not fill and stroke the paths. - -There are three types of graphics objects: -\begin{description} -\item[Special] - Special graphics objects include \n\psgrid, \n\psdots, \n\qline{} and -\n\qdisk. You cannot use special graphics objects in \n\pscustom. - -\item[Closed] - You are allowed to use closed graphics objects in \n\pscustom, but their -effect is unpredictable.\footnote{% -The closed objects never use the current point as an coordinate, but typically -they will close any existing paths, and they might draw a line between the -currentpoint and the closed curved.} -Usually you would use the open curves plus \n\closepath{} (see below) to draw -closed curves. - -\item[Open]The open graphics objects are the most useful commands for drawing -paths with \n\pscustom. By piecing together several open curves, you can draw -arbitrary paths. The rest of this section pertains to the open graphics -objects. -\end{description} - - By default, the open curves draw a straight line between the current point, -if it exists, and the beginning of the curve, except when the curve begins -with an arrow. For example -\begin{MEx*}(3,3) - \pscustom{% - \psarc(0,0){1.5}{5}{85} - \psarcn{->}(0,0){3}{85}{5}} -\end{MEx*} - -Also, the following curves make use of the current point, if it exists, as a -first coordinate: -\begin{quote} - \n\psline{} and \n\pscurve.\\ - The plot commands, with the "line" or "curve" \p{plotstyle}.\\ - \n\psbezier\, if you only include three coordinates.\\ -\end{quote} -For example: -\begin{MEx*}(4,3) - \pscustom[linewidth=1.5pt]{% - \psplot[plotstyle=curve]{.67}{4}{2 x div} - \psline(4,3)} -\end{MEx*} -We'll see later how to make that one more interesting. Here is another example -\begin{MEx*}(4,3) - \pscustom{% - \psline[linearc=.2]{|-}(0,2)(0,0)(2,2) - \psbezier{->}(2,2)(3,3)(1,0)(4,3)} -\end{MEx*} - -However, you can control how the open curves treat the current point with the -\begin{Ex} - \Par{liftpen=0/1/2} -\end{Ex} -parameter. - -If \p{liftpen=0}, you get the default behavior described above. For example -\begin{MEx*}(4,3) - \pscustom[linewidth=2pt,fillstyle=solid,fillcolor=gray]{% - \pscurve(0,2)(1,2.5)(2,1.5)(4,3) - \pscurve(4,1)(3,0.5)(2,1)(1,0)(0,.5)} -\end{MEx*} - -If \p{liftpen=1}, the curves do not use the current point as the first -coordinate (except \n\psbezier, but you can avoid this by explicitly including -the first coordinate as an argument). For example: -\begin{MEx*}(4,3) - \pscustom[linewidth=2pt,fillstyle=solid,fillcolor=gray]{% - \pscurve(0,2)(1,2.5)(2,1.5)(4,3) - \pscurve[liftpen=1](4,1)(3,0.5)(2,1)(1,0)(0,.5)} -\end{MEx*} - -If \p{liftpen=2}, the curves do not use the current point as the first -coordinate, and they do not draw a line between the current point and the -beginning of the curve. For example -\begin{MEx*}(4,3) - \pscustom[linewidth=2pt,fillstyle=solid,fillcolor=gray]{% - \pscurve(0,2)(1,2.5)(2,1.5)(4,3) - \pscurve[liftpen=2](4,1)(3,0.5)(2,1)(1,0)(0,.5)} -\end{MEx*} - -Later we will use the second example to fill the region between the two -curves, and then draw the curves. - -\Section{Safe tricks} - -The commands described under this heading, which can only be used in -\n\pscustom, do not run a risk of PostScript errors (assuming your document -compiles without \TeX{} errors). - -Let's start with some path, fill and stroke commands: -\begin{description} - -\mitem \newpath - -Clear the path and the current point. - -\mitem \moveto(coor) - - This moves the current point to \c{}. - -\mitem \closepath - - This closes the path, joining the beginning and end of each piece (there may -be more than one piece if you use \n\moveto).\footnote{% -Note that the path is automatically closed when the region is filled. Use -\n\closepath{} if you also want to close the boundary.} - -\mitem \stroke`[par]' - - This strokes the path (non-destructively). \n\pscustom{} automatically -strokes the path, but you might want to stroke it twice, e.g., to add a -border. Here is an example that makes a double line and adds a border (this -example is kept so simple that it doesn't need \n\pscustom{} at all): -\begin{MEx*}(4,3) - \psline(0,3)(4,0) - \pscustom[linecolor=white,linewidth=1.5pt]{% - \psline(0,0)(4,3) - \stroke[linewidth=5\pslinewidth] - \stroke[linewidth=3\pslinewidth,linecolor=black]} -\end{MEx*} - -\mitem \fill`[par]' - - This fills the region (non-destructively). \n\pscustom{} automatically fills -the region as well. - -\mitem \gsave - - This saves the current graphics state (i.e., the path, color, line width, -coordinate system, etc.) \n\grestore{} restores the graphics state. \n\gsave{} -and \n\grestore{} must be used in pairs, properly nested with respect to \TeX{} -groups. You can have have nested \n\gsave-\n\grestore{} pairs. - -\mitem \grestore - - See above. - -Here is an example that fixes an earlier example, using \n\gsave{} and -\n\grestore: -\begin{MEx}(4,3) - \psline{<->}(0,3)(0,0)(4,0) - \pscustom[linewidth=1.5pt]{ - \psplot[plotstyle=curve]{.67}{4}{2 x div} - \gsave - \psline(4,3) - \fill[fillstyle=solid,fillcolor=gray] - \grestore} -\end{MEx} -Observe how the line added by "\psline(4,3)" is never stroked, because it is -nested in "\gsave" and "\grestore". - -Here is another example: -\begin{MEx*}(4,3) - \pscustom[linewidth=1.5pt]{ - \pscurve(0,2)(1,2.5)(2,1.5)(4,3) - \gsave - \pscurve[liftpen=1](4,1)(3,0.5)(2,1)(1,0)(0,.5) - \fill[fillstyle=solid,fillcolor=gray] - \grestore} - \pscurve[linewidth=1.5pt](4,1)(3,0.5)(2,1)(1,0)(0,.5) -\end{MEx*} -Note how I had to repeat the second \n\pscurve{} (I could have repeated it -within \n\pscustom, with \p{liftpen=2}), because I wanted to draw a line -between the two curves to enclose the region but I didn't want this line to be -stroked. -\end{description} - -The next set of commands modify the coordinate system. -\begin{description} - -\mitem \translate(coor) - - Translate coordinate system by \c{}. This shifts everything that comes later -by \c{}, but doesn't affect what has already been drawn. - -\mitem \scale{num1 `num2'} - - Scale the coordinate system in both directions by <num1>, or horizontally by -<num1> and vertically by <num2>. - -\mitem \rotate{angle} - - Rotate the coordinate system by <angle>. - -\mitem \swapaxes - - Switch the x and y coordinates. This is equivalent to -\begin{LVerb} - \rotate{-90} - \scale{-1 1 scale} -\end{LVerb} - -\mitem \msave - - Save the current coordinate system. You can then restore it with -\n\mrestore. You can have nested \n\msave-\n\mrestore{} pairs. \n\msave{} and -\n\mrestore{} do not have to be properly nested with respect to \TeX{} groups or -\n\gsave{} and \n\grestore. However, remember that \n\gsave{} and \n\grestore -also affect the coordinate system. \n\msave-\n\mrestore{} lets you change the -coordinate system while drawing part of a path, and then restore the old -coordinate system without destroying the path. \n\gsave-\n\grestore, on the -other hand, affect the path and all other componments of the graphics state. - -\mitem \mrestore - - See above. -\end{description} - -And now here are a few shadow tricks: -\begin{description} -\mitem \openshadow`[par]' - -Strokes a replica of the current path, using the various shadow parameters. - -\mitem \closedshadow`[par]' - -Makes a shadow of the region enclosed by the current path as if it were opaque -regions. - -\mitem \movepath(coor) - -Moves the path by \c{}. Use \n\gsave-\n\grestore{} if you don't want to lose -the original path. -\end{description} - -\Section{Pretty safe tricks} - -The next group of commands are safe, \emph{as long as there is a current -point}! - -\begin{description} -\mitem \lineto(coor) - - This is a quick version of "\psline(<coor>)". - -\mitem \rlineto(coor) - - This is like \n\lineto, but \c{} is interpreted relative to the current -point. - -\mitem \curveto\c1\c2\c3 - - This is a quick version of "\psbezier"\c1\c2\c3. - -\mitem \rcurveto\c1\c2\c3 - - This is like \n\curveto, but \c1, \c2 and \c3 are interpreted relative to -the current point. -\end{description} - -\Section{For hackers only} - -For PostScript hackers, there are a few more commands. Be sure to read -Appendix \ref{S-raw} before using these. Needless to say: -\begin{Warning} -Misuse of the commands in this section can cause PostScript errors. -\end{Warning} - - The PostScript environment in effect with \n\pscustom{} has one unit equal to -one \TeX{} "pt". - -\begin{description} - -\mitem \code{code} - Insert the raw PostScript code. - -\mitem \dim{dim} - - Convert the PSTricks dimension to the number of "pt"'s, and inserts it in -the PostScript code. - -\mitem \coor\c1`\c2...\cn' - -Convert one or more PSTricks coordinates to a pair of numbers (using "pt" -units), and insert them in the PostScript code. - -\mitem \rcoor\c1`\c2...\cn' - -Like \n\coor, but insert the coordinates in reverse order. - -\mitem \file{file} - - This is like \n\code, but the raw PostScript is copied verbatim (except -comments delimited by "%") from <file>. - -\mitem \arrows{arrows} - - This defines the PostScript operators "ArrowA" and "ArrowB" so that -\begin{LVerb} - x2 y2 x1 y1 ArrowA - x2 y2 x1 y1 ArrowB -\end{LVerb} -each draws an arrow(head) with the tip at \c1 and pointing from \c2. "ArrowA" -leaves the current point at end of the arrowhead, where a connect line should -start, and leaves \c2 on the stack. "ArrowB" does not change the current -point, but leaves -\begin{LVerb} - x2 y2 x1' y1' -\end{LVerb} -on the stack, where \c{1'} is the point where a connecting line should join. -To give an idea of how this work, the following is roughly how PSTricks draws -a bezier curve with arrows at the end: -\begin{MEx*}(4,3) - \pscustom{ - \arrows{|->} - \code{ - 80 140 5 5 ArrowA - 30 -30 110 75 ArrowB - curveto}} -\end{MEx*} - -\mitem \setcolor{color} - - Set the color to <color>. - -\end{description} - -\endinput - -%% END psd-cust.tex |