diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pstricks/base |
Initial commit
Diffstat (limited to 'graphics/pstricks/base')
75 files changed, 24402 insertions, 0 deletions
diff --git a/graphics/pstricks/base/Changes b/graphics/pstricks/base/Changes new file mode 100644 index 0000000000..77863478a3 --- /dev/null +++ b/graphics/pstricks/base/Changes @@ -0,0 +1,483 @@ +% $Id: Changes 934 2019-02-23 14:07:34Z herbert $ + + +Changelog for +pstricks.tex --------- +pst-fp.tex ----------- +xdvipdfmx.con -------- +vtex.con ------------- +pstricks-doc --------- +pstricks.pro --------- +pst-dots.pro --------- +pst-algparser.pro ---- +pstricks97.pro ------- +pstricks-pdf.sty ----- +pstricks.sty --------- +pst-all.sty --------- +%pstricks-pdf.sty ----- +%pst-platform.sty ---- + + +-------------------------------------------------------------------------- + + +pstricks.tex -------- +versions like 2.47a have only changes in other files, but not +in this main package. + +2.97 2019-05-11 - fix for trailing space with \pscustom +2.96 2019-02-23 - use \ifx\pgfkeysloaded\relax for the test +2.95 2019-01-22 - preset dimen=inner for a circle +2.94 2019-01-07 - added \psLine which can have only one or two pair of + coordinates which are tested for a distance zero +2.93 2019-01-07 - fix for changes in pgffor.code.tex +2.92 2018-12-24 - revert chnages for \psarc (don't work for nodes as angle) +2.91 2018-12-24 - bugfix for identical angles and \psellipticatc(n) +2.90a 2018-12-22 - added optional argument xetex for pstricks.sty +2.90 2018-12-17 - undocumented feature for x|y-offset of gridlabels +2.89 2018-12-16 - allow keysetting for \rput only for valid options +2.88 2018-12-13 - fix an introduced trailing space +2.87 2018-12-11 - allow key/value setting for \rput[key=vale,...](...) +2.86a 2018-11-14 - fix for latext Ghostscript, added PS function Power + which can be used instead of exp +2.86 2018-08-23 - fix for trailing space in showgrid (#1f) +2.85 2018-08-22 - fix for trailing space in \radians +2.84 2018-05-01 - use \long\def\@fornoop from recent LaTeX +2.83a 2018-02-08 - changes in pstricks.sty +2.82 2018-01-06 - allow ! notation in \psRing for the two radii +2.81 2018-01-01 - disable engine check (defined in pstricks.sty) +2.80a 2017-12-30 - added some PS functions for conversion of angles +2.80 2017-12-08 - fix for \radians +2.79 2017-11-27 - fix rounding error in \pscircle for a big linewidth +2.78 2017-11-26 - fix for a trailing space in oefill +2.77 2017-10-04 - fix bug with wrong position for catcode change of @ + (debian bug 877682) + - created new file pstricks-tex.def for the additional + latex macros when running tex + - define \ifpst@psfonts for the TeX part +2.76a 2017-09-23 - revert the changes for PtoC: PtoC360->PtoC (old meaning) + PtoC->PtoCrel (relativ) +2.76 2017-09-17 - use an optional argument to switch between + original PostScript or URW fonts (Nimbus) + default is URW +2.75a 2017-09-12 - modifications in pstricks.pro +2.75 2017-08-24 - use always URW fonts instead of PostScript, + eg Helvetica->NimbusSanL +2.74a 2017-07-16 - modified pstricks.sty +2.74 2017-06-15 - added a randomcolor for gray, rgb, cmyk and hsb +2.73a 2017-05-22 - revert unneeded changes in pst-fp +2.73 2017-05-18 - "understandable" error message when using pdflatex + without loading auto-pst-pdf +2.72b 2017-04-19 - uploaded wrong version +2.72a 2017-04-18 - fix bug with unicode-math in pst-doc.cls +2.72 2017-04-06 - load pgf related macros only when + not done by tikz itself +2.71 2016-12-23 - added optional argument to \newpsstyle +2.70 2016-09-23 - use strokeopacity for doubleline, too +2.69 2016-09-16 - use option draft instead of overfullrule +2.68 2016-06-09 - test for \overfullrule depending to latex +2.67 2016-05-28 - fix bug for \psCirclebox@ii. depth must be negative +2.66 2016-05-19 - do the allocation stuff only for + the original TeX and not eTeX +2.65a 2016-04-22 - fix in pstricks.pro +2.65 2016-02-07 - fix bug with pst@refangle +2.64b 2015-11-14 - fix bug in pstricks.sty +2.64a 2015-11-11 - new package pstricks-pdf.sty +2.64 2015-10-09 - fix for xetex and \psput@special +2.63 2015-09-11 - fix for xetex and \psput@special +2.62a 2015-07-27 - upload the correct pstricks.sty +2.62 2015-07-24 - added optional argument bgcolor +2.61 2015-06-28 - added optional arguments precode and postcode +2.60 2014-10-25 - make it compatible for using it with ConTeXt +2.57 2014-08-27 - take option correctAngle into account for \psellipticwedge +2.56 2014-07-31 - added gridstyleA and fixed bug with Ellipse and move + to start point +2.55 2014-07-28 - added \psellipseAB: draw an ellipse between two given points +2.54a 2014-05-19 - fixed introduced bug in pst-algparser.pro +2.54 2014-05-19 - allow circle and ellipse in \pscustom with moving + the currentpoint to the start point and not the center. +2.53a 2014-03-30 - changes in pst-algparser.pro +2.53 2014-03-12 - added cubic splines +2.52 2014-03-01 - allow rot=.. for all elliptic macros + - enable \SpecialCoor as default +2.51 2014-02-03 - make strokeopacity available for dots +2.50 2014-01-16 - added experimental fillstyle oefill, the inverse of eofill + - allow PostScript notation for \pst@checknum +2.49c 2013-12-27 - moved overlay functions into an own package +2.49b 2013-12-21 - moved overlay functions into an own dictionary +2.49a 2013-12-09 - changes in pstricks.sty +2.49 2013-12-09 - added \reversepath +2.48 2013-11-29 - fixed trailing space for !! +2.47a 2013-11-28 - changes in pst-ovl +2.47 2013-11-26 - added special coor type !! for Postfix notation + in user coordinates +2.46 2013-08-13 - fixed bug with \pstcustomize (delete a line) +2.45 2013-07-08 - moved the overlay part into pst-ovl + - added \@tfor macros if used without \LaTeX +2.44 2013-06-24 - add macros \pssetMonochrome and \pssetGrayscale + - added coor option ** for (f(y) y) +2.43 2013-05-12 - allow option ! to the labelsep of \uput +2.42 2013-04-26 - add option + for coordinates to allow + (+{x} {f(x)}) both in algebraic notation where + x must be expanded to a value. +2.41 2013-04-17 - add option for using the pgf PS functions. + in some cases they are missing. They are + defined in pst-tools.pro which is loaded + by default. +2.40 2013-04-05 - fix for showgrid=top. Uses now the + same units as showgrid=bottom + - added \psRing +2.39 2013-04-04 - fix for introduced bug for showgrid +2.38 2013-04-03 - fix for showgrid=true +2.37 2013-03-12 - fix for \uput@vii#1#2 +2.36 2013-02-09 - fix for introduced bug for pst@dotFill +2.35 2012-12-21 - fix for introduced bug with missing + definition for \@width +2.34 2012-11-18 - make package pgffor available +2.33 2012-09-23 - fix a trailing space in \pst@Pyth +2.32 2012-09-20 - added more blendmodes for distiller +2.31 2012-08-24 - fixed bug with the star version of \psellipticarc + and the additional setting of showpoints +2.30 2012-08-13 - fixed bug with the star version of \psellipticarc + - added fillstyle options eovlines, eohlines, + eovlines*, and eohlines* +2.29 2012-06-04 - fixed itroduced trailing space with boolkey +2.28 2012-05-24 - added \add@psCode, which uses \pstVerb + instead of \pstverb +2.27 2012-03-11 - activate \tx@strokeopacity for \psgrid +2.26 2012-02-19 - showgrid=top is now possible +2.25 2012-02-12 - modifications to the code of curveticks +2.24 2012-02-09 - add option for curveticks with option symbol +2.23 2011-09-04 - change also \psx|ylabelsep for pst-plot +2.22 2011-07-09 - added fillstyle dots +2.21 2011-06-07 - fix bug with a trailing space in \psForeach +2.20 2011-04-23 - load pst-tools.pro +2.19 2011-03-25 - fixed a bug with missing coordinates for pspicture +2.18 2011-02-15 - fixed a bug with correctAngle and showpoints of + \psellipticarc + - fixed introduced bug with arrowscale=... +2.17 2011-01-30 - added \psLoop for loops without a defined counter +2.16 2010-12-18 - added optional argument dashcolor and new linestyle + coloreddashed +2.15 2010-11-25 - bugfix for using \pstCheckCoorType +2.14 2010-11-14 - bugfix for using \pst@pyth. Now \pst@Pyth, which uses + no dimen registers +2.13 2010-11-01 - new macro and counter for the type of read coordinates + \pstCheckCoorType{#1} sets the macro \pst@C@@rType +% \pst@C@@rType = 0 cartesian (x,y) +% = 1 polar (r;phi) +% = 2 PS (! x y) +% = 3 mixed ((x,y)|(x,y)) +% = 4 algebraic (*x f(x)) +% = 5 node (A) +% = 6 special node ([...]A) +% = 7 node (>A) + +2.12 2010-09-16 - new optional argument for setflat + - fix bug with doubled linecap definition + - fix bug with missing linejoin in \psls@solid +2.11 2010-09-09 - new optional arguments for setting a variable + linewidth and variable color +2.10 2010-08-27 - new optional argument noCurrentPoint, which is + preset to false. +2.09 2010-07-28 - fix bug with rotation values like *0 (ms) +2.08 2010-06-06 - fix bug with uput@vii +2.07 2010-05-24 - fix bug with uput and node setting (ms) +2.06 2010-04-27 - fix bug with trailing space in \pst@isnum +2.05 2010-04-26 - fix bug with missing \psk@rot for Ellipse +2.04 2010-04-24 - take \psk@rot into account for \psellipse (hv) + - new version of \pst@divide (ms) +2.03 2010-04-12 - add keyword correctAngle=true to get an + elliptic arc with correct bow length +2.02 2010-02-23 - fix a spurious blank in \NormalCoor +2.01 2010-02-15 - fix problem with nonlinear angles for + \psellipticarc + - fix problem with tex: pst-xkey must be loaded + after we are sure having all latex macros + defined +2.00 2010-02-11 - use pst-xkey to get rid of dependencies with + other packages +1.33 2009-12-22 - add linestyle symbol +1.32 2009-12-14 - fixed bug with \hskip and fnode in psmatrix + with a new \pshspace#1 + - moved the algebraic option from pstricks-add + to the main pstricks.tex +1.31 2009-11-27 - fixed introduced problem with \pst@def +1.30 2009-10-25 - revert the changes for the \pst@object, it now + use \def\pst@par{} +1.29 2009-05-19 - new option pType for a parabola with two points +1.28 2009-03-17 - fix spurious blank for \SpecialCoor +1.27 2009-01-25 - updated \pssetlength to check for special coor + - renamed internal \next to \ps@next to prevent problems + with other packages + - added \psPline(p1)(p2)(p3) for the shortest distance + of P1 to the line p2p3 + - added \psarcAB and \psarcnAB for arcs with a given + center and two points +1.26 2008-07-31 - fixed bug with double arrow and arrowscale + - fix bug with arrows longer than the arc/line ... + - fix bug with pst@theheaders + - fix bug with trailing spaces +1.25 2008-06-17 added fill style penrose +1.24 2008-06-17 added \psDEBUG[#1]#2 for better dubugging +1.23 2008-05-23 - add octogon symbol (hv) + - fix bug with D>-<D (hv) +1.22 2008-04-14 - added shift=* option to get vertically centered + pspicture box. It is the old \pspciture[0.5] option + - add \pscircleOA(center)(point on the circle) +1.21 2008-01-24 - changed code for transparency making distiller work +1.20 2008-01-01 - added opacity for normal stroke operation (lines) + - added the arrowtype <D-D> and <D<D-D>D>, which draws the + sides as betier curves (ArrowD type in pstricks.pro) + - add special coor type (*x f(x)), which invokes the + algebraic parser for f(x) before using the default + (!x y) coor type + - add option linejoin=0,1,or 2 for connecting lines + - add option linecap=0,1,or 2 for line ends + - small tweaks to psellipticarc x y -> xOrig yOrig + - fix introduced bug with \newpsstyle: \pst@tempa->\pst@tempA + - add PS subroutines /UserCoor and /ScreenCoor for easy + transforming into user or screen coordinates + - changed wrong name of \psk@shift to \pst@shift + - fix bug with pst-node and \\[name=...]. It now uses + \ps@ifnextchar for scanning the next token + - fix bug with pst@tempg in \polar@coor. It was already used in + \pst@getangle. + - new option gridfont for the label font of \psgrid + can now be any of the PS-fonts Helvetica (Default), + Times-Roman, Palatino-Roman, ... +1.15a 2007-01-05 - \parabola->\psparabola (old name still valid) (hv) +1.15 2006-12-19 - add support for more dot styles (from Etienne Riga) +1.14c 2006-04-29 - add option linecap for dashed lines +1.14b 2006-04-20 - fix a bug in \psset@linetype +1.14a 2006-02-06 - revert the changes for pslongbox (introduced bug) +1.14 2005-12-17 - make the color part compatible to color/xcolor +1.13 2005-12-15 - fix bug of \psdot* +1.12 2005-10-25 - spurious blank for \multirput + - shift only for an absolute length + - add the missing arrows ]-[)-( +1.11 2005-09-08 - rename \rotateleft | right | down to + \psrotateleft | right | down to be consistant to the + other PSTricks macro names + - new fillstyle options + - move the code for arcs of an ellipse into pstricks.pro +1.10 2005-08-13 - fix bug with \multips (spurious blank) (hv) + - allow empty optional arrow argument \psline[..]{}(2,2) + - redefined \psarc@iv for negative loops of \nccircle + - introduce new options shift and showgrid for the + main pspicture environment + - rename \scalebox and \scaleboxto to + \psscalebox(to) to be consistant to the + other PSTricks macro names +1.08 2005-06-02 fix bug with \multips (spurious blank) (hv) +1.07 2005-05-06 make \nccircle working for counter-clockwise + orientation (hv) +1.06 2005-02-24 fix spurious blank in doublestroke (hv) + + + + +pst-fp.tex ----------- (hv) + v 0.06 2010-05-14 delete catcode change of @ + v 0.05 2010-01-17 add \pst@Int + add \pst@int + v 0.04 2009-11-24 add \pstFPadd + v 0.03 2009-11-14 add \pstFPmul + v 0.02 2009-04-02 initial version + + + + +xdvipdfmx.con ------ +0.05 2015-09-11 - move the fix into pstricks.tex +0.04 2015-09-11 - fix bug with wrong scaling for \psput@cartesian +0.03 2011-11-23 - fix bug with wrong scaling for nodes +0.02 2010-08-02 - uncomment redefinition of \pst@starbox +0.01 2007-03-11 - first CTAN version, must be renamed to pstricks.con + when used with XeTeX + + + +vtex.con ------ +0.02 2008-01-01 - disable transparent color setting + + + +pstricks-doc ----------- +2015-11-11 - updated news2015 +2015-07-25 - updated news2015 +2015-06-29 - new news2015 +2014-08-28 - updated news2014 +2014-07-28 - updated news2014 +2013-12-09 - updated news2009 and news2013 +2013-11-26 - updated news2013 +2013-04-17 - updated news2013 +2011-04-30 - extensions to pst-doc.cls v 0.19 +2011-04-20 - extensions to pst-doc.cls v 0.18 +2010-11-03 - extensions to pst-doc.cls v 0.16 +2010-05-15 - extensions to pst-doc.cls v 0.15 +2010-01-04 - extensions to pst-doc.cls v 0.14 +2009-12-08 - extensions to pst-doc.cls + v 0.11 (package paralist) +2009-09-27 - extensions to pst-doc.cls +2009-08-17 - extensions to pst-doc.cls +2009-03-17 - update pst-doc.cls +2009-01-31 - update pst-doc.cls +2009-01-30 - update pst-doc.cls + - new file pst-doc.ist + - new file pst-news09.tex|pdf +2008-11-14 new file pst-doc.cls +2008-05-23 new files pst-news2008.tex|pdf + pst-news.sty for the doc +2005-12-22 new files pstnews1-14.tex|pdf +2006-12-19 new files pstnews1-15.tex|pdf + + + +---- pstricks.pro +1.30 2018-12-17 - added offset parameter for Grid +1.29 2018-11-14 - added /Power function +1.28 2017-12-30 - /AnytoDeg, /DegtoAny, /AnytoRad and /RadtoAny + - (see documentation) +1.27 2017-12-08 - P2CRel +1.26 2017-09-17 - do not load any font, leave it to the packages + - change the order for /Rect from right to left +1.25 2017-09-12 - take \ps@angleunit into account for PtoC + - PtoC360 for the original version +1.24 2016-04-22 - fixed an empty line +1.23 2014-07-31 - fixed bug with Ellipse and move to start point +1.22 2014-03-12 - added cubic spline stuff (Christoph Bersch) +1.21 2013-11-28 - deleted the overlay stuff +1.20 2013-11-26 - fix for Rand +1.19 2013-11-08 - do not put /Uput in a local dictionary +1.18 2013-11-05 - put /UUput and /Uput in local dictionaries +1.17 2013-07-08 - move the overlay part into pst-ovl.pro +1.16 2013-05-22 - save color functions +1.15 2012-10-16 - modified Div operator + - take eofill into account + - moved some helper stuff into pst-tools.pro +1.14 2012-08-13 - add eoclip for linefill and dotfill +1.13 2012-07-01 - add PenroseFillA +1.12 2012-02-12 - add option tickAngle and symbolLinewidth +1.11 2012-02-09 - fix bug +1.10 2012-02-09 - add option for curveticks with option symbol +1.09 2011-10-31 - take values Ox and Oy into account for + plot styles LineToXAxis and LineToYAxis +1.08 2011-07-09 - added sibroutine DotFill +1.07 2010-04-30 - take \psk@rot into account for \psellipse + - new helper function concatstring +1.06 2009-01-30 - cosmetic changes to the code +1.05 2008-08-02 - commented out empty lines +1.04 2008-05-11 - added Rand for a real random 0<=Rand<=1 +1.03 2008-04-15 - only some cosmetics to the code +1.02 2008-01-01 - added the arrowtype D>, sides as curves (ArrowD) + - added the whole algebraic parser stuff + - added function tan := sin cos div + - added function Tan := sin cos Div + - added Pyth2 for 2 points given by xA yA xB yB + - change variable names from x,y to xOrig, yOrig for + EllipticArcArrow + - move font setting for \psgrid into pstricks.tex +1.01 2006-01-11 (vg) fix a bug with ArcAdjust when both angles ares negative + add Sqrt sunction +1.00 2005-09-19 move the code for arcs of an ellipse from + the main pstricks.tex into this pro +97, patch 7 2005-09-11 added new fillstyles +97, patch 6 2005-05-17 added some helper stuff + RadtoDeg, DegtoRad, Pi, TwoPi, ATAN +97, patch 5 2005-03-08 bugfix for DashLine + + +---- pst-dots.pro +2.02 2008-04-19 add octogon symbol (hv) +2.01 2008-04-18 add some comments to the code (hv) +2.00 2006-12-19 add more dot symbols from Etienne Riga (hv) + + +---- pst-tools.pro + -- file moved into package pst-tools -- + + + +---- pst-algparser.pro +0.06 2014-05-19 - fixed bug in TrigoFunc +0.05 2014-03-30 - added floor function +0.04 2011-10-31 - add !/fact/Fact for the factorial function +0.03 2010-10-10 - cosmetics +0.02 2008-08-02 - commented out empty lines + - add EXP func ( same as exp ) +0.01 2008-01-01 initial version (hv) + + + +---- pstricks97.pro +Version 97 patch 3, 98/06/01 + + + +pstricks.sty -------- +0.69 2018-12-22 - added optional argument xetex +0.68 2018-02-08 - make grayscale and monochrome option + use the global dictionary +0.67 2018-01-06 - small changes +0.66 2018-01-01 - new switch for engine +0.65 2017-09-17 - new switch for PS versus URW fonts +0.64 2017-07-16 - modified Blendmode for option distiller +0.63 2017-03-17 - remove auto-pst-pdf support, which is now possible + with package pstricks-pdf +0.62 2015-11-14 - set distiller option adter loadung pstricks +0.61 2015-11-11 - move auto-pst-pdf to a new package +0.60 2013-12-12 - test, if babel was loaded for \shorthandoff +0.59 2013-10-21 - fix for introduced bug with ifpdf +0.58 2013-10-20 - fix for \usepackage[pdf]{pstricks} when using + documentclass beamer +0.57 2013-05-22 - add option grayscale +0.56 2013-05-21 - add option monochrome +0.55 2013-04-05 - pass option pdfcrop=--hres to auto-pst-pdf +0.54 2013-04-05 - revert setting of the fillcolor, see 0.33 +0.53 2012-08-24 - update version number for pro files +0.52 2011-10-31 - update version number for pro files +0.51 2011-08-01 - revert test for pdflatex / lualatex +0.50 2011-04-23 - message for pst-tools.pro +0.49 2011-03-26 - test for pdflatex/lualatex +0.48 2010-11-26 - cgode changes +0.47 2010-09-18 - fix bug with option 97, load pstricks97.pro and + pst-dots97.pro +0.46 2010-08-28 - fix bug with auto-pst-pdf +0.45 2010-06-17 - add option pdf for using auto-pst-pdf together + with pdflatex (needs an option -shell-escape + for TeXLive or -enable-write18 for MiKTeX) +0.44 2010-04-24 - change version number of pstricks.pro +0.43 2010-03-20 - rename \pst@tempa to \pst@sty@tempa to prevent + problems with pst-fill +0.42 2010-03-16 - load pst-fp only once by pstricks-tex + write only a message for a LaTeX run +0.41 2010-02-11 - message for loading pst-fp +0.40 2009-01-30 - typeout an error message if the user named his + TeX source file pstricks.tex (rn) + - updated versions for the pro files +0.39 2008-10-31 - define \psDEBUG, if the old version is loaded +0.38 2008-10-19 - add new option for loading the old version from '97 +0.37 2008-01-24 - add option distiller for transparent colors +0.36 2008-01-22 - Better error message, when the document + has the same name than a PSTricks file. (RN) +0.35 2008-01-01 - add message for loading pstalpparser.pro + - add option vtex to disable opacity values +0.34 2007-09-13 - add message for loading pstricks.pro + - and pst-dots.pro (hv) +0.33 2007-02-18 set initial color (hv) +0.32 2006-08-10 message for loading the pro file (hv) +0.31 2005-12-19 one more step to a better color support (hv) +0.30 2005-11-15 drop test for pstcol + fix bug with xcolor (hv) +0.24 2005-08-30 drop support for \sclabox check, it is now renamed + in pstricks.tex (hv) +0.23 2005-06-02 Option DIA to prevent a clash with \scalebox (hv) +0.22 2005-02-25 changes were done in the wrong version +0.21 2005-02-21 fix problem with \newrgbcolor (RN,hv) + +pst-all.sty -------- + 2008-01-01 load pstricks-add + 2007-09-13 change order of the packages + 2006-12-19 do not load pst-char, it is now part of pst-text + diff --git a/graphics/pstricks/base/README b/graphics/pstricks/base/README new file mode 100644 index 0000000000..d665fee041 --- /dev/null +++ b/graphics/pstricks/base/README @@ -0,0 +1,125 @@ +PSTricks 2019 + +This package may be distributed under the terms of the LaTeX Project +Public License, as described in lppl.txt in the base LaTeX distribution. +Either version 1.3 or, at your option, any later version. + +----------------------------------------------------------------------- +PSTricks is the original work of Timothy van Zandt + +PSTricks 97 is edited by Denis Girou and Sebastian Rahtz + +PSTricks 2004 is edited by Herbert Voss <hvoss@tug.org> +and Rolf Niepraschk <Rolf.Niepraschk@ptb.de> + +PSTricks 2005- is edited by Herbert Voss <hvoss@tug.org> + +----------------------------------------------------------------------- +For more informations go to http://tug.org/PSTricks _and_ read the +news articles in the doc directory! + + +1 - Copyright + --------- + +COPYRIGHT 1993, 1994, 2000 by Timothy Van Zandt, <tvz@econ.insead.fr>. +COPYRIGHT 2004, 2005 by Herbert Voss <voss@PSTricks.de> and + Rolf Niepraschk <Rolf.Niepraschk@ptb.de>. +COPYRIGHT 2006-- by Herbert Voss <hvoss@tug.org> + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt. + +2 - Introduction + ------------ + +This package is a re-release of PSTricks, incorporating all of the +beta releases and bug fixes made up to March 1997. It is *not* +intended as a full new release of PSTricks, but as a consolidation and +cleaned distribution. Because Timothy van Zandt does not currently have +enough time to work on PSTricks, he gave permission for Denis Girou, +Sebastian Rahtz and Herbert Voss to produce this interim solution. + +Some new features have been added in the 2004 version, except the release +of the small pst-fill package for filling (tiling) arbitrary regions and the +various evolving contributions, but we have merged in all the bug fixes +and beta addons which Timothy produced. + +We have renamed some of the files that make up PSTricks, for consistency. +The multido package is now in /macros/generic/multido + +3 - Installation + ------------ + +3.1 - (La)TeX files + + a - You have to move all the files from the "generic" subdirectory +to a directory part of your TEXINPUTS environment variable, or to add it +in your TEXINPUTS list of paths. + + b - If you are a LaTeX user (and not only a plain TeX one), you have +to do the same thing for the "latex" subdirectory, which define LaTeX +wrappers for all the PSTricks files. + +3.2 - PostScript header files +The file pstricks.con is the current platform specific config file. +For other platforms read the README from the config directory + +3.3 - Known pitfalls + + a - To use the standard `color' or `xcolor' package with PSTricks, you +must load the `pstricks.sty' package, which interface the two packages, +loading them in the right order, and overriding some small parts of +PSTricks to allow it to use the `color' or `xcolor' package system for +specifying color. We STRONGLY recommend that you use this way today. +pstricks.sty loads by default the xcolor package, but there is an option +"noxcolor". If you are a LaTeX user then load _always_ first the +pstricks.sty package. + + b - LaTeX users must also take care that the `pstricks.sty' package is +required in place of the `pstricks.tex' one if the `graphics' or `graphicx' +package is also loaded. + + c - Don't try to load the `color' or `xcolor' package if you use +`pstricks.sty' or `pst-all' (it is already loaded in the correct order). + +4 - Contents + -------- + +4.1 - Subdirectories + +The distribution contain the following subdirectories: + +contrib : various contributions +base : main PSTricks files + doc : documentations (up to date ones - the obsolete/doc subdirectory + contain the reference documentation for the version 0.93a and + the additional old Beta material, which is still necessary to use...) + dvips : PostScript header files + generic : TeX generic sources + latex : LaTeX wrappers + + +5 - Running pdflatex or lualatex + Load package auto-pst-pdf or auto-pst-pdf-lua and run your example with +the optional argument --shell-escape (MikTeX allows also -enable-write18) + +lualatex --shell-escape <file> +pdflatex --shell-escape <file> + +auto-pst-pdf(-lua) creates in the background all pspicture environment as single +pdf graphic files. +See documentation for more informations. + + + +6 - Documentation + ------------- +There is a mailing list devoted to discussions on PSTricks usage. +The informations to subscribe to this list and to consult the archives can +be found on the Web page. + + +-- +Denis Girou, Sebastian Rahtz and Herbert Voss (updated December 2018) diff --git a/graphics/pstricks/base/config/README.cfg b/graphics/pstricks/base/config/README.cfg new file mode 100644 index 0000000000..3814ed7302 --- /dev/null +++ b/graphics/pstricks/base/config/README.cfg @@ -0,0 +1,45 @@ +This directory contains the special PSTricks config files for +the different platforms. By default the dvips config file is +already in your current TeX distribution as pstricks.con. +If you use another platform then you have to replace the current +pstricks.con by one of the following cfg files: + +- PostScript header files + +-- If you use the Y&Y's "dvipsone" DVI to PostScript converter, +you have to rename config.cfg to generic/pstricks.con and to move +all the files of the "dvips" subdirectory to the TeX input folder. + +-- If you use the MicroPress "VTeX" DVI to PostScript converter, +you have to rename config/vtex.cfg to generic/pstricks.con and to move +all the files of the "dvips" subdirectory to the TeX input folder. + +-- If you use XeTeX, you have to rename config/xdvipdfmx.cfg to + generic/pstricks.con + +-- If you use the "textures" (version 1.7/1.8 or 2.0) DVI to PostScript + converter (for Macintosh), you should proceed as follows: + * create a new folder PSTricks (for instance) as a subfolder in + Textures' TeX inputs folder, + * copy the "generic", "dvips", "latex" and "contrib" subfolders + from the "pstricks" folder to the newly created "PSTricks" folder, + * open the "generic" folder and remove the file pstricks.con, + then rename the file textures.cfg to pstricks.con, + * open the "dvips" folder and change the following line in the file + pstricks.pro (courtesy Michael J. Sharpe <msharpe@euclid.ucsd.edu>): + /STV { SDict begin normalscale end STP } def + by + /STV { Mag 72.27 72 div mul dup neg scale STP } def + It was also reported that the `pst-text' package (to put text + along paths) doesn't work with the "textures" driver. + Textures's users must also look at the page kindly maintained + by Michael Sharpe: http://math.ucsd.edu/~msharpe/pst-textures.html + +-- If you use another driver than these four ones, you have to adapt +a pstricks.con file for it, if the one for "dvips" doesn't work for it. +You can also look at the instructions of the old obsolete/src/pstricks.con +file. And if nothing work, ask for help on the PSTricks mailing list, +hopping that somebody on the list has the same configuration than you ... + +-- +2010-01-22 hv
\ No newline at end of file diff --git a/graphics/pstricks/base/config/distiller.cfg b/graphics/pstricks/base/config/distiller.cfg new file mode 100644 index 0000000000..db654b14d7 --- /dev/null +++ b/graphics/pstricks/base/config/distiller.cfg @@ -0,0 +1,64 @@ +% $Id: distiller.cfg 446 2017-04-19 11:40:55Z herbert $ +%% BEGIN: distiller.con (for distiller driver) +%% +%% Configuration file for PSTricks +%% +%% Version 0.01 (2008/01/24) +%% +%% For use with Adobes Distiller (tested with v7.0.7) +%% +%% COPYRIGHT 2008 by Herbert Voss, hvoss@tug.org. +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +% +\def\pstdriver{distiller} +{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " +\def\pstunit{1bp}% +\def\pstVerb#1{\special{ps: #1}} +\def\pstverbscale{SDict begin normalscale end} +\def\pstnodescale{}% not needed for pdftex +\ifx\textsuperscript\@undefined + \def\pstheader#1{\special{header=#1}} +\else + \ifx\Gin@PS@file@header\@undefined + \def\pstheader#1{\AtBeginDvi{\special{header=#1}}} + \else + \let\pstheader\Gin@PS@file@header + \fi +\fi +%% In the following, CP is short for currentpoint. +%% The neg is necessary because dvips scales the coordinates by 1 -1. +%% \tx@NET means neg exch neg exch translate. +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} +% +\pst@def{setTransparency}< + [ /BM/Normal + /ca \psk@opacityalpha + /CA \psk@opacityalpha /SetTransparency pdfmark > +\pst@def{setStrokeTransparency}< + [ /BM/Normal + /ca \psk@strokeopacityalpha + /CA \psk@strokeopacityalpha /SetTransparency pdfmark > +\pst@def{setBlendmode}< + [ /BM\ifcase\psk@blendmode% + /Normal \or + /Compatible %\or + \else /Normal + /Screen \or + /Multiply %\or +% /Hardlight + \fi/ca \psk@shapealpha /CA \psk@opacityalpha /SetTransparency pdfmark > +%% +%% ****************** END distiller.con ***************************** + +%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% +%% If you want to include your own customizations to pstricks.tex, then +%% uncomment the \pstcustomize command, and include your modifications +%% after \pstcustomize. These will be read in after pstricks.tex. +%\pstcustomize +% +\endinput +%% +%% END: distiller.con diff --git a/graphics/pstricks/base/config/dvips.cfg b/graphics/pstricks/base/config/dvips.cfg new file mode 100644 index 0000000000..d9648c1d0a --- /dev/null +++ b/graphics/pstricks/base/config/dvips.cfg @@ -0,0 +1,361 @@ +% $Id: dvips.cfg 797 2018-08-23 18:33:16Z herbert $ +%% BEGIN: pstricks.con (for dvips driver) +%% +%% Configuration file for PSTricks +%% +%% Version 1.00 (2010/01/16) +%% +%% For use with Rokicki's dvips (tested with v5.74 and older) + +\def\pstdriver{Rokicki's dvips} +{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " +\def\pstunit{1bp}% +\def\pstVerb#1{\special{ps:#1}}% hv write it without a preceding space +\def\pstverbscale{SDict begin normalscale end}% +\def\pstnodescale{}% not needed for pdftex +% DG/SR modification begin - Apr. 28, 1997 (D. Carlisle + S. Rahtz) +% \def\pstheader#1{\special{header=#1}} +% We used to check for |\AtBeginDvi|, but that was broken in early release +% so we now check for the existence of |\textsuperscript| (added 1995/05/16) +\ifx\textsuperscript\@undefined + \def\pstheader#1{\special{header=#1}} +\else + \ifx\Gin@PS@file@header\@undefined + \def\pstheader#1{\AtBeginDvi{\special{header=#1}}} + \else + \let\pstheader\Gin@PS@file@header + \fi +\fi +% DG/SR modification end +%% +%% In the following, CP is short for currentpoint. +%% The neg is necessary because dvips scales the coordinates by 1 -1. +%% \tx@NET means neg exch neg exch translate. +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% ****************** END Rokicki's dvips ***************************** + +%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% +%% If you want to include your own customizations to pstricks.tex, then +%% uncomment the \pstcustomize command, and include your modifications +%% after \pstcustomize. These will be read in after pstricks.tex. + +%\pstcustomize + +\endinput + +%% +%%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Because there are no standards for dvi-to-PS driver \special's, +some driver-dependent commands must be defined in this file. + +Possibly correct definitions for some dvi drivers are given below. +Copy the section for the driver you want to use to the indicated place +near the beginning of the file, replacing any other definitions you +might find there. + +When changing drivers, you may need to remake the header file. + +See the PSTricks read-me file for further installation instructions. + +Please report good and bad experiences with dvi-to-PS drivers, +along with the definitions of these commands that worked +for you, to tvz@Princeton.EDU. Thanks. + + +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump + + +%%%%%%%%%% !! CONFIGURATIONS FOR SOME DRIVERS !! %%%%%%%%%%%%%%%%%%%%%%%% + + +%% ********************************************************************** +%% ***** Rokicki's dvips ***** Rokicki's dvips ***** Rokicki's dvips **** +%% ********************************************************************** +%% Life is bliss with Rokicki's dvips (tested with v5.396, v5.47, 5.491): +%% +\def\pstdriver{Rokicki's dvips} +{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " +\def\pstunit{1bp}% +\def\pstVerb#1{\special{ps: #1}} +\def\pstverbscale{SDict begin normalscale end} +\def\pstheader#1{\special{header=#1}} +%% +%% In the following, CP is short for currentpoint. +%% The neg is necessary because dvips scales the coordinates by 1 -1. +%% \tx@NET means neg exch neg exch translate. +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% If using a version before 5.47, clipping may not work. You can +%% try the following definition of \pstverb: +%\def\pstverb#1{\special{ps: @beginspecial #1 @endspecial}} +%% or change "{initclip}ifelse" to "if" in the definition of @setspecial +%% in dvips' special.pro. +%% +%% ****************** END Rokicki's dvips ***************************** + + +%% ********************************************************************** +%% **** Arbortext's dvips *** Arbortext's dvips *** Arbortext's dvips *** +%% ********************************************************************** +%% Thanks to Wolfgang Sienel: +%% +\def\pstdriver{Arbortext's dvips} +\def\pstverb#1{% + \special{ps::[asis] 0 SPB /ChartCheckPoint save def + Xpos Ypos translate #1 ChartCheckPoint restore 0 SPE}} +\def\pstunit{1bp} +\def\pstVerb#1{\special{ps:: #1}} +\def\pstverbscale{} +\def\pstrotate{CP CP translate 3 -1 roll rotate \tx@NET} +\def\pstheader#1{% + \typeout{**********************************************************}% + \typeout{** Don't forget to include #1 when printing:}% + \typeout{** \space\space dvips -PRO #1 myfile}% + \typeout{**********************************************************}} +%% +%% Comments by Wolfgang on header files: +%% Normally the standard prolog file is downloaded once to the printer +%% with psload.ps (the initializing file for your TeX-printer) before +%% printing TeX-documents. If you don't make any changes to psload.ps +%% you have to type dvips -PRO PATH/pstricks.pro myfile (-PRO just +%% works for UNIX systems. I don't have any idea about other systems). +%% If psload.ps was not downloaded to the printer you have to append +%% pstricks.pro to the standard prolog file dvips.pro. In this case +%% invoke dvips as always. Note that after hitting the enter key you +%% have to specify the option download all prolog in both cases. If you +%% are frequently using pstricks you might want to change psload.ps. In +%% this case contact your local TeX-guru and ask him politely to do this +%% for you. Attention: If psload.ps is getting too big you may run into +%% trouble with printer memory! +%% +%% ****************** END Arbortext's dvips ***************************** + + +%% ********************************************************************** +%% **** Textures *** Textures *** Textures *** Textures *** Textures **** +%% ********************************************************************** +%% These have been tested with v1.3. It is nice to have a PostScript +%% screen previewer, such as TScript (USA: 1-617-734-9700). (The +%% Textures preview window will not show the PSTricks graphics.) +%% +\def\pstdriver{Textures} +\def\pstunit{1bp} +\def\pstverb#1{\special{postscript /TX@Save save def #1 TX@save restore}} +\def\pstVerb#1{\special{postscript grestore #1 gsave}} +\def\pstverbscale{Mag 1000 div 72.27 72 div mul dup neg scale} +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% \pstVerb does not define the currentpoint properly. As a workaround, +%% insert the following lines in the customization section above. +%% +%% \def\pst@Verb#1{% +%% \special{postscript \pst@dict /sps { moveto /Mag ed } def +%% userdict begin}% +%% \special{postscript #1 end gsave}} +%% +%% Textures does not support header files. +%% However, it may still be worth using a header file for increased speed. +%% Also, some macros can overload Textures 1.3 when not used with a header +%% file. You can include the header file pstricks.pro by saving the +%% PostScript output to a file and inserting the pstricks.pro with an +%% editor. Probably a better solution is to append pstricks.pro to a +%% copy of the laserprep, and, by changing file names of the modified +%% laserprep and the original laserprep, use the laserprep with pstricks.pro +%% whenever you are printing pstricks documents. +\def\pstheader#1{% + \typeout{******************************************}% + \typeout{*** Include header file #1!! ***}% + \typeout{******************************************}} +%% +%% ****************** END Textures ************************************** + + +%% ********************************************************************** +%% ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** +%% ********************************************************************** +%% I.e., dvi2ps, v2.xx. There are lot's of such things around. +%% This probably doesn't work. Considering upgrading to Rokicki's dvips. +%% +\def\pstdriver{dvi2ps v2.xx} +\def\pstunit{1pt} +\def\pstverb#1{ pstext="save currentpoint translate + Resolution 72.27 div neg scale #1 restore" \space} +\def\pstVerb#1{ pstext="#1" \space} +\def\pstverbscale{Resolution 72.27 div neg scale} +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +\def\pstheader#1{% + \typeout{******************************************************} + \typeout{Don't forget to include the header file #1!!} + \typeout{******************************************************} +%% +%% ***************************** END dvi2ps ***************************** + + +%% ********************************************************************** +%% ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** +%% ********************************************************************** +%% I.e., dvi2ps, version 3.xx, by Kevin Coombes. +%% This has not been tested. Consider upgrading to Rokicki's dvips. +%% +\def\pstdriver{dvi2ps v3.xx} +\def\pstunit{1bp} +\def\pstverb#1{pstext="#1"} +% \def\pstVerb#1{% +% \special{pstext="@endspecial #1 @beginspecial @setspecial"}} % v3.0 +\def\pstVerb#1{\special{psraw="#1"}} % v3.3 +\def\pstverbscale{Resolution 72.27 div neg scale} +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +\def\pstheader#1{% + \typeout{******************************************************} + \typeout{Don't forget to include the header file #1!!} + \typeout{******************************************************} +%% +%% ******************* END dvi3ps *************************************** + + +%% ********************************************************************** +%% **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** +%% ********************************************************************** +%% Only the pure graphics objects are supported for OzTeX. +%% No color, rotation, clipping, nodes and node connections, overlays, etc. +%% Also, \rput cannot be used with \SpecialCoor. +%% +%% The reason is given in the documentation for Version 1.3, September 1990: +%% +%% OzTeX generates highly efficient PostScript code but it does so at +%% the expense of some \special functionality. Many DVI-to-PostScript +%% translators allow you to do things like use one \verb|\special| to start +%% rotating TeX text and another to stop the rotation. The way OzTeX +%% interprets a DVI page makes this impossible. +%% +%% If using the header file, you should copy pstricks.pro to global.ps, in +%% the same directory as your dvi file. +%% +\def\pstdriver{OzTeX} +\def\pstverb#1{\special{null.ps #1}} +\def\pstunit{1bp} +\def\pstVerb#1{% + \typeout{PSTRICKS WARNING:}% + \typeout{\space\space You are using features not supported by OzTeX.}% + \typeout{\space\space These will be ignored.}% + \gdef\pstVerb##1{}} +\def\pstverbscale{} +\def\pstrotate{} +\def\pstheader#1{% + \typeout{******************************************************} + \typeout{Don't forget to include the header file #1!!} + \typeout{******************************************************}} +%% +%% ************************* END OzTeX ********************************** + + +%% ********************************************************************** +%% ***** DirectTeX ***** DirectTeX ***** DirectTeX ***** DirectTeX ****** +%% ********************************************************************** +%% DirectTeX is for the Macintosh. These has been tested unsuccessfully, +%% apparently due to a problem with DirectTeX. +%% +\def\pstdriver{DirectTeX} +%% +%% Check catcode of " +{\catcode`\"=12\gdef\pstverb#1{\special{" #1 /Foo{}def }}} +\def\pstunit{1bp} +\def\pstVerb#1{\special{ps: #1 }} +\def\pstverbscale{TeXDict begin normalscale end} +%% +%% In the following, CP is short for currentpoint. The neg is necessary +%% because dvips scales the coordinates by 1 -1: +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +\def\pstheader#1{% + \typeout{**********************************************************}% + \typeout{** Don't forget to include #1 when printing:}% + \typeout{** \space\space DVIReader -header #1 myfile}% + \typeout{**********************************************************}} +%% +%% ****************** END DirectTeX ***************************** + + +%% +%% END: pstricks.con diff --git a/graphics/pstricks/base/config/dvipsone.cfg b/graphics/pstricks/base/config/dvipsone.cfg new file mode 100644 index 0000000000..965e635fd5 --- /dev/null +++ b/graphics/pstricks/base/config/dvipsone.cfg @@ -0,0 +1,140 @@ +% $Id: dvipsone.cfg 446 2017-04-19 11:40:55Z herbert $ +%% BEGIN pstricks.con (for DVIPSONE driver) +%% +%% Configuration file for PSTricks 97: must be renamed `pstricks.con' +%% +%% Version 0.01 (2015/09/11) +%% +%% For use with DVIPSONE. (May require the -j flag with dvipsone) + +\def\pstdriver{DVIPSONE} +\def\pstunit{1bp} +{\catcode`\"=12 \gdef\pstverb#1{\special{" #1}} } +\def\pstVerb#1{\special{ps:: #1}} +\def\pstverbscale{1 dviscl div dup neg scale} +\def\pstnodescale{} +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} +\def\pstheader#1{\special{header=#1}} + +\pstcustomize + +\endinput + +%% To get PSTricks charpath and textpath to work: +%----------- pst-show.pro ------------------------------------------ +%! +% Patch for dvipsone to get PSTricks' charpath and textpath to work. +% Save as pst-show.pro, put it with your other PSTricks .pro files. +% Add "\pstheader{pst-show.pro}" to the beginning of your document. +% +% We unbind show: +dvidict begin +/S {show dup 0 rmoveto} def +/T {show 2 index 0 rmoveto} def +/s {show} def +end + +\endinput +%------------- end pst-show.pro ------------------------------------ +%% +%%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Because there are no standards for dvi-to-PS driver \special's, +some driver-dependent commands must be defined in this file. + +Possibly correct definitions for some dvi drivers are given below. +Copy the section for the driver you want to use to the indicated place +near the beginning of the file, replacing any other definitions you +might find there. + +When changing drivers, you may need to remake the header file. + +See the PSTricks read-me file for further installation instructions. + +Please report good and bad experiences with dvi-to-PS drivers, +along with the definitions of these commands that worked +for you, to tvz@Princeton.EDU. Thanks. + + +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump + + +%% +%% END: pstricks.con + +%% +%% END: dvipsone.con diff --git a/graphics/pstricks/base/config/gastex.cfg b/graphics/pstricks/base/config/gastex.cfg new file mode 100644 index 0000000000..b3549c8c56 --- /dev/null +++ b/graphics/pstricks/base/config/gastex.cfg @@ -0,0 +1,119 @@ +% $Id: gastex.cfg 446 2017-04-19 11:40:55Z herbert $ +%% BEGIN: pstricks.con (for xdvipdfmx driver) +%% +%% Configuration file for PSTricks +%% +%% Version 0.03 (2011/11/23) +%% +%% For use with xdvipdfmx +%% Created by SMiyata based on standard pstricks.con from TeXLive distribution. +%% This file may be distributed, used and modified freely. +% +\def\pstdriver{xdvipdfmx}% +\def\pstnodescale{} +\ifx\textsuperscript\@undefined + \def\pstheader#1{\special{header=#1}}% +\else + \ifx\Gin@PS@file@header\@undefined + \def\pstheader#1{\AtBeginDvi{\special{header=#1}}}% + \else + \let\pstheader\Gin@PS@file@header% + \fi +\fi +\def\pstnodescale{}% not needed for pdftex + +%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% +%% If you want to include your own customizations to pstricks.tex, then +%% uncomment the \pstcustomize command, and include your modifications +%% after \pstcustomize. These will be read in after pstricks.tex. +\def\c@lor@to@ps#1 #2\@@{\csname c@lor@ps@#1\endcsname#2 \@@}% +\def\c@lor@ps@#1 #2\@@{TeXDict begin #1 end}% +\def\c@lor@ps@rgb#1\@@{#1 setrgbcolor}% +\def\c@lor@ps@hsb#1\@@{#1 sethsbcolor}% +\def\c@lor@ps@cmyk#1\@@{#1 setcmykcolor}% +\def\c@lor@ps@gray#1\@@{#1 setgray}% + +\typeout{Using PS configuration for XeTeX+xdvipdfmx}% + +\endinput +% +% +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump + + +%% +%% END: pstricks.con diff --git a/graphics/pstricks/base/config/textures.cfg b/graphics/pstricks/base/config/textures.cfg new file mode 100644 index 0000000000..48667d3950 --- /dev/null +++ b/graphics/pstricks/base/config/textures.cfg @@ -0,0 +1,129 @@ +% $Id: textures.cfg 446 2017-04-19 11:40:55Z herbert $ +%% BEGIN pstricks.con (for Textures 1.7 and 1.8 driver) +%% +%% Configuration file for PSTricks 97: must be renamed `pstricks.con' +%% +%% Version 97 (1997/03/01) +%% +%% For use with Textures, v1.7 and v1.8. + +\def\pstdriver{Textures-V1.7} +%\def\pstdriver{Textures-V1.8} +\def\pstunit{1bp} +\def\pstverb#1{\special{postscript #1 }} +\def\pstVerb#1{\special{rawpostscript #1}} +\def\pstverbscale{Mag 72.27 72 div mul dup neg scale} +\def\pstnodescale{}% not needed for pdftex +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} +\def\pstheader#1{\special{prePostScriptfile #1}}% + +\pstcustomize + +\special{prePostScript + tx@Dict begin /sps {moveto /Mag ED pop tx@Dict begin} def /eps {} def end} +\def\pst@Verb#1{% + \special{rawpostscript tx@Dict begin}% + \special{postscript #1}% + \special{rawpostscript end}} + +\endinput + +%% +%%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Because there are no standards for dvi-to-PS driver \special's, +some driver-dependent commands must be defined in this file. + +Possibly correct definitions for some dvi drivers are given below. +Copy the section for the driver you want to use to the indicated place +near the beginning of the file, replacing any other definitions you +might find there. + +When changing drivers, you may need to remake the header file. + +See the PSTricks read-me file for further installation instructions. + +Please report good and bad experiences with dvi-to-PS drivers, +along with the definitions of these commands that worked +for you, to tvz@Princeton.EDU. Thanks. + + +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump + + +%% +%% END: pstricks.con diff --git a/graphics/pstricks/base/config/vtex.cfg b/graphics/pstricks/base/config/vtex.cfg new file mode 100644 index 0000000000..e4b7184404 --- /dev/null +++ b/graphics/pstricks/base/config/vtex.cfg @@ -0,0 +1,172 @@ +% $Id: vtex.cfg 446 2017-04-19 11:40:55Z herbert $ +%% BEGIN: pstricks.con (for VTeX) +%% +%% Configuration file for PSTricks 97 +%% +%% Version 97 patch 5 2003-04-29 +%% +%% For use with VTeX PostScript driver v 6.61+ +%% [MV, MK, special thanks to Denis Girou for help] +%% +%% Requires vtex.def 7.46 or newer, 10-14-01 +%% +%% For support and possible updates, check +%% http://www.micropress-inc.com +%% + +\def\pstdriver{VTeX} +{\catcode`\"=12\gdef +\pstverb#1{\special{pS*GS @beginspecial @setspecial #1 @endspecial GR }} +}% +\def\pstunit{1bp}% +\def\pstVerb#1{\special{pS: #1}}% +\def\pstverbscale{SDict begin normalscale end} +\def\pstnodescale{}% not needed for pdftex +\ifx\textsuperscript\@undefined + \def\pstheader#1{\special{header=#1}} +\else +% D.G. modification begin - Apr. 29, 2003 - From Michael Vulis +% \ifx\Gin@PS@file@header\@undefined +% \def\pstheader#1{\AtBeginDvi{\special{header=#1}}} +% \else +% \let\pstheader\Gin@PS@file@header +% \fi + \def\pstheader#1{\AtBeginDvi{\immediate\special{header=#1}}} +% D.G. modification end +\fi +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% ****************** END VTeX ***************************** + +%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% +%% If you want to include your own customizations to pstricks.tex, then +%% uncomment the \pstcustomize command, and include your modifications +%% after \pstcustomize. These will be read in after pstricks.tex. +% +% Some customization needed for VTeX since the coordinate system +% is different. +\newif\if@colorstack +\ifnum\OpMode>-1 +\ifnum\OpMode<3 +\@colorstacktrue +% D.G. modification begin - Nov. 17, 1999 +\let\vtex@pspicture=\pspicture +\def\pspicture{\special{G(}\@colorstackfalse\vtex@pspicture}% +\let\vtex@endpspicture=\endpspicture +\def\endpspicture{\vtex@endpspicture\@colorstacktrue\special{G)}% +} +% D.G. modification end +\fi +\fi + +\pstcustomize +\def\tx@RotBegin{neg RotBegin } +\def\pst@rotlist{mark RAngle /a ED cleartomark a } +% D.G. modification begin - Oct. 6, 1999 +\def\tx@Rot{neg Rot } +% D.G. modification end +\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill }} +\def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor eofill}} + +\endinput + +\iffalse +%% +%%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Because there are no standards for dvi-to-PS driver \special's, +some driver-dependent commands must be defined in this file. + +Possibly correct definitions for some dvi drivers are given below. +Copy the section for the driver you want to use to the indicated place +near the beginning of the file, replacing any other definitions you +might find there. + +When changing drivers, you may need to remake the header file. + +See the PSTricks read-me file for further installation instructions. + +Please report good and bad experiences with dvi-to-PS drivers, +along with the definitions of these commands that worked +for you, to tvz@Princeton.EDU. Thanks. + + +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump +\fi + +%% +%% END: pstricks.con diff --git a/graphics/pstricks/base/config/xdvipdfmx.cfg b/graphics/pstricks/base/config/xdvipdfmx.cfg new file mode 100644 index 0000000000..181f18603e --- /dev/null +++ b/graphics/pstricks/base/config/xdvipdfmx.cfg @@ -0,0 +1,244 @@ +% $Id: xdvipdfmx.cfg 446 2017-04-19 11:40:55Z herbert $ +% +%% BEGIN: pstricks.con (for xdvipdfmx driver) +%% +%% Configuration file for PSTricks +%% +%% Version 0.05 (2015/09/11) +%% +%% For use with xdvipdfmx +%% Created by SMiyata based on standard pstricks.con from TeXLive distribution. +%% This file may be distributed, used and modified freely. +%% Modified by Denis Girou, Herbert Voss +%% +\def\pstdriver{xdvipdfmx}% +\def\pstverb#1{\special{pst: #1}}% Check catcode of " +\def\pstunit{1bp}% +\def\pstVerb#1{\immediate\special{PST: #1}}% +\def\pstverbscale{72.27 72 div dup scale }% +\def\pstnodescale{72 72.27 div dup scale }% +% DG/SR modification begin - Apr. 28, 1997 (D. Carlisle + S. Rahtz) +% \def\pstheader#1{\special{header=#1}} +% We used to check for |\AtBeginDvi|, but that was broken in early release +% so we now check for the existence of |\textsuperscript| (added 1995/05/16) +\ifx\textsuperscript\@undefined + \def\pstheader#1{\special{header=#1}}% +\else + \ifx\Gin@PS@file@header\@undefined + \def\pstheader#1{\AtBeginDvi{\special{header=#1}}}% + \else + \let\pstheader\Gin@PS@file@header% + \fi +\fi +% DG/SR modification end +% +%% +%% +%% In the following, CP is short for currentpoint. +%% The neg is necessary because dvips scales the coordinates by 1 -1. +%% \tx@NET means neg exch neg exch translate. +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET}% +%% +%% ****************** END xdvipdfmx ***************************** + + +%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% +%% If you want to include your own customizations to pstricks.tex, then +%% uncomment the \pstcustomize command, and include your modifications +%% after \pstcustomize. These will be read in after pstricks.tex. +\def\c@lor@to@ps#1 #2\@@{\csname c@lor@ps@#1\endcsname#2 \@@}% +\def\c@lor@ps@#1 #2\@@{TeXDict begin #1 end}% +\def\c@lor@ps@rgb#1\@@{#1 setrgbcolor}% +\def\c@lor@ps@hsb#1\@@{#1 sethsbcolor}% +\def\c@lor@ps@cmyk#1\@@{#1 setcmykcolor}% +\def\c@lor@ps@gray#1\@@{#1 setgray}% +\pstcustomize +\typeout{Using PSTricks configuration for XeTeX+xdvipdfmx}% +\def\@@scalebox{% + \leavevmode + \hbox{% +\ifdim\pst@tempd\p@<\z@ +\pst@dimg=\pst@tempd\ht\pst@hbox +\pst@dimh=\pst@tempd\dp\pst@hbox +\dp\pst@hbox=-\pst@dimg +\ht\pst@hbox=-\pst@dimh +\else +\ht\pst@hbox=\pst@tempd\ht\pst@hbox +\dp\pst@hbox=\pst@tempd\dp\pst@hbox +\fi +\pst@dima=\pst@tempc\wd\pst@hbox +\ifdim\pst@dima<\z@\kern-\pst@dima\fi +\special{x: bscale \pst@tempc \pst@tempd}% +\hbox to \z@{\box\pst@hbox\hss}% +\special{x: escale}% +\ifdim\pst@dima>\z@\kern\pst@dima\fi}}% +% +\let\ps@@scalebox\@@scalebox +\def\ps@rotateleft#1{% +\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% +\pst@Verb{90 \tx@RotBegin}% +\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% +\pst@Verb{\tx@RotEnd}}}}% +% +\def\ps@rotateright#1{% + \leavevmode\hbox{% + \hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% + \pst@Verb{-90 \tx@RotBegin}% + \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% + \pst@Verb{\tx@RotEnd}}}}% +% +\def\ps@rotatedown#1{% +\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% +\pst@Verb{180 \tx@RotBegin}% +\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% +\pst@Verb{\tx@RotEnd}}}}% +% +\def\begin@psclip{\special{x: gsave}}% +\def\end@psclip{\special{x: grestore}}% +\def\@newcolor#1#2#3{% +\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}% +\expandafter\edef\csname\string\color@#1\endcsname{#2}% hv 1.14 2005-12-17 +\expandafter\edef\csname\string\color@xetex@#1\endcsname{#3}% +\ignorespaces}% +% +\def\newgray#1#2{% + \pst@checknum{#2}\pst@tempg + \@newcolor{#1}{\pst@tempg setgray}{gray \pst@tempg}% +} +\def\newrgbcolor#1#2{% + \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}{rgb \pst@tempg \pst@temph \pst@tempi}% +}% +\def\newhsbcolor#1#2{% + \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}{hsb \pst@tempg \pst@temph \pst@tempi}% +}% +\def\newcmykcolor#1#2{% + \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}% + {cmyk \pst@tempg \pst@temph \pst@tempi \pst@tempj}% +}% +\newgray{black}{0}% +\newgray{darkgray}{.25}% +\newgray{gray}{.5}% +\newgray{lightgray}{.75}% +\newgray{white}{1}% +\newrgbcolor{red}{1 0 0}% +\newrgbcolor{green}{0 1 0}% +\newrgbcolor{blue}{0 0 1}% +\newrgbcolor{yellow}{1 1 0}% +\newrgbcolor{cyan}{0 1 1}% +\newrgbcolor{magenta}{1 0 1}% + +\@ifundefined{LaTeXe}% + {\def\current@@@@color{\csname\string\color@xetex@\psfillcolor\endcsname}}{% + \AtBeginDocument{\@ifpackageloaded{xcolor}{\def\current@@@@color{\psfillcolor}}% + {\def\current@@@@color{\csname\string\color@\psfillcolor\endcsname}}}}% +% +\iffalse +\def\pst@starbox{% +\setbox\pst@hbox\hbox{{% + \def\current@color{\current@@@@color}% +\dimen@\wd\pst@hbox\advance\dimen@2\psframesep\wd\pst@hbox\dimen@% +\dimen@\ht\pst@hbox\advance\dimen@\psframesep\ht\pst@hbox\dimen@% +\dimen@\dp\pst@hbox\advance\dimen@\psframesep\dp\pst@hbox\dimen@% +\@ifundefined{LaTeXe}{\special{color push \current@color}% + \rlap{\vrule width\wd\pst@hbox height\ht\pst@hbox depth\dp\pst@hbox}% + \special{color pop}}% + {\color@block{\wd\pst@hbox}{\ht\pst@hbox}{\dp\pst@hbox}}}% +\rlap{\hskip\psframesep\unhbox\pst@hbox}}} +\fi +% +\def\AltClipMode{}% +% +\def\putoverlaybox#1{% +\hbox{\special{x: gsave}\special{x: initoverlay #1}\copy\theoverlaybox\special{x: grestore}}}% +% +\def\pst@overlay#1{\edef\curr@overlay{#1}\special{x: clipoverlay #1}\aftergroup\pst@endoverlay}% +\def\pst@endoverlay{\special{x: clipoverlay \curr@overlay}}% +\def\AltOverlayMode{}% +%The next line is not necessary, if pstricks.sty of [2007/02/18 v0.33] or newer is used. +\@ifundefined{LaTeXe}{}{\AtBeginDocument{\psset{fillcolor=white}}}% +% +\endinput +% +% +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump + + +%% +%% END: pstricks.con diff --git a/graphics/pstricks/base/doc/PSTricks.bib b/graphics/pstricks/base/doc/PSTricks.bib new file mode 100644 index 0000000000..daaa78d445 --- /dev/null +++ b/graphics/pstricks/base/doc/PSTricks.bib @@ -0,0 +1,109 @@ +@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} } + +@Book{PostScript, + Author = {Kollock, Nikolai G.}, + Title = {PostScript richtig eingesetzt: vom Konzept zum + praktischen Einsatz}, + Publisher = {IWT}, + Address = {Vaterstetten}, + year = 1989, +} + +@online{pdftricks, + Title = {PSTricks Support for pdf}, + Author = {Herbert Voß}, + url = {http://PSTricks.tug.org/main.cgi?file=pdf/pdfoutput}, + year = 2002, +} + +@online{miwi, + Title = {References for \TeX{} and Friends}, + Author = {Michael Wiedmann and Peter Karp}, + url = {http://www.miwie.org/tex-refs/}, + year = 2003, +} + +@Article{dtk02.2:jackson.voss:plot-funktionen, + author = {Laura E. Jackson and Herbert Voß}, + title = {Die {P}lot-{F}unktionen von {\texttt{pst-plot}}}, + journal = dtk, + year = 2002, + volume = {2/02}, + altvolume = 2, + altnumber = 14, + month = jun, + pages = {27--34}, + annote = bretter, + abstract = { Im letzten Heft wurden die mathematischen Funktionen von + \PS~im Zusammenhang mit dem {\LaTeX}-Paket + \texttt{pst-plot} zum Zeichnen von Funktionen beschrieben + und durch Beispiele erl{\"a}utert. In diesem Teil werden + die bislang nur erw{\"a}hnten Plot-Funktionen f{\"u}r + externe Daten behandelt. } +} + +@Article{dtk02.1:voss:mathematischen, + author = {Herbert Voß}, + title = {Die mathematischen {F}unktionen von {P}ostscript}, + journal = dtk, + year = 2002, + volume = {1/02}, + altvolume = 1, + altnumber = 14, + month = mar, + pages = {40-47}, + annote = bretter, + abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im + Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es + darum geht zu beurteilen, was es denn nun im eigentlichen + Sinne ist. Außerdem wird h{\"a}ufig vergessen, dass + sich mit den \PS-Funktionen viele Dinge erledigen lassen, + bei denen sonst auf externe Programme zur{\"u}ckgegriffen + wird. Dies wird im Folgenden f{\"u}r die mathematischen + Funktionen im Zusammenhang mit dem Paket \texttt{pst-plot} + gezeigt. } +} + +@Book{companion, + author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Denis Roegel and Herbert Voß}, + title = {The {\LaTeX} {G}raphics {C}ompanion}, + publisher = {{Addison-Wesley Publishing Company}}, + edition = 2, + year = {2007}, + address = {Reading, Mass.} +} + +@Book{PSTricks2, + author = {Herbert Voß}, + title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX}, + edition = 7, + publisher = {DANTE -- Lehmanns Media}, + year = {2016}, + location = {Heidelberg and Berlin} +} + +@Book{PSTricksE, + author = {Herbert Voß}, + title = {\texttt{PSTricks} -- {G}raphics for \LaTeX}, + edition = {1}, + publisher = {UIT}, + year = {2011}, + address = {Cambridge/UK} +} + +@Book{LaTeXRef, + author = {Herbert Voß}, + title = {\LaTeX\ Referenz}, + edition = {3}, + publisher = {DANTE -- lehmanns media}, + year = {2014}, + address = {Heidelberg and Berlin} +} +@Book{LaTeXRefE, + author = {Herbert Voß}, + title = {\LaTeX\ Quick Reference}, + edition = {1}, + publisher = {UIT}, + year = {2011}, + address = {Cambridge/UK} +} diff --git a/graphics/pstricks/base/doc/ctandir.sty b/graphics/pstricks/base/doc/ctandir.sty new file mode 100644 index 0000000000..37928e9582 --- /dev/null +++ b/graphics/pstricks/base/doc/ctandir.sty @@ -0,0 +1,30 @@ +%% LaTeX2e file `ctandir.sty' +%% generated by the `filecontents' environment +%% from source `pst-fill-doc' on 2004/08/18. +%% +%% LaTeX2e file `ctandir.sty' +%% generated by the `filecontents' environment +%% from source `ltubguid' on 1997/06/12. +%% +% +% Experimental CTAN location information macros for use with Donald +% Arseneau's |url.sty| +% +% we need url.sty; we can rely on it to demand anything it needs of +% LaTeX +\IfFileExists{url.sty}% + {\RequirePackage{url}}% + {\PackageWarning{ctandir}{You should acquire a copy of url.sty}% + \newcommand\urldef[3]{\def#1{\texttt{#3}}}% + \let\url\texttt + } +% +\newcommand\CTANdirectory[1]{\expandafter\urldef + \csname CTAN@#1\endcsname\path} +\newcommand\CTANfile[1]{\expandafter\urldef + \csname CTAN@#1\endcsname\path} +% +% Use the standard label-referencing mechanism to get the warning for +% an undefined label +\newcommand\CTANref[1]{\expandafter\@setref\csname CTAN@#1\endcsname + \relax{#1}} diff --git a/graphics/pstricks/base/doc/images/flowers.eps b/graphics/pstricks/base/doc/images/flowers.eps new file mode 100644 index 0000000000..3f279322a6 --- /dev/null +++ b/graphics/pstricks/base/doc/images/flowers.eps @@ -0,0 +1,269 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: background2.eps +%%Creator: xwpick Version 2.20 Rev: 20/09/94 - by Evgeni Chernyaev +%%CreationDate: Wed Nov 26 21:12:29 1997 +%%BoundingBox: 0 0 80 60 +%%EndComments +%*********************************************************************** +%* * +%* Function: Display a Lempel-Ziv Welch (LZW) encoded color image. * +%* This is an Encapsulated PostScript file suitable for any * +% kind of PostScript printer: Level I/II, color/grayscale...* +%* To optimize output on GrayScale printers you may uncomment* +%* line '/GRAYneeded true def'. * +%* * +%* Author: Evgeni CHERNYAEV (chernaev@vxcern.cern.ch) * +%* * +%*********************************************************************** +gsave +userdict begin +/EPSneeded true def +%/GRAYneeded true def +end +%*********************************************************************** +%* Image Description * +%*********************************************************************** +/colomns 80 def +/rows 60 def +/mm {2.835 mul} def +userdict /EPSneeded known { + /EPSneeded userdict /EPSneeded get def +}{ + /EPSneeded false def +} ifelse +userdict /GRAYneeded known { + /GRAYneeded userdict /GRAYneeded get def +}{ + /GRAYneeded false def +} ifelse +EPSneeded { + /IfRotate false def + /MarginX 0 def /MarginY 0 def + /Ymax rows def /Xmax colomns def /Ymin 0 def /Xmin 0 def +}{ + /IfRotate colomns rows gt {true} {false} ifelse def + /MarginX 8 mm def /MarginY 18 mm def + 0 0 moveto clippath pathbbox + /Ymax exch def /Xmax exch def /Ymin exch def /Xmin exch def +} ifelse +/IfColor systemdict /colorimage known {true} {false} ifelse def +GRAYneeded {/IfColor false def} if +/IfLevel2 systemdict /filter known systemdict /setcolorspace known and + {true} {false} ifelse def +%*********************************************************************** +% Procedures * +%*********************************************************************** +/Table 4096 array def +/StrArray 10 array def +/InLine 70 string def +/BinCodes 112 string def +/CurBit 0 def /FreeCode 258 def /CurCodeSize 9 def /CurMask 511 def +/incr IfColor {3} {1} ifelse def +IfLevel2 not {/setcolorspace null def /filter null def} if +%*********************************************************************** +/ReadLine { % Read Next Data Line (ASCII85 decode) * +%*********************************************************************** + BinCodes 0 BinCodes 56 56 getinterval putinterval + currentfile InLine readline pop pop + 1 1 14 { + /i exch 1 sub def + /k i 5 mul def + /c1 InLine k get 33 sub 255 and def + /rest c1 1868977 mul + InLine k 1 add get 33 sub 255 and 614125 mul add + InLine k 2 add get 33 sub 255 and 7225 mul add + InLine k 3 add get 33 sub 255 and 85 mul add + InLine k 4 add get 33 sub 255 and add def + /k i 4 mul 56 add def + BinCodes k c1 3 mul rest 16777216 idiv add 255 and put + /rest rest 16777216 mod def + BinCodes k 1 add rest 65536 idiv put + BinCodes k 2 add rest 256 idiv 255 and put + BinCodes k 3 add rest 255 and put + } for +} bind def +%*********************************************************************** +/ReadCode { % Read next code * +%*********************************************************************** + /CurByte CurBit 8 idiv def + /CurCode + BinCodes CurByte get 8 bitshift + BinCodes CurByte 1 add get add 8 bitshift + BinCodes CurByte 2 add get add + CurCodeSize CurBit 7 and add 24 sub bitshift CurMask and def + /CurBit CurBit CurCodeSize add dup 448 ge {ReadLine 448 sub} if def +} bind def +%*********************************************************************** +/DecodeCode { % Decode CurCode * +%*********************************************************************** + ReadCode CurCode 256 eq { + /FreeCode 258 def /CurCodeSize 9 def /CurMask 511 def + /StrInd -1 def /Lrest 0 def ReadCode + }{ + L Lrest gt { + /StrInd StrInd 1 add def /Lrest 65535 def + StrArray StrInd get null eq {StrArray StrInd 65535 string put} if + /CurStr StrArray StrInd get def + } if + Table FreeCode CurStr 65535 Lrest sub L getinterval + dup 0 Table OldCode get putinterval + dup L incr sub Table + CurCode FreeCode lt {CurCode} {OldCode} ifelse get + 0 incr getinterval putinterval put + /Lrest Lrest L sub def /FreeCode FreeCode 1 add def + FreeCode CurMask ge CurCodeSize 12 lt and { + /CurCodeSize CurCodeSize 1 add def + /CurMask CurMask 1 bitshift 1 add def + } if + } ifelse + /OldCode CurCode def + Table CurCode get dup length incr add /L exch def +} bind def +%*********************************************************************** +/DisplayImage { % Display a LZW-encoded color image * +%*********************************************************************** + /DelX Xmax Xmin sub MarginX 2 mul sub def + /DelY Ymax Ymin sub MarginY 2 mul sub def + /SizeX IfRotate {rows} {colomns} ifelse def + /SizeY IfRotate {colomns} {rows} ifelse def + /FactorX DelX SizeX div def /FactorY DelY SizeY div def + /Factor FactorX FactorY le {FactorX} {FactorY} ifelse def + /ScaleX SizeX Factor mul def /ScaleY SizeY Factor mul def + DelX ScaleX sub 2 div MarginX add + DelY ScaleY sub 2 div MarginY add translate + IfRotate {ScaleY ScaleX} {ScaleX ScaleY} ifelse scale + /Palette currentfile 768 string readhexstring pop def + currentfile InLine readline pop pop + IfColor not { + 0 1 255 { + Palette exch dup /i exch 3 mul def + Palette i 0 add get 0.299 mul + Palette i 1 add get 0.587 mul add + Palette i 2 add get 0.114 mul add cvi put + } for + /Palette Palette 0 256 getinterval def + } if + /Matr IfRotate + {[0 colomns rows 0 0 0]} {[colomns 0 0 rows neg 0 rows]} ifelse def + IfLevel2 { + [/Indexed IfColor {/DeviceRGB} {/DeviceGray} ifelse 255 Palette] + setcolorspace + /infile currentfile /ASCII85Decode filter /LZWDecode filter def + 8 dict + dup /ImageType 1 put + dup /Width colomns put + dup /Height rows put + dup /BitsPerComponent 8 put + dup /ImageMatrix Matr put + dup /Interpolate false put + dup /Decode [0 255] put + dup /DataSource infile put image + }{ + 0 1 255 { + Table exch dup incr mul Palette exch incr getinterval put + } for + ReadLine ReadLine + colomns rows 8 Matr {DecodeCode} + IfColor {false 3 colorimage} {image} ifelse + } ifelse +} bind def +%*********************************************************************** +%* Image decoding * +%*********************************************************************** +DisplayImage +000000 ffffff ffffe0 228b22 c0c0c0 00ff00 ff0000 ffff00 ffa500 b3b3b3 +7f7f7f cd5c5c b4b4b4 101010 e0e0e0 f0f050 60f060 d0d0d0 404040 c02020 +404080 fff68f a0a0c0 c07070 202020 ff4040 008000 a0a000 0000ff ff00ff +008080 606060 808080 8080c0 c08080 80c080 c080c0 c0c080 80c0c0 d08050 +5080d0 91c591 104210 1d761d e6e6fa adadad 7b7b7b 737373 a37474 6b6b6b +636363 966a6a 634848 dadada cf8a8a 9e9e9e 7b4a4a 848484 5a5a5a 8b5f5f +845454 bdbdbd 362828 b5b5b5 ffc0cb 191315 846342 342114 806b61 110f0e +8d7360 594123 3f343b 372915 988067 6c4e35 725c58 a58c72 231a1d 2d262a +4a3118 594544 615259 030203 868686 ababab 656565 add8e6 d50000 d5d500 +aa0055 5500aa 94dec5 7ce4a4 63e983 4aef62 31f441 18fa20 d2b48c ffebcd +8b7765 6a5acd ffe4e1 ee82ee a6a6a6 afeeee cccccc 8c8c8c e5e5e5 666666 +bfbfbf 775588 8f66a3 473351 d9d9d9 999999 b2c0dc c6d5e2 8b99b5 b22222 +00008b 595959 424242 dedede 949494 00ffff 009999 8f8f8f d7d7d7 333333 +00dfff 006400 bebebe fefefe 828282 f2f2f2 a020f0 e4c0c0 663b3b a35f5f +b03060 cd0000 8b0000 8b3a3a 191970 78706b 5a5357 717fca 2a218b 929ed3 +311fb3 6f76a0 9f8762 25244a 29256f 51518c 4b51b1 a3b1d7 cde1f9 b5c0d1 +9796a0 797169 595155 717dcb 28208a 301cb2 6d75a2 9e8661 242449 28246d +51518e 4951b2 a2b2d7 cfe3fb b6c3d3 9696a2 65493c 825145 9a7165 45342c +693430 201c1c 1c1414 fa1340 5151fb e7e7e7 3bfa34 655d55 d7c7a6 dfcfae +6f6f6f 1d155b a2a2a2 5b0000 9c9c9c 565656 0000b0 3f0f7b 646464 2f4f4f +2e8b57 999986 778899 db7093 008b00 b87850 d0a888 583838 302828 d09068 +905040 9a9a9a b0b0b0 2a2a2a 878787 434343 ff1493 898989 bdb76b ff69b4 +8b8b8b 8aadb8 5f777e fa8072 0000cd 98fb98 6920ac b7ffb7 5b975b 8b008b +93b8c4 ff4500 525252 b53100 ffe752 ce634a 31317b de8473 e78c9c de7b5a +63528c 737329 738442 291839 d67339 c65218 c6adad c65229 bd4208 180800 +ffde21 b54a18 f7c66b b53910 ffde39 f7d6ef +J3.)@GU(^knp%f=DYJ/kJ;GL5=Y,`/-/pch]Nmg"X/XVJIl`bq;EQ8LIr;+$.9*CN>5g7W +'[nor[TJf+!aT_7]=mFm7*cpW[Tg<aLB+rWY=I@'lMZBuhX%b!]pA13&=tO&P(f'sIRf!n +kj3`m2.VpX,scL`%[WL)K!.G>W`Gu.b0m81Jc5rPSibbMkTdLjp)jE+p`rM_lTBU4?#JhG +,]"i@6=D?il&ImkYik'sE]HH!Ih8=B'/ZXJq"/kQ9)"0G?>"Z#^#+&tdO!I&b/=]`f4uu3 +qo:nAmnB>TQR.<IMM4DeIQns:ou\1]EEiQE<c,#H=/.WTPuB0_<u+^_i$$oTGCLXcfb0,s +&W"e'?4r\7Sus7?HC:XLNiaHUb!;"08('a.T>ubJ(DVN].Xhe%&o)_*Y;o9MScrh3]p-EZ +i8_?X3UV8D^q2"=%#Qe'a.7*7S=QS&dFKP5Vhn0IUoqR##.j$na;5BV]ImNEWM*!rV1Atc +AL%N=*+]i-lqi/7k@sA+T$?gEHFX/MgjZNK>'>8'LS1<'M!ZZa"NYU'*?cFk4K>[q@&dCA +*Y2K%;\JJKloGdM_;I9pYt<P:T4#0F)Zo2r&jqcGH17]&o0Lg@K'0p%+\jmGie5/2oG^f\ +J?0Z8+-KLf)h9,`9P">LTf.-5,H0h\NT@W&FIb$Mq@eJOq<Zp$b!G<?;ePIBHl^V&f#O2d +.GIG"LQ(V$<L$GR"<NO'%\';fW&@_K",J@:=B$R^2hu%ad)[Z0ZC8rK-i*dh*B&8)`up./ +hB<To9Yu".a(S5">PA7>EEm/(pm\qWW5a6,Ks6RE*Z58B9o\iTIcOmo);9MnB5%u$&EiG: +FIrt_*-^PL$\4u*Wa'-=@Tiq;"DEdHDGI$^@1S9%R/u4p!eQ\\XGC#YR\p;\Ksl16@KGMW +T;T\J7-n']eqPTh5(%JoLMRk2_7CfUNa-lWM@3oC@8'%[Kl$g7#m6!Z71)^-@B/#IIWBS% +VJP#fPW>"eBP^hsC7_qkg,Y%(H6lRa>b(?^3Ye)K6Bq_0jT$_M3L=!!fVfaO:%h7!S!sT4 +-GsLT)8Y`bEp%a5iPF+Mli\Ea+nU3H#Gs'_V2o=D6k/i92WOJ@OmmIaQaaGo\MGMPFo-D< +lg?Y9BRh3pA4o&Oo=3]iIK9H*lf5h3O/!@j6[r3U^q%K>@P'G^=((aW8o#Q&(%SFraCC)e +@fRj4"tI'7r5YRU/oYC`&'-jR"+Y??L%'PPeKd<-O;Aq;89ZDTSB[Ue\Rs0Qar'(IV92'k +1e^_g0dc#eh$EOm/JNXpFA.OB#]Do'(j@X+TXNc.O'2YA8g"@LA"N#mB.j.M"98Kba(YB4 +#n`"&([=+Qcl7d:d4uXE?p=eJ=Tfn`%@K+\4bmuD#[n]c!I+kRc/DAVM^9*,1hL6`JFt>U +@P=*^`gtoKoE0,/+Z^8Y#E+13-&O7"K44aBL\Q^e6f_P`Yni7`8;gE!2/AftFNm=%c[c<% +IZO22(_!)\!<dP%6mEZ`a3a>YE_(MZ5V+57.j7bu^fQq,C_B1@6P1OK70<NB1<426+G6b? +X`=VQa%Dn="4Vg\jnqK!3CQ-k-2K`)ipjh>=F5cba.^<*?AllJ(#lq=NoB^RVpZn%$;+5k +P]dMVM7\;Um!LZkBd.*rl[<4^b*c-K,"VU%I]X0EO*/N+<Ig?:-1.LlH'l"V88p0^r*]s* +,!1@-PWNDH-G*eb(o<HC+iP@V;++b$TW?%VmEBlM.>k2-BKS/.FB1>fjul$Jn1TC+$V\X1 +Dus_KO$]ADNt^_?6A4)dj?01mnIe_u0Sq?boc^tkKc45**b:tXUkNej?BcS!#]KPO(Vu=T +_6>U#!=U6oTS=-d6)@!PUa248METEG59Z^#ap=.s=D)^MIk;CU$Li=(_$I+LiJ]:N@r)E_ +;HZ-oKHuTjnigk<q&)(&$!:#Y4\*T`7H;(Je+NT@9V]K_j7q8%jsE-eWNZR,^c2Wt3\(<2 +rWRtr;\&n&&B)1UYJEaggA83p7S-dE<YU^MP=fBn/*jK8U33_S`<VtYX!B3YifCl_%hRrk +'nENM#?#.\`D@6MJ]2%Md,SjnYa;urN$AK,6<$Z>pG.qtSf'ib'F.>JK@"k'Q5&[UROsjJ +OG8o*@K*9^TV`B=J2jhrX`^i`/cqDF!"YAX3JY[d69uSNNtFTf.j;h\`_[UETS,DJ@S.kU +GjM8-M2)h%'c$$;nLcq%-A9qP=(KVX@iSWe`NZcW+MR/q9?`n-Up_;[*&9:uME?PpVkU-& +)_2o$BEVT`Gm&'nMpaR%i<Z;^:-(6?@IgRrNe/!L$Pfs%1KK46]+juj@149BV8?qN?ddXU +V;i!1([^Ln;)EJ&Y[EO/L)eO-r!+bq-p%F%90uf!Ftu.[J;7_9\tcKWKWpUNL(Nbi6eG/g +64t\JnWkqa4CH?l7Z58iP,9HL(aflX7g(e]gE9HMO7:2LXa'1R#tnS2O=2T3hQTT*/5:t_ +KFl!S664PA3X7q84B$N1c5FFU&$[*8iDo+!Af`;d'daBD3c@)in:0iA&"`q@A'il\:OtiE +.`-0#'19Z=mVu2UdWOC^_*Nc'F@7M/nHa@6<S"\$<cM]Db9"iGi%73[0Wgn$gRRXpMU3kt +ZoCh-f["O#Eb]n7)">`M,ZfamC5@FMV]JET[[8b%3^sF+7nQB97uJi+TgIECigbChE=P29 +5(6EHGZT`p69N<6]X@^RI#2j556^7.WM5b[$*7qpL)0Gh^pCl[E/n!)=Qp]51e"2/LC'9I +//`Z/F%^&fQcp:C&,h_9KHS8f6o],i@Jk@ZYr!dtR5;Inclp'`<]q(Y+7J1f>*&2W$NLHf +%0OOFn&YEP8*FJ3,OAunEf@bl7[k5NCr)(#0BYY5q4E1j*X*]D*.:=sj!3V4?i+k[-5`!_ +6E#-Br59!Hk]E%=A&8g.FCc1(:`)PV+Thc#4^!*Zi0IH-5W%!"$bco*ng/hEC-^e%!Ajcf +'ZR:,'-U<s+m(pt<ptSp#qTm!+Em"PS.&1!"cmj*i+rX,p'<pLeE*,@j+&2LRLeD:lNFs+ +j)i;7nd%J\($l9/D-dlNke"Yf4TRG^@%?8M.-(eKY\loBD2)Ia!n1]<15H\_+Ee'"(2KS' +7DN`W.6nt`Jf#VbJSDhXlX'WY<(]fheaKfOi1'cWkT40p(;VgJNG@8Lik*!\(<qA'+l!6P +%[881#is:h$*55A?jHamAcWB?l*MMr<9ku>0B)V:9=uo(i`AoP'.u'A9>(TBF<-@c%Llb4 +%)W"GL)lu=+i*@E,^^0k?39%mJ:Z,Q_%'@0ODfbr*oWP),oS^2)A2K\+0/^L%q9'W..lEt +$,E)"b?bi8:D;-:)*p#`c6`ku@+[,k"cCM>MU!WN!c`o87DT`[U#'^=dLkYY*F\Md6Cq'Z +A.cZK2XIpTJMQm,CCUh1)"4WN/63E,!,=en#%<Z*i.`(@=O_k'9HiaW$@Ff>b_9OTU5?aK +!J72b(EH"fE`%3:")Pqm\fPiRdI8:Nm9^]#!")'f&+WEJMIIUHIZs=2Ad$<mKrQ0/:?Eg. +;lKadVfZO*B.%-9+"ELI5iQ(NZ5#Zo*?d8qU#oY)YlO5c.BBHc;5Vc\=G`ja!p%4*Tahg1 +Xp8q8c=C6'YP^=WEe1N>;?7h\k![bY9UK8K)"Nh2EKnWT":cQ9C&k%:6/3"89cA'C#1<u: +U[0)\Op^YkZ@lPYB7M#a3]Rgu0rJ2tUQ,uWPT><3j:^#bJ6NH0i"Imp*J!0+k5k^Jl3C^5 +hG&V7;Z&`'PR%8l!?c"-/EX6h(7PS9;A+(RJK6JC>S06]%KTTNJQ<NG?ro'C*\iW`OZ+nU +mM:B/J1Hp>jn&c8C`\-KKn*>J+a0)#+u4c^>)6EX#IPpmBP(iV+)sFR!bM^'DA@5B(iUW- +PMc^^AL,(j;K5k]nYT2l`"?M%7D\sC_*SQ\JB^?0]d=GIU'htiBP+0E/;@]NCpMjff[g[T +mS;sQ%)<r7=W:cb#iU@I+CGL``"_1!)5^X\i/S0'=s)`D0`urld0Lk,ChtoG+D7cf5`Se% +m+)d.ea6d8nLFEPCrWh9[G[\iiU.R.J0*X/#@ZBo@h'Q1@$C[%+Y;(QCO3(aM\cNC=pM-2 +Kq;D+r,nd)+/)@7^l^Bl4%Jh$!g$tW7,G?;#pgb^"[Hl9@?MHMRNBkRA`<V0+T<++rWS). +k&US9+HDM&HD0LMHbo1U`af;']H&.R%NpK4!/D$M"Z(_^*agDs</jXH/dUG`aG.,@U;"m' +OpS+&WO2mk::rP2[L*%e=pDif@2rG7@T-7H1(UJA^aULn38D>E!m=i0DC,X.=Y$KL#/H6' +'i5oZ:KhaG'nQu#_30iM\7%\_(c>t^.:bl4F<.8_Z2s;]V^2rJe6UFM*aptTn1;%!%6d(2 +544rH+nh/Zg^$/?']d,seG^.)r^''N4(QPV+a=hIdM\t$Au9<Lk%JqsJf^V;&]\9]UZ=E( +ImXN3/Raed0*2WWroq8Ml`;EEnSAeFD%O`1"i7bk+Hhri&t,C**Pmq,eg<(aAhh>0&]ZP5 +8J$$@TMq!&&_.P$"QCAobRUmRA7>HTD)Y80rC""f!&gnu_*/;6p'BnH15Y_`76Wm^_N<fF +Q6b*c,]<YBP!p-=l!TYfjPj7clXWm#dr\_]JJ)t2TICCl&tlD8UtuTWbb_"d+]"DTANMV< +^0>(Q*eE0@PS8$A`@&%RY^la`i%,H_kS'p_DW1Th+V'_;h_<-aXPa.HTVs]_TE$7](%$`M +jYmRp80DNi>3'Y(8\U\g,sG*'#p>lETT0U-3YSain7``m-2[`m-$.uG*ZtM,+9 +~> +showpage grestore diff --git a/graphics/pstricks/base/doc/images/tiger.eps b/graphics/pstricks/base/doc/images/tiger.eps new file mode 100644 index 0000000000..5588d5236b --- /dev/null +++ b/graphics/pstricks/base/doc/images/tiger.eps @@ -0,0 +1,2746 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%BoundingBox: 1 150 611 792 +/InitDictCount countdictstack def +gsave +save +mark +newpath +/showpage {} def +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: Adobe Illustrator(TM) 1.2d4 +%%For: OpenWindows Version 2 +%%Title: tiger.eps +%%CreationDate: 4/12/90 3:20 AM +%%DocumentProcSets: Adobe_Illustrator_1.2d1 0 0 +%%DocumentSuppliedProcSets: Adobe_Illustrator_1.2d1 0 0 +%%BoundingBox: 22 171 567 738 +%%EndComments + +%%BeginProcSet:Adobe_Illustrator_1.2d1 0 0 + +/Adobe_Illustrator_1.2d1 dup 100 dict def load begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bdef +/xdef {exch def} bdef +% graphic state operators +/_K { 3 index add neg dup 0 lt {pop 0} if 3 1 roll } bdef +/_k /setcmybcolor where { + /setcmybcolor get +} { + { 1 sub 4 1 roll _K _K _K setrgbcolor pop } bind +} ifelse def +/g {/_b xdef /p {_b setgray} def} bdef +/G {/_B xdef /P {_B setgray} def} bdef +/k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef +/K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef +/d /setdash ldef +/_i currentflat def +/i {dup 0 eq {pop _i} if setflat} bdef +/j /setlinejoin ldef +/J /setlinecap ldef +/M /setmiterlimit ldef +/w /setlinewidth ldef +% path construction operators +/_R {.25 sub round .25 add} bdef +/_r {transform _R exch _R exch itransform} bdef +/c {_r curveto} bdef +/C /c ldef +/v {currentpoint 6 2 roll _r curveto} bdef +/V /v ldef +/y {_r 2 copy curveto} bdef +/Y /y ldef +/l {_r lineto} bdef +/L /l ldef +/m {_r moveto} bdef +% path painting operators +/n /newpath ldef +/N /n ldef +/F {p fill} bdef +/f {closepath F} bdef +/S {P stroke} bdef +/s {closepath S} bdef +/B {gsave F grestore S} bdef +/b {closepath B} bdef +end +%%EndProcSet +%%EndProlog + +%%Page: 1 1 + +Adobe_Illustrator_1.2d1 begin + +.8 setgray +%clippath fill +-110 -300 translate +1.1 dup scale + +0 g +0 G +0 i +0 J +0 j +0.172 w +10 M +[]0 d +0 0 0 0 k + +177.696 715.715 m +177.797 713.821 176.973 713.84 v +176.149 713.859 159.695 761.934 139.167 759.691 C +156.95 767.044 177.696 715.715 V +b +181.226 718.738 m +180.677 716.922 179.908 717.221 v +179.14 717.519 180.023 768.325 159.957 773.199 C +179.18 774.063 181.226 718.738 V +b +208.716 676.41 m +210.352 675.45 209.882 674.773 v +209.411 674.096 160.237 686.898 150.782 668.541 C +154.461 687.428 208.716 676.41 V +b +205.907 666.199 m +207.763 665.803 207.529 665.012 v +207.296 664.221 156.593 660.879 153.403 640.478 C +150.945 659.563 205.907 666.199 V +b +201.696 671.724 m +203.474 671.061 203.128 670.313 v +202.782 669.565 152.134 673.654 146.002 653.936 C +146.354 673.175 201.696 671.724 V +b +190.991 689.928 m +192.299 688.554 191.66 688.033 v +191.021 687.512 147.278 713.366 133.131 698.324 C +141.872 715.467 190.991 689.928 V +b +183.446 685.737 m +184.902 684.52 184.326 683.929 v +183.75 683.339 137.362 704.078 125.008 687.531 C +131.753 705.553 183.446 685.737 V +b +180.846 681.665 m +182.454 680.657 181.964 679.994 v +181.474 679.331 132.692 693.554 122.709 675.478 C +126.934 694.251 180.846 681.665 V +b +191.58 681.051 m +192.702 679.52 192.001 679.085 v +191.3 678.65 151.231 709.898 135.273 696.793 C +146.138 712.674 191.58 681.051 V +b +171.8 710 m +172.4 708.2 171.6 708 v +170.8 707.8 142.2 749.8 122.999 742.2 C +138.2 754 171.8 710 V +b +172.495 703.021 m +173.47 701.392 172.731 701.025 v +171.993 700.657 135.008 735.501 117.899 723.939 C +130.196 738.739 172.495 703.021 V +b +172.38 698.651 m +173.502 697.12 172.801 696.685 v +172.1 696.251 132.031 727.498 116.073 714.393 C +126.938 730.274 172.38 698.651 V +b +0 J 1 w +170.17 696.935 m +170.673 690.887 171.661 684.318 173.4 681.199 C +169.8 668.799 178.6 655.599 V +178.2 648.399 179.8 645.199 V +183.8 636.799 188.6 635.999 v +192.484 635.352 201.207 632.283 211.068 630.879 c +228.2 616.799 225 603.999 V +224.6 587.599 221 585.999 V +232.6 597.199 223 580.399 V +218.6 561.599 l +244.2 583.199 228.6 564.799 V +218.6 538.799 l +238.2 557.199 231 548.799 V +227.8 539.999 l +271 567.199 240.2 537.599 V +248.2 541.199 252.6 538.399 V +259.4 539.599 258.6 537.999 V +237.8 527.599 234.2 509.199 V +242.6 519.199 239.4 508.399 V +239.8 496.799 l +243.8 518.399 243.4 480.799 V +262.6 498.799 251 477.999 V +251 461.199 l +266.2 477.599 259.8 464.799 V +269.8 473.599 265.8 458.399 V +265 447.999 269.4 459.199 V +285.4 489.799 279.4 463.599 V +278.6 444.399 283.4 459.199 V +283.8 448.799 293 441.599 V +291.8 492.399 304.6 456.399 V +308.6 439.999 l +311.4 449.199 311 454.399 V +325.8 470.799 319 446.399 V +334.2 469.199 331 455.999 V +323.4 439.999 325 435.199 V +341.8 469.999 343 471.599 V +341 429.198 351.8 465.199 V +357.4 453.199 354.6 448.799 V +362.6 456.799 361.8 459.999 V +366.4 468.199 369.2 454.599 V +371 445.199 372.6 448.399 V +376.6 424.398 377.8 447.199 V +379.4 460.799 372.2 472.399 V +373 475.599 370.2 479.599 v +383.8 457.999 376.6 486.799 V +387.801 478.799 389.001 478.799 V +375.4 501.999 384.2 497.199 V +379 507.599 397.001 495.599 V +381 511.599 398.601 501.999 V +406.601 495.599 399.001 505.599 V +384.6 521.599 406.601 503.599 V +418.201 487.199 419.001 484.399 V +409.001 513.599 404.601 516.399 V +413.001 552.799 454.201 537.199 V +461.001 519.999 465.401 538.399 V +478.201 544.799 489.401 517.199 V +493.401 530.799 492.601 533.599 V +499.401 532.399 498.601 533.599 V +511.801 529.199 513.001 529.999 V +519.801 523.199 520.201 526.799 V +529.401 523.999 527.401 527.599 V +536.201 511.999 536.601 508.399 V +539.001 522.399 l +541.001 519.599 l +542.601 527.199 541.801 528.399 v +541.001 529.599 561.801 521.599 566.601 500.799 C +568.601 492.399 l +574.601 507.199 573.001 511.199 V +578.201 510.399 578.601 505.999 V +582.601 529.199 577.801 535.199 V +582.201 535.999 583.401 532.399 V +583.401 539.599 l +590.601 538.799 590.601 541.199 V +595.001 545.199 597.001 540.399 V +584.601 575.599 603.001 556.399 V +610.201 545.599 606.601 564.399 v +603.001 583.199 599.001 584.799 603.801 585.199 C +604.601 588.799 602.601 590.399 v +600.601 591.999 603.801 590.399 y +608.601 586.399 603.401 608.399 V +609.801 606.799 597.801 635.999 V +600.601 638.399 596.601 646.799 V +604.601 642.399 607.401 643.999 V +607.001 645.599 603.801 649.599 V +582.201 704.4 602.601 682.399 V +614.451 668.849 608.051 691.649 V +598.94 715.659 599.717 719.955 V +170.17 696.935 l +b +0.2 0.55 0.85 0 k +599.717 719.755 m +600.345 719.574 602.551 718.45 603.801 716.8 C +610.601 706 605.401 724.4 V +596.201 753.2 605.001 742 V +611.001 734.8 607.801 748.4 v +603.936 764.827 601.401 771.2 y +613.001 766.4 586.201 806 V +595.001 802.4 l +575.401 842 553.801 847.2 V +545.801 853.2 l +584.201 891.2 571.401 928 V +564.601 933.2 555.001 924 V +548.601 919.2 542.601 920.8 V +511.801 919.6 509.801 919.6 v +507.801 919.6 473.001 956.8 407.401 939.2 C +402.201 937.2 397.801 938.4 V +379.4 954.4 330.6 931.6 v +320.6 929.6 319 929.6 v +317.4 929.6 314.6 929.6 306.6 923.2 c +298.6 916.8 298.2 916 296.2 914.4 C +279.8 903.2 275 902.4 V +263.4 896 259 886 V +255.4 884.8 l +253.8 877.6 253.4 876.4 V +248.6 872.8 247.8 867.2 V +239 861.2 239.4 856.8 V +237.8 851.6 237 846.8 V +229.8 842 230.6 839.2 V +223 825.2 224.2 818.4 V +217.8 818.8 215 816.4 V +214.2 811.6 212.6 811.2 V +209.8 810 212.2 806 V +210.6 803.2 210.2 801.6 V +211 798.8 206.6 793.2 V +200.2 774.4 202.2 769.2 V +202.6 764.4 199.8 762.8 V +196.2 763.2 204.6 751.2 V +205.4 750 202.2 747.6 V +185 744 182.6 727.6 V +169 712.8 169 707.6 v +169 705.295 169.271 702.148 169.97 697.535 C +169.4 689.199 197 688.399 v +224.6 687.599 599.717 719.755 Y +b +184.4 697.4 m +159.4 736.8 173.8 680.399 Y +182.6 645.999 312.2 683.599 y +481.001 714 492.201 718 v +503.401 722 598.601 715.6 y +593.001 732.4 L +528.201 778.8 509.001 755.6 495.401 759.6 c +481.801 763.6 484.201 754 481.001 753.2 c +477.801 752.4 438.601 777.2 432.201 776.4 c +425.801 775.6 400.459 799.351 415.401 767.6 c +431.401 733.6 357 728.4 340.2 739.6 c +323.4 750.8 347.4 721.2 Y +365.8 701.2 331.4 718 y +297 730.8 273 705.2 269.8 704.4 c +266.6 703.6 261.8 700.4 261 706.8 c +260.2 713.2 252.69 729.901 221 703.6 c +201 686.999 187.2 709 Y +184.4 697.4 L +f +0.09 0.5 0.772 0 k +433.51 774.654 m +427.11 773.854 401.743 797.593 416.71 765.854 c +433.31 730.654 358.31 726.654 341.51 737.854 c +324.709 749.054 348.71 719.454 Y +367.11 699.454 332.709 716.254 y +298.309 729.054 274.309 703.454 271.109 702.654 c +267.909 701.854 263.109 698.654 262.309 705.054 c +261.509 711.454 254.13 727.988 222.309 701.854 c +201.073 684.508 187.582 705.963 Y +184.382 695.854 L +159.382 735.654 174.454 677.345 Y +183.255 642.944 313.509 681.854 y +482.31 712.254 493.51 716.254 v +504.71 720.254 599.038 713.927 y +593.51 731.236 L +528.71 777.636 510.31 753.854 496.71 757.854 c +483.11 761.854 485.51 752.254 482.31 751.454 c +479.11 750.654 439.91 775.454 433.51 774.654 c +f +0.081 0.45 0.695 0 k +434.819 772.909 m +428.419 772.109 403.685 796.138 418.019 764.109 c +434.219 727.908 359.619 724.908 342.819 736.108 c +326.019 747.308 350.019 717.708 Y +368.419 697.708 334.019 714.508 y +299.619 727.308 275.618 701.708 272.418 700.908 c +269.218 700.108 264.418 696.908 263.618 703.308 c +262.818 709.708 255.57 726.075 223.618 700.108 c +201.145 682.017 187.964 702.926 Y +184.364 694.308 L +160.564 733.308 175.109 674.29 Y +183.909 639.89 314.819 680.108 y +483.619 710.508 494.819 714.508 v +506.019 718.508 599.474 712.254 y +594.02 730.072 L +529.219 776.472 511.619 752.109 498.019 756.109 c +484.419 760.109 486.819 750.509 483.619 749.708 c +480.419 748.908 441.219 773.709 434.819 772.909 c +f +0.072 0.4 0.618 0 k +436.128 771.163 m +429.728 770.363 404.999 794.395 419.328 762.363 c +436.128 724.807 360.394 723.518 344.128 734.363 c +327.328 745.563 351.328 715.963 Y +369.728 695.963 335.328 712.763 y +300.928 725.563 276.928 699.963 273.728 699.163 c +270.528 698.363 265.728 695.163 264.928 701.563 c +264.128 707.963 257.011 724.161 224.927 698.363 c +201.218 679.526 188.345 699.89 Y +184.345 692.763 L +162.545 729.563 175.764 671.235 Y +184.564 636.835 316.128 678.363 y +484.928 708.763 496.129 712.763 v +507.329 716.763 599.911 710.581 y +594.529 728.908 L +529.729 775.309 512.929 750.363 499.329 754.363 c +485.728 758.363 488.128 748.763 484.928 747.963 c +481.728 747.163 442.528 771.963 436.128 771.163 c +f +0.063 0.35 0.54 0 k +437.438 769.417 m +431.037 768.617 406.814 792.871 420.637 760.617 c +437.438 721.417 362.237 721.417 345.437 732.617 c +328.637 743.817 352.637 714.217 Y +371.037 694.217 336.637 711.017 y +302.237 723.817 278.237 698.217 275.037 697.417 c +271.837 696.617 267.037 693.417 266.237 699.817 c +265.437 706.217 258.452 722.248 226.237 696.617 c +201.291 677.035 188.727 696.854 Y +184.327 691.217 L +164.527 726.018 176.418 668.181 Y +185.218 633.78 317.437 676.617 y +486.238 707.017 497.438 711.017 v +508.638 715.017 600.347 708.908 y +595.038 727.745 L +530.238 774.145 514.238 748.617 500.638 752.617 c +487.038 756.617 489.438 747.017 486.238 746.217 c +483.038 745.417 443.838 770.217 437.438 769.417 c +f +0.054 0.3 0.463 0 k +438.747 767.672 m +432.347 766.872 406.383 790.323 421.947 758.872 c +441.147 720.072 363.546 719.672 346.746 730.872 c +329.946 742.072 353.946 712.472 Y +372.346 692.472 337.946 709.272 y +303.546 722.072 279.546 696.472 276.346 695.672 c +273.146 694.872 268.346 691.672 267.546 698.072 c +266.746 704.472 259.892 720.335 227.546 694.872 c +201.364 674.544 189.109 693.817 Y +184.309 689.672 L +166.309 722.872 177.073 665.126 Y +185.873 630.726 318.746 674.872 y +487.547 705.272 498.747 709.272 v +509.947 713.272 600.783 707.236 y +595.547 726.581 L +530.747 772.981 515.547 746.872 501.947 750.872 c +488.347 754.872 490.747 745.272 487.547 744.472 c +484.347 743.672 445.147 768.472 438.747 767.672 c +f +0.045 0.25 0.386 0 k +440.056 765.927 m +433.655 765.127 407.313 788.387 423.255 757.127 c +443.656 717.126 364.855 717.926 348.055 729.126 c +331.255 740.326 355.255 710.726 Y +373.655 690.726 339.255 707.526 y +304.855 720.326 280.855 694.726 277.655 693.926 c +274.455 693.126 269.655 689.926 268.855 696.326 c +268.055 702.726 261.332 718.422 228.855 693.126 c +201.436 672.053 189.491 690.781 Y +184.291 688.126 L +168.291 718.326 177.727 662.071 Y +186.527 627.671 320.055 673.126 y +488.856 703.526 500.056 707.526 v +511.256 711.526 601.22 705.563 y +596.056 725.417 L +531.256 771.817 516.856 745.126 503.256 749.126 c +489.656 753.127 492.056 743.526 488.856 742.726 c +485.656 741.926 446.456 766.727 440.056 765.927 c +f +0.036 0.2 0.309 0 k +441.365 764.181 m +434.965 763.381 407.523 786.056 424.565 755.381 c +446.565 715.781 366.164 716.181 349.364 727.381 c +332.564 738.581 356.564 708.981 Y +374.964 688.981 340.564 705.781 y +306.164 718.581 282.164 692.981 278.964 692.181 c +275.764 691.381 270.964 688.181 270.164 694.581 c +269.364 700.981 262.773 716.508 230.164 691.381 c +201.509 669.562 189.873 687.744 Y +184.273 686.581 L +169.872 714.981 178.382 659.017 Y +187.182 624.616 321.364 671.381 y +490.165 701.781 501.365 705.781 v +512.565 709.781 601.656 703.89 y +596.565 724.254 L +531.765 770.654 518.165 743.381 504.565 747.381 c +490.965 751.381 493.365 741.781 490.165 740.981 c +486.965 740.181 447.765 764.981 441.365 764.181 c +f +0.027 0.15 0.231 0 k +442.674 762.435 m +436.274 761.635 408.832 784.311 425.874 753.635 c +447.874 714.035 367.474 714.435 350.674 725.635 c +333.874 736.835 357.874 707.235 Y +376.274 687.235 341.874 704.035 y +307.473 716.835 283.473 691.235 280.273 690.435 c +277.073 689.635 272.273 686.435 271.473 692.835 c +270.673 699.235 264.214 714.595 231.473 689.635 c +201.582 667.071 190.255 684.707 Y +184.255 685.035 L +170.654 711.436 179.037 655.962 Y +187.837 621.562 322.673 669.635 y +491.474 700.035 502.674 704.035 v +513.874 708.035 602.093 702.217 y +597.075 723.09 L +532.274 769.49 519.474 741.635 505.874 745.635 c +492.274 749.635 494.674 740.035 491.474 739.235 c +488.274 738.435 449.074 763.235 442.674 762.435 c +f +0.018 0.1 0.154 0 k +443.983 760.69 m +437.583 759.89 410.529 782.777 427.183 751.89 c +449.183 711.09 368.783 712.69 351.983 723.89 c +335.183 735.09 359.183 705.49 Y +377.583 685.49 343.183 702.29 y +308.783 715.09 284.783 689.49 281.583 688.69 c +278.382 687.89 273.582 684.69 272.782 691.09 c +271.982 697.49 265.654 712.682 232.782 687.89 c +201.655 664.58 190.637 681.671 Y +184.236 683.49 L +171.236 707.49 179.691 652.907 Y +188.491 618.507 323.983 667.89 y +492.783 698.29 503.983 702.29 v +515.183 706.29 602.529 700.544 y +597.583 721.926 L +532.783 768.327 520.783 739.89 507.183 743.89 c +493.583 747.89 495.983 738.29 492.783 737.49 c +489.583 736.69 450.383 761.49 443.983 760.69 c +f +0.009 0.05 0.077 0 k +445.292 758.945 m +438.892 758.145 412.917 781.589 428.492 750.145 c +449.692 707.344 370.092 710.944 353.292 722.144 c +336.492 733.344 360.492 703.744 Y +378.892 683.744 344.492 700.544 y +310.092 713.344 286.092 687.744 282.892 686.944 c +279.692 686.144 274.892 682.944 274.092 689.344 c +273.292 695.744 267.095 710.768 234.092 686.144 c +201.727 662.089 191.018 678.635 Y +184.218 681.944 L +171.418 705.144 180.346 649.853 Y +189.146 615.453 325.292 666.144 y +494.093 696.544 505.293 700.544 v +516.493 704.544 602.965 698.872 y +598.093 720.763 L +533.292 767.163 522.093 738.144 508.493 742.144 c +494.893 746.145 497.293 736.544 494.093 735.744 c +490.892 734.944 451.692 759.745 445.292 758.945 c +f +1 g +184.2 680.399 m +171.4 702.4 181 646.799 Y +189.8 612.399 326.6 664.399 y +495.401 694.8 506.601 698.8 v +517.801 702.8 603.401 697.2 y +598.601 719.6 L +533.801 766 523.401 736.4 509.801 740.4 c +496.201 744.4 498.601 734.8 495.401 734 c +492.201 733.2 453.001 758 446.601 757.2 c +440.201 756.4 414.981 780.207 429.801 748.4 c +452.028 700.693 369.041 710.773 354.6 720.4 c +337.8 731.6 361.8 702 Y +380.2 681.999 345.8 698.8 y +311.4 711.6 287.4 685.999 284.2 685.199 c +281 684.399 276.2 681.199 275.4 687.599 c +274.6 694 268.535 708.856 235.4 684.399 c +201.8 659.599 191.4 675.599 Y +184.2 680.399 L +f +0 g +225.8 650.399 m +218.6 638.799 239.4 625.599 V +240.8 624.199 222.8 628.399 V +216.6 630.399 215 640.799 V +210.2 645.199 205.4 650.799 v +200.6 656.399 225.8 650.399 y +f +0.8 g +365.8 698 m +383.498 671.179 382.9 666.399 v +381.6 655.999 381.4 646.399 384.6 642.399 c +387.801 638.399 396.601 605.199 y +396.201 603.999 408.601 641.999 V +420.201 657.999 400.201 676.399 V +365 705.2 365.8 698 v +f +0 g +1 J 0.1 w +245.8 623.599 m +257 616.399 242.6 585.199 V +249 587.599 l +248.2 576.399 245 573.999 V +252.2 577.199 l +257 569.199 253 564.399 V +269.8 556.399 269 549.999 V +275.4 557.999 271.4 564.399 v +267.4 570.799 260.2 566.799 261 585.199 C +252.2 581.999 l +257.8 590.799 257.8 597.199 V +249.8 594.799 l +265.269 621.377 254.6 622.799 v +248.6 623.599 245.8 623.599 Y +f +0.8 g +278.2 606.799 m +281 611.199 278.2 610.399 v +275.4 609.599 244.2 594.799 238.2 585.199 C +272.6 609.599 278.2 606.799 V +f +288.6 598.799 m +291.4 603.199 288.6 602.399 v +285.8 601.599 254.6 586.799 248.6 577.199 C +283 601.599 288.6 598.799 V +f +301.8 613.999 m +304.6 618.399 301.8 617.599 v +299 616.799 267.8 601.999 261.8 592.399 C +296.2 616.799 301.8 613.999 V +f +278.6 570.399 m +278.6 576.399 275.8 575.599 v +273 574.799 237 557.199 231 547.599 C +273 573.199 278.6 570.399 V +f +279.8 581.199 m +281 585.999 278.2 585.199 V +276.2 585.199 249.8 573.599 243.8 563.999 C +273.4 585.599 279.8 581.199 V +f +265.4 533.599 m +255.4 525.999 l +265.8 533.599 269.4 532.399 V +262.6 521.199 261.8 515.999 V +272.2 528.799 277.8 528.399 V +285.4 527.999 285.4 517.199 V +291 527.599 294.2 527.199 V +295.4 520.799 294.2 513.999 V +298.2 521.599 302.2 519.999 V +308.6 521.999 307.8 510.399 V +307.8 499.999 307 497.199 V +312.6 523.599 315 523.999 V +323 525.199 327.8 516.399 V +323.8 523.999 328.6 521.999 V +339.4 520.399 342.6 513.599 V +335.8 525.599 341.4 522.399 V +348.2 522.399 349.4 515.999 V +357.8 494.799 359.8 493.199 V +352.2 514.799 353.8 514.799 V +351.8 526.799 357 511.999 V +353.8 525.999 359.4 525.199 v +365 524.399 369.4 514.399 377.8 516.799 C +387.401 511.199 389.401 580.399 V +265.4 533.599 L +f +0 g +0 J 1 w +270.2 626.399 m +285 632.399 325 626.399 V +332.2 625.999 339 634.799 v +345.8 643.599 372.6 650.799 379 648.799 C +388.601 642.399 l +389.401 641.199 l +401.801 630.799 402.201 623.199 v +402.601 615.599 387.801 567.599 378.2 551.599 c +368.6 535.599 359 523.199 339.8 525.599 C +319 529.599 293.4 525.599 v +264.2 527.199 261.4 535.199 v +258.6 543.199 272.6 558.399 y +277 566.799 275.8 581.199 v +274.6 595.599 275 623.599 270.2 626.399 c +f +0.1 0.6 0.45 0 k +292.2 624.399 m +300.6 605.999 271 540.799 y +269 539.199 283.66 533.154 293.8 535.599 c +304.746 538.237 345 533.999 Y +368.6 549.599 381.4 593.999 y +391.801 617.999 374.2 621.199 v +356.6 624.399 292.2 624.399 y +f +0.1 0.6 0.45 0.2 k +290.169 593.503 m +293.495 606.293 295.079 618.094 292.2 624.399 c +354.6 617.999 365.8 638.799 v +370.041 646.674 384.801 615.999 384.4 606.399 c +321.4 591.999 306.6 603.199 V +290.169 593.503 L +f +0.1 0.6 0.45 0.25 k +294.6 577.199 m +296.6 569.999 294.2 565.999 V +292.6 565.199 291.4 564.799 V +292.6 561.199 298.6 559.599 V +300.6 555.199 303 554.799 v +305.4 554.399 310.2 548.799 314.2 549.999 c +318.2 551.199 329.4 555.199 y +335 558.399 343.8 554.799 V +346.175 555.601 346.6 559.599 v +347.1 564.299 350.2 567.999 352.2 569.999 c +354.2 571.999 363.8 584.799 362.6 585.199 c +361.4 585.599 294.6 577.199 Y +f +0 0.55 0.5 0 k +290.2 625.599 m +287.4 603.199 290.6 594.799 v +293.8 586.399 293 584.399 292.2 580.399 c +291.4 576.399 295.8 566.399 301.4 560.399 C +313.4 558.799 l +328.6 562.399 337.8 559.599 V +346.794 558.256 350.2 573.199 V +355 579.599 362.2 582.399 v +369.4 585.199 376.6 626.799 372.6 634.799 c +368.6 642.799 354.2 647.199 338.2 631.599 c +322.2 615.999 320.2 632.799 290.2 625.599 C +b +0 0 0.2 0 k +0.5 w +291.8 550.799 m +291 552.799 286.6 553.199 V +264.2 556.799 255.8 569.199 V +249 574.799 253.4 563.199 V +263.8 542.799 270.6 539.999 V +287 535.999 291.8 550.799 V +b +0 0.55 0.5 0.2 k +1 w +371.742 614.771 m +372.401 622.677 374.354 631.291 372.6 634.799 c +366.154 647.693 349.181 642.305 338.2 631.599 c +322.2 615.999 320.2 632.799 290.2 625.599 C +288.455 611.636 289.295 601.624 v +326.6 613.199 327.4 607.599 V +329 610.799 338.2 610.799 v +347.4 610.799 370.142 611.971 371.742 614.771 C +f +0 g +0 0.55 0.5 0.35 K +2 w +328.6 624.799 m +333.4 619.999 329.8 610.399 V +315.4 594.399 317.4 580.399 v +S +0 0 0.2 0 k +0 G +0.5 w +280.6 539.999 m +276.2 552.799 285 545.999 V +289.8 543.999 288.6 542.399 v +287.4 540.799 281.8 536.799 280.6 539.999 C +b +285.64 538.799 m +282.12 549.039 289.16 543.599 V +293.581 541.151 292.04 540.719 v +287.48 539.439 292.04 536.879 285.64 538.799 C +b +290.44 538.799 m +286.92 549.039 293.96 543.599 V +298.335 541.289 296.84 540.719 v +293.48 539.439 296.84 536.879 290.44 538.799 C +b +297.04 538.599 m +293.52 548.839 300.56 543.399 V +304.943 541.067 303.441 540.519 v +300.48 539.439 303.441 536.679 297.04 538.599 C +b +303.52 538.679 m +300 548.919 307.041 543.479 V +310.881 541.879 309.921 540.599 v +308.961 539.319 309.921 536.759 303.52 538.679 C +b +310.2 537.999 m +305.4 550.399 314.6 543.999 V +319.4 541.999 318.2 540.399 v +317 538.799 318.2 535.599 310.2 537.999 C +b +0 g +0.1 0.6 0.45 0.25 K +2 w +281.8 555.199 m +295 557.999 301 554.799 V +307 553.599 308.2 553.999 v +309.4 554.399 312.6 554.799 y +S +315.8 546.399 m +327.8 559.999 339.8 555.599 v +346.816 553.026 345.8 556.399 346.6 559.199 c +347.4 561.999 347.6 566.199 352.6 569.199 c +S +0 0 0.2 0 k +0 G +0.5 w +333 562.399 m +329 573.199 326.2 560.399 v +323.4 547.599 320.2 543.999 318.6 541.199 C +318.6 535.999 327 536.399 V +337.8 536.799 338.2 539.599 v +338.6 542.399 337 553.999 333 562.399 C +b +0 g +0.1 0.6 0.45 0.25 K +2 w +347 555.199 m +350.6 557.599 353 556.399 v +S +353.5 571.599 m +356.4 576.499 361.2 577.299 v +S +0.7 g +0 G +1 w +274.2 534.799 m +292.2 531.599 296.6 533.199 V +305.4 533.199 297 531.199 V +284.2 531.199 276.2 532.399 V +264.6 537.999 274.2 534.799 V +f +0 0 0.2 0 k +0.5 w +288.2 627.999 m +305.8 627.999 307.8 627.199 V +315 596.399 311.4 588.799 V +310.2 585.999 307.4 591.599 V +289 624.399 285.8 626.399 v +282.6 628.399 287 627.999 288.2 627.999 C +b +211.1 630.699 m +220 628.999 232.6 626.399 V +237.4 603.999 240.6 599.199 v +243.8 594.399 240.2 594.399 236.6 597.199 c +233 599.999 218.2 613.999 216.2 618.399 c +214.2 622.799 211.1 630.699 y +b +232.961 626.182 m +238.761 624.634 239.77 622.419 v +240.778 620.205 238.568 616.908 y +237.568 613.603 236.366 615.765 v +235.164 617.928 232.292 625.588 232.961 626.182 c +b +0 g +233 626.399 m +236.6 621.199 240.2 621.199 v +243.8 621.199 244.182 621.612 247 620.999 c +251.6 619.999 251.2 621.999 257.8 620.799 c +260.44 620.319 263 621.199 265.8 619.999 c +268.6 618.799 271.8 619.599 273 621.599 c +274.2 623.599 279 627.799 Y +266.2 625.999 263.4 625.199 V +241 623.999 233 626.399 V +f +0 0 0.2 0 k +277.6 626.199 m +271.15 622.699 270.75 620.299 v +270.35 617.899 276 614.199 y +278.75 609.599 279.35 611.999 v +279.95 614.399 278.4 625.799 277.6 626.199 c +b +240.115 620.735 m +247.122 609.547 247.339 620.758 V +247.896 622.016 246.136 622.038 v +240.061 622.114 241.582 626.216 240.115 620.735 C +b +247.293 620.486 m +255.214 609.299 254.578 620.579 V +254.585 620.911 252.832 621.064 v +248.085 621.478 248.43 625.996 247.293 620.486 C +b +254.506 620.478 m +262.466 609.85 261.797 619.516 V +261.916 620.749 260.262 621.05 v +256.37 621.756 256.159 625.005 254.506 620.478 C +b +261.382 620.398 m +269.282 608.837 269.63 618.618 V +271.274 619.996 269.528 620.218 v +263.71 620.958 264.508 625.412 261.382 620.398 C +b +0 0 0.2 0.1 k +225.208 616.868 m +217.55 618.399 l +214.95 623.399 212.85 629.549 y +219.2 628.549 231.7 625.749 V +232.576 622.431 234.048 616.636 v +225.208 616.868 l +f +290.276 621.53 m +288.61 624.036 287.293 625.794 286.643 626.2 c +283.63 628.083 287.773 627.706 288.902 627.706 C +305.473 627.706 307.356 626.953 V +307.88 624.711 308.564 621.32 V +298.476 623.33 290.276 621.53 V +f +0.2 0.55 0.85 0 k +1 w +343.88 759.679 m +371.601 755.719 397.121 791.359 398.881 801.04 c +400.641 810.72 390.521 822.6 Y +391.841 825.68 387.001 839.76 381.721 849 c +376.441 858.24 360.54 857.266 343 858.24 c +327.16 859.12 308.68 835.8 307.36 834.04 c +306.04 832.28 312.2 793.999 313.52 788.279 c +314.84 782.559 312.2 756.159 y +346.44 765.259 316.16 763.639 343.88 759.679 c +f +0.08 0.44 0.68 0 k +308.088 833.392 m +306.792 831.664 312.84 794.079 314.136 788.463 c +315.432 782.847 312.84 756.927 y +345.512 765.807 316.728 764.271 343.944 760.383 c +371.161 756.495 396.217 791.487 397.945 800.992 c +399.673 810.496 389.737 822.16 Y +391.033 825.184 386.281 839.008 381.097 848.08 c +375.913 857.152 360.302 856.195 343.08 857.152 c +327.528 858.016 309.384 835.12 308.088 833.392 c +f +0.06 0.33 0.51 0 k +308.816 832.744 m +307.544 831.048 313.48 794.159 314.752 788.647 c +316.024 783.135 313.48 757.695 y +344.884 766.855 317.296 764.903 344.008 761.087 c +370.721 757.271 395.313 791.615 397.009 800.944 c +398.705 810.272 388.953 821.72 Y +390.225 824.688 385.561 838.256 380.473 847.16 c +375.385 856.064 360.063 855.125 343.16 856.064 c +327.896 856.912 310.088 834.44 308.816 832.744 c +f +0.04 0.22 0.34 0 k +309.544 832.096 m +308.296 830.432 314.12 794.239 315.368 788.831 c +316.616 783.423 314.12 758.463 y +343.556 767.503 317.864 765.535 344.072 761.791 c +370.281 758.047 394.409 791.743 396.073 800.895 c +397.737 810.048 388.169 821.28 Y +389.417 824.192 384.841 837.504 379.849 846.24 c +374.857 854.976 359.824 854.055 343.24 854.976 c +328.264 855.808 310.792 833.76 309.544 832.096 c +f +0.02 0.11 0.17 0 k +310.272 831.448 m +309.048 829.816 314.76 794.319 315.984 789.015 c +317.208 783.711 314.76 759.231 y +342.628 768.151 318.432 766.167 344.136 762.495 c +369.841 758.823 393.505 791.871 395.137 800.848 c +396.769 809.824 387.385 820.84 Y +388.609 823.696 384.121 836.752 379.225 845.32 c +374.329 853.888 359.585 852.985 343.32 853.888 c +328.632 854.704 311.496 833.08 310.272 831.448 c +f +1 g +344.2 763.2 m +369.4 759.6 392.601 792 394.201 800.8 c +395.801 809.6 386.601 820.4 Y +387.801 823.2 383.4 836 378.6 844.4 c +373.8 852.8 359.346 851.914 343.4 852.8 c +329 853.6 312.2 832.4 311 830.8 c +309.8 829.2 315.4 794.4 316.6 789.2 c +317.8 784 315.4 760 y +340.9 768.6 319 766.8 344.2 763.2 c +f +0.8 g +390.601 797.2 m +362.8 789.6 351.2 791.2 V +335.4 797.8 326.6 776 V +323 768.8 321 766.8 v +319 764.8 390.601 797.2 Y +f +0 g +394.401 799.4 m +365.4 787.2 355.4 787.6 v +339 792.2 330.6 777.6 V +322.2 768.4 319 766.8 V +318.6 765.2 325 769.2 V +335.4 764 l +350.2 754.4 359.8 770.4 V +363.8 781.6 363.8 783.6 v +363.8 785.6 385 791.2 386.601 791.6 c +388.201 792 394.801 796.2 394.401 799.4 C +f +0.4 0.2 0.8 0 k +347 763.486 m +340.128 763.486 331.755 767.351 331.755 773.6 c +331.755 779.848 340.128 786.113 347 786.113 c +353.874 786.113 359.446 781.048 359.446 774.8 c +359.446 768.551 353.874 763.486 347 763.486 c +f +0.4 0.2 0.8 0.2 k +343.377 780.17 m +338.531 779.448 333.442 777.945 333.514 778.161 c +335.054 782.78 341.415 786.113 347 786.113 c +351.296 786.113 355.084 784.135 357.32 781.125 c +352.004 781.455 343.377 780.17 v +f +1 g +355.4 780.4 m +351 783.6 351 781.4 V +354.6 777 355.4 780.4 V +f +0 g +345.4 772.274 m +342.901 772.274 340.875 774.3 340.875 776.8 c +340.875 779.299 342.901 781.325 345.4 781.325 c +347.9 781.325 349.926 779.299 349.926 776.8 c +349.926 774.3 347.9 772.274 345.4 772.274 c +f +0.2 0.55 0.85 0 k +241.4 785.6 m +238.2 806.8 240.6 811.2 V +251.4 821.2 251 824.8 V +250.6 842.8 249.4 843.6 v +248.2 844.4 240.6 850.4 234.6 844 C +224.2 826 225 819.6 V +225 817.6 l +217.4 818 215.8 816 V +214.6 810.8 213.4 810.4 V +210.6 808 212.6 805.2 V +210.6 802.8 211 798.8 V +218.6 794.8 L +220.6 780.4 231.4 775.2 v +236.236 772.871 239.4 779.6 241.4 785.6 c +f +1 g +240.4 787.44 m +237.52 806.52 239.68 810.48 V +249.4 819.48 249.04 822.72 V +248.68 838.92 247.6 839.64 v +246.52 840.36 239.68 845.76 234.28 840 C +224.92 823.8 225.64 818.04 V +225.64 816.24 l +218.8 816.6 217.36 814.8 V +216.28 810.12 215.2 809.76 V +212.68 807.6 214.48 805.08 V +212.68 802.92 213.04 799.32 V +219.88 795.72 L +221.68 782.76 231.4 778.08 v +235.752 775.985 238.6 782.04 240.4 787.44 c +f +0.075 0.412 0.637 0 k +248.95 842.61 m +247.86 843.47 240.37 849.24 234.52 843 C +224.38 825.45 225.16 819.21 V +225.16 817.26 l +217.75 817.65 216.19 815.7 V +215.02 810.63 213.85 810.24 V +211.12 807.9 213.07 805.17 V +211.12 802.83 211.51 798.93 V +218.92 795.03 L +220.87 780.99 231.4 775.92 v +236.114 773.65 239.2 780.21 241.15 786.06 c +238.03 806.73 240.37 811.02 V +250.9 820.77 250.51 824.28 V +250.12 841.83 248.95 842.61 V +f +0.05 0.275 0.425 0 k +248.5 841.62 m +247.52 842.54 240.14 848.08 234.44 842 C +224.56 824.9 225.32 818.82 V +225.32 816.92 l +218.1 817.3 216.58 815.4 V +215.44 810.46 214.3 810.08 V +211.64 807.8 213.54 805.14 V +211.64 802.86 212.02 799.06 V +219.24 795.26 L +221.14 781.58 231.4 776.64 v +235.994 774.428 239 780.82 240.9 786.52 c +237.86 806.66 240.14 810.84 V +250.4 820.34 250.02 823.76 V +249.64 840.86 248.5 841.62 V +f +0.025 0.137 0.212 0 k +248.05 840.63 m +247.18 841.61 239.91 846.92 234.36 841 C +224.74 824.35 225.48 818.43 V +225.48 816.58 l +218.45 816.95 216.97 815.1 V +215.86 810.29 214.75 809.92 V +212.16 807.7 214.01 805.11 V +212.16 802.89 212.53 799.19 V +219.56 795.49 L +221.41 782.17 231.4 777.36 v +235.873 775.206 238.8 781.43 240.65 786.98 c +237.69 806.59 239.91 810.66 V +249.9 819.91 249.53 823.24 V +249.16 839.89 248.05 840.63 V +f +1 g +240.4 787.54 m +237.52 806.52 239.68 810.48 V +249.4 819.48 249.04 822.72 V +248.68 838.92 247.6 839.64 V +246.84 840.68 239.68 845.76 234.28 840 C +224.92 823.8 225.64 818.04 V +225.64 816.24 l +218.8 816.6 217.36 814.8 V +216.28 810.12 215.2 809.76 V +212.68 807.6 214.48 805.08 V +212.68 802.92 213.04 799.32 V +219.88 795.72 L +221.68 782.76 231.4 778.08 v +235.752 775.985 238.6 782.14 240.4 787.54 c +f +0.8 g +237.3 793.8 m +215.7 804 214.8 804.8 V +223.9 796.6 224.7 796.6 v +225.5 796.6 237.3 793.8 Y +f +0 g +220.2 800 m +238.6 796.4 238.6 792 v +238.6 789.088 238.357 775.669 233 777.2 c +224.6 779.6 228.2 794 220.2 800 c +f +0.4 0.2 0.8 0 k +228.6 796.2 m +237.578 794.726 238.6 792 v +239.2 790.4 239.863 782.092 234.4 781 c +229.848 780.089 227.618 790.31 228.6 796.2 c +f +0 g +314.595 753.651 m +314.098 755.393 315.409 755.262 317.2 755.8 c +319.2 756.4 331.4 760.2 332.2 762.8 c +333 765.4 346.2 761 Y +348 760.2 352.4 757.6 Y +357.2 756.4 363.8 756 Y +366.2 755 369.6 752.2 Y +384.2 742 396.601 749.2 Y +416.601 755.8 410.601 773 Y +407.601 782 410.801 785.4 Y +411.001 789.2 418.201 782.8 Y +420.801 778.6 421.601 773.6 Y +429.601 762.4 426.201 780.2 Y +426.401 781.2 423.601 784.8 423.601 786 c +423.601 787.2 421.801 790.6 Y +418.801 794 421.201 801 Y +423.001 814.8 420.801 813 Y +419.601 814.8 410.401 804.8 Y +408.201 801.4 402.201 799.8 Y +399.401 798 396.001 799.4 Y +393.401 799.8 387.801 792.8 Y +390.601 793 393.001 788.6 395.401 788.4 c +397.801 788.2 399.601 790.8 401.201 791.4 c +402.801 792 405.601 786.2 Y +406.001 783.6 400.401 778.8 Y +400.001 774.2 398.401 775.8 Y +395.401 776.4 394.201 772.6 393.201 768 c +392.201 763.4 388.001 763 y +386.401 755.6 385.2 758.6 Y +385 764.2 379 758.4 Y +377.8 756.4 373.2 758.6 Y +366.4 760.6 368.8 762.6 Y +370.6 764.8 381.8 762.6 Y +384 764.2 376 768.2 Y +375.4 770 376.4 774.4 Y +377.6 777.6 384.4 783.2 Y +393.801 784.4 391.001 786 Y +384.801 791.2 379 783.6 Y +376.8 777.4 359.4 762.4 Y +354.6 759 357.2 765.8 353.2 762.4 c +349.2 759 328.6 768 y +317.038 769.193 314.306 753.451 310.777 756.571 c +316.195 748.051 314.595 753.651 v +f +509.401 920 m +483.801 912 481.001 893.2 V +478.601 870.4 499.001 852.8 V +499.401 846.4 501.401 843.2 v +499.801 838.4 518.601 846 V +545.801 854.4 l +552.201 856.8 557.401 865.6 v +562.601 874.4 577.801 893.2 574.201 918.4 C +575.401 929.6 569.401 930 V +561.001 931.6 553.801 924 V +547.001 920.8 544.601 921.2 V +509.401 920 L +f +564.022 920.99 m +566.122 929.92 561.282 925.08 V +554.242 919.36 546.761 919.36 V +532.241 917.16 527.841 903.96 V +523.881 877.12 531.801 871.4 V +536.641 863.92 543.681 870.52 v +550.722 877.12 566.222 907.35 564.022 920.99 C +f +0.2 g +563.648 920.632 m +565.738 929.376 560.986 924.624 V +554.074 919.008 546.729 919.008 V +532.473 916.848 528.153 903.888 V +524.265 877.536 532.041 871.92 V +536.793 864.576 543.705 871.056 v +550.618 877.536 565.808 907.24 563.648 920.632 C +f +0.4 g +563.274 920.274 m +565.354 928.832 560.69 924.168 V +553.906 918.656 546.697 918.656 V +532.705 916.536 528.465 903.816 V +524.649 877.952 532.281 872.44 V +536.945 865.232 543.729 871.592 v +550.514 877.952 565.394 907.13 563.274 920.274 C +f +0.6 g +562.9 919.916 m +564.97 928.288 560.394 923.712 V +553.738 918.304 546.665 918.304 V +532.937 916.224 528.777 903.744 V +525.033 878.368 532.521 872.96 V +537.097 865.888 543.753 872.128 v +550.41 878.368 564.98 907.02 562.9 919.916 C +f +0.8 g +562.526 919.558 m +564.586 927.744 560.098 923.256 V +553.569 917.952 546.633 917.952 V +533.169 915.912 529.089 903.672 V +525.417 878.784 532.761 873.48 V +537.249 866.544 543.777 872.664 v +550.305 878.784 564.566 906.91 562.526 919.558 C +f +1 g +562.151 919.2 m +564.201 927.2 559.801 922.8 V +553.401 917.6 546.601 917.6 V +533.401 915.6 529.401 903.6 V +525.801 879.2 533.001 874 V +537.401 867.2 543.801 873.2 v +550.201 879.2 564.151 906.8 562.151 919.2 C +f +0.1 0.55 0.85 0.3 k +350.6 716 m +330.2 735.2 322.2 736 V +287.8 740 273 722 V +290.6 742.4 318.2 736.8 V +296.6 741.2 284.2 738 V +267.4 738 257.8 724 V +255 719.2 l +259 734 277.4 740 V +300.2 744.8 311 740 V +289.4 746.8 279.4 744.8 V +249 747.2 236.2 720.8 V +240.2 735.2 255 742.4 V +268.6 751.2 289 748.4 V +303.4 745.2 308.6 742.8 v +313.8 740.4 312.6 743.2 304.2 748 C +298.6 758 284.6 757.6 V +241.8 754 231.4 742 V +245 753.2 255.4 756 V +277.8 764 286.2 763.2 V +311 762.2 318.6 766.2 V +307.4 761.2 310.6 758 v +313.8 754.8 320.6 747.2 320.6 746 c +320.6 744.8 344.8 722.7 348.4 718.3 C +350.6 716 l +f +0.8 g +1 J 0.1 w +489 522 m +473.5 558.5 461 568 V +487 552 490.5 534 V +490.5 524 489 522 V +f +536 514.5 m +509.5 569.5 491 593.5 V +534.5 556 539.5 529.5 V +540 524 l +537 526.5 l +536.5 517.5 536 514.5 V +f +592.5 563 m +530 622.5 528.5 625 V +589 559 592 551.5 V +590 560.5 592.5 563 V +f +404 519.5 m +423.5 571.5 442.5 549 V +457.5 539 457 536 V +453 542.5 435 542 V +416 545 404 519.5 V +f +594.5 647 m +549.5 675.5 542 677 v +530.193 679.361 591.5 648 596.5 637.5 C +598.5 640 594.5 647 V +f +0 g +0 J 1 w +443.801 540.399 m +464.201 542.399 471.001 549.199 V +475.401 545.599 l +493.001 583.999 l +496.601 578.799 l +511.001 593.599 510.201 601.599 v +509.401 609.599 523.001 595.599 y +522.201 607.199 529.401 600.399 V +527.001 615.999 535.401 607.999 V +524.864 638.156 547.401 612.399 v +553.001 605.999 548.601 612.799 y +522.601 660.799 544.201 646.399 v +546.201 669.199 545.001 673.599 v +543.801 677.999 541.801 700.4 537.001 705.6 c +532.201 710.8 537.401 712.4 543.001 707.2 C +531.801 731.2 545.001 719.2 V +541.401 734.4 537.001 737.2 V +531.401 754.4 546.601 743.6 V +542.201 756 539.001 759.2 V +527.401 786.8 534.601 782 V +539.001 778.4 l +532.201 792.4 538.601 788 v +545.001 783.6 545.001 784 y +523.801 817.2 544.201 799.6 V +536.042 813.518 532.601 820.4 V +513.801 840.8 528.201 834.4 V +533.001 832.8 l +524.201 842.8 516.201 844.4 v +508.201 846 518.601 852.4 525.001 850.4 c +531.401 848.4 547.001 840.8 y +559.801 822 563.801 821.6 V +543.801 829.2 549.801 821.2 V +564.201 807.2 557.001 807.6 V +551.001 800.4 555.801 791.6 V +537.342 809.991 552.201 784.4 v +559.001 768 l +534.601 792.8 545.801 770.8 V +563.001 747.2 565.001 746.8 v +567.001 746.4 571.401 737.6 y +567.001 739.6 l +572.201 730.8 l +561.001 742.8 567.001 729.6 V +572.601 715.2 l +552.201 737.2 565.801 707.6 V +549.401 712.8 558.201 695.6 V +556.601 679.599 557.001 674.399 v +557.401 669.199 558.601 640.799 554.201 632.799 c +549.801 624.799 560.201 605.599 562.201 601.599 c +564.201 597.599 567.801 586.799 559.001 595.999 c +550.201 605.199 554.601 599.599 556.601 590.799 c +558.601 581.999 564.601 566.399 563.801 560.799 C +562.601 559.599 559.401 563.199 V +544.601 585.999 546.201 571.599 V +545.001 563.599 541.801 554.799 V +538.601 543.999 538.601 552.799 V +535.401 569.599 532.601 561.999 v +529.801 554.399 526.201 548.399 523.401 545.999 c +520.601 543.599 515.401 566.399 514.201 555.999 C +502.201 568.399 497.401 551.999 V +485.801 535.599 l +485.401 547.999 484.201 541.999 V +454.201 535.999 443.801 540.399 V +f +409.401 897.2 m +397.801 905.2 393.801 904.8 v +389.801 904.4 421.401 913.6 462.601 886 C +467.401 883.2 471.001 883.6 V +474.201 881.2 471.401 877.6 V +462.601 868 473.801 856.8 V +492.201 850 486.601 858.8 V +497.401 854.8 499.801 850.8 v +502.201 846.8 501.001 850.8 y +494.601 858 488.601 863.2 V +483.401 865.2 480.601 873.6 v +477.801 882 475.401 892 479.801 895.2 C +475.801 890.8 476.601 894.8 v +477.401 898.8 481.001 902.4 482.601 902.8 c +484.201 903.2 500.601 919 507.401 919.4 C +498.201 918 495.201 919 v +492.201 920 465.601 931.4 459.601 932.6 C +442.801 939.2 454.801 937.2 V +490.601 933.4 508.801 920.2 V +501.601 928.6 483.201 935.6 V +461.001 948.2 425.801 943.2 V +408.001 940 400.201 938.2 V +397.601 938.8 397.001 939.2 v +396.401 939.6 384.6 948.6 357 941.6 C +340 937 331.4 932.2 V +316.2 931 312.6 927.8 V +294 913.2 292 912.4 v +290 911.6 278.6 904 277.8 903.6 C +302.4 910.2 304.8 912.6 v +307.2 915 324.6 917.6 327 916.2 c +329.4 914.8 337.8 915.4 328.2 914.8 C +403.801 900 404.601 898 v +405.401 896 409.401 897.2 y +f +0.2 0.55 0.85 0 k +480.801 906.4 m +470.601 913.8 468.601 913.8 v +466.601 913.8 454.201 924 450.001 923.6 c +445.801 923.2 433.601 933.2 406.201 925 C +405.601 927 409.201 927.8 V +415.601 930 416.001 930.6 V +436.201 934.8 443.401 931.2 V +452.601 928.6 458.801 922.4 V +470.001 919.2 473.201 920.2 V +482.001 918 482.401 916.2 V +488.201 913.2 486.401 910.6 V +486.801 909 480.801 906.4 V +f +468.33 908.509 m +469.137 907.877 470.156 907.779 470.761 906.97 c +470.995 906.656 470.706 906.33 470.391 906.233 c +469.348 905.916 468.292 906.486 467.15 905.898 c +466.748 905.691 466.106 905.873 465.553 906.022 c +463.921 906.463 462.092 906.488 460.401 905.8 C +458.416 906.929 456.056 906.345 453.975 907.346 c +453.917 907.373 453.695 907.027 453.621 907.054 c +450.575 908.199 446.832 907.916 444.401 910.2 C +441.973 910.612 439.616 911.074 437.188 911.754 c +435.37 912.263 433.961 913.252 432.341 914.084 c +430.964 914.792 429.507 915.314 427.973 915.686 c +426.11 916.138 424.279 916.026 422.386 916.546 c +422.293 916.571 422.101 916.227 422.019 916.254 c +421.695 916.362 421.405 916.945 421.234 916.892 c +419.553 916.37 418.065 917.342 416.401 917 C +415.223 918.224 413.495 917.979 411.949 918.421 c +408.985 919.269 405.831 917.999 402.801 919 C +406.914 920.842 411.601 919.61 415.663 921.679 c +417.991 922.865 420.653 921.763 423.223 922.523 c +423.71 922.667 424.401 922.869 424.801 922.2 C +424.935 922.335 425.117 922.574 425.175 922.546 c +427.625 921.389 429.94 920.115 432.422 919.049 c +432.763 918.903 433.295 919.135 433.547 918.933 c +435.067 917.717 437.01 917.82 438.401 916.6 C +440.099 917.102 441.892 916.722 443.621 917.346 c +443.698 917.373 443.932 917.032 443.965 917.054 c +445.095 917.802 446.25 917.531 447.142 917.227 c +447.48 917.112 448.143 916.865 448.448 916.791 c +449.574 916.515 450.43 916.035 451.609 915.852 c +451.723 915.834 451.908 916.174 451.98 916.146 c +453.103 915.708 454.145 915.764 454.801 914.6 C +454.936 914.735 455.101 914.973 455.183 914.946 c +456.21 914.608 456.859 913.853 457.96 913.612 c +458.445 913.506 459.057 912.88 459.633 912.704 c +462.025 911.973 463.868 910.444 466.062 909.549 c +466.821 909.239 467.697 909.005 468.33 908.509 c +f +391.696 922.739 m +389.178 924.464 386.81 925.57 384.368 927.356 c +384.187 927.489 383.827 927.319 383.625 927.441 c +382.618 928.05 381.73 928.631 380.748 929.327 c +380.209 929.709 379.388 929.698 378.88 929.956 c +376.336 931.248 373.707 931.806 371.2 933 C +371.882 933.638 373.004 933.394 373.6 934.2 C +373.795 933.92 374.033 933.636 374.386 933.827 c +376.064 934.731 377.914 934.884 379.59 934.794 c +381.294 934.702 383.014 934.397 384.789 934.125 c +385.096 934.078 385.295 933.555 385.618 933.458 c +387.846 932.795 390.235 933.32 392.354 932.482 c +393.945 931.853 395.515 931.03 396.754 929.755 c +397.006 929.495 396.681 929.194 396.401 929 C +396.789 929.109 397.062 928.903 397.173 928.59 c +397.257 928.351 397.257 928.049 397.173 927.81 c +397.061 927.498 396.782 927.397 396.408 927.346 c +395.001 927.156 396.773 928.536 396.073 928.088 c +394.8 927.274 395.546 925.868 394.801 924.6 C +394.521 924.794 394.291 925.012 394.401 925.4 C +394.635 924.878 394.033 924.588 393.865 924.272 c +393.48 923.547 392.581 922.132 391.696 922.739 c +f +359.198 915.391 m +356.044 916.185 352.994 916.07 349.978 917.346 c +349.911 917.374 349.688 917.027 349.624 917.054 c +348.258 917.648 347.34 918.614 346.264 919.66 c +345.351 920.548 343.693 920.161 342.419 920.648 c +342.095 920.772 341.892 921.284 341.591 921.323 c +340.372 921.48 339.445 922.429 338.4 923 C +340.736 923.795 343.147 923.764 345.609 924.148 c +345.722 924.166 345.867 923.845 346 923.845 c +346.136 923.845 346.266 924.066 346.4 924.2 C +346.595 923.92 346.897 923.594 347.154 923.848 c +347.702 924.388 348.258 924.198 348.798 924.158 c +348.942 924.148 349.067 923.845 349.2 923.845 c +349.336 923.845 349.467 924.156 349.6 924.156 c +349.736 924.155 349.867 923.845 350 923.845 c +350.136 923.845 350.266 924.066 350.4 924.2 C +351.092 923.418 351.977 923.972 352.799 923.793 c +353.837 923.566 354.104 922.418 355.178 922.12 c +359.893 920.816 364.03 918.671 368.393 916.584 c +368.7 916.437 368.91 916.189 368.8 915.8 C +369.067 915.8 369.38 915.888 369.57 915.756 c +370.628 915.024 371.669 914.476 372.366 913.378 c +372.582 913.039 372.253 912.632 372.02 912.684 c +367.591 913.679 363.585 914.287 359.198 915.391 c +f +345.338 871.179 m +343.746 872.398 343.162 874.429 342.034 876.221 c +341.82 876.561 342.094 876.875 342.411 876.964 c +342.971 877.123 343.514 876.645 343.923 876.443 c +345.668 875.581 347.203 874.339 349.2 874.2 C +351.19 871.966 355.45 871.581 355.457 868.2 c +355.458 867.341 354.03 868.259 353.6 867.4 C +351.149 868.403 348.76 868.3 346.38 869.767 c +345.763 870.148 346.093 870.601 345.338 871.179 c +f +317.8 923.756 m +317.935 923.755 324.966 923.522 324.949 923.408 c +324.904 923.099 317.174 922.05 316.81 922.22 c +316.646 922.296 309.134 919.866 309 920 C +309.268 920.135 317.534 923.756 317.8 923.756 c +f +0 g +333.2 914 m +318.4 912.2 314 911 v +309.6 909.8 291 902.2 288 900.2 C +274.6 894.8 257.6 874.8 V +265.2 878.2 267.4 881 V +281 893.6 280.8 891 V +293 899.6 292.4 897.4 V +316.8 908.6 314.8 905.4 V +336.4 910 335.4 908 V +354.2 903.6 351.4 903.4 V +345.6 902.2 352 898.6 V +348.6 894.2 343.2 898.2 v +337.8 902.2 340.8 900 335.8 899 C +333.2 898.2 328.6 902.2 V +323 906.8 314.2 903.2 V +283.6 890.6 281.6 890 V +278 887.2 275.6 883.6 V +269.8 879.2 266.8 877.8 V +254 866.2 252.8 864.8 V +249.4 859.6 248.6 859.2 V +255 863 257 865 V +271 875 276.4 875.8 V +280.8 878.8 281.6 880.2 V +296 889.4 300.2 889.4 V +309.4 884.2 311.8 891.2 V +317.6 893 323.2 891.8 V +326.4 894.4 325.6 896.6 V +327.2 898.4 328.2 894.6 V +331.6 891 336.4 893 V +340.4 893.2 338.4 890.8 V +334 887 322.2 886.8 V +309.8 886.2 293.4 878.6 V +263.6 868.2 254.4 857.8 V +248 849 242.6 847.8 V +236.8 847 230.8 839.6 V +240.6 845.4 249.6 845.4 V +253.6 847.8 249.8 844.2 V +246.2 836.6 247.8 831.2 V +247.2 826 246.4 824.4 V +238.6 811.6 238.6 809.2 v +238.6 806.8 239.8 797 240.2 796.4 c +240.6 795.8 239.2 798 243 795.6 c +246.8 793.2 249.6 791.6 250.4 788.8 c +251.2 786 248.4 794.2 248.2 796 c +248 797.8 243.8 805 244.6 807.4 C +245.6 806.4 246.4 805 V +245.8 805.6 246.4 809.2 V +247.2 814.4 248.6 817.6 v +250 820.8 252 824.6 252.4 825.4 c +252.8 826.2 252.8 832 254.2 829.4 C +257.6 826.8 l +254.8 829.4 257 831.6 V +256 837.2 257.8 839.8 V +264.8 848.2 266.4 849.2 v +268 850.2 266.6 849.8 y +272.6 854 266.8 852.4 V +262.8 850.8 259.8 850.8 V +252.2 848.8 256.2 853 v +260.2 857.2 270.2 862.6 274 862.4 C +274.8 860.8 l +286 863.2 l +284.8 862.4 l +284.6 862.6 288.8 863 v +293 863.4 298.8 862 300.2 863.8 c +301.6 865.6 305 866.6 304.6 865.2 c +304.2 863.8 304 861.8 y +309 867.6 308.4 865.4 v +307.8 863.2 299.6 858 298.2 851.8 C +308.6 860 l +312.2 863 l +315.8 860.8 316 862.4 v +316.2 864 320.8 869.8 322 869.6 c +323.2 869.4 325.2 872.2 325 869.6 c +324.8 867 332.4 861.6 y +335.6 863.4 337 862 v +338.4 860.6 342.6 881.8 y +367.6 892.4 l +411.201 895.8 l +394.201 902.6 l +333.2 914 l +f +0.2 0.55 0.85 0.5 K +1 J 2 w +351.4 715 m +336.4 731.8 328 734.4 V +314.6 741.2 290 733.4 v +S +324.8 735.8 m +299.6 743.8 284.2 739.6 V +265.8 737.6 257.4 723.8 v +S +321.2 737 m +304.2 744.2 289.4 746.4 V +272.8 749 256.2 741.8 V +244 735.8 238.6 725.6 v +S +322.2 736.6 m +306.8 747.6 305.8 749 V +298.8 760 285.8 760.4 V +264.4 759.6 247.2 751.6 v +S +0 G +0 J 1 w +320.895 745.593 m +322.437 744.13 349.4 715.2 Y +384.6 678.599 356.6 712.8 Y +349 717.6 339.8 736.4 Y +338.6 739.2 353.8 729.2 Y +357.8 728.4 371.4 709.2 Y +364.6 711.6 369.4 704.4 Y +372.2 702.4 392.601 686.799 Y +396.201 682.799 400.201 681.199 Y +414.201 686.399 407.801 673.199 Y +410.201 666.399 415.801 677.999 Y +427.001 694.8 410.601 692.399 Y +380.6 689.599 373.8 705.6 Y +371.4 708 380.2 705.6 Y +388.601 703.6 373 718 Y +375.4 718 384.6 711.2 Y +395.001 702 397.001 704 Y +415.001 712.8 425.401 705.2 Y +427.401 703.6 421.801 696.8 423.401 691.599 c +425.001 686.399 429.801 673.999 Y +427.401 672.399 427.801 661.599 Y +444.601 638.399 435.001 640.399 Y +419.401 640.799 434.201 633.199 Y +437.401 631.199 446.201 623.999 Y +443.401 625.199 441.801 619.999 Y +446.601 615.999 443.801 611.199 Y +437.801 609.999 436.601 605.999 Y +443.401 597.999 433.401 597.599 Y +437.001 593.199 432.201 581.199 Y +427.401 581.199 421.001 575.599 Y +423.401 570.799 413.001 565.199 Y +404.601 563.599 407.401 556.799 Y +399.401 550.799 397.001 534.799 Y +396.201 524.399 393.801 521.199 399.001 523.199 c +404.201 525.199 403.401 537.599 Y +398.601 553.199 441.401 569.199 Y +445.401 570.799 446.201 575.999 Y +448.201 575.599 457.001 567.999 Y +464.601 556.799 465.001 565.999 Y +466.201 569.599 464.601 575.599 Y +470.601 597.199 456.601 603.599 Y +446.601 637.199 460.601 628.799 Y +463.401 623.199 474.201 617.999 y +477.801 620.399 L +476.201 625.199 484.601 631.199 Y +487.401 624.799 493.401 632.799 Y +497.001 657.199 509.401 642.799 Y +513.401 641.599 514.601 648.399 Y +518.201 658.799 514.601 672.399 Y +518.201 672.799 527.801 666.799 Y +530.601 670.399 521.401 687.199 525.401 684.799 c +529.401 682.399 533.801 680.799 Y +534.601 682.799 524.601 695.199 Y +520.201 698 515.001 718.4 Y +522.201 714.8 512.201 730 Y +512.201 733.2 518.201 744.4 Y +517.401 751.2 518.201 750.8 Y +521.001 749.6 529.001 748 522.201 754.4 c +515.401 760.8 523.001 765.6 Y +527.401 768.4 513.801 768 Y +508.601 772.4 509.001 776.4 Y +517.001 774.4 502.601 788.8 500.201 792.4 c +497.801 796 507.401 801.2 Y +520.601 804.8 509.001 808 Y +489.401 807.6 500.201 818.4 Y +506.201 818 504.601 820.4 Y +499.401 821.6 489.801 828 Y +485.801 831.6 489.401 830.8 Y +506.201 829.6 477.401 840.8 Y +485.401 840.8 467.401 851.2 Y +465.401 852.8 462.201 860.4 Y +456.201 865.6 451.401 872.4 Y +451.001 876.8 446.201 881.6 Y +434.601 895.2 429.001 894.8 Y +414.201 898.4 409.001 897.6 Y +356.2 893.2 l +329.8 880.4 337.6 859.4 Y +344 851 353.2 854.8 Y +357.8 861 369.4 858.8 Y +389.801 855.6 387.201 859.2 Y +384.801 863.8 368.6 870 368.4 870.6 c +368.2 871.2 359.4 874.6 Y +356.4 875.8 352 885 Y +348.8 888.4 364.6 882.6 Y +363.4 881.6 370.8 877.6 Y +388.201 878.6 398.801 867.8 Y +409.601 851.2 409.801 859.4 Y +412.601 868.8 400.801 890 Y +401.201 892 409.401 885.4 Y +410.801 887.4 411.601 881.6 Y +411.801 879.2 415.601 871.2 Y +418.401 858.2 422.001 865.6 Y +426.601 856.2 L +428.001 853.6 422.001 846 Y +421.801 843.2 422.601 843.4 417.001 835.8 c +411.401 828.2 414.801 823.8 Y +413.401 817.2 422.201 817.6 Y +424.801 815.4 428.201 815.4 Y +430.001 813.4 432.401 814 Y +434.001 817.8 440.201 815.8 Y +441.601 818.2 449.801 818.6 Y +450.801 821.2 451.201 822.8 454.601 823.4 c +458.001 824 433.401 867 Y +439.801 867.8 431.601 880.2 Y +429.401 886.8 440.801 872.2 443.001 870.8 c +445.201 869.4 446.201 867.2 444.601 867.4 c +443.001 867.6 441.201 865.4 442.601 865.2 c +444.001 865 457.001 850 460.401 839.8 c +463.801 829.6 469.801 825.6 476.001 819.6 c +482.201 813.6 481.401 789.4 Y +481.001 780.6 487.001 770 Y +489.001 766.2 484.801 748 Y +482.801 745.8 484.201 745 Y +485.201 743.8 492.001 730.6 Y +490.201 730.8 493.801 727.2 Y +499.001 721.2 492.601 724.2 Y +486.601 725.8 493.601 716 Y +494.801 714.2 485.801 718.8 Y +476.601 719.4 488.201 712.2 Y +496.801 705 485.401 709.4 Y +480.801 711.2 484.001 704.4 Y +487.201 702.8 504.401 695.8 Y +504.801 691.999 501.801 686.999 Y +502.201 682.999 500.001 679.599 Y +498.801 671.399 498.201 670.599 Y +494.001 670.399 486.601 656.599 Y +484.801 653.999 474.601 641.999 Y +472.601 634.999 454.601 642.199 Y +448.001 638.799 450.001 642.199 Y +449.601 644.399 454.401 650.399 Y +461.401 652.999 458.801 663.799 Y +462.801 665.199 451.601 667.999 451.801 669.199 c +452.001 670.399 457.801 671.799 Y +465.801 673.799 461.401 676.199 Y +460.801 680.199 463.801 685.799 Y +475.401 686.599 463.801 702.8 Y +453.001 710.4 452.001 716.2 Y +464.601 724.4 456.401 736.8 456.601 740.4 c +456.801 744 458.001 765.6 Y +456.001 771.8 453.001 785.4 Y +455.201 790.6 462.601 803.2 Y +465.401 807.4 474.201 812.2 472.001 815.2 c +469.801 818.2 462.001 816.4 Y +454.201 817.8 454.801 812.6 Y +453.201 811.6 452.401 806.6 Y +451.68 798.667 442.801 792.4 Y +431.601 786.2 440.801 782.2 Y +446.801 775.6 437.001 775.4 Y +426.001 777.2 434.201 767 Y +445.001 754.2 442.001 751.4 Y +431.801 750.4 444.401 741.2 y +443.601 743.2 443.801 741.4 v +444.001 739.6 447.001 735.4 447.801 733.4 c +448.601 731.4 444.601 731.2 Y +445.201 721.6 429.801 725.8 y +429.801 725.8 428.201 725.6 v +426.601 725.4 415.401 726.2 409.601 728.4 c +403.801 730.6 397.001 730.6 y +393.001 728.8 385.4 729 v +377.8 729.2 369.8 726.4 Y +365.4 726.8 374 731.2 374.2 731 c +374.4 730.8 380 736.4 372 735.8 c +350.203 734.165 339.4 744.4 Y +337.4 745.8 334.8 748.6 Y +324.8 750.6 336.2 736.2 Y +337.4 734.8 336 733.8 Y +335.2 735.4 327.4 740.8 Y +324.589 741.773 323.226 743.107 320.895 745.593 C +f +0.2 0.55 0.85 0.5 k +1 J 2 w +297 757.2 m +308.6 751.6 311.2 748.8 v +313.8 746 327.8 734.6 y +322.4 736.6 319.8 738.4 v +317.2 740.2 306.4 748.4 y +302.6 754.4 297 757.2 v +f +0.4 0.2 0.8 0 k +0 J 1 w +238.991 788.397 m +239.328 788.545 238.804 791.257 238.6 791.8 c +237.578 794.526 228.6 796 y +228.373 794.635 228.318 793.039 228.424 791.401 c +233.292 785.882 238.991 788.397 v +f +0.4 0.2 0.8 0.2 k +238.991 788.597 m +238.542 788.439 238.976 791.331 238.8 791.8 c +237.778 794.526 228.6 796.1 y +228.373 794.735 228.318 793.139 228.424 791.501 c +232.692 786.382 238.991 788.597 v +f +0 g +234.6 788.454 m +233.975 788.454 233.469 789.594 233.469 791 c +233.469 792.405 233.975 793.545 234.6 793.545 c +235.225 793.545 235.732 792.405 235.732 791 c +235.732 789.594 235.225 788.454 234.6 788.454 c +f +234.6 791 m +F +189 690.399 m +183.4 680.399 208.2 686.399 V +222.2 687.599 224.6 689.999 V +225.8 689.199 234.166 686.266 237 685.599 c +243.8 683.999 252.2 694 y +256.8 704.5 259.6 704.5 v +262.4 704.5 259.2 702.9 y +252.6 692.799 253 691.199 V +247.8 671.199 231.8 670.399 V +215.65 669.449 217 663.599 V +225.8 665.999 228.2 663.599 V +239 663.999 231 657.599 V +224.2 645.999 l +224.34 642.081 214.2 645.599 v +204.4 648.999 194.1 661.899 y +178.15 676.449 189 690.399 V +f +0.1 0.4 0.4 0 k +187.8 686.399 m +185.8 676.799 222.6 687.199 V +227 687.199 229.4 686.399 v +231.8 685.599 243.8 682.799 245.8 683.999 C +238.6 670.399 227 671.999 V +213.8 670.399 214.2 665.599 V +218.2 658.399 223 655.999 V +225.8 653.599 225.4 650.399 v +225 647.199 222.2 645.599 220.2 644.799 c +218.2 643.999 215 647.199 213.4 647.199 c +211.8 647.199 203.4 653.599 199 658.399 c +194.6 663.199 186.2 675.199 186.6 677.999 c +187 680.799 187.8 686.399 Y +f +0.1 0.4 0.4 0.2 k +191 668.949 m +193.6 664.999 196.8 660.799 199 658.399 c +203.4 653.599 211.8 647.199 213.4 647.199 c +215 647.199 218.2 643.999 220.2 644.799 c +222.2 645.599 225 647.199 225.4 650.399 c +225.8 653.599 223 655.999 Y +219.934 657.532 217.194 661.024 215.615 663.347 C +215.8 660.799 210.6 661.599 v +205.4 662.399 200.2 665.199 198.6 668.399 c +197 671.599 194.6 673.999 196.2 670.399 c +197.8 666.799 200.2 663.199 201.8 662.799 c +203.4 662.399 203 661.199 200.6 661.599 c +198.2 661.999 195.4 662.399 191 667.599 c +F +0.1 0.55 0.85 0.3 k +188.4 689.999 m +190.2 703.6 191.4 707.6 V +190.6 714.4 193 718.6 v +195.4 722.8 197.4 729 200.4 734.4 c +203.4 739.8 203.6 743.8 207.6 745.4 c +211.6 747 217.6 755.6 220.4 756.6 c +223.2 757.6 223 756.8 y +229.8 771.6 243.4 767.6 V +227.2 770.4 243 779.8 V +238.2 778.7 241.5 785.7 v +243.701 790.368 243.2 783.6 232.2 771.8 C +227.2 763.2 222 760.2 v +216.8 757.2 204.8 750.2 203.6 746.4 c +202.4 742.6 199.2 736.8 197.2 735.2 c +195.2 733.6 192.4 729.4 192 726 C +190.8 722 189.4 720.8 v +188 719.6 187.8 716.4 187.8 714.4 c +187.8 712.4 185.8 709.6 186 707.2 C +186.8 688.199 186.4 686.199 V +188.4 689.999 L +f +1 g +179.8 685.399 m +177.8 686.799 173.4 680.799 V +180.7 647.799 180.7 646.399 V +181.8 648.499 180.5 655.699 v +179.2 662.899 178.3 675.599 y +179.8 685.399 l +f +0.1 0.55 0.85 0.3 k +201.4 746 m +183.8 742.8 184.2 713.6 V +183.4 688.799 l +182.2 714.4 181 716 v +179.8 717.6 183.8 728.8 180.6 722.8 C +166.6 708.8 174.6 687.599 V +176.1 684.299 173.1 688.899 V +168.5 701.5 169.6 707.9 V +169.8 710.1 171.7 712.9 V +180.3 724.6 183 726.9 V +184.8 741.3 200.2 746.5 V +205.9 748.8 201.4 746 V +f +0 g +340.8 812.2 m +341.46 812.554 341.451 813.524 342.031 813.697 c +343.18 814.041 343.344 815.108 343.862 815.892 c +344.735 817.211 344.928 818.744 345.51 820.235 c +345.782 820.935 345.809 821.89 345.496 822.55 c +344.322 825.031 343.62 827.48 342.178 829.906 c +341.91 830.356 341.648 831.15 341.447 831.748 c +340.984 833.132 339.727 834.123 338.867 835.443 c +338.579 835.884 339.104 836.809 338.388 836.893 c +337.491 836.998 336.042 837.578 335.809 836.552 c +335.221 833.965 336.232 831.442 337.2 829 C +336.418 828.308 336.752 827.387 336.904 826.62 c +337.614 823.014 336.416 819.662 335.655 816.188 c +335.632 816.084 335.974 815.886 335.946 815.824 c +334.724 813.138 333.272 810.693 331.453 808.312 c +330.695 807.32 329.823 806.404 329.326 805.341 c +328.958 804.554 328.55 803.588 328.8 802.6 C +325.365 799.82 323.115 795.975 320.504 792.129 c +320.042 791.449 320.333 790.24 320.884 789.971 c +321.697 789.573 322.653 790.597 323.123 791.443 c +323.512 792.141 323.865 792.791 324.356 793.434 c +324.489 793.609 324.31 794.028 324.445 794.149 c +327.078 796.496 328.747 799.432 331.2 801.8 C +333.15 802.129 334.687 803.127 336.435 804.14 c +336.743 804.319 337.267 804.07 337.557 804.265 c +339.31 805.442 339.308 807.478 339.414 809.388 c +339.464 810.272 339.66 811.589 340.8 812.2 c +f +331.959 816.666 m +332.083 816.743 331.928 817.166 332.037 817.382 c +332.199 817.706 332.602 817.894 332.764 818.218 c +332.873 818.434 332.71 818.814 332.846 818.956 c +335.179 821.403 335.436 824.427 334.4 827.4 C +335.424 828.02 335.485 829.282 335.06 830.129 c +334.207 831.829 334.014 833.755 333.039 835.298 c +332.237 836.567 330.659 837.811 329.288 836.508 c +328.867 836.108 328.546 835.321 328.824 834.609 c +328.888 834.446 329.173 834.3 329.146 834.218 c +329.039 833.894 328.493 833.67 328.487 833.398 c +328.457 831.902 327.503 830.391 328.133 829.062 c +328.905 827.433 329.724 825.576 330.4 823.8 C +329.166 821.684 330.199 819.235 328.446 817.358 c +328.31 817.212 328.319 816.826 328.441 816.624 c +328.733 816.138 329.139 815.732 329.625 815.44 c +329.827 815.319 330.175 815.317 330.375 815.441 c +330.953 815.803 331.351 816.29 331.959 816.666 c +f +394.771 826.977 m +396.16 825.185 396.45 822.39 394.401 821 C +394.951 817.691 398.302 819.67 400.401 820.2 C +400.292 820.588 400.519 820.932 400.802 820.937 c +401.859 820.952 402.539 821.984 403.601 821.8 C +404.035 823.357 405.673 824.059 406.317 825.439 c +408.043 829.134 407.452 833.407 404.868 836.653 c +404.666 836.907 404.883 837.424 404.759 837.786 c +404.003 839.997 401.935 840.312 400.001 841 C +398.824 844.875 398.163 848.906 396.401 852.6 C +394.787 852.85 394.089 854.589 392.752 855.309 c +391.419 856.028 390.851 854.449 390.892 853.403 c +390.899 853.198 391.351 852.974 391.181 852.609 c +391.105 852.445 390.845 852.334 390.845 852.2 c +390.846 852.065 391.067 851.934 391.201 851.8 C +390.283 850.98 388.86 850.503 388.565 849.358 c +387.611 845.648 390.184 842.523 391.852 839.322 c +392.443 838.187 391.707 836.916 390.947 835.708 c +390.509 835.013 390.617 833.886 390.893 833.03 c +391.645 830.699 393.236 828.96 394.771 826.977 c +f +357.611 808.591 m +356.124 806.74 352.712 804.171 355.629 802.243 c +355.823 802.114 356.193 802.11 356.366 802.244 c +358.387 803.809 360.39 804.712 362.826 805.294 c +362.95 805.323 363.224 804.856 363.593 805.017 c +365.206 805.72 367.216 805.662 368.4 807 C +372.167 806.776 375.732 807.892 379.123 809.2 c +380.284 809.648 381.554 810.207 382.755 810.709 c +384.131 811.285 385.335 812.213 386.447 813.354 c +386.58 813.49 386.934 813.4 387.201 813.4 C +387.161 814.263 388.123 814.39 388.37 815.012 c +388.462 815.244 388.312 815.64 388.445 815.742 c +390.583 817.372 391.503 819.39 390.334 821.767 c +390.049 822.345 389.8 822.963 389.234 823.439 c +388.149 824.35 387.047 823.496 386 823.8 C +385.841 823.172 385.112 823.344 384.726 823.146 c +383.867 822.707 382.534 823.292 381.675 822.854 c +380.313 822.159 379.072 821.99 377.65 821.613 c +377.338 821.531 376.56 821.627 376.4 821 C +376.266 821.134 376.118 821.368 376.012 821.346 c +374.104 820.95 372.844 820.736 371.543 819.044 c +371.44 818.911 370.998 819.09 370.839 818.955 c +369.882 818.147 369.477 816.913 368.376 816.241 c +368.175 816.118 367.823 816.286 367.629 816.157 c +366.983 815.726 366.616 815.085 365.974 814.638 c +365.645 814.409 365.245 814.734 365.277 814.99 c +365.522 816.937 366.175 818.724 365.6 820.6 C +367.677 823.12 370.194 825.069 372 827.8 C +372.015 829.966 372.707 832.112 372.594 834.189 c +372.584 834.382 372.296 835.115 372.17 835.462 c +371.858 836.316 372.764 837.382 371.92 838.106 c +370.516 839.309 369.224 838.433 368.4 837 C +366.562 836.61 364.496 835.917 362.918 837.151 c +361.911 837.938 361.333 838.844 360.534 839.9 c +359.549 841.202 359.884 842.638 359.954 844.202 c +359.96 844.33 359.645 844.466 359.645 844.6 c +359.646 844.735 359.866 844.866 360 845 C +359.294 845.626 359.019 846.684 358 847 C +358.305 848.092 357.629 848.976 356.758 849.278 c +354.763 849.969 353.086 848.057 351.194 847.984 c +350.68 847.965 350.213 849.003 349.564 849.328 c +349.132 849.544 348.428 849.577 348.066 849.311 c +347.378 848.807 346.789 848.693 346.031 848.488 c +344.414 848.052 343.136 846.958 341.656 846.103 c +340.171 845.246 339.216 843.809 338.136 842.489 c +337.195 841.337 337.059 838.923 338.479 838.423 c +340.322 837.773 341.626 840.476 343.592 840.15 c +343.904 840.099 344.11 839.788 344 839.4 C +344.389 839.291 344.607 839.52 344.8 839.8 C +345.658 838.781 346.822 838.444 347.76 837.571 c +348.73 836.667 350.476 837.085 351.491 836.088 c +353.02 834.586 352.461 831.905 354.4 830.6 C +353.814 829.287 353.207 828.01 352.872 826.583 c +352.59 825.377 353.584 824.18 354.795 824.271 c +356.053 824.365 356.315 825.124 356.8 826.2 C +357.067 825.933 357.536 825.636 357.495 825.42 c +357.038 823.033 356.011 821.04 355.553 818.609 c +355.494 818.292 355.189 818.09 354.8 818.2 C +354.332 814.051 350.28 811.657 347.735 808.492 c +347.332 807.99 347.328 806.741 347.737 806.338 c +349.14 804.951 351.1 806.497 352.8 807 C +353.013 808.206 353.872 809.148 355.204 809.092 c +355.46 809.082 355.695 809.624 356.019 809.754 c +356.367 809.892 356.869 809.668 357.155 809.866 c +358.884 811.061 360.292 812.167 362.03 813.356 c +362.222 813.487 362.566 813.328 362.782 813.436 c +363.107 813.598 363.294 813.985 363.617 814.17 c +363.965 814.37 364.207 814.08 364.4 813.8 C +363.754 813.451 363.75 812.494 363.168 812.292 c +362.393 812.024 361.832 811.511 361.158 811.064 c +360.866 810.871 360.207 811.119 360.103 810.94 c +359.505 809.912 358.321 809.474 357.611 808.591 c +f +302.2 858 m +292.962 860.872 281.8 835.2 V +279.4 830 277 828 v +274.6 826 263.4 822.4 261.4 818.4 C +251 802.4 L +265.8 818.4 269 820.8 V +277 829.2 273.8 822.4 V +259.8 811.6 261 802.4 V +255.4 788 254.6 786 V +270.6 818 273 819.2 v +275.4 820.4 276.6 820.4 275.4 816.8 c +274.2 813.2 273.8 796.8 271 794.8 C +279 815.2 278.2 818.4 V +281.4 822 283.8 816.8 V +282.6 800.8 l +287 788.8 l +284.6 800 286.2 815.6 V +284.2 826 288.2 820.4 v +292.2 814.8 301.8 808.8 301.8 804 C +296.6 821.6 287.4 826.4 V +283.4 820.4 l +282.2 822.4 l +278.6 823.2 283 830 v +287.4 836.8 287 837.6 y +293.4 830.4 295 830.4 V +308.2 838 309.4 813.6 V +316.2 828 307 834.8 V +292.2 836.8 293.4 842 V +300.6 854.4 L +304.2 859.6 302.6 856.8 y +F +282.2 841.6 m +269.4 841.6 266.2 836.4 V +259 826.8 l +276.2 836.8 280.2 838 v +284.2 839.2 282.2 841.6 Y +f +242.2 835.2 m +240.2 834 239.8 831.2 v +239.4 828.4 237 828 237.8 825.2 c +238.6 822.4 240.6 820 240.6 824 c +240.6 828 242.2 830 243 831.2 c +243.8 832.4 245.4 836.8 242.2 835.2 c +f +233.4 774 m +225 778 221.8 781.6 v +218.6 785.2 219.052 780.034 214.2 780.4 c +208.353 780.841 209.4 796.8 y +205.4 789.2 l +204.2 774.8 212.2 777.2 v +216.107 778.372 217.4 776.8 215.8 776 c +214.2 775.2 221.4 774.8 218.6 773.2 c +215.8 771.6 230.2 776.8 227.8 766.4 C +233.4 774 L +f +220.8 759.6 m +205.4 755.2 201.8 764.8 V +197 762.4 199.2 759.4 v +201.4 756.4 202.6 756 y +208 754.8 207.4 754 v +206.8 753.2 204.4 749.8 y +214.6 755.8 220.8 759.6 v +f +1 g +449.201 681.399 m +448.774 679.265 447.103 678.464 445.201 677.799 C +443.284 678.757 440.686 681.863 438.801 679.799 C +438.327 680.279 437.548 680.339 437.204 681.001 c +436.739 681.899 437.011 682.945 436.669 683.743 c +436.124 685.015 435.415 686.381 435.601 687.799 C +437.407 688.511 438.002 690.417 437.528 692.18 c +437.459 692.437 437.03 692.634 437.23 692.983 c +437.416 693.306 437.734 693.533 438.001 693.8 C +437.866 693.665 437.721 693.432 437.61 693.452 c +437 693.558 437.124 694.195 437.254 694.582 c +437.839 696.328 439.853 696.592 441.201 695.4 C +441.457 695.965 441.966 695.771 442.401 695.8 C +442.351 696.379 442.759 696.906 442.957 697.326 c +443.475 698.424 445.104 697.318 445.901 697.93 c +446.977 698.755 448.04 699.454 449.118 698.851 c +450.927 697.838 452.636 696.626 453.835 694.885 c +454.41 694.051 454.65 692.77 454.592 691.812 c +454.554 691.165 453.173 691.517 452.83 690.588 c +452.185 688.84 454.016 688.321 454.772 686.983 c +454.97 686.634 454.706 686.33 454.391 686.232 c +453.98 686.104 453.196 686.293 453.334 685.84 c +454.306 682.647 451.55 681.969 449.201 681.399 C +f +439.6 661.799 m +439.593 663.537 437.992 665.293 439.201 666.999 C +439.336 666.865 439.467 666.644 439.601 666.644 c +439.736 666.644 439.867 666.865 440.001 666.999 C +441.496 664.783 445.148 663.855 445.006 661.009 c +444.984 660.562 443.897 659.644 444.801 658.999 C +442.988 657.651 442.933 655.281 442.001 653.399 C +440.763 653.685 439.551 654.048 438.401 654.599 C +438.753 656.085 438.636 657.769 439.456 659.089 c +439.89 659.787 439.603 660.866 439.6 661.799 c +f +0.8 g +273.4 670.799 m +256.542 660.663 270.6 675.999 v +279.4 685.599 289.4 691.199 y +299.8 695.6 303.4 696.8 v +307 698 322.2 703.2 325.4 703.6 c +328.6 704 338.2 708 345 704 c +351.8 700 359.8 695.6 y +343.4 704 339.8 701.6 v +336.2 699.2 329 699.6 323 696.4 C +308.2 691.999 305 689.999 v +301.8 687.999 291.4 676.399 289.8 677.199 c +288.2 677.999 290.2 678.399 291.4 681.199 c +292.6 683.999 290.6 685.599 282.6 679.199 c +274.6 672.799 273.4 670.799 Y +f +0 g +280.805 676.766 m +282.215 689.806 290.693 688.141 V +298.919 692.311 301.641 694.279 V +309.78 695.981 311.09 696.598 v +329.569 705.298 344.288 700.779 344.835 701.899 c +345.381 703.018 365.006 695.901 368.615 691.815 c +369.006 691.372 358.384 697.412 348.686 699.303 c +340.413 700.917 318.811 699.056 307.905 693.52 c +304.932 692.011 295.987 686.227 293.456 686.338 c +290.925 686.45 280.805 676.766 Y +f +0.8 g +277 651.199 m +261.8 653.599 278.6 655.199 V +296.6 657.199 300.6 662.399 V +314.2 671.599 317 671.999 v +319.8 672.399 349.8 679.599 350.2 681.999 c +350.6 684.399 356.2 684.399 357.8 683.599 c +359.4 682.799 358.6 681.599 355.8 680.799 c +353 679.999 321.8 663.599 315.4 662.399 c +309 661.199 297.4 653.599 292.6 652.399 c +287.8 651.199 277 651.199 Y +f +0 g +296.52 658.597 m +287.938 659.426 296.539 660.245 V +305.355 663.669 307.403 666.332 V +314.367 671.043 315.8 671.247 v +317.234 671.452 331.194 675.139 331.399 676.367 c +331.604 677.596 365.67 690.177 370.09 686.987 c +373.001 684.886 363.1 686.563 353.466 682.153 c +352.111 681.533 318.258 666.946 314.981 666.332 c +311.704 665.717 305.765 661.826 303.307 661.212 c +300.85 660.597 296.52 658.597 Y +f +288.6 656.399 m +293.8 656.799 292.6 655.199 v +291.4 653.599 289 654.399 y +288.6 656.399 l +f +281.4 654.799 m +286.6 655.199 285.4 653.599 v +284.2 651.999 281.8 652.799 y +281.4 654.799 l +f +271 653.199 m +276.2 653.599 275 651.999 v +273.8 650.399 271.4 651.199 y +271 653.199 l +f +263.4 652.399 m +268.6 652.799 267.4 651.199 v +266.2 649.599 263.8 650.399 y +263.4 652.399 l +f +301.8 691.999 m +306.2 691.999 305 690.399 v +303.8 688.799 300.6 689.199 y +301.8 691.999 l +f +291.8 686.399 m +298.306 688.54 295.8 685.199 v +294.6 683.599 292.2 684.399 y +291.8 686.399 l +f +280.6 681.599 m +285.8 681.999 284.6 680.399 v +283.4 678.799 281 679.599 y +280.6 681.599 l +f +273 675.599 m +278.2 675.999 277 674.399 v +275.8 672.799 273.4 673.599 y +273 675.599 l +f +266.2 670.799 m +271.4 671.199 270.2 669.599 v +269 667.999 266.6 668.799 y +266.2 670.799 l +f +305.282 664.402 m +312.203 664.934 310.606 662.805 v +309.009 660.675 305.814 661.74 y +305.282 664.402 l +f +315.682 669.202 m +322.603 669.734 321.006 667.605 v +319.409 665.475 316.214 666.54 y +315.682 669.202 l +f +326.482 673.602 m +333.403 674.134 331.806 672.005 v +330.209 669.875 327.014 670.94 y +326.482 673.602 l +f +336.882 678.402 m +343.803 678.934 342.206 676.805 v +340.609 674.675 337.414 675.74 y +336.882 678.402 l +f +309.282 696.402 m +316.203 696.934 314.606 694.805 v +313.009 692.675 309.014 692.94 y +309.282 696.402 l +f +319.282 699.602 m +326.203 700.134 324.606 698.005 v +323.009 695.875 318.614 696.14 y +319.282 699.602 l +f +296.6 659.599 m +301.8 659.999 300.6 658.399 v +299.4 656.799 297 657.599 y +296.6 659.599 l +f +0.1 0.55 0.85 0.3 k +223.4 758.8 m +219 750 218.6 746.8 V +219.4 755.6 220.6 757.6 v +221.8 759.6 223.4 758.8 y +f +205 744.8 m +201.8 730.4 202.2 727.6 V +201 739.2 201.4 740.4 v +201.8 741.6 205 744.8 y +f +0.8 g +225.8 819.4 m +225.6 816.2 l +223.4 816 l +237.6 803.4 238.2 795.8 V +239 804 225.8 819.4 V +f +0 g +229.784 818.135 m +229.353 818.551 229.572 819.296 229.164 819.556 c +228.355 820.072 230.462 820.129 230.234 820.845 c +229.851 822.051 230.038 822.072 229.916 823.348 c +229.859 823.946 230.447 825.486 230.832 825.926 c +232.278 827.578 230.954 830.51 232.594 832.061 c +232.898 832.35 233.274 832.902 233.559 833.32 c +234.218 834.283 235.402 834.771 236.352 835.599 c +236.67 835.875 236.469 836.702 237.038 836.61 c +237.752 836.495 238.993 836.625 238.948 835.784 c +238.835 833.664 237.506 831.944 236.226 830.276 C +236.677 829.572 236.219 828.937 235.935 828.38 c +234.6 825.76 234.789 822.919 234.615 820.079 c +234.61 819.994 234.303 819.916 234.311 819.863 c +234.664 817.528 235.248 815.329 236.127 813.1 c +236.493 812.17 236.964 811.275 237.114 810.348 c +237.225 809.662 237.328 808.829 236.92 808.124 C +238.955 805.234 237.646 802.583 238.815 799.052 c +239.022 798.427 240.714 796.513 240.251 796.674 c +237.738 797.545 237.626 797.943 237.449 798.696 c +237.303 799.319 236.973 800.696 236.736 801.298 c +236.672 801.462 236.501 803.346 236.423 803.468 c +234.91 805.85 236.268 805.674 234.898 808.032 C +233.47 808.712 232.504 809.816 231.381 810.978 c +231.183 811.182 232.326 811.906 232.145 812.119 c +231.053 813.408 229.9 814.175 230.236 815.668 c +230.391 816.358 230.528 817.415 229.784 818.135 c +f +226.2 816.4 m +226.6 809.6 229 808 v +231.4 806.4 230.2 807.2 227 808.4 c +223.8 809.6 225 810.4 y +222.2 810 224.6 808 v +227 806 230.6 803.6 229 803.6 c +227.4 803.6 219.8 807.6 219.8 810.4 c +219.8 813.2 218.8 817.3 y +219.9 818.1 224.7 818 V +226.1 817.3 226.2 816.4 V +f +1 g +1 J 0.1 w +225.4 797.8 m +216.88 800.591 198.4 797.2 V +207.431 799.278 226.2 797 v +236.5 795.75 225.4 797.8 Y +b +227.498 797.871 m +219.252 801.389 200.547 799.608 V +209.725 800.897 228.226 797.005 v +238.38 794.869 227.498 797.871 Y +b +229.286 797.778 m +221.324 801.899 202.539 801.514 V +211.787 802.118 229.948 796.86 v +239.914 793.975 229.286 797.778 Y +b +230.556 797.555 m +223.732 801.862 206.858 802.96 V +215.197 802.79 231.078 796.681 v +239.794 793.328 230.556 797.555 Y +b +345.84 787.039 m +344.91 786.395 345.124 787.576 v +345.339 788.757 373.547 801.927 377.161 801.677 C +346.913 788.471 345.84 787.039 V +b +342.446 786.4 m +341.57 785.685 341.691 786.879 v +341.812 788.073 368.899 803.418 372.521 803.452 C +343.404 787.911 342.446 786.4 V +b +339.16 785.025 m +338.332 784.253 338.374 785.453 v +338.416 786.652 358.233 802.149 368.045 804.023 C +350.015 795.896 339.16 785.025 V +b +336.284 783.162 m +335.539 782.468 335.577 783.547 v +335.615 784.627 353.449 798.574 362.28 800.26 C +346.054 792.946 336.284 783.162 V +b +0.8 g +0 J 1 w +304.6 635.199 m +289.4 637.599 306.2 639.199 V +324.2 641.199 328.2 646.399 V +341.8 655.599 344.6 655.999 v +347.4 656.399 363.8 659.999 364.2 662.399 c +364.6 664.799 370.6 667.199 372.2 666.399 c +373.8 665.599 373.8 656.399 371 655.599 c +368.2 654.799 349.4 647.599 343 646.399 c +336.6 645.199 325 637.599 320.2 636.399 c +315.4 635.199 304.6 635.199 Y +f +0 g +377.6 672.599 m +374.6 670.999 373.4 668.399 V +367 657.799 352.8 654.599 V +329.8 645.599 322 643.599 V +308.6 638.599 301.2 639.399 V +294.2 639.199 300.4 637.599 V +320.6 639.599 324 641.399 V +339.6 646.599 342.6 649.199 v +345.6 651.799 363.8 656.799 366 658.799 c +368.2 660.799 378 669.199 377.6 672.599 C +f +318.882 641.089 m +324.111 641.315 322.958 639.766 v +321.805 638.216 319.357 639.09 y +318.882 641.089 l +f +311.68 639.737 m +316.908 639.963 315.756 638.414 v +314.603 636.864 312.155 637.737 y +311.68 639.737 l +f +301.251 638.489 m +306.48 638.716 305.327 637.166 v +304.174 635.617 301.726 636.49 y +301.251 638.489 l +f +293.617 637.945 m +298.846 638.171 297.693 636.622 v +296.54 635.072 294.092 635.946 y +293.617 637.945 l +f +335.415 648.487 m +342.375 648.788 340.84 646.726 v +339.306 644.664 336.047 645.826 y +335.415 648.487 l +f +345.73 652.912 m +351.689 656.213 351.155 651.151 v +350.885 648.595 346.362 650.251 y +345.73 652.912 l +f +354.862 655.726 m +362.021 659.427 360.287 653.965 v +359.509 651.515 355.493 653.065 y +354.862 655.726 l +f +364.376 660.551 m +368.735 665.452 369.801 658.79 v +370.207 656.252 365.008 657.89 y +364.376 660.551 l +f +326.834 644.003 m +332.062 644.23 330.91 642.68 v +329.757 641.131 327.308 642.004 y +326.834 644.003 l +f +1 g +1 J 0.1 w +362.434 765.397 m +361.708 764.732 361.707 765.803 v +361.707 766.873 379.191 780.137 388.034 781.521 C +371.935 774.792 362.434 765.397 V +b +0 g +0 J 1 w +365.4 701.6 m +387.401 679.199 396.601 675.599 V +405.801 664.399 401.801 638.399 V +398.601 630.799 395.401 651.599 V +398.601 676.799 387.401 660.799 V +379 670.699 385.4 670.399 V +388.601 668.399 389.001 669.999 v +389.401 671.599 381.4 685.199 364.2 699.6 c +347 714 365.4 701.6 Y +f +1 g +1 J 0.1 w +307 662.799 m +306.8 664.599 308.6 663.799 v +310.4 662.999 404.601 656.799 436.201 632.799 C +391.001 655.999 307 662.799 V +b +317.4 667.199 m +317.2 668.999 319 668.199 v +320.8 667.399 457.401 668.399 481.001 635.999 C +459.001 661.199 317.4 667.199 V +b +329 671.199 m +328.8 672.999 330.6 672.199 v +332.4 671.399 505.801 684.399 529.401 651.999 C +519.801 677.599 329 671.199 V +b +339 675.999 m +338.8 677.799 340.6 676.999 v +342.4 676.199 464.601 714.8 488.201 682.399 C +474.801 707 339 675.999 V +b +281 653.199 m +280.8 654.999 282.6 654.199 v +284.4 653.399 302.2 651.199 304.2 612.399 C +297 654.399 281 653.199 V +b +272.2 651.599 m +272 653.399 273.8 652.599 v +275.6 651.799 289.8 656.399 287 617.599 C +288.2 652.799 272.2 651.599 V +b +264.2 651.199 m +264 652.999 265.8 652.199 v +267.6 651.399 283 650.799 270.6 628.399 C +280.2 652.399 264.2 651.199 V +b +311.526 695.535 m +311.082 693.536 312.631 694.753 v +328.699 707.378 361.141 766.28 416.826 771.914 C +378.518 784.024 311.526 695.535 V +b +322.726 697.335 m +321.363 698.528 323.231 699.153 v +325.099 699.778 437.541 772.28 476.826 764.314 C +449.719 771.824 322.726 697.335 V +b +301.885 691.233 m +301.376 689.634 303.087 690.61 v +312.062 695.73 315.677 752.941 359.254 754.196 C +326.843 768.91 301.885 691.233 V +b +281.962 680.207 m +280.885 678.921 282.838 679.175 v +293.084 680.507 314.489 721.778 358.928 716.699 C +326.962 731.045 281.962 680.207 V +b +293.2 686.333 m +292.389 684.864 294.258 685.489 v +304.057 688.763 317.141 733.375 361.729 736.922 C +327.603 744.865 293.2 686.333 V +b +274.922 675.088 m +274.049 674.046 275.631 674.252 v +283.93 675.331 301.268 708.76 337.264 704.646 C +311.371 716.266 274.922 675.088 V +b +267.323 669.179 m +266.318 668.134 267.909 668.252 v +272.077 668.561 302.715 701.64 321.183 686.138 C +309.168 704.861 267.323 669.179 V +b +336.855 701.102 m +335.654 702.457 337.586 702.842 v +339.518 703.226 460.221 760.939 498.184 748.073 C +472.243 758.947 336.855 701.102 V +b +303.4 636.799 m +303.2 638.599 305 637.799 v +306.8 636.999 322.2 636.399 309.8 613.999 C +319.4 637.999 303.4 636.799 V +b +313.8 638.399 m +313.6 640.199 315.4 639.399 v +317.2 638.599 335 636.399 337 597.599 C +329.8 639.599 313.8 638.399 V +b +320.6 639.999 m +320.4 641.799 322.2 640.999 v +324 640.199 348.6 636.799 372.2 604.399 C +336.6 641.199 320.6 639.999 V +b +328.225 642.028 m +327.788 643.786 329.678 643.232 v +331.568 642.678 352.002 644.577 390.099 610.401 C +343.924 645.344 328.225 642.028 V +b +338.625 646.428 m +338.188 648.186 340.078 647.632 v +341.968 647.078 376.802 642.577 428.499 607.601 C +354.324 649.744 338.625 646.428 V +b +298.2 657.999 m +298 659.799 299.8 658.999 v +301.6 658.199 355 655.599 385.4 628.799 C +350.499 653.574 298.2 657.999 V +b +288.2 653.999 m +288 655.799 289.8 654.999 v +291.6 654.199 316.2 650.799 339.8 618.399 C +304.2 655.199 288.2 653.999 V +b +349.503 651.038 m +348.938 652.759 350.864 652.345 v +352.79 651.932 387.86 649.996 441.981 618.902 C +364.317 653.296 349.503 651.038 V +b +357.903 653.438 m +357.338 655.159 359.264 654.745 v +361.19 654.332 396.26 652.396 450.381 621.302 C +373.317 656.096 357.903 653.438 V +b +367.503 658.438 m +366.938 660.159 368.864 659.745 v +370.79 659.332 413.86 654.996 503.582 620.702 C +382.917 661.096 367.503 658.438 V +b +0 g +0 J 1 w +256.2 651.599 m +261.4 651.999 260.2 650.399 v +259 648.799 256.6 649.599 y +256.2 651.599 l +f +287 637.599 m +292.2 637.999 291 636.399 v +289.8 634.799 287.4 635.599 y +287 637.599 l +f +278.2 637.999 m +283.4 638.399 282.2 636.799 v +281 635.199 278.6 635.999 y +278.2 637.999 l +f +182.831 649.818 m +187.876 648.495 186.218 647.376 v +184.561 646.256 182.554 647.798 y +182.831 649.818 l +f +184.831 659.418 m +189.876 658.095 188.218 656.976 v +186.561 655.856 184.554 657.398 y +184.831 659.418 l +f +177.631 663.818 m +182.676 662.495 181.018 661.376 v +179.361 660.256 177.354 661.798 y +177.631 663.818 l +f +0.8 g +1 J 0.1 w +257.4 588.799 m +255.8 588.799 251.8 586.799 V +249.8 586.799 238.6 583.199 233 573.199 C +245.4 582.799 257.4 588.799 V +f +345.116 496.153 m +345.257 495.895 345.312 495.475 345.604 495.458 c +346.262 495.418 347.495 495.117 347.37 495.753 c +346.522 500.059 345.648 504.996 341.515 506.803 c +340.876 507.082 339.434 506.669 339.36 505.785 c +339.233 504.261 339.116 502.912 339.425 501.446 c +339.725 500.025 341.883 500.015 342.8 501.399 C +343.736 499.727 344.168 497.884 345.116 496.153 c +f +334.038 491.419 m +334.786 490.006 334.659 488.147 336.074 487.584 c +336.814 487.29 338.664 488.265 338.246 489.339 c +337.444 491.4 337.056 493.639 335.667 495.45 c +335.467 495.712 335.707 496.245 335.547 496.573 c +334.953 497.793 333.808 498.528 332.4 498.199 C +331.285 495.996 332.433 493.867 333.955 492.158 c +334.091 492.006 333.925 491.63 334.038 491.419 c +f +294.436 496.609 m +294.328 496.986 294.29 497.449 294.455 497.77 c +294.986 498.803 295.779 499.925 295.442 500.947 c +295.094 502.003 293.978 501.821 293.328 501.252 c +292.193 500.258 292.144 498.432 291.453 497.073 c +291.257 496.687 291.308 496.114 290.867 495.723 c +290.393 495.302 289.953 493.778 290.049 493.207 c +290.102 492.894 289.919 482.986 290.141 483.249 c +290.76 483.982 293.81 493.716 293.879 494.608 c +293.936 495.339 294.668 495.804 294.436 496.609 c +f +268.798 503.401 m +271.432 505.9 274.222 508.861 273.78 512.573 c +273.664 513.549 271.889 513.022 271.702 512.176 c +270.9 508.551 268.861 505.89 266.293 503.498 c +264.097 501.451 262.235 495.107 262 494.599 C +265.697 499.855 267.954 502.601 268.798 503.401 c +f +255.224 509.365 m +255.747 509.735 255.445 510.226 255.662 510.558 c +256.615 512.016 257.916 513.262 257.934 515 c +257.937 515.277 257.559 515.586 257.224 515.362 c +256.947 515.178 256.605 515.048 256.497 514.918 c +254.467 512.469 253.067 509.798 251.624 506.986 c +251.441 506.629 250.297 502.138 250.61 502.027 c +250.849 501.942 252.569 506.123 252.779 506.237 c +254.042 506.923 254.054 508.538 255.224 509.365 c +f +271.957 489.821 m +272.401 490.69 273.977 491.892 273.864 492.781 c +273.746 493.709 274.214 495.152 273.302 494.464 c +272.045 493.516 268.596 492.167 268.326 486.359 c +268.3 485.788 271.274 488.481 271.957 489.821 c +f +286.4 506.999 m +286.8 507.667 287.508 507.194 287.967 507.457 c +288.615 507.829 289.226 508.387 289.518 509.036 c +290.488 511.185 292.257 513.005 292.4 515.399 C +290.909 516.804 290.23 514.764 289.6 513.799 C +288.277 515.446 287.278 513.572 285.978 513.053 c +285.908 513.025 285.695 513.372 285.62 513.345 c +284.443 512.905 283.763 511.824 282.765 511.043 c +282.594 510.909 282.189 511.089 282.042 510.953 c +281.39 510.35 280.417 510.025 280.137 509.343 c +279.027 506.636 275.887 504.541 274 496.999 C +274.381 496.09 278.512 503.641 278.999 504.339 c +279.835 505.535 279.953 502.678 281.229 503.344 c +281.28 503.371 281.466 503.133 281.6 502.999 C +281.794 503.279 282.012 503.508 282.4 503.399 C +282.4 503.799 282.266 504.355 282.467 504.514 c +283.704 505.491 283.62 506.559 284.4 507.799 C +284.858 507.01 285.919 507.729 286.4 506.999 C +f +346.2 452.599 m +353.6 472.999 349.2 484.199 V +360.6 462.599 356 451.399 V +355.6 461.799 351.6 466.799 V +347.6 453.999 346.2 452.599 V +f +331.4 455.199 m +336.8 463.999 328.8 482.399 V +328 461.999 321.2 450.999 V +335.4 471.199 331.4 455.199 V +f +321.4 457.199 m +321.2 477.199 321.6 480.199 V +317.8 463.599 307.6 453.999 V +322 465.999 321.4 457.199 V +f +311.8 489.199 m +317.8 475.599 307.8 457.199 V +314.2 469.399 309.4 476.399 V +312 479.799 311.8 489.199 V +f +292.6 457.599 m +291.6 473.199 293.4 475.399 V +293.6 481.799 293.2 482.799 V +297.2 488.999 297.4 481.599 V +298.8 473.799 301.6 469.199 V +305.2 463.799 305 457.399 V +295 487.599 292.6 457.599 V +f +289 485.199 m +282.4 474.399 280.6 455.399 V +279.2 461.599 283 475.999 V +287.2 491.399 289 485.199 V +f +267.2 465.399 m +272.2 470.799 273.6 475.799 V +277.2 491.599 270.8 482.999 V +271 474.999 262.8 467.599 V +267.6 469.999 267.2 465.399 V +f +261.4 470.399 m +264.8 487.799 265.6 488.599 V +267.4 491.999 264.6 488.799 V +255.8 469.599 251.8 462.999 V +259.8 472.199 261.4 470.399 V +f +255.6 486.999 m +267.2 509.399 245.4 483.599 V +256.4 493.399 255.6 486.999 V +f +240.2 501.599 m +245 520.399 247.6 520.199 V +255.8 529.199 249.2 518.599 V +243.2 508.999 243.8 499.199 V +243.2 508.799 240.2 501.599 V +f +570.5 513 m +558.5 523 556 526.5 V +569.5 508 569.5 501 V +572 508.5 570.5 513 V +f +576 535 m +555 550 551.5 557.5 V +578 528 578 523.5 V +578.5 532.5 576 535 V +f +593 689 m +581 697 579.5 695 V +590 688.5 592.5 680 V +591 689 593 689 V +f +601.5 608.5 m +584 620.5 l +603 603.5 603.5 599.5 V +601.5 608.5 L +f +0 g +1 w +210.75 631 m +232.75 626.25 l +S +261 469 m +260.5 472.5 251.5 462 v +S +266.5 464 m +268.5 470.5 262 466 v +S +320.5 455.5 m +322 466.5 310.5 453.5 v +S + +showpage + +% Modification Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr> - 18 Dec. 1997 +%% %%Trailer +countdictstack InitDictCount sub { end } repeat +cleartomark +restore +grestore diff --git a/graphics/pstricks/base/doc/images/tiger.pdf b/graphics/pstricks/base/doc/images/tiger.pdf Binary files differnew file mode 100644 index 0000000000..cc016e95de --- /dev/null +++ b/graphics/pstricks/base/doc/images/tiger.pdf diff --git a/graphics/pstricks/base/doc/pst-doc.bst b/graphics/pstricks/base/doc/pst-doc.bst new file mode 100644 index 0000000000..52759e253c --- /dev/null +++ b/graphics/pstricks/base/doc/pst-doc.bst @@ -0,0 +1,1373 @@ +%% +%% This is file `dtk.bst' +%% +%% version 1.3, 2013-01-26 +%% copyright 2013 by DANTE e.V. +%% + %------------------------------------------------------------------- + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in + % GERMAN + % This is a numerical citation style, and as such is standard LaTeX. + % It requires no extra package to interface to the main text. + % The form of the \bibitem entries is + % \bibitem{key}... + % Usage of \cite is as follows: + % \cite{key} ==>> [#] + % \cite[chap. 2]{key} ==>> [#, chap. 2] + % where # is a number determined by the ordering in the reference list. + % This is alphabetical by authors. + %--------------------------------------------------------------------- + +ENTRY + { abstracts + address + author + booktitle + chapter + ctanurl + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + urldate + volume + year + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { "; " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {add.colon} +{ empty$ + 'skip$ + { before.all 'output.state := ":" output add.blank } + if$ +} + +FUNCTION {date.block} +{ + skip$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "\/}" * } + if$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + %------------------------------------------------------------------- + % The original source file contains the following version information: + % \ProvidesFile{german.mbs}[1995/10/25 1.4 (PWD)] + % Copyright (C) 1994, 1995 Patrick W. Daly + %------------------------------------------------------------------- + + % The language selected here is GERMAN +FUNCTION {bbl.and} +{ "und"} + +FUNCTION {bbl.editors} +{ "Hg." } + +FUNCTION {bbl.editor} +{ "Hg." } + +FUNCTION {bbl.edby} +{ "herausgegeben von" } + +FUNCTION {bbl.edition} +{ "Aufl." } + +FUNCTION {bbl.volume} +{ "Bd." } + +FUNCTION {bbl.of} +{ "von" } + +FUNCTION {bbl.number} +{ "Nr." } + +FUNCTION {bbl.nr} +{ "Nr." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "S." } + +FUNCTION {bbl.page} +{ "S." } + +FUNCTION {bbl.chapter} +{ "Kap." } + +FUNCTION {bbl.techrep} +{ "{Techn.\ Ber.}" } + +FUNCTION {bbl.mthesis} +{ "Diplomarbeit" } + +FUNCTION {bbl.phdthesis} +{ "Dissertation" } + +FUNCTION {bbl.first} +{ "1." } + +FUNCTION {bbl.second} +{ "2." } + +FUNCTION {bbl.third} +{ "3." } + +FUNCTION {bbl.fourth} +{ "4." } + +FUNCTION {bbl.fifth} +{ "5." } + +FUNCTION {bbl.th} +{ "." } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Febr."} + +MACRO {mar} {"M\^^b{a}rz"} + +MACRO {apr} {"Apr."} + +MACRO {may} {"Mai"} + +MACRO {jun} {"Juni"} + +MACRO {jul} {"Juli"} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sept."} + +MACRO {oct} {"Okt."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dez."} + + % End of language definition file + + +MACRO{DTK}{"Die \TeX nische Ko\-mö\-die"} +MACRO{TUGboat}{"TUGboat"} +MACRO{TTN}{"\TeX{} and TUG News"} +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { + nameptr #3 = + numnames #3 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + t "others" = + { " et~al." * } + { bbl.and space.word * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.names.ed} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" + format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + t "others" = + { " et~al." * } + { bbl.and space.word * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { + author format.names + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { + editor format.names + editor num.names$ #1 > + { " (" * bbl.editors * ")" * } + { " (" * bbl.editor * ")" * } + if$ + } + if$ +} + +FUNCTION {format.in.editors} +{ editor empty$ + { "" } + { editor format.names.ed + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + emphasize + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in + " " * } + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year +% { month ", " * year * } + { month "~" * year * } + if$ + } + if$ +} + +FUNCTION {format.url} +{ url empty$ + {""} + {"\url{" url * "}" * } + if$ +} + +FUNCTION {format.ctanurl} +{ ctanurl empty$ + {""} + {"\ctanurl{" ctanurl * "}" * } + if$ +} + + +FUNCTION {format.urldate} +{ urldate empty$ + {""} +% {'skip$} + {"zuletzt besucht: " urldate *} + if$ +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.connect + series empty$ + 'skip$ + { bbl.of space.word * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { bbl.in space.word * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +FUNCTION {convert.edition} +{ edition extract.num "l" change.case$ 's := + s "first" = s "1" = or + { bbl.first 't := } + { s "second" = s "2" = or + { bbl.second 't := } + { s "third" = s "3" = or + { bbl.third 't := } + { s "fourth" = s "4" = or + { bbl.fourth 't := } + { s "fifth" = s "5" = or + { bbl.fifth 't := } + { s #1 #1 substring$ is.num + { s bbl.th * 't := } + { edition 't := } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + t +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { convert.edition "l" change.case$ "~" * bbl.edition * } + { convert.edition "t" change.case$ "~" * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.pages pages n.dashify tie.or.space.connect } + { bbl.page pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { + "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { word.in booktitle emphasize * } + { word.in booktitle emphasize * + " (" * + editor num.names$ #1 > + { bbl.editors } + { bbl.editor } + if$ + capitalize + * " " * + format.in.editors * + ")" * + } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ + key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { word.in journal emphasize * } + if$ + } + { word.in key * " " *} + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + word.in + } + { bbl.volume volume tie.or.space.connect + bbl.of space.word * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { series emphasize * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { word.in booktitle emphasize * } + if$ + } + { word.in key * " " *} + if$ + } + { word.in format.crossref.editor * " " *} + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.title "title" output.check + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor add.colon + } + { format.authors output.nonnull + author add.colon + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.number.series output + publisher "publisher" output.check + address output + } + { + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author add.colon + format.title "title" output.check + howpublished output + address output + format.date output + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor add.colon + } + { format.authors output.nonnull + author add.colon + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + format.number.series output + publisher "publisher" output.check + address output + } + { + format.chapter.pages "chapter and pages" output.check + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + author add.colon + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address output + } + 'skip$ + if$ + } + { + organization output + address output + } + if$ + format.edition output + format.date output + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.btitle "title" output.check + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author add.colon + format.title output + howpublished output + format.date output + note output + fin.entry +} + +FUNCTION {online} +{ output.bibitem + format.authors output + author add.colon + format.title output + format.date output + address output + format.url output + format.urldate output + note output + fin.entry +} + +FUNCTION {ctan} +{ output.bibitem + format.authors output + author add.colon + format.title output + format.date output + format.ctanurl output + format.urldate output + note output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.btitle "title" output.check + bbl.phdthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + editor add.colon + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.title "title" output.check + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author add.colon + format.title "title" output.check + note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ ff{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + nameptr #3 = + numnames #3 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + " " * + namesleft #1 = t "others" = and + { "aaaaa" * } + { t sortify * } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} +%% End of customized bst file diff --git a/graphics/pstricks/base/doc/pst-doc.cls b/graphics/pstricks/base/doc/pst-doc.cls new file mode 100644 index 0000000000..d03ad411d9 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-doc.cls @@ -0,0 +1,518 @@ +% $Id: pst-doc.cls 857 2018-12-13 11:20:40Z herbert $ +% +%% +%% The PSTricks Project +%% +%% ``pst-doc'' class for use with the PSTricks documentation. +%% +%% Copyright (C) 2009-2017 Herbert Voss +%% +%% It may be distributed and/or modified under the conditions +%% of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% +%% See http://www.latex-project.org/lppl.txt for details. +%% +% +\listfiles +\ProvidesClass{pst-doc}[2017/04/18 v 0.20 PSTricks documentation class (hv)] +\DeclareOption*{\PassOptionsToClass{\CurrentOption,usegeometry}{scrartcl}} +\ProcessOptions\relax +% +\LoadClass{scrartcl} +% +\RequirePackage[dvipsnames,x11names,svgnames,table]{xcolor} +\RequirePackage{ifxetex} +\RequirePackage{amsmath, amssymb} +\ifxetex + \usepackage{unicode-math} + \usepackage{libertinus-otf} + \setmonofont[Scale=MatchLowercase,FakeStretch=0.92]{DejaVu Sans Mono} + \setmathfont{XITS Math} +\else + \RequirePackage[T1]{fontenc} + \RequirePackage{textcomp} + %\RequirePackage[euler-digits]{eulervm} + \RequirePackage{bera} + %\RequirePackage[scaled=0.85]{luximono} +\fi +\usepackage[includeheadfoot,lmargin=2cm,tmargin=1cm,bmargin=1.5cm,rmargin=1.5cm]{geometry} +\RequirePackage{ifpdf} +% Define commands that don't eat spaces. +\RequirePackage{xspace} +\makeatletter +\providecommand{\IfPackageLoaded}[2]{\@ifpackageloaded{#1}{#2}{}} +\providecommand{\IfPackageNotLoaded}[2]{\@ifpackageloaded{#1}{}{#2}} +\providecommand{\IfElsePackageLoaded}[3]{\@ifpackageloaded{#1}{#2}{#3}} +\providecommand{\IfChapterDefined}[1]{\ifthenelse{\boolean{chapteravailable}}{#1}{}}% +\providecommand{\IfElseChapterDefined}[2]{\ifthenelse{\boolean{chapteravailable}}{#1}{#2}}% +\providecommand{\IfDefined}[2]{\ifcsname #1\endcsname #2 \fi} +\providecommand{\IfElseDefined}[3]{\ifcsname #1\endcsname #2 \else #3 \fi} +\providecommand{\IfElseUnDefined}[3]{\ifcsname #1\endcsname #3 \else #2\fi} +% Definde frontmatter, mainmatter and backmatter if not defined +\@ifundefined{frontmatter}{% + \newcommand{\frontmatter}{% + %In Roemischen Buchstaben nummerieren (i, ii, iii) + \pagenumbering{roman}} +}{} +\@ifundefined{mainmatter}{% + % scrpage benoetigt den folgenden switch + % wenn \mainmatter definiert ist. + \newif\if@mainmatter\@mainmattertrue + \newcommand{\mainmatter}{% + % -- Seitennummerierung auf Arabische Zahlen zuruecksetzen (1,2,3) + \pagenumbering{arabic}% + \setcounter{page}{1}} +}{} +\@ifundefined{backmatter}{% + \newcommand{\backmatter}{ + %In Roemischen Buchstaben nummerieren (i, ii, iii) + \pagenumbering{roman}} +}{} + +% Pakete speichern die spaeter geladen werden sollen +\newcommand{\LoadPackagesNow}{} +\newcommand{\LoadPackageLater}[1]{% + \g@addto@macro{\LoadPackagesNow}{% + \RequirePackage{#1}% + }% +} +% +\RequirePackage{makeidx} +\makeindex +\RequirePackage{calc} +\RequirePackage{babel} +\RequirePackage{xkeyval} +\RequirePackage{pst-xkey} +\RequirePackage{pstricks} +\RequirePackage{xkvview} +%\let\pstricksFV\fileversion +%\let\pstricksFD\filedate +\RequirePackage{multido} +\RequirePackage{lscape} +\RequirePackage{graphicx} +\RequirePackage{eso-pic} +\definecolor{DOrange}{rgb}{1,.4,.2} +\RequirePackage{tabularx,ragged2e} +\RequirePackage{booktabs} +\RequirePackage[bottom,stable,ragged]{footmisc} +%\RequirePackage{chngcntr} +\RequirePackage{nameref} +\RequirePackage{varioref} +\RequirePackage{subfig} +\RequirePackage{setspace} +\RequirePackage{paralist} +\RequirePackage{biblatex} +% +\RequirePackage{fancyvrb} +\newenvironment{Xverbatim}[2][]% + {\VerbatimEnvironment +\handle@index{#2} +\begin{Verbatim}[#1]} +{\end{Verbatim}} +\newcommand\use@index@vals{\index@vals\global\let\index@vals\relax} +\def\handle@index#1{% + \gdef\index@vals{#1}% + \def\FancyVerbFormatLine##1{\FV@ObeyTabs{##1}\use@index@vals}} + +\RequirePackage{filecontents} +%\singlespace +\RequirePackage{showexpl} +\renewcommand*\SX@Info{}% +\definecolor{hellgelb}{rgb}{1,1,0.85} +\definecolor{colKeys}{rgb}{0,0,1} +\definecolor{colIdentifier}{rgb}{0,0,0} +\definecolor{colComments}{rgb}{1,0,0} +\definecolor{colString}{rgb}{0,0.5,0} +\providecommand\ON{% + \gdef\lst@alloverstyle##1{% + \fboxrule=0pt + \fboxsep=0pt + \fcolorbox{Black!15}{Black!15}{\bfseries\strut##1}% +}} +\providecommand\OFF{\xdef\lst@alloverstyle##1{##1}} +\lstset{% + language=PSTricks,% + float=hbp,% + basicstyle=\ttfamily\small, % + identifierstyle=\color{colIdentifier}, % + keywordstyle=\color{colKeys}, % + stringstyle=\color{colString}, % + commentstyle=\color{colComments}, % + columns=flexible, % + tabsize=4, % + frame=single, % + extendedchars=true, % + showspaces=false, % + showstringspaces=false, % +% numbers=left, +% numbersep=0.8em, +% numberstyle=\tiny, % + breaklines=true, % + breakautoindent=true, + captionpos=b, + xleftmargin=1em +} +\lstset{explpreset={pos=t,wide=false,rframe={},preset=\centering}} +\lstdefinestyle{syntax}{backgroundcolor=\color{blue!15},numbers=none,xleftmargin=0pt,xrightmargin=0pt, + frame=single} +\lstdefinestyle{code}{backgroundcolor=\color{red!15},%numbers=left, +xleftmargin=0pt,xrightmargin=0pt, + frame=single} +% +\usepackage{manfnt} +\newcommand\XInfofont{\color{blue}\fontsize{8pt}{10pt}\normalfont\itshape} +\newcommand\XInfo[2][1]{\marginpar + [\XInfocorr{#1}\raggedleft\XInfofont#2]% + {\XInfocorr{#1}\raggedright\XInfofont#2}} +\newcommand\XInfocorr[1]{\mbox{}\par + \ifcase#1\relax + \vspace{-10pt}\or + \vspace{2pt}\or + \vspace{14pt}\else + \ifnum #1=-1 \vspace{-22pt}\else\ERROR\fi + \fi} +\newcommand\XInfoDanger[2][1]{\marginpar + [\XInfocorr{#1}\raggedleft\XInfofont + \let\\\@normalcr + \hangafter-2\hangindent=-.9pc\parindent=-\@flushglue + \noindent\rlap{\makebox[\marginparwidth]{\hfill\lower1.2pt\hbox{\dbend}\hspace*{-8pt}}}\hfill#2]% + {\XInfocorr{#1}\raggedright\XInfofont + \let\\\@normalcr + \hangafter-2\hangindent=.9pc\noindent\llap{\lower1.2pt\hbox{\lhdbend}\,}#2}} +% +\RequirePackage{xkvview} +\raggedbottom +\definecolor{sectioncolor}{RGB}{0, 0, 255} % Schwarz +\definecolor{textcolor}{RGB}{0, 0, 0} % Schwarz +\definecolor{shadecolor}{gray}{0.90} +\colorlet{pdflinkcolor}{DOrange} +\colorlet{pdfurlcolor}{DOrange} +\colorlet{pdffilecolor}{DOrange} +\colorlet{stringcolor}{green!40!black!100} +\colorlet{commencolor}{blue!0!black!100} +\RequirePackage[automark]{scrlayer-scrpage} + +\pagestyle{scrheadings} +\clearscrheadings +\clearscrplain +\ohead{\pagemark} +\ihead{\headmark} +\ofoot[\pagemark]{} +\automark[subsection]{section} +\setheadsepline{.4pt}[\color{DOrange}] +\setheadwidth[0pt]{text} +\setfootwidth[0pt]{text} +%% Fussnoten ============================================================= +% Keine hochgestellten Ziffern in der Fussnote (KOMA-Script-spezifisch): +\deffootnote{1.5em}{1em}{\makebox[1.5em][l]{\thefootnotemark}} +\addtolength{\skip\footins}{\baselineskip} % Abstand Text <-> Fussnote +%% Schriften (Sections )================================================== +\newcommand\SectionFontStyle{\sffamily} +\setkomafont{sectioning}{\bfseries\SectionFontStyle} % % Titelzeilen % \bfseries +\setkomafont{pagenumber}{\bfseries\SectionFontStyle} % Seitenzahl +\setkomafont{pagehead}{\small\sffamily} % Kopfzeile +%\setkomafont{pagefoot}{\small\sffamily} % Kopfzeile +\setkomafont{descriptionlabel}{\itshape} % Kopfzeile +\addtokomafont{sectioning}{\color{sectioncolor}} % Farbe der Ueberschriften +\renewcommand*{\raggedsection}{\raggedright} % Titelzeile linksbuendig, haengend +\RequirePackage{caption} +\captionsetup{ + margin = 10pt, + font = {small,rm}, + labelfont = {small,bf}, + format = plain, % oder 'hang' + indention = 0em, % Einruecken der Beschriftung + labelsep = colon, %period, space, quad, newline + justification = RaggedRight, % justified, centering + singlelinecheck = true, % false (true=bei einer Zeile immer zentrieren) + position = bottom %top +} +%%% Bugfix Workaround +\DeclareCaptionOption{parskip}[]{} +\DeclareCaptionOption{parindent}[]{} + +% Aussehen der Captions fuer subfigures (subfig-Paket) +\IfPackageLoaded{subfig}{ + \captionsetup[subfloat]{% + margin = 10pt, + font = {small,rm}, + labelfont = {small,bf}, + format = plain, % oder 'hang' + indention = 0em, % Einruecken der Beschriftung + labelsep = space, %period, space, quad, newline + justification = RaggedRight, % justified, centering + singlelinecheck = true, % false (true=bei einer Zeile immer zentrieren) + position = bottom, %top + labelformat = parens % simple, empty % Wie die Bezeichnung gesetzt wird + } +} +\setcounter{secnumdepth}{2} % Abbildungsnummerierung mit groesserer Tiefe +\setcounter{tocdepth}{2} % Inhaltsverzeichnis mit groesserer Tiefe +% +% Inhalte von List of Figures +\IfPackageLoaded{subfig}{\setcounter{lofdepth}{1} %1 = nur figures, 2 = figures + subfigures +} +\RequirePackage[colorlinks, + urlcolor=pdfurlcolor, + filecolor=pdffilecolor, + linkcolor=pdflinkcolor, + breaklinks, + linktocpage=true]{hyperref} +\ifxetex +\else + \RequirePackage{breakurl} +\fi +\newsavebox\TBox +\newenvironment{Bsp}[1]{% + \par\bigskip% + \begin{lrbox}{\TBox} + \begin{minipage}{\linewidth-2\fboxrule}% + \setlength\fboxsep{1mm}% + \colorbox{DOrange}{\parbox{\linewidth-2\fboxsep}{% + \color{White}\sffamily#1}}\par + \fontsize{10}{12pt}\fontshape{it}\selectfont% + \begin{quote} +}{% +\par\bigskip\end{quote}\end{minipage}\end{lrbox}\fboxsep=0pt% + \fcolorbox{DOrange}{White}{\usebox\TBox}\par\bigskip} + +\newcommand{\RDO}{\color{DOrange!25}\rule[-1mm]{10mm}{5mm}} + +\DeclareRobustCommand\PST{\texttt{PSTricks\xspace}} +\DeclareRobustCommand\PS{\texttt{PostScript\xspace}} +\def\dt{\ensuremath{\,\mathrm{d}t}} +\def\Index#1{\index{#1}#1} +% +\def\LPack#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Package!#1@\texttt{#1}}} +\def\nxLPack#1{\texttt{#1}} +\def\Lprog#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Program!#1@\texttt{#1}}} +\let\nxLprog\nxLPack +\def\LFile#1{\texttt{#1}\index{#1@\texttt{#1}}\index{File!#1@\texttt{#1}}} +\def\nxLFile#1{\texttt{#1}} +\def\Lext#1{\texttt{.#1}\index{#1@\texttt{.#1}}\index{Extension!#1@\texttt{.#1}}} +\def\nxLext#1{\texttt{.#1}} +\def\xLcs#1{\index{#1@\nxLcs{#1}}\index{Macro!#1@\nxLcs{#1}}} +\def\Lcs#1{\nxLcs{#1}\xLcs{#1}} +\def\LcsStar#1{\index{#1*@\nxLcs{#1*}}\index{Macro!#1@\nxLcs{#1*}}\nxLcs{#1}\OptArg*{*}} +\def\nxLcs#1{\texttt{\textbackslash#1}} +\def\xLenv#1{\index{#1@\texttt{#1}}\index{Environment!#1@\texttt{#1}}} +\def\Lenv#1{\texttt{#1}\xLenv{#1}} +\def\Ldim#1{\texttt{\textbackslash#1}\index{#1@\texttt{\textbackslash#1}}\index{Dimension!#1@\texttt{\textbackslash#1}}} +\def\Lskip#1{\texttt{\textbackslash#1}\index{#1@\texttt{\textbackslash#1}}\index{Skip!#1@\texttt{\textbackslash#1}}} +\def\Lkeyword#1{\texttt{#1}\xLkeyword{#1}} +\def\xLkeyword#1{\index{#1@\texttt{#1}}\index{Keyword!#1@\texttt{#1}}} +\def\nxLkeyword#1{\texttt{#1}} + +\def\LKeyword#1{\LKeyword@i#1!!} +\def\LKeyword@i#1=#2!!{\Lkeyword{#1}\nxLkeyword{=#2}} +\let\nxLKeyword\nxLenv % same formatting + +\let\nxLkeyval\nxLkeyword +\let\nxLenv\nxLkeyword +\let\nxLps\nxLkeyword +\def\LColor#1{\texttt{#1}\xLColor{#1}} +\def\xLColor#1{\index{#1@\texttt{#1}}\index{Color!#1@\texttt{#1}}} +\def\Lkeyval#1{\texttt{#1}\xLkeyval{#1}} +\def\xLkeyval#1{\index{#1@\texttt{#1}}\index{Keyvalue!#1@\texttt{#1}}} +\def\xLoption#1{\index{#1@\texttt{#1}}\index{Package option!#1@\texttt{#1}}} +\def\Loption#1{\texttt{#1}\xLoption{#1}} +\def\LPS#1{\texttt{#1}\index{#1@\texttt{#1}}\index{PostScript!#1@\texttt{#1}}} +\def\xLps#1{\index{#1@\texttt{#1}}\index{PostScript!#1@\texttt{#1}}} +\def\nxLps#1{\texttt{#1}} +\def\Lps#1{\nxLps{#1}\xLps{#1}} +\def\LClass#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Class!#1@\texttt{#1}}} +\let\nxLClass\nxLPack +\let\nxLdim\nxLcs +\let\nxLskip\nxLcs +\def\Lctr#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Counter!#1@\texttt{#1}}} +\def\LCtr#1{\texttt{#1}\index{#1@\texttt{#1}}\index{TeX Counter@\TeX\ Counter!#1@\texttt{#1}}} +\def\nxLctr#1{\texttt{#1}} +% +\newcommand\Lnotation [1]{\nxLnotation{#1}\xLnotation{#1}} +\newcommand\Lmnotation[1]{\nxLnotation{#1}\xLmnotation{#1}} +\newcommand\xLnotation[1]{\index{Syntax!#1@\nxLnotation{#1}}\index{#1@\nxLnotation{#1}}} +\def\nxLnotation#1{\texttt{#1}} +\def\xLkeyset#1{\expandafter\xLkeyset@i#1\@nil} +\def\xLkeyset@i#1=#2\@nil{\index{#1@\texttt{#1}}\index{Keyword!#1@\texttt{#1}} + \index{#2@\texttt{#2}}\index{Value!#2@\texttt{#2}}} +\def\Lkeyset#1{\expandafter\Lkeyset@i#1\@nil} +\def\Lkeyset@i#1=#2\@nil{\texttt{#1=#2}% + \index{#1@\texttt{#1}}\index{Keyword!#1@\texttt{#1}} + \index{#2@\texttt{#2}}\index{Value!#2@\texttt{#2}}} +% +\def\xLKeyset#1{\expandafter\xLKeyset@i#1\@nil}% without using the right value of = +\def\xLKeyset@i#1=#2\@nil{\index{#1@\texttt{#1}}\index{Keyword!#1@\texttt{#1}}} +\def\LKeyset#1{\expandafter\LKeyset@i#1\@nil} +\def\LKeyset@i#1=#2\@nil{\texttt{#1=#2}% + \index{#1@\texttt{#1}}\index{Keyword!#1@\texttt{#1}}} +\let\LKeyword\LKeyset +% +\newcommand\Larg [1]{{\normalfont\itshape#1\/}} +\newcommand\Larga[1]{$\langle$\Larg{#1}$\rangle$}% angles +\newcommand\Largb[1]{\lcb\Larg{#1}\rcb} % curly brace +\newcommand\Largs[1]{\lsb\Larg{#1}\rsb} % square brackets +\newcommand\Largr[1]{\lrb\Larg{#1}\rrb} % round brackets +\newcommand\LBEG[1]{{\normalfont\ttfamily\bs{}begin\lcb#1\rcb}\xLenv{#1}} +\newcommand\LmBEG[1]{{\normalfont\ttfamily\bs{}begin\lcb#1\rcb}\xLmenv{#1}} +\newcommand\LEND[1]{{\normalfont\ttfamily\bs{}end\lcb#1\rcb}\xLenv{#1}} +\newcommand\LmEND[1]{{\normalfont\ttfamily\bs{}end\lcb#1\rcb}\xLmenv{#1}} +% +\DeclareRobustCommand\bs{{\normalfont\ttfamily\textbackslash}} % \let\bslash=\bs +\DeclareRobustCommand\lcb{{\normalfont\ttfamily\textbraceleft}} +\DeclareRobustCommand\rcb{{\normalfont\ttfamily\textbraceright}} +\DeclareRobustCommand\lsb{{\normalfont\ttfamily[}} +\DeclareRobustCommand\rsb{{\normalfont\ttfamily]}} +\DeclareRobustCommand\lrb{{\normalfont\ttfamily(}} +\DeclareRobustCommand\rrb{{\normalfont\ttfamily)}} +\DeclareRobustCommand\false{{\ttfamily false}} +\DeclareRobustCommand\true{{\ttfamily true}} + +% +% without brackets +\def\Coordx#1{$x_{#1}$} +\def\Coordy#1{$y_{#1}$} +\def\Coordz#1{$z_{#1}$} +\def\Coord#1{\Coordx{#1},\kern 1pt\Coordy{#1}} +\def\Coordn{\Coordx{n},\kern 1pt\Coordy{n}} +\def\CoordIII#1{\Coordx{#1},\kern 1pt\Coordy{#1},\kern 1pt\Coordz{#1}}% HjG +\def\CAny{\Coordx{},\kern 1pt\Coordy{}} +\def\CIIIAny{\Coordx{},\kern 1pt\Coordy{},\kern 1pt\Coordz{}}% hv +% with brackets +\def\coord#1{(\Coordx{#1},\kern 1pt\Coordy{#1})} +\def\coordn{(\Coordx{n},\kern 1pt\Coordy{n})} +\def\coordiii#1{(\Coordx{#1},\kern 1pt\Coordy{#1},\kern 1pt\Coordz{#1})}% hv +\def\coordx#1{($x_{#1}$)} +\def\coordy#1{($y_{#1}$)} +\def\coordz#1{($z_{#1}$)} +\def\cAny{(\Coordx{},\kern 1pt\Coordy{})} +\def\ciiiAny{(\Coordx{},\kern 1pt\Coordy{},\kern 1pt\Coordz{})}% hv +% +\newskip\BDefaboveskip +\newskip\BDefbelowskip +\newskip\BDefinlineskip +\setlength\BDefaboveskip{0pt plus 2pt}% first-level list topsep +\setlength\BDefbelowskip{10pt} +\setlength\BDefinlineskip{6pt} +% +\newsavebox\boxdef +\newenvironment{BDef} + {\begin{lrbox}{\boxdef} + \def\arraystretch{1.0} + \begin{tabular}{@{}l@{}l@{}l@{}}} + {\end{tabular}\end{lrbox} +% +% braces around next block are needed to stop the list env checking for blank lines +% and the \aftergroups then for making sure no indentation happens ... as i said +% urg +% + {\BCmd\fbox{\usebox\boxdef}\endBCmd} + \aftergroup\@afterindentfalse\aftergroup\@afterheading + } +\newenvironment{BDef*} + {\begin{lrbox}\boxdef + \def\arraystretch{1.0} + \begin{tabular}{@{}l@{}l@{}l@{}} + } + {\end{tabular}\end{lrbox} + {\begin{BCmd*}\fbox{\usebox\boxdef}\end{BCmd*}} + \aftergroup\@afterindentfalse\aftergroup\@afterheading + } +\newenvironment{BCmd}{ + \@beginparpenalty-\@lowpenalty + \topsep\BDefaboveskip + \fboxsep3pt + \flushleft} + {\@endparpenalty\@M + \@topsepadd\BDefbelowskip + \endflushleft} + +\newenvironment{BCmd*}{ + \@beginparpenalty\@M + \topsep\BDefinlineskip + \fboxsep3pt + \flushleft} + {\@endparpenalty5000 + \endflushleft} + + +\def\OptArgs{\colorbox{black!20}{\texttt{[Options]}}\kern1pt} +\def\OptArg{\@ifnextchar*\OptArg@i{\OptArg@ii*}}% star version without braces +\def\OptArg@i*#1{\colorbox{black!20}{\texttt{#1}}\kern1pt} +\def\OptArg@ii*#1{\colorbox{black!20}{\texttt{[#1]}}\kern1pt} +\def\DBS{{\ttfamily\textbackslash\textbackslash}} + +\def\docauthor#1{\gdef\@docauthor{#1}} +\docauthor{} +%\def\author#1{\gdef\@author{#1}\gdef\@docauthor{#1}} + +\providecommand\bgImage{} +\providecommand\bgTitle{} +\providecommand\LenToUnit[1]{#1\@gobble} + +\iffalse +\renewcommand\maketitle{% +\thispagestyle{empty}% +\begin{titlepage} +\ifpdf + \AddToShipoutPicture*{\includegraphics{pst-doc.pdf}} + \vspace*{0.3\textheight} + \parbox{17cm}{\sffamily\RaggedRight\bfseries\huge\@title}\\[5pt] + \parbox{15cm}{\sffamily\Large\@subtitle} + + \vspace{5cm} + \parbox{10cm}{\sffamily\@date} + + \vfill + ~\\ + \makebox[.5\textwidth]{\put(0,0){\bgImage}}\\ + ~ + + \vfill + \parbox[b]{19cm}{\sffamily\RaggedRight + \ifx\@docauthor\empty~\else Documentation by\fi\hfill\makebox[7cm][l]{Package author(s):}\\ + \ifx\@docauthor\empty~\else{\bfseries\tabular[t]{@{}l@{}}\@docauthor\endtabular}\fi\hfill\makebox[7cm][l]{% + \bfseries\tabular[t]{@{}l@{}}\@author\endtabular}} +\else + \psset{unit=1cm} + \begin{pspicture}(1.6in,0)(23cm,21.7cm) + \psframe[fillstyle=solid,linecolor=lightgray,fillcolor=lightgray,linestyle=solid](0,-5.75)(23,10) + \psframe[fillstyle=solid,linecolor=Orange!85!Red,fillcolor=Orange!85!Red,linestyle=solid](0,10)(23,10.5) + \psframe[fillstyle=solid,linecolor=Orange!85!Red,fillcolor=Orange!85!Red,linestyle=solid](0,21.1)(23,21.2) + \rput[lb](3,22){\Huge\sffamily\color{Orange!65!Red}\psscalebox{2}{\textbf{PSTricks}}} + \rput[lb](3,14.1){\parbox{17cm}{\sffamily\RaggedRight\bfseries\huge\@title}} + \rput[lb](3,12.6){\parbox{15cm}{\sffamily\Large\@subtitle}} + \rput[lb](3,7.6){\parbox{15cm}{\sffamily\@date}} + \rput[lb](3,-2.6){\parbox[b]{19cm}{\sffamily\RaggedRight + \ifx\@docauthor\empty~\else Documentation by\fi\hfill\makebox[7cm][l]{Package author(s):}\\ + \ifx\@docauthor\empty~\else{\bfseries\tabular[t]{@{}l@{}}\@docauthor\endtabular}\fi\hfill\makebox[7cm][l]{% + \bfseries\shortstack[l]{\@author} + %\begin{tabular}[t]{@{}l@{}} \@author\end{tabular}% +}}} + \rput[C](11,4){\bgImage}% + \end{pspicture}% +\fi +\end{titlepage} +\setcounter{footnote}{0}% +\global\let\thanks\relax% +\global\let\maketitle\relax% +\global\let\@thanks\@empty% +\global\let\@author\@empty% +\global\let\@docauthor\@empty% +\global\let\@date\@empty% +\global\let\@title\@empty% +\global\let\@subtitle\@empty% +\global\let\title\relax% +\global\let\author\relax% +\global\let\date\relax% +\global\let\and\relax% +} +\fi + +\newdimen\fullWidth +\fullWidth=\linewidth +\advance\fullWidth by \marginparsep +\advance\fullWidth by \marginparwidth +\makeatother +%% +%% End of file `pst-doc.cls'. diff --git a/graphics/pstricks/base/doc/pst-doc.ist b/graphics/pstricks/base/doc/pst-doc.ist new file mode 100644 index 0000000000..3b76b84ca5 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-doc.ist @@ -0,0 +1,36 @@ +%% +%% This is file `pst-doc.ist', +%% +%% The idea is from Ingo Kloeckl, Latex2e: +%% Herbert Voss 000726 +%% +%% This is a MAKEINDEX style file which should be used to +%% generate the formatted change history for use with the doc +%% package. The TeX commands used below are defined in +%% doc.sty. The commands for MAKEINDEX like `level' +%% `item_x1' are described in `` Makeindex, A General +%% Purpose, Formatter-Independent Index Processor'' by +%% Pehong Chen. +%% +headings_flag 1 % headings yes +heading_prefix "\\textbf{" % boldfont +heading_suffix "}\n" % newline +quote '"' +level '>' +preamble + "\\begin{theindex}\n" +item_1 + "\\par\\leavevmode\\hangindent10pt\\makebox[10pt][l]{--}" +item_01 + "\\par\\leavevmode\\hangindent10pt\\makebox[10pt][l]{--}" +item_x1 + "\\par\\leavevmode\\hangindent10pt\\makebox[10pt][l]{--}" +item_2 + "\\par\\leavevmode\\hangindent20pt\\makebox[20pt][l]{-- -- }" +item_12 + "\\par\\leavevmode\\hangindent20pt\\makebox[20pt][l]{-- -- }" +item_x2 + "\\par\\leavevmode\\hangindent20pt\\makebox[20pt][l]{-- -- }" +%% +%% +%% End of file `pst-doc.ist'. diff --git a/graphics/pstricks/base/doc/pst-doc.pdf b/graphics/pstricks/base/doc/pst-doc.pdf Binary files differnew file mode 100644 index 0000000000..0718eddae9 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-doc.pdf diff --git a/graphics/pstricks/base/doc/pst-news.sty b/graphics/pstricks/base/doc/pst-news.sty new file mode 100644 index 0000000000..8ce484574a --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news.sty @@ -0,0 +1,103 @@ +%% $Id: pst-news.sty 9 2008-01-03 20:22:50Z herbert $ +\ProvidesPackage{pst-news}[2008/02/01 definitions for + PSTricks news (hv)] +% +%\usepackage{pamathx}% use this if you have the palatino math font +\usepackage{arev}% use this if you do not have the palatino math font +%\usepackage[scaled=0.9]{luximono}% use this if you do not have the palatino math font +% +\RequirePackage{pstricks} +\let\PSTfiledate\filedate +\let\PSTfileversion\fileversion +\RequirePackage{pst-node} +\let\NODEfiledate\filedate +\let\NODEfileversion\fileversion +\RequirePackage{pst-plot} +\let\PLOTfiledate\filedate +\let\PLOTfileversion\fileversion +\RequirePackage{pst-tree} +\let\TREEfiledate\filedate +\let\TREEfileversion\fileversion +% +\RequirePackage{showexpl} +\RequirePackage{makeidx} +\makeindex +\RequirePackage{tabularx,array,longtable} +\SpecialCoor +\RequirePackage{ragged2e} +\definecolor{hellgelb}{rgb}{1,1,0.8} +\definecolor{colKeys}{rgb}{0,0,1} +\definecolor{colIdentifier}{rgb}{0,0,0} +\definecolor{colComments}{rgb}{1,0,0} +\definecolor{colString}{rgb}{0,0.5,0} +% +\usepackage{amsmath} +\usepackage{tabularx} +\usepackage{longtable} +\usepackage{xkvview} +\usepackage{pst-math} +\RequirePackage{listings} +\lstset{% + language=PSTricks,% + float=hbp,% + basicstyle=\ttfamily\small, % + identifierstyle=\color{colIdentifier}, % + keywordstyle=\color{colKeys}, % + stringstyle=\color{colString}, % + commentstyle=\color{colComments}, % + columns=flexible, % + tabsize=4, % + frame=single, % + extendedchars=true, % + showspaces=false, % + showstringspaces=false, % + numbers=left, % + numberstyle=\tiny, % + breaklines=true, % +% backgroundcolor=\color{hellgelb}, % + breakautoindent=true, % + captionpos=b,% + xleftmargin=0pt% +} +\lstdefinestyle{syntax}{backgroundcolor=\color{blue!20},numbers=none,xleftmargin=0pt,xrightmargin=0pt, + frame=single} +% +\RequirePackage[colorlinks,linktocpage]{hyperref} +\RequirePackage{breakurl} +\def\UrlFont{\small\ttfamily} +\makeatletter +\def\verbatim@font{\small\normalfont\ttfamily} +\let\Oldpart\part +\renewcommand\part[1]{\clearpage\Oldpart{#1}} +\makeatother + +%\parindent=0pt +% +%\psset{subgriddiv=0,griddots=5,gridlabels=7pt} +% +\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +\let\PSTbibliography\bibliography +\renewcommand\bibliography[1]{\begingroup\RaggedRight\PSTbibliography{#1}\endgroup} +\def\textat{\char064} +% +\usepackage{xspace} +\def\PS{PostScript\xspace} +\def\dt{\ensuremath{\,\mathrm{d}t}} + +% +\def\LPack#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Package!#1@\texttt{#1}}} +\def\nxLPack#1{\texttt{#1}} +\def\LFile#1{\texttt{#1}\index{#1@\texttt{#1}}\index{File!#1@\texttt{#1}}} +\def\nxLFile#1{\texttt{#1}} +\def\Lcs#1{\texttt{\textbackslash#1}\index{#1@\texttt{\textbackslash#1}}\index{Macro!#1@\texttt{\textbackslash#1}}} +\def\nxLcs#1{\texttt{\textbackslash#1}} +\def\Lenv#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Environment!#1@\texttt{#1}}} +\def\Ldim#1{\texttt{\textbackslash#1}\index{#1@\texttt{\textbackslash#1}}\index{Dimension!#1@\texttt{\textbackslash#1}}} +\def\Lkeyword#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Keyword!#1@\texttt{#1}}} +\def\Lkeyval#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Value!#1@\texttt{#1}}} +\def\Loption#1{\texttt{#1}\index{#1@\texttt{#1}}\index{Package option!#1@\texttt{#1}}} +\def\LPS#1{\texttt{#1}\index{#1@\texttt{#1}}\index{PostScript!#1@\texttt{#1}}} +\def\Lps#1{\texttt{#1}\index{#1@\texttt{#1}}\index{PostScript!#1@\texttt{#1}}} +\def\Index#1{#1\index{#1}} +% +\endinput diff --git a/graphics/pstricks/base/doc/pst-news.tex b/graphics/pstricks/base/doc/pst-news.tex new file mode 100644 index 0000000000..f9e40428f8 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news.tex @@ -0,0 +1,274 @@ +%% $Id: pst-news.tex 444 2017-04-19 10:55:35Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pstricks,pst-plot,xkvview} +\let\pstplotFV\fileversion +\let\pstplotFD\filedate +\usepackage{pst-eucl,pst-func} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2011}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\subtitle{Summary of the yearly posted news} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +\section{General} +There exists a new document class \LClass{pst-doc} for writing PSTricks documentations, +like this news document. It depends on the KOMA-Script document class \LClass{scrartcl}. +\LClass{pst-doc} defines a lot of special macros to create a good index. Take one of +the already existing package documentation and look into the source file. Then it will be +easy to understand, how all these macros have to be used. + +When running \Lprog{pdflatex} the title page is created with boxes and inserted +with the macro \Lcs{AddToShipoutPicture} from the package \LPack{eso-pic}. It +inserts the background title page image \Lfile{pst-doc-pdf} to use directly +\Lprog{pdflatex}. +When running \Lprog{latex} the title page + is created with \PST\ macros.This allows to use the Perl script \Lprog{pst2pdf} or +the package \LPack{pst-pdf} or \LPack{auto-pst-pdf} or any other program/package which +supports \PS\ code in the document. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- +\subsection{New optional argument} + +\begin{description} +\item[\texttt{noxcolor}] load package \LPack{color} instead of \LPack{xcolor}; +\item[\texttt{plain}] do nothing else as a \Lcs{input}\Largb{\nxLPack{pstricks}}; +\item[\texttt{DIA}] a bug fix for the \verb+PSTricks+-export of the grafic program DIA. +\end{description} + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- + +\subsection{New and modified option for {pspicture}}\label{sec:option} + +Table~\ref{tab:pspicture} shows the two new options for the \verb+pspicture+ environment. + +\begin{table}[htb] +\caption{Optionen der \texttt{pspicture}-Umgebung}\label{tab:pspicture} +\centering +\begin{tabular}{@{}lll@{}} +\textrm{\emph{name}} & \emph{meaning} & \emph{default}\\\hline +\Lkeyword{shift} & vertical shift & 0 \\ +\Lkeyword{showgrid} & show grid & \verb+false+\\ +\end{tabular} +\end{table} + + +% --------------------------------------------------------------------------------------- +\subsubsection{\nxLkeyword{shift}}\label{subsubsec:shift} +% --------------------------------------------------------------------------------------- +This option is the known one from older \texttt{PSTricks} versions, but now with the +common syntax for options. The shift is relative to the height of the defined \Lenv{pspicture} +environment, its lower left corner is by deafult on the base line. For older versions +the shift depends with its value to the baseline, a negative value raised up the \Lenv{pspicture} +box. Now the \verb+shift+ option works similiar to the known \Lcs{raisebox} makro, except that +\Lkeyword{shift} is relative to the box height. A positive \Lkeyword{shift} value raises up the box +and vice versa for a negative value. + +\begin{figure}[htb] +\centering +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){-0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}(-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0} +\end{pspicture}\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=-0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\caption{Meaning of the \texttt{shift} option}\label{fig:baseline} +\end{figure} + +%\begin{lstlisting}[caption={Vertikale Verschiebung der Baseline}] +\begin{lstlisting} +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){-0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}(-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0} +\end{pspicture}\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=-0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\end{lstlisting} + +With \Lkeyword{shift}=\Lkeyval{*}, instead of a value or a length +it is possible to center the \Lenv{pspicture} box vertically to the baseline +of the current line. + +\begin{LTXexample}[width=4cm] +\usepackage{pstricks} +\rule{5mm}{0.5pt}% +\psframebox{% +\begin{pspicture}[showgrid=true, + shift=*](-0.3,-0.4)(3.2,3.3) + \psarc[showpoints=true](1,1){2}{-45}{120} +\end{pspicture}}\rule{5mm}{0.5pt} +\end{LTXexample} + + +% --------------------------------------------------------------------------------------- +\subsubsection{\texttt{showgrid}}\label{subsubsec:showgrid} +% --------------------------------------------------------------------------------------- +This version of \texttt{PSTricks} defines internally a special grid style + +\begin{lstlisting} +\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt} +\end{lstlisting} + +which can be overwritten by the user. This style is only used for the \Lkeyword{showgrid} +option of the \Lenvpspicture} environment. The macro \Lcs{psgrid} doesn't use this predefined +style and works in the usual way. However, the user can use it like all +other self defined styles: \Lcs{psgrid}\Largs{\Lkeyset{style=gridstyle}}. + + +\begin{LTXexample}[width=3.5cm] +\begin{pspicture}[showgrid=true](-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\newpsstyle{gridstyle}{% + subgriddiv=2,subgridcolor=lightgray} +\begin{pspicture}[showgrid=true](-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\newpsstyle{gridstyle}{} +\begin{pspicture}[showgrid=true](-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\begin{pspicture}(-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\begin{pspicture}(-1,0)(2,1) + \psgrid +\end{pspicture} +\end{LTXexample} + +Depending to the internal structure of the \Lenv{pspicture} environment it is not possible +to set the \Lkeyword{shift} option global by \Lcs{psset}, it must always be locally defined +with optional part of the parameter, as seen in the above examples. + +\subsection{Option \nxLkeyword{gridfont}} +By default the \Index{grid label}s were printed always in \Index{Helvetica}. With the new keyword \Lkeyword{gridfont} +one can define another \Index{PostScript Font}. Available are at least + +\medskip +{\ttfamily\noindent +\Lkeyval{Helvetica} (default) -- \Lkeyval{Helvetica-Narrow} -- \Lkeyval{Times-Roman} -- \Lkeyval{Courier} -- \Lkeyval{AvantGard} --\Lkeyval{NewCenturySchlbk} -- +\Lkeyval{Palatino-Roman} -- \Lkeyval{Bookman-Demi} -- \linebreak \Lkeyval{ZapfDingbats} -- \Lkeyval{Symbol}} + +\begin{LTXexample}[width=4cm] +\usepackage{pstricks} +\begin{pspicture}[showgrid=true](3,2) +\end{pspicture}\\[20pt] +\begin{pspicture}(3,2) + \psgrid[style=gridstyle,gridfont=AvantGard-Demi] +\end{pspicture}\\[20pt] +\begin{pspicture}(3,2) + \psgrid[style=gridstyle,gridfont=ZapfDingbats] +\end{pspicture} +\end{LTXexample} + + + + +\subsection{Macro \nxLcs{psLoop}} +\PST\marginpar[2.17]{2.17} already knows \Lcs{psforeach} and \Lcs{psForeach} for loops. The new +macro \Lcs{psLoop} allows a loop without defining a variable: + +\begin{BDef} +\Lcs{psLoop}\Largb{n}\Largb{argument} +\end{BDef} + +However, the internal \TeX\ counter \Lctr{psLoopIndex} can be used for own purposes. + +\begin{LTXexample}[width=7cm] + \psLoop{4}{PSTricks } +\end{LTXexample} + +\begin{LTXexample}[width=7cm] +\tabular{|c|c|c|c|} + \psLoop{3}{PSTricks &}\\\hline + A & B & C & D\\\hline +\endtabular +\end{LTXexample} + +\begin{LTXexample}[width=6cm] +\begin{pspicture}[showgrid](3,3) +\psLoop{4}{% + \psdots(\the\psLoopIndex,\the\psLoopIndex)} +\end{pspicture} +\end{LTXexample} + + +%-------------------------------------------------------------------------------------- +\section{The PostScript header files} +\subsection{\nxLFile{pstricks.pro}} +%-------------------------------------------------------------------------------------- + + +%-------------------------------------------------------------------------------------- +\subsection{\nxLFile{pst-algparser.pro}} +%-------------------------------------------------------------------------------------- + +\section{\nxLcs{psforeach} and \nxLcs{psForeach}} +%-------------------------------------------------------------------------------------- + +\section{List of all optional arguments for \texttt{pstricks}} + +\xkvview{family=pstricks,columns={key,type,default}} + + + +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news05.pdf b/graphics/pstricks/base/doc/pst-news05.pdf Binary files differnew file mode 100644 index 0000000000..c6459f23e1 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news05.pdf diff --git a/graphics/pstricks/base/doc/pst-news05.tex b/graphics/pstricks/base/doc/pst-news05.tex new file mode 100644 index 0000000000..a1ddcc64a6 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news05.tex @@ -0,0 +1,403 @@ +\documentclass[12pt]{article} +\usepackage[T1]{fontenc} +\usepackage[latin1]{inputenc} +%\usepackage{geometry} +\usepackage{pst-all} +\usepackage{showexpl} +\usepackage{tabularx,array,longtable} +\SpecialCoor +\usepackage[colorlinks,linktocpage]{hyperref} +\def\UrlFont{\small\ttfamily} +\makeatletter +\def\verbatim@font{\small\normalfont\ttfamily} +\makeatother +%\usepackage{color} +\definecolor{hellgelb}{rgb}{1,1,0.8} +\definecolor{colKeys}{rgb}{0,0,1} +\definecolor{colIdentifier}{rgb}{0,0,0} +\definecolor{colComments}{rgb}{1,0,0} +\definecolor{colString}{rgb}{0,0.5,0} +% +\usepackage{listings} +\lstset{% + language=PSTricks,% + float=hbp,% + basicstyle=\ttfamily\small, % + identifierstyle=\color{colIdentifier}, % + keywordstyle=\color{colKeys}, % + stringstyle=\color{colString}, % + commentstyle=\color{colComments}, % + columns=flexible, % + tabsize=4, % + frame=single, % + extendedchars=true, % + showspaces=false, % + showstringspaces=false, % + numbers=left, % + numberstyle=\tiny, % + breaklines=true, % +% backgroundcolor=\color{hellgelb}, % + breakautoindent=true, % + captionpos=b,% + xleftmargin=0pt% +} + +%\parindent=0pt +\newcommand\verbI[1]{{\small\texttt{#1}}} +\newcommand\CMD[1]{{\texttt{\textbackslash#1}}} +\let\Lcs\CMD +% +%\psset{subgriddiv=0,griddots=5,gridlabels=7pt} +% +\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +\def\PS{PostScript} +% +\begin{document} +\title{\texttt{PSTricks -- 2005}\\ new macros and bugfixes for the +basic packages \Lcs{pstricks}, \Lcs{pst-tree}, and \Lcs{pst-node}} +\author{Herbert Voß\thanks{% +\url{Herbert.Voss@pstricks.de}}} +\date{\today} + +\maketitle + +\begin{abstract} +This new version of \texttt{pstricks.tex} depends on the also new prologue file +\texttt{pstricks.pro} (v 1.01) and pst-dots.pro (v. 2.00), which should go into +the local \TeX-directory \url{$TEXMFLOCAL/dvips/}. +\end{abstract} + + +\tableofcontents + +\clearpage + +\part{General informations} +%-------------------------------------------------------------------------------------- +\section{Color handling} +%-------------------------------------------------------------------------------------- +The new color package \verb+xcolor+ has a lot of interesting features, but it needs +some modification to the code of \verb+pstricks.sty+ and \verb+pstricks.tex+. The +package \verb+pstricks.sty+ superseded the old package \verb+pstcol.sty+, which is +now obsolet. The version on CTAN now does nothing else as loading \verb+pstricks.sty+. + +There are some important facts for using colors inside PSTricks with \LaTeX: + +\begin{itemize} +\item load always \verb+pstricks+ as first package; +\item use always the \LaTeX\ syntax for defining colors and \textbf{not} the PSTricks own one.\\ + \verb+\definecolor ...+ is the correct setting! +\item do not use the PSTricks style for using color, use always \verb+\color{<name>}+. +\end{itemize} + + +\part{\texttt{pstricks} -- package} + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- +New otions: + +\begin{description} +\item[\texttt{noxcolor}] load package \verb+color+ instead of \verb+xcolor+; +\item[\texttt{plain}] do nothing else as a \CMD{input\{pstricks\}}; +\item[\texttt{DIA}] a bug fix for the \verb+PSTricks+-export of the garfic program DIA. +\end{description} + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.pro}} +%-------------------------------------------------------------------------------------- + +this file now contains the PostScript code for arcs of an ellipse. + + +\section{\texttt{pstricks.tex}} +The new version 1.10 has some minor but important changes; it is not compatible +to older versions when using the vertical shift option for the \verb+pspicture+ +environment. + +\subsection{New and modified option for {pspicture}}\label{sec:option} + +Table~\ref{tab:pspicture} shows the two new options for the \verb+pspicture+ environment. + +\begin{table}[htb] +\caption{Optionen der \texttt{pspicture}-Umgebung}\label{tab:pspicture} +\centering +\begin{tabular}{@{}lll@{}} +\textrm{\emph{name}} & \emph{meaning} & \emph{default}\\\hline +\verb+shift+ & vertical shift & $0$ \\ +\verb+showgrid+ & show grid & \verb+false+\\ +\end{tabular} +\end{table} + + +% --------------------------------------------------------------------------------------- +\subsubsection{\texttt{shift}}\label{subsubsec:shift} +% --------------------------------------------------------------------------------------- +This option is the known one from older \texttt{PSTricks} version, but now with the +usual syntax for options. The shift is relative to the height of the defined \verb+pspicture+ +environment, its lower left corner is by deafult on the base line. For older versions +the shift depends with its value to the baseline, a negative value raised up the \verb+pspicture+ +box. Now the \verb+shift+ option works similiar to the known \CMD{raisebox} makro, except that +\verb+shift+ is relative to the box height. A positive \verb+shift+ value raises up the box +and vice versa for a negative value. + +\begin{figure}[htb] +\centering +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){-0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}(-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0} +\end{pspicture}\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=-0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\caption{Meaning of the \texttt{shift} option}\label{fig:baseline} +\end{figure} + +%\begin{lstlisting}[caption={Vertikale Verschiebung der Baseline}] +\begin{lstlisting} +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){-0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}(-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0} +\end{pspicture}\textcolor{red}{\rule{5mm}{1pt}} +\hspace{1cm}% +\textcolor{red}{\rule{5mm}{1pt}}% +\begin{pspicture}[shift=-0.5](-0.5,-0.5)(0.5,0.5) + \psframe[linecolor=blue](-0.5,-0.5)(0.5,0.5)\rput(0,0){0.5} +\end{pspicture}% +\textcolor{red}{\rule{5mm}{1pt}} +\end{lstlisting} + + +% --------------------------------------------------------------------------------------- +\subsubsection{\texttt{showgrid}}\label{subsubsec:showgrid} +% --------------------------------------------------------------------------------------- +This new version of \texttt{PSTricks} defines internally a special grid style + +\begin{lstlisting} +\newpsstyle{gridstyle}{% + subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt} +\end{lstlisting} + +which can be overwritten by the user. This style is only used for the \verb+showgrid+ +option of the \verb+pspicture+ environment. The macro \verb+\psgrid+ doesn't use this predefined +style and works in the usual way. However, the user can use it like all +other self defined styles: \verb+\psgrid[style=gridstyle]+. + + +\begin{LTXexample}[width=3.5cm] +\begin{pspicture}[showgrid=true](-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\newpsstyle{gridstyle}{% + subgriddiv=2,subgridcolor=lightgray} +\begin{pspicture}[showgrid=true](-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\newpsstyle{gridstyle}{} +\begin{pspicture}[showgrid=true](-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\begin{pspicture}(-1,0)(2,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=3.5cm] +\begin{pspicture}(-1,0)(2,1) + \psgrid +\end{pspicture} +\end{LTXexample} + +Depending to the internal structure of the \verb+pspicture+ environment it is not possible +to set the \verb+shift+ option global by \CMD{psset}, it must always be locally defined +with optional part of the parameter, as seen in the above examples. + + +%-------------------------------------------------------------------------------------- +\subsection{New arrows} +%-------------------------------------------------------------------------------------- + +\verb+pstricks now contains the missing arrow ends \verb+]-[+ and \verb+)-(+. + +\begin{LTXexample}[width=4cm] +\begin{pspicture}(4,3) + \psset{arrowscale=2,linewidth=1pt} + \psline{]-[}(4,0) + \psline{)-(}(0,1)(4,1) + \psline{)->}(0,2)(4,2) + \psline{]->>}(0,3)(4,3) +\end{pspicture} +\end{LTXexample} + + +%-------------------------------------------------------------------------------------- +\subsection{\Lcs{psdot} and \Lcs{psdots}} +%-------------------------------------------------------------------------------------- +\verb+\psdot*+ and \verb+\psdots*+ are now supported by PSTricks. Both were missing +in the old versions. + + +%-------------------------------------------------------------------------------------- +\subsection{Other changes} +%-------------------------------------------------------------------------------------- +\texttt{pstricks.tex} defined the PostScript subroutines for arcs of an ellipse. +This code now moved into the appropriate \texttt{pstricks.pro}, which holds the +pure PostScript code of \texttt{PSTricks}. This in not important for user until +the newest \texttt{pstricks.pro} \textbf{and} \texttt{pstricks.tex} are installed. + + +\subsection{Bugfixes} +\subsubsection{\texttt{origin}} + +There were several mailings in the past to the \verb+origin+ option, which worked the other +way round than expected. Now the coordinates work realtive to the current origin. + + +\begin{LTXexample}[width=3cm] +\begin{pspicture}(-1,-1)(2,1.25) + \psaxes{->}(0,0)(-1,-1)(2,1.25) + \psset{linewidth=1.5pt} + \parabola[linestyle=dashed](-1,1)(0,0) + \parabola[origin={0.5,-0.5}](-1,1)(0,0) + \qdisk(0.5,-0.5){2pt} +\end{pspicture} +\end{LTXexample} + +\subsubsection{Empty parameter} +\sloppy +To prevent some problems with empty arrow definitions in macros like \verb+\psline[...]{}(..)(...)+, +which makes no sense, but should be possible, there is now a check before setting the values. + + +\subsection{\CMD{psscalebox} and \CMD{psscaleboxto}} +To prevent clashes with the \verb+graphicx+ package, which also defines a \CMD{scalebox} macro +with different syntax, +\verb+PSTricks+ now defines \CMD{psscalebox} and \CMD{psscaleboxto}. For some compatibility reasons the old +names are still supported. With the new names it doesn'r matter if \verb+pstricks+ is loaded before or after +\verb+graphicx+. There are also some other changes: + + +\begin{verbatim} + \scalebox -> \psscalebox + \scaleboxto -> \psscaleboxto + \rotateleft -> \psrotateleft + \rotateright -> \psrotateright + \rotatedown -> \psrotatedown +\end{verbatim} + +%-------------------------------------------------------------------------------------- +\section{New fill options} +%-------------------------------------------------------------------------------------- +For the fillstyles \verb+hlines+, \verb+vlines+ and \verb+crosshatch+ there are two new +options to get increasing line widths and/or increasing whitespace. Both options are +lengths and can be set as usual for PSTricks, with or without a unit. + +\bigskip\noindent +\begin{tabularx}{\linewidth}{lXc} +\emph{name} & \emph{meaning} & \emph{default}\\\hline +\verb|hatchsepinc| & additional increasing space between two hatch lines & 0\tabularnewline +\verb|hatchwidthinc| & value for the increasing line width of two hatch lines & 0 +\end{tabularx} + + + +\bigskip +\begin{LTXexample}[pos=t] +\begin{pspicture}(\linewidth,3) + \psframe[fillstyle=vlines,hatchangle=0,hatchsep=.5pt,% + hatchwidth=1pt,hatchwidthinc=0.25pt](\linewidth,3) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(\linewidth,3) + \psframe[fillstyle=hlines,hatchangle=0,% + hatchwidth=1pt,hatchsep=0.5pt,hatchsepinc=0.1pt](\linewidth,3) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(\linewidth,3) + \psframe[fillstyle=vlines,hatchangle=0,hatchsep=0.6pt,% + hatchwidth=1pt,hatchwidthinc=0.3pt,hatchangle=60, + hatchcolor=red](\linewidth,3) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(\linewidth,3) + \psframe[fillstyle=hlines,hatchangle=0,hatchangle=-60,% + hatchwidth=1pt,hatchsep=0.5pt,hatchsepinc=0.1pt, + hatchcolor=blue](\linewidth,3) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(\linewidth,4) + \pscircle[fillstyle=vlines,hatchangle=0,hatchsep=0.6pt,% + hatchwidth=1pt,hatchwidthinc=0.3pt,hatchangle=90, + hatchcolor=red](2,2){2} + \pscircle[fillstyle=vlines,hatchangle=0,hatchsep=0.6pt,% + hatchwidth=1pt,hatchwidthinc=0.3pt,hatchangle=-45, + hatchcolor=green](7,2){2} + \pscircle[fillstyle=hlines,hatchangle=0,hatchsep=0.6pt,% + hatchwidth=1pt,hatchwidthinc=0.3pt,hatchangle=45, + hatchcolor=blue](12,2){2} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(\linewidth,3) + \psframe[fillstyle=crosshatch,hatchangle=0,hatchangle=-90,% + hatchwidth=1pt,hatchsep=0.5pt,hatchsepinc=0.1pt, + hatchcolor=blue](\linewidth,3) +\end{pspicture} +\end{LTXexample} + +\part{\texttt{pst-node} -- package} + +\section{\texttt{pst-node.tex}} +\subsection{\CMD{nccircle}} +With some modification to \CMD{psarc\@iv} it is now possible to get the loops in any direction +and above or below the node. + +\begin{LTXexample}[width=.35\linewidth] +\psscalebox{1.5}{% + \circlenode{A}{A} + \nccircle{->}{A}{1.5em} \nbput{foo} + \nccircle{<-}{A}{-1.5em}\naput{bar}} +% +\hspace{1cm} +\psscalebox{1.5}{% + \circlenode{A}{A} + \nccircle{<-}{A}{1.5em} \nbput{foo} + \nccircle{->}{A}{-1.5em}\naput{bar}} +\end{LTXexample} + +\part{\texttt{pst-tree} -- package} +\section{\texttt{pst-tree.tex}} + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news06.pdf b/graphics/pstricks/base/doc/pst-news06.pdf Binary files differnew file mode 100644 index 0000000000..ce9dff713c --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news06.pdf diff --git a/graphics/pstricks/base/doc/pst-news06.tex b/graphics/pstricks/base/doc/pst-news06.tex new file mode 100644 index 0000000000..719c6174ca --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news06.tex @@ -0,0 +1,198 @@ +\documentclass[12pt]{article} +\usepackage[T1]{fontenc} +\usepackage[latin1]{inputenc} +%\usepackage{geometry} +\usepackage{pst-all,pst-news} +\let\CMD\cs +\usepackage{showexpl} +\usepackage{tabularx,array,longtable} +\SpecialCoor +\usepackage[colorlinks,linktocpage]{hyperref} +\def\UrlFont{\small\ttfamily} +\makeatletter +\def\verbatim@font{\small\normalfont\ttfamily} +\makeatother +\definecolor{hellgelb}{rgb}{1,1,0.8} +\definecolor{colKeys}{rgb}{0,0,1} +\definecolor{colIdentifier}{rgb}{0,0,0} +\definecolor{colComments}{rgb}{1,0,0} +\definecolor{colString}{rgb}{0,0.5,0} +% +\usepackage{listings} +\lstset{% + language=PSTricks,% + float=hbp,% + basicstyle=\ttfamily\small, % + identifierstyle=\color{colIdentifier}, % + keywordstyle=\color{colKeys}, % + stringstyle=\color{colString}, % + commentstyle=\color{colComments}, % + columns=flexible, % + tabsize=4, % + frame=single, % + extendedchars=true, % + showspaces=false, % + showstringspaces=false, % + numbers=left, % + numberstyle=\tiny, % + breaklines=true, % +% backgroundcolor=\color{hellgelb}, % + breakautoindent=true, % + captionpos=b,% + xleftmargin=0pt% +} + +\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +\def\PS{PostScript} +% +\begin{document} +\title{\texttt{PSTricks -- 2006}\\ new macros and bugfixes for the +basic packages \Lcs{pstricks}, \Lcs{pst-tree}, and \Lcs{pst-node}} +\author{Herbert Voß\thanks{% +\url{Herbert.Voss@pstricks.de}}} +\date{\today} + +\maketitle + +\begin{abstract} +This new version of \LFile{pstricks.tex} depends on the also new prologue file +\LFile{pstricks.pro} (v 1.01) and \LFile{pst-dots.pro} (v. 2.00), which should go into +the local \TeX-directory \url{$TEXMFLOCAL/dvips/}. +\end{abstract} + + +\tableofcontents + +\clearpage +%-------------------------------------------------------------------------------------- +\section{linecap} +%-------------------------------------------------------------------------------------- +This was already introduced with version 1.14, but I forgot to mentioned it. +For the line ends one can use the ,,arrows``{} \texttt{c-c}, but only for the ends. For dashed +lines the option \verb+linecap+ can be set to the value 1 to get the dashes with +rounded ends, too. + +\begin{pspicture}(5,3) +\psline[linestyle=dashed,linewidth=8pt,dash=5mm 5mm,linecap=2](0,2.5)(5,2.5) +\psline[linestyle=dashed,linewidth=8pt,dash=5mm 5mm,linecap=1](0,1.5)(5,1.5) +\psline[linestyle=dashed,linewidth=8pt,dash=5mm 5mm](0,0.5)(5,0.5) +\end{pspicture} + +\begin{lstlisting} +\begin{pspicture}(5,3) +\psline[linestyle=dashed,linewidth=8pt,dash=5mm 5mm,linecap=2](0,2.5)(5,2.5) +\psline[linestyle=dashed,linewidth=8pt,dash=5mm 5mm,linecap=1](0,1.5)(5,1.5) +\psline[linestyle=dashed,linewidth=8pt,dash=5mm 5mm](0,0.5)(5,0.5) +\end{pspicture} +\end{lstlisting} + +It is obvious that only the value 1 makes sense for the dashed lines. + +\section{Dots} +Long time ago, Etienne Riga sent the code for some new dotstyles +which are now part of pstricks. + +\psset{dotscale=1.5} +\let\Loption\texttt +\def\multiDot#1{\multido{\nA=0+1}{3}{\psdot[dotstyle=#1]\kern1em}} +\def\cmultiDot#1{\multido{\nA=0+1}{3}{\psdot*[dotstyle=#1]\kern1em}}%} +\begin{longtable}{@{}l@{\kern2em}>{\ttfamily}c>{\ttfamily}c| + l@{\kern2em}>{\ttfamily}c>{\ttfamily}c@{}} +\emph{Name} & \Lcs{psdot} & \Lcs{psdot*} & +\emph{Name} & \Lcs{psdot} & \Lcs{psdot*} \\\hline +\endhead +\Loption{*} & \multiDot{*} & \cmultiDot{*} &%\\ +\Loption{o} & \multiDot{o} & \cmultiDot{o}\\ +\Loption{Bo} & \multiDot{Bo} & \cmultiDot{Bo}&%\\ +\Loption{x} & \multiDot{x} & \cmultiDot{x}\\ +\Loption{+} & \multiDot{+} & \cmultiDot{+}&%\\ +\Loption{B+} & \multiDot{B+} & \cmultiDot{B+}\\ +\Loption{Add} & \multiDot{Add} & \cmultiDot{Add}&%\\ +\Loption{BoldAdd} & \multiDot{BoldAdd} & \cmultiDot{BoldAdd}\\ +\Loption{Oplus} & \multiDot{Oplus} & \cmultiDot{Oplus}&%\\ +\Loption{BoldOplus} & \multiDot{BoldOplus} & \cmultiDot{BoldOplus}\\ +\Loption{SolidOplus} & \multiDot{SolidOplus} & \cmultiDot{SolidOplus} & +\Loption{Hexagon} & \multiDot{Hexagon} & \cmultiDot{Hexagon}\\ +\Loption{BoldHexagon} & \multiDot{BoldHexagon} & \cmultiDot{BoldHexagon}& +\Loption{SolidHexagon} & \multiDot{SolidHexagon} & \cmultiDot{SolidHexagon}\\ +\Loption{asterisk} & \multiDot{asterisk} & \cmultiDot{asterisk}&%\\ +\Loption{Basterisk} & \multiDot{Basterisk} & \cmultiDot{Basterisk}\\ +\Loption{Asterisk} & \multiDot{Asterisk} & \cmultiDot{Asterisk}&%\\ +\Loption{BoldAsterisk} & \multiDot{BoldAsterisk} & \cmultiDot{BoldAsterisk}\\ +\Loption{SolidAsterisk} & \multiDot{SolidAsterisk} & \cmultiDot{SolidAsterisk}& +\Loption{oplus} & \multiDot{oplus} & \cmultiDot{oplus}\\ +\Loption{otimes} & \multiDot{otimes} & \cmultiDot{otimes}& +\Loption{Otimes} & \multiDot{Otimes} & \cmultiDot{Otimes}\\ +\Loption{BoldOtimes} & \multiDot{BoldOtimes} & \cmultiDot{BoldOtimes}& +\Loption{SolidOtimes} & \multiDot{SolidOtimes} & \cmultiDot{SolidOtimes}\\ +\Loption{Mul} & \multiDot{Mul} & \cmultiDot{Mul}&%\\ +\Loption{BoldMul} & \multiDot{BoldMul} & \cmultiDot{BoldMul}\\ +\Loption{|} & \multiDot{|} & \cmultiDot{|}&%\\ +\Loption{B|}\iffalse\index{B*@\texttt{B}|}\fi & \multiDot{B|} & \cmultiDot{B|}\\ +\Loption{Bar} & \multiDot{Bar} & \cmultiDot{Bar}&%\\ +\Loption{BoldBar} & \multiDot{BoldBar} & \cmultiDot{BoldBar}\\ +\Loption{Bullet} & \multiDot{Bullet} & \cmultiDot{Bullet}&%\\ +\Loption{Circle} & \multiDot{Circle} & \cmultiDot{Circle}\\ +\Loption{BoldCircle} & \multiDot{BoldCircle} & \cmultiDot{BoldCircle}&%\\ +\Loption{square} & \multiDot{square} & \cmultiDot{square}\\ +\Loption{Bsquare} & \multiDot{Bsquare} & \cmultiDot{Bsquare} & +\Loption{square*} & \multiDot{square*} & \cmultiDot{square*}\\ +\Loption{Square} & \multiDot{Square} & \cmultiDot{Square}&%\\ +\Loption{BoldSquare} & \multiDot{BoldSquare} & \cmultiDot{BoldSquare}\\ +\Loption{SolidSquare} & \multiDot{SolidSquare} & \cmultiDot{SolidSquare}& +\Loption{diamond} & \multiDot{diamond} & \cmultiDot{diamond}\\ +\Loption{Bdiamond} & \multiDot{Bdiamond} & \cmultiDot{Bdiamond}&%\\ +\Loption{diamond*} & \multiDot{diamond*} & \cmultiDot{diamond}\\ +\Loption{Diamond} & \multiDot{Diamond} & \cmultiDot{Diamond}&%\\ +\Loption{BoldDiamond} & \multiDot{BoldDiamond} & \cmultiDot{BoldDiamond}\\ +\Loption{SolidDiamond} & \multiDot{SolidDiamond} & \cmultiDot{SolidDiamond}& +\Loption{triangle} & \multiDot{triangle} & \cmultiDot{triangle}\\ +\Loption{Btriangle} & \multiDot{Btriangle} & \cmultiDot{Btriangle}& +\Loption{triangle*} & \multiDot{triangle*} & \cmultiDot{triangle*}\\ +\Loption{Triangle} & \multiDot{Triangle} & \cmultiDot{Triangle}&%\\ +\Loption{BoldTriangle} & \multiDot{BoldTriangle} & \cmultiDot{BoldTriangle}\\ +\Loption{SolidTriangle} & \multiDot{SolidTriangle} & \cmultiDot{SolidTriangle}& +\Loption{pentagon} & \multiDot{pentagon} & \cmultiDot{pentagon}\\ +\Loption{Bpentagon} & \multiDot{Bpentagon} & \cmultiDot{Bpentagon}&%\\ +\Loption{pentagon*} & \multiDot{pentagon*}& \cmultiDot{pentagon*}\\ +\Loption{Pentagon} & \multiDot{Pentagon} & \cmultiDot{Pentagon}&%\\ +\Loption{BoldPentagon} & \multiDot{BoldPentagon} & \cmultiDot{BoldPentagon}\\ +\Loption{SolidPentagon} & \multiDot{SolidPentagon} & \cmultiDot{SolidPentagon}& +\Loption{Hexagon} & \multiDot{Hexagon} & \cmultiDot{Hexagon}\\ +\Loption{BoldHexagon} & \multiDot{BoldHexagon} & \cmultiDot{BoldHexagon}& +\Loption{SolidHexagon} & \multiDot{SolidHexagon} & \cmultiDot{SolidHexagon} +\end{longtable} + + +\section{\texttt{pstricks.pro}} +The PostScript header file defines the following functions and constants, which +can be used +in arguments for \CMD{psplot} or any other macro, which reads PostScript code. + +\begin{lstlisting}[basicstyle=\ttfamily\footnotesize] +/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def% return 0 for negative arguments +/Atan { /atan load stopped { pop pop 0 } if } def% return 0 if atan not known +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +%----------------- hv added 20050516 --------------- +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } bind def % viceversa +\end{lstlisting} + +\section{Packages} +The package \texttt{pst-char} is now part of \texttt{pst-text} and the +package \texttt{pst-ghsb} is now part of \texttt{pst-grad}. The macros +and enviroments will work in the same way. + +The documented source code of \texttt{pstricks} and \texttt{pst-node} is +now available as a pdf file with a source which can be run by pdf\LaTeX. +Rolf Niepraschk modified the old sources from Timothy Van Zandt for +running with \LaTeX\ and/or pdf\LaTeX. + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news08.pdf b/graphics/pstricks/base/doc/pst-news08.pdf Binary files differnew file mode 100644 index 0000000000..428653ebf2 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news08.pdf diff --git a/graphics/pstricks/base/doc/pst-news08.tex b/graphics/pstricks/base/doc/pst-news08.tex new file mode 100644 index 0000000000..e4dd6dfce2 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news08.tex @@ -0,0 +1,862 @@ +\documentclass[11pt]{article} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{pst-news} +% +\begin{document} +\title{\texttt{PSTricks -- 2008}\\ new macros and bugfixes for the +basic packages \nxLFile{pstricks}, \nxLFile{pst-plot}, \nxLFile{pst-tree},\\ and \nxLFile{pst-node}} +\author{Herbert Voß\thanks{% +\url{Herbert.Voss@pstricks.de}; \newline thanks to Patrick Drechsler.}} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- + +\subsection{Error messages} +\begin{itemize} +\item Loading the package \LPack{pstricks} by \LaTeX\ will now write a message +into the file list of file version and date for the file \LFile{pstricks.pro}. +\item A frequently done error is choosing a file name for the document, which is +already a name of one PSTricks package, e.\,g. \LFile{pstricks.tex}. The \Index{error message} +in the log file was not really helpful. There is now an extended message +(example for a dcoument file called \LFile{pstricks.tex}): +{\small\begin{verbatim} +! LaTeX Error: `pstricks.tex' is a forbidden name for your document, + it is already a name of a package. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.13 \documentclass + {article} +? H +Choose another name for your document +\end{verbatim} +} +\end{itemize} + +\subsection{Optional arguments} +\LPack{pstricks} supports \Index{transparent colors} with Ghostscript's \LPS{.setopacityalpha}, +\LPS{.setblendmode}, and \LPS{.setshapealpha}. These functions are not known to +\Index{V\TeX} or Adobes \Index{Distiller}. The optional argument \Loption{vtex} disables transparencies +and \Loption{distiller} overrides the \Index{Ghostscript} functions with the ones from the \Index{Distiller}. + + + +\clearpage +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\PSTfileversion -- \PSTfiledate)} +%-------------------------------------------------------------------------------------- + +\subsection{Makro \cs{psDEBUG}} +\texttt{pstricks.tex} defines the option \texttt{PstDebug=0|1}, which can be used for +debugging. The new macro \cs{psDEBUG} makes it easier to write some debugging +information into the package files. The macro is only valid, if \texttt{PstDebug=1} +is set, otherwise the macro does nothing. + +\begin{verbatim} +\psDEBUG[optional arg]{text} +\end{verbatim} + +\cs{psDEBUG} writes the argument \texttt{text} into the log file. +Without an optional argument the word \texttt{pstricks} is used. The following output +of the log file + +\begin{lstlisting} +... +<key:xticksize>: setting ticksize to max +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 26. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 26. +<pst@@hlabels>: xticksizeC=0.0pt +... +\end{lstlisting} + +was possible with \verb+\psset{PstDebug=1}+\footnote{Can also be used locally for a macro when used as optional argument +in the usual way.} +and inside of \texttt{pstricks-add} with +(only the first for example): +\begin{lstlisting} +... + \psDEBUG[key:ticksize]{setting ticksize} +... +\end{lstlisting} + + + +\subsection{Option \texttt{shift}} +The optional argument \Lkeyword{shift} can be used for a vertical alignment of the +\Lenv{pspicture} box. With \Lkeyword{shift}=\Lkeyval{*}, instead of a value or a length +it is possible to center the \Lenv{pspicture} box vertically to the baseline +of the current line. + +\begin{LTXexample}[width=4cm] +\usepackage{pstricks} +\rule{5mm}{0.5pt}% +\psframebox{% +\begin{pspicture}[showgrid=true, + shift=*](-0.3,-0.4)(3.2,3.3) + \psarc[showpoints=true](1,1){2}{-45}{120} +\end{pspicture}}\rule{5mm}{0.5pt} +\end{LTXexample} + +\subsection{Option \texttt{gridfont}} +By default the \Index{grid label}s were printed always in \Index{Helvetica}. With the new keyword \Lkeyword{gridfont} +one can define another \Index{PostScript Font}. Available are at least + +\medskip +{\ttfamily\noindent +\Lkeyval{Helvetica} (default) -- \Lkeyval{Helvetica-Narrow} -- \Lkeyval{Times-Roman} -- \Lkeyval{Courier} -- \Lkeyval{AvantGard} --\Lkeyval{NewCenturySchlbk} -- +\Lkeyval{Palatino-Roman} -- \Lkeyval{Bookman-Demi} -- \linebreak \Lkeyval{ZapfDingbats} -- \Lkeyval{Symbol}} + +\begin{LTXexample}[width=4cm] +\usepackage{pstricks} +\begin{pspicture}[showgrid=true](3,2) +\end{pspicture}\\[20pt] +\begin{pspicture}(3,2) + \psgrid[style=gridstyle,gridfont=AvantGard-Demi] +\end{pspicture}\\[20pt] +\begin{pspicture}(3,2) + \psgrid[style=gridstyle,gridfont=ZapfDingbats] +\end{pspicture} +\end{LTXexample} + + +\clearpage +\subsection{\texttt{linejoin}} +Connecting lines can be done in several ways and is controlled on PS level +by the \LPS{setlinejoin} command. With this version of PSTricks it is +possible to controll this by an optional argument, called \Lkeyword{linejoin}. +It is preset to 0 and can take values of 0,1,2. Other values will have +no effect. + +\begin{LTXexample}[width=4cm] +\psset{linewidth=3mm,unit=0.8} +\begin{pspicture}[showgrid=true](3,2) + \psline(0,0)(1,2)(2,0)(3,2) +\end{pspicture}\\[10pt] +\begin{pspicture}[showgrid=true](4,2) + \psline[linejoin=1](0,0)(1,2)(2,0)(3,2)(4,0)% +\end{pspicture}\\[10pt] +\begin{pspicture}[showgrid=true](3,2) + \psline[linejoin=2](0,0)(1,2)(2,0)(3,2)% +\end{pspicture} +\end{LTXexample} + +\clearpage +\subsection{\texttt{linecap}} +The value of \Lkeyword{linecap} determines how the line ends are drawn: + +\begin{description} +\item[0] lines are cut (default) +\item[1] lines are ended by a filled semicircle of radius 0.5$\cdot$\Ldim{pslinewidth} +\item[2] lines are ended by a filled half square of radius 0.5$\cdot$\Ldim{pslinewidth} +\end{description} + +The following example shows that using \Lkeyword{linecap} for lines is the same +than using the \Index{arrow} option. + +\begin{LTXexample}[width=4cm] +\begin{pspicture}[showgrid=true](4,4)% + \psset{linewidth=5mm} + \psline[arrows=C-C](0,3.75)(4,3.75) + \psline[linecap=2](0,3)(4,3) + \psline[arrows=c-c](0,2.25)(4,2.25) + \psline[linecap=1](0,1.5)(4,1.5) + \psline[arrows=-](0,0.75)(4,0.75) + \psline(4,0) +\end{pspicture} +\end{LTXexample} + +Using this optional argument makes only sense in some special cases, because +it is the same as the \Index{arrow type} \Lkeyval{c-c}. But the arrows are not part +of the \Index{current path} and \Index{filling} an \Index{open curve} with the \Lkeyword{linecap} option +is different to a curve using the \Lkeyval{c-c} arrow. + +\begin{LTXexample}[width=3cm,wide] +\psset{unit=5cm,linewidth=5mm} +\begin{pspicture}(-0.2,-0.6)(0.2,0.5)% +\def\curve{\pscurve(-.1,.1)(-.15,.15)(0,.2)(.15,.15)(.1,.1)} +\rput(0,.2){\psset{arrows=c-c}\curve} +\rput(0,-.2){% + \psset{fillstyle=solid,fillcolor=red,arrows=c-c} + \curve} +\rput(0,-.6){% + \psset{fillstyle=solid,fillcolor=red,linecap=1} + \curve} +\end{pspicture} +\end{LTXexample} + + +\clearpage +\subsection{New arrowtype \texttt{D>} and \texttt{D>D>}} +All arrows are drawn as polygons. The new arrow type \Lkeyval{D>} or \Lkeyval{<D} for the other way round, +draws its lines as bezier curves, which looks nicer for big arrows. + +\begin{LTXexample}[width=4cm,wide] +\psset{arrowscale=5} +\begin{pspicture}(4,2) +\psline{<D<D-D>D>}(0,2)(4,2) +\psline[arrows=<-D>,arrowlength=2](0,1)(4,1) +\psline[arrowinset=0]{<D-D>}(0,0.25)(4,0.25) +\end{pspicture} +\end{LTXexample} + + +\clearpage +\subsection{Fill style \texttt{penrose}} + +The valid optional arguments are \texttt{penrose}, \texttt{penrose*}, and \texttt{hatchcolor}. +The star version is only seen, if there is a fillcolor or a background different to white. + +\begin{LTXexample}[pos=t,wide] +\begin{pspicture}(3,3) +\psframe[fillstyle=penrose](3,3) +\end{pspicture} \qquad +\begin{pspicture}(3,3) +\psframe[fillstyle=penrose,psscale=0.5](3,3) +\end{pspicture} \qquad +\begin{pspicture}(3,3) +\psccurve[fillstyle=penrose*,fillcolor=red!30,hatchcolor=blue](0,1.5)(1.5,3)(3,1.5)(1.5,0) +\end{pspicture} +\end{LTXexample} + + +\clearpage +\subsection{Transparent colors} +The package \LPack{pstricks-add} already defined a fillstyle for +transparency colors by using the \Index{Ghostscript}'s \Index{blendmode}. +It now moves into the main \LPack{pstricks} package, together with +another possibility for creating transparent colors. +Transparency is only seen with the \Index{PDF} output (version 1.4 or greater), +as nearly all PostScript viewer cannot show transparencies. + +Loading the \LPack{pstricks} package with the option \Loption{vtex}, disables +the transparency effekts and everything works as before. + +\subsubsection{Options \texttt{strokeopacity} and \texttt{opacity}} +For the existing fill style \Lkeyval{solid} the new option \Lkeyword{opacity} +can be used to get also transparent colors. It is predefined by 1 ($0\ldots1$), which +is the old behaviour, no \Index{transpareny}. The option is valid only for PostScripts +fill commands. Lines and curves can be transparent with setting the option\index{transparent lines} +\Lkeyword{strokeopacity}, which can have a different value than the \Lkeyword{opacity} option. + +\begin{LTXexample}[width=4cm,wide] +\begin{pspicture}[linewidth=1cm](4,4) + \psline[linecolor=red](0,0)(4,4) + \psline[linecolor=blue,strokeopacity=0.5](0,4)(4,0) + \psline[linecolor=green,strokeopacity=0.5](0,3.5)(4,3.5) + \psline[linecolor=yellow,strokeopacity=0.5](0,0.5)(4,0.5) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[width=4cm,wide] +\begin{pspicture}[linewidth=1cm](4,4) +\psline[linecolor=red](0,0)(4,4) +\pscircle*[opacity=0.5](2,2){2} +\psline[linecolor=blue,strokeopacity=0.6](0,4)(4,0) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[width=4cm,wide] +\begin{pspicture}[linewidth=3mm](4,5.5) + \multido{\rA=0.0+0.5}{9}{% + \psline[linecolor=red!40](\rA,0)(\rA,5)} + \multido{\rA=0.0+0.5,\rB=0.0+0.1}{11}{% + \psline[arrows=<D-D>,linecolor=blue, + linewidth=5pt,arrowscale=1.5, + strokeopacity=\rB](0,\rA)(4,\rA)} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[width=5cm,wide] +\begin{pspicture}(5,5) + \psset{fillstyle=solid} + \psframe[fillcolor=red](0,1)(3,4) + \psframe[fillcolor=blue,opacity=0.7](2,2)(5,5) + \psframe[fillcolor=green,opacity=0.7](1,0)(4,3) + \pscircle[fillcolor=cyan, + opacity=0.5](1.5,3.5){1.25} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=5cm,wide] +\begin{pspicture}(5,5) + \psset{fillstyle=solid} + \psframe[fillcolor=red](0,1)(3,4) + \psframe[fillcolor=blue,opacity=0.3](2,2)(5,5) + \psframe[fillcolor=green,opacity=0.3](1,0)(4,3) + \pscircle[fillcolor=cyan, + opacity=0.5](1.5,3.5){1.25} +\end{pspicture} +\end{LTXexample} + + +\clearpage +\subsubsection{Fill style \texttt{shape}} +There is now one more \Index{fill style} for \Index{transparent colors}: \Lkeyword{shape} +with using the \Lkeyword{shapealpha} value and one of the possible blendmodes: +\begin{verbatim} + /Normal ->0 + /Compatible ->1 + /Screen ->2 + /Multiply ->3 +\end{verbatim} + + +The fill style \Lkeyval{solid} uses +\Index{Ghostscript}'s \LPS{.setopacityalpha} function +and the new style \Lkeyval{shape} and the \Lkeyword{blendmode} together with \LPS{.setshapealpha}. +\Lkeyword{shapealpha} is predefined +with 0.6 and both alpha values can be chosen from the range $0\le\alpha\le1$. + +\begin{pspicture}(5,5)% default blendmode + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{0}} +\end{pspicture} +\hfill +\begin{pspicture}(5,5) + \psset{blendmode=1}% type /Compatible + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{1}} +\end{pspicture} + +\begin{pspicture}(5,5) + \psset{blendmode=2}% type /Screen + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{2}} +\end{pspicture} +\hfill +\begin{pspicture}(5,5) + \psset{blendmode=3}% type /Multiply + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{3}} +\end{pspicture} + +\begin{lstlisting} +\begin{pspicture}(5,5)% default blendmode + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{0}} +\end{pspicture} +\hfill +\begin{pspicture}(5,5) + \psset{blendmode=1}% type /Compatible + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{1}} +\end{pspicture} + +\begin{pspicture}(5,5) + \psset{blendmode=2}% type /Screen + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{2}} +\end{pspicture} +\hfill +\begin{pspicture}(5,5) + \psset{blendmode=3}% type /Multiply + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} + \rput(1.5,3.5){\huge\textbf{3}} +\end{pspicture} +\end{lstlisting} + + +\iffalse +\begin{LTXexample}[width=5cm,wide] +\begin{pspicture}(5,5) + \psset{blendmode=4}% type /Hardlight + \psframe*[linecolor=red](0,1)(3,4) + \psframe[fillcolor=blue,fillstyle=shape](2,2)(5,5) + \psframe[fillcolor=green,fillstyle=shape](1,0)(4,3) + \pscircle[fillcolor=cyan,fillstyle=shape, + shapealpha=0.3](1.5,3.5){1.25} +\end{pspicture} +\end{LTXexample} + +\fi + +\clearpage + +\subsection{\nxLcs{addtopsstyle}} +\begin{verbatim} +\addtopsstyle{style-name}{settings} +\end{verbatim} + +This macro allows to add some more settings to an existing \Index{style}. +If the style is not defined, then \Lcs{addtopsstyle} behaves like the +already defined \Lcs{newpsstyle} macro. + +\begin{LTXexample}[width=5cm,wide] +\newpsstyle{Fiber}{linewidth=2pt} +\begin{pspicture}(5,5) + \psline[style=Fiber](0,0)(5,1) + \addtopsstyle{Fiber}{linecolor=green} + \psline[style=Fiber](0,1)(5,2) + \addtopsstyle{Fiber}{linestyle=dotted} + \psline[style=Fiber](0,2)(5,3) + \addtopsstyle{Fiber}{} + \psline[style=Fiber](0,3)(5,4) + \addtopsstyle{Fibber}{linecolor=red} + \psline[style=Fibber](0,4)(5,5) +\end{pspicture} +\end{LTXexample} + + +\clearpage + +\subsection{\nxLcs{pscircleOA}} +\begin{verbatim} +\pscircleOA[settings](xO,yO)(xA,yA) +\end{verbatim} + +$(x_0, y_0)$ is the center and $(x_A, y_A)$ a given point of the +circle. The radius is calculated by \TeX. + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid=true](-2,0)(8,8) +\pscircleOA(6,4)(4,4) +\pscircleOA[linecolor=blue](4,6)(4,4) +\pscircleOA[linewidth=2pt,linecolor=yellow](3,5)(4,4) +\pscircleOA*[opacity=0.3,linecolor=red](2,2)(4,4) +\end{pspicture} +\end{LTXexample} + + +\subsection{\nxLcs{psTextFrame}} +\begin{verbatim} +\psTextFrame[settings](x1,y1)(x2,y2){Text} +\end{verbatim} + +The \emph{Text} cannot have a linebreak. In case it is needed, put the \emph{Text} +into a \Lenv{minipage} or \Lcs{parbox}, as seen in the following example. The +\Lkeyword{ref}-option allows different placing and the \Lkeyword{rot}-option allows +the \Index{rotating} of the \emph{Text}. The macro itself first uses the +\Lcs{psframe} and the \Lcs{rput} macro with \Index{calculated coordinates}. + + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid=true](0,-0.5)(10,10) + \psTextFrame[linecolor=lightgray,ref=l](0,0.5)(4,1.5){Hallo} + \psTextFrame[linecolor=blue](2,4)(4,7){\color{blue}Hallo} + \psTextFrame[linestyle=dashed](9,9)(10,10){\huge H} + \psTextFrame*[linecolor=red,linestyle=dashed](7,7)(9,9){\Huge H} + \psTextFrame*[linecolor=red!40,ref=lB](7,4)(9,6){\Huge H} + \psTextFrame*[linecolor=blue!40,ref=rt](7,1)(9,3){\Huge H} + \psTextFrame[linestyle=dashed](4.5,0)(6.5,10){% + \parbox{2cm}{\centering Here comes some more text over several + lines, which is also horizontally and vertically centered and + written in a parbox.}} + \psTextFrame*[linecolor=cyan!20,rot=90](.5,2)(1.5,10){% + \parbox{8cm}{\centering Here comes some more text over several + lines and rotated by 90 degrees.}} +\end{pspicture} +\end{LTXexample} + +\subsection{Special coordinates} + +Additionally to the existing \Index{!-operator} for \Index{PostScript} coordinates, +there is new a \Index{*-operator}, which invokes the \Index{algebraic parser} before +the coordinates are passed to the default !-operator. The syntax +is pretty easy: \verb=(<value> {f(x)})=. In the following example the +predefined value of Pi\index{$\pi$} from \LFile{pstricks.pro} is used. The x value +and the function must be enclosed +in braces when they contain spaces, round braces or sybolic names, like \verb+Pi+ for the +x value. + +\begin{LTXexample}[width=5cm,wide] +\SpecialCoor +\begin{pspicture}(0,-1)(5,1) + \psaxes{->}(0,0)(0,-1)(5,1) + \psline(0,0)(*{Pi} {sqrt(abs(cos(x)))}) + \psline{<->}(*{Pi} {cos(x)})(*5 {sin(x)*cos(x)}) +\end{pspicture} +\end{LTXexample} + +For a macro definition of the algebraic function the \verb+\string+ command +has to be used, otherwise \TeX{} expects the math mode in the following +example. + +\begin{LTXexample}[width=4cm,wide] +\def\F{\string x^2 } +\begin{pspicture}[showgrid=true](2,4) + \psline[linecolor=red](*1 {\F} )(*2 {\F} ) +\end{pspicture} +\end{LTXexample} + + + + +\subsection{Octogon-Symbol} + +An octogon symbol was added. +\begin{verbatim} +\newpsfontdotH{Octogon}[1 0 0 1 0 0]{PSTricksDotFont}{(f)}{(g)} +\newpsfontdotH{BoldOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(F)}{(g)} +\newpsfontdot{SolidOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(g)} +\end{verbatim} + +\begin{LTXexample}[width=4cm,wide] +\psset{dotscale=4} +\begin{pspicture}[showgrid=true](4,4) +\psdot[dotstyle=Octogon](1,1) +\psdot[dotstyle=BoldOctogon](2,2) +\psdot[dotstyle=SolidOctogon](3,3) +\end{pspicture} +\end{LTXexample} + + +\subsection{Code changes} + +\begin{verbatim} +% hv 2007-10-16 to fix the bug in pst-node with \\[name=...] +\def\ps@ifnextchar#1#2#3{% + \let\reserved@d= #1% + \def\reserved@a{#2}\def\reserved@b{#3}% + \futurelet\@let@token\ps@ifnch} +\def\ps@ifnch{% + \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi + \reserved@b +} +\end{verbatim} + + + + +%-------------------------------------------------------------------------------------- +\section{The PostScript header files} +\subsection{\texttt{pstricks.pro}} +%-------------------------------------------------------------------------------------- + +\begin{verbatim} +/Pyth2 { % Pythagoras, xA yA xB yB + 3 -1 roll % xA xB yB yA + sub % xA xB yB-yA + 3 1 roll % yB-yA xA xB + sub % yB-yA xA-xB + Pyth } def +\end{verbatim} + +This new PostScript function allows to calculate the distance +between two points, given by their coordinates whereas the +existing \LPS{/Pyth} does this for two values. + +\subsection{\texttt{pst-dots.pro}} +\verb+pst-dots.pro+ ist the file which defines the so called softfont PSTRocksFontDot, which +collects all PSTricks symbols, which are not part of one of the standard PostScript fonts. +The octogon symbol is defined as: +\begin{verbatim} + /OctogonPath { + 228 550 moveto 7 { -456 0 rlineto 45 rotate } repeat closepath + } def + /SolidOctogon { OctogonPath fill } def + /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def + /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def +% +\end{verbatim} + + +\part{\texttt{pst-node} -- package} + +\section{\texttt{pst-node.tex} (\NODEfileversion -- \NODEfiledate)} + +\subsection{Bugfix for \texttt{psmatrix}} +A long standing bug with \Lenv{psmatrix} and using the \Lkeyword{name} option is now fixed. +The following works as expected: + +\begin{LTXexample}[width=2cm] +\begin{psmatrix}[rowsep=5mm] +[name=a]a\\ +[name=b]b\\[1cm] +[name=c]c\\ +\end{psmatrix} +\ncline{a}{b} +\ncarc{a}{c} +\end{LTXexample} + +An optional argument after \Lcs{\textbackslash} is now scanned in the correct way. + + +\subsection{New option \texttt{pcRef}} +There is a new option \Lkeyword{pcRef} for the \Lcs{ncangles} connection\index{node connection}. By default, +the reference point for the \Lkeyword{armA} option is the border of the node. This makes +it difficult to get horizontically aligned lines for different node images. +With \texttt{pcRef=true} the node center is the reference point and the connection is +still drawn from the border of the node. + +The first three images show the default behaviour: + +\makebox[\linewidth]{% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.2}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=0.5cm} + \ncangles{A}{B1} + \ncangles{A}{B2} + \ncangles{A}{B3} + \ncangles{A}{B4} +\end{pspicture} +% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.4}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=0.5cm} + \ncangles{A}{B1} + \ncangles{A}{B2} + \ncangles{A}{B3} + \ncangles{A}{B4} +\end{pspicture} +% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.8}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=0.5cm} + \ncangles{A}{B1} + \ncangles{A}{B2} + \ncangles{A}{B3} + \ncangles{A}{B4} +\end{pspicture} +} + +The next three images display the influence of \texttt{pcRef=true}; the horizontal line +for the three examples is on the same height: + +\makebox[\linewidth]{% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.2}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=1cm} + \ncangles[pcRef=true]{A}{B1} + \ncangles[pcRef=true]{A}{B2} + \ncangles[pcRef=true]{A}{B3} + \ncangles[pcRef=true]{A}{B4} +\end{pspicture} +% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.4}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=1cm} + \ncangles[pcRef=true]{A}{B1} + \ncangles[pcRef=true]{A}{B2} + \ncangles[pcRef=true]{A}{B3} + \ncangles[pcRef=true]{A}{B4} +\end{pspicture} +% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.8}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=1cm} + \ncangles[pcRef=true]{A}{B1} + \ncangles[pcRef=true]{A}{B2} + \ncangles[pcRef=true]{A}{B3} + \ncangles[pcRef=true]{A}{B4} +\end{pspicture} +} + +\begin{lstlisting} +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.2}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=1cm} + \ncangles[pcRef=true]{A}{B1} + \ncangles[pcRef=true]{A}{B2} + \ncangles[pcRef=true]{A}{B3} + \ncangles[pcRef=true]{A}{B4} +\end{pspicture} +% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.4}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=1cm} + \ncangles[pcRef=true]{A}{B1} + \ncangles[pcRef=true]{A}{B2} + \ncangles[pcRef=true]{A}{B3} + \ncangles[pcRef=true]{A}{B4} +\end{pspicture} +% +\begin{pspicture}(5,4) + \cnode(2.5,3.5){0.8}{A} + \cnode(0.5,1){0.2}{B1} + \cnode(1.5,1){0.4}{B2} + \cnode(2.6,1){0.6}{B3} + \cnode(4,1){0.8}{B4} + \psset{angleB=90,angleA=-90,armA=1cm} + \ncangles[pcRef=true]{A}{B1} + \ncangles[pcRef=true]{A}{B2} + \ncangles[pcRef=true]{A}{B3} + \ncangles[pcRef=true]{A}{B4} +\end{pspicture} +\end{lstlisting} + +\part{\texttt{pst-plot} -- package} + +\section{\texttt{pst-plot.tex} (\PLOTfileversion -- \PLOTfiledate)} + +\iffalse + +\subsection{Axes} +The behaviour of the optional argument \Lkeyword{Dx} changed. Using +negative values will now decrease the labels with the correct +value of \Lkeyword{Dx}: + +\psset{xunit=1cm} +\begin{LTXexample}[wide,width=6cm] +\begin{pspicture}(-0.5,-1)(6,4) + \psaxes[Dy=-2, dy=1, + Ox=4000, Dx=-1000, dx=1.5]{->}(10,4) +\end{pspicture} +\end{LTXexample} + +\vspace{1cm} +\begin{pspicture}(-0.5,-1)(10,3) + \psaxes[Dy=2, dy=1, Ox=4000, Dx=1000, dx=1.5]{->}(10,3)(0,0) + \rput(5,2){Positive values for Dx und Dy} +\end{pspicture} + +\begin{pspicture}(-0.5,-1)(10,3) + \psaxes[Dy=-2, dy=1, Ox=4000, Dx=-1000, dx=1.5]{->}(10,3)(0,0) + \rput(5,2){Negative values for Dx und Dy} +\end{pspicture} + +\begin{lstlisting} +\begin{pspicture}(-0.5,-1)(10,3) + \psaxes[Dy=2, dy=1, Ox=4000, Dx=1000, dx=1.5]{->}(10,3)(0,0) + \rput(5,2){Positive values for Dx und Dy} +\end{pspicture} + +\begin{pspicture}(-0.5,-1)(10,3) + \psaxes[Dy=-2, dy=1, Ox=4000, Dx=-1000, dx=1.5]{->}(10,3)(0,0) + \rput(5,2){Negative values for Dx und Dy} +\end{pspicture} +\end{lstlisting} +%\clearpage + +\fi +\subsection{New options \texttt{LineToXAxis} and \texttt{LineToYAxis}} + + +\psset{xunit=0.0333cm,yunit=2.5cm} +\begin{pspicture}(0,-1)(400,1) + \psline{->}(0,0)(400,0) + \psline{->}(0,-1)(0,1) + \psplot[plotstyle=LineToXAxis,linestyle=dashed,plotpoints=50, + linecolor=red!40, + showpoints=true,dotstyle=o,dotsize=0.2]{0}{360}{x sin} +\end{pspicture} + +\begin{lstlisting} +\psset{xunit=0.0333cm,yunit=2.5cm} +\begin{pspicture}(0,-1)(400,1) + \psline{->}(0,0)(400,0) + \psline{->}(0,-1)(0,1) + \psplot[plotstyle=LineToXAxis,linestyle=dashed,plotpoints=50, + linecolor=red!40, + showpoints=true,dotstyle=o,dotsize=0.2]{0}{360}{x sin} +\end{pspicture} +\end{lstlisting} + + + +\psset{xunit=0.0333cm,yunit=2.5cm} +\begin{pspicture}(0,-1.2)(400,1.4) + \psline{->}(0,0)(390,0) + \psline{->}(0,-1.1)(0,1.2) + \psplot[plotstyle=LineToYAxis,linestyle=dashed,plotpoints=50, + linecolor=blue!40, + showpoints=true]{0}{360}{x cos} +\end{pspicture} + +\begin{lstlisting} +\psset{xunit=0.0333cm,yunit=2.5cm} +\begin{pspicture}(0,-1.2)(400,1.4) + \psline{->}(0,0)(390,0) + \psline{->}(0,-1.1)(0,1.2) + \psplot[plotstyle=LineToYAxis,linestyle=dashed,plotpoints=50, + linecolor=blue!40, + showpoints=true]{0}{360}{x cos} +\end{pspicture} +\end{lstlisting} + + +\part{\texttt{pst-tree} -- package} +\section{\texttt{pst-tree.tex} (\TREEfileversion -- \TREEfiledate)} +There was a bug with \texttt{style=...} due to a missing \Lcs{use\textat par} in +\Lcs{pstree\textat ii}. + + +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news09.pdf b/graphics/pstricks/base/doc/pst-news09.pdf Binary files differnew file mode 100644 index 0000000000..08453d9927 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news09.pdf diff --git a/graphics/pstricks/base/doc/pst-news09.tex b/graphics/pstricks/base/doc/pst-news09.tex new file mode 100644 index 0000000000..4a656a8566 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news09.tex @@ -0,0 +1,298 @@ +%% $Id: pst-news09.tex 165 2015-07-26 07:27:55Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\usepackage[utf8]{inputenc} +\usepackage{pst-plot} +\let\pstplotFV\fileversion +\let\pstplotFD\filedate +\usepackage{pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-tree} +\let\psttreeFV\fileversion +\let\psttreeFD\filedate +\usepackage{pst-eucl} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2009}} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2009}\\ \Large new macros and bugfixes for the +basic packages \nxLFile{pstricks}, \nxLFile{pst-plot}, and \nxLFile{pst-node}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +\section{General} +There exists a new document class \LClass{pst-doc} for writing PSTricks documentations, +like this news document. It depends on the KOMA-Script document class \LClass{scrartcl}. +\LClass{pst-doc} defines a lot of special macros to create a good index. Take one of +the already existing package documentation and look into the source file. Then it will be +easy to understand, how all these macros have to be used. + + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- + +\subsection{New optional argument} +With the new optional argument \Lkeyval{97} \LPack{pstricks} has the old behaviour of the +version of 1997. The \Lenv{pspicture} environment then has only a value as +optional argument, which shifts the box in vertical direction. The new options +\Lkeyword{shift} and \Lkeyword{showgrid} do not work in this case. +The support of transparency colors is also disabled. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- +\subsection{Makro \nxLcs{next}} +To prevent problems with other packages which also define a \Lcs{next} +macro, it is now renamed to \Lcs{ps@next}. This should be not important +for the user, because it is used only by the base system itself. + +\subsection{Makro \nxLcs{psDEBUG}} +\LPack{pstricks} defines the option \texttt{PstDebug=0|1}, which can be used for +debugging. The new macro \Lcs{psDEBUG} makes it easier to write some \Index{debugging} +information into the package files. The macro is only valid, if \Lkeyword{PstDebug}=1 +is set, otherwise the macro does nothing. + +\begin{BDef} +\Lcs{psDEBUG}\OptArgs\Largb{text} +\end{BDef} + +\Lcs{psDEBUG} writes the argument \Larg{text} into the log file. +Without an optional argument the word \Larg{pstricks} is used. The following output +of the log file + +\begin{lstlisting} +... +<key:xticksize>: setting ticksize to max +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 26. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 26. +<pst@@hlabels>: xticksizeC=0.0pt +... +\end{lstlisting} + +was possible with \Lcs{psset}\Largb{\Lkeyword{PstDebug}}=1\footnote{Can also be used locally for a +macro when used as optional argument +in the usual way.} +and inside of \LPack{pstricks-add} with +(only the first for example): +\begin{lstlisting} +... + \psDEBUG[key:ticksize]{setting ticksize} +... +\end{lstlisting} + +\subsection{Special Coordinates} +The macros \Lcs{SpecialCoor} and the corresponding \Lcs{NormalCoor} can now be used for +the \Index{radius} of \Index{arc}s and \Index{circle}s. With a preceeding \Lnotation{!} character the length can +be of any PostScript expression and will be taken with the unit pt in user coordinates: + +\begin{LTXexample}[width=6cm] +\begin{pspicture}[showgrid=true](-3,-3)(3,3) +\pscircle[linecolor=red](0,0){1cm} +\SpecialCoor +\pscircle[linecolor=blue](0,0){!3 sqrt} +\NormalCoor +\psarc[linewidth=2pt](0,0){2cm}{90}{270} +\SpecialCoor +\psarc[linecolor=green](0,0){! 60 sin dup add }{90}{270} +\end{pspicture} +\end{LTXexample} + +\SpecialCoor + +\subsection{\nxLcs{psarcAB} and \nxLcs{psarcnAB}} + +\begin{BDef} +\Lcs{psarcAB}\OptArgs\OptArg*{\Largb{arrows}}\coord{C}\coord{A}\coord{B}\\ +\Lcs{psarcnAB}\OptArgs\OptArg*{\Largb{arrows}}\coord{C}\coord{A}\coord{B} +\end{BDef} + +$(x_C, y_C)$ is the center and $(x_A, y_A)$ $(x_B, y_B)$ are two given points of the +\Index{circle}. The angles for the \Index{arc} are calculated by \TeX. The arc is drawn from the first +to the second point. The radius is the distance from the center to the second point. +The first point can have another distance, it is only used for calculating the angle. +The following examples need the package \LPack{pst-eucl}. + +\begin{LTXexample}[width=6cm] +\begin{pspicture}(-3,-3)(3,3) +\pstTriangle[PosAngle={180,0,90}](-3,0){A}(3,0){B}(0,3){C} +\pstCircleOA{I}{A} +\pstMiddleAB{A}{B}{Iab} +\pscustom[linestyle=none,fillstyle=solid,fillcolor=blue!50]{% + \psarcAB(C)(A)(B) + \psarcnAB(Iab)(B)(A)} +\pstMiddleAB{A}{C}{Iac} +\pscustom[linestyle=none,fillstyle=solid,fillcolor=red!50]{% + \psarcnAB(I)(A)(C) + \psarcAB(Iac)(C)(A)} +\pstMiddleAB{B}{C}{Ibc} +\pscustom[linestyle=none,fillstyle=solid,fillcolor=green!50]{% + \psarcAB(I)(B)(C) + \psarcnAB(Ibc)(C)(B)} +\end{pspicture} +\end{LTXexample} + + +\subsection{Makro \nxLcs{psPline}} +\begin{BDef} +\Lcs{psPline}\OptArgs\coord1\coord2\coord3 +\end{BDef} + +The first point P1 is a projection onto the line of $\overline{P_2P_3}$ +and connected with drawing a line similiar to \Lcs{psline}. This macro +has three mandatory arguments for the three points. + +\begin{LTXexample}[pos=t] +\psset{unit=3} +\begin{pspicture}[showgrid=true](3,2) +\pspolygon(0,1)(3,2)(2.5,0) +\psPline[linestyle=dashed,arrowscale=2]{->}(0,1)(3,2)(2.5,0) +\psPline[linestyle=dashed,arrowscale=2]{->}(3,2)(2.5,0)(0,1) +\psPline[linestyle=dashed,arrowscale=2]{->}(2.5,0)(0,1)(3,2) +\end{pspicture} +\end{LTXexample} + + + +%-------------------------------------------------------------------------------------- +\section{The PostScript header files} +\subsection{\nxLFile{pstricks.pro}} +Only cosemetic changes to the code to make it more readable. +%-------------------------------------------------------------------------------------- +\subsection{\nxLFile{pst-node.pro}} +Only cosemetic changes to the code to make it more readable. + +\part{\nxLPack{pst-node} -- package} + +\section{\nxLFile{pst-node.tex} (\pstnodeFV -- \pstnodeFD)} + +There was a bug in \Lcs{fnode}. It is now fixed. + +foo + + z \quad + \pnode{testL1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqL} + \pnode(0,2ex){testL2} + \quad + = + \quad% + \pnode{testR1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqR} + \pnode(0,2ex){testR2} + \quad + z + \ncline[linecolor=red]{testL1}{testR1} + \ncline[linecolor=blue]{testL2}{testR2} + +bar + +\bigskip now with an aligned node +\psset{nodealign=true} + +foo + + z \quad + \pnode{testL1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqL} + \pnode(0,2ex){testL2} + \quad + = + \quad% + \pnode{testR1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqR} + \pnode(0,2ex){testR2} + \quad + z + \ncline[linecolor=red]{testL1}{testR1} + \ncline[linecolor=blue]{testL2}{testR2} + +bar + + +\begin{lstlisting} +foo + + z \quad + \pnode{testL1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqL} + \pnode(0,2ex){testL2} + \quad + = + \quad% + \pnode{testR1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqR} + \pnode(0,2ex){testR2} + \quad + z + \ncline[linecolor=red]{testL1}{testR1} + \ncline[linecolor=blue]{testL2}{testR2} + +bar + +\bigskip now with an aligned node +\psset{nodealign=true} + +foo + + z \quad + \pnode{testL1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqL} + \pnode(0,2ex){testL2} + \quad + = + \quad% + \pnode{testR1} + \fnode[linecolor=lightgray,framesize=6pt 50pt](0,.5ex){eqR} + \pnode(0,2ex){testR2} + \quad + z + \ncline[linecolor=red]{testL1}{testR1} + \ncline[linecolor=blue]{testL2}{testR2} + +bar +\end{lstlisting} + + +\part{\nxLPack{pst-plot} -- package} + +\section{\nxLFile{pst-plot.tex} (\pstplotFV -- \pstplotFD)} + +To be more consistent to other macro names there are now the names +\Lcs{psparametricplot}, \Lcs{psfileplot}, \Lcs{pslistplot}, and +\Lcs{psdataplot}. The old macros without the preceeding \verb+ps+ +still work! + +There is now a new \PS boolean variable which can control loops. +With setting \texttt{/\Lps{ps@Exit} true def} you can leave a loop +for plotting a function with \Lcs{psplot} and \Lcs{psparametricplot}. + + +\part{\nxLPack{pst-tree} -- package} +\section{\nxLFile{pst-tree.tex} (\psttreeFV -- \psttreeFD)} + +The package \LPack{pst-tree} now uses the advanced key handling from \LPack{xkeyval}. The reason +why it moved from the base into the contrib sections, where all packages uses \LPack{xkeyval}. + +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news10.pdf b/graphics/pstricks/base/doc/pst-news10.pdf Binary files differnew file mode 100644 index 0000000000..98de904ecd --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news10.pdf diff --git a/graphics/pstricks/base/doc/pst-news10.tex b/graphics/pstricks/base/doc/pst-news10.tex new file mode 100644 index 0000000000..d4c018d92e --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news10.tex @@ -0,0 +1,926 @@ +%% $Id: pst-news10.tex 697 2017-12-30 19:04:03Z herbert $ +\documentclass[11pt,english,BCOR=10mm,DIV12,bibliography=totoc,parskip=false,headings=small,, + headinclude=false,footinclude=false,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pstricks} +\let\pstricksFV\fileversion +\let\pstricksFD\filedate +\usepackage{pst-plot} +\let\pstplotFV\fileversion +\let\pstplotFD\filedate +%\usepackage{xkvview} +\usepackage{pst-eucl,pst-func} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2010}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} + +\addbibresource{PSTricks.bib} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2010}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +\section{General} +There exists a new document class \LClass{pst-doc} for writing PSTricks documentations, +like this news document. It depends on the KOMA-Script document class \LClass{scrartcl}. +\LClass{pst-doc} defines a lot of special macros to create a good index. Take one of +the already existing package documentation and look into the source file. Then it will be +easy to understand, how all these macros have to be used. + +When running \Lprog{pdflatex} the title page is created with boxes and inserted +with the macro \Lcs{AddToShipoutPicture} from the package \LPack{eso-pic}. It +inserts the background title page image \Lfile{pst-doc-pdf} to use directly +\Lprog{pdflatex}. +When running \Lprog{latex} the title page + is created with \PST\ macros.This allows to use the Perl script \Lprog{pst2pdf} or +the package \LPack{pst-pdf} or \LPack{auto-pst-pdf} or any other program/package which +supports \PS\ code in the document. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- +\subsection{New optional argument} + +With the setting of the optional argument \Loption{pdf} the package \LPack{auto-pst-pdf} will be loaded +by PSTricks. This requires that you run \Lprog{pdflatex} as + +\begin{BDef} +\Lprog{pdflatex} \texttt{-{}-}\Loption{shell-escape} \texttt{<file>} & \% \TeX\,Live users\\ +\Lprog{pdflatex} \texttt{-{}-}\Loption{enable-write18} \texttt{<file>} & \% MiK\TeX\ users +\end{BDef} + +The package exports the \Lenv{pspicture} environments into single images which are collected in +a created file \texttt{<file>-pics.pdf} and inserted automatically in the last \Lprog{pdflatex} +run. + + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- + +\subsection{Coordinates} +With the setting \Lcs{SpecialCoor} the package allows different kinds of coordinates. +The macro \Lcs{uput} can now be used in a different way. +The default behaviour for nodes with a relative point puts its argument \emph{without} rotation +on the line $\overline{AB}$. When using the prefix > before the node or the $x$-value for +cartesian coordinates, the behaviour is different. Now the angle between the line $\overline{OB}$ +and the horizontal line +is taken into account and the placement of the argument of \Lcs{uput} is different to +the default behaviour. + +\begin{LTXexample}[width=7cm] +\begin{pspicture}[showgrid](-0.25,-0.25)(6,5) +\pnodes(0,3){A}(3,1){B} +\psline[showpoints](A)(B) +\uput[-90](A){A}\uput[-90](B){B} +\psline[linestyle=dashed](A)(3,4) +\psline[linestyle=dashed](A)(3,5) +\psline[linestyle=dashed](A)(3,3) +\psline[linestyle=dashed](6,2) +\psline[linestyle=dashed](B)(6,1) +\psarc{->}(0,3){2.5}{0}{(3,1)} +\psarc{->}(3,1){2.5}{0}{(3,1)} +\uput*{1cm}[(B)](A){foo} \uput*{1cm}[(B)](>A){bar} +\end{pspicture} +\end{LTXexample} + + +\subsection{New optional arguments} +The new arguments are only valid for the macros \Lcs{psellipse}, \Lcs{pscircle}, \Lcs{psarc}. +\Lcs{psellipticarc}, \Lcs{pscurve}, \Lcs{psplot}, and \Lcs{psparametricplot}. + +\medskip +\begin{tabular}{@{} l >{\em}l l l @{}}\toprule +\emph{name} & type & \emph{default} & \emph{description}\\\midrule +\Lkeyword{dashcolor} & color & \nxLcs{relax} & for colored dashed lines \\ +\Lkeyword{startLW} & length & \Lcs{pslinewidth} & starting linewidth \\ +\Lkeyword{endLW} & length & \Lcs{pslinewidth} & ending linewidth \\ +\Lkeyword{startWL} & integer& 380 & starting wave length\\ +\Lkeyword{endWL} & integer& 780 & ending wave length \\ +\Lkeyword{variableLW} & boolean & \false & use variable linewidth\\ +\Lkeyword{variableColor} & boolean & \false & use variable color\\\bottomrule +\end{tabular} + +\bigskip +\begingroup +\psset{linewidth=2mm,linestyle=dashed} +\begin{pspicture}(4,-4) +\psline[linecolor=blue,dashcolor=red,linearc=0.5](0,0)(4,0)(4,-4) +\psline[linecolor=blue,dashcolor=cyan,linearc=0.5](0,0)(0,-4)(4,-4) +\end{pspicture}\quad +\begin{pspicture}(4,4) +\psframe[linecolor=blue,dashcolor=green,framearc=0.5](0,0)(4,4) +\end{pspicture} +\quad \psset{linecap=2,dash=5mm 5mm } +\begin{pspicture}(4,-4) +\psline[linecolor=black,dashcolor=black!40,linecap=0](0,0)(4,-4) +\psline[linecolor=blue,dashcolor=red,linearc=0.5](0,0)(4,0)(4,-4) +\psline[linecolor=blue,dashcolor=cyan,linearc=0.5](0,0)(0,-4)(4,-4) +\end{pspicture} +\endgroup + +\begin{lstlisting} +\psset{linewidth=2mm,linestyle=dashed} +\begin{pspicture}(4,-4) +\psline[linecolor=blue,dashcolor=red,linearc=0.5](0,0)(4,0)(4,-4) +\psline[linecolor=blue,dashcolor=cyan,linearc=0.5](0,0)(0,-4)(4,-4) +\end{pspicture}\quad +\begin{pspicture}(4,4) +\psframe[linecolor=blue,dashcolor=green,framearc=0.5](0,0)(4,4) +\end{pspicture} +\quad \psset{linecap=2,dash=5mm 5mm } +\begin{pspicture}(4,-4) +\psline[linecolor=black,dashcolor=black!40,linecap=0](0,0)(4,-4) +\psline[linecolor=blue,dashcolor=red,linearc=0.5](0,0)(4,0)(4,-4) +\psline[linecolor=blue,dashcolor=cyan,linearc=0.5](0,0)(0,-4)(4,-4) +\end{pspicture} +\end{lstlisting} + + +\begin{LTXexample}[width=7cm,wide=true] +\psset{endLW=15pt} +\begin{pspicture}(-3.5,-2.5)(3.5,2.5) +\psellipse[linejoin=2,variableLW,startLW=1pt, + linecolor=green!40](0,0)(3,1) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[width=7cm,wide=true] +\psset{endLW=15pt} +\begin{pspicture}(-2.5,-2.5)(2.5,2.5) +\pscircle[variableLW,startLW=1pt, + linecolor=blue!40]{2} +\end{pspicture} +\end{LTXexample} + +% +\begin{LTXexample}[width=7cm,wide=true] +\psset{endLW=15pt} +\begin{pspicture}(-2.5,-2.5)(2.5,2.5) +\psarc[variableLW,startLW=1pt, + linecolor=red!40](0,0){2}{10}{300} +\end{pspicture} +\end{LTXexample} + +% +\begin{LTXexample}[width=7cm,wide=true] +\psset{endLW=15pt} +\begin{pspicture}(-3.5,-2.5)(3.5,2.5) +\psellipticarc[variableLW,startLW=1pt, + linecolor=black!40](0,0)(3,1){90}{30} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=7cm,wide=true] +\begin{pspicture}(-2.5,-2.5)(2.5,2.5) +\pscurve[variableLW,startLW=1pt,endLW=20pt, + variableColor](-1,0.5)(-2,1)(2,2)(-1,-2)(2,-2) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=7cm,wide=true] +\begin{pspicture}(-2.5,-2.5)(2.5,2.5) +\pscurve[variableLW,startLW=1pt,endLW=20pt]% + (-1,0.5)(-2,1)(2,2)(-1,-2)(2,-2) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(-5,-3)(5,3) +\psplot[variableLW,startLW=1pt,endLW=20pt, + linecolor=magenta!60,variableColor, + algebraic,plotpoints=3000,startWL=500, + endWL=700]{-5}{5}{2*sin(2*x)+cos(x)} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\psset{endLW=24pt} +\begin{pspicture}(-5,-5)(5,5) +\psparametricplot[variableLW,startLW=1pt, + endLW=60pt,linecolor=red,variableColor, + algebraic,plotpoints=3000,plotstyle=curve, + opacity=0.4,strokeopacity=0.4, + endWL=600]{-5}{5}{t*sin(t) | t*cos(t)} +\end{pspicture} +\end{LTXexample} + + +\clearpage + + +\subsection{Macro \nxLcs{psellipse}} + +To rotate an ellipse the already existing keyword \Lkeyword{rot} can be +used. This is easier than using the \Lcs{rput} command and its optional +argument for rotating. +\xLkeyword{rot}\xLkeyword{vlines}\xLkeyword{linecolor} +\begin{LTXexample}[width=6cm,wide=true] +\psset{unit=0.25} +\begin{pspicture}(-1,5)(20,18) +\psclip{\psellipse[linecolor=red, + rot=-12.606](5.821,10.04)(6.633,5.103)} + \psellipse[linecolor=blue,fillstyle=vlines, + rot=39.29](13.141,11.721)(6.8,5.4) +\endpsclip +\psellipse[linecolor=blue,rot=39.29](13.1,11.7)(6.8,5.4) +\end{pspicture} + +\begin{pspicture}(-1,5)(20,18) +\psellipse[linecolor=blue,rot=-39.29, + fillstyle=vlines](13.1,11.7)(6.8,5.4) +\psclip{\psellipse[linecolor=red,rot=12.6, + fillstyle=vlines](5.8,10)(6.6,5.1)} + \psellipse*[linecolor=white,rot=-39.29](13.1,11.7)(6.8,5.4) +\endpsclip +\psellipse[linecolor=blue,rot=-39.29](13.1,11.7)(6.8,5.4) +\psellipse[linecolor=red,rot=12.6](5.8,10)(6.6,5.1) +\end{pspicture} +\end{LTXexample} + +\subsection{Macro \nxLcs{psellipticarc}}\xLcs{psellipticarc} +In a circle the angle is proportional to the bow: $b=r\alpha$. In an +elliptic arc this is no more the case, which is the reason why angles are +internally corrected by PSTricks, to get the same arc lengthts for +different radii: + +\xLcs{psellipticarc} +\begin{LTXexample}[width=6cm] +\psset{unit=0.5cm} +\begin{pspicture}(-5.5,-5.5)(5.5,5.5)% +\psset{linewidth=0.4pt,linejoin=1} +\psline(5,0)(0,0)(5,-5) +\psellipticarc(0,0)(3,3){0}{315} +\end{pspicture}% +\end{LTXexample} + +\begin{LTXexample}[width=6cm] +\psset{unit=0.5cm} +\begin{pspicture}(-5.5,-5.5)(5.5,5.5)% +\psset{linewidth=0.4pt,linejoin=1} +\psline(5,0)(0,0)(5,-5) +\psellipticarc(0,0)(1,3){0}{315}% +\psset{linecolor=red} +\psellipticarc(0,0)(3,1){22}{222}% +\psline(3;22)\psline(3;222) +\end{pspicture}% +\end{LTXexample} + +\begin{LTXexample}[width=6cm] +\psset{unit=0.5cm} +\begin{pspicture}(-5.5,-5.5)(5.5,5.5)% +\psset{linewidth=0.4pt,linejoin=1} +\psline(5,0)(0,0)(5,-5) +\psellipticarc*(0,0)(1,3){0}{315}% +\psset{linecolor=red} +\psellipticarc*(0,0)(3,1){22}{222}% +\psline(3;22)\psline(3;222) +\end{pspicture}% +\end{LTXexample} + +\psset{unit=1cm} + + +If you do not want the angle correction, then use the keyword setting \Lkeyword{correctAngle}=\false: + +\begin{LTXexample}[width=6cm] +\psset{unit=0.5cm} +\begin{pspicture}(-5.5,-5.5)(5.5,5.5)% +\psset{linewidth=0.4pt,linejoin=1, + correctAngle=false} +\psline(5,0)(0,0)(5,-5) +\psellipticarc(0,0)(1,3){0}{315}% +\psset{linecolor=red} +\psellipticarc(0,0)(3,1){22}{222}% +\psline(3;22)\psline(3;222) +\end{pspicture}% +\end{LTXexample} + +\begin{LTXexample}[width=6cm] +\psset{unit=0.5cm} +\begin{pspicture}(-5.5,-5.5)(5.5,5.5)% +\psset{linewidth=0.4pt,linejoin=1, + correctAngle=false} +\psline(5,0)(0,0)(5,-5) +\psellipticarc*(0,0)(1,3){0}{315}% +\psset{linecolor=red} +\psellipticarc*(0,0)(3,1){22}{222}% +\psline(3;22)\psline(3;222) +\end{pspicture}% +\end{LTXexample} + + + + +\subsection{Option \texttt{algebraic}} +The option \Lkeyword{algebraic} moved from the other packages into +the main package \LPack{pstricks} to get rid of the dependencies. + +By default the function in \Lcs{psplot} has to be described in +Reversed Polish Notation. The option \Lkeyword{algebraic} allows you +to do this in the common algebraic notation. E.g.: + +\begin{tabular}{l|l} +RPN & algebraic\\\hline +\verb+x ln+ & \verb+ln(x)+\\ +\verb+x cos 2.71 x neg 10 div exp mul+ & \verb+cos(x)*2.71^(-x/10)+\\ +\verb+1 x div cos 4 mul+ & \verb+4*cos(1/x)+\\ +\verb+t cos t sin+ & \verb+cos(t)|sin(t)+ +\end{tabular} + +Setting the option \Lkeyword{algebraic}, allow the user +to describe all expression to be written in the classical +algebraic notation (infix notation). The four arithmetic +operations are obviously defined \verb$+-*/$, and also the +exponential operator \verb$^$. The natural priorities are used : +$3+4\times 5^5=3+(4\times (5^5))$, and by default the computation +is done from left to right. The following functions are defined : + +\medskip +\begin{tabular}{ll} +\verb$sin$, \verb$cos$, \verb$tan$, \verb$acos$, \verb$asin$ & in radians\\ +\verb$log$, \verb$ln$\\ +\verb$ceiling$, \verb$floor$, \verb$truncate$, \verb$round$\\ +\verb$sqrt$ & square root\\ +\verb$abs$ & absolute value\\ +\verb$fact$ & for the factorial\\ +\verb$Sum$ & for building sums\\ +\verb$IfTE$ & for an easy case structure +\end{tabular} + +\medskip +These options can be used with \textbf{all} plot macros. + +{\bfseries Using the option \Lkeyword{algebraic} implies that all +angles have to be in radians! } + +For the \Lcs{parametricplot} the two parts must be divided by the \Lnotation{|} character: + +\begin{LTXexample}[width=2cm] +\begin{pspicture}(-0.5,-0.5)(0.5,0.5) +\parametricplot[algebraic,linecolor=red]{-3.14}{3.14}{cos(t)|sin(t)} +\end{pspicture} +\end{LTXexample} + +\bigskip +\begingroup +\psset{lly=-0.5cm} +\psgraph[trigLabels,dx=\psPi,dy=0.5,Dy=0.5]{->}(0,0)(-10,-1)(10,1){\linewidth}{6cm} + \psset{algebraic,plotpoints=1000} + \psplot[linecolor=yellow,linewidth=2pt]{-10}{10}{0.75*sin(x)*cos(x/2)} + \psplot[linecolor=red,showpoints=true,plotpoints=101]{-10}{10}{0.75*sin(x)*cos(x/2)} +\endpsgraph +\endgroup + +\bigskip +\begin{lstlisting} +\psset{lly=-0.5cm} +\psgraph[trigLabels,dx=\psPi,dy=0.5,Dy=0.5]{->}(0,0)(-10,-1)(10,1){\linewidth}{6cm} + \psset{algebraic,plotpoints=1000} + \psplot[linecolor=yellow,linewidth=2pt]{-10}{10}{0.75*sin(x)*cos(x/2)} + \psplot[linecolor=red,showpoints=true,plotpoints=101]{-10}{10}{0.75*sin(x)*cos(x/2)} +\endpsgraph +\end{lstlisting} + + +\bigskip +%\begin{LTXexample}[pos=t] +\bgroup +\psset{lly=-0.5cm,unit=1cm} +\psgraph(0,-5)(18,3){0.9\linewidth}{5cm} + \psset{algebraic,plotpoints=501} + \psplot[linecolor=yellow, linewidth=4\pslinewidth]{0.01}{18}{ln(x)} + \psplot[linecolor=red]{0.01}{18}{ln(x)} + \psplot[linecolor=green,linewidth=4\pslinewidth]{0}{18}{3*cos(x)*2.71^(-x/10)} + \psplot[linecolor=blue,showpoints=true,plotpoints=51]{0}{18}{3*cos(x)*2.71^(-x/10)} +\endpsgraph +\egroup +%\end{LTXexample} + + +\bigskip +\begin{lstlisting} +\psset{lly=-0.5cm} +\psgraph(0,-5)(18,3){0.9\linewidth}{5cm} + \psset{algebraic,plotpoints=501} + \psplot[linecolor=yellow, linewidth=4\pslinewidth]{0.01}{18}{ln(x)} + \psplot[linecolor=red]{0.01}{18}{ln(x)} + \psplot[linecolor=yellow,linewidth=4\pslinewidth]{0}{18}{3*cos(x)*2.71^(-x/10)} + \psplot[linecolor=blue,showpoints=true,plotpoints=51]{0}{18}{3*cos(x)*2.71^(-x/10)} +\endpsgraph +\end{lstlisting} + +\section{New linestyle \nxLkeyval{symbol}} + +Instead of drawing a continous line or curve for a series of coordinates, one +can now out a symbol in a given size, direction, and step. This works only +for the line style \Lkeyval{symbol}. It takes the symbol defined by the optional +argument \Lkeyword{symbol}, which can have a single character or a octal number +of three digits. The font is specified by the key \Lkeyword{symbolFont}, which can take +as argument one of the valid \PS fonts or the internal \Lkeyval{PSTricksDotFont}. +If the symbol is given by a single character then the equivilant character in +the given font is used. The difference between two symbols is set by \Lkeyword{symbolStep} +and the symbol rotation by \Lkeyword{rotateSymbol}. For the first symbol there +is an additional keyword \Lkeyword{startAngle}. +The default values for these new +optional keywords are: + +\begin{Xverbatim}{} +\psset[pst-base]{symbolStep=20pt} +\psset[pst-base]{symbolWidth=10pt} +\psset[pst-base]{symbolFont=Dingbats} +\psset[pst-base]{rotateSymbol=false} +\psset[pst-base]{startAngle=0} +\end{Xverbatim} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(8,6) +\psline[linestyle=symbol](0,0)(5,0)(8,4) +\psline[linestyle=symbol,symbol=T](0,1)(5,1)(8,4) +\psline[linestyle=symbol,symbol=u,symbolFont=PSTricksDotFont](0,2)(5,2)(8,4) +\psline[linestyle=symbol,symbol=u,symbolStep=25pt,linecolor=red](0,3)(5,3)(8,2) +\psline[linestyle=symbol,symbol=A,symbolStep=25pt, + symbolWidth=20pt,linecolor=blue](0,4)(5,4)(8,1) +\psline[linestyle=symbol,symbol=342,rotateSymbol=true,symbolStep=12pt](0,5)(5,5)(8,0) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(8,6) +\pscurve[linestyle=symbol](0,0)(5,0)(8,4) +\pscurve[linestyle=symbol](0,1)(5,1)(8,4) +\pscurve[linestyle=symbol,symbol=u,symbolFont=PSTricksDotFont](0,2)(5,2)(8,4) +\pscurve[linestyle=symbol,symbol=u,symbolStep=25pt,linecolor=red](0,3)(5,3)(8,2) +\pscurve[linestyle=symbol,symbol=A,symbolStep=25pt, + symbolWidth=20pt,linecolor=blue](0,4)(5,4)(8,1) +\pscurve[linestyle=symbol,symbol=342,rotateSymbol=true, + startAngle=190,symbolStep=12pt](0,5)(5,5)(8,0) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(8,6) +\psccurve[linestyle=symbol](0,0)(5,0)(8,4) +\psccurve[linestyle=symbol](0,1)(5,1)(8,4) +\psccurve[linestyle=symbol,symbol=u,symbolFont=PSTricksDotFont](0,2)(5,2)(8,4) +\psccurve[linestyle=symbol,symbol=u,symbolStep=25pt,linecolor=red](0,3)(5,3)(8,2) +\psccurve[linestyle=symbol,symbol=A,symbolStep=25pt, + symbolWidth=20pt,linecolor=blue](0,4)(5,4)(8,1) +\psccurve[linestyle=symbol,symbol=342,rotateSymbol=true, + startAngle=190,symbolStep=12pt](0,5)(5,5)(8,0) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(5,4) +\pscurve[rotateSymbol=true,linestyle=symbol, + rot=180,startAngle=100,symbol=", + symbolWidth=20pt](0,0)(1,4)(3,0)(5,2) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(6,4) +\psbezier[rotateSymbol=true,linestyle=symbol,symbol=u, + symbolFont=PSTricksDotFont,rot=-90,startAngle=0](0,0)(0,4)(6,4)(6,0) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\psset{unit=0.5cm} +\pspicture(-1,-4)(6,4) +\pscbezier[rotateSymbol=true,linestyle=symbol,symbol=u, + symbolFont=PSTricksDotFont](0,4)(4,4)(4,-4)(0,-4) +\pscbezier[linestyle=dashed](0,4)(4,4)(4,-4)(0,-4) +\endpspicture +\end{LTXexample} + +\psset{unit=1cm} +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(6,4) +\psbezier[rotateSymbol=true,linestyle=symbol,symbol=u, + symbolFont=PSTricksDotFont](0,0)(0,4)(6,4)(6,0) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(6,4) +\pspolygon[rotateSymbol=true,linestyle=symbol,symbol=u, + symbolFont=PSTricksDotFont](0,0)(0,4)(6,4)(6,0)(1,3) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-3,-1)(6,6) +\psccurve[linestyle=symbol,symbol=u, rot=-90,rotateSymbol, + symbolFont=PSTricksDotFont, symbolWidth=5pt, symbolStep=10pt +](-3,-1)(0,0)(0,4)(6,4)(6,0)(0,4)(-1,5) +\endpspicture +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\pspicture(-1,-1)(6,6) +\pscurve[linestyle=dashed,linecolor=black!30](0,0)(0,4)(6,4)(6,0)(0,4) +\pscurve[rotateSymbol=true,linestyle=symbol,symbol=k, + symbolFont=PSTricksDotFont, symbolWidth=5pt, symbolStep=10pt,linecolor=blue +](0,0)(0,4)(6,4)(6,0)(0,4) +\endpspicture +\end{LTXexample} + + +%-------------------------------------------------------------------------------------- +\section{Numeric functions} +%-------------------------------------------------------------------------------------- + +All macros have a \textat{} in their name, because they are +only for internal use, but it is no problem to use them like other +macros. One can define another name without a \textat{}: +\begin{lstlisting}[style=syntax] +\makeatletter +\let\pstdivide\pst@divide +\makeatother +\end{lstlisting} + +or put the macro inside the \Lcs{makeatletter} -- \Lcs{makeatother} sequence. + + +%-------------------------------------------------------------------------------------- +\section{Numeric functions} +%-------------------------------------------------------------------------------------- + +By default \PST\ loads the file \Lfile{pst-fp} which is derived from the +\LPack{fp} package. It supports the following macros: + +%-------------------------------------------------------------------------------------- +\subsection{\nxLcs{pstFPadd}, \nxLcs{pstFPsub}, \nxLcs{pstFPmul}, and \nxLcs{pstFPdiv}} +%-------------------------------------------------------------------------------------- +Multiplication and division: + +\begin{BDef} +\Lcs{pstFPadd}\Largb{result}\Largb{number}\Largb{number}\\ +\Lcs{pstFPsub}\Largb{result}\Largb{number}\Largb{number}\\ +\Lcs{pstFPmul}\Largb{result}\Largb{number}\Largb{number}\\ +\Lcs{pstFPdiv}\Largb{result}\Largb{number}\Largb{number} +\end{BDef} + +\begin{LTXexample}[width=5cm] +\pstFPmul\Result{-3.405}{0.02345} \Result\quad +\pstFPdiv\Result{-3.405}{0.02345} \Result\\ +\pstFPmul\Result{0.02345}{-3.405} \Result\quad +\pstFPdiv\Result{0.02345}{-3.405} \Result\\ +\pstFPmul\Result{234.123}{33} \Result\quad +\pstFPdiv\Result{234.123}{33} \Result\\ +\pstFPadd\Result{234.123}{33} \Result\quad +\pstFPadd\Result{234.123}{-33} \Result\\ +\pstFPsub\Result{234.123}{33} \Result\quad +\pstFPsub\Result{-234.123}{33} \Result +\end{LTXexample} + +The zeros can be stripped with the macro \Lcs{pstFPstripZeros}. Expect +always rounding errors, \TeX\ was not made for calculations \ldots +The value is converted into a length and then reconverted to a +number by stripping the unit. Which also strips the zeros. + +\begin{LTXexample}[width=5cm] +\pstFPmul\Result{-3.405}{0.02345} +\pstFPstripZeros{\Result}{\Result}\Result\quad +\pstFPdiv\Result{-3.405}{0.02345} +\pstFPstripZeros{\Result}{\Result}\Result\\ +\pstFPmul\Result{0.02345}{-3.405} +\pstFPstripZeros{\Result}{\Result}\Result\quad +\pstFPdiv\Result{0.02345}{-3.405} +\pstFPstripZeros{\Result}{\Result}\Result +\end{LTXexample} + +%-------------------------------------------------------------------------------------- +\subsection{\nxLcs{pstFPMul} and \nxLcs{pstFPDiv}} +%-------------------------------------------------------------------------------------- +Integer multiplication and division: + +\begin{BDef} +\Lcs{pstFPMul}\Largb{result as a truncated integer}\Largb{number}\Largb{number}\\ +\Lcs{pstFPDiv}\Largb{result as a truncated integer}\Largb{number}\Largb{number} +\end{BDef} + +\begin{LTXexample}[width=5cm] +\makeatletter +\pstFPMul\Result{-34.05}{0.02345} \Result\quad +\pstFPDiv\Result{-3.405}{0.02345} \Result\\ +\pstFPMul\Result{23.45}{-3.405} \Result\quad +\pstFPDiv\Result{0.2345}{-0.03405} \Result\\ +\pstFPMul\Result{234.123}{33} \Result\quad +\pstFPDiv\Result{234.123}{33} \Result +\makeatother +\end{LTXexample} + +%-------------------------------------------------------------------------------------- +\section{The PostScript header files} +\subsection{\nxLFile{pstricks.pro}} +%-------------------------------------------------------------------------------------- +It contains now most of the stuff from \LPack{pstricks-add} and the new routines +for plotting lines/curves with symbols. + +%-------------------------------------------------------------------------------------- +\subsection{\nxLFile{pst-algparser.pro}} +\subsubsection{Using the \texttt{Sum} function} +%-------------------------------------------------------------------------------------- + +\begin{BDef} +\Lcs{Sum}\Largr{<index name>,<start>,<step>,<end>,<function>} +\end{BDef} + +Let's plot the first development of cosine with polynomials: +$\displaystyle\sum_{n=0}^{+\infty}\frac{(-1)^nx^{2n}}{n!}$. + +\begin{center} +\bgroup +\psset{algebraic=true, plotpoints=501, yunit=3} +\def\getColor#1{\ifcase#1 black\or red\or magenta\or yellow\or green\or Orange\or blue\or + DarkOrchid\or BrickRed\or Rhodamine\or OliveGreen\fi} +\begin{pspicture}(-7,-1.5)(7,1.5) + \psclip{\psframe(-7,-1.5)(7,1.5)} + \psplot{-7}{7}{cos(x)} + \multido{\n=1+1}{10}{% + \psplot[linewidth=1pt,linecolor=\getColor{\n}]{-7}{7}{% + Sum(ijk,0,1,\n,(-1)^ijk*x^(2*ijk)/fact(2*ijk))}} + \endpsclip + \psaxes(0,0)(-7,-1.5)(7,1.5) +\end{pspicture} +\egroup +\end{center} +\begin{lstlisting} +\psset{algebraic=true, plotpoints=501, yunit=3} +\def\getColor#1{\ifcase#1 black\or red\or magenta\or yellow\or green\or Orange\or blue\or + DarkOrchid\or BrickRed\or Rhodamine\or OliveGreen\fi} +\begin{pspicture}(-7,-1.5)(7,1.5) + \psclip{\psframe(-7,-1.5)(7,1.5)} + \psplot{-7}{7}{cos(x)} + \multido{\n=1+1}{10}{% + \psplot[linewidth=1pt,linecolor=\getColor{\n}]{-7}{7}{% + Sum(ijk,0,1,\n,(-1)^ijk*x^(2*ijk)/fact(2*ijk))}} + \endpsclip + \psaxes(0,0)(-7,-1.5)(7,1.5) +\end{pspicture} +\end{lstlisting} + +\clearpage +%-------------------------------------------------------------------------------------- +\subsection[\nxLps{IfTE}]{The variable step algorithm together with the PostScript function \nxLps{IfTE}} +%-------------------------------------------------------------------------------------- +\xLps{IfTE}\xLkeyword{VarStep}\xLkeyword{VarStepEpsilon} + +\begin{BDef} +\Lps{IfTE}\Largr{<condition>,<true part>,<false part>} +\end{BDef} + +Nesting of several \Lps{IfTE} is possible and seen in the +following examples. A classic example is a piece-wise linear +function. + +\begin{center} +\psset{unit=0.7cm} +\begin{pspicture}(-7.5,-2.5)(7.5,6) + \psaxes{->}(0,0)(-7,-2)(7.5,6)[x,-90][y,0] + \psset{algebraic=true, plotpoints=21,linewidth=2pt} + \psplot[linecolor=blue]{-7.5}{7.5}{IfTE(x<-6,8+x,IfTE(x<0,-x/3,IfTE(x<3,2*x,9-x)))} + \psplot[linecolor=red, plotpoints=101]{-7.5}{7.5}{% + IfTE(2*x<-2^2*sqrt(9),7+x,IfTE(x<0,x^2/18-1,IfTE(x<3,2*x^2/3-1,8-x)))}% +\end{pspicture} +\end{center} +\psset{unit=1cm} + +\begin{lstlisting} +\psset{unit=1.5, algebraic, ?\ON?VarStep?\OFF?, showpoints, ?\ON?VarStepEpsilon?\OFF?=.001} +\begin{pspicture}[showgrid=true](-7,-2)(2,4) + \psplot{-7}{2}{?\ON?IfTE?\OFF?(x<-5,-(x+5)^3/2,?\ON?IfTE?\OFF?(x<0,0,x^2))} + \psplot{-7}{2}{5*x/9+26/9} + \psplot[linecolor=blue]{-7}{2}{(x+7)^30/9^30*4.5-1/2} + \psplot[linecolor=red]{-6.9}{2} + {?\ON?IfTE?\OFF?(x<-6,ln(x+7),?\ON?IfTE?\OFF?(x<-3,x+6,?\ON?IfTE?\OFF?(x<0.1415926,sin(x+3)+3,3.1415926-x)))} +\end{pspicture} +\end{lstlisting} + +When you program a piece-wise defined function you must take care +that a plotting point must be put at each point where the +description changes. Use \Lkeyword{showpoints}=true to see what's +going on when there is a problem. You are on the safe side when +you choose a big number for \Lkeyword{plotpoints}. + + +\begin{center} +\psset{unit=0.75} +\begin{pspicture}(-8,-8)(8,8) + \psaxes{->}(0,0)(-8,-8)(8,8)[x,-90][y,0] + \psset{plotpoints=1000,linewidth=1pt} + \psplot[algebraic=true]{-8}{8}{ceiling(x)} + \psplot[algebraic=true, linecolor=yellow]{-8}{8}{rand/(2^31-1)+x} + \psplot[algebraic=true, linecolor=red]{-8}{8}{floor(x)} + \psplot[algebraic=true, linecolor=blue]{-8}{8}{round(x)} + \psplot[algebraic=true, linecolor=green]{-8}{8}{truncate(x)} + \psplot[algebraic=true, linecolor=cyan]{-8}{8}{div(mul(4,x),7)} + \psplot[algebraic=true, linecolor=gray]{-8}{8}{abs(x)+abs(x-3)-abs(5-5*x/7)} + \psplot[algebraic=true, linecolor=gray]{-8}{8}{abs(3*cos(x)+1)} + \psplot[algebraic=true, linecolor=magenta]{-8}{8}{floor(8*cos(x))} +\end{pspicture} +\end{center} + +\begin{lstlisting} +\psset{unit=0.75} +\begin{pspicture}(-8,-8)(8,8) + \psaxes{->}(0,0)(-8,-8)(8,8)[x,-90][y,0] + \psset{plotpoints=1000,linewidth=1pt} + \psplot[algebraic=true, linecolor=yellow]{-8}{8}{rand/(2^31-1)+x} + \psplot[algebraic=true]{-8}{8}{ceiling(x)} + \psplot[algebraic=true, linecolor=red]{-8}{8}{floor(x)} + \psplot[algebraic=true, linecolor=blue]{-8}{8}{round(x)} + \psplot[algebraic=true, linecolor=green]{-8}{8}{truncate(x)} + \psplot[algebraic=true, linecolor=cyan]{-8}{8}{div(mul(4,x),7)} + \psplot[algebraic=true, linecolor=gray]{-8}{8}{abs(x)+abs(x-3)-abs(5-5*x/7)} + \psplot[algebraic=true, linecolor=gray]{-8}{8}{abs(3*cos(x)+1)} + \psplot[algebraic=true, linecolor=magenta]{-8}{8}{floor(8*cos(x))} +\end{pspicture} +\end{lstlisting} + + +\subsection[\nxLps{Derive} function]{Successive derivatives of a polynomial with the PostScript function \nxLps{Derive}} + +\begin{center} +\bgroup +\psset{unit=2, algebraic=true, VarStep=true, showpoints=true, VarStepEpsilon=.001} +\def\getColor#1{\ifcase#1 Tan\or RedOrange\or magenta\or yellow\or green\or Orange\or blue\or + DarkOrchid\or BrickRed\or Rhodamine\or OliveGreen\or Goldenrod\or Mahogany\or + OrangeRed\or CarnationPink\or RoyalPurple\or Lavender\fi} +\begin{pspicture}[showgrid=true](0,-1.2)(7,1.5) + \psclip{\psframe[linestyle=none](0,-1.1)(7,1.1)} + \multido{\in=0+1}{16}{% + \psplot[algebraic=true, linecolor=\getColor{\in}]{0.1}{7} + {Derive(\in,Sum(i,0,1,7,(-1)^i*x^(2*i)/Fact(2*i)))}} + \endpsclip +\end{pspicture} +\egroup +\end{center} + +\begin{lstlisting} +\psset{unit=2, algebraic=true, VarStep=true, showpoints=true, VarStepEpsilon=.001} +\def\getColor#1{\ifcase#1 Tan\or RedOrange\or magenta\or yellow\or green\or Orange\or blue\or + DarkOrchid\or BrickRed\or Rhodamine\or OliveGreen\or Goldenrod\or Mahogany\or + OrangeRed\or CarnationPink\or RoyalPurple\or Lavender\fi} +\begin{pspicture}[showgrid=true](0,-1.2)(7,1.5) + \psclip{\psframe[linestyle=none](0,-1.1)(7,1.1)} + \multido{\in=0+1}{16}{% + \psplot[algebraic=true, linecolor=\getColor{\in}]{0.1}{7} + {Derive(\in,Sum(i,0,1,7,(-1)^i*x^(2*i)/Fact(2*i)))}} + \endpsclip +\end{pspicture} +\end{lstlisting} + + +\subsection{Special arrow option \texttt{arrowLW}} + +Only for the arrowtype \Lnotation{o}, \Lnotation{oo}, \Lnotation{*}, and \Lnotation{**} it is possible to +set the arrowlinewidth with the optional keyword \Lkeyword{arrowLW}. +When scaling an arrow by the keyword \Lkeyword{arrowscale} the width +of the borderline is also scaled. With the optional argument +\Lkeyword{arrowLW} the line width can be set separately and is not +taken into account by the scaling value. + +\begin{LTXexample}[width=4cm] +\begin{pspicture}(4,6) +\psline[arrowscale=3,arrows=*-o](0,5)(4,5) +\psline[arrowscale=3,arrows=*-o, + arrowLW=0.5pt](0,3)(4,3) +\psline[arrowscale=3,arrows=*-o, + arrowLW=0.3333\pslinewidth](0,1)(4,1) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=4cm] +\begin{pspicture}(4,6) +\psline[arrowscale=3,arrows=**-oo](0,5)(4,5) +\psline[arrowscale=3,arrows=**-oo, + arrowLW=0.5pt](0,3)(4,3) +\psline[arrowscale=3,arrows=**-oo, + arrowLW=0.3333\pslinewidth](0,1)(4,1) +\end{pspicture} +\end{LTXexample} + + + +%-------------------------------------------------------------------------------------- +\clearpage +\section{\nxLcs{psforeach} and \nxLcs{psForeach}} +%-------------------------------------------------------------------------------------- + +The macro \Lcs{psforeach} allows a loop with an individual increment. + +\begin{BDef} +\Lcs{psforeach}\Largb{variable}\Largb{value list}\Largb{action}\\ +\Lcs{psForeach}\Largb{variable}\Largb{value list}\Largb{action} +\end{BDef} + +With \Lcs{psforeach} the \Larg{action} is done inside a group and for \Lcs{psForeach} not. +This maybe useful when using the macro to create tabular cells, which are +alread grouped itself. + +\begin{LTXexample}[width=6cm] +\begin{pspicture}[showgrid=true](5,5) + \psforeach{\nA}{0, 1, 1.5, 3, 5}{% + \psdot[dotscale=3](\nA,\nA)} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +%\usepackage{pst-func} +\makeatletter +\newcommand*\InitToks{\toks@={}} +\newcommand\AddToks[1]{\toks@=\expandafter{\the\toks@ #1}} +\newcommand*\PrintToks{\the\toks@} +\newcommand*{\makeTable}[4][5mm]{% + \begingroup + \InitToks% + \AddToks{\begin{tabular}{|*{#2}{>{\RaggedLeft}p{#1}|}@{}l@{}}\cline{1-#2}} + \psForeach{\iA}{#3}{\expandafter\AddToks\expandafter{\iA & }} + \AddToks{\\\cline{1-#2}}% + \psForeach{\iA}{#3}{\expandafter\AddToks\expandafter{\expandafter% + \psPrintValue\expandafter{\iA\space /x ED #4} & }} + \AddToks{\\\cline{1-#2}\end{tabular}}% + \PrintToks + \endgroup +} +\makeatother + +\sffamily +\psset{decimals=2,valuewidth=7,xShift=-20} +$y=2^x$\\ +\makeTable[1cm]{6}{2,4,6,8,10,12}{2 x exp} +\end{LTXexample} + +The value List can also be given by the first two and the last value, e.\,g. \verb=1,4,..,31=, +then \PST calculates all values with the distance given by the first two values. + +\begin{LTXexample}[pos=t] +\psset{xunit=0.55cm,yunit=2cm} +\begin{pspicture}[showgrid](0,-5mm)(25,1) + \psforeach{\nA}{0, 3.14,..,25}{\psline(\nA,0)(\nA,1)} +\end{pspicture} +\end{LTXexample} + +The internal counter for the steps is named \LCtr{psLoopIndex} and can be used for own purposes. + +\begin{LTXexample}[pos=l,width=6cm] +\begin{pspicture}[showgrid=true](5,5) +\psforeach{\nA}{0, 1, 1.5, 2.25, 5}{% + \psdot[dotscale=3](\the\psLoopIndex,\nA)} +\end{pspicture} +\end{LTXexample} + + + + +\part{\nxLPack{pst-node} -- package} + +\section{\nxLFile{pst-node.tex}} + +The package \LPack{pst-node} now uses the advanced key handling from \LPack{xkeyval}. The reason +why it moved from the base into the contrib sections, where all packages uses \LPack{xkeyval}. + +\part{\nxLPack{pst-plot} -- package} + +\section{\nxLFile{pst-plot.tex}} + +The package \LPack{pst-plot} now uses the advanced key handling from \LPack{xkeyval}. The reason +why it moved from the base into the contrib sections, where all packages uses \LPack{xkeyval}. + + +\clearpage +\section{List of all optional arguments for \texttt{pstricks}} + +\xkvview{family=pst-base,columns={key,type,default}} +%\xkvview{family=pst-tools,columns={key,type,default}} + + + +\nocite{*} +\printbibliography + +\printindex + + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news11.pdf b/graphics/pstricks/base/doc/pst-news11.pdf Binary files differnew file mode 100644 index 0000000000..d2539fd5e0 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news11.pdf diff --git a/graphics/pstricks/base/doc/pst-news11.tex b/graphics/pstricks/base/doc/pst-news11.tex new file mode 100644 index 0000000000..a4254f226f --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news11.tex @@ -0,0 +1,184 @@ +%% $Id: pst-news11.tex 165 2015-07-26 07:27:55Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pst-node} +\usepackage{xkvview} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2011}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2011}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +\section{General} +There exists a new document class \LClass{pst-doc} for writing PSTricks documentations, +like this news document. It depends on the KOMA-Script document class \LClass{scrartcl}. +\LClass{pst-doc} defines a lot of special macros to create a good index. Take one of +the already existing package documentation and look into the source file. Then it will be +easy to understand, how all these macros have to be used. + +When running \Lprog{pdflatex} the title page is created with boxes and inserted +with the macro \Lcs{AddToShipoutPicture} from the package \LPack{eso-pic}. It +inserts the background title page image \Lfile{pst-doc-pdf} to use directly +\Lprog{pdflatex}. +When running \Lprog{latex} the title page + is created with \PST\ macros.This allows to use the Perl script \Lprog{pst2pdf} or +the package \LPack{pst-pdf} or \LPack{auto-pst-pdf} or any other program/package which +supports \PS\ code in the document. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- +\subsection{New optional argument} + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- + +\subsection{Macro \nxLcs{psLoop}} +\PST\marginpar[2.17]{2.17} already knows \Lcs{psforeach} and \Lcs{psForeach} for loops. The new +macro \Lcs{psLoop} allows a loop without defining a variable: + +\begin{BDef} +\Lcs{psLoop}\Largb{n}\Largb{argument} +\end{BDef} + +However, the internal \TeX\ counter \Lctr{psLoopIndex} can be used for own purposes. + +\begin{LTXexample}[width=7cm] + \psLoop{4}{PSTricks } +\end{LTXexample} + +\begin{LTXexample}[width=7cm] +\tabular{|c|c|c|c|} + \psLoop{3}{PSTricks &}\\\hline + A & B & C & D\\\hline +\endtabular +\end{LTXexample} + +\begin{LTXexample}[width=6cm] +\begin{pspicture}[showgrid](3,3) +\psLoop{4}{% + \psdots(\the\psLoopIndex,\the\psLoopIndex)} +\end{pspicture} +\end{LTXexample} + +\subsection{New fillstyle \texttt{dots}} +Instead of using the package \LPack{pst-fill} one can now use the fill style \Lkeyval{dots}. +The valid parameters are \Lkeyword{hatchsep} for the distance of two dots, \Lkeyword{hatchwidth} +for the radius of the filled dot, and \Lkeyword{hatchcolor} for the dot color. + +\begin{LTXexample}[pos=t] +\begin{pspicture}(-2,-2)(10,2) +\pscircle[hatchcolor=gray,hatchsep=10pt,hatchwidth=3pt,fillstyle=dots]{2} +\pscircle[hatchcolor=gray,hatchsep=10pt,hatchwidth=3pt,fillstyle=dots*](4,0){2} +\psframe[hatchcolor=blue!30,linecolor=red,hatchsep=12pt,hatchwidth=4pt, + fillstyle=dots*](6,-2)(10,2) +\end{pspicture} +\end{LTXexample} + + +%-------------------------------------------------------------------------------------- +\section{The PostScript header files} +\subsection{\nxLFile{pstricks.pro}} +%-------------------------------------------------------------------------------------- +There is a new subroutine \Lps{DotFill}: +\begin{lstlisting} + +/DotFill {% on stack: dot radius + /dotRadius ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform + pathbbox % llx lly urx ury of smallest bounding box + /y2 ED /x2 ED /y1 ED /x1 ED + y2 y1 sub a div 2 add cvi /Ny ED + x2 x1 sub a div 2 add cvi /Nx ED + clip + newpath + /yA y1 dotRadius add CLW add def + /xA0 x1 dotRadius add CLW add def + Ny { + /xA xA0 def + Nx { + newpath + xA yA dotRadius 0 360 arc + SolidDot { gsave fill grestore } if + stroke + xA a add /xA ED + } repeat + yA a add /yA ED + } repeat + grestore +} def +\end{lstlisting} + + +%-------------------------------------------------------------------------------------- +%\subsection{\nxLFile{pst-algparser.pro}} +%-------------------------------------------------------------------------------------- + +%\section{\nxLcs{psforeach} and \nxLcs{psForeach}} +%-------------------------------------------------------------------------------------- + +\section{List of all optional arguments for \texttt{pstricks}} + +\makeatletter +\xkvview{family=pstricks,columns={key,type,default}} +\makeatother + + +\clearpage +\part{Other packages} +\section{\texttt{pst-node} -- version \pstnodeFV\ | \pstnodeFD} +The command \Lcs{pnode} now knows an optional argument for an offset, which +expects two values (x,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} + + +\clearpage +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news12.pdf b/graphics/pstricks/base/doc/pst-news12.pdf Binary files differnew file mode 100644 index 0000000000..0807d12d53 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news12.pdf diff --git a/graphics/pstricks/base/doc/pst-news12.tex b/graphics/pstricks/base/doc/pst-news12.tex new file mode 100644 index 0000000000..759869d864 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news12.tex @@ -0,0 +1,243 @@ +%% $Id: pst-news12.tex 847 2018-12-04 08:04:28Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pst-node,pst-plot} +\usepackage{xkvview} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2012}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2012}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +\section{General} +There exists a new document class \LClass{pst-doc} for writing PSTricks documentations, +like this news document. It depends on the KOMA-Script document class \LClass{scrartcl}. +\LClass{pst-doc} defines a lot of special macros to create a good index. Take one of +the already existing package documentation and look into the source file. Then it will be +easy to understand, how all these macros have to be used. + +When running \Lprog{pdflatex} the title page is created with boxes and inserted +with the macro \Lcs{AddToShipoutPicture} from the package \LPack{eso-pic}. It +inserts the background title page image \Lfile{pst-doc-pdf} to use directly +\Lprog{pdflatex}. +When running \Lprog{latex} the title page + is created with \PST\ macros.This allows to use the Perl script \Lprog{pst2pdf} or +the package \LPack{pst-pdf} or \LPack{auto-pst-pdf} or any other program/package which +supports \PS\ code in the document. + + +%-------------------------------------------------------------------------------------- +%\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- +%\subsection{New optional argument} + + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- + + +\subsection{\nxLcs{psellipticarc}} +There was a bug with the star version of \Lcs{psellipticarc}, which filled the path in +the same way as \Lcs{psellipticwedge*} does. It is now fixed: + +\begin{LTXexample}[pos=r] +\begin{pspicture}[showgrid](4,4) +\psellipticarc*(2,0)(2,4){0}{130} +\psdot(2,0) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=r] +\begin{pspicture}[showgrid](4,4) +\psellipticarc*[correctAngle=false,showpoints](2,0)(2,4){0}{130} +\psdot(2,0) +\end{pspicture} +\end{LTXexample} + +\subsection{Grid} + +The optional argument \Lkeyval{showgrid} can have the values \Lkeyval{bottom}, +\Lkeyval{true}, +\Lkeyval{false}, and +\Lkeyval{top}, where \Lkeyval{false is the default} and \Lkeyval{true} the same as +\Lkeyval{bottom}. With the latter it is set first and with \Lkeyval{top} it is set +at the end of the \Lenv{pspitcure} environment. + + +\subsection{Symbol line} +The optional argument \Lkeyword{symbol} for a linestyle can now be +set with a negative \Lkeyword{symbolstep} for a computed width of the steps: +\begin{LTXexample}[pos=t] +\psset{unit=0.75cm} +\begin{pspicture}(8,8) +\psaxes[labels=none,ticks=none]{->}(0,0)(8,8)[$x$,0][$y$,0] +\pscurve(1,1)(3,4)(6,6)(8,4) +\pscurve[linestyle=symbol,symbolStep=-20,symbol=l](1,1)(3,4)(6,6)(8,4) +\end{pspicture} +\end{LTXexample} + + +Instead of setting a symbol it is possible to set ticks on the curve with \Lkeyword{curveticks}. They can be set by a fixed width or a computed +width if the \Lkeyword{symbolStep} is set by a negative number without a unit. + +\begin{LTXexample}[pos=t] +\psset{unit=0.75cm} +\begin{pspicture}(8,8) +\psaxes[labels=none,ticks=none]{->}(0,0)(8,8)[$x$,0][$y$,0] +\pscurve(1,1)(3,4)(6,6)(8,4) +\pscurve[linestyle=symbol,symbolStep=12.25pt, + curveticks,startAngle=60](1,1)(3,4)(6,6)(8,4) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\psset{unit=0.75cm} +\begin{pspicture}(8,8) +\psaxes[labels=none,ticks=none]{->}(0,0)(8,8)[$x$,0][$y$,0] +\pscurve(1,1)(3,4)(6,6)(8,4) +\pscurve[linestyle=symbol,symbolStep=-12, + curveticks,startAngle=60](1,1)(3,4)(6,6)(8,4) +\end{pspicture} +\end{LTXexample} + + +\subsection{Fill style \texttt{eohlines} and \texttt{eovlines}} +These fill styles uses the PS function \Lps{eoclip} instead of \Lps{clip}. + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](6,6) + \pscustom[fillstyle=eovlines,fillcolor=green]{ + \pscircle(3,3){3} + \psline[liftpen=2](1,2)(5,2)(3,5)(1,2) + } +\end{pspicture}\quad +\begin{pspicture}[showgrid](6,6) + \pscustom[fillstyle=eovlines*,fillcolor=blue!50]{ + \pscircle(3,3){3} + \psline[liftpen=2](1,2)(5,2)(3,5)(1,2)} +\end{pspicture} +\end{LTXexample} + + + +\subsection{Fill style \texttt{penroseA}} + +The valid optional arguments are \texttt{penroseA}, +\texttt{hatchcolor}, \texttt{dartcolor}, and \texttt{kitecolor} + +\begin{LTXexample}[pos=t,wide] +\begin{pspicture}(3,3) +\psframe[fillstyle=penroseA](3,3) +\end{pspicture} \qquad +\begin{pspicture}(3,3) +\psframe[fillstyle=penroseA,psscale=0.5,hatchcolor=white](3,3) +\end{pspicture} \qquad +\begin{pspicture}(3,3) +\psccurve[fillstyle=penroseA,kitecolor=yellow,dartcolor=blue!30](0,1.5)(1.5,3)(3,1.5)(1.5,0) +\end{pspicture} +\end{LTXexample} + + + +\section{The PostScript header files} +\subsection{\nxLFile{pstricks.pro}} +%-------------------------------------------------------------------------------------- + +The file \Lfile{pst-tools.pro} contains additional helper functions: + +\begin{lstlisting} +/factorial { % n on stack, returns n! +/MoverN { % m n on stack, returns the binomial coefficient m over n +/cxadd { % [a1 b1] [a2 b2] = [a1+a2 b1+b2] +/cxneg { % [a b] +/cxsub { cxneg cxadd } def % same as negative addition +/cxmul { % [a1 b1] [a2 b2] +/cxsqr { % [a b] square root +/cxsqrt { % [a b] +/cxarg { % [a b] +/cxlog { % [a b] +/cxnorm2 { % [a b] +/cxnorm { % [a b] +/cxconj { % conjugent complex +/cxre { 0 get } def % real value +/cxim { 1 get } def % imag value +/cxrecip { % [a b] +/cxmake1 { 0 2 array astore } def % make a complex number, real given +/cxmake2 { 2 array astore } def % dito, both given +/cxdiv { cxrecip cxmul } def +/cxrmul { % [a b] r +/cxrdiv { % [a b] r +/cxconv { % theta +/bubblesort { % on stack must be an array [ ... ] +/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422 +/dot2comma {% on stack a string (...) +\end{lstlisting} + + +%-------------------------------------------------------------------------------------- +%\subsection{\nxLFile{pst-algparser.pro}} +%-------------------------------------------------------------------------------------- + +%\section{\nxLcs{psforeach} and \nxLcs{psForeach}} +%-------------------------------------------------------------------------------------- + +\section{List of all optional arguments for \texttt{pstricks}} + +\makeatletter +\xkvview{family=pstricks,columns={key,type,default}} +\makeatother + + +\clearpage +\part{Other packages} +\section{\texttt{pst-node} -- version \pstnodeFV\ | \pstnodeFD} +The command \Lcs{pnode} now knows an optional argument for an offset, which +expects two values (x,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} + + +\clearpage +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} diff --git a/graphics/pstricks/base/doc/pst-news13.pdf b/graphics/pstricks/base/doc/pst-news13.pdf Binary files differnew file mode 100644 index 0000000000..4d632be639 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news13.pdf diff --git a/graphics/pstricks/base/doc/pst-news13.tex b/graphics/pstricks/base/doc/pst-news13.tex new file mode 100644 index 0000000000..2995cf042d --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news13.tex @@ -0,0 +1,252 @@ +%% $Id: pst-news13.tex 165 2015-07-26 07:27:55Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-plot} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2013}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2013}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- + +There are new optional arguments \Lkeyword{monochrome} and \Lkeyword{grayscale} to convert \emph{all} RGB and CMYK colors +into black and white or grayscale. The equations are: + +\subsection{RGB to gray} +\[ \text{gray} = 0.07 \text{red} + 0.71 \text{green} + 0.21 \text{blue} \] + +\subsection{CMYK to gray} +\begin{align*} + c &= c (1 - k) + k\\ + m &= m (1 - k) + k\\ + y &= y (1 - k) + k\\ + r, g, b &= (1 - c), (1 - m), (1 - y)\\ + \text{gray} &= 0.299 r + 0.587 g + 0.114 b +\end{align*} + +This change will be global and effects also all other color setting! +See section~\vref{subsec:monochrome} for a local change of the color output. + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- +There is a new optional argument \Lkeyword{pgffunctions} for the environment \Lenv{pspicture}. +With this option one can force the loading of the special pgf PostScript function +which in some cases are missing, when using the package \LPack{auto-pst-pdf} and another +package which uses pgf macros. + +\lstinline|\begin{pspicture}[pgffunctions,...](...)(...)| + +\subsection{labelsep} +The \Lkeyword{labelsep} is the first -- optional -- argument of \Lcs{uput}. +It is now possible to use the PostScript notation for this \emph{length}, eg \verb|{! 45 sin 3 mul}|. +Then the unit which is active when \Lcs{uput} is active is used. With a unit the PS notation +ist not allowed and leads to an error! + + +\subsection{Customization} + +\Lcs{pscustom} now knows the PostScript function \Lcs{reversepath}: + +\begin{LTXexample}[width=5cm] +\begin{pspicture}(5,3) + \pnode(5;30){A} + \psline(A)(0,0)(5;0) + \pscustom[fillstyle=vlines]{% + \psarcAB(A)(0,0)(2,0) + \reversepath + \psarcAB(A)(0,0)(4,0)} +\end{pspicture} +\end{LTXexample} + + +\subsection{Coordinates} +\subsubsection{Postscript mode} +A preceeding \verb|!| in coordinates will interpret the following expressing in Postfix notation. +The expression is automatically translated from user into screen coordinates. With a double \verb|!!| +this can be omitted and the Postscript expression will not be translated. This is useful in some +special cases: + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](2,2)(5,5) +\pscustom{ + \psarc(3,3){1}{0}{90} + \rmoveto(.5;-90) + \psarc[liftpen=2](!!CP){.5}{90}{180}} +\end{pspicture} +\end{LTXexample} + +\verb|CP| is the internal abbreviation for the Postscript function \texttt{currentpoint}. + + +\subsubsection{Algebraic mode} +Additionally to the special pair of coordinates \verb|(*x f(x))| where $x$ must be a value in +PostScript notation and $f(x)$ in algebraic noatation, there is now a \verb|(**{f(y), y})| +which is vice versa, $f(y)$ in algebraic and $y$ in PostScript notation. And there is also +a \verb|(+{x}, {f(x)})|, where both expressions must be in algebraic notation and \verb|{x}| must expand to a value +or an expression which uses known system or user defined PostScript functions. + + +\begin{LTXexample}[width=5cm] +\def\f(#1){#1^2} \def\y{2} +\begin{pspicture}[showgrid](5,5) +\pnode(+{sqrt(Pi),1.5*(sin(x)^2+cos(x)^2)}){A} +\psdot(A) \psline[arrowscale=1.5]{->}(A) +\psline{->}(*2 {x^2}) \psline{->}(**{y^2} 2) +\psline(1,1)(**{\f(y)} 2.2)(2;45)(*2 {\f(x)}) +\psline[linecolor=blue]{->}(+{sqrt(2),\f(x)}) +\psline[linecolor=blue]{->}(+{sqrt(3)},{\f(x)}) +\psline(+1,x+0.5) +\end{pspicture} +\end{LTXexample} + + +Important: If the expression contains itself a parenthesis like \verb|)| then the argument must +be inside braces; otherwise \TeX\ will take the first closing parenthesis as clsong delimiter +for the complete coordinate argument \verb|(...)| which then gives an error. + + + + + + + + +\subsection{Fillstyle \texttt{dots}} +A fix for the fill style \Lkeyval{dots} to make it work again: + +\begin{LTXexample}[width=5cm] +\pspicture(4,3) +\psframe[fillstyle=dots](4,3) +\endpspicture +\end{LTXexample} + +\subsection{New macro \nxLcs{psRing}} + +\begin{BDef} +\LcsStar{psRing}\OptArgs\Largr{\CAny}\Largb{Inner Radius}\Largb{Outer Radius} +\end{BDef} + + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](4,4) + \psRing[linecolor=red](2,2){0.3}{0.8} + \psRing*[opacity=0.5](2,2){1}{2} +\psdot(2,2) +\end{pspicture} +\end{LTXexample} + +\subsection{New macros \nxLcs{pssetMonochrome}, \nxLcs{pssetGrayscale}, and \nxLcs{psresetColor}}\label{subsec:monochrome} + +\begin{BDef} +\Lcs{pssetMonochrome}\\ +\Lcs{pssetGrayscale}\\ +\Lcs{psresetColor} +\end{BDef} + + + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](4,4) + \pssetMonochrome% + \psRing[linecolor=red](2,2){0.3}{0.8} + \psRing*[linecolor=red!30](2,2){1}{2} +\psresetColor% +\psdot[linecolor=red,dotscale=3](2,2) +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](4,4) + \pssetGrayscale% + \psRing[linecolor=red](2,2){0.3}{0.8} + \psRing*[linecolor=red!30](2,2){1}{2} +\psresetColor% +\psdot[linecolor=red,dotscale=3](2,2) +\end{pspicture} +\end{LTXexample} + + + +\section{The PostScript header files} +\subsection{\nxLFile{pstricks.pro}} +%-------------------------------------------------------------------------------------- + +\clearpage +\part{Other packages} +\section{\texttt{pst-node} -- version \pstnodeFV\ | \pstnodeFD} + +\small +\begin{verbatim} +1.29 2013-07-13 - fix bug with missing angle in special node coordinates + - fix for fnpnodes (argument must be in {}) + - fix typo in the documentation +1.28 2013-07-10 - added \pnodes (plural) for multiple node definition +1.27 2013-04-12 - added macro \Lcs{Cnodeput} which takes radius=... + into account +1.26 2013-04-09 - added macros \Lcs{psncurve} and \Lcs{psnccurve} + for a sequence of nodes created by \Lcs{curvepnodes} +1.25 2012-09-21 - Global node coordinates only with saveNodeCoors +\end{verbatim} + +\normalsize + + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](0,-0.5)(7,6) + \pnode(3,3){A}\psdot(A)\uput[-35](A){A} + \pnode(6,5){B}\psdot(B)\uput[135](B){B} + \psline[linestyle=dotted](A)\psline[linestyle=dotted](A)(B) + \pscircle[linestyle=dotted](A){!5 sqrt} + \pnode([nodesep=2]{B}A){P0}\psdot(P0) + \pnode([offset=1]{B}A){P1}\psdot(P1) + \pnode([nodesep=2,offset=1]{B}A){P}\psdot(P) + \psline(A)([nodesep=2]{B}A) \psline[linestyle=dashed](P0)(P) + \psline(A)([offset=1]{B}A) \psline[linestyle=dashed](P1)(P) + \pnode([nodesep=2,offset=1,angle=135]{B}A){Q}\psdot(Q) + \psarc[origin={A},arrowscale=2]{->}(A){!5 sqrt}{(P)}{(Q)} +% + \pnode([nodesep=2,offset=2]{B}A){P}\psdot(P) + \pnode([nodesep=2,offset=2,angle=135]{B}A){Q}\psdot(Q) + \psarc[origin={A},arrowscale=2]{->}(A){!8 sqrt}{(P)}{(Q)} +\end{pspicture} +\end{LTXexample} + + + + +\clearpage +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} + + diff --git a/graphics/pstricks/base/doc/pst-news14.pdf b/graphics/pstricks/base/doc/pst-news14.pdf Binary files differnew file mode 100644 index 0000000000..736504dc19 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news14.pdf diff --git a/graphics/pstricks/base/doc/pst-news14.tex b/graphics/pstricks/base/doc/pst-news14.tex new file mode 100644 index 0000000000..75b209b580 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news14.tex @@ -0,0 +1,202 @@ +%% $Id: pst-news14.tex 165 2015-07-26 07:27:55Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-plot} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}2014}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2014}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +%\section{\texttt{pstricks.sty}} +%-------------------------------------------------------------------------------------- + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- +\subsection{Opacity} +The keyword \Lkeyword{strokeopacity} is now also valid for \Lcs{psdot}, \Lcs{psdots}, +and the \Lkeyword{linestyle}/\Lkeyword{plotstyle}=\Lkeyval{dots}. + + +\subsection{PostScript notation for numbers} +Optional arguments which expects a real number can now have a preceeding ! character for +a PostScript notation which is directly passed to PostScript. The user has take care that +such a number isn't use before in another \TeX\ macro. In such a case it gives an error. + +\begin{LTXexample}[width=5cm] +\pstVerb{ 1234321 srand } +\begin{pspicture}[showgrid](-2,-2)(2,2) +\psframe*[linecolor=blue,opacity=!Rand](2,2) +\psframe*[linecolor=red,opacity=!Rand](-1,-1)(1,1) +\psframe*[linecolor=green,opacity=!Rand](-2,-2)(0,0) +\end{pspicture} +\end{LTXexample} + + +\subsection{Fillstyle \texttt{eofill}} + +It is an experimental fillstyle. PostScript knows only the \Lkeyval{eofill} and the other way round +needs some tricky internal commands and may not work in all cases. + +\begin{LTXexample}[pos=t] +\begin{pspicture}[linewidth=2pt](12,4) +\pscustom[linestyle=none,fillstyle=eofill,fillcolor=blue!40]{% + \psellipse(4,2)(2,2)\psellipse(2,2)(2,2)} +\psellipse[linecolor=red](4,2)(2,2)\psellipse[linecolor=green](2,2)(2,2) +% +\pscustom[linestyle=none,fillstyle=oefill,fillcolor=blue!40]{% + \psellipse(10,2)(2,2)\psellipse(8,2)(2,2)} +\psellipse[linecolor=red](10,2)(2,2)\psellipse[linecolor=green](8,2)(2,2) +\end{pspicture} +\end{LTXexample} + + +\subsection{Option \texttt{correctAngle}} +It now works also for \Lcs{psellipiticwedge}. The setting of \Lkeyword{origin} is needed +if the center of the ellipse is not the origin of the underlying coordinate system. + +\begin{LTXexample}[pos=t] +\begin{pspicture}[dimen=m,showgrid=top](6,4) +\pnodes{P}(3,1)(5,1)(4,2) +\pcline[nodesep=-1](P0)(P1) +\pcline[nodesep=-1](P0)(P2) +\psellipticarc[origin={P0},correctAngle](P0)(2,1){(P2)}{(P1)} +\psellipticwedge[origin={P0},linecolor=red,correctAngle, + fillstyle=vlines](P0)(2,1){(P2)}{(P1)} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}[dimen=m,showgrid=top](-3,-1)(3,3) +\pnodes{P}(0,0)(2,0)(1,1) +\pcline[nodesep=-1](P0)(P1) +\pcline[nodesep=-1](P0)(P2) +\psellipticarc[correctAngle](P0)(2,1){(P2)}{(P1)} +\psellipticwedge[linecolor=red,correctAngle, + fillstyle=vlines](P0)(2,1){(P2)}{(P1)} +\end{pspicture} +\end{LTXexample} + +\clearpage +\subsection{New macro \nxLcs{psellipseAB}} + +\begin{BDef} +\LcsStar{psellipseAB}\OptArgs\Largr{\CAny}\Largb{half radius} +\end{BDef} + + +\begin{LTXexample}[width=7cm] +\begin{pspicture}[showgrid=true](7,7)%% showgrid=true +\pnodes{a}(0.5,0)(2.5,1.8)(5.5,2.5)(6.25,3)(7,5) +\pnodes{b}(0,1)(2,3)(5,4)(5.5,5)(6,7) +\pscurve[arrowscale=2,linewidth=1.2pt]{->}(a0)(a1)(a2)(a3)(a4) +\pscurve[arrowscale=2,linewidth=1.2pt]{->}(b0)(b1)(b2)(b3)(b4) +\psellipseAB(a0)(b0){0.1} +\psellipseAB[fillcolor=red!40,fillstyle=solid](a1)(b1){0.15} +\psellipseAB(a2)(b2){0.2} +\psellipseAB[fillcolor=blue!40,fillstyle=solid](a3)(b3){0.25} +\uput[135](b1){$dS_1$}\uput[135](b2){$dS_2$} +\end{pspicture} +\end{LTXexample} + + + + +\subsection{New macro \nxLcs{psRing}} + +\begin{BDef} +\LcsStar{psRing}\OptArgs\Largr{\CAny}\OptArg{start,end}\Largb{Inner Radius}\Largb{Outer Radius} +\end{BDef} + + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](4,4) + \psRing(2,2){0.3}{0.8} + \psRing*[opacity=0.5](2,2){1}{2} +\psdot(2,2) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](4,4) + \psRing[linecolor=red](2,2)[30,60]{1}{2} + \psRing[opacity=0.5,fillstyle=solid, + fillcolor=red](2,2)[60,30]{1}{2} +\psdot(2,2) +\end{pspicture} +\end{LTXexample} + + + +\subsection{New macro \nxLcs{pscspline} (by Christoph Bersch)} + +\begin{BDef} +\LcsStar{pscspline}\OptArgs\Largr{$x_0,y_0$}\Largr{$x_1,y_1$}\ldots\Largr{\CAny} +\end{BDef} + + +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](5,5) + \pscspline[arrows=|->, showpoints](0,0)(1,2) + \pscspline[arrows=->, showpoints](0,4)(2,3)(3,4)(5,0) + \pscspline(4,4) +\end{pspicture}\par +\begin{pspicture}[showgrid](5,5) + \pscspline[linestyle=symbol, symbol=U, + symbolStep=12pt](0,0)(1,2) + \pscspline[linestyle=symbol, symbol=a, + symbolStep=12pt](0,4)(2,3)(3,4)(5,0) +\end{pspicture} +\end{LTXexample} + +\bigskip +\begin{LTXexample}[width=5cm] +\begin{pspicture}[showgrid](5,5) + \pscustom[fillcolor=red!20, fillstyle=solid]{% + \pscspline(0,3)(4,2)(5,0) + \lineto(0,0) + \closepath} +\end{pspicture} +\end{LTXexample} + +\subsection{\nxLcs{Special Coor}} + +The Macro \Lcs{SpecialCoor} for scanning special coodinate expressions is now enabled by +default. You can disable it with \Lcs{NormalCoor}. + +\clearpage +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} + + diff --git a/graphics/pstricks/base/doc/pst-news15.pdf b/graphics/pstricks/base/doc/pst-news15.pdf Binary files differnew file mode 100644 index 0000000000..d7cc3f1057 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news15.pdf diff --git a/graphics/pstricks/base/doc/pst-news15.tex b/graphics/pstricks/base/doc/pst-news15.tex new file mode 100644 index 0000000000..c2369d7018 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news15.tex @@ -0,0 +1,105 @@ +%% $Id: pst-news15.tex 444 2017-04-19 10:55:35Z herbert $ +\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings + headexclude,footexclude,oneside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-solides3d} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}\the\year}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- \the\year}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty} -- \texttt{pstricks-pdf.sty}} +%-------------------------------------------------------------------------------------- +The code for an automatic loading of package \LPack{auto-pst-pdf} is now moved +into an own package \LPack{pstricks-pdf}. It allows to run PSTricks code with \Lprog{pdflatex} \texttt{-{}-shell-escape <file>}. +The option \Loption{pdf} for \LPack{pstricks} itself is now obsolet. + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- + +PSTricks now takes the optional argument \Loption{draft} of the main document class +into account. It shows only a frame, given by the coordinates of the \Lenv{pspicture} +environment. + + + +\subsection{PostScript code} +Additionally to the macro \Lcs{pstVerb} there are now the keywords +\Lkeyword{precode} and \Lkeyword{postscode} which can be used by other +packages to paste PostScript code before and after the macros. + +\begin{LTXexample}[pos=t] +\psset{viewpoint=40 35 10 rtp2xyz,Decran=40,lightsrc=viewpoint,unit=0.5} +\begin{pspicture}(-6,-6)(6,6) +\defFunction{cercle1}(t) + {4 t cos mul 2 sub rZ cos mul 4 t sin mul rZ sin mul add} % + {4 t cos mul 2 sub rZ sin mul neg 4 t sin mul rZ cos mul add}% + {4 t sin mul}% +\psforeach{\iA}{0,20,..,360}{% + \psSolid[object=courbe, + precode=/rZ \iA\space def, + r=0,range=0 360,resolution=360,function=cercle1]} +\end{pspicture} +\end{LTXexample} + +\subsection{Background color} +There is now the optional argument \Lkeyword{bgcolor} (backgound color), +which is only valid for the background +of the environment \Lenv{pspicture} with its defined coordinates. +Internally it uses the macro \Lcs{psframe*}: + +\begin{LTXexample}[pos=t] +\begin{pspicture*}[bgcolor=black!20](-12,-5)(-2,5) +\psset{viewpoint=6 -50 0 rtp2xyz,Decran=4,lightsrc=viewpoint} +\defFunction[algebraic]{torus}(u,v) + {2*(1+ 0.5*cos(u))*cos(v)}% x=f(u,v) + {2*(1+ 0.5*cos(u))*sin(v)}% y=f(u,v) + {2*0.5*sin(u)}% z=f(u) +\psSolid[object=surfaceparametree, + precode=/n1 48 def /n2 90 def /n1n2 n1 n2 mul 2 mul 1 sub def /iS 0 def, + base=0 2 pi mul 0 pi 1.5 mul , + fcol=0 2 n1 2 sub {/i exch def + i n2 mul 2 i n2 mul n2 add 1 sub {(Black)} for} for + 1 2 n1 1 sub {/i exch def i n2 mul 1 add 2 i n2 mul n2 add 1 sub {(Black)} for} for, + fillcolor=white,incolor=yellow!50, + function=torus, + linewidth=0.5\pslinewidth,unit=5,ngrid=n1 n2] +\end{pspicture*} +\end{LTXexample} + + + +\clearpage +\nocite{*} +\bibliographystyle{plain} +\bibliography{PSTricks} + +\printindex + + +\end{document} + + diff --git a/graphics/pstricks/base/doc/pst-news16.pdf b/graphics/pstricks/base/doc/pst-news16.pdf Binary files differnew file mode 100644 index 0000000000..8841715ed5 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news16.pdf diff --git a/graphics/pstricks/base/doc/pst-news16.tex b/graphics/pstricks/base/doc/pst-news16.tex new file mode 100644 index 0000000000..9a544ca5bd --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news16.tex @@ -0,0 +1,105 @@ +%% $Id: pst-news16.tex 446 2017-04-19 11:40:55Z herbert $ +\documentclass[11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small, + headinclude=false,footinclude=false,twoside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\let\pstricksFV\fileversion +\let\pstricksFD\filedate +\usepackage{pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-plot} +\usepackage{pst-solides3d} +\usepackage{pst-node} +\usepackage{pstricks-add} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}\the\year}} +\def\textat{\char064} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} + +\addbibresource{PSTricks.bib} + +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- 2016}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty} -- \texttt{pstricks-pdf.sty}} +%-------------------------------------------------------------------------------------- + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (\pstricksFV -- \pstricksFD)} +%-------------------------------------------------------------------------------------- +\subsection{refangle} + +This version fixes a bug with \verb|pst@refangle| which is used inside PostScript. + +\begin{LTXexample}[pos=t] +\begin{pspicture}(-1,-1)(10,3.5) +\psparametricplot[algebraic]{0}{9}{t^2/9 | sin(t)+1}% +\pscurvepoints{0}{9}{(t^2)/9 | sin(t)+1}{P}% +\pspolylineticks[metricInitValue=1,ticksize=-2pt 2pt,Os=1,Ds=.2]{P}{ ds }{1}{56}% +\pspolylineticks[metricInitValue=1,Os=1,Ds=2]{P}{ ds }{0}{6}% +\multido{\iA=1+1,\iB=3+2}{5}{\Put{6pt;(PNormal\iA)}(PTick\iA){\tiny \iB}} +\end{pspicture} +\end{LTXexample} + +\begin{sloppypar} +There is a new optional argument \Lkeyword{draft} which has the same meaning as +the one for \Lcs{includegraphics}. The PSTricks image is not drawn, only the +area of the \Lenv{pspicture} coordinates is seen by a rectangle (only for \LaTeX). +\end{sloppypar} + +\begin{LTXexample}[pos=t] +\psset{draft} +\begin{pspicture}(-1,-1)(10,3.5) +\psparametricplot[algebraic]{0}{9}{t^2/9 | sin(t)+1}% +\pscurvepoints{0}{9}{(t^2)/9 | sin(t)+1}{P}% +\pspolylineticks[metricInitValue=1,ticksize=-2pt 2pt,Os=1,Ds=.2]{P}{ ds }{1}{56}% +\pspolylineticks[metricInitValue=1,Os=1,Ds=2]{P}{ ds }{0}{6}% +\multido{\iA=1+1,\iB=3+2}{5}{\Put{6pt;(PNormal\iA)}(PTick\iA){\tiny \iB}} +\end{pspicture} +\end{LTXexample} + + +\subsection{\Lcs{newpsstyle}} + +The command \Lcs{newpsstyle} has a new syntax: + +\begin{BDef} +\Lcs{newpssytle}\OptArg{package name}\Largb{name}\Largb{definitions} +\end{BDef} + +For example + +\begin{verbatim} +\newpsstyle[pst-shell]{Epiteonium}{D=1,A=9.5,alpha=85.9,beta=9,mu=0,Omega=0, + phi=81,a=2.1,b=1.6,L=1.3,P=-60,W1=200,W2=20,N=8.3} +\end{verbatim} + + +\clearpage +\nocite{*} +%\bibliographystyle{plain} +\printbibliography + +\printindex + + +\end{document} + + diff --git a/graphics/pstricks/base/doc/pst-news17.pdf b/graphics/pstricks/base/doc/pst-news17.pdf Binary files differnew file mode 100644 index 0000000000..e3d09c094d --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news17.pdf diff --git a/graphics/pstricks/base/doc/pst-news17.tex b/graphics/pstricks/base/doc/pst-news17.tex new file mode 100644 index 0000000000..53cf23c2ce --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news17.tex @@ -0,0 +1,226 @@ +%% $Id: pst-news17.tex 699 2017-12-31 10:27:45Z herbert $ +\documentclass[11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small, + headinclude=false,footinclude=false,twoside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage[utf8]{inputenc} +\usepackage{pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-plot} +\usepackage{pst-solides3d} +\usepackage{pst-node} +\usepackage{pstricks-add} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}\the\year}} +\def\textat{\char064} +\usepackage{biblatex} +\addbibresource{PSTricks.bib} + +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- \the\year}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty} -- \texttt{pstricks-pdf.sty}} +%-------------------------------------------------------------------------------------- + +There is now a new optional argument for the package: \Loption{psfonts}. If it is +enabled PSTricks will use the original PostScript fonts like Helvetica, Times, \ldots. +The default is to use the URW fonts (Nimbus Roman, Nimbus Sans, \ldots) which are embedded by default! +The PostScript fonts are only embedded if present on your system. + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks-tex.tex}} +%-------------------------------------------------------------------------------------- +This package collects all additional latex macros which must be definied +when running PSTricks with tex. They all moved from the base \texttt{pstricks.tex} into +this new file. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (v. 2.76 -- 2017/09/17)} +%-------------------------------------------------------------------------------------- + + +\subsection{PostScript Fonts} +This version of PSTricks uses the Ghostscript fonts from URW instead of the +original base 14 fonts of PostScript. For example: instead of Helvetica we use +NimbusSanL-Regu. The URW fonts are always embedded in the created ps or pdf output. +This is not the default for the PostScript fonts. You change this setting with the optional +argument to \LPack{pstricks.sty}. + + +\subsection{Error message} + +Using PSTricks with \Lprog{pdflatex} will work only when using package +\LPack{auto-pst-pdf} and running the \TeX-file with + +\begin{verbatim} +pdflatex -shell-escape <file> +\end{verbatim} + +otherwise you'll get an error message which was misleading in the past: + +\begin{verbatim} +[...] +! Undefined control sequence. +<recently read> \c@lor@to@ps +\end{verbatim} + +This changes now to + + +\begin{verbatim} +[...] +! Undefined control sequence. +\c@lor@to@ps ->\PSTricks + _Not_Configured_For_This_Format +\end{verbatim} + +\subsection{Random colors} +There are now four predefined random ''colors``: + +\begin{verbatim} + \definecolor[ps]{randomgray}{gray}{Rand}% + \definecolor[ps]{randomrgb}{rgb}{Rand Rand Rand}% + \definecolor[ps]{randomcmyk}{cmyk}{Rand Rand Rand Rand}% + \definecolor[ps]{randomhsb}{hsb}{Rand Rand Rand}% +\end{verbatim} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomgray,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomrgb,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomcmyk,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomhsb,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + + +The random counter can be initialized with \verb|\pstVerb{rrand srand}|. + +\subsection{refangle} + +This version fixes a bug with \verb|pst@refangle| which is used inside PostScript. + +\begin{LTXexample}[pos=t] +\begin{pspicture}(-1,-1)(10,3.5) +\psparametricplot[algebraic]{0}{9}{t^2/9 | sin(t)+1}% +\pscurvepoints{0}{9}{(t^2)/9 | sin(t)+1}{P}% +\pspolylineticks[metricInitValue=1,ticksize=-2pt 2pt,Os=1,Ds=.2]{P}{ ds }{1}{56}% +\pspolylineticks[metricInitValue=1,Os=1,Ds=2]{P}{ ds }{0}{6}% +\multido{\iA=1+1,\iB=3+2}{5}{\Put{6pt;(PNormal\iA)}(PTick\iA){\tiny \iB}} +\end{pspicture} +\end{LTXexample} + +\begin{sloppypar} +There is a new optional argument \Lkeyword{draft} which has the same meaning as +the one for \Lcs{includegraphics}. The PSTricks image is not drawn, only the +area of the \Lenv{pspicture} coordinates is seen by a rectangle (only for \LaTeX). +\end{sloppypar} + +\begin{LTXexample}[pos=t] +\psset{draft} +\begin{pspicture}(-1,-1)(10,3.5) +\psparametricplot[algebraic]{0}{9}{t^2/9 | sin(t)+1}% +\pscurvepoints{0}{9}{(t^2)/9 | sin(t)+1}{P}% +\pspolylineticks[metricInitValue=1,ticksize=-2pt 2pt,Os=1,Ds=.2]{P}{ ds }{1}{56}% +\pspolylineticks[metricInitValue=1,Os=1,Ds=2]{P}{ ds }{0}{6}% +\multido{\iA=1+1,\iB=3+2}{5}{\Put{6pt;(PNormal\iA)}(PTick\iA){\tiny \iB}} +\end{pspicture} +\end{LTXexample} + + +\subsection{\nxLcs{newpsstyle}} + +The command \Lcs{newpsstyle} has a new syntax: + +\begin{BDef} +\Lcs{newpsstyle}\OptArg{package name}\Largb{name}\Largb{definitions} +\end{BDef} + +For example + +\begin{verbatim} +\newpsstyle[pst-shell]{Epiteonium}{D=1,A=9.5,alpha=85.9,beta=9,mu=0,Omega=0, + phi=81,a=2.1,b=1.6,L=1.3,P=-60,W1=200,W2=20,N=8.3} +\end{verbatim} + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.pro}} +%-------------------------------------------------------------------------------------- + +A full circle has by default an angle of 360 degrees. +Setting the circle with \Lcs{degrees}\Largs{17} to another value doesn't work for the +PostScript function \texttt{PtoC} (Polat to Cartesian -- $(r,\phi)\rightarrow (x,y)$). +Now there is a \texttt{PtoCrel} for the new definition +which now takes +the setting of \Lcs{pst@angleunit} into account. + +\bigskip +\begin{LTXexample}[pos=t] +\degrees[16] +\begin{pspicture}[showgrid](-2,-2)(2,2) +\psline[linecolor=blue](!1.8 2 PtoCrel)% 45 degrees +\end{pspicture} +\end{LTXexample} + +The command \Lcs{framed} was build by clockwise line sequence. Now it is the +other way round to get the same behaviour as for all other commands +with closed lines. + + +There are some new PS functions + +\begin{verbatim} +/AnytoDeg { pst@angleunit } def +/DegtoAny { 1 pst@angleunit div} def +/AnytoRad { AnytoDeg DegtoRad } def +/RadtoAny { RadtoDeg DegtoAny } def +\end{verbatim} + +See \LPack{pst-node} documentation for an example. + + +\clearpage +\nocite{*} +\printbibliography + +\printindex + + +\end{document} + diff --git a/graphics/pstricks/base/doc/pst-news18.pdf b/graphics/pstricks/base/doc/pst-news18.pdf Binary files differnew file mode 100644 index 0000000000..00b1435743 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news18.pdf diff --git a/graphics/pstricks/base/doc/pst-news18.tex b/graphics/pstricks/base/doc/pst-news18.tex new file mode 100644 index 0000000000..dde1638e58 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news18.tex @@ -0,0 +1,216 @@ +%% $Id: pst-news17.tex 699 2017-12-31 10:27:45Z herbert $ +\documentclass[11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small, + headinclude=false,footinclude=false,twoside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage{pstricks,pst-node} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-plot} +\usepackage{pst-solides3d} +\usepackage{pst-node} +\usepackage{pst-calculate} +\usepackage{pstricks-add} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}\the\year}} +\def\textat{\char064} +\usepackage{dtk-logos} +\usepackage{biblatex} +\addbibresource{PSTricks.bib} + +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- \the\year}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty} -- \texttt{pstricks-pdf.sty}} +%-------------------------------------------------------------------------------------- + +There is now a new optional argument for the package: \Loption{ckeckengine}, which will +be used in later versions. + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks-tex.tex}} +%-------------------------------------------------------------------------------------- +This package collects all additional latex macros which must be definied +when running PSTricks with tex. They all moved from the base \texttt{pstricks.tex} into +this new file. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (v. 2.89 -- 2018/12/16)} +%-------------------------------------------------------------------------------------- + +Use the \Lcs{long} definition for \Lcs{@fornoop} to be compatible to the latest +changes in \LaTeX. + +In old versions the macro \Lcs{rput} can't be used with the key-value setting. The latest version +of \Lfile{pstricks.tex} defines a modified \Lcs{rput} which ckecks first if a following +optional argument has the old behaviour, eg \Lcs{rput}\texttt{[lb]\{...\}} or +a key/value setting like \Lcs{rput}\texttt{[ref=lb,rot=...](...)}. However, there should be no +change in the output and, of course, it makes no sense to mix the old and new setting in \emph{one} +\Lcs{rput} macro. The setting refers only to the optional arguments which are valid for \Lcs{rput}: + +\begin{LTXexample}[width=6cm] +\begin{pspicture}[showgrid](6,5) +\rput[ref=rt](3,2){% + \psframe[linecolor=red](3,3)} +\rput[lb](0,0){\psframe(3,3)} +\rput{45}(3,0.5){\psframe(3,3)} +\end{pspicture} +\end{LTXexample} + +\subsection{PostScript Fonts} +This version of PSTricks uses the Ghostscript fonts from URW instead of the +original base 14 fonts of PostScript. For example: instead of Helvetica we use +NimbusSanL-Regu. The URW fonts are always embedded in the created ps or pdf output. +This is not the default for the PostScript fonts. You change this setting with the optional +argument to \LPack{pstricks.sty}. + + +\subsection{Error message} + +Using PSTricks with \Lprog{pdflatex} will work only when using package +\LPack{auto-pst-pdf} and running the \TeX-file with + +\begin{verbatim} +pdflatex -shell-escape <file> +\end{verbatim} + +otherwise you'll get an error message which was misleading in the past: + +\begin{verbatim} +[...] +! Undefined control sequence. +<recently read> \c@lor@to@ps +\end{verbatim} + +This changes now to + + +\begin{verbatim} +[...] +! Undefined control sequence. +\c@lor@to@ps ->\PSTricks + _Not_Configured_For_This_Format +\end{verbatim} + +\subsection{Random colors} +There are now four predefined random ''colors``: + +\begin{verbatim} + \definecolor[ps]{randomgray}{gray}{Rand}% + \definecolor[ps]{randomrgb}{rgb}{Rand Rand Rand}% + \definecolor[ps]{randomcmyk}{cmyk}{Rand Rand Rand Rand}% + \definecolor[ps]{randomhsb}{hsb}{Rand Rand Rand}% +\end{verbatim} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomgray,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomrgb,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomcmyk,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\begin{pspicture}(10,5) +\multido{\rA=0.0+0.1}{50}{\psline[linecolor=randomhsb,linewidth=1mm](0,\rA)(10,\rA)} +\end{pspicture} +\end{LTXexample} + + +The random counter can be initialized with \verb|\pstVerb{rrand srand}|. + + +\subsection{Optional argument \texttt{xetex}} +The output driver \Lprog{xdvipdfmx} for using \XeTeX\ or \XeLaTeX\ is not fully +compatible to \Lprog{dvips}. Especially some node operations will not work. If the +\LaTeX\ package detects a programm run with \XeLaTeX\ it automatically loads the file +\Lfile{pstricks-xetex.def} which defines some macros with a new name to keep the existing +ones. By now there is only +\Lcs{NCput}, which is the same as \Lcs{ncput}, but works with \XeLaTeX. + +If someone wants to use these macros though he/she runs not \XeLaTeX\ then these macros are +available too by using the optional argument \Loption{xetex}: + +\begin{verbatim} +\usepackage[xetex]{pstricks} +\end{verbatim} + + + + + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.pro}} +%-------------------------------------------------------------------------------------- + +A full circle has by default an angle of 360 degrees. +Setting the circle with \Lcs{degrees}\Largs{17} to another value doesn't work for the +PostScript function \texttt{PtoC} (Polat to Cartesian -- $(r,\phi)\rightarrow (x,y)$). +Now there is a \texttt{PtoCrel} for the new definition +which now takes +the setting of \Lcs{pst@angleunit} into account. + +\bigskip +\begin{LTXexample}[pos=t] +\degrees[16] +\begin{pspicture}[showgrid](-2,-2)(2,2) +\psline[linecolor=blue](!1.8 2 PtoCrel)% 45 degrees +\end{pspicture} +\end{LTXexample} + +The command \Lcs{framed} was build by clockwise line sequence. Now it is the +other way round to get the same behaviour as for all other commands +with closed lines. + + +There are some new PS functions + +\begin{verbatim} +/AnytoDeg { pst@angleunit } def +/DegtoAny { 1 pst@angleunit div} def +/AnytoRad { AnytoDeg DegtoRad } def +/RadtoAny { RadtoDeg DegtoAny } def +\end{verbatim} + +See \LPack{pst-node} documentation for an example. + + +\clearpage +\nocite{*} +\printbibliography + +\printindex + + +\end{document} + diff --git a/graphics/pstricks/base/doc/pst-news19.pdf b/graphics/pstricks/base/doc/pst-news19.pdf Binary files differnew file mode 100644 index 0000000000..03e52eaaa5 --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news19.pdf diff --git a/graphics/pstricks/base/doc/pst-news19.tex b/graphics/pstricks/base/doc/pst-news19.tex new file mode 100644 index 0000000000..5c7a52d60a --- /dev/null +++ b/graphics/pstricks/base/doc/pst-news19.tex @@ -0,0 +1,184 @@ +%% $Id: pst-news19.tex 927 2019-01-30 15:11:30Z herbert $ +\PassOptionsToPackage{useCalc}{pstricks} +\documentclass[11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small, + headinclude=false,footinclude=false,twoside]{pst-doc} +\listfiles +\let\Lfile\LFile +\usepackage{pstricks} +\let\pstnodeFV\fileversion +\let\pstnodeFD\filedate +\usepackage{pst-node} +\usepackage{pst-plot} +\usepackage{pst-solides3d} +\usepackage{pst-node} +\usepackage{pst-calculate} +\usepackage{pstricks-add} +\usepackage{xkvview} +\renewcommand\bgImage{\psscalebox{15}{\color{blue!20}\the\year}} +\def\textat{\char064} +\usepackage{dtk-logos} +\usepackage{biblatex} +\addbibresource{PSTricks.bib} + +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, + escapechar=?} +\begin{document} + +%\psset{PstDebug=1} +\title{\texttt{News -- \the\year}\\ \Large new macros and bugfixes for the +basic package \nxLFile{pstricks}} +\author{Herbert Voß} +\date{\today} + +\maketitle + +\clearpage +\tableofcontents + +\clearpage +\part{\texttt{pstricks} -- package} + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.sty} -- \texttt{pstricks-pdf.sty}} +%-------------------------------------------------------------------------------------- + +There is now a new optional argument for the package: \Loption{ckeckengine}, which will +be used in later versions. + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks-tex.tex}} +%-------------------------------------------------------------------------------------- +This package collects all additional latex macros which must be definied +when running PSTricks with tex. They all moved from the base \texttt{pstricks.tex} into +this new file. + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.tex} (v. 2.94 -- 2019/01/07)} +%-------------------------------------------------------------------------------------- + +There is a new macro called \Lcs{psLine} (uppercase L!) which can have +only one or two pairs of coordinates. Remember that \Lcs{psline} can have more. +With \Lcs{psLine} and an defined arrow you'll get nothing for something +like \verb|\psLine{->}{1,1)(1,1)|, whereas \Lcs{psline} will output the arrowtip! +This behaviour of \Lcs{psLine} maybe helpful for animations where a speedvector +or a vector +is shown with its components and one do not really knows the coordinates. + +\begin{BDef} +\Lcs{psLine}\OptArgs\OptArg{\Largr{$x_0,y_0$}}\Largr{$x_1,y_1$}\\ +\Lcs{psLineSegments}\OptArgs\Largr{$x_0,y_0$}\Largr{$x_1,y_1$}\ldots\Largr{$x_{n-1},y_{n-1}$}\Largr{$x_n,y_n$} +\end{BDef} + +If $P_0$ is missing for \Lcs{psLine} then $(0,0)$ as first point is assumed. \Lcs{psLineSegments} expects always +pairwise coordinates. + + +\begin{LTXexample}[width=7cm] +\psset{unit=2cm} +\begin{pspicture}(-1,-1)(1,1) +\degrees[12] + \pscircle{1} + \multido{\iA=0+1,\iB=3+1}{12}{% + \pnode(1;\iA){R} + \psLine[linecolor=gray,linestyle=dashed, + linewidth=0.4pt](R) + \psset{arrows=->,arrowscale=1.5,linewidth=1.5pt} + \rput(R){% + \psLine[linecolor=blue]({1;\iB}|0,0) + \psLine[linecolor=red](0,0|{1;\iB}) + \psLine(1;\iB)}% +} +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[width=4cm] +\psset{unit=0.5cm} +\begin{pspicture}(6,6) +\psLineSegments[linecolor=blue]{->}(0,0)(0,1)(0,2)(0,3)(0,4)(1,4)% + (3,4)(4,4)(4,3)(4,1)(4,0)(2,0) +\end{pspicture} +\end{LTXexample} + + +There is a new experimental feature, which allows algebraic notation for +coordinates. It needs + +\begin{verbatim} +\usepackage[useCalc]{pstricks} +\end{verbatim} + +\begin{LTXexample}[width=5.5cm] +\begin{pspicture}[showgrid](5,5) +\psline[linecolor=blue]{->}% + (0,4/3*0.5)(0.6*sqrt{33}, sqrt{20+0.3}) +\end{pspicture} +\end{LTXexample} + + + + +\subsection{Error message} + +Using PSTricks with \Lprog{pdflatex} will work only when using package +\LPack{auto-pst-pdf} and running the \TeX-file with + +\begin{verbatim} +pdflatex -shell-escape <file> +\end{verbatim} + +otherwise you'll get an error message which was misleading in the past: + +\begin{verbatim} +[...] +! Undefined control sequence. +<recently read> \c@lor@to@ps +\end{verbatim} + +This changes now to + + +\begin{verbatim} +[...] +! Undefined control sequence. +\c@lor@to@ps ->\PSTricks + _Not_Configured_For_This_Format +\end{verbatim} + + +\subsection{Optional argument \texttt{xetex}} +The output driver \Lprog{xdvipdfmx} for using \XeTeX\ or \XeLaTeX\ is not fully +compatible to \Lprog{dvips}. Especially some node operations will not work. If the +\LaTeX\ package detects a programm run with \XeLaTeX\ it automatically loads the file +\Lfile{pstricks-xetex.def} which defines some macros with a new name to keep the existing +ones. By now there is only +\Lcs{NCput}, which is the same as \Lcs{ncput}, but works with \XeLaTeX. + +If someone wants to use these macros though he/she runs not \XeLaTeX\ then these macros are +available too by using the optional argument \Loption{xetex}: + +\begin{verbatim} +\usepackage[xetex]{pstricks} +\end{verbatim} + + + + + + +%-------------------------------------------------------------------------------------- +\section{\texttt{pstricks.pro}} +%-------------------------------------------------------------------------------------- + + + +\clearpage +\nocite{*} +\printbibliography + +\printindex + + +\end{document} + diff --git a/graphics/pstricks/base/doc/pst-user.pdf b/graphics/pstricks/base/doc/pst-user.pdf Binary files differnew file mode 100644 index 0000000000..bac64d06dd --- /dev/null +++ b/graphics/pstricks/base/doc/pst-user.pdf diff --git a/graphics/pstricks/base/doc/pstricks-bug.tex b/graphics/pstricks/base/doc/pstricks-bug.tex new file mode 100644 index 0000000000..b5f9ba2c32 --- /dev/null +++ b/graphics/pstricks/base/doc/pstricks-bug.tex @@ -0,0 +1,547 @@ +%% BEGIN pstricks.bug +% LAST MODIFIED: October 3, 1994 +% The latest version of this file can be obtained from Princeton.EDU. + +% This file list some bugs and latebreaking news for PSTricks, +% version 0.93a, released March 12, 1993. + +% PROBLEMS: + +% 1. \scalebox can report missing number errors or worse, depending +% on what is in its argument. +% PATCH: Input this file. +% +% 2. palette.tex keeps loading pstricks.tex. +% PATCH: In palette.tex, change +% \ifx\pstricksloaded ... +% to +% \ifx\PSTricksLoaded ... +% +% 3. \pscirclebox doesn't leave the right amount of space. +% PATCH: Input this file. +% +% 4. \ncbar doesn't work right. +% PATCH: Input this file (AFTER inputting pst-node.tex). +% +% 5. Nested \multips doesn't work. +% PATCH: Input this file. +% +% 6. \psgrid sometimes gets the size wrong by 1 unit. +% PATCH: Input this file. +% +% 7. \begin{overlaybox} ... \end{overlaybox} cannot be used instead +% of \overlaybox ... \endoverlaybox. +% PATCH: Input this file. +% +% 8. Overlays don't interact properly with rotation. +% PATCH: Input this file. +% +% 9. Overlays don't work properly with nodes. Specifically, they only work +% when the nodes and node connections and labels are all on the same +% overlay. +% PATCH: Input this file, and include the command \AltOverlayMode +% before the overlay in which you want to use nodes (before the whole +% overlay box or slide, or in the beginning of the document). +% Warning: Normally, overlay material is made invisible by translating +% it off the page. With \AltOverlayMode, it is done by setting a small +% clip path somewhere off the page. The material is made visible again +% by issuing "initclip", which resets the clipping path completely. +% This makes it incompatible with any other clipping tricks. +% +% 10. SpecialCoor and the : version of nrot do not work when ;!|: +% do not have \catcode 12 (e.g., with french.sty). +% +% PATCH: Input this file, and read the following: +% +% FAQ: What non-standard category codes and active characters are +% compatible with PSTricks? +% +% Using non-standard category codes can confuse PSTricks in many ways. +% What follows is not comprehensive. +% +% Characters ()[],*=- +% These must have category code 3, 7, 8, 11 or 12. +% The category code must be set BEFORE inputting the PSTricks files. +% +% Characters <>|;!: +% Same as above, but category code 13 (``active'') is also OK, in +% which case the code must be 12 when the PSTricks files are input. +% +% Characters \{}@#$%^&_ +% These should have their usual category codes when PSTricks files +% are input, but then they can be set arbitrarily. +% +% Characters +"'.?/~` +% No restrictions, but generally these should have category code 12 +% when the PSTricks files are input. +% +% 11. Gradient fill style doesn't work the gradmidpoint=0 or gradmidpoint=1. +% WORKAROUND: Until the next release, set gradmidpoint +% close to, but not too close to or equal to, 0 or 1. +% +% 12. If using \pscharpath with protected fonts, the dashed and dotted +% linestyles, setting shadow=true, and \pstextpath produce an +% invalidaccess error. +% WORKAROUND: Until the next release, do not use those features with +% \pscharpath and protected fonts. In the next release, the dashed +% and dotted line styles will work, and shadow=true and \pstextpath +% will neither work nor produce errors with protected fonts. +% +% 13. \scalebox and \scaleboxto do not work properly with negative scaling. +% +% 14. With \psplot, setting labels=y or ticks=y does not suppress labels +% or ticks on the x-axis. +% PATCH: Get version 0.93a-patched of pst-plot.tex, distributed +% which is part of the 0.93a distribution starting March 30, 1994. +% +% 15. When lines are very short, linestyle=dash may cause an error. +% PATCH: Input this file. +% +% 16. \clipbox does not work. +% PATCH: Input this file. +% +% 17. Various nodes are missing \leavevmode, which can cause irregularities +% if they occur at the beginning of a paragraph. +% WORKAROUND: Put \leavevmode before the offending node command. +% E.g., \leavevmode\rnode{foo} +% +% 18. The Textures entry in the configuration file has several problems. +% WORKAROUND: Contact tvz@Princeton.EDU to get a new pstricks.con. +% +% 19. There are two problems with using PSTricks without a header file: +% 1. pst-make.tex gives an error. +% 2. You get a PostScript error. +% WORKAROUND: +% 1. At the end of pst-make.tex, change to line +% \MakeInputHpst-coil.doc}{pst-coil.tex} +% to +% \MakeInput{pst-coil.doc}{pst-coil.tex} +% (The `H' become `{'). +% 2. In pstricks.doc (before running pst-make.tex) or in +% pstricks.tex (after running pst-make.tex), add the line +% /T /translate load def +% between the lines +% /CP /currentpoint load def +% /ED { exch def } bind def +% +% 20. Mixed coordinates do not work with \SpecialCorr +% PATCH: Input this file. +% +% 21. Axis labels in \psplot use a hyphen instead of a minus sign. +% PATCH: Get version 0.93a-patched of pst-plot.tex, +% which is part of the 0.93a distribution starting March 30, 1994. +% +% 22. For certain plotstyle's the \fileplot command does not work. +% PATCH: Get version 0.93a-patched of pst-plot.tex, +% which is part of the 0.93a distribution starting March 30, 1994. +% +% 23. \scale does not work in \pscustom. +% PATCH: Input this file. + +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11 + +% 1. +\def\pst@divide#1#2#3{% + \pst@@divide{#1}{#2}% + \pst@dimtonum\pst@dimg{#3}} +\def\pst@@divide#1#2{% + \pst@dimg=#1\relax + \pst@dimh=#2\relax + \pst@cntg=\pst@dimh + \pst@cnth=67108863 + \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide + \divide\pst@dimg\pst@cntg} +\def\pst@@@divide{% + \ifnum + \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth + \multiply\pst@dimg\sixt@@n + \else + \divide\pst@cntg\sixt@@n + \fi} +\def\pst@getscale#1#2{% + \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil + \@psttrue + \ifdim\pst@tempg\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def\pst@tempg{1 }% + \@pstfalse + \fi + \ifdim\pst@temph\p@=\z@ + \if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi + \def\pst@temph{1 }% + \fi + \edef#2{\pst@tempg\space \pst@temph\space scale }% + \ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@ + \def#2{}% + \fi\fi} +\def\scalebox#1{\pst@makebox{\@scalebox{#1}}} +\def\@scalebox#1{% + \begingroup + \pst@getscale{#1}\pst@tempa + \let\pst@tempc\pst@tempg + \let\pst@tempd\pst@temph + \@@scalebox + \endgroup} +\def\@@scalebox{% + \leavevmode + \hbox{% + \ifdim\pst@tempd\p@<\z@ + \pst@dimg=\pst@tempd\ht\pst@hbox + \pst@dimh=\pst@tempd\dp\pst@hbox + \dp\pst@hbox=-\pst@dimg + \ht\pst@hbox=-\pst@dimh + \else + \ht\pst@hbox=\pst@tempd\ht\pst@hbox + \dp\pst@hbox=\pst@tempd\dp\pst@hbox + \fi + \pst@dima=\pst@tempc\wd\pst@hbox + \ifdim\pst@dima<\z@\kern-\pst@dima\fi + \pst@Verb{CP CP translate \pst@tempa \tx@NET}% + \hbox to \z@{\box\pst@hbox\hss}% + \pst@Verb{% + CP CP translate + 1 \pst@tempc div 1 \pst@tempd div scale + \tx@NET}% + \ifdim\pst@dima>\z@\kern\pst@dima\fi}} +\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}} +\def\@scaleboxto(#1,#2){% + \begingroup + \pssetlength\pst@dima{#1}% + \pssetlength\pst@dimb{#2}% + \ifdim\pst@dima=\z@\else + \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc + \edef\pst@tempc{\pst@tempc\space}% + \fi + \ifdim\pst@dimb=\z@ + \ifdim\pst@dima=\z@ + \@pstrickserr{% + \string\scaleboxto\space dimensions cannot both be zero}\@ehpa + \def\pst@tempa{}% + \def\pst@tempc{1 }% + \def\pst@tempd{1 }% + \else + \let\pst@tempd\pst@tempc + \fi + \else + \pst@dimc=\ht\pst@hbox + \advance\pst@dimc\dp\pst@hbox + \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd + \edef\pst@tempd{\pst@tempd\space}% + \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi + \fi + \edef\pst@tempa{\pst@tempc \pst@tempd scale }% + \@@scalebox + \endgroup} + +% 3. +\def\pscirclebox@ii#1{% + \begingroup + \pst@useboxpar + \setbox\pst@hbox=\hbox{#1\pscirclebox@iii\box\pst@hbox}% + \ifpsboxsep + \pst@dima=.5\wd\pst@hbox + \pst@dimb=\ht\pst@hbox + \advance\pst@dimb\dp\pst@hbox + \divide\pst@dimb 2 + \pst@pyth\pst@dima\pst@dimb\pst@dimc + \advance\pst@dimc\pslinewidth + \advance\pst@dimc\psframesep + \advance\pst@dimb-\pst@dimc + \setbox\pst@hbox=\hbox to2\pst@dimc{% + \hss + \vbox{\kern-\pst@dimb\box\pst@hbox}% + \hss}% + \advance\pst@dimb-\dp\pst@hbox + \dp\pst@hbox=-\pst@dimb + \fi + \leavevmode\box\pst@hbox + \endgroup} + +% 4. +\pst@def{NCBar}<% + \tx@GetPos + \tx@GetArms + /mtrx AngleA matrix rotate def + x1a y1a mtrx itransform pop + x2a y2a mtrx itransform pop sub + dup 0 mtrx transform + 3 -1 roll 0 gt + { /y2a exch y2a add def /x2a exch x2a add def } + { /y1a exch neg y1a add def /x1a exch neg x1a add def } + ifelse + mark + x2 y2 x2a y2a x1a y1a x1 y1 + tx@Dict begin false \tx@Line end + /LPutVar [ x2 y2 x2 y2 x2a y2a x1a y1a x1 y1 ] cvx def + /LPutPos { LPutVar \tx@AnglesMP } def> + +% 5. +\def\multips{\begingroup\pst@getrputrot\multips@i} +\def\multips@i(#1){\@ifnextchar({\@multips@ii(#1)}{\@multips@ii(0,0)(#1)}} +\def\@multips@ii(#1)(#2)#3#4{% + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \pst@cnta=#3\relax + \init@pscode + \addto@pscode{% + \pst@tempa T \the\pst@cnta\space \pslbrace + gsave \ifx\pst@rot\@empty\else\pst@rot rotate \fi }% + \hbox to\z@{% + \def\init@pscode{% + \addto@pscode{% + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor}}% + \def\use@pscode{\addto@pscode{grestore}}% + \def\psclip##1{\pst@misplaced\psclip}% + \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% + #4}% + \addto@pscode{grestore \pst@coor T \psrbrace repeat}% + \leavevmode + \use@pscode + \endgroup + \ignorespaces} + +% 6. +\pst@def{Grid}<% + newpath + /a 4 string def % Empty string + /b ED % Label size + /c ED % Label color procedure. + /n ED % Number of grid dots + cvi dup 1 lt { pop 1 } if /s ED % Number subdivisions +% Stack: x-unit y-unit + s div dup 0 eq { pop 1 } if /dy ED % y-distance between lines. + s div dup 0 eq { pop 1 } if /dx ED % x-distance between lines. +% These two are integer multiples of dx and dy: + dy div round dy mul /y0 ED % y-origin. + dx div round dx mul /x0 ED % x-origin. +% These four are integers, measuring dx and dy units: + dy div round cvi /y2 ED % y2 + dx div round cvi /x2 ED % x2 + dy div round cvi /y1 ED % y1 + dx div round cvi /x1 ED % x1 + /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def % Sign of y2-y1 + /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def % Sign of x2-x1 +% Set up the font and a few parameters for making labels: + b 0 gt + { /z1 b 4 div CLW 2 div add def + /Helvetica findfont b scalefont setfont + /b b .95 mul CLW 2 div add def } + if +% If Level 2, use automatic stroke adjustment. Otherwise, do by hand: + systemdict /setstrokeadjust known % Level 2 + { true setstrokeadjust /t { } def } + { /t { + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + } bind def } + ifelse +% Now make the vertical lines: + gsave +% Make dotted line, if appropriate + n 0 gt + { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } + { 2 setlinecap } + ifelse +% Initialize index: + /i x1 def +% Find y-values of endpoints. Adjust these if lines are dotted because +% otherwise rounding errors or stroke adjustment can cause first or +% last dot to be dropped. (Only GhostScript has exhibited problem of +% dropping first dot. This is probably a bug.) + /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def + /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def +% Number of lines (Max 1000): + x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if + { +% Make label: + i dx mul dup y0 moveto + b 0 gt + { gsave + c % Color + i a cvs dup % Index, as a string + stringwidth pop /z2 ED % Stringwidth + w 0 gt {z1} {z1 z2 add neg} ifelse + h 0 gt {b neg} {z1} ifelse + rmoveto + show + grestore + } if +% Make line ( on stack: i dx mul ): + dup t f moveto g t L stroke +% Advance index: + /i i w add def + } repeat + grestore +% Now make horizontal lines: + gsave + n 0 gt + { 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } + { 2 setlinecap } + ifelse + /i y1 def + /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def + /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def + y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if + { newpath + i dy mul dup x0 exch moveto + b 0 gt + { gsave + c + i a cvs dup + stringwidth pop /z2 ED + w 0 gt {z1 z2 add neg} {z1} ifelse + h 0 gt {z1} {b neg} ifelse + rmoveto + show + grestore + } if + dup f exch t moveto g exch t L stroke + /i i h add def + } repeat + grestore> + +% 7. +\def\overlaybox{% + \global\setbox\theoverlaybox=\hbox\bgroup + \begingroup + \let\psoverlay\pst@overlay + \def\overlaybox{% + \@pstrickserr{Overlays cannot be nested}\@eha}% + \def\putoverlaybox{% + \@pstrickserr{You must end the overlay box + before using \string\putoverlaybox}}% + \psoverlay{main}% + \ignorespaces} + +% 8 and 9. +\pst@def{BeginOL}<% + dup (all) eq exch TheOL eq or + { IfVisible not { Visible /IfVisible true def } if } + { IfVisible { Invisible /IfVisible false def } if } + ifelse> +\pst@def{InitOL}<% + /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def + /Visible { CP OLUnit idtransform T moveto } def + /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def + /BOL { \tx@BeginOL } def /IfVisible true def> +\def\AltOverlayMode{% + \def\pst@initoverlay##1{% + \pst@Verb{% + \tx@InitOL + /Visible { initclip } def + /Invisible { + CP newpath OLUnit itransform moveto clip newpath moveto + } def + /TheOL (##1) def}}} + +% 10. +\def\SpecialCoor{% + \def\pst@@getcoor##1{% + \begingroup + \pst@activecoor + \xdef\pst@tempg{##1}% + \endgroup + \expandafter\special@coor\pst@tempg||\@nil}% + \def\pst@@getangle##1{% + \begingroup + \pst@activecoor + \xdef\pst@tempg{##1}% + \endgroup + \expandafter\special@angle\pst@tempg\@empty)\@nil}% + \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}} +\begingroup + \catcode`\|=13 + \catcode`\;=13 + \catcode`\!=13 + \gdef\pst@activecoor{% + \def|{\string|}% + \def;{\string;}% + \def!{\string!}} +\endgroup +\begingroup + \catcode`\:=13 + \gdef\pst@activerot{\def:{\string:}} +\endgroup +\def\psset@nrot#1{% + \begingroup + \pst@activerot + \pst@expandafter{\@ifnextchar:{\psset@@nrot}{\psset@@rot}}{#1}\@nil + \global\let\pst@tempg\psk@rot + \endgroup + \let\psk@nrot\pst@tempg} + +% 13. See 1. + +% 15. +\pst@def{DashLine}<% + % "a" is set to the length of first and last black segment, as fraction of + % usual black segment. + dup 0 gt + { /a .5 def \tx@PathLength exch div } + { pop /a 1 def \tx@PathLength } + ifelse + /b ED % Pattern should fit evenly in b + /x ED % Length of white segment. + /y ED % Length of black segment. + /z y x add def % Total length of dash pattern. + % If pattern is repeated n times, total length is (nz + 2(a-.5)y). + % Set length to b, solve for n, round, and leave on stack: + % n = round((b - 2(a-.5)y)/z) + b a .5 sub 2 mul y mul sub z \tx@Div round + % Adjust x and y by factor k so that + % (n(kz) + 2(a-.5)(ky)) = b. + % Solve for k and leave two copies on stack: + % k = b/(nz + 2(a-.5)y) + z mul a .5 sub 2 mul y mul add b exch \tx@Div dup + % Scale x and y, set dash, and stroke: + y mul /y ED x mul /x ED + % Make sure x and y are both positive: + x 0 gt y 0 gt and + { [ y x ] 1 a sub y mul } + { [ 1 0 ] 0 } + ifelse + setdash + stroke> + +% 16. +\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} +\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} + +% 20. +\def\mixed@coor#1#2{% + \begingroup + \special@@coor#1;;\@nil + \let\pst@tempa\pst@coor + \special@@coor#2;;\@nil + \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% + \endgroup + \let\pst@coor\pst@tempg} + +% 23. +\def\pst@getscale#1#2{% + \edef\pst@tempg{#1}% + \ifx\pst@tempg\@none + \def#2{}% + \else + \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil + \ifdim\pst@tempg\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def#2{}% + \else + \ifdim\pst@temph\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def#2{}% + \else + \edef#2{\pst@tempg\space \pst@temph\space scale }% + \fi + \fi + \fi} + +\catcode`\@=\TheAtCode\relax +\endinput +%% END pstricks.bug diff --git a/graphics/pstricks/base/doc/pstricks-doc.pdf b/graphics/pstricks/base/doc/pstricks-doc.pdf Binary files differnew file mode 100644 index 0000000000..ac881f0ff0 --- /dev/null +++ b/graphics/pstricks/base/doc/pstricks-doc.pdf diff --git a/graphics/pstricks/base/doc/test-pst.pdf b/graphics/pstricks/base/doc/test-pst.pdf Binary files differnew file mode 100644 index 0000000000..2ac2bd0199 --- /dev/null +++ b/graphics/pstricks/base/doc/test-pst.pdf diff --git a/graphics/pstricks/base/doc/test-pst.tex b/graphics/pstricks/base/doc/test-pst.tex new file mode 100644 index 0000000000..2af57b5daa --- /dev/null +++ b/graphics/pstricks/base/doc/test-pst.tex @@ -0,0 +1,257 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% test-pst.tex --- Various PSTricks tests, from the PSTricks chapter +%% of "The LaTeX Graphics Companion" (by Goossens, Rahtz, +%% Mittelbach, Addison Wesley, 1997) +%% +%% Author : Sebastian RAHTZ (Oxford University - GB) +%% <sebastian.rahtz@computing-services.oxford.ac.uk> +%% Created the : Tue Feb 3 20:37:47 1998 +%% Last mod. by : Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr> +%% Last mod. the : Wed May 5 20:09:18 1999 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass{article} + +\usepackage[latin1]{inputenc} % From LaTeX distribution +\usepackage{calc} % From LaTeX distribution +\usepackage{graphicx} % From LaTeX distribution +\usepackage{ifthen} % From LaTeX distribution +\usepackage{subfigure} % From CTAN/macros/latex/contrib/supported/subfigure +\usepackage{pst-all} % From PSTricks +\usepackage{pst-poly} % From pstricks/contrib/pst-poly +\usepackage{multido} % From PSTricks +\input{random.tex} % From CTAN/macros/generic + +% Take care that on some non Unix systems, you may have to replace +% the / character by, for instance, the : one (\input{lgc:#2.inl}}) +\newcommand{\ExampleSubFigure}[2][0.3333]{% +\subfigure[Example #2]{% + \begin{minipage}[t]{#1\textwidth} + \parbox[b]{\textwidth}{% + \centering + \input{lgc/#2.inl}} + \end{minipage}}} + +\newpsobject{showgrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=6pt} + +% New colors defined +\definecolor{brown}{rgb}{.65, .16, .16} +\definecolor{lightblue}{rgb}{.68, .85, .9} +\definecolor{palegreen}{rgb}{.6, .98, .6} +\definecolor{pink}{rgb}{1, .75, .8} +\definecolor{wheat}{rgb}{.96, .87, .7} + +% Layout changes +\textheight=23cm +\topmargin=-2cm +\textwidth=16cm +\oddsidemargin=0cm +\evensidemargin=0cm + +\begin{document} + +\title{Test file for the PSTricks 97 distribution:\\ + most of the PSTricks examples of\\ + \emph{The \LaTeX{} Graphics Companion}} +\author{Sebastian \textsc{Rahtz} --- March 1997} +\date{Version 1.3 (September 9, 1998)} +\maketitle + +\begin{figure}[!htbp] + \centering + \ExampleSubFigure{4-2-1}% + \ExampleSubFigure{4-2-2}% + \ExampleSubFigure{4-2-3} + \ExampleSubFigure{4-2-4}% + \ExampleSubFigure{4-2-5} + \caption{Section 2} +\end{figure} + +\begin{figure}[!htbp] + \centering + \ExampleSubFigure{4-3-1}% + \ExampleSubFigure{4-3-2} + \caption{Section 3} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure{4-4-1}% + \ExampleSubFigure{4-4-2}% + \ExampleSubFigure{4-4-3} + \ExampleSubFigure{4-4-4}% + \ExampleSubFigure{4-4-5}% + \ExampleSubFigure{4-4-6} + \ExampleSubFigure{4-4-7}% + \ExampleSubFigure{4-4-8}% + \ExampleSubFigure{4-4-9} + \ExampleSubFigure{4-4-10}% + \ExampleSubFigure{4-4-11}% + \ExampleSubFigure{4-4-12} + \caption{Section 4} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[0.5]{4-5-1}% + \ExampleSubFigure[0.5]{4-5-2} + \ExampleSubFigure[0.75]{4-5-3}% + \ExampleSubFigure[0.25]{4-5-4} + \ExampleSubFigure[0.15]{4-5-5}% + \ExampleSubFigure[0.25]{4-5-6}% + \ExampleSubFigure[0.2]{4-5-7}% + \ExampleSubFigure[0.2]{4-5-8}% + \ExampleSubFigure[0.2]{4-5-9} + \ExampleSubFigure[0.5]{4-5-10}% + \ExampleSubFigure[0.5]{4-5-11} + \caption{Section 5-A} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-5-13} + \ExampleSubFigure[1]{4-5-14} + \ExampleSubFigure[1]{4-5-16} + \caption{Section 5-B} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure{4-6-1}% + \ExampleSubFigure{4-6-2}% + \ExampleSubFigure{4-6-3} + \ExampleSubFigure{4-6-4}% + \ExampleSubFigure{4-6-5}% + \ExampleSubFigure{4-6-6} + \ExampleSubFigure{4-6-7}% + \ExampleSubFigure{4-6-8}% + \ExampleSubFigure{4-6-9} + \ExampleSubFigure{4-6-10}% + \ExampleSubFigure{4-6-11}% + \ExampleSubFigure{4-6-12} + \ExampleSubFigure{4-6-13}% + \ExampleSubFigure{4-6-14}% + \ExampleSubFigure{4-6-15} + \ExampleSubFigure{4-6-16}% + \ExampleSubFigure{4-6-17}% + \ExampleSubFigure{4-6-18} + \caption{Section 6-A} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure{4-6-19}% + \ExampleSubFigure{4-6-20}% + \ExampleSubFigure{4-6-21} + \ExampleSubFigure{4-6-22}% + \ExampleSubFigure{4-6-23}% + \ExampleSubFigure{4-6-24} + \ExampleSubFigure{4-6-25} + \caption{Section 6-B} +\end{figure} + +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-6-26} + \ExampleSubFigure{4-6-27}% + \ExampleSubFigure{4-6-28}% + \ExampleSubFigure{4-6-29} + \ExampleSubFigure[0.3333]{4-6-30}% + \ExampleSubFigure[0.6667]{4-6-31} + \ExampleSubFigure[1]{4-6-32} + \caption{Section 6-C} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-6-33} + \ExampleSubFigure[0.5]{4-6-34}% + \ExampleSubFigure[0.5]{4-6-35} + \ExampleSubFigure[0.5]{4-6-36}% + \ExampleSubFigure[0.5]{4-6-37} + \caption{Section 6-D} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-6-38} + \ExampleSubFigure[1]{4-6-39} + \ExampleSubFigure[0.5]{4-6-40}% + \ExampleSubFigure[0.5]{4-6-41} + \caption{Section 6-E} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[0.5]{4-6-42}% + \ExampleSubFigure[0.5]{4-6-43} + \ExampleSubFigure{4-6-44}% + \ExampleSubFigure{4-6-45}% + \ExampleSubFigure{4-6-46} + \caption{Section 6-F} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-7-1} + \ExampleSubFigure[1]{4-7-2} + \ExampleSubFigure[1]{4-7-4} + \caption{Section 7} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[0.5]{4-8-1}% + \ExampleSubFigure[0.25]{4-8-2}% + \ExampleSubFigure[0.25]{4-8-3} + \ExampleSubFigure[1]{4-8-4} + \caption{Section 8-A} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-8-5} + \caption{Section 8-B} +\end{figure} + +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[0.5]{4-9-1}% + \ExampleSubFigure[0.5]{4-9-2} + \caption{Section 9} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[0.4]{4-10-1}% + \ExampleSubFigure[0.2]{4-10-2}% + \ExampleSubFigure[0.2]{4-10-3}% + \ExampleSubFigure[0.2]{4-10-4} + \ExampleSubFigure[0.4]{4-10-5}% + \ExampleSubFigure[0.2]{4-10-6}% + \ExampleSubFigure[0.4]{4-10-7} + \caption{Section 10-A} +\end{figure} + +\clearpage +\begin{figure}[!htbp] + \centering + \ExampleSubFigure[1]{4-10-8} + \ExampleSubFigure[1]{4-10-9} + \ExampleSubFigure[1]{4-10-10} + \caption{Section 10-B} +\end{figure} + +\end{document} diff --git a/graphics/pstricks/base/dvips/pst-algparser.pro b/graphics/pstricks/base/dvips/pst-algparser.pro new file mode 100644 index 0000000000..2f0e84aae0 --- /dev/null +++ b/graphics/pstricks/base/dvips/pst-algparser.pro @@ -0,0 +1,773 @@ +% $Id: pst-algparser.pro 446 2017-04-19 11:40:55Z herbert $ +%% +%% PostScript prologue for PSTricks algorithm parser +%% Version 0.07, 2014/08/01 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%%-----------------------------------------------------------------------------% +% +%currentdict /Pi known not { /Pi 3.14159265359 def } if +% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +/I2P { AlgParser cvx exec } def % Infix to Postfix +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.13 +% +% 09/2011 DR factorial with ! added +% +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF|P! +% P->(E)|literal +% literal->number|var|var[E]|func(params) +% params->E|E,param +% number->TOBEFINISHED +% +%% E expression, T term, SF signed factor, F factor, P power +% +%% parser +% +%% str +% +%% C->E<condition_operators>E +%% STR index -> STR index+lenExpr +/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def +% +%% analyze Expression List (separator , or | ) +%% STR index -> STR index+lenExpr +%% /AnalyzeListOfE { +%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar +%% NextNonBlankChar dup 0 eq { pop exit } if +%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if +%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop +%% AnalyzeListOfEPostHook +%% } def +/AnalyzeListOfE { + /NotFirst false def + { NextNonBlankChar pop AnalyzeExpr + NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse + dup Strlen eq { exit } if NextNonBlankChar + dup 44 ne 1 index 124 ne and + { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } + if pop 1 add } loop + AnalyzeListOfEPostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% E->T|E+T +%% STR index -> STR index+lenExpr +/AnalyzeExpr { + AnalyzePreHook AnalyzeTerm IsEndingExpr + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop } + ifelse + AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% T->FS|T*FS +%% STR index +/AnalyzeTerm { + AnalyzePreHook AnalyzeSignedFactor IsEndingTerm + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop } + ifelse + AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FS -> F | +FS | -FS +%% STR index +/AnalyzeSignedFactor { + AnalyzePreHook 2 copy get dup IsUnaryOp + { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp } + { pop AnalyzeFactor } + ifelse AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% F->P|F^P|P! +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { dup 33 eq%% is there a ! DR 09/2011 + { pop 1 add NextNonBlankChar pop EvalFactorial } + { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower } + ifelse + IsEndingFactor { pop exit } if } loop } + ifelse AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% P->(E)|literal +%% STR index +/AnalyzePower { + %% depending of first char either a number, or a literal + 2 copy get dup 40 eq%%an open par + { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop } + { AnalyzeLiteral } + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index STR[index] -> STR index +%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def +/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% recognize + or - +%% chr -> T/F +/IsUnaryOp { dup 43 eq exch 45 eq or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a number can contain only : 0123456789. +%% chr -> T/F +/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index number +%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? +%% STR index -> STR index' number +/ReadNumber { + exch dup 3 -1 roll dup 3 1 roll + %%read mantissa + { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop + dup 101 eq exch 69 eq or + %%% there is a "e" or "E" -> read exponant + { 1 add 2 copy get dup IsUnaryOp + { pop 1 add 2 copy get } if + { IsNumber not { exit } if 1 add 2 copy get } loop } + if + dup 4 1 roll + 3 -1 roll exch 1 index sub getinterval +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a number can contain only : 0123456789. +%% chr -> T/F +/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index number +%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? +%% STR index -> STR index' number +/ReadCondOp { + NextNonBlankChar 1 index 4 1 roll + { IsCondOp not { exit } if 1 add 2 copy get } loop + 2 copy 5 -1 roll + exch 1 index sub getinterval 3 1 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a literal can contain only : 0123456789. +%% chr -> T/F +/IsLiteral {% + dup 48 ge exch dup 57 le 3 -1 roll and exch + dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch + dup 97 ge exch 122 le and or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)? +%% STR index -> literal STR index' nextchr +/ReadLiteral { + exch dup 3 -1 roll dup 3 1 roll + %%read literal core + { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop + 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or a clpar +%% STR index -> STR index STR[index] T/F +/IsEndingExpr {% + 2 copy dup Strlen eq + %% if end of str is reached -> end ! + { pop pop 0 true } + %% ending chr -> clpar, comma, |, <, >, =, !, + {get dup dup 41 eq + exch dup 124 eq + exch dup 93 eq + exch dup 44 eq + exch dup 30 eq + exch dup 60 ge exch 62 le and or or or or or} + ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or a +- +%% STR index -> STR index STR[index] T/F +/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or */ +%% STR index -> STR index STR[index] T/F +/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or ^ +%% STR index -> STR index STR[index] T/F +/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index STR[index] +/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def +/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def +%%%%%%%%%%%%%%%%%%%%%%%% +%% DEBUG +/BRK {false} def +/BRKtrue {/BRK true def} def +/BRKStop {BRK {BRKtoto} if } def +/BRKEvalStop {BRK exch if } def +/BRKBRK2true {BRK {BRK2true} if } def +/BRK2 {false} def +/BRK2true {/BRK2 true def} def +/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def +end +% +%-------------------------------------------------------------------------------% +% +/tx@AlgToPs 12 dict def tx@AlgToPs begin +% +%% algExpr -> PSVector +/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def +/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def +/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def +/Strlen 0 def +/EvalListOfExpr {} def% +/EvalNumber {% + ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx + exch 1 add array astore def NextNonBlankChar pop } def +/EvalAddSub {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def +} def +/EvalMulDiv {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def +} def +/EvalPower {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + pop /exp cvx exch 1 add array astore def +} def +/EvalFactorial {% DR 09/2011 + /ExpressionVector ExpressionVector aload length + /fact cvx exch 1 add array astore def +} def +/EvalLiteral {% + ReadLiteral + dup 40 eq%%% there is an open par -> function call + { pop 2 index + dup (Sum) eq { EvalSum } + { dup (IfTE) eq { EvalCond } + { dup (Derive) eq { pop EvalDerive } + { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx + exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse } + { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def + dup 91 eq%%% there is an open bracket -> vector element + { pop 1 add NextNonBlankChar pop AnalyzeExpr + /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add } + { pop NextNonBlankChar pop } + ifelse} + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the derive function : Derive(n,f(x)) +%% firstparindex lastparindex -> +/EvalDerive { + %% manage the function descripiton + 1 add ReadNumber 3 1 roll NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + 1 add NextNonBlankChar pop + 3 -1 roll cvi + dup 0 eq + { pop AnalyzeExpr 3 -1 roll pop 1 add } + { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll + { (x) tx@Derive begin Derive end } repeat + ExpressionVector exch /ExpressionVector [] def + AlgToPs aload length + /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def + l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add + 1 index length /Strlen exch def } ifelse +} def +/EvalSum {% + pop 1 add NextNonBlankChar pop + %% read the variable name + ReadLiteral pop NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if + %% read the initial value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the increment value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the limit value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll + 5 -1 roll 4 add array astore def + %% keep ExpressionVector for later and create a new one for internal Sum computation + ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def + 1 add NextNonBlankChar pop AnalyzeExpr + %% add each term + /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def + /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add + array astore def 3 -1 roll pop 1 add +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Convert to radians if trigo function call +%% (name) -> +/TrigoFunc { + dup (cos) eq 1 index (sin) eq or exch (tan) eq or + { /ExpressionVector ExpressionVector aload length 3.1415926 /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +/EvalCond {% + pop 1 add AnalyzeCond NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if + ExpressionVector 3 1 roll /ExpressionVector [] def + 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def + NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if + 1 add AnalyzeExpr + NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if + ExpressionVector + /ExpressionVector 6 -1 roll aload length dup + 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def + 1 add 3 -1 roll pop +} def +%% CondOp STR index +/EvalCondOp {% + 3 -1 roll + dup (=) eq { /eq } {% + dup (<) eq { /lt } {% + dup (>) eq { /gt } {% + dup (>=) eq { /ge } {% + dup (<=) eq { /ge } {% + dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator } + ifelse } ifelse } ifelse } ifelse } ifelse } ifelse + cvx exch pop + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def +/EvalUnaryOp { + 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% H O O K S +/AnalyzePreHook {} bind def +/PreEvalHook {} bind def +/AnalyzeListOfEPostHook {} bind def +/AnalyzePostHook {} def +/RollOp { 3 1 roll } bind def +end %tx@CoreAnalyzerDict +% +%--------------------------------------------------------------------% +% +/tx@Derive 41 dict def tx@Derive begin +%%increase ^^ for each function added +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% algExpr variable -> PSVector +/Derive { + 10240 string 3 1 roll 0 3 1 roll + /Variable exch def + tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end +} def +/Strlen 0 def +/InitParser { dup length /Strlen exch def 0 } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% algExpr variable index -> PSVector +/DeriveIndexed {% + 3 1 roll 10240 string 3 1 roll 0 3 1 roll + /Variable exch def + tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u,v)'=-(u',v') +/EvalListOfExpr {% + 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe + 2 copy 7 -1 roll dup length 4 1 roll putinterval add + 6 -2 roll pop pop + 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (-u)'=-(u') +/EvalUnaryOp { + 4 -2 roll 4 index (0) eq + { (0) StrConcat 7 -1 roll pop } + { 7 -1 roll 45 eq + { AddSub AddOpPar true } { false } ifelse + 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (number)'=0 +/EvalNumber { ReadNumber (0) 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u+v)'=u'+v' +/EvalAddSub {% + 7 index dup (0) eq + { pop true }%% du=0 nothing added + { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false } + ifelse + 5 index dup (0) eq + { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0 + { exch + { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added + { 5 -2 roll 7 index 43 eq%%something yet added + { AddAdd false } { AddSub AddOpPar true } ifelse } + ifelse 11 1 roll + 3 -1 roll StrConcat 10 -1 roll { AddClPar } if + 2 copy pop 0 6 2 roll GetIntervalNewStr } + ifelse + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u*v)' or (u/v)' +/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u*v)'=u'*v+u*v' +/EvalMul {% + 4 -2 roll 7 index dup (0) eq + { pop false }%%du=0 + { (1) eq%%du=1 + { false } + { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse + 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if + true }%%du!=0 + ifelse + 5 1 roll 5 index (0) eq + { 5 -1 roll not { (0) StrConcat } if }%%dv=0 + { 5 -1 roll { AddAdd } if + 4 index (1) eq + { 8 index StrConcat } + { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } + ifelse + }%%dv!=0 + ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u/v)'=(u'*v-u*v')/v^2 +/EvalDiv {% + 4 -2 roll + 4 index (0) eq%%dv=0 -> u'/v + { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse } + { 7 index dup (0) eq + { pop }%%du=0 + { (1) eq%%du=1 + { false } + { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse + 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0 + ifelse + AddSub + 4 index (1) eq + { 8 index StrConcat } + { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } + ifelse + %}%%dv!=0 + 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar + AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add } + ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% str1 index str2 -> str1 index +/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def +/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u) +/EvalPower {% + 4 -2 roll 7 index (0) eq + {%%if du=0 then (u^v)'=v'ln(u)u^v + 4 index (0) eq + { (0) StrConcat }%%if dv=0 then (u^v)'=0 + { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if + AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse + } + {%%du!=0 + 4 index (0) eq + {%%if dv=0 then (u^v)'=vu'u^(v-1) + 5 index dup IsStrNumber + { dup (0) eq + { StrConcat } + { dup dup (1) eq exch (1.0) eq or + { StrConcat } + { StrConcat + 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1 + { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006 + (*\() StrConcat 8 index StrConcat (\)) StrConcat + 5 index dup dup (2) eq exch (2.0) eq or + { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse } + { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (-1\)) StrConcat } ifelse + } + {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u) + 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if + AddOpPar 5 index StrConcat (\)*\() StrConcat + 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (-1\)+\() StrConcat + 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if + 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (\)*ln\() StrConcat + 8 index StrConcat AddClPar + } ifelse + } ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% No derivative for factorial ! only cst => null derivative +/EvalFactorial {% DR 09/2011 + 4 index (0) eq + { (0) mark 8 -2 roll cleartomark 2 index 7 index dup 4 index exch sub getinterval exch 6 2 roll } + { DERIVATIVE_ENGINE_ERROR_no_variable_in_factorial } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% str -> true/false +/IsStrNumber {% + true exch + { dup 48 lt exch dup 57 gt 3 -1 roll or + exch dup 46 ne%%. + exch dup 43 ne%%+ + exch 45 ne%%- + and and and { pop false } if } forall +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalLiteral {% + ReadLiteral dup 40 eq%%% there is an open par -> function call + { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec } + { dup 91 eq%%% there is an open bracket -> vector element + { DERIVATIVE_ENGINE_ERROR_vector_not_yet_implemented } + { pop EvalVariable } + ifelse } + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% first last parpos Expr[first:parpos-1] -> +/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (f(u))'=u'f'(u) +/EvalFunc { + 4 2 roll 4 index (1) ne + { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Func derivative -> Eval<func> +/EvalFunc_sin {% + PreCommonFunc + { (cos\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_cos {% + PreCommonFunc + { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_tan {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if + PostCommonFunc } def +/EvalFunc_asin {% + PreCommonFunc + { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_acos {% + PreCommonFunc + { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_atg {% + PreCommonFunc + { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_floor {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_ln {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_exp {% + PreCommonFunc + { (exp\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_EXP {% + PreCommonFunc + { (EXP\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { DERIVATIVE_ENGINE_ERROR_no_variable_expression_in_Fact } if + PostCommonFunc } def +/EvalFunc_sh {% + PreCommonFunc + { (ch\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_ch {% + PreCommonFunc + { (sh\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_th {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argsh {% + PreCommonFunc + { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argch {% + PreCommonFunc + { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argth {% + PreCommonFunc + { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/PreCommonFunc { + 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop + 4 2 roll 4 index (0) eq + { (0) StrConcat false } + { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse +} def +/PostCommonFunc { + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +/EvalFunc_Derive {% + 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs + 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add + 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval + exch 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalFunc_Sum {% + 1 add NextNonBlankChar pop + %% read the variable name + ReadLiteral pop 3 -1 roll pop NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if + %% read the initial value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the increment value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if + %% read the limit value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if + 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop + 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat + 4 index StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalFunc_IfTE {% + 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond + NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if + 1 add NextNonBlankChar pop dup 5 1 roll + AnalyzeExpr NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if + 1 add NextNonBlankChar pop + AnalyzeExpr 1 add NextNonBlankChar pop + 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat + 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% advance in str until a comma is found (no error detection!) +%% str index -> str index' +/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Convert to radians if trigo function call +%% (name) -> +/TrigoFunc { + dup (cos) eq 1 index (sin) eq or exch (tan) eq or + { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% No derivative for condition.... +/EvalCondOp { 3 -1 roll pop } bind def +/PutIntervalOneAdd {putinterval 1 add} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add close parenthesis in string at the given index +%% str index -> str index+1 +/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add 0 in string at the given index +%% str index -> str index+1 +/AddZero {2 copy (0) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddMul {2 copy (*) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddDiv {2 copy (/) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a plus sign in string at the given index +%% str index -> str index+1 +/AddAdd {2 copy (+) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a minus sign in string at the given index +%% str index -> str index+1 +/AddSub {2 copy (-) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a pipe sign in string at the given index +%% str index -> str index+1 +/AddPipe {2 copy (|) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% H O O K S +/AnalyzePreHook { dup 5 1 roll } bind def +/PreEvalHook {} def +/AnalyzePostHook { 7 -1 roll pop } bind def +/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def +/RollOp { 5 1 roll } bind def +end%%%tx@CoreAnalyzerDict +/tx@AddMathFunc 12 dict def tx@AddMathFunc begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% NEW FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2)) +%% x -> theta +/asin {% + dup abs 1 gt { EQDFasinrangeerror } if + dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad +} def +%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x) +%% x -> theta +/acos {% + dup abs 1 gt { EQDFacosrangeerror } if + dup dup mul 1 exch sub sqrt exch atan DegtoRad +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def +%% HYPERBOLIC FUNCTIONS +/sh { dup Ex exch neg Ex sub 2 div } def +/ch { dup Ex exch neg Ex add 2 div } def +/th { dup sh exch ch div } def +/Argsh { dup dup mul 1 add sqrt add ln } def +/Argch { dup dup mul 1 sub sqrt add ln } def +/Argth { dup 1 add exch 1 exch sub div ln 2 div } def +%% modified exponential funtion for 0 +%% x n -> x^n +/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def +%% modified exponential funtion for 0 +%% x -> e^x +/Ex { Euler exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/! { Fact } bind def +end +% +% END pst-algparser.pro
\ No newline at end of file diff --git a/graphics/pstricks/base/dvips/pst-dots.pro b/graphics/pstricks/base/dvips/pst-dots.pro new file mode 100644 index 0000000000..eb71f86867 --- /dev/null +++ b/graphics/pstricks/base/dvips/pst-dots.pro @@ -0,0 +1,173 @@ +% $Id: pst-dots.pro 446 2017-04-19 11:40:55Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.02, 2009/06/16 +%% +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt <tvz@Princeton.EDU> +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +%% Modified by Herbert Voss (hv) - 2008/04/17 +% +10 dict dup begin % hold local + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def +% /FontBBox [-571.5 -742.5 571.5 742.5] def % changed to next line 20060616 hv + /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef + Encoding % replace with given dot names + dup (b) 0 get /Bullet put % get the numerical position of b in ASCII +% % and save /Bullet at this place in Encoding + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put % 67 + dup (u) 0 get /SolidTriangle put + dup (t) 0 get /Triangle put + dup (T) 0 get /BoldTriangle put + dup (r) 0 get /SolidSquare put + dup (s) 0 get /Square put + dup (S) 0 get /BoldSquare put + dup (q) 0 get /SolidPentagon put + dup (p) 0 get /Pentagon put + dup (P) 0 get /BoldPentagon put +%%% + dup (k) 0 get /Asterisk put + dup (K) 0 get /BoldAsterisk put + dup (J) 0 get /SolidAsterisk put + dup (h) 0 get /Hexagon put + dup (H) 0 get /BoldHexagon put + dup (G) 0 get /SolidHexagon put + dup (f) 0 get /Octogon put % 2008-04-18 hv + dup (F) 0 get /BoldOctogon put % 2008-04-18 hv + dup (g) 0 get /SolidOctogon put % 2008-04-18 hv + dup (a) 0 get /Add put + dup (A) 0 get /BoldAdd put % 65 + dup (x) 0 get /Mul put + dup (X) 0 get /BoldMul put + dup (m) 0 get /Oplus put + dup (M) 0 get /BOplus put + dup (e) 0 get /SolidOplus put + dup (n) 0 get /Otimes put + dup (N) 0 get /BOtimes put + dup (E) 0 get /SolidOtimes put + dup (i) 0 get /Bar put + dup (I) 0 get /BoldBar put + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +%%% +/CharProcs 47 dict def +CharProcs begin + /CirclePath {0 0 500 0 360 arc closepath} def + /Bullet {CirclePath fill} def + /Circle {CirclePath .9 .9 scale CirclePath eofill} def + /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def + /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def + /SolidTriangle {TrianglePath fill} def + /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def + /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def + /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def + /SolidSquare {SquarePath fill} def + /Square {SquarePath .89 .89 scale SquarePath eofill} def + /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def + /PentagonPath { + -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto + 0 574.7 lineto -546.6 177.6 lineto closepath + } def + /SolidPentagon {PentagonPath fill} def + /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def + /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def +%-------------- hv begin 2004/07/25 from: er 2003/03/24 + /HexagonPath { + 0 550 moveto -476 275 lineto -476 -275 lineto + 0 -550 lineto 476 -275 lineto 476 275 lineto closepath + } def + /SolidHexagon {HexagonPath fill} def + /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def + /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def +% 2008-04-18 hv + /OctogonPath { + 550 dup 22.5 tan mul dup neg dup add /xMove exch def + exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def + /SolidOctogon { OctogonPath fill } def + /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def + /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def +% + /AsteriskPath { + 20 0 moveto 10 250 180 500 0 500 curveto + -180 500 -10 250 -20 0 curveto closepath + } def + /Asterisk { + AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath + 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill + } def +% + /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def + /BoldAsteriskPath { + 50 30 cos 100 mul moveto Basterp + 60 rotate Basterp 60 rotate Basterp + 60 rotate Basterp 60 rotate Basterp + 60 rotate Basterp closepath + } def + /BoldAsterisk {BoldAsteriskPath fill} def + /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def + /CrossPath { + 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto + -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto + 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath + } def + /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto + -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto + 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath + } def + /Add {CrossPath fill} def + /Mul {45 rotate CrossPath fill} def + /BoldAdd {BoldCrossPath fill} def + /BoldMul {45 rotate BoldCrossPath fill} def + /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def + /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def + /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def + /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def + /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def + /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def + /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def + /Bar {BarPath fill} def + /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def + /BoldBar {BoldBarPath fill} def + /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def + /SolidDiamond {DiamondPath fill} def + /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def + /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def +%%% + /.notdef { } def +end +% +/BuildGlyph { + exch + begin +% Metrics 1 index get exec 0 + 0 0 +% BBoxes 3 index get exec + -1000 -1000 1000 1000 +% -571.5 -742.5 571.5 742.5 + setcachedevice + CharProcs begin load exec end + end +} def +% +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +% +end +/PSTricksDotFont exch definefont pop +% +%% end
\ No newline at end of file diff --git a/graphics/pstricks/base/dvips/pst-dots97.pro b/graphics/pstricks/base/dvips/pst-dots97.pro new file mode 100644 index 0000000000..8c83b96352 --- /dev/null +++ b/graphics/pstricks/base/dvips/pst-dots97.pro @@ -0,0 +1,132 @@ +%!PS-Adobe-2.0 +%%Title: Dot Font for PSTricks +%%Creator: Timothy Van Zandt <tvz@Princeton.EDU> +%%Creation Date: May 7, 1993 +%% Version 97 patch 1, 99/12/16 +%% Modified by Etienne Riga <etienne.riga@skynet.be> - Dec. 16, 1999 +%% to add /Diamond, /SolidDiamond and /BoldDiamond +10 dict dup begin + /FontType 3 def + /FontMatrix [ .001 0 0 .001 0 0 ] def + /FontBBox [ 0 0 0 0 ] def + /Encoding 256 array def + 0 1 255 { Encoding exch /.notdef put } for + Encoding + dup (b) 0 get /Bullet put + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put + dup (u) 0 get /SolidTriangle put + dup (t) 0 get /Triangle put + dup (T) 0 get /BoldTriangle put + dup (r) 0 get /SolidSquare put + dup (s) 0 get /Square put + dup (S) 0 get /BoldSquare put + dup (q) 0 get /SolidPentagon put + dup (p) 0 get /Pentagon put + dup (P) 0 get /BoldPentagon put +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +% DG/SR modification end + /Metrics 13 dict def + Metrics begin + /Bullet 1000 def + /Circle 1000 def + /BoldCircle 1000 def + /SolidTriangle 1344 def + /Triangle 1344 def + /BoldTriangle 1344 def + /SolidSquare 886 def + /Square 886 def + /BoldSquare 886 def + /SolidPentagon 1093.2 def + /Pentagon 1093.2 def + /BoldPentagon 1093.2 def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /SolidDiamond 1008 def + /Diamond 1008 def + /BoldDiamond 1008 def +% DG/SR modification end + /.notdef 0 def + end + /BBoxes 13 dict def + BBoxes begin + /Circle { -550 -550 550 550 } def + /BoldCircle /Circle load def + /Bullet /Circle load def + /Triangle { -571.5 -330 571.5 660 } def + /BoldTriangle /Triangle load def + /SolidTriangle /Triangle load def + /Square { -450 -450 450 450 } def + /BoldSquare /Square load def + /SolidSquare /Square load def + /Pentagon { -546.6 -465 546.6 574.7 } def + /BoldPentagon /Pentagon load def + /SolidPentagon /Pentagon load def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /Diamond { -428.5 -742.5 428.5 742.5 } def + /BoldDiamond /Diamond load def + /SolidDiamond /Diamond load def +% DG/SR modification end + /.notdef { 0 0 0 0 } def + end + /CharProcs 20 dict def + CharProcs begin + /Adjust { + 2 copy dtransform floor .5 add exch floor .5 add exch idtransform + 3 -1 roll div 3 1 roll exch div exch scale + } def + /CirclePath { 0 0 500 0 360 arc closepath } def + /Bullet { 500 500 Adjust CirclePath fill } def + /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath + eofill } def + /BoldCircle { 500 500 Adjust CirclePath .8 .8 scale CirclePath + eofill } def + /BoldCircle { CirclePath .8 .8 scale CirclePath eofill } def + /TrianglePath { 0 660 moveto -571.5 -330 lineto 571.5 -330 lineto + closepath } def + /SolidTriangle { TrianglePath fill } def + /Triangle { TrianglePath .85 .85 scale TrianglePath eofill } def + /BoldTriangle { TrianglePath .7 .7 scale TrianglePath eofill } def + /SquarePath { -450 450 moveto 450 450 lineto 450 -450 lineto + -450 -450 lineto closepath } def + /SolidSquare { SquarePath fill } def + /Square { SquarePath .89 .89 scale SquarePath eofill } def + /BoldSquare { SquarePath .78 .78 scale SquarePath eofill } def + /PentagonPath { + -337.8 -465 moveto + 337.8 -465 lineto + 546.6 177.6 lineto + 0 574.7 lineto + -546.6 177.6 lineto + closepath + } def + /SolidPentagon { PentagonPath fill } def + /Pentagon { PentagonPath .89 .89 scale PentagonPath eofill } def + /BoldPentagon { PentagonPath .78 .78 scale PentagonPath eofill } def +% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga + /DiamondPath { 0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto + 428.5 0 lineto closepath } def + /SolidDiamond { DiamondPath fill } def + /Diamond { DiamondPath .85 .85 scale DiamondPath eofill } def + /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def +% DG/SR modification end + /.notdef { } def + end + /BuildGlyph { + exch + begin + Metrics 1 index get exec 0 + BBoxes 3 index get exec + setcachedevice + CharProcs begin load exec end + end + } def + /BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec + } bind def +end +/PSTricksDotFont exch definefont pop +%END pst-dots.pro diff --git a/graphics/pstricks/base/dvips/pstricks-fonts-lm.pro b/graphics/pstricks/base/dvips/pstricks-fonts-lm.pro new file mode 100644 index 0000000000..5ab5e436df --- /dev/null +++ b/graphics/pstricks/base/dvips/pstricks-fonts-lm.pro @@ -0,0 +1,69 @@ +% $Id: pstricks-fonts.pro 446 2017-04-19 11:40:55Z herbert $ +% +%% PostScript font prologue for pstricks.tex. +%% Version 0.01, 2016/04/22 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +%true setglobal globaldict begin + +%dd-lmbx10 LMRoman10-Bold <dotdigits-clm.enc <lmbx10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmbxi10 LMRoman10-BoldItalic <dotdigits-clm.enc <lmbxi10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmbxo10 LMRomanSlant10-Bold <dotdigits-clm.enc <lmbxo10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmcsc10 LMRomanCaps10-Regular <dotdigits-clm.enc <lmcsc10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmcsco10 LMRomanCaps10-Oblique <dotdigits-clm.enc <lmcsco10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmdunh10 LMRomanDunh10-Regular <dotdigits-clm.enc <lmdunh10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmduno10 LMRomanDunh10-Oblique <dotdigits-clm.enc <lmduno10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmr10 LMRoman10-Regular <dotdigits-clm.enc <lmr10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmri10 LMRoman10-Italic <dotdigits-clm.enc <lmri10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmro10 LMRomanSlant10-Regular <dotdigits-clm.enc <lmro10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " + +/Times-Roman /LMRoman10-Regular def +/Times-Bold /LMRoman10-Bold def +/Times-Italic /LMRoman10-Italic def +/Times-BoldItalic /LMRoman10-BoldItalic def + +%mss8ttl10 LMSans10-Regular <t1-clm.enc <lmss10.pfb " fontinst-autoenc-t1-clm ReEncodeFont " +%lmssbo8ttl10 LMSans10-BoldOblique <t1-clm.enc <lmssbo10.pfb " fontinst-autoenc-t1-clm ReEncodeFont " +%lmssbx8ttl10 LMSans10-Bold <t1-clm.enc <lmssbx10.pfb " fontinst-autoenc-t1-clm ReEncodeFont " +%lmssdc8ttl10 LMSansDemiCond10-Regular <t1-clm.enc <lmssdc10.pfb " fontinst-autoenc-t1-clm ReEncodeFont " +%lmssdo8ttl10 LMSansDemiCond10-Oblique <t1-clm.enc <lmssdo10.pfb " fontinst-autoenc-t1-clm ReEncodeFont " +%lmsso8ttl10 LMSans10-Oblique <t1-clm.enc <lmsso10.pfb " fontinst-autoenc-t1-clm ReEncodeFont " +%dd-lmss10 LMSans10-Regular <dotdigits-clm.enc <lmss10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmssbo10 LMSans10-BoldOblique <dotdigits-clm.enc <lmssbo10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmssbx10 LMSans10-Bold <dotdigits-clm.enc <lmssbx10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmssdc10 LMSansDemiCond10-Regular <dotdigits-clm.enc <lmssdc10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmssdo10 LMSansDemiCond10-Oblique <dotdigits-clm.enc <lmssdo10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmsso10 LMSans10-Oblique <dotdigits-clm.enc <lmsso10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " + +/Helvetica /LMSans10-Regular def +/Helvetica-Bold /LMSans10-Bold def +/Helvetica-Oblique /LMSans10-Oblique def +/Helvetica-BoldOblique /LMSans10-BoldOblique def + +%dd-lmtcsc10 LMMonoCaps10-Regular <dotdigits-clm.enc <lmtcsc10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtcso10 LMMonoCaps10-Oblique <dotdigits-clm.enc <lmtcso10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtk10 LMMonoLt10-Bold <dotdigits-clm.enc <lmtk10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtko10 LMMonoLt10-BoldOblique <dotdigits-clm.enc <lmtko10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtl10 LMMonoLt10-Regular <dotdigits-clm.enc <lmtl10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtlc10 LMMonoLtCond10-Regular <dotdigits-clm.enc <lmtlc10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtlco10 LMMonoLtCond10-Oblique <dotdigits-clm.enc <lmtlco10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtlo10 LMMonoLt10-Oblique <dotdigits-clm.enc <lmtlo10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtt10 LMMono10-Regular <dotdigits-clm.enc <lmtt10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtti10 LMMono10-Italic <dotdigits-clm.enc <lmtti10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " +%dd-lmtto10 LMMonoSlant10-Regular <dotdigits-clm.enc <lmtto10.pfb " fontinst-autoenc-dotdigits-clm ReEncodeFont " + +/Courier /LMMono10-Regular def +/Courier-Bold /LMMono10-Bold def +/Courier-Oblique /LMMono10-Italic def +/Courier-BoldOblique /LMMono10-BoldOblique def + +/Symbol /StandardSymL def + +%end false setglobal +% +% end of file + diff --git a/graphics/pstricks/base/dvips/pstricks-fonts-ps.pro b/graphics/pstricks/base/dvips/pstricks-fonts-ps.pro new file mode 100644 index 0000000000..da5cdb7a1e --- /dev/null +++ b/graphics/pstricks/base/dvips/pstricks-fonts-ps.pro @@ -0,0 +1,32 @@ +% $Id: pstricks-fonts.pro 446 2017-04-19 11:40:55Z herbert $ +% +%% PostScript font prologue for pstricks.tex. +%% Version 0.01, 2016/04/22 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +%true setglobal globaldict begin + +/Times-Roman /Times-Roman def +/Times-Bold /Times-Bold def +/Times-Italic /Times-Italic def +/Times-BoldItalic /Times-BoldItalic def + +/Helvetica /Helvetica def +/Helvetica-Bold /Helvetica-Bold def +/Helvetica-Oblique /Helvetica-Oblique def +/Helvetica-BoldOblique /Helvetica-BoldOblique def + +/Courier /Courier def +/Courier-Bold /Courier-Bold def +/Courier-Oblique /Courier-Oblique def +/Courier-BoldOblique /Courier-BoldOblique def + +/Symbol /Symbol def + +%end false setglobal +% +% end of file diff --git a/graphics/pstricks/base/dvips/pstricks-fonts-urw.pro b/graphics/pstricks/base/dvips/pstricks-fonts-urw.pro new file mode 100644 index 0000000000..a0dd8bdda5 --- /dev/null +++ b/graphics/pstricks/base/dvips/pstricks-fonts-urw.pro @@ -0,0 +1,61 @@ +% $Id: pstricks-fonts.pro 446 2017-04-19 11:40:55Z herbert $ +% +%% PostScript font prologue for pstricks.tex. +%% Version 0.01, 2016/04/22 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +%true setglobal globaldict begin + +%n021003l.pfa:/FontName /NimbusRomNo9L-Regu def +%n021004l.pfa:/FontName /NimbusRomNo9L-Medi def +%n021023l.pfa:/FontName /NimbusRomNo9L-ReguItal def +%n021024l.pfa:/FontName /NimbusRomNo9L-MediItal def + +/Times-Roman /NimbusRomNo9L-Regu def +/Times-Roman-Bold /NimbusRomNo9L-Medi def +/Times-Italic /NimbusRomNo9L-ReguItal def +/Times-BoldItalic /NimbusRomNo9L-MediItal def + +%n019003l.pfa:/FontName /NimbusSanL-Regu def +%n019004l.pfa:/FontName /NimbusSanL-Bold def +%n019023l.pfa:/FontName /NimbusSanL-ReguItal def +%n019024l.pfa:/FontName /NimbusSanL-BoldItal def +%n019043l.pfa:/FontName /NimbusSanL-ReguCond def +%n019044l.pfa:/FontName /NimbusSanL-BoldCond def +%n019063l.pfa:/FontName /NimbusSanL-ReguCondItal def +%n019064l.pfa:/FontName /NimbusSanL-BoldCondItal def + +%/Helvetica /dd-lmss10 def +/Helvetica /LMSans10-Regular def +%/Helvetica /NimbusSanL-Regu def +/Helvetica-Bold /NimbusSanL-Bold def +/Helvetica-Oblique /NimbusSanL-ReguItal def +/Helvetica-BoldOblique /NimbusSanL-BoldItal def + +%n022003l.pfa:/FontName /NimbusMonL-Regu cvn def +%n022004l.pfa:/FontName /NimbusMonL-Bold cvn def +%n022023l.pfa:/FontName /NimbusMonL-ReguObli cvn def +%n022024l.pfa:/FontName /NimbusMonL-BoldObli cvn def + +/Courier /NimbusMonL-Regu def +/Courier-Bold /NimbusMonL-Bold def +/Courier-Oblique /NimbusMonL-ReguObli def +/Courier-BoldOblique /NimbusMonL-BoldObli def + +%s050000l.pfa:/FontName /StandardSymL def + +/Symbol /StandardSymL def + +%p052003l.pfa:/FontName /URWPalladioL-Roma def +%p052004l.pfa:/FontName /URWPalladioL-Bold def +%p052023l.pfa:/FontName /URWPalladioL-Ital def +%p052024l.pfa:/FontName /URWPalladioL-BoldItal def +%z003034l.pfa:/FontName /URWChanceryL-MediItal def + +%end false setglobal +% +% end of file diff --git a/graphics/pstricks/base/dvips/pstricks.pro b/graphics/pstricks/base/dvips/pstricks.pro new file mode 100644 index 0000000000..0911f0eb0b --- /dev/null +++ b/graphics/pstricks/base/dvips/pstricks.pro @@ -0,0 +1,1232 @@ +% $Id: pstricks.pro 872 2018-12-21 20:39:31Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 1.30, 2018/12/17 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +% Define the follwing gs-functions if not known, eg when using distiller +% +systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if +systemdict /.setblendmode known not {/.setblendmode { pop } def } if +systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if +% +/tx@Dict 200 dict def % the main PSTricks dictionary +tx@Dict begin +/ADict 25 dict def % The arrow dictionary +/CM { matrix currentmatrix } bind def +/SLW /setlinewidth load def +/CLW /currentlinewidth load def +/CP /currentpoint load def +/ED { exch def } bind def +/L /lineto load def +/T /translate load def +/TMatrix { } def +/RAngle { 0 } def +/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments +/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/Log { dup 1e-20 lt { pop -1e30 }{ log } ifelse } def % control the log +/tan { dup cos abs 1.e-10 lt + { pop 1.e10 } % return 1.e10 as infinit + { dup sin exch cos div } ifelse % default sin/cos +} def +/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees +/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root + pop pop 0 }{ sqrt exch atan} ifelse } def +/Acos2 { 2 dict begin + /x ED /y ED + y abs 1.0e-20 lt { 1.0e30 } if + x y div + dup dup mul neg 1 add dup 0 lt { % arc cos needs two values x,y + pop pop 0 }{ sqrt exch atan} ifelse + y 0 lt { 180 add } if +} def +/Power { % a^b latest ghostscript don't allow -4^-3.1 + 2 dict begin % hold all local + /b ED + /a ED + a 0 lt % prevent something like (-4)^(-3.1)=> 1/(-4)^3 + { b 0 lt + { a b cvi exp } + { a b exp } ifelse + } + { a 0 eq { 0 }{ a b exp } ifelse + } ifelse + end +} def +% +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter +/Pyth2 { % Pythagoras, xA yA xB yB + 3 -1 roll % xA xB yB yA + sub % xA xB yB-yA + 3 1 roll % yB-yA xA xB + sub % yB-yA xA-xB + Pyth } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian (origimal) +/PtoCrel { pst@angleunit PtoC } def % Polar to Cartesian with \degrees[??] +/PtoCab { dup cos 4 -1 roll mul 3 1 roll sin mul } def % Polar to Cartesian (Ellipse) a b phi-> x y +/AnytoDeg { pst@angleunit } def +/DegtoAny { 1 pst@angleunit div} def +/AnytoRad { AnytoDeg DegtoRad } def +/RadtoAny { RadtoDeg DegtoAny } def +% +%/Rand { rand 4294967295 div } def % a real random number +/Rand { rand 2147483447 div } def % a real random number between 0 and 1 +%----------------- hv added 20050516 --------------- +/PiDiv2 1.57079632680 def +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +%/e Euler bind def +% +/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } bind def % viceversa +% +/startGlobal { true setglobal globaldict begin } bind def +/endGlobal { end false setglobal } bind def +/pssetRGBcolor /setrgbcolor load def +/pssetCMYKcolor /setcmykcolor load def +/pssetGraycolor /setgray load def +% +%----------------- hv end--------------------------- +/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def +% +/PathLength { + flattenpath /z 0 def + { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } + { /y ED /x ED PathLength@ } + {} + { /y y2 def /x x2 def PathLength@ } + /pathforall load stopped { pop pop pop pop } if + z +} def +% +/STP { .996264 dup scale } def % BP/PT scaling +/STV { SDict begin normalscale end STP } def % +% +/DashLine { + dup 0 gt + { /a .5 def PathLength exch div } + { pop /a 1 def PathLength } ifelse + /b ED % pattern should fit evenly in b + dup /X ED % pattern array + 0 get /y ED % length of first black segment + /z 0 X {add} forall def % length of the full pattern + %% Computation of the scaling factor as described by van Zandt: + b a .5 sub 2 mul y mul sub z Div round + z mul a .5 sub 2 mul y mul add b exch Div + %%%% scaling factor on stack. + /z ED %% now, z is the scaling factor + false % for the length test below + X { z mul } forall X astore %% modification TN 04-08-07 + %%% Checking whether at least one dash in X has positive length: + {0 gt or} forall + { X 1 a sub y mul } + { [ 1 0 ] 0 } + ifelse + setdash stroke +} def +% +/DotLine { + /b PathLength def + /a ED /z ED /y CLW def + /z y z add def + a 0 gt { + /b b a div def + }{ + a 0 eq { + /b b y sub def + }{ a -3 eq { + /b b y add def } if + } ifelse + } ifelse + [ 0 b b z Div round Div dup 0 le { pop 1 } if ] + a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse + setdash 1 setlinecap stroke +} def +% +/SymbolLine { % on stack [ x y x y ... + counttomark % number of elements + 2 div cvi /n ED % n pairs + /YA ED /XA ED % the start point + n 1 sub { + /YB ED /XB ED + /XLength XB XA sub def + /YLength YB YA sub def + /PAngle YLength XLength Atan def + /XYLength XLength YLength Pyth def + %% for negative SymStep we calculate the distance + SymStep 0 lt + { %XYLength SymStep div abs cvi + /nSym SymStep abs cvi def } + { /nSym XYLength SymStep div cvi def } + ifelse + 0.5 setflat + /Shift Symbol stringwidth pop 2 div def + /deltaX XLength nSym div def + /deltaY YLength nSym div def + curveticks + { XA YA moveto } + { XA Shift sub YA Shift sub moveto } + ifelse + nSym { + gsave + curveticks + { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED + currentpoint translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + deltaX deltaY rmoveto + } repeat + /YA YB def /XA XB def + } repeat + curveticks + { XA YA moveto } + { XA Shift sub YA Shift sub moveto } + ifelse + gsave + curveticks + { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED + XA YA translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + pop % delete the mark symbol +} def +% +/LineFill { % hv ------------ patch 7 ------------- + gsave + abs /hatchWidthInc ED + abs /hatchSepInc ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clipType % must be defined in pstricks.tex: clip -- eoclip + newpath + 2 setlinecap + systemdict + /setstrokeadjust known { true setstrokeadjust } if + x2 x1 sub 1 add { + x1 a mul y1 moveto 0 y2 rlineto stroke + /x1 x1 1 add + hatchWidthInc 0 gt { CLW add } if + def + hatchSepInc 0 gt hatchWidthInc 0 gt or { + /a a hatchSepInc add def + CLW hatchWidthInc add SLW + } if + } repeat + grestore + pop pop } def +% +/DotFill {% on stack: dot radius + /dotRadius ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform + pathbbox % llx lly urx ury of smallest bounding box + /y2 ED /x2 ED /y1 ED /x1 ED + y2 y1 sub a div 2 add cvi /Ny ED + x2 x1 sub a div 2 add cvi /Nx ED + clipType % must be defined in pstricks.tex: clip -- eoclip + newpath + /yA y1 dotRadius add CLW add def + /xA0 x1 dotRadius add CLW add def + Ny { + /xA xA0 def + Nx { + newpath + xA yA dotRadius 0 360 arc + SolidDot { gsave fill grestore } if + stroke + xA a add /xA ED + } repeat + yA a add /yA ED + } repeat + grestore +} def +% +/PenroseFill {% on stack: scaling factor + /Scale ED +% 1 exch div round /penroseFactor ED +% a 0 dtransform round exch round exch +% 2 copy idtransform +% exch Atan rotate +% idtransform pop /a ED +% .25 .25 itransform pathbbox +% /y2 ED +% a Div ceiling cvi /x2 ED /y1 ED +% a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath +gsave + 220 150 translate + Scale dup scale + systemdict /setstrokeadjust known { true setstrokeadjust } if + /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul} + { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall + [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto + i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25 + mul j l + S rmoveto}F i L j L stroke }F}F}F}F + grestore +% pop pop +} def +% +/PenroseFillA {% on stack: scaling factor, border color, kite color, dart color + /Scale ED + Scale dup scale + /border_colour ED + /kite_colour ED + /dart_colour ED + clip + newpath + gsave + 100 100 translate + 6 + Scale 1 lt { 1 Scale dup add div mul cvi } if %%%% Number of iterations + 10 %%%% Long side length in millimeters + /border_width { L 0.06 mul }def %%%% Choose the scalefactor for the borders + /L exch 25.4 div 72 mul def %%%% Conversion: mm -> inches -> points + /f{-1 5 sqrt add 2 div}bind def %%%% The reciprocal of the golden ratio + /l{L f mul}bind def %%%% Short side length l = L*f + /Ll{L l add}bind def %%%% Ll = L + l + /c{36 cos L mul}bind def %%%% c = L*cos(36) + /s{36 sin L mul}bind def %%%% s = L*sin(36) + /draw_tile { 0 0 moveto c s lineto 0 lineto gsave closepath gsave fill grestore + 0 setlinewidth stroke grestore border_colour stroke } bind def + /half_kite { dup dup 0 gt{ 1 sub gsave f f neg scale -36 rotate half_dart + Ll 0 translate 144 rotate kite grestore } + { kite_colour L draw_tile }ifelse + pop } bind def + /half_dart { dup dup 0 gt{ 1 sub gsave f f scale half_kite + -144 rotate Ll neg 0 translate half_dart grestore } + { dart_colour l draw_tile }ifelse + pop } bind def + /kite{ gsave half_kite 1 -1 scale half_kite grestore }bind def + border_width setlinewidth 1 setlinejoin 1 setlinecap +% 450 0 translate + dup f exch neg exp dup scale + 5 {kite 72 rotate } repeat stroke + grestore +} def +% +% +/TruchetFill { % on stack: scaling factor + 10 dict begin + dup dup scale + 1 exch div round /penroseFactor ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + systemdict + /setstrokeadjust known { true setstrokeadjust } if + /ma a neg def + /ha a 2 div def + /mha ha neg def + /tile { + rand dup 2 idiv 2 mul eq { 90 rotate } if + mha mha moveto ha mha lineto + ha ha lineto mha ha lineto +% closepath .1 setlinewidth stroke + contents + } def + /contents{ + 0 ha moveto ha 0 lineto + 0 mha moveto mha 0 lineto +% 1 setlinewidth stroke + } def + /dotiling { + f ma mul a f a mul { + /i exch def + f ma mul a f a mul { + /j exch def + gsave i j translate + tile stroke grestore + } for + } for + } def +% + /f 3 def + 5 srand dotiling + end % local user dict +} def +% +/BeginArrow { + ADict begin % hold it local, for end see EndArrow + /@mtrx CM def + gsave + 2 copy T + 2 index sub neg exch + 3 index sub exch Atan + rotate newpath +} def +% +/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict +% +/Arrow { + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /a ED + { 0 h T 1 -1 scale } if + w neg h moveto + 0 0 L w h L w neg a neg rlineto + gsave fill grestore +} def +% +/ArrowD { % the sides are drawn as curves (hv 20071211) + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /Inset ED + { 0 h T 1 -1 scale } if % changes the direction +% we use y=w/h^2 * x^2 as equation for the control points +% for the coordinates the arrow is seen from top to bottom +% the bottom (tip) is (0;0) + w neg h moveto % lower left of > + w 9 div 4 mul neg h 3 div 2 mul + w 9 div neg h 3 div + 0 0 curveto % tip of > + w 9 div h 3 div + w 9 div 4 mul h 3 div 2 mul + w h curveto % upper left of > + w neg Inset neg rlineto % move to x=0 and inset + gsave fill grestore +} def +% +/Tbar { + CLW mul add /z ED + z -2 div CLW 2 div moveto + z 0 rlineto stroke + 0 CLW moveto +} def +% +/Bracket { + CLW mul add dup CLW sub 2 div + /x ED mul CLW add /y ED /z CLW 2 div def + x neg y moveto + x neg CLW 2 div L x CLW 2 div L x y L stroke + 0 CLW moveto +} def +% +/RoundBracket { + CLW mul add dup 2 div + /x ED mul /y ED /mtrx CM def + 0 CLW 2 div T x y mul 0 ne { x y scale } if + 1 1 moveto + .85 .5 .35 0 0 0 curveto + -.35 0 -.85 .5 -1 1 curveto + mtrx setmatrix stroke 0 CLW moveto +} def +% +/SD { 0 360 arc fill } def +% +/EndDot { % DS is the dot size + { /z DS def } { /z 0 def } ifelse % outer or inner dimen + /b ED % the color definition + 0 z DS SD + b { 0 z DS CLW sub SD } if + 0 DS z add CLW 4 div sub + moveto +} def +% +/Shadow { [ { /moveto load } { /lineto load } { /curveto load } { + /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto + load } if ] cvx newpath 3 1 roll T exec } def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED % n 2 div on stack + n eq not { exch pop } if % even numbers of points? delete one + ] aload /Points ED + showpoints not { Points aload pop } if +% { ] aload /Points ED } +% { n 2 mul 1 add -1 roll pop } ifelse % delete the mark symbol +} def +% +/Line { + NArray n 0 eq not + { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def + n { Lineto } repeat + CP 4 2 roll ArrowB L pop pop + } if +} def +% +/LineToYAxis { + /Ox ED % Save the x origin value + NArray % all x-y pairs on stack + n { 2 copy moveto % go to current point + Ox exch Lineto % line to y-axis + pop % delete old x-value + } repeat +} def +% +/LineToXAxis{ + /Oy ED % Save the y origin value + NArray % all x-y pairs on stack + n 0 eq not + { n 1 eq { 0 0 /n 2 def } if + ArrowA + /n n 2 sub def + CP 2 copy moveto pop Oy Lineto + n { 2 copy moveto pop Oy Lineto } repeat + CP + 4 2 roll + ArrowB + 2 copy moveto pop Oy + L + pop pop } if +} def +% +/Arcto { + /a [ 6 -2 roll ] cvx def + a r + /arcto load stopped { 5 } { 4 } ifelse { pop } repeat + a +} def +% +/CheckClosed { + dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq + and { pop pop /n n 1 sub def } if +} def +% +/Polygon { + NArray n 2 eq { 0 0 /n 3 def } if + n 3 lt + { n { pop pop } repeat } + { n 3 gt { CheckClosed } if + n 2 mul -2 roll + /y0 ED /x0 ED /y1 ED /x1 ED + x1 y1 + /x1 x0 x1 add 2 div def + /y1 y0 y1 add 2 div def + x1 y1 moveto + /n n 2 sub def + n { Lineto } repeat + x1 y1 x0 y0 6 4 roll Lineto + Lineto pop pop closepath } ifelse +} def +% +/SymbolPolygon { % on stack [ x y x y ... + counttomark % number of elements + 2 add /m ED + 2 copy m 2 roll % copy last two + m 2 div cvi /n ED % n pairs + /YA ED /XA ED % the start point + n 1 sub { + /YB ED /XB ED + /XLength XB XA sub def + /YLength YB YA sub def + /PAngle YLength XLength Atan def + /XYLength XLength YLength Pyth def + /nSym XYLength SymStep Div cvi def + /Shift Symbol stringwidth pop 2 Div def + /deltaX XLength nSym Div def + /deltaY YLength nSym Div def + XA Shift sub YA Shift sub moveto + nSym { + gsave rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + grestore + deltaX deltaY rmoveto + } repeat +% XB Shift sub YB Shift sub moveto Symbol show + /YA YB def /XA XB def + } repeat + pop % delete the mark symbol +} def +% +/Diamond { + /mtrx CM def + T rotate + /h ED + /w ED + dup 0 eq { pop } { CLW mul neg + /d ED + /a w h Atan def + /h d a sin Div h add def + /w d a cos Div w add def } ifelse + mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div + /ArrowA { moveto } def + /ArrowB { } def + false Line + closepath mtrx setmatrix } def +% +/Triangle { + /mtrx CM def + translate + rotate /h ED 2 div /w ED + dup CLW mul /d ED + /h h d w h Atan sin Div sub def + /w w d h w Atan 2 div dup cos exch sin Div mul sub def + mark + 0 d w neg d 0 h w d 0 d + /ArrowA { moveto } def + /ArrowB { } def + false + Line + closepath + mtrx +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% setmatrix } def + setmatrix pop +} def +% DG/SR modification end +% +/CCA { + /y ED /x ED + 2 copy y sub /dy1 ED + x sub /dx1 ED + /l1 dx1 dy1 Pyth def +} def +% +/CC { + /l0 l1 def + /x1 x dx sub def + /y1 y dy sub def + /dx0 dx1 def + /dy0 dy1 def + CCA + /dx dx0 l1 c exp mul dx1 l0 c exp mul add def + /dy dy0 l1 c exp mul dy1 l0 c exp mul add def + /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def + /x2 x l0 dx mul m mul sub def + /y2 y l0 dy mul m mul sub def + /dx l1 dx mul m mul neg def + /dy l1 dy mul m mul neg def +} def +% +/IC { + /c c 1 add def + c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse + /a a 2 mul 3 div 45 cos b exp div def + CCA + /dx 0 def + /dy 0 def +} def +% +/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def +/NC { CC x1 y1 x2 y2 x y curveto } def +/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def +/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def +/NAC { x2 y2 x y curveto CC x1 y1 } def +/EAC { x2 y2 x y ArrowB curveto pop pop } def +% +/OpenCurve { + NArray n 3 lt + { n { pop pop } repeat } + { BOC /n n 3 sub def n { NC } repeat EOC } ifelse +} def +% +/CurvePath { + %% for negative SymStep we calculate the distance + SymStep 0 lt { gsave PathLength SymStep div abs /SymStep ED grestore } if + 0.5 setflat + flattenpath /z 0 def /z0 0 def + { /y1 ED /x1 ED /y2 y1 def /x2 x1 def + x1 Shift sub y1 Shift sub moveto + gsave + curveticks + { x1 y1 translate startAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { startAngle rotate Symbol show } + ifelse + grestore /z0 z def } + { /y ED /x ED PathLength@ z z0 sub SymStep ge { + x Shift sub y Shift sub moveto + gsave + curveticks + { y yOld sub x xOld sub Atan 180 sub CorrAngle sub /rotAngle ED + x y translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore /z0 z def } if + /yOld y def /xOld x def } + {} %% the lineto part + { /y y2 def /x x2 def PathLength@ + x Shift sub y Shift sub moveto + gsave + curveticks + { y yOld sub x xOld sub Atan 180 sub /rotAngle ED + x y translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + x Shift sub y Shift sub moveto + rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + } + pathforall +% curveticks +% { gsave +% x y translate rotAngle rotate +% 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto +% SymbolLinewidth setlinewidth stroke grestore +% } if + z +} def +% +/OpenSymbolCurve { + OpenCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/AltCurve { + { false NArray n 2 mul 2 roll + [ n 2 mul 3 sub 1 roll ] aload + /Points ED + n 2 mul -2 roll } + { false NArray } ifelse + n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse +} def +% +/AltOpenSymbolCurve { + AltCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/ClosedCurve { + NArray n 3 lt + { n { pop pop } repeat } + { n 3 gt { CheckClosed } if + 6 copy n 2 mul 6 add 6 roll + IC CC x y moveto n { NC } repeat + closepath pop pop + } ifelse +} def +% +/ClosedSymbolCurve { + ClosedCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/CalcBezierSpline {% Christoph Bersch + 10 dict begin + /getX { Points exch 2 mul get } def + /getY { Points exch 2 mul 1 add get } def + /n Points length 1 sub 2 idiv def + /GetFirstControlPoints { + /x n array def + /tmp n array def + /b 2 def + x 0 rhs 0 get b div put + 1 1 n 1 sub { + /i exch def + tmp i 1 b div dup 4 1 roll put + i n 1 sub lt { 4 }{ 3.5 } ifelse exch sub /b exch def + x i rhs i get x i 1 sub get sub b div put + } for + 1 1 n 1 sub { + n exch sub + dup dup x exch 1 sub 2 copy 6 2 roll + get 3 1 roll tmp exch get + exch x exch get mul sub + put + } for + x + } def + % + n 1 eq { + 0 getX 2 mul 1 getX add 3 div + 0 getY 2 mul 1 getY add 3 div + exch dup 3 1 roll 2 mul 0 getX sub + exch dup 3 1 roll 2 mul 0 getY sub + [ 0 getX 0 getY 7 3 roll 1 getX 1 getY ] /outPoints exch def + } { + /outPoints 6 n mul 2 add array def + 0 1 n { + dup dup 6 mul dup 1 add + outPoints exch 5 -1 roll getY put + outPoints exch 3 -1 roll getX put + } for + /rhs n array def + 1 1 n 2 sub { + rhs exch dup dup getX 4 mul exch 1 add getX 2 mul add put + } for + rhs 0 0 getX 1 getX 2 mul add put + rhs n 1 sub dup getX 8 mul n getX add 2 div put + GetFirstControlPoints + 1 1 n 2 sub { + rhs exch dup dup getY 4 mul exch 1 add getY 2 mul add put + } for + rhs 0 0 getY 1 getY 2 mul add put + rhs n 1 sub dup getY 8 mul n getY add 2 div put + GetFirstControlPoints + 0 1 n 1 sub { + /i exch def + 2 copy + i get outPoints 6 i mul 3 add 3 -1 roll put + i get outPoints 6 i mul 2 add 3 -1 roll put + 2 copy + i n 1 sub lt { + i 1 add get i 1 add getY 2 mul exch sub outPoints 6 i mul 5 add 3 -1 roll put + i 1 add get i 1 add getX 2 mul exch sub outPoints 6 i mul 4 add 3 -1 roll put + }{ + n 1 sub get n getY add 2 div outPoints 6 n 1 sub mul 5 add 3 -1 roll put + n 1 sub get n getX add 2 div outPoints 6 n 1 sub mul 4 add 3 -1 roll put + } ifelse + } for + pop pop + } ifelse + outPoints + end +} def +/Spline { + /showpoints ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + ] /Points ED + n 1 gt { + CalcBezierSpline + mark exch aload pop + ArrowA + n 2 sub { + 6 2 roll 4 2 roll curveto + } repeat + 6 2 roll 4 2 roll ArrowB curveto + } if +} def +/OpenSymbolSpline { + Spline + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def +/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def +/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def +% +/FontDot { + DS 2 mul dup + matrix scale matrix concatmatrix exch matrix + rotate matrix concatmatrix exch + findfont exch makefont setfont +} def +% +/Rect { + x1 y1 y2 add 2 div moveto +% x1 y2 lineto +% x2 y2 lineto +% x2 y1 lineto +% x1 y1 lineto + x1 y1 lineto % counter clockwise path + x2 y1 lineto + x2 y2 lineto + x1 y2 lineto + closepath +} def +% +/OvalFrame { + x1 x2 eq y1 y2 eq or + { pop pop x1 y1 moveto x2 y2 L } + { y1 y2 sub abs x1 x2 sub abs 2 copy gt + { exch pop } { pop } ifelse + 2 div exch { dup 3 1 roll mul exch } if + 2 copy lt { pop } { exch pop } ifelse + /b ED + x1 y1 y2 add 2 div moveto + x1 y2 x2 y2 b arcto + x2 y2 x2 y1 b arcto + x2 y1 x1 y1 b arcto + x1 y1 x1 y2 b arcto + 16 { pop } repeat + closepath + } ifelse +} def +% +/Frame { + CLW mul /a ED + 3 -1 roll + 2 copy gt { exch } if + a sub /y2 ED + a add /y1 ED + 2 copy gt { exch } if + a sub /x2 ED + a add /x1 ED + 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse +} def +% +/BezierNArray { + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} def +% +/OpenBezier { + BezierNArray + n 1 eq + { pop pop } + { ArrowA n 4 sub 3 idiv + { 6 2 roll 4 2 roll curveto } repeat + 6 2 roll 4 2 roll ArrowB curveto } ifelse +} def +% +/OpenSymbolBezier { + OpenBezier + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/ClosedBezier { + BezierNArray + n 1 eq + { pop pop } + { moveto n 1 sub 3 idiv + { 6 2 roll 4 2 roll curveto } repeat + closepath } ifelse +} def +% +/ClosedSymbolBezier { + /f ED % save showpoints value + 2 copy /yEnd ED /xEnd ED + counttomark -2 roll 2 copy /yStart ED /xStart ED + counttomark 2 roll + f + ClosedBezier + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath + [ xEnd yEnd xStart yStart SymbolLine +} def +% +/BezierShowPoints { + gsave + Points aload length 2 div cvi /n ED + moveto + n 1 sub { lineto } repeat + CLW 2 div SLW [ 4 4 ] 0 setdash stroke + grestore +} def +% +/Parab { + /y0 ED /x0 ED /y1 ED /x1 ED + /dx x0 x1 sub 3 div def + /dy y0 y1 sub 3 div def + x0 dx sub y0 dy add x1 y1 ArrowA + x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB + curveto + /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def +} def +% +/Parab1 { % 1 end | 0 SP + /ySP ED /xSP ED /y1 ED /x1 ED + /dx xSP x1 sub 3 div def + /dy ySP y1 sub 3 div def + newpath x1 y1 moveto xSP y1 lineto xSP ySP lineto + x1 ySP lineto closepath clip + currentpoint + newpath moveto + xSP dx sub ySP dy add x1 y1 ArrowA + xSP dx add ySP dy add xSP 2 mul x1 sub y1 ArrowB + curveto + /Points [ x1 y1 xSP ySP xSP 2 mul x1 sub y1 ] def +} def +% +/Grid { + newpath + /a 4 string def + /b ED % psk@gridlabels in pt + /c ED % { \pst@usecolor\psgridlabelcolor } + /n ED % psk@griddots + cvi dup 1 lt { pop 1 } if + /s ED % \psk@subgriddiv + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if % \pst@number\psyunit abs + /dx ED dy div round dy mul % \pst@number\psxunit abs + /y0 ED dx div round dx mul + /x0 ED dy div round cvi + /y2 ED dx div round cvi + /x2 ED dy div round cvi + /y1 ED dx div round cvi + /x1 ED + /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def + /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def + b 0 gt { + /z1 b 4 div CLW 2 div add def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Helvetica findfont b scalefont setfont +% is set in pstricks.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% /NimbusSanL-Regu findfont b scalefont setfont + /b b .95 mul CLW 2 div add def } if + systemdict /setstrokeadjust known + { true setstrokeadjust /t { } def } + { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add + exch itransform } bind def } ifelse + gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse + /i x1 def + /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def + /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def + x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if + { i dx mul dup xGridOffset add y0 moveto + b 0 gt + { gsave c i a cvs dup stringwidth pop + /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse + h 0 gt {b neg}{z1} ifelse + rmoveto show grestore } if + dup t f moveto + g t L stroke + /i i w add def + } repeat + grestore + gsave + n 0 gt + % DG/SR modification begin - Nov. 7, 1997 - Patch 1 + %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } + { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } + % DG/SR modification end + { 2 setlinecap } ifelse + /i y1 def + /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def + /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def + y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if + { newpath i dy mul dup yGridOffset add x0 exch moveto + b 0 gt { gsave c i a cvs dup stringwidth pop + /z2 ED + w 0 gt {z1 z2 add neg} {z1} ifelse + h 0 gt {z1} {b neg} ifelse + rmoveto show grestore } if + dup f exch t moveto + g exch t L stroke + /i i h add def + } repeat + grestore +} def +% +/ArcArrow { + /d ED /b ED /a ED + gsave + newpath 0 -1000 moveto clip + newpath + 0 1 0 0 b + grestore + c mul + /e ED + pop pop pop r a e d PtoC y add exch x add + exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c + mul neg d +} def +% +% +/isbool { type (booleantype) cvn eq } def +% +/Ellipse { + dup isbool { /MoveToStart ED }{ /MoveToStart false def }ifelse % false or true + /rotAngle ED + /mtrx CM def + T + rotAngle rotate + scale + MoveToStart { 0 0 moveto 1 0 rmoveto } if % move to the start position + 0 0 1 5 3 roll arc + mtrx setmatrix +} def +% +/ArcAdjust { %%%% Vincent Guirardel +% given a target length (targetLength) and an initial angle (angle0) [in the stack], +% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0). +% This computes an angle t such that (x0,y0) is at distance +% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)). +% NOTE: this an absolute angle, it does not have to be added or substracted to angle0 +% contrary to TvZ's code. +% To achieve, this, one iterates the following process: start with some angle t, +% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]. +% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned. +% +% Another difference with TvZ's code is that we need d (=add/sub) to be defined. +% the value of d = add/sub is used to know on which side we have to move. +% It is only used in the initialisation of the angle before the iteration. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Input stack: 1: target length 2: initial angle +% variables used : rx, ry, d (=add/sub) +% + /targetLength ED /angle0 ED + /x0 rx angle0 cos mul def + /y0 ry angle0 sin mul def +% we are looking for an angle t such that (x0,y0) is at distance targetLength +% from the point M(t)=(rx*cos(t),ry*sin(t))) +%initialisation of angle (using 1st order approx = TvZ's code) + targetLength 57.2958 mul + angle0 sin rx mul dup mul + angle0 cos ry mul dup mul + add sqrt div +% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees +% (if the ellipse is very curved at the point where we draw the arrow, % +% the value can be much more than 360 degrees !) +% this should avoid going on the wrong side (more than 180 degrees) or go near +% a bad attractive point (at 180 degrees) + dup 90 ge { pop 90 } if + angle0 exch d % add or sub +% maximum number of times to iterate the iterative procedure: +% iterative procedure: takes an angle t on top of stack, computes a +% better angle (and put it on top of stack) + 30 { dup +% compute distance D between (x0,y0) and M(t) + dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt +% if D almost equals targetLength, we stop + dup targetLength sub abs 1e-5 le { pop exit } if +% stack now contains D t +% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]: +% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 ) + exch dup cos rx mul x0 sub exch sin ry mul y0 sub +% stack contains: y(t)-y0, x(t)-x0, d + 2 index Div targetLength mul y0 add ry Div exch + 2 index Div targetLength mul x0 add rx Div +% stack contains x(t')/rx , y(t')/ry , d +% now compute t', and remove D from stack + atan exch pop + } repeat +% we don't look at what happened... in particular, if targetLength is greater +% than the diameter of the ellipse... +% the final angle will be around /angle0 + 180. maybe we should treat this pathological case... +% after iteration, stack contains an angle t such that M(t) is the tail of the arrow +% to give back the result as a an angle relative to angle0 we could add the following line: +% angle0 sub 0 exch d +% +% begin bug fix 2006-01-11 +% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180 +%(we don't want to make the ellipse turn more or less than it should)... +dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse +% end bug fix +} def +% +/EllipticArcArrow { + /d ED % is add or sub + /b ED % arrow procedure + /a1 ED % angle + gsave + newpath + 0 -1000 moveto + clip % Set clippath far from arrow. + newpath + 0 1 0 0 b % Draw arrow to determine length. + grestore +% Length of arrow is on top of stack. Next 3 numbers are junk. +% + a1 exch ArcAdjust % Angular position of base of arrow. + /a2 ED + pop pop pop + a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig + a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig + a1 cos rx mul xOrig add % + a1 sin ry mul yOrig add % +% Now arrow tip coor and base coor are on stack. + b pop pop pop pop % Draw arrow, and discard coordinates. + a2 CLW 8 div +% change value of d (test it by looking if `` 1 1 d '' gives 2 or not ) + 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse + ArcAdjust +% resets original value of d + 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap. +} def +%%------------------ tvz/DG/hv (2004-05-10) end -------------------%% +% +/Rot { CP CP translate 3 -1 roll neg rotate NET } def +% +/RotBegin { + tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if + /TMatrix [ TMatrix CM ] cvx def + /a ED + a Rot /RAngle [ RAngle dup a add ] cvx def +} def +% +/RotEnd { + /TMatrix [ TMatrix setmatrix ] cvx def + /RAngle [ RAngle pop ] cvx def +} def +% +/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def +/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def +/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def +% +/Uput { + /a ED + add 2 div /h ED 2 + div /w ED + /s a sin def + /c a cos def + /b s abs c abs 2 copy gt dup + /q ED + { pop } { exch pop } ifelse def + /w1 c b div w mul def + /h1 s b div h mul def + q { w1 abs w sub dup c mul abs }{ h1 abs h sub dup s mul abs } ifelse +} def +% +/UUput { + 5 dict begin + /z ED + abs /y ED + /x ED + q { x s div c mul abs y gt }{ x c div s mul abs y gt } ifelse + { x x mul y y mul sub z z mul add sqrt z add } + { q { x s div } { x c div } ifelse abs + } ifelse + a PtoC + h1 add exch + w1 add exch + end +} def +% +end +%-----------------------------------------------------------------------------% +% +% END pstricks.pro diff --git a/graphics/pstricks/base/dvips/pstricks97.pro b/graphics/pstricks/base/dvips/pstricks97.pro new file mode 100644 index 0000000000..06a1f17766 --- /dev/null +++ b/graphics/pstricks/base/dvips/pstricks97.pro @@ -0,0 +1,225 @@ +%! +% PostScript prologue for pstricks.tex. +% Version 97 patch 3, 98/06/01 +% For distribution, see pstricks.tex. +% +/tx@Dict 200 dict def tx@Dict begin +/ADict 25 dict def +/CM { matrix currentmatrix } bind def +/SLW /setlinewidth load def +/CLW /currentlinewidth load def +/CP /currentpoint load def +/ED { exch def } bind def +/L /lineto load def +/T /translate load def +/TMatrix { } def +/RAngle { 0 } def +/Atan { /atan load stopped { pop pop 0 } if } def +/Div { dup 0 eq { pop } { div } ifelse } def +/NET { neg exch neg exch T } def +/Pyth { dup mul exch dup mul add sqrt } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def +/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } +def +/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def +} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ } +/pathforall load stopped { pop pop pop pop } if z } def +/STP { .996264 dup scale } def +/STV { SDict begin normalscale end STP } def +/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def +PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y +mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul +/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] +0 } ifelse setdash stroke } def +/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt +{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add +def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if +] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1 +setlinecap stroke } def +/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch +2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 +% DG/SR modification begin - Dec. 12, 1997 - Patch 2 +%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a +% DG/SR modification end +Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict +/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1 +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } +% def +a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore +pop pop } def +% DG/SR modification end +/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg +exch 3 index sub exch Atan rotate newpath } def +/EndArrow { @mtrx setmatrix CP grestore end } def +/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 +scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill +grestore } def +/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0 +CLW moveto } def +/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2 +div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0 +CLW moveto } def +/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW +2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0 +curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto } +def +/SD { 0 360 arc fill } def +/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS +CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def +/Shadow { [ { /moveto load } { /lineto load } { /curveto load } { +/closepath load } /pathforall load stopped { pop pop pop pop CP /moveto +load } if ] cvx newpath 3 1 roll T exec } def +/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch +cvi def } def +/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if +f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def +/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub +def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def +/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } +ifelse { pop } repeat a } def +/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq +and { pop pop /n n 1 sub def } if } def +/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } +repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 +ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 +moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto +Lineto pop pop closepath } ifelse } def +/Diamond { /mtrx CM def T rotate /h ED /w ED dup 0 eq { pop } { CLW mul +neg /d ED /a w h Atan def /h d a sin Div h add def /w d a cos Div w add +def } ifelse mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 +div /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx +setmatrix } def +% DG modification begin - Jan. 15, 1997 +%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { +%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 +%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0 +%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx +%setmatrix } def +/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup +CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 +div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0 +d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% setmatrix } def +setmatrix pop } def +% DG/SR modification end +/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth +def } def +/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth +def } def +/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 +def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp +mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos +abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def +/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul +m mul neg def } def +/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } +ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } +def +/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def +/NC { CC x1 y1 x2 y2 x y curveto } def +/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def +/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def +/NAC { x2 y2 x y curveto CC x1 y1 } def +/EAC { x2 y2 x y ArrowB curveto pop pop } def +/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def +n { NC } repeat EOC } ifelse } def +/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload +/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop +pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def +/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { +CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } +repeat closepath pop pop } ifelse } def +/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def +/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def +/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } +def +/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix +rotate matrix concatmatrix exch findfont exch makefont setfont } def +/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto +x1 y1 lineto closepath } def +/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1 +y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div +exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse +/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto +x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath } +ifelse } def +/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add +/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq { +pop pop Rect } { OvalFrame } ifelse } def +/BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop +} if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ] +aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def +/OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6 +2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto } +ifelse } def +/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { +6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def +/BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1 +sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore } +def +/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1 +sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA +x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 +y0 x0 2 mul x1 sub y1 ] def } def +/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } +if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if +/dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div +round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div +round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub +0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def +/Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def } +if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def } +{ /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add +exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n +div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1 +dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt { +dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt { +pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup +stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg} +{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i +w add def } repeat grestore gsave n 0 gt +% DG/SR modification begin - Nov. 7, 1997 - Patch 1 +%{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } +{ 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } +% DG/SR modification end +{ 2 setlinecap } ifelse /i y1 def /f x1 dx mul +n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n +div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop +1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs +dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt +{z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g +exch t L stroke /i i h add def } repeat grestore } def +/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0 +1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add +exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c +mul neg d } def +/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def +/Rot { CP CP translate 3 -1 roll neg rotate NET } def +/RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } +def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle +dup a add ] cvx def } def +/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] +cvx def } def +/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def +/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def +/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def +/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s +abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b +div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } { +h1 abs h sub dup s mul abs } ifelse } def +/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s +mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q +{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add +exch } def +/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible +/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def +} if } ifelse } def +/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def +/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit +neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def +/IfVisible true def } def +end +% END pstricks.pro diff --git a/graphics/pstricks/base/generic/pst-fp.tex b/graphics/pstricks/base/generic/pst-fp.tex new file mode 100644 index 0000000000..2d4e748193 --- /dev/null +++ b/graphics/pstricks/base/generic/pst-fp.tex @@ -0,0 +1,717 @@ +%% $Id: pst-fp.tex 465 2017-05-22 17:50:57Z herbert $ +%% +%% +%% This is file `pst-fp.tex', +%% +%% IMPORTANT NOTICE: +%% +%% Package `pst-fp.tex' +%% +%% Herbert Voss <hvoss@tug.org> +%% stolen from the fp package by Michael Mehlich +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% `pst-fp' is a PSTricks related package for a division, +%% multiplication and addition +%% +\csname PSTFPloaded\endcsname +\let\PSTFPloaded\endinput +% +% Requires some packages +\ifx\PSTricksLoaded\endinput\else\input pstricks \fi +% +\def\fileversion{0.05} +\def\filedate{2010/01/17} +\message{`pst-fp' v\fileversion, \filedate\space (hv)} +% +\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax + +%fixed point arithmetic with values between (including) +% -999999999999999999.999999999999999999 +% and +999999999999999999.999999999999999999 + +\def\pstFPadd#1#2#3{\pstFP@callc\pstFP@add#1{#2}{#3}+\relax} % #1 := #2+#3 +\def\pstFPsub#1#2#3{\pstFP@callc\pstFP@add#1{#2}{-#3}-\relax}% #1 := #2-#3 +\def\pstFPmul#1#2#3{\pstFP@callc\pstFP@mul#1{#2}{#3}} % #1 := #2*#3 +\def\pstFPdiv#1#2#3{\pstFP@callc\pstFP@div#1{#2}{#3}} % #1 := #2/#3 + +\def\pst@int#1{\expandafter\pst@@int#1..\@nil} +\def\pst@@int#1.#2.\@nil{#1} +\def\pst@Int#1{% + \@tempdima=#1\relax% + \expandafter\pst@@Int\the\@tempdima\@nil} +\def\pst@@Int#1.#2\@nil{#1} + +% +\def\pstFPMul#1#2#3{\pstFP@callc\pstFP@mul#1{#2}{#3}% % #1 := int(#2*#3) + \edef#1{\pst@int{#1}}}% +\def\pstFPDiv#1#2#3{\pstFP@callc\pstFP@div#1{#2}{#3}% % #1 := int(#2/#3) + \edef#1{\pst@int{#1}}}% +\def\pstFPstripZeros#1#2{\pst@dimm=#1pt\relax \edef#2{\strip@pt\pst@dimm}} +% +\countdef\pstFP@actcounter=10 % register 0 for counter +\ifnum\pstFP@actcounter<60\relax \pstFP@actcounter=60\fi + +\newcount\pstFP@xs %sign of 1st value +\newcount\pstFP@xia%integer part of 1st value +\newcount\pstFP@xib%integer part of 1st value +\newcount\pstFP@xfa%fractional part of 1st value +\newcount\pstFP@xfb%fractional part of 1st value + +\countdef\pstFP@ys=5 %sign of 2nd value +\countdef\pstFP@yia=6%integer part of 2nd value +\countdef\pstFP@yib=7%integer part of 2nd value +\countdef\pstFP@yfa=8%fractional part of 2nd value +\countdef\pstFP@yfb=9%fractional part of 2nd value + +\countdef\pstFP@xk=10 %registers for splitting 1st value +\countdef\pstFP@xl=11 +\countdef\pstFP@xm=12 +\countdef\pstFP@xn=13 +\countdef\pstFP@xo=14 +\countdef\pstFP@xp=15 +\countdef\pstFP@xq=16 +\countdef\pstFP@xr=17 +\countdef\pstFP@xz=18 +\countdef\pstFP@xt=19 +\countdef\pstFP@xu=20 +\countdef\pstFP@xv=21 + +\countdef\pstFP@yk=22 %registers for splitting 2nd value +\countdef\pstFP@yl=23 +\countdef\pstFP@ym=24 +\countdef\pstFP@yn=25 +\countdef\pstFP@yo=26 +\countdef\pstFP@yp=27 +\countdef\pstFP@yq=28 +\countdef\pstFP@yr=29 +\countdef\pstFP@yz=30 +\countdef\pstFP@yt=31 +\countdef\pstFP@yu=32 +\countdef\pstFP@yv=33 + +\newcount\pstFP@rega %auxiliary registers +\newcount\pstFP@regb +\countdef\pstFP@regc=36 +\countdef\pstFP@regd=37 +\countdef\pstFP@rege=38 + +\countdef\pstFP@rs=39 %result registers +\countdef\pstFP@ria=40 +\countdef\pstFP@rib=41 +\countdef\pstFP@rfa=42 +\countdef\pstFP@rfb=43 + +\newcount\pstFP@regs %local auxiliary registers +\countdef\pstFP@count=45 +\countdef\pstFP@res=46 +\countdef\pstFP@shift=47 +\newcount\pstFP@times +\countdef\pstFP@prod=49 + +%auxiliary macros which may be used in all of the following macros +\newif\ifpstFP@test + +\def\pstFP@ignorenext#1{} +\def\pstFP@first#1#2\relax{#1} +\def\pstFP@swallow#1\relax{} +% +\def\ifpstFP@zero#1{% + \ifnum + \expandafter\ifnum\csname pstFP@#1ia\endcsname=0 0\else1\fi + \expandafter\ifnum\csname pstFP@#1ib\endcsname=0 0\else1\fi + \expandafter\ifnum\csname pstFP@#1fa\endcsname=0 0\else1\fi + \expandafter\ifnum\csname pstFP@#1fb\endcsname=0 0\else1\fi% + =0\relax +} +% +%read value +% +\def\pstFP@correctintcounter#1\relax{% + {\edef\pstFP@tmp{#1}% + \pstFP@count=0\relax% + \loop% + \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}% + \expandafter\ifx\pstFP@tmpa0\relax% + \advance\pstFP@count1\relax% + \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}% + \repeat% + \ifnum\pstFP@count>18\relax \typeout{>>>> Overflow}\fi% + \expandafter\if!\pstFP@tmp!% + \advance\pstFP@count-18\relax% + \pstFP@count=-\pstFP@count% + \loop% + \ifnum\pstFP@count>0\relax% + \pstFP@regc=\pstFP@rega% + \divide\pstFP@rega10\relax\multiply\pstFP@rega10\relax% + \advance\pstFP@regc-\pstFP@rega\multiply\pstFP@regc100000000\relax% + \divide\pstFP@rega10\relax% + \divide\pstFP@regb10\relax\advance\pstFP@regb\pstFP@regc% + \advance\pstFP@count-1\relax% + \repeat% + \global\pstFP@rega=\pstFP@rega% + \global\pstFP@regb=\pstFP@regb% + \else% + \typeout{>>>>Number too big}% + \fi% + }% +} +\def\pstFP@@setintcounter#1#2#3#4#5#6#7#8#9{% + \pstFP@regb=#1#2#3#4#5#6#7#8#9\relax% + \pstFP@correctintcounter% +} +\def\pstFP@setintcounter#1#2#3#4#5#6#7#8#9{% + \pstFP@rega=#1#2#3#4#5#6#7#8#9\relax% + \pstFP@@setintcounter% +} + +\def\pstFP@@setfractcounter#1#2#3#4#5#6#7#8#9{% + \pstFP@regb=#1#2#3#4#5#6#7#8#9\relax% + \pstFP@swallow% +} +\def\pstFP@setfractcounter#1#2#3#4#5#6#7#8#9{% + \pstFP@rega=#1#2#3#4#5#6#7#8#9\relax% + \pstFP@@setfractcounter% +} + +\def\pstFP@getsign#1\relax{% + {\pstFP@regs=1\relax% + \edef\pstFP@tmp{#1}% + \loop% + \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}% + \expandafter\ifx\pstFP@tmpa-\relax% + \multiply\pstFP@regs-1\relax% + \fi% + \ifnum\expandafter\ifx\pstFP@tmpa-1\else0\fi\expandafter\ifx\pstFP@tmpa+1\else0\fi>0% + \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}% + \repeat% + \global\let\pstFP@tmp\pstFP@tmp% + \global\pstFP@regs=\pstFP@regs% + }% +} + +\def\pstFP@removeleadingzeros#1\relax{% + {\edef\pstFP@tmp{#1}% + \loop% + \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}% + \expandafter\ifx\pstFP@tmpa0\relax% + \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}% + \repeat% + \global\let\pstFP@tmp\pstFP@tmp% + }% +} + +\newif\ifpstFP@nonstop +\def\pstFP@strip#1{% + {\edef\pstFP@tmp{#1}% + \edef\pstFP@tmpb{}% + \ifx\pstFP@tmp\@empty\else% + \pstFP@nonstoptrue% + \loop% + \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}% + \expandafter\ifx\pstFP@tmpa-\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa+\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa0\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa1\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa2\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa3\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa4\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa5\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa6\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa7\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa8\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \expandafter\ifx\pstFP@tmpa9\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else% + \ifx\pstFP@tmpa\@empty\pstFP@nonstopfalse\else% + \ifx\pstFP@tmpa\space\pstFP@nonstopfalse\else% + \typeout{>>> Illegal character \pstFP@tmpa\space found in float number}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% + \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}% + \ifx\pstFP@tmp\@empty\pstFP@nonstopfalse\fi% + \ifpstFP@nonstop% + \repeat% + \fi% + \global\let\pstFP@tmp\pstFP@tmpb% + }% +} + +\def\pstFP@readvalue#1#2#3{% + % #1 macro family to catch the value + % #2.#3 value + % + % regular expression [+|-]*[d]_0^18.[d]* + % + \pstFP@strip{#2}% + %sign + \expandafter\pstFP@getsign\pstFP@tmp\relax% + \csname pstFP@#1s\endcsname=\pstFP@regs% + % + %integer part + \pstFP@removeleadingzeros\pstFP@tmp\relax% + \expandafter\pstFP@setintcounter\pstFP@tmp000000000000000000\relax% + \csname pstFP@#1ia\endcsname=\pstFP@rega% + \csname pstFP@#1ib\endcsname=\pstFP@regb% + % + %fractional part + \pstFP@strip{#3}% + \expandafter\pstFP@setfractcounter\pstFP@tmp000000000000000000\relax% + \csname pstFP@#1fa\endcsname=\pstFP@rega% + \csname pstFP@#1fb\endcsname=\pstFP@regb% + % + %correct sign + \ifnum\pstFP@rega=0\relax% + \ifnum\pstFP@regb=0\relax% + \expandafter\ifnum\csname pstFP@#1ib\endcsname=0\relax% + \expandafter\ifnum\csname pstFP@#1ia\endcsname=0\relax% + \csname pstFP@#1s\endcsname=1\relax% + \fi% + \fi% + \fi% + \fi% +} +% +%store value in macro +% +\def\pstFP@store#1#2{% + % #1 macro + % #2 macro family (value) to store + % + \ifpstFP@zero{#2}% + \csname pstFP@#2s\endcsname=1\relax% + \fi% + \expandafter\ifnum\csname pstFP@#2s\endcsname<0\relax% + \edef#1{-}% + \else% + \edef#1{}% + \fi% + \expandafter\ifnum\csname pstFP@#2ia\endcsname=0\relax% + \expandafter\ifnum\csname pstFP@#2ib\endcsname=0\relax% + \edef#1{#10}% + \else% + \edef#1{#1\expandafter\the\csname pstFP@#2ib\endcsname}% + \fi% + \else% + \expandafter\advance\csname pstFP@#2ib\endcsname1000000000\relax% + \edef#1{#1\expandafter\the\csname pstFP@#2ia\endcsname\expandafter\pstFP@ignorenext\the\csname pstFP@#2ib\endcsname}% + \fi% + \expandafter\advance\csname pstFP@#2fa\endcsname1000000000\relax% + \expandafter\advance\csname pstFP@#2fb\endcsname1000000000\relax% + \edef#1{#1\noexpand.\expandafter\pstFP@ignorenext\the\csname pstFP@#2fa\endcsname\expandafter\pstFP@ignorenext\the\csname pstFP@#2fb\endcsname}% +} +%macros to expand some arguments +% +\def\pstFP@callc#1#2#3#4{% + % #1 macro to call + % #2 macro, which gets the result + % #3 1st value + % #4 2nd value + % expand the values and split them into the integer and the fractional parts + \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax#4..\noexpand\relax}% + \next% +} +% +\def\pstFP@divten#1{% + \expandafter\pstFP@regc\csname pstFP@#1ia\endcsname% + \expandafter\divide\csname pstFP@#1ia\endcsname10\relax% + \expandafter\pstFP@regb\csname pstFP@#1ia\endcsname% + \multiply\pstFP@regb10\relax% + \advance\pstFP@regc-\pstFP@regb% + \multiply\pstFP@regc100000000\relax% + % + \expandafter\pstFP@rega\csname pstFP@#1ib\endcsname% + \expandafter\divide\csname pstFP@#1ib\endcsname10\relax% + \expandafter\pstFP@regb\csname pstFP@#1ib\endcsname% + \multiply\pstFP@regb10\relax% + \advance\pstFP@rega-\pstFP@regb% + \multiply\pstFP@rega100000000\relax% + \expandafter\advance\csname pstFP@#1ib\endcsname\pstFP@regc% + % + \expandafter\pstFP@regc\csname pstFP@#1fa\endcsname% + \expandafter\divide\csname pstFP@#1fa\endcsname10\relax% + \expandafter\pstFP@regb\csname pstFP@#1fa\endcsname% + \multiply\pstFP@regb10\relax% + \advance\pstFP@regc-\pstFP@regb% + \multiply\pstFP@regc100000000\relax% + \expandafter\advance\csname pstFP@#1fa\endcsname\pstFP@rega% + % + \expandafter\divide\csname pstFP@#1fb\endcsname10\relax% + \expandafter\advance\csname pstFP@#1fb\endcsname\pstFP@regc% +} +% +\def\pstFP@multen#1{% + \expandafter\multiply\csname pstFP@#1ia\endcsname10\relax% + \expandafter\ifnum\csname pstFP@#1ib\endcsname<100000000\relax% + \else% + \expandafter\pstFP@regc\csname pstFP@#1ib\endcsname% + \divide\pstFP@regc100000000% + \expandafter\advance\csname pstFP@#1ia\endcsname\pstFP@regc% + \multiply\pstFP@regc100000000% + \expandafter\advance\csname pstFP@#1ib\endcsname-\pstFP@regc% + \fi% + \expandafter\multiply\csname pstFP@#1ib\endcsname10\relax% + \expandafter\ifnum\csname pstFP@#1fa\endcsname<100000000\relax% + \else% + \expandafter\pstFP@regc\csname pstFP@#1fa\endcsname% + \divide\pstFP@regc100000000% + \expandafter\advance\csname pstFP@#1ib\endcsname\pstFP@regc% + \multiply\pstFP@regc100000000% + \expandafter\advance\csname pstFP@#1fa\endcsname-\pstFP@regc% + \fi% + \expandafter\multiply\csname pstFP@#1fa\endcsname10\relax% + \expandafter\ifnum\csname pstFP@#1fb\endcsname<100000000\relax% + \else% + \expandafter\pstFP@regc\csname pstFP@#1fb\endcsname% + \divide\pstFP@regc100000000% + \expandafter\advance\csname pstFP@#1fa\endcsname\pstFP@regc% + \multiply\pstFP@regc100000000% + \expandafter\advance\csname pstFP@#1fb\endcsname-\pstFP@regc% + \fi% + \expandafter\multiply\csname pstFP@#1fb\endcsname10\relax% +} +% +\def\pstFP@counttimes{% + {\global\pstFP@times=0\relax% + \loop% + \ifnum% + \ifnum\pstFP@xia>\pstFP@yia1% + \else\ifnum\pstFP@xia<\pstFP@yia0% + \else% + \ifnum\pstFP@xib>\pstFP@yib1% + \else\ifnum\pstFP@xib<\pstFP@yib0% + \else% + \ifnum\pstFP@xfa>\pstFP@yfa1% + \else\ifnum\pstFP@xfa<\pstFP@yfa0% + \else% + \ifnum\pstFP@xfb>\pstFP@yfb1% + \else\ifnum\pstFP@xfb<\pstFP@yfb0% + \else% + 1% + \fi\fi% + \fi\fi% + \fi\fi% + \fi\fi% + =1\relax% + \global\advance\pstFP@times1\relax% + \global\advance\pstFP@xfb-\pstFP@yfb% + \ifnum\pstFP@xfb<0\relax% + \global\advance\pstFP@xfb1000000000\relax% + \global\advance\pstFP@xfa-1\relax% + \fi% + \global\advance\pstFP@xfa-\pstFP@yfa% + \ifnum\pstFP@xfa<0\relax% + \global\advance\pstFP@xfa1000000000\relax% + \global\advance\pstFP@xib-1\relax% + \fi% + \global\advance\pstFP@xib-\pstFP@yib% + \ifnum\pstFP@xib<0\relax% + \global\advance\pstFP@xib1000000000\relax% + \global\advance\pstFP@xia-1\relax% + \fi% + \global\advance\pstFP@xia-\pstFP@yia% + \repeat% + }% +} +% +\def\pstFP@add#1#2.#3.#4\relax#5.#6.#7\relax#8\relax{% + % #1 macro, which gets the result + % #2 integer part of 1st value + % #3 fractional part of 1st value + % #4 dummy to swallow everthing after the 2nd '.' + % #5 integer part of 2nd value + % #6 fractional part of 2nd value + % #7 dummy to swallow everthing after the 2nd '.' + % + {\pstFP@readvalue{x}{#2}{#3}% + \pstFP@readvalue{y}{#5}{#6}% + % + \ifnum\pstFP@xs=\pstFP@ys% + \advance\pstFP@xfb\pstFP@yfb% + \advance\pstFP@xfa\pstFP@yfa% + \ifnum\pstFP@xfb<1000000000\relax\else% + \advance\pstFP@xfb-1000000000\relax% + \advance\pstFP@xfa1\relax% + \fi% + \advance\pstFP@xib\pstFP@yib% + \ifnum\pstFP@xfa<1000000000\relax\else% + \advance\pstFP@xfa-1000000000\relax% + \advance\pstFP@xib1\relax% + \fi% + \advance\pstFP@xia\pstFP@yia% + \ifnum\pstFP@xib<1000000000\relax\else% + \advance\pstFP@xib-1000000000\relax% + \advance\pstFP@xia1\relax% + \fi% + \ifnum\pstFP@xia<1000000000\relax\else% + \pstFP@errmessage{Overflow}% + \fi% + \pstFP@store\pstFP@tmp{x}% + \else% + \advance\pstFP@xfb-\pstFP@yfb% + \ifnum\pstFP@xfb<0\relax% + \advance\pstFP@yfa1\relax% + \advance\pstFP@xfb1000000000\relax% + \fi% + \advance\pstFP@xfa-\pstFP@yfa% + \ifnum\pstFP@xfa<0\relax% + \advance\pstFP@yib1\relax% + \advance\pstFP@xfa1000000000\relax% + \fi% + \advance\pstFP@xib-\pstFP@yib% + \ifnum\pstFP@xib<0\relax% + \advance\pstFP@yia1\relax% + \advance\pstFP@xib1000000000\relax% + \fi% + \advance\pstFP@xia-\pstFP@yia% + \ifnum\pstFP@xia<0\relax% + \pstFP@xs=-\pstFP@xs% + \ifnum\pstFP@xfb=0\relax\else% + \advance\pstFP@xfb-1000000000\relax\pstFP@xfb=-\pstFP@xfb% + \advance\pstFP@xfa1\relax% + \fi% + \ifnum\pstFP@xfa=0\relax\else% + \advance\pstFP@xfa-1000000000\relax\pstFP@xfa=-\pstFP@xfa% + \advance\pstFP@xib1\relax% + \fi% + \ifnum\pstFP@xib=0\relax\else% + \advance\pstFP@xib-1000000000\relax\pstFP@xib=-\pstFP@xib% + \advance\pstFP@xia1\relax% + \fi% + \relax\pstFP@xia=-\pstFP@xia% + \fi% + \pstFP@store\pstFP@tmp{x}% + \fi% + \global\let\pstFP@tmp\pstFP@tmp% + }% +% \pstFPstripZeros\pstFP@tmp{#1}% + \let#1\pstFP@tmp +} + + +\def\pstFP@div#1#2.#3.#4\relax#5.#6.#7\relax{% + % #1 macro, which gets the result + % #2 integer part of 1st value + % #3 fractional part of 1st value + % #4 dummy to swallow everthing after the 2nd '.' + % #5 integer part of 2nd value + % #6 fractional part of 2nd value + % #7 dummy to swallow everthing after the 2nd '.' + % + % algorithmic idea (for x>0, y>0) + % - %determine \pstFP@shift such that y*10^\pstFP@shift <100000000<=y*10^(\pstFP@shift+1) + % - %determine \pstFP@shift' such that x*10^\pstFP@shift'<100000000<=x*10^(\pstFP@shift+1) + % - x=x*\pstFP@shift' + % - y=y*\pstFP@shift + % - \pstFP@shift=\pstFP@shift-\pstFP@shift' + % - res=0 + % - while y>0 %fixed-point representation! + % - \pstFP@times=0 + % - while x>y + % - \pstFP@times=\pstFP@times+1 + % - x=x-y + % - end + % - y=y/10 + % - res=10*res+\pstFP@times/1000000000 + % - end + % - %shift the result according to \pstFP@shift + % + {\pstFP@readvalue{x}{#2}{#3}% + \pstFP@readvalue{y}{#5}{#6}% + % + %sign + \multiply\pstFP@xs\pstFP@ys% + \pstFP@rs=\pstFP@xs% + % + %compute division + \ifpstFP@zero{y}% + \typeout{>>>>Division by zero}% + \else% + \ifpstFP@zero{x}\def\next##1{\edef\pstFP@tmp{0}}\else\def\next##1{##1}\fi% + \next% + {\pstFP@shift=0\relax% + \loop% + \ifnum\pstFP@yia<100000000\relax% + \pstFP@multen{y}% + \advance\pstFP@shift1\relax% + \repeat% + \loop% + \ifnum\pstFP@xia<100000000\relax% + \pstFP@multen{x}% + \advance\pstFP@shift-1\relax% + \repeat% + \pstFP@ria=0\pstFP@rib=0\pstFP@rfa=0\pstFP@rfb=0\relax% + \loop% + \ifpstFP@zero{y}\else% + \pstFP@counttimes%divides x by \pstFP@times*y + \pstFP@divten{y}% + \pstFP@multen{r}% + \advance\pstFP@rfb\pstFP@times% + \ifnum\pstFP@rfb<1000000000\relax\else% + \advance\pstFP@rfa1\advance\pstFP@rfb-1000000000\relax% + \ifnum\pstFP@rfa<1000000000\relax\else% + \advance\pstFP@rib1\advance\pstFP@rfa-1000000000\relax% + \ifnum\pstFP@rib<1000000000\relax\else% + \advance\pstFP@ria1\advance\pstFP@rib-1000000000\relax% + \fi% + \fi% + \fi% + \repeat% + \loop% + \ifnum\pstFP@shift>17% + \advance\pstFP@shift-1\relax% + \ifnum\pstFP@ria<100000000\else\pstFP@ria=-1\fi% + \ifnum\pstFP@ria<0\pstFP@ria=-1\fi% + \pstFP@multen{r}% + \repeat% + \ifnum\pstFP@ria<1000000000\else\pstFP@ria=-1\fi% + \loop% + \ifnum\pstFP@shift<17% + \advance\pstFP@shift1\relax% + \pstFP@divten{r}% + \repeat% + \ifnum\pstFP@ria<0\relax% + \typeout{>>>>Overflow}% + \else% + \pstFP@store\pstFP@tmp{r}% + \fi% + }% + \fi% + % + \global\let\pstFP@tmp=\pstFP@tmp% + % + }% +% \pstFPstripZeros\pstFP@tmp{#1}% + \let#1\pstFP@tmp +} +%multiply two values + +\def\pstFP@firstnine#1#2#3#4#5#6#7#8#9{% + \pstFP@res=#1#2#3#4#5#6#7#8#9\relax% +} +\def\pstFP@@ninesplit#1\relax#2\end#3{% + #1% + \edef#3{#2}% +} +\def\pstFP@ninesplit#1{% + \edef#1{\expandafter\pstFP@firstnine\pstFP@rd}% + \expandafter\pstFP@@ninesplit#1\end#1\relax% +} + +\def\pstFP@split#1#2#3#4{% + % #1 highest three digits + % #2 medium three digits + % #3 least three digits + % #4 counter + \pstFP@regc=#4% + \divide\pstFP@regc1000000\relax% + #1=\pstFP@regc% + \multiply\pstFP@regc-1000000\relax\advance\pstFP@regc#4% + #3=\pstFP@regc% + \divide\pstFP@regc1000\relax% + #2=\pstFP@regc% + \multiply\pstFP@regc-1000\relax\advance\pstFP@regc#3% + #3=\pstFP@regc% +} + +\def\pstFP@@mul#1#2#3{% + \pstFP@regc=\csname pstFP@x#1\endcsname% + \multiply\pstFP@regc\csname pstFP@y#2\endcsname% + \advance\pstFP@prod\pstFP@regc% + % + \ifx#3\relax% + \let\next=\relax% + \else% + \let\next=\pstFP@@mul% + \fi% + \next#3% +} + +\def\pstFP@saveshift{% + % save rightmost three digits + \pstFP@regc=\pstFP@prod% + \divide\pstFP@prod1000\relax% + \multiply\pstFP@prod1000\relax% + \advance\pstFP@regc-\pstFP@prod% + \advance\pstFP@regc1000\relax% + \edef\pstFP@rd{\expandafter\pstFP@ignorenext\the\pstFP@regc\pstFP@rd}% + % + \divide\pstFP@prod1000\relax% +} + +\def\pstFP@mul#1#2.#3.#4\relax#5.#6.#7\relax{% + % #1 macro, which gets the result + % #2 integer part of 1st value + % #3 fractional part of 1st value + % #4 dummy to swallow everthing after the 2nd '.' + % #5 integer part of 2nd value + % #6 fractional part of 2nd value + % #7 dummy to swallow everthing after the 2nd '.' + % + % split value in various parts + % x y = 123 456 789 123 456 789 . 123 456 789 123 456 789 + % -> xk xl xm xn xo xp xq xr xs xt xu xv + % -> yk yl ym yn yo yp yq yr ys yt yu yv + % multiply these parts and save the result wrt the necessary shifts + % + {\pstFP@readvalue{x}{#2}{#3}% + \pstFP@readvalue{y}{#5}{#6}% + % + %sign + \multiply\pstFP@xs\pstFP@ys% + \pstFP@rs=\pstFP@xs% + % + % split parts + \pstFP@split\pstFP@xk\pstFP@xl\pstFP@xm\pstFP@xia\pstFP@split\pstFP@xn\pstFP@xo\pstFP@xp\pstFP@xib% + \pstFP@split\pstFP@xq\pstFP@xr\pstFP@xz\pstFP@xfa\pstFP@split\pstFP@xt\pstFP@xu\pstFP@xv\pstFP@xfb% + \pstFP@split\pstFP@yk\pstFP@yl\pstFP@ym\pstFP@yia\pstFP@split\pstFP@yn\pstFP@yo\pstFP@yp\pstFP@yib% + \pstFP@split\pstFP@yq\pstFP@yr\pstFP@yz\pstFP@yfa\pstFP@split\pstFP@yt\pstFP@yu\pstFP@yv\pstFP@yfb% + % + \pstFP@prod=0\relax% + \edef\pstFP@rd{}% + % + %compute result + \pstFP@@mul vv \relax\pstFP@saveshift% + \pstFP@@mul vu uv \relax\pstFP@saveshift% + \pstFP@@mul uu vt tv \relax\pstFP@saveshift% + \pstFP@@mul ut tu vz zv \relax\pstFP@saveshift% + \pstFP@@mul tt zu uz rv vr \relax\pstFP@saveshift% + \pstFP@@mul zt tz ur ru vq qv \relax\pstFP@saveshift% + \pstFP@@mul zz rt tr uq qu vp pv \relax\pstFP@saveshift% + \pstFP@@mul zr rz tq qt up pu vo ov \relax\pstFP@saveshift% + \pstFP@@mul rr qz zq tp pt uo ou vn nv \relax\pstFP@saveshift% + \pstFP@@mul rq qr zp pz to ot un nu vm mv \relax\pstFP@saveshift% + \pstFP@@mul qq rp pr zo oz tn nt um mu vl lv \relax\pstFP@saveshift% + \pstFP@@mul qp pq ro or zn nz tm mt ul lu kv vk \relax\pstFP@saveshift% + \pstFP@@mul pp oq qo rn nr zm mz tl lt ku uk \relax\pstFP@saveshift% + \pstFP@@mul op po nq qn rm mr zl lz tk kt \relax\pstFP@saveshift% + \pstFP@@mul oo pn np mq qm rl lr kz zk \relax\pstFP@saveshift% + \pstFP@@mul no on mp pm lq ql kr rk \relax\pstFP@saveshift% + \pstFP@@mul nn mo om pl lp qk kq \relax\pstFP@saveshift% + \pstFP@@mul mn nm lo ok pk kp \relax\pstFP@saveshift% + \pstFP@@mul mm ln nl ko ok \relax\pstFP@saveshift% + \pstFP@@mul lm ml kn nk \relax\pstFP@saveshift% + \pstFP@@mul ll km mk \relax\pstFP@saveshift% + \pstFP@@mul kl lk \relax\pstFP@saveshift% + \pstFP@@mul kk \relax\pstFP@saveshift\pstFP@saveshift% + \pstFP@ninesplit\pstFP@rd% + \ifnum\pstFP@res=0\relax% + \pstFP@ninesplit\pstFP@rd% + \ifnum\pstFP@res=0\relax% + \pstFP@ninesplit\pstFP@rd\pstFP@ria=\pstFP@res% + \pstFP@ninesplit\pstFP@rd\pstFP@rib=\pstFP@res% + \pstFP@ninesplit\pstFP@rd\pstFP@rfa=\pstFP@res% + \pstFP@ninesplit\pstFP@rd\pstFP@rfb=\pstFP@res% + \pstFP@store\pstFP@tmp{r}% + \else\typeout{pstFPmul: Overflow}\fi% + \else\typeout{pstFPmul: Overflow}\fi% + \global\let\pstFP@tmp\pstFP@tmp}% +% \pstFPstripZeros\pstFP@tmp{#1}% + \let#1\pstFP@tmp +} +% +\catcode`\@=\PstAtCode\relax +% +%% END: pst-fp.tex +\endinput diff --git a/graphics/pstricks/base/generic/pst-key.tex b/graphics/pstricks/base/generic/pst-key.tex new file mode 100644 index 0000000000..8c1204bc17 --- /dev/null +++ b/graphics/pstricks/base/generic/pst-key.tex @@ -0,0 +1,101 @@ +%% $Id: pst-key.tex 446 2017-04-19 11:40:55Z herbert $ +%% +%% This is file `pst-key.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% keyval.dtx (with options: `package,plain,pstricks') +%% +%% This file is based on keyval.dtx from the LaTeX tools distribution. +%% It may be distributed and used with the conditions applying to the +%% PSTricks distribution. See the comments in pstricks.tex for details. +%% +%% File: keyval.dtx Copyright (C) 1993 1994 1995 1997 1998 David Carlisle +\def\next[#1]{\catcode`\@=11 + \expandafter\let\csname ver@keyval.sty\endcsname\empty + \wlog{keyval: #1}}\next + [1998/07/23 v1.11 key=value parser (DPC)] +\def\setkeys{% + \@ifnextchar[% + \KV@list + {\let\KV@undefined\KV@error + \KV@setkeys}} +\def\KV@psset{psset} +\def\KV@setkeys#1#2{% + \def\@tempa{#1}% + \edef\KV@prefix{% + \ifx\@tempa\KV@psset\else + KV@% + \fi + #1@}% + \KV@do#2,\relax,} +\def\psset#1{% + \def\KV@prefix{psset@}% + \KV@do#1,\relax,} +\def\use@par{\expandafter\psset\expandafter{\pst@par}% + \let\pst@par\@empty} +\def\KV@list[#1]{% + \def\KV@undefined{\KV@add#1}% + \ifx#1\@undefined + \let#1\@empty + \fi + \KV@setkeys} +\def\KV@do#1,{% + \ifx\relax#1\empty\else + \KV@split#1==\relax + \expandafter\KV@do\fi} +\def\KV@split#1=#2=#3\relax{% + \KV@@sp@def\@tempa{#1}% + \ifx\@tempa\@empty\else + \expandafter\let\expandafter\@tempc + \csname\KV@prefix\@tempa\endcsname + \ifx\@tempc\relax + \KV@undefined{#2}{#3}% + \else + \ifx\@empty#3\@empty + \KV@default + \else + \KV@@sp@def\@tempb{#2}% + \expandafter\@tempc\expandafter{\@tempb}\relax + \fi + \fi + \fi} +\def\KV@default{% + \expandafter\let\expandafter\@tempb + \csname\KV@prefix\@tempa @default\endcsname + \ifx\@tempb\relax + \KV@err{No value specified for \@tempa}% + \else + \@tempb\relax + \fi} +\def\KV@add#1#2#3{% + \toks2\expandafter{#1}% + \KV@@sp@def\@tempb{#2}% + \toks4\expandafter{\@tempb}% + \edef#1{\the\toks2 + \ifx#1\@empty\else,\fi + \@tempa + \ifx\KV@add#3\KV@add\else={\the\toks4}\fi}} +\def\KV@err#1{\errmessage{keyval: #1}} +\def\KV@error#1#2{\KV@err{\@tempa\space undefined}} +\def\@tempa#1{% +\def\KV@@sp@def##1##2{\KV@@sp@b##2\@nil\@nil#1\@nil\relax##1}} +\@tempa{ } +\def\KV@@sp@b#1#2 \@nil{\KV@@sp@c#1#2} +\def\KV@@sp@c#1\@nil#2\relax#3{\def#3{#1}} +\def\define@key#1#2{% + \def\KV@prefix{#1}% + \edef\KV@prefix{% + \ifx\KV@prefix\KV@psset\else + KV@% + \fi + #1@#2}% + \@ifnextchar[\KV@def{\@namedef\KV@prefix####1}} +\def\KV@def[#1]{% + \@namedef{\KV@prefix @default\expandafter}\expandafter + {\csname \KV@prefix\endcsname{#1}}% + \@namedef\KV@prefix##1} +\endinput +%% +%% End of file `pst-key.tex'. diff --git a/graphics/pstricks/base/generic/pstricks-tex.def b/graphics/pstricks/base/generic/pstricks-tex.def new file mode 100644 index 0000000000..d5e7311030 --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks-tex.def @@ -0,0 +1,85 @@ +%% $Id: pstricks-tex.def 1044 2019-04-11 09:32:09Z herbert $ +%% pstricks-tex.def +%% Copyright 2017- Herbert Voss +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% + \newwrite\@unused + \def\typeout#1{\immediate\write\@unused{#1}}% + \typeout{we are running tex and have to make it etex and latex compatible ...}% + \ifx\eTeXversion\@undefined + \gdef\ch@ck#1#2#3{\ifnum\count1#1<#2 \else\errmessage{No room for a new #3}\fi} + \countdef\allocationnumber=21 + \chardef\sixt@@n=16 + \def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne + \ch@ck#1#4#2% make sure there's still room + \allocationnumber\count1#1% + \global#3#5\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} + \alloc@7\write\chardef\sixt@@n\@unused + \else + \def\e@alloc#1#2#3#4#5#6{% + \global\advance#3\@ne + \e@ch@ck{#3}{#4}{#5}#1% + \allocationnumber#3\relax + \global#2#6\allocationnumber + \wlog{\string#6=\string#1\the\allocationnumber}}% + \gdef\e@ch@ck#1#2#3#4{% + \ifnum#1<#2\else + \ifnum#1=#2\relax + \global#1\@cclvi + \ifx\count#4\global\advance#1 10 \fi + \fi + \ifnum#1<#3\relax + \else + \errmessage{No room for a new \string#4}% + \fi + \fi}% + \fi +% + \newif\ifpst@psfonts \pst@psfontsfalse % defined in pstricks.sty + \newif\ifpst@useCalc \pst@useCalcfalse % defined in pstricks.sty +% + \long\def\@ifundefined#1#2#3{\expandafter\ifx\csname #1\endcsname\relax#2\else#3\fi} + \def\@namedef#1{\expandafter\def\csname #1\endcsname} + \def\@nameuse#1{\csname #1\endcsname} + \def\@eha{% + Your command was ignored.^^J + Type \space I <command> <return> \space to replace + it with another command,^^J + or \space <return> \space to continue without it.} + \def\@spaces{\space\space\space\space} + \def\@empty{} + \def\@gobble#1{} + \def\@nnil{\@nil} +% + \def\@ifnextchar#1#2#3{% + \let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch} +% + \def\@ifnch{% + \ifx\@tempc\@sptoken \let\@tempd\@xifnch + \else\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi + \fi + \@tempd + }% + \begingroup + \def\:{\global\let\@sptoken= } \: + \def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch} + \endgroup + \def\endtabular{\crcr\egroup\egroup $\egroup} + \def\@width{width}% needed by pst-node + \def\@tfor#1:={\@tf@r#1 } + \long\def\@tf@r#1#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\space\else + \@tforloop#2\@nil\@nil\@@#1{#3}\fi}% + \long\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \expandafter\@fornoop \else + #4\relax\expandafter\@tforloop\fi#2\@@#3{#4}} + \long\def\@break@tfor#1\@@#2#3{\csname fi\endcsname\csname fi\endcsname} +%% +%% END: pstricks-tex.def diff --git a/graphics/pstricks/base/generic/pstricks-xetex.def b/graphics/pstricks/base/generic/pstricks-xetex.def new file mode 100644 index 0000000000..8e9efc2026 --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks-xetex.def @@ -0,0 +1,34 @@ +%% $Id: pstricks-xetex.def 872 2018-12-21 20:39:31Z herbert $ +%% +%% Copyright 2019- Herbert Voss +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% The xdvipdfmx driver does not support all node macros. In the following +% there are alternatives defined: +% +%% \ncput -> \NCput +% +\def\NCput{\pst@object{NCput}} +\def\NCput@i#1{% + \begingroup + \use@par + \pst@getcoor{@@A}\pst@tempA% defined by \pcline and \ncline + \pst@getcoor{@@B}\pst@tempB + \if@star\def\next{\rput*}\else\def\next{\rput}\fi + \next(! + \pst@tempA /yA ED /xA ED + \pst@tempB /yB ED /xB ED + xA xB add 2 div + yA yB add 2 div \tx@UserCoor){#1} + \endgroup + \ignorespaces +} +%% +%% END: pstricks-xetex.def diff --git a/graphics/pstricks/base/generic/pstricks.con b/graphics/pstricks/base/generic/pstricks.con new file mode 100644 index 0000000000..83bba1f7bb --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks.con @@ -0,0 +1,360 @@ +%% $Id: pstricks.con 617 2017-10-04 16:16:21Z herbert $ +%% BEGIN: pstricks.con (for dvips driver) +%% +%% Configuration file for PSTricks +%% +%% Version 1.00 (2010/01/16) +%% +%% For use with Rokicki's dvips (tested with v5.74 and older) + +\def\pstdriver{Rokicki's dvips} +{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " +\def\pstunit{1bp}% +\def\pstVerb#1{\special{ps:#1}}% hv write it without a preceding space +\def\pstverbscale{SDict begin normalscale end} +\def\pstnodescale{} +% DG/SR modification begin - Apr. 28, 1997 (D. Carlisle + S. Rahtz) +% \def\pstheader#1{\special{header=#1}} +% We used to check for |\AtBeginDvi|, but that was broken in early release +% so we now check for the existence of |\textsuperscript| (added 1995/05/16) +\ifx\textsuperscript\@undefined + \def\pstheader#1{\special{header=#1}} +\else + \ifx\Gin@PS@file@header\@undefined + \def\pstheader#1{\AtBeginDvi{\special{header=#1}}} + \else + \let\pstheader\Gin@PS@file@header + \fi +\fi +% DG/SR modification end +%% +%% In the following, CP is short for currentpoint. +%% The neg is necessary because dvips scales the coordinates by 1 -1. +%% \tx@NET means neg exch neg exch translate. +\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% ****************** END Rokicki's dvips ***************************** + +%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% +%% If you want to include your own customizations to pstricks.tex, then +%% uncomment the \pstcustomize command, and include your modifications +%% after \pstcustomize. These will be read in after pstricks.tex. +%\pstcustomize + +\endinput + +%% +%%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Because there are no standards for dvi-to-PS driver \special's, +some driver-dependent commands must be defined in this file. + +Possibly correct definitions for some dvi drivers are given below. +Copy the section for the driver you want to use to the indicated place +near the beginning of the file, replacing any other definitions you +might find there. + +When changing drivers, you may need to remake the header file. + +See the PSTricks read-me file for further installation instructions. + +Please report good and bad experiences with dvi-to-PS drivers, +along with the definitions of these commands that worked +for you, to tvz@Princeton.EDU. Thanks. + + +%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% + +Here are the commands that must be defined in this file: + + \pstverb{} - The argument is included as verbatim PostScript, + grouped by save and restore. The coordinate system + should be square, not rotated, and with the origin + at TeX's currentpoint. + + \pstVerb{} - The argument is included as verbatim PostScript, not + grouped by (g)save and (g)restore. The currentpoint + should be TeX's currentpoint. + + \pstunit - The units used by driver for graphics included with + \pstverb. Probably 1bp or 1sp. + + \pstverbscale - The PostScript code that scales the coordinate system + from that in effect with \pstVerb to that in effect + with \pstverb. Should not translate to the currentpoint. + + \pstrotate - The PostScript code that takes a number off the stack + and rotates the axes properly. I.e., + \pstVerb{angle \pstrotate} is used to begin rotations. + + \pstheader{} - The argument is a header file (e.g., .pro file). + If your driver does not support such a special, then + the command might just remind you to include the header + when printing. You can use PSTricks without a header, + in which case it does not matter how you define + \pstheader. See read-me.pst for details. + If you cannot change the default directory where your + driver looks for header files, and you cannot write to + that directory, then you include the path for your + PSTricks header files. + E.g., \def\pstheader#1{\special{header=~/tex/#1}}. + + \pstdriver - The name of the driver. + + +%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% + +See your local TeX documentation for instructions on creating a TeX format. + +Before making the format, be sure that this configuration file is correct. +It will be read only when creating the format, and not with every job. + +If you are not using header files, there are no more special instructions. + +Special instructions when using header files: + + - If you want to include supplementary PSTricks files (e.g., pst-node.tex), + add \input commands in the customization section above. + + - If your definition of \pstheader is, e.g. + + \def\pstheader#1{\special{\header=#1}} + + then change it to + + \def\pstheader#1{% + \expandafter\everyjob\expandafter{\the\everyjob + \special{header=#1}}} + + and put your original definition in the customization section, AFTER + any \input commands. E.g., the customization section might look like: + + \pstcustomize + \input pst-node.tex + \input pst-coil.tex + \def\pstheader#1{\special{header=#1}} + + - Input pstricks.tex at the appropriate time when creating the format. + E.g., when initex stops running: + *\input pstricks + *\dump + + +%%%%%%%%%% !! CONFIGURATIONS FOR SOME DRIVERS !! %%%%%%%%%%%%%%%%%%%%%%%% + + +%% ********************************************************************** +%% ***** Rokicki's dvips ***** Rokicki's dvips ***** Rokicki's dvips **** +%% ********************************************************************** +%% Life is bliss with Rokicki's dvips (tested with v5.396, v5.47, 5.491): +%% +\def\pstdriver{Rokicki's dvips} +{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " +\def\pstunit{1bp}% +\def\pstVerb#1{\special{ps: #1}} +\def\pstverbscale{SDict begin normalscale end} +\def\pstheader#1{\special{header=#1}} +%% +%% In the following, CP is short for currentpoint. +%% The neg is necessary because dvips scales the coordinates by 1 -1. +%% \tx@NET means neg exch neg exch translate. +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% If using a version before 5.47, clipping may not work. You can +%% try the following definition of \pstverb: +%\def\pstverb#1{\special{ps: @beginspecial #1 @endspecial}} +%% or change "{initclip}ifelse" to "if" in the definition of @setspecial +%% in dvips' special.pro. +%% +%% ****************** END Rokicki's dvips ***************************** + + +%% ********************************************************************** +%% **** Arbortext's dvips *** Arbortext's dvips *** Arbortext's dvips *** +%% ********************************************************************** +%% Thanks to Wolfgang Sienel: +%% +\def\pstdriver{Arbortext's dvips} +\def\pstverb#1{% + \special{ps::[asis] 0 SPB /ChartCheckPoint save def + Xpos Ypos translate #1 ChartCheckPoint restore 0 SPE}} +\def\pstunit{1bp} +\def\pstVerb#1{\special{ps:: #1}} +\def\pstverbscale{} +\def\pstrotate{CP CP translate 3 -1 roll rotate \tx@NET} +\def\pstheader#1{% + \typeout{**********************************************************}% + \typeout{** Don't forget to include #1 when printing:}% + \typeout{** \space\space dvips -PRO #1 myfile}% + \typeout{**********************************************************}} +%% +%% Comments by Wolfgang on header files: +%% Normally the standard prolog file is downloaded once to the printer +%% with psload.ps (the initializing file for your TeX-printer) before +%% printing TeX-documents. If you don't make any changes to psload.ps +%% you have to type dvips -PRO PATH/pstricks.pro myfile (-PRO just +%% works for UNIX systems. I don't have any idea about other systems). +%% If psload.ps was not downloaded to the printer you have to append +%% pstricks.pro to the standard prolog file dvips.pro. In this case +%% invoke dvips as always. Note that after hitting the enter key you +%% have to specify the option download all prolog in both cases. If you +%% are frequently using pstricks you might want to change psload.ps. In +%% this case contact your local TeX-guru and ask him politely to do this +%% for you. Attention: If psload.ps is getting too big you may run into +%% trouble with printer memory! +%% +%% ****************** END Arbortext's dvips ***************************** + + +%% ********************************************************************** +%% **** Textures *** Textures *** Textures *** Textures *** Textures **** +%% ********************************************************************** +%% These have been tested with v1.3. It is nice to have a PostScript +%% screen previewer, such as TScript (USA: 1-617-734-9700). (The +%% Textures preview window will not show the PSTricks graphics.) +%% +\def\pstdriver{Textures} +\def\pstunit{1bp} +\def\pstverb#1{\special{postscript /TX@Save save def #1 TX@save restore}} +\def\pstVerb#1{\special{postscript grestore #1 gsave}} +\def\pstverbscale{Mag 1000 div 72.27 72 div mul dup neg scale} +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +%% \pstVerb does not define the currentpoint properly. As a workaround, +%% insert the following lines in the customization section above. +%% +%% \def\pst@Verb#1{% +%% \special{postscript \pst@dict /sps { moveto /Mag ed } def +%% userdict begin}% +%% \special{postscript #1 end gsave}} +%% +%% Textures does not support header files. +%% However, it may still be worth using a header file for increased speed. +%% Also, some macros can overload Textures 1.3 when not used with a header +%% file. You can include the header file pstricks.pro by saving the +%% PostScript output to a file and inserting the pstricks.pro with an +%% editor. Probably a better solution is to append pstricks.pro to a +%% copy of the laserprep, and, by changing file names of the modified +%% laserprep and the original laserprep, use the laserprep with pstricks.pro +%% whenever you are printing pstricks documents. +\def\pstheader#1{% + \typeout{******************************************}% + \typeout{*** Include header file #1!! ***}% + \typeout{******************************************}} +%% +%% ****************** END Textures ************************************** + + +%% ********************************************************************** +%% ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** +%% ********************************************************************** +%% I.e., dvi2ps, v2.xx. There are lot's of such things around. +%% This probably doesn't work. Considering upgrading to Rokicki's dvips. +%% +\def\pstdriver{dvi2ps v2.xx} +\def\pstunit{1pt} +\def\pstverb#1{ pstext="save currentpoint translate + Resolution 72.27 div neg scale #1 restore" \space} +\def\pstVerb#1{ pstext="#1" \space} +\def\pstverbscale{Resolution 72.27 div neg scale} +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +\def\pstheader#1{% + \typeout{******************************************************} + \typeout{Don't forget to include the header file #1!!} + \typeout{******************************************************} +%% +%% ***************************** END dvi2ps ***************************** + + +%% ********************************************************************** +%% ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** +%% ********************************************************************** +%% I.e., dvi2ps, version 3.xx, by Kevin Coombes. +%% This has not been tested. Consider upgrading to Rokicki's dvips. +%% +\def\pstdriver{dvi2ps v3.xx} +\def\pstunit{1bp} +\def\pstverb#1{pstext="#1"} +% \def\pstVerb#1{% +% \special{pstext="@endspecial #1 @beginspecial @setspecial"}} % v3.0 +\def\pstVerb#1{\special{psraw="#1"}} % v3.3 +\def\pstverbscale{Resolution 72.27 div neg scale} +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +\def\pstheader#1{% + \typeout{******************************************************} + \typeout{Don't forget to include the header file #1!!} + \typeout{******************************************************} +%% +%% ******************* END dvi3ps *************************************** + + +%% ********************************************************************** +%% **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** +%% ********************************************************************** +%% Only the pure graphics objects are supported for OzTeX. +%% No color, rotation, clipping, nodes and node connections, overlays, etc. +%% Also, \rput cannot be used with \SpecialCoor. +%% +%% The reason is given in the documentation for Version 1.3, September 1990: +%% +%% OzTeX generates highly efficient PostScript code but it does so at +%% the expense of some \special functionality. Many DVI-to-PostScript +%% translators allow you to do things like use one \verb|\special| to start +%% rotating TeX text and another to stop the rotation. The way OzTeX +%% interprets a DVI page makes this impossible. +%% +%% If using the header file, you should copy pstricks.pro to global.ps, in +%% the same directory as your dvi file. +%% +\def\pstdriver{OzTeX} +\def\pstverb#1{\special{null.ps #1}} +\def\pstunit{1bp} +\def\pstVerb#1{% + \typeout{PSTRICKS WARNING:}% + \typeout{\space\space You are using features not supported by OzTeX.}% + \typeout{\space\space These will be ignored.}% + \gdef\pstVerb##1{}} +\def\pstverbscale{} +\def\pstrotate{} +\def\pstheader#1{% + \typeout{******************************************************} + \typeout{Don't forget to include the header file #1!!} + \typeout{******************************************************}} +%% +%% ************************* END OzTeX ********************************** + + +%% ********************************************************************** +%% ***** DirectTeX ***** DirectTeX ***** DirectTeX ***** DirectTeX ****** +%% ********************************************************************** +%% DirectTeX is for the Macintosh. These has been tested unsuccessfully, +%% apparently due to a problem with DirectTeX. +%% +\def\pstdriver{DirectTeX} +%% +%% Check catcode of " +{\catcode`\"=12\gdef\pstverb#1{\special{" #1 /Foo{}def }}} +\def\pstunit{1bp} +\def\pstVerb#1{\special{ps: #1 }} +\def\pstverbscale{TeXDict begin normalscale end} +%% +%% In the following, CP is short for currentpoint. The neg is necessary +%% because dvips scales the coordinates by 1 -1: +\def\pstrotate{% + CP CP translate 3 -1 roll neg rotate \tx@NET} +%% +\def\pstheader#1{% + \typeout{**********************************************************}% + \typeout{** Don't forget to include #1 when printing:}% + \typeout{** \space\space DVIReader -header #1 myfile}% + \typeout{**********************************************************}} +%% +%% ****************** END DirectTeX ***************************** + + +%% +%% END: pstricks.con diff --git a/graphics/pstricks/base/generic/pstricks.tex b/graphics/pstricks/base/generic/pstricks.tex new file mode 100644 index 0000000000..70283822fc --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks.tex @@ -0,0 +1,4595 @@ +%% pstricks.tex +%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt +%% COPYRIGHT 2000-2003 by Denis Girou. +%% Copyright 2004-2019 Herbert Voss <hvoss@tug.org> +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Herbert Voss +% +\csname PSTricksLoaded\endcsname +\let\PSTricksLoaded\endinput +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% !! loading additional TeX packages see line 38,39 and 72ff +%% !! loading config file pstricks.con line 439 +%% !! loading pro files line 452ff +%% !! fileversion and date see line 83 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\edef\PstAtCode{\the\catcode`\@} +\catcode`\@=11\relax +% +%\if@check@engine + \ifx\c@lor@to@ps\@undefined + \def\c@lor@to@ps{\PSTricks_Not_Configured_For_This_Format}% message for a pdflatex run + \fi +%\fi +\expandafter\ifx\csname @latexerr\endcsname\relax % do we have TeX? then @latexerr isn't defined + \input pstricks-tex.def +\fi + +\let\ifpstUndefined\@ifundefined + +%\catcode`\@=\PstAtCode\relax +\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex \fi +\ifx\PSTFPloaded\endinput\else\input pst-fp.tex\fi +% +%\catcode`\@=11\relax +\def\XKV@ch@ckch@ice#1#2#3{% bugfix for xkeyval + \def\XKV@tempa{#1}% + \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else + \def\XKV@tempa{\def#1{#2}}% + \fi +% \in@{,#2,}{,#3,}% +\begingroup\edef\x{\endgroup\noexpand\in@{,#2,}}\x{,#3,}% +%\expandafter\in@\expandafter{\expandafter,#2,}{,#3,}% --- hv 2012-04-27 + \ifin@ + \ifXKV@pl + \XKV@addtomacro@n\XKV@tempa\@firstoftwo + \else + \XKV@addtomacro@n\XKV@tempa\@firstofone + \fi + \else + \ifXKV@pl + \XKV@addtomacro@n\XKV@tempa\@secondoftwo + \else + \XKV@toks{#2}% + \XKV@err{value `\the\XKV@toks' is not allowed}% + \XKV@addtomacro@n\XKV@tempa\@gobble + \fi + \fi + \XKV@tempa +} +% +\def\ProvidesPackageRCS#1{\typeout{Loading #1}}% +%\@ifnextchar[\ProvidesPackageRCS@i{\ProvidesPackageRCS@i[] }}%$ +%\def\ProvidesPackageRCS@i[#1]#2{} + +\ifx\pgfkeysloaded\relax\else + \input pgfutil-common.tex + \input pgfkeys.code.tex + \input pgffor.code.tex +\fi +\let\pgfforeach\foreach +% +\def\fileversion{2.97} +\def\filedate{2019/05/11} +\pst@addfams{pstricks} +% +%\define@boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{} +%\psset{useURWfonts} +% +% stolen from latex.ltx to make it TeX compatible +\newcount\psLoopIndex +\long\def\@fornoop#1\@@#2#3{} +\long\def\@for#1:=#2\do#3{% + \pst@cntm=0 + \expandafter\def\expandafter\@fortmp\expandafter{#2}% + \ifx\@fortmp\@empty \else + \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi} +% +\long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx#4\@nnil \else + #5\def#4{#2}\ifx#4\@nnil \else\global\advance\psLoopIndex by \@ne\relax + #5\@iforloop #3\@@#4{#5}\fi\fi} +% +\long\def\@iforloop#1,#2\@@#3#4{\global\advance\psLoopIndex by \@ne\relax% + \def#3{#1}\ifx #3\@nnil + \expandafter\@fornoop \else + #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}} +% +\long\def\psforeach#1#2#3{% + \global\psLoopIndex=0\relax + \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}% + \else \expandafter\psforeach@i#2,..,,..,\@nil{#1}{#3}\fi} +\long\def\psforeach@i#1,#2,..,#3,..,#4\@nil#5#6{% + \ifx\relax#3\relax\psforeach@ii{#5}{#1,#2}{#6}% + \else\psforeach@iii{#5}{#1}{#2}{#3}{#6}\fi} +\long\def\psforeach@ii#1#2#3{% + \begingroup + \edef\reserved@a{#2}% + \@for#1:=\reserved@a\do{#3}% + \endgroup} +\long\def\psforeach@iii#1#2#3#4#5{% + \pstFPsub\pst@tempA{#3}{#2}% + \pst@dimm=\pst@tempA pt% + \pstFPstripZeros{\pst@tempA}\pst@tempB% + \def\pst@tempA{#2}% + \def\pst@tempa{#2}% + \pst@dimn=#4pt% + \loop + \pst@dimm=\pst@tempA pt + \ifdim\pst@dimm<\pst@dimn + \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}% + \pstFPstripZeros{\pst@tempA}\pst@tempA% + \edef\pst@tempa{\pst@tempa,\pst@tempA}% + \repeat% + \psforeach@ii{#1}{\pst@tempa}{#5}} +% +\long\def\psForeach#1#2#3{% without grouping the contents + \global\psLoopIndex=0\relax% + \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}% + \else \expandafter\psForeach@i#2,..,,..,\@nil{#1}{#3}\fi} +\long\def\psForeach@i#1,#2,..,#3,..,#4\@nil#5#6{% + \ifx\relax#3\relax\psForeach@ii{#5}{#1,#2}{#6}% + \else\psForeach@iii{#5}{#1}{#2}{#3}{#6}\fi% +} +\long\def\psForeach@ii#1#2#3{% + \edef\reserved@a{#2}% + \@for#1:=\reserved@a\do{#3}} +\long\def\psForeach@iii#1#2#3#4#5{% + \pstFPsub\pst@tempA{#3}{#2}% + \pst@dimm=\pst@tempA pt% + \pstFPstripZeros{\pst@tempA}\pst@tempB% + \def\pst@tempA{#2}% + \def\pst@tempa{#2}% + \pst@dimn=#4pt% + \loop% + \pst@dimm=\pst@tempA pt% + \ifdim\pst@dimm<\pst@dimn% + \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}% + \pstFPstripZeros{\pst@tempA}\pst@tempA + \edef\pst@tempa{\pst@tempa,\pst@tempA}% + \repeat% + \psForeach@ii{#1}{\pst@tempa}{#5} +} + +\def\psrecur@i#1{\csname ps@rn#1\psrecur@i} +\long\def\ps@rnm#1{\endcsname{#1}#1\global\advance\psLoopIndex by \@ne} +\long\def\ps@rn#1{} +\def\psLoop#1{\global\psLoopIndex=0\relax% + \csname ps@rn\expandafter\psrecur@i + \romannumeral\number\number#1 000\endcsname\endcsname} + +% +% hv 2007-10-16 to fix the bug in pst-node with \\[name=...] +% hv fix bug with empty fnodes in psmatrix +\def\ps@ifnextchar#1#2#3{% + \let\reserved@d= #1% + \def\reserved@a{#2}\def\reserved@b{#3}% + \futurelet\@let@token\ps@ifnch} +\def\ps@ifnch{% + \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi + \reserved@b +} +\def\pshskip#1{\vrule \@width\z@\nobreak \hskip #1\hskip \z@skip} +% end bugfix +\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz,hv)} +\def\@pstrickserr#1#2{% + \begingroup + \newlinechar`\^^J + \edef\pst@tempc{#2}% + \expandafter\errhelp\expandafter{\pst@tempc}% + \typeout{% + PSTricks error. \space See User's Guide for further information.^^J + \@spaces\@spaces\@spaces\@spaces + Type \space H <return> \space for immediate help.}% + \errmessage{#1}% + \endgroup} +\def\@ehpa{% + Your command was ignored. Default value substituted.^^J + Type \space <return> \space to procede.} +\def\@ehpb{% + Your command was ignored. Will recover best I can.^^J + Type \space <return> \space to procede.} +\def\@ehpc{% + You better fix this before proceding.^^J + See the PSTricks User's Guide or ask your system administrator for help.^^J + Type \space X <return> \space to quit.} +\def\@ehpd{% + Not allowed optional argument.^^J + Will proceed with the default setting.^^J + Type \space X <return> \space to quit.} +\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb} +\newdimen\pst@dima +\newdimen\pst@dimb +\newdimen\pst@dimc +\newdimen\pst@dimd +\newdimen\pst@dimg +\newdimen\pst@dimh +\newdimen\pst@dimm +\newdimen\pst@dimn +\newdimen\pst@dimo +\newdimen\pst@dimp +\chardef\f@ur=4 +% +\newbox\pst@hbox +\newbox\pst@ibox +\newbox\pst@boxg +\newcount\pst@cnta +\newcount\pst@cntb +\newcount\pst@cntc +\newcount\pst@cntd +\newcount\pst@cntg +\newcount\pst@cnth +\newcount\pst@cntm +\newcount\pst@cntn +\newcount\pst@cnto +\newcount\pst@cntp +\newcount\@zero\@zero=0\relax +% +\newif\ifPst@SpecialLength +\Pst@SpecialLengthfalse +% +\newif\if@pst +\newtoks\pst@toks +\newif\if@star +\def\pst@ifstar#1{% + \@ifnextchar*{\@startrue\def\ps@next*{#1}\ps@next}{\@starfalse#1}} +% +\def\pst@expandafter#1#2{% + \def\ps@next{#1}% + \edef\@tempa{#2}% + \ifx\@tempa\@empty + \@pstrickserr{Unexpected empty argument!}\@ehpb + \def\@tempa{\@empty}% + \fi + \expandafter\ps@next\@tempa} +% +\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}} +\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1} +{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}} +% +\def\pst@getdimdim#1 #2 #3\@nil{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty + \pssetlength\pst@dimn{#1}% + \pst@dimm=\z@% + \else% + \pssetlength\pst@dimm{#1}% + \pssetlength\pst@dimn{#2}% + \fi% +} +\def\pst@getxdimdim#1 #2 #3\@nil{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty + \pssetxlength\pst@dimn{#1}% + \pst@dimm=\z@ + \else% + \pssetxlength\pst@dimm{#1}% + \pssetxlength\pst@dimn{#2}% + \fi% +} +\def\pst@getydimdim#1 #2 #3\@nil{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty + \pssetylength\pst@dimn{#1}% + \pst@dimm=\z@% + \else + \pssetylength\pst@dimm{#1}% + \pssetylength\pst@dimn{#2}% + \fi} +% +% A modulo macro for integer values +% \pst@mod{34}{6}\value ==> \value is 4 +% +\def\pst@mod#1#2#3{% + \begingroup% + \pst@cntm=#1\pst@cntn=#2\relax% + \pst@cnto=\pst@cntm% + \divide\pst@cntm by \pst@cntn% + \multiply\pst@cntn by \pst@cntm% + \advance\pst@cnto by -\pst@cntn% + \edef\value{\endgroup\def\noexpand#3{\number\pst@cnto}}\value% +} +\def\pst@max#1#2#3{% + \begingroup% + \pst@cntm=#1\pst@cntn=#2\relax% + \ifnum\pst@cntm<\pst@cntn\pst@cntm=\pst@cntn\fi + \global#3=\the\pst@cntm% + \endgroup% +} +\def\pst@maxdim#1#2#3{% + \begingroup% + \pst@dimm=#1\pst@dimn=#2\relax% + \ifdim\pst@dimm<\pst@dimn\pst@dimm=\pst@dimn\fi + \global#3=\the\pst@dimm% + \endgroup% +} +\def\pst@mindim#1#2#3{% + \begingroup% + \pst@dimm=#1\pst@dimn=#2\relax% + \ifdim\pst@dimm>\pst@dimn\pst@dimm=\pst@dimn\fi + \global#3=\the\pst@dimm% + \endgroup% +} +\def\pst@abs#1#2{% + \begingroup% + \pst@cntm=#1\relax% + \ifnum\pst@cntm<\z@\pst@cntm=-\pst@cntm\fi% + \global#2=\the\pst@cntm + \endgroup% +} +\def\pst@absdim#1#2{% + \begingroup% + \pst@dimm=#1\relax% + \ifdim\pst@dimm<\z@\pst@dimm=-\pst@dimm\fi% + \global#2=\the\pst@dimm% + \endgroup% +} +% +\def\pst@pyth#1#2#3{% from pst-3d + \begingroup% + \pst@dima=#1\relax% + \ifnum\pst@dima<\z@\pst@dima=-\pst@dima\fi% dima=abs(x) + \pst@dimb=#2\relax% + \ifnum\pst@dimb<\z@\pst@dimb=-\pst@dimb\fi% dimb=abs(y) + \advance\pst@dimb\pst@dima % dimb=s=abs(x)+abs(y) + \ifnum\pst@dimb=\z@ + \global\pst@dimg=\z@ % dimg=z=sqrt(x^2+y^2) + \else + \multiply\pst@dima 8\relax % dima= 8abs(x) + \pst@@divide\pst@dima\pst@dimb % dimg =8t=8abs(x)/s + \advance\pst@dimg -4pt % dimg = 4tau = (8t-4) + \multiply\pst@dimg 2 + \pst@dimtonum\pst@dimg\pst@tempa + \pst@dima=\pst@tempa\pst@dimg % dima=(8tau)^2 + \advance\pst@dima 64pt % dima=u=[64+(8tau)^2]/2 + \divide\pst@dima 2\relax % =(8f)^2 + \pst@dimd=7pt % initial guess at sqrt(u) + \pst@@pyth\pst@@pyth\pst@@pyth % dimd=sqrt(u) + \pst@dimtonum\pst@dimd\pst@tempa + \pst@dimg=\pst@tempa\pst@dimb + \global\divide\pst@dimg 8 % dimg=z=(8f)*s/8 + \fi + \endgroup + #3=\pst@dimg} +% +\def\pst@@pyth{% dimd = g <-- (g + u/g)/2 + \pst@@divide\pst@dima\pst@dimd + \advance\pst@dimd\pst@dimg + \divide\pst@dimd 2\relax} +% +% ----- the old pst@pyth begin ----- did not use dimens +\def\pst@Pyth#1#2#3{\ifdim#1>#2\pst@@Pyth#1#2#3\else\pst@@Pyth#2#1#3\fi} +\def\pst@@Pyth#1#2#3{% + \ifdim4#1>9#2\relax + #3=#1\advance#3 .2122#2% + \else + #3=.8384#1\advance#3 .5758#2% + \fi% +} +% ----- the old pst@pyth end ----- +% +%------ new version \pst@divide ̣-------- by Michael Sharpe +\def\pst@divide#1#2#3{% + \pst@@divide{#1}{#2}% + \advance\pst@dimg \pst@cnta pt% + \pst@dimtonum\pst@dimg{#3}% +} +\def\pst@@divide#1#2{% + \pst@dimg=#1\relax% + \pst@dimh=#2\relax% + \pst@cnth=\pst@dimh% + \pst@cntg=\pst@dimg% + \pst@cnta=\pst@cntg% + \divide\pst@cnta\pst@cnth% + \advance\pst@dimg -\pst@cnta\pst@dimh% + \pst@cntm=67108863\relax %2^26 -1 + \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide% + \divide\pst@dimg\pst@cnth% +}% +\def\pst@@@divide{% + \ifnum% + \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cntm% + \multiply\pst@dimg\sixt@@n% + \else% + \divide\pst@cnth\sixt@@n% + \fi% +}% +% +%-------------- the old version ---------- +\iffalse +\def\pst@divide#1#2#3{% + \pst@@divide{#1}{#2}% + \pst@dimtonum\pst@dimg{#3}% +} +\def\pst@@divide#1#2{% + \pst@dimg=#1\relax + \pst@dimh=#2\relax + \pst@cntg=\pst@dimh + \pst@cnth=67108863 + \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide + \divide\pst@dimg\pst@cntg% +} +\def\pst@@@divide{% + \ifnum + \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth + \multiply\pst@dimg\sixt@@n + \else + \divide\pst@cntg\sixt@@n + \fi% +} +\fi +%-------------- end old vesrion --------------- +% +\def\pst@configerr#1{\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} +% +\def\pstVerb#1{\pst@configerr\pstVerb} +\def\pstverb#1{\pst@configerr\pstverb} +\def\pstverbscale{\pst@configerr\pstverbscale} +\def\pstrotate{\pst@configerr\pstrotate} +\def\pstheader#1{\pst@configerr\pstheader} +\def\pstdriver{\pst@configerr\pstdriver} +\@ifundefined{pstcustomize}% + {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{} +% +\input pstricks.con % local config file +% +\newif\ifPSTricks +\PSTrickstrue +\def\PSTricksOff{% + \def\pstheader##1{}% + \def\pstverb##1{}% + \def\pstVerb##1{}% + \PSTricksfalse% +} +\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{} +\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{} +% +\pstheader{pstricks.pro} +%\pstheader{pstricks-fonts.pro} +\pstheader{pst-algparser.pro} +\pstheader{pst-tools.pro} +% +\def\pst@dict{tx@Dict begin } +\def\pst@theheaders{pstricks.pro, pst-algparser.pro} +\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}} +\def\tx@Atan{Atan } +\def\tx@Div{Div } +\def\tx@NET{NET } +\def\tx@Pyth{Pyth } +\def\tx@PtoC{PtoC } +\def\tx@PathLength@{PathLength@ } +\def\tx@PathLength{PathLength } +\pst@dimg=\pstunit\relax +\ifdim\pst@dimg=1bp +\def\pst@stp{.996264 dup scale} +\else +\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale} +\fi +\def\tx@STP{STP } +\def\tx@STV{STV } +% +%--------------------------------------- PS stuff --------------------------------- +% on stack x y +\pst@def{UserCoor}< \pst@number\psyunit div exch \pst@number\psxunit div exch > +\pst@def{ScreenCoor}< \pst@number\psyunit mul exch \pst@number\psxunit mul exch > +%--------------------------------------- PS stuff end ----------------------------- +% +\def\pst@number#1{\pst@@dimtonum#1\space} +% +%-----------------------% hv 20100413 +\def\pst@strip@dot#1{\expandafter\pst@strip@dot@i#1..\@nil} +\def\pst@strip@dot@i#1.#2.#3\@nil{% + \ifnum1#2>10\relax #1.#2\else#1\fi} +%-----------------------% hv 20100413 +\def\pst@checknum#1#2{% + \edef\ps@next{#1}% + \ifx\ps@next\@empty + \let\pst@num\z@ + \else + \expandafter\pst@@checknum\ps@next..\@nil + \fi + \ifcase\pst@num\relax + \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa + \def#2{0 }% + \or% 1 + \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% + \expandafter\@gobble\the\pst@cnth\space}% + \or% 2 + \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% + \expandafter\@gobble\the\pst@cnth\space}% + \or% 3 + \edef#2{\pst@tempA\space}% + \fi} +\def\pst@@checknum{% + \@ifnextchar-% + {\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}% + {\@ifnextchar !% + {\def\pst@num{3}\pst@@@@@checknum} + {\let\pst@num\@ne\pst@@@checknum}}% +} +\def\pst@@@checknum#1.#2.#3\@nil{% +\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil% +\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil} +\def\pst@@@@checknum#1\relax\@nil{\ifx\@nil#1\@nil\else\let\pst@num\z@\fi} +% +\def\pst@@@@@checknum#1#2.#3\@nil{\def\pst@tempA{#2}}% PostScript Notation with !<code> +% +\def\pst@getnumii#1 #2 #3\@nil{% + \pst@checknum{#1}\pst@tempg% + \ifx\relax#2\relax\let\pst@temph\pst@tempg\else\pst@checknum{#2}\pst@temph\fi} +\def\pst@getnumiii#1 #2 #3 #4\@nil{% +\pst@checknum{#1}\pst@tempg% +\pst@checknum{#2}\pst@temph% +\pst@checknum{#3}\pst@tempi} +\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{% +\pst@checknum{#1}\pst@tempg% +\pst@checknum{#2}\pst@temph% +\pst@checknum{#3}\pst@tempi% +\pst@checknum{#4}\pst@tempj} +% +\def\pst@getdimnum#1 #2 #3\@nil{% + \pssetlength\pst@dimg{#1}% + \pst@checknum{#2}\pst@tempg% +} +\def\pst@getscale#1#2{% read and check a scale input x [y] + \edef\pst@tempg{#1}% + \ifx\pst@tempg\@none + \def#2{}% + \else + \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil + \ifdim\pst@tempg\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def#2{}% + \else + \ifdim\pst@temph\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def#2{}% + \else + \edef#2{\pst@tempg\space \pst@temph\space scale }% + \fi + \fi + \fi% +} +\def\pst@getint#1#2{% read and check an integer + \pst@cntg=#1\relax + \edef#2{\the\pst@cntg\space}% +} +\begingroup +\catcode`\{=12 +\catcode`\}=12 +\catcode`\[=1 +\catcode`\]=2 +\gdef\pslbrace[{ ] +\gdef\psrbrace[} ] +\endgroup +% +\pstVerb{ + /pssetRGBcolor /setrgbcolor load def + /pssetCMYKcolor /setcmykcolor load def + /pssetGraycolor /setgray load def +} +\def\@newcolor#1#2{% + \expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}% + %\expandafter\edef\csname color@#1\endcsname{#2}% + \expandafter\edef\csname\string\color@#1\endcsname{#2}% hv 1.14 2005-12-17 + \ignorespaces} +% +\def\pst@color#1{\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}% +\def\pst@endcolor{\pstVerb{\pst@currentcolor}} +\def\pst@currentcolor{0 setgray} +\def\altcolormode{% +\def\pst@color##1{% + \pstVerb{gsave ##1}\aftergroup\pst@endcolor}% +\def\pst@endcolor{\pstVerb{\pst@grestore}}} +\def\pssetMonochrome{% + \pstVerb{ + /setrgbcolor { add add 0 gt {0}{1} ifelse setgray } def + /setcmykcolor{ 4 dict begin + /k ED /y ED /m ED /c ED + 1 1 k sub c mul k add sub 0.29 mul + 1 1 k sub m mul k add sub 0.587 mul add + 1 1 k sub y mul k add sub 0.114 mul add + end 0 gt {0}{1} ifelse setgray } def }} +\def\pssetGrayscale{% + \pstVerb{ + /setrgbcolor { 0.07 mul exch 0.71 mul add exch 0.21 mul add setgray } def + /setcmykcolor{ 4 dict begin + /k ED /y ED /m ED /c ED + 1 1 k sub c mul k add sub 0.29 mul + 1 1 k sub m mul k add sub 0.587 mul add + 1 1 k sub y mul k add sub 0.114 mul add + end setgray } def }} +\def\psresetColor{\pstVerb{ + /setrgbcolor tx@Dict begin /pssetRGBcolor load end def + /setcmykcolor tx@Dict begin /pssetCMYKcolor load end def }} + +\def\pst@grestore{ + currentpoint + matrix currentmatrix + currentfont + grestore + setfont + setmatrix + moveto +} +%\def\pst@usecolor#1{\csname color@#1\endcsname\space}% hv 1.14 2005--12-17 +\def\pst@usecolor#1{\csname\string\color@#1\endcsname\space} +% +\def\newgray#1#2{% + \pst@checknum{#2}\pst@tempg + \@newcolor{#1}{\pst@tempg setgray}}% +\def\newrgbcolor#1#2{% + \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}} +\def\newhsbcolor#1#2{% + \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}} +\def\newcmykcolor#1#2{% + \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}} +\newgray{black}{0} +\newgray{darkgray}{.25} +\newgray{gray}{.5} +\newgray{lightgray}{.75} +\newgray{white}{1} +\newrgbcolor{red}{1 0 0} +\newrgbcolor{green}{0 1 0} +\newrgbcolor{blue}{0 0 1} +\newrgbcolor{yellow}{1 1 0} +\newrgbcolor{cyan}{0 1 1} +\newrgbcolor{magenta}{1 0 1} + +\@ifundefined{xglobal}% do we have xcolor loaded? + {\@newcolor{randomgray}{tx@Dict begin Rand setgray end}% + \@newcolor{randomrgb}{tx@Dict begin Rand Rand Rand setrgbcolor end}% + \@newcolor{randomcmyk}{tx@Dict begin Rand Rand Rand Rand setcmykcolor end}% + \@newcolor{randomhsb}{tx@Dict begin Rand Rand Rand sethsbcolor end}% + }{% + \definecolor[ps]{randomgray}{gray}{tx@Dict begin Rand end}% + \definecolor[ps]{randomrgb}{rgb}{tx@Dict begin Rand Rand Rand end}% + \definecolor[ps]{randomcmyk}{cmyk}{tx@Dict begin Rand Rand Rand Rand end}% + \definecolor[ps]{randomhsb}{hsb}{tx@Dict begin Rand Rand Rand end}% + } +% +\define@boolkey[psset]{pstricks}[Pst@]{draft}[true]{} +\define@key[psset]{pstricks}{bgcolor}{\def\pst@bgcolor{#1}}% background for pspicture +\psset[pstricks]{bgcolor={},draft=false}% \pst@bgcolor is \@empty + +\define@key[psset]{pstricks}{style}{% + \@ifundefined{pscs@#1}% + {\@pstrickserr{Custom style `#1' undefined}\@ehpa}% + {\@nameuse{pscs@#1}}% +} +\def\newpsstyle{\@ifnextchar[\newpsstyle@ii{\newpsstyle@ii[]}}%% hv 2016-12-23 +% +%\def\newpsstyle@i#1#2{\@namedef{pscs@#1}{% +% \def\pst@tempA{#2}% +% \ifx\pst@tempA\@empty\else\psset{#2}\fi}} +% +\def\newpsstyle@ii[#1]#2#3{% + \@namedef{pscs@#2}{\if$#1$\psset{#3}\else\psset[#1]{#3}\fi}}%% end +% +\def\addto@psstyle#1#2{% + \pst@toks=\expandafter{#1#2}% + \edef#1{\the\pst@toks}} +\def\addtopsstyle#1#2{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty\else + \@ifundefined{pscs@#1}% + {\newpsstyle{#1}{#2}}% + {\expandafter\addto@psstyle\csname pscs@#1\endcsname{\psset{#2}}}% + \fi} +%------------ hv 1.16 end ------------------- +% +\def\@none{none} +\def\pst@getcolor#1#2{% +% \@ifundefined{color@#1}% hv 1.14 2005-12-17 + \@ifundefined{\string\color@#1}% + {\@pstrickserr{Color `#1' not defined}\@eha}% + {\edef#2{#1}}% +} +\newdimen\psunit \psunit 1cm +\newdimen\psxunit \psxunit 1cm +\newdimen\psyunit \psyunit 1cm +\let\psrunit\psunit +% +\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces} +% +\def\pssetlength#1#2{% + \let\@psunit\psunit + \afterassignment\pstunit@off + #1 #2\@psunit% +} +\def\psaddtolength#1#2{% + \let\@psunit\psunit + \afterassignment\pstunit@off + \advance#1 #2\@psunit% +} +\def\pssetxlength#1#2{% + \let\@psunit\psxunit + \ifpst@useCalc + \edef\@@temp{\pscalculate{#2}}% + \afterassignment\pstunit@off + #1 \@@temp\@psunit + \else + \afterassignment\pstunit@off + #1 #2\@psunit + \fi +} +\def\pssetylength#1#2{% + \let\@psunit\psyunit + \ifpst@useCalc + \edef\@@temp{\pscalculate{#2}}% + \afterassignment\pstunit@off + #1 \@@temp\@psunit + \else + \afterassignment\pstunit@off + #1 #2\@psunit + \fi +} +\define@key[psset]{pstricks}{unit}[1cm]{% + \pssetlength\psunit{#1}% + \psxunit=\psunit% + \psyunit=\psunit% +} +\define@key[psset]{pstricks}{runit}[1cm]{\pssetlength\psrunit{#1}} +\define@key[psset]{pstricks}{xunit}[1cm]{\pssetxlength\psxunit{#1}} +\define@key[psset]{pstricks}{yunit}[1cm]{\pssetylength\psyunit{#1}} +% +\define@key[psset]{pstricks}{PstDebug}[0]{\pst@getint{#1}\Pst@Debug}% hv 2004-06-22 +\psset[pstricks]{PstDebug=0} +\def\psDEBUG{\@ifnextchar[\psDEBUG@i{\psDEBUG@i[PSTricks]}}% +\def\psDEBUG@i[#1]#2{\ifnum\Pst@Debug>0 \expandafter\typeout{<#1>: #2}\fi}% +% +\def\pst@getlength#1#2{% + \pssetlength\pst@dimg{#1}% + \edef#2{\pst@number\pst@dimg}% +} +\def\pst@@getlength#1#2{% + \pssetlength\pst@dimg{#1}% + \edef#2{\number\pst@dimg sp}% +} +\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor} +\def\pst@coor{0 0 } +% +\def\pst@getcoors#1#2{% + \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}% + \def\pst@coors{}% + \pst@@getcoors +} +\def\pst@@getcoors(#1){% + \pst@@getcoor{#1}% + \edef\pst@coors{\pst@coor\pst@coors}% + \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}% +} +% +\newcount\pst@C@@rType% 0: default cartesian coordinates and angles +% +\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle} +\def\pst@angle{0 } +% +\def\cartesian@coor#1,#2,#3\@nil{% + \pssetxlength\pst@dimg{#1}% + \pssetylength\pst@dimh{#2}% + \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% +} +\def\NormalCoor{% + \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}% + \def\pstCheckCoorType##1{\global\pst@C@@rType=0}% + \Pst@SpecialLengthfalse + \def\pssetlength##1##2{% + \let\@psunit\psunit + \afterassignment\pstunit@off + ##1 ##2\@psunit% + }% + \def\pst@@getangle##1{% + \pst@checknum{##1}\pst@angle% + \edef\pst@angle{\pst@angle \pst@angleunit}% + }% + \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% +} +%\NormalCoor% set to normal read of coors, angles and lengths +% +\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}} +\def\@degrees[#1]{% + \pst@checknum{#1}\pst@tempg + \edef\pst@angleunit{360 \pst@tempg div mul }% + \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}% + \ignorespaces} +% +\def\radians{\def\pst@angleunit{57.2956 mul }% + \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}}% +\def\pst@angleunit{}% + +% +\def\SpecialCoor{% + \def\pst@@getcoor##1{% + \begingroup% + \pst@activecoor + \xdef\pst@tempg{##1}% + \endgroup + \expandafter\special@coor\pst@tempg||\@nil}% + \def\pstCheckCoorType##1{% + \begingroup + \pst@activecoor + \xdef\pst@tempg{##1}% + \endgroup + \psDEBUG[pstCheckCoorType]{:Checking coor \pst@tempg:}% + \expandafter\pst@CheckCoorType\pst@tempg||\@nil% + \psDEBUG[pstCheckCoorType]{::Coor type=\the\pst@C@@rType::}% + }% + \def\pssetlength##1##2{% + \begingroup% + \pst@activecoor% + \xdef\pst@tempg{##2}% + \endgroup% + \expandafter\special@length\pst@tempg\@nil{##1}% + \ignorespaces}% + \def\pst@@getangle##1{% + \begingroup% + \pst@activecoor% + \xdef\pst@tempg{##1}% + \endgroup% + \expandafter\special@angle\pst@tempg\@empty)\@nil% + }% + \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}% +} +\SpecialCoor% set to special read of coors, angles and lengths +% +\define@key[psset]{}{precode}{\def\pst@prepscode{#1 }} +\define@key[psset]{}{postcode}{\def\pst@postpscode{#1 }} +\psset{precode={},postcode={}}% For use in other packages +% +% +\begingroup +\catcode`\|=13 +\catcode`\;=13 +\catcode`\!=13 +\catcode`\*=13 +\catcode`\>=13 +\catcode`\+=13 +\gdef\pst@activecoor{% + \def|{\string|}% + \def;{\string;}% + \def!{\string!}% + \def*{\string*}% algebraic expression hv 2007-11-17 + \def>{\string>}% + \def+{\string+}% pure algebaric 2013-04-23 +} +\endgroup +% \pst@C@@rType = 0 cartesian (x,y) +% = 1 polar (r;phi) +% = 2 PS (! x y) +% = 3 mixed ((x,y)|(x,y)) +% = 4 algebraic (*x f(x)) x in PostScript notation +% = 5 node (A) +% = 6 special node ([...]A) +% = 7 node (>A) +% = 8 algebraic (+x,f(x)) _both_ algebraic +\def\pst@CheckCoorType#1|#2|#3\@nil{% + \ifx#3|\relax + \global\pst@C@@rType=3\relax + \else + \expandafter\pst@@CheckCoorType#1;;\@nil% + \fi} +% +\def\pst@@CheckCoorType#1#2;#3;#4\@nil{% +%\typeout{====1:#1}% +%\typeout{====2:#2}% +%\typeout{====3:#3}% +%\typeout{====4:#4}% + \ifx#1>\relax% node with special rotation for \uput + \global\pst@C@@rType=7 + \else + \ifcat#1a\relax% node names should start with a letter + \global\pst@C@@rType=5 + \else + \ifx#1[\relax% special node coor: [..]A + \global\pst@C@@rType=6 + \else + \ifx#1!\relax% PostScript code: x y + \global\pst@C@@rType=2 + \else + \ifx#1*\relax% algebraic PostScript code: x f(x) + \global\pst@C@@rType=4 + \else + \ifx#1+\relax% algebraic algebraic: x, f(x) + \global\pst@C@@rType=8 + \else + \ifx#4;\relax% polar coordinates + \global\pst@C@@rType=1 + \else + \global\pst@C@@rType=0 + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \psDEBUG[pstCheckCoorType]{::\the\pst@C@@rType::}% + }% +% +% +\def\special@coor#1|#2|#3\@nil{% + \ifx#3|\relax + \mixed@coor{#1}{#2}% + \else + \special@@coor#1;;\@nil% + \fi} +% +\def\special@@coor#1{% + \ifcat#1a\relax% node names should start with a letter + \def\ps@next{\node@coor#1}% + \else + \ifx#1[\relax% special node coor: [..]A + \def\ps@next{\Node@coor[}% + \else + \ifx#1>\relax% PostScript code: x y + \def\ps@next{\special@@@@coor}% + \else + \ifx#1!\relax% PostScript code: x y + \def\ps@next{\raw@coor}% + \else + \ifx#1*\relax% PostScript/algebraic code: x f(x) + \def\ps@next{\alg@coor}% + \else + \ifx#1+\relax% algebraic code: x,f(x) + \def\ps@next{\algalg@coor}% + \else% + \def\ps@next{\special@@@coor#1}% + \fi% + \fi% + \fi% + \fi\fi% + \fi% + \ps@next% +} +\def\special@@@coor#1;#2;#3\@nil{% + \ifx#3;\relax + \polar@coor{#1}{#2}% + \else + \cartesian@coor#1,\relax,\@nil + \fi% +} +\def\special@@@@coor#1#2;#3;#4\@nil{% + \def\ps@A{A}\def\ps@B{#1}% + \ifcat\ps@A\ps@B\relax% + \node@coor#1#2;;\@nil% + \else% + \cartesian@coor#1#2,\relax,\@nil + \fi% +} +\def\mixed@coor#1#2{% + \begingroup% +% DG/SR modification begin - Oct. 27, 1997 - Patch 6 +%\specialcoor@ii#1;;\@nil +%\let\pst@tempa\pst@coor +%\specialcoor@ii#2;;\@nil + \special@@coor#1;;\@nil% + \let\pst@tempa\pst@coor% + \special@@coor#2;;\@nil% +% DG/SR modification end + \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% + \endgroup% + \let\pst@coor\pst@tempg% +} +% +\def\polar@coor#1#2{% +% \pssetlength\pst@dimg{#1}% + \pssetlength\pst@dimb{#1}% hv 2007-10-16 g is already used in get@@angle + \pst@@getangle{#2}% +% \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}% dito + \edef\pst@coor{\pst@number\pst@dimb \pst@angle \tx@PtoC }% +} +% +\def\raw@coor{\@ifnextchar !\raw@@coor\raw@@@coor} +\def\raw@@coor!#1;#2\@nil{% PostScript code without using \tx@ScreenCoor + \edef\pst@coor{#1 }} +\def\raw@@@coor#1;#2\@nil{% PostScript code + \edef\pst@coor{ #1 \tx@ScreenCoor }} +% +\def\alg@coor{\@ifnextchar*{\alg@@coor}{\alg@@@@coor}} +\def\alg@@coor*#1;#2\@nil{\expandafter\alg@@@coor#1\@nil} +\def\alg@@@coor#1 #2\@nil{% algebraic PostScript code +%\typeout{Nummer1: #1}% +%\typeout{Nummer2: #2}% + \edef\pst@coor{% + /Func (#1) AlgParser cvx def + /y #2 def + y Func exch \tx@ScreenCoor }} +% +\def\alg@@@@coor#1;#2\@nil{\expandafter\alg@@@@@coor#1\@nil} +\def\alg@@@@@coor#1 #2\@nil{% algebraic PostScript code + \edef\pst@coor{% + /x #1 def + /Func (#2) AlgParser cvx def + x Func \tx@ScreenCoor }} +% +\define@boolkey[psset]{}[Pst@]{exchange}[true]{} +\psset{exchange=false} +% +\def\algalg@coor#1;#2\@nil{\expandafter\algalg@@@coor#1\@nil} +\def\algalg@@@coor#1,#2\@nil{% algebraic algebraic code + \edef\pst@coor{% + /x (#1) AlgParser cvx def + /Func (#2) AlgParser cvx def + x Func \tx@ScreenCoor }} +% +\def\node@coor#1\@nil{% + \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps + \def\pst@coor{0 0 }% +} +\def\Node@coor{\node@coor} +% +\def\special@angle#1#2)#3\@nil{% + \ifx !#1\relax + \edef\pst@angle{#2\space \pst@angleunit}% + \else\ifx(#1\relax + \pst@@getcoor{#2}% + \edef\pst@angle{\pst@coor exch \tx@Atan}% + \else + \pst@checknum{#1#2}\pst@angle + \edef\pst@angle{\pst@angle \pst@angleunit}% + \fi\fi} +% +\def\special@length#1#2\@nil#3{% + \ifx !#1\relax + \edef\pst@SpecialLength{ #2 \pst@number\psunit mul }% + \Pst@SpecialLengthtrue + \else + \let\@psunit\psunit + \afterassignment\pstunit@off + #3 #1#2\@psunit + \Pst@SpecialLengthfalse + \fi +} +% +\def\Cartesian{% + \def\cartesian@coor##1,##2,##3\@nil{% + \pssetxlength\pst@dimg{##1}% + \pssetylength\pst@dimh{##2}% + \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% + }% + \@ifnextchar({\Cartesian@}{}% +} +\def\Cartesian@(#1,#2){% + \pssetxlength\psxunit{#1}% + \pssetylength\psyunit{#2}% + \ignorespaces +} +\def\Polar{% + \def\psput@cartesian{\psput@special}% + \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}% +}% +\define@key[psset]{pstricks}{origin}[]{% + \pst@@getcoor{#1}% + \edef\psk@origin{\pst@coor T }} +\def\psk@origin{} +% +\define@boolkey[psset]{pstricks}[Pst@]{algebraic}[true]{} +\psset{algebraic=false} +% +\define@boolkey[psset]{pstricks}[]{swapaxes}[true]{% \if@pst + \@nameuse{@pst#1}% + \if@pst\def\psk@swapaxes{-90 rotate -1 1 scale }% + \else\def\psk@swapaxes{}% + \fi +} +\psset[pstricks]{swapaxes=false} +% +\define@boolkey[psset]{pstricks}[]{showpoints}[true]{} +\psset[pstricks]{showpoints=false} +% +\let\pst@setrepeatarrowsflag\relax +% +\define@key[psset]{pstricks}{border}[0pt]{\pst@getlength{#1}\psk@border \pst@setrepeatarrowsflag} +\psset[pstricks]{border=0pt} +\define@key[psset]{pstricks}{bordercolor}[white]{\pst@getcolor{#1}\psbordercolor} +\psset[pstricks]{bordercolor=white} +\define@boolkey[psset]{pstricks}[ps]{doubleline}[true]{\pst@setrepeatarrowsflag} +\psset[pstricks]{doubleline=false} +\define@key[psset]{pstricks}{doublesep}[1.25\pslinewidth]{\def\psdoublesep{#1}} +\psset[pstricks]{doublesep=1.25\pslinewidth} +\define@key[psset]{pstricks}{doublecolor}[white]{\pst@getcolor{#1}\psdoublecolor} +\psset[pstricks]{doublecolor=white} +% +\define@boolkey[psset]{pstricks}[ps]{shadow}[true]{\pst@setrepeatarrowsflag} +\psset[pstricks]{shadow=false} +\define@key[psset]{pstricks}{shadowsize}[3pt]{\pst@getlength{#1}\psk@shadowsize} +\psset[pstricks]{shadowsize=3pt} +\define@key[psset]{pstricks}{shadowangle}[-45]{\pst@getangle{#1}\psk@shadowangle} +\psset[pstricks]{shadowangle=-45} +\define@key[psset]{pstricks}{shadowcolor}[darkgrey]{\pst@getcolor{#1}\psshadowcolor} +\psset[pstricks]{shadowcolor=darkgray} +% +\def\pst@repeatarrowsflag{\z@} +\def\pst@setrepeatarrowsflag{% + \edef\pst@repeatarrowsflag{% + \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else + \ifpsshadow 1\else \z@\fi\fi\fi}} +% +\def\psls@none{} +\def\psls@solid{ \psk@linejoin\space setlinejoin \psk@linecap\space setlinecap stroke } +\def\psls@coloreddashed{ \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \psls@dashed } +% +\newdimen\pslinewidth +\define@key[psset]{pstricks}{linewidth}[0.8pt]{\pssetlength\pslinewidth{#1}} +\psset[pstricks]{linewidth=.8pt} +\define@key[psset]{pstricks}{linecolor}[black]{\pst@getcolor{#1}\pslinecolor} +\psset[pstricks]{linecolor=black} +\define@key[psset]{pstricks}{kitecolor}[red]{\pst@getcolor{#1}\ps@kitecolor} +\define@key[psset]{pstricks}{dartcolor}[blue]{\pst@getcolor{#1}\ps@dartcolor} +\psset[pstricks]{kitecolor,dartcolor} +% +\newif\ifPst@coloreddashed +\define@key[psset]{pstricks}{dashcolor}[white]{% + \ifx\relax#1\relax\Pst@coloreddashedfalse% + \else\Pst@coloreddashedtrue\pst@getcolor{#1}\psdashcolor + \fi} +\psset{dashcolor=\relax} +%\define@key[psset]{pstricks}{linecap}[0]{\pst@getint{#1}\psk@linecap}% hv 2007-12-01 +%\psset[pstricks]{linecap=0} >>>>>>>>>>>>> siehe unten +\define@key[psset]{pstricks}{linejoin}[0]{\pst@getint{#1}\psk@linejoin}% hv 2007-10-13 +\psset[pstricks]{linejoin=0} +\def\tx@setlinejoin{\psk@linejoin\space setlinejoin }% hv 2007-10-13 +% +\def\pst@missing{% + \z@ + \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa} +% +%%------------------- begin patch 15 HV 2004-05-15 ------------- +\def\pst@empty{\z@} + +\define@key[psset]{pstricks}{dash}[5pt 3pt 0pt 0pt]{% defined in pstricks.tex + \pst@expandafter\psset@@dash{#1}\@nil}% Error handling for empty argument. +\define@key[psset]{pstricks}{maxdashes}[11]{\def\psk@maxdashes{#1}} +\psset[pstricks]{maxdashes=11} +% +\def\psset@@dash#1\@nil{% + \def\psk@dash{}% + \pst@cntm0 + \def\next##1 ##2\relax{% + \expandafter\ifnum\psk@maxdashes>\pst@cntm\relax % 04-08-07 + \edef\@tempa{##1}% + \ifx\@tempa\@empty\else% gobble leading spaces + \pssetlength\pst@dimc{##1}% + \advance\pst@cntm by 1 + \edef\psk@dash{\psk@dash\space\pst@number\pst@dimc}% + \fi% + \edef\@tempa{##2}% + \ifx\@tempa\@empty\else% detect end + \ifx\@tempa\space\else% gobble trailing spaces + \next##2\relax% + \fi\fi% + \else% 04-08-07 + \@pstrickserr{Number of dashes > \psk@maxdashes. Increasing + 'maxdashes' might work.}\@ehpa% 04-08-07 + \fi% 04-08-07 + }% + \expandafter\next#1 \relax} +\psset[pstricks]{dash=5pt 3pt 0pt 0pt}% black white black white +%%------------------- end patch 15 HV 2004-05-15 ------------- +\define@boolkey[psset]{pstricks}[ps]{dashadjust}[true]{} +\psset[pstricks]{dashadjust} +\def\tx@DashLine{DashLine } +% +\def\psls@dashed{ + \ifPst@coloreddashed \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \fi + \psk@linecap\space setlinecap + \ifpsdashadjust + [ \psk@dash ] \pst@linetype\space \tx@DashLine + \else + [ \psk@dash ] 0 setdash stroke + \fi} +%% End patch TN; Date (YY-MM-DD): 04-07-17; 2nd part +% +\define@key[psset]{pstricks}{dotsep}[3pt]{\pst@getlength{#1}\psk@dotsep} +\psset[pstricks]{dotsep=3pt} +\def\tx@DotLine{DotLine } +\def\psls@dotted{ + \ifpsdashadjust + \psk@dotsep \pst@linetype\space \tx@DotLine + \else + [ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke + \fi +} +% +\define@key[psset]{pstricks}{linestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\pslinestyle{#1}}} +\psset[pstricks]{linestyle=solid} +% +\define@key[psset]{pstricks}{linecap}[0]{% + \def\psk@linecap{0}% + \ifnum#1>-1 + \ifnum#1<3 + \pst@getint{#1}\psk@linecap% + \fi\fi} +\psset{linecap=0} +%------------------------- Transparency modes ---------------------------- +\pst@def{setTransparency}< \psk@opacityalpha .setopacityalpha > +\pst@def{setStrokeTransparency}< \psk@strokeopacityalpha .setopacityalpha > +\pst@def{setBlendmode}< + \ifcase\psk@blendmode + /Normal \or + /Compatible \or + /Screen \or + /Multiply \or + /HardLight \or + /Darken \or + /Lighten \or + /Difference\or + /ColorDodge\or + /ColorBurn\or + /SoftLight\or + /Hue\or + /Saturation\or + /Luminosity\or + /Overlay\or + /Exclusion\or + /Color + \else + /Normal + \fi + .setblendmode \psk@shapealpha .setshapealpha > +% +%--------------------------------- hv 2007-09-09 begin --------------------- +% transparency needs a run through latex -> dvips -> ps2pdf14(!) +% +\def\e@fill@inverse{oefill} +\define@key[psset]{pstricks}{fillcolor}[white]{% + \ifx\psk@fillstylename\e@fill@inverse + \pst@getcolor{#1}\psk@oefillcolor + \pst@getcolor{white}\psfillcolor + \else \pst@getcolor{white}\psk@oefillcolor + \pst@getcolor{#1}\psfillcolor + \fi} + +\psset[pstricks]{fillcolor=white} +\define@key[psset]{pstricks}{strokeopacity}[1]{\pst@checknum{#1}\psk@strokeopacityalpha }% for lines +\psset[pstricks]{strokeopacity=1} +\define@key[psset]{pstricks}{opacity}[1]{\pst@checknum{#1}\psk@opacityalpha }% for filled areas +\psset[pstricks]{opacity=1} +\define@key[psset]{pstricks}{shapealpha}[0.6]{\pst@checknum{#1}\psk@shapealpha } +\psset[pstricks]{shapealpha=0.6} +\define@key[psset]{pstricks}{blendmode}[0]{\pst@getint{#1}\psk@blendmode }% must be one of +% /Normal 0 +% /Compatible 1 +% /Screen 2 +% /Multiply 3 +% /HardLight 4 +\psset[pstricks]{blendmode=0} +\define@key[psset]{pstricks}{fsAngle}[137.50775]{\pst@getangle{#1}\pst@fsAngle } +\define@key[psset]{pstricks}{fsOrigin}[(0,0)]{% + \pst@@getcoor{#1}\edef\pst@fsOrigin{\pst@coor T }} +\psset[pstricks]{fsOrigin={0,0},fsAngle=137.50775} +% +\def\tx@LineFill{LineFill } +\def\tx@DotFill{DotFill } +\def\tx@PenroseFill{PenroseFill } +\def\tx@PenroseFillA{PenroseFillA } +\def\tx@TruchetFill{TruchetFill } +% +\def\psfs@none{} +\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency fill }} +\def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency eofill}} +\def\psfs@oefill{\pst@fill{\pst@usecolor\psk@oefillcolor \tx@setTransparency fill }\psfs@eofill } +\def\psfs@shape{\pst@fill{\pst@usecolor\psfillcolor \tx@setBlendmode fill }} +\def\psfs@spiral{\pst@fill{\pst@fsOrigin \pst@usecolor\psfillcolor clip newpath + 0 .1 500 { dup dup sqrt 4 div 0 360 arc fill \pst@fsAngle rotate } for }} +% +\define@key[psset]{pstricks}{hatchwidth}[0.8pt]{\pst@getlength{#1}\psk@hatchwidth} +\psset[pstricks]{hatchwidth=.8pt} +\define@key[psset]{pstricks}{hatchsep}[4pt]{\pst@getlength{#1}\psk@hatchsep} +\psset[pstricks]{hatchsep=4pt} +\define@key[psset]{pstricks}{hatchcolor}[black]{\pst@getcolor{#1}\pshatchcolor} +\psset[pstricks]{hatchcolor=black} +\define@key[psset]{pstricks}{hatchangle}[45]{\pst@getangle{#1}\psk@hatchangle} +\psset[pstricks]{hatchangle=45} +\define@key[psset]{pstricks}{hatchsepinc}[0pt]{\pst@getlength{#1}\psk@hatchsepinc} +\define@key[psset]{pstricks}{hatchwidthinc}[0pt]{\pst@getlength{#1}\psk@hatchwidthinc} +\psset[pstricks]{hatchwidthinc=0pt,hatchsepinc=0pt} +% +\def\pst@linefill#1{ + /clipType { \ifx\relax#1\relax clip \else#1\fi} def + \psk@hatchangle rotate + \psk@hatchwidth SLW + \pst@usecolor\pshatchcolor + \psk@hatchsep + \psk@hatchsepinc + \psk@hatchwidthinc + \tx@LineFill } +% +\def\psfs@vlines{\pst@fill{\pst@linefill{}}} +\def\psfs@eovlines{\pst@fill{\pst@linefill{eoclip}}} +\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines} +\@namedef{psfs@eovlines*}{\psfs@eofill \psfs@eovlines} +\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill{}}} +\def\psfs@eohlines{\pst@fill{90 rotate \pst@linefill{eoclip}}} +\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines} +\@namedef{psfs@eohlines*}{\psfs@eofill \psfs@eohlines} +\def\psfs@crosshatch{\psfs@vlines \psfs@hlines} +\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines} +\@namedef{psfs@eocrosshatch*}{\psfs@eofill \psfs@eovlines \psfs@eohlines} +% +\define@key[psset]{pstricks}{psscale}[1]{% + \def\psk@@psscale{#1}% for use with \psscalebox + \pst@checknum{#1}\psk@psscale} +\psset[pstricks]{psscale=1} +% +\def\pst@dotFill[#1]{% + /clipType { \ifx\relax#1\relax clip \else #1 \fi } def + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pshatchcolor +% /DotLineColor { \pst@usecolor\pslinecolor } def + \psk@hatchsep + \psk@hatchwidth + \tx@DotFill } + +\def\psfs@dots{\pst@fill{ /SolidDot false def \pst@dotFill[] }} +\def\psfs@eodots{\pst@fill{ /SolidDot false def \pst@dotFill[eoclip] }} +\@namedef{psfs@dots*}{\pst@fill{ /SolidDot true def \pst@dotFill[] }} +\@namedef{psfs@eodots*}{\pst@fill{ /SolidDot true def \pst@dotFill[eoclip] }} +% +\def\pst@penroseFill{% +% gsave % restore in PenroseFill + \pst@number\pslinewidth SLW + \pst@usecolor\pshatchcolor + \psk@psscale + \tx@PenroseFill } +\def\psfs@penrose{\pst@fill\pst@penroseFill} +\@namedef{psfs@penrose*}{\psfs@solid \psfs@penrose} +% +\def\pst@penroseFillA{% +% gsave % restore in PenroseFillA + \pst@number\pslinewidth SLW +% \pst@usecolor\pshatchcolor +% on stack: scaling factor, border color, kite color, dart color +% dup dup scale +% /border_colour ED % +% /kite_colour ED % +% /dart_colour + { \pst@usecolor\ps@dartcolor } + { \pst@usecolor\ps@kitecolor } + { \pst@usecolor\pshatchcolor } + \psk@psscale + \tx@PenroseFillA } +\def\psfs@penroseA{\pst@fill\pst@penroseFillA} +\@namedef{psfs@penroseA*}{\psfs@solid \psfs@penroseA} +% +\def\pst@truchetFill{% + gsave % restore in PenroseFill + \pst@number\pslinewidth SLW + \pst@usecolor\pshatchcolor + \psk@psscale + \tx@TruchetFill } +\def\psfs@truchet{ \pst@fill\pst@truchetFill } +\@namedef{psfs@truchet*}{\psfs@solid \psfs@truchet} +% +\define@key[psset]{pstricks}{fillstyle}[none]{% + \def\psk@fillstylename{#1}% needed for inverse eofill + \edef\pst@tempg{#1}\def\pst@temph{none}% + \ifx\pst@tempg\pst@temph + \let\psk@fillstyle\relax + \else + \@ifundefined{psfs@#1}% + {\@pstrickserr{Undefined fill style: `#1'}\@eha}% + {\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}% + \fi% +} +\define@key[psset]{pstricks}{addfillstyle}[]{% + \@ifundefined{psfs@#1}% + {\@pstrickserr{Undefined fill style: `#1'}\@eha}% + {\edef\psk@fillstyle{% + \expandafter\noexpand\psk@fillstyle + \expandafter\noexpand\csname psfs@#1\endcsname}% + }} +\psset[pstricks]{fillstyle=none} +% +%--------------------------- continous linewidth ------------------- +\newdimen\psk@startLW +\newdimen\psk@endLW +\define@key[psset]{pstricks}{startLW}[\pslinewidth]{\pssetlength{\psk@startLW}{#1}}% +\define@key[psset]{pstricks}{endLW}[\pslinewidth]{\pssetlength{\psk@endLW}{#1}}% +\define@key[psset]{pstricks}{startWL}[380]{\pst@getint{#1}\psk@startWL}% +\define@key[psset]{pstricks}{endWL}[780]{\pst@getint{#1}\psk@endWL}% +\define@boolkey[psset]{pstricks}[Pst@]{variableLW}[true]{} +\define@boolkey[psset]{pstricks}[Pst@]{variableColor}[true]{} +\define@key[psset]{pstricks}{setflat}[0.1]{\pst@checknum{#1}\psk@setflat}% +\psset[pstricks]{startLW=\pslinewidth,endLW=\pslinewidth,variableColor=false, + variableLW=false,startWL=380,endWL=780,setflat=0.1} +% +\def\pst@flattenpath{ + /Coors [] def % the array of all points + /lambda \psk@startWL\space def + % + /add2Values { Coors aload length 2 add array astore /Coors exch def } def + /add6Values { Coors aload length 6 add array astore /Coors exch def } def +% + \psk@setflat\space setflat % the value for the line snippets + flattenpath % flatten the existing path into line segments +% + { add2Values } % what to do with moveto + { add2Values } % what to do with lineto + { add6Values } % what to do with curveto (not needed here) + { } % what to do with closepath + pathforall % do it for the existing path +% + \pst@number\psk@startLW setlinewidth + \tx@setlinejoin + \psk@linecap\space setlinecap + Coors aload length 2 sub 2 div cvi /N0 exch def % set number of points + /NN 0 def + /N N0 def + { N 3 gt { N 3 sub /N ED }{ N 1 sub /N ED } ifelse + NN 1 add /NN ED + N 0 eq { exit } if + } loop + /dLW \pst@number\psk@endLW \pst@number\psk@startLW sub NN div def % the step for the linewidth + \ifPst@variableColor + /dColor \psk@endWL\space \psk@startWL\space sub NN div def + lambda dColor add dup /lambda ED + tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor + \else + \pst@usecolor\pslinecolor + \fi + moveto % move to the first one + /N N0 def + { + N 3 gt { +% CP 6 2 roll + \psk@curvature\space /c ED /b ED /a ED + /ArrowA {} def + /ArrowB {} def + BOC NC EOC % curveto + N 3 sub /N ED }{ lineto N 1 sub /N ED } ifelse + currentlinewidth dLW add setlinewidth % increase line width + \ifPst@variableColor + lambda dColor add dup /lambda ED + tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor + \else + \pst@usecolor\pslinecolor + \fi + CP /Y ED /X ED % put coors of current point on the stack +% 0.4 .setopacityalpha + stroke % draw the line segment + N 0 eq { exit }{ X Y moveto } ifelse + } loop +% N { % repeat for the other N coords +% lineto % line to next point +% currentlinewidth dLW add setlinewidth % increase line width +% lambda dColor add dup /lambda ED +% tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor +% currentpoint % put coors of current point on the stack +% 0.4 .setopacityalpha +% stroke % draw the line segment +% moveto +% } repeat +} + +% +%--------------------------- A R R O W S --------------------------- +% +\def\psk@arrowA{} +\def\psk@arrowB{} +\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,<D-D>,D>-<D,<D<D-D>D>} % hv --1.16 +\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|} +\begingroup + \catcode`\<=13 + \catcode`\>=13 + \catcode`\|=13 + \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} +\endgroup +\def\tx@BeginArrow{BeginArrow } +\def\tx@EndArrow{EndArrow } +% +\def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13 +\def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13 +% +\@namedef{psas@<|}{ + \psk@tbarsize\space \tx@Tbar + 0 CLW 2 div T + newpath + true + \psk@arrowinset + \psk@arrowlength + \psk@arrowsize + \tx@Arrow +} +% ]-[ arrow +\def\tx@BracketOut{BracketOut } +\@namedef{psas@[}{% + /BracketOut {% + CLW mul add dup CLW sub 2 div +%/x ED mul CLW add + /x ED mul neg + /y ED + /z CLW 2 div def + x neg y moveto + x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def + \psk@bracketlength\space \psk@tbarsize\space \tx@BracketOut +} +% )-( arrow +\def\tx@RoundBracketOut{ \tx@setStrokeTransparency RoundBracketOut }% hv 2008-01-13 +\@namedef{psas@(}{% + /RoundBracketOut {% + CLW mul add dup 2 div +%/x ED mul + /x ED mul neg + /y ED + /mtrx CM def + 0 CLW + 2 div T x y mul 0 ne { x y scale } if + 1 1 moveto + .85 .5 .35 0 0 0 curveto + -.35 0 -.85 .5 -1 1 curveto + mtrx setmatrix stroke 0 CLW moveto } def + \psk@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut +} +% end of new definitions of the missing arrows ---- hv 1.12 +\@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } +\@namedef{psas@>>}{% + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h T gsave newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP grestore CP newpath moveto 2 copy + CLW \pst@arrowscale\space div SLW % set the original line width + L stroke moveto +} +\@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\@namedef{psas@<<}{ + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP newpath moveto 0 a neg + gsave + CLW \pst@arrowscale\space div SLW % set the original line width + L stroke + grestore + 0 h neg T + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +\@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211 +\@namedef{psas@D>D>}{ % hv 20071211 + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + 0 h Inset sub T gsave newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + CP grestore moveto +} +\@namedef{psas@<D}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD +} +\@namedef{psas@<D<D}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + CP newpath moveto 0 a neg L stroke 0 h neg T + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD +} +\define@key[psset]{pstricks}{tbarsize}[2pt 5]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil + \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} +\psset[pstricks]{tbarsize=2pt 5} +% +\def\tx@Tbar{Tbar } +\@namedef{psas@|}{\psk@tbarsize \tx@Tbar} +\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} +\@namedef{psas@>|}{% + \psk@tbarsize \tx@Tbar + 0 CLW 2 div T + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +\@namedef{psas@>|*}{% + 0 CLW -2 div T + \psk@tbarsize \tx@Tbar + 0 CLW 2 div T + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +% +\define@key[psset]{pstricks}{bracketlength}[0.15]{\pst@checknum{#1}\psk@bracketlength} +\psset[pstricks]{bracketlength=.15} +\def\tx@Bracket{Bracket } +\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} +\define@key[psset]{pstricks}{rbracketlength}[0.15]{\pst@checknum{#1}\psk@rbracketlength} +\psset[pstricks]{rbracketlength=.15} +\def\tx@RoundBracket{RoundBracket } +\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} +% +\def\psas@c{1 \psas@@c} +\def\psas@cc{0 CLW 2 div T 1 \psas@@c} +\def\psas@C{2 \psas@@c} +\def\psas@@c{% + setlinecap + 0 0 moveto + 0 0.1 L % changed value from 0.5 to 0.1 + stroke + 0 0 moveto } +% +\def\psas@{} +% +\define@key[psset]{pstricks}{arrowLW}{\pst@getlength{#1}\psk@arrowLW} +\psset[pstricks]{arrowLW=0} +% arrowLW as LineWidth for the circled line ends +% +\def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot } +\def\psas@oo{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot } +\@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {false} false \psk@dotsize \tx@EndDot } +\@namedef{psas@**}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {false} true \psk@dotsize \tx@EndDot } +% +\define@key[psset]{pstricks}{arrows}[-]{% + \begingroup + \pst@activearrows + \xdef\pst@tempg{#1}% + \endgroup + \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil + \if@pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi} +\def\psset@@arrows#1-#2\@empty#3\@nil{% + \@psttrue + \def\ps@next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% + \expandafter\ps@next\pst@arrowtable,#1-#1,\@nil + \@ifundefined{psas@\pst@tempg}{\@pstfalse\def\psk@arrowA{}}{\let\psk@arrowA\pst@tempg}% + \@ifundefined{psas@#2}{\@pstfalse\def\psk@arrowB{}}{\def\psk@arrowB{#2}}} +\psset[pstricks]{arrows=-} +% +\define@key[psset]{pstricks}{arrowscale}[1]{% hv --1.12 + \pst@getscale{#1}\psk@arrowscale + \pst@@arrowscale@i#1 \@nil}% hv --1.12 +\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12 +\psset[pstricks]{arrowscale=1} +% +\define@key[psset]{pstricks}{arrowsize}[1.5pt 2]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil + \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}% +} +\psset[pstricks]{arrowsize=1.5pt 2} +\define@key[psset]{pstricks}{arrowlength}[1.4]{\pst@checknum{#1}\psk@arrowlength} +\psset[pstricks]{arrowlength=1.4} +\define@key[psset]{pstricks}{arrowinset}[0.4]{\pst@checknum{#1}\psk@arrowinset}% +\psset[pstricks]{arrowinset=0.4} +% +\def\tx@SD{ \tx@setTransparency SD } +\def\tx@EndDot{EndDot } +% +\def\pst@par{} +\def\addto@par#1{% + \ifx\pst@par\@empty + \def\pst@par{#1}% + \else + \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}% + \fi% +} +\def\addbefore@par#1{% + \ifx\pst@par\@empty + \def\pst@par{#1}% + \else + \toks@{#1}% + \pst@toks\expandafter{\pst@par}% + \edef\pst@par{\the\toks@,\the\pst@toks}% + \fi% +} +\def\use@par{% + \ifx\pst@par\@empty\else + \expandafter\@psset\pst@par,\@nil + \def\pst@par{}% + \fi +} +\def\use@keep@par{% same as \use@par, but keeps the values + \ifx\pst@par\@empty\else + \expandafter\@psset\pst@par,\@nil +% \def\pst@par{}% + \fi} +% +\def\pst@object#1{% + \def\pst@par{}% + \pst@ifstar{% + \@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1@i}}}% +} +\def\pst@@object#1[#2]{% + \def\pst@par{#2}% + \@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}% +} +\def\newpsobject#1#2#3{% +\@ifundefined{#2@i}% +{\@pstrickserr{Graphics object `#2' not defined}\@eha}{% +\@namedef{#1}{\pst@object{#1}}% +\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}% +\ignorespaces} +% +\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} +% ------------------------- hv 1.10 beg ------------------------ +%\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} +\def\pst@@getarrows#1#2{% + \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...) + \ifx\pst@tempa\@empty + \addto@par{arrows=-}% + \else + \addto@par{arrows=#2}% + \fi + #1% +} +% ------------------------- hv 1.10 end ------------------------ +% +\def\begin@ClosedObj{% + \leavevmode + \pst@killglue + \begingroup + \use@par + \solid@star + \ifpsdoubleline\pst@setdoublesep\fi + \pst@addarrowdef% DG addition + \init@pscode} +% +\def\end@ClosedObj{% + \ifpsshadow \pst@closedshadow \fi + \ifdim\psk@border\p@>\z@ \pst@addborder \fi + \psk@fillstyle + \pst@stroke + \ifpsdoubleline \pst@doublestroke \fi + \ifshowpoints +% DG modification begin - Mar. 4, 1995 +%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}% + \pst@OpenShowPoints +% DG modification end + \fi + \use@pscode + \endgroup + \ignorespaces% +} +\def\begin@OpenObj{% + \begin@ClosedObj% + \let\pst@linetype\pst@arrowtype% + \pst@addarrowdef% +} +\def\begin@AltOpenObj{% + \begin@ClosedObj + \def\pst@repeatarrowsflag{\z@}% + \def\pst@linetype{0}} +% +\def\end@OpenObj{% + \ifpsshadow \pst@openshadow \fi + \ifdim\psk@border\p@>\z@ \pst@addborder \fi + \psk@fillstyle + \pst@stroke + \ifpsdoubleline \pst@doublestroke \fi + \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi + \ifshowpoints \pst@OpenShowPoints \fi + \use@pscode + \endgroup + \ignorespaces} +% +\def\begin@SpecialObj{% + \leavevmode + \pst@killglue + \begingroup + \use@par + \init@pscode} +% +\def\end@SpecialObj{% + \use@pscode + \endgroup + \ignorespaces} +% +\def\pst@code{}% +\def\init@pscode{% + \addto@pscode{% + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor}% +} +\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}} +\def\use@pscode{% + \pstverb{ + \pst@dict + \tx@STP + \pst@newpath + \psk@origin + \psk@swapaxes + \pst@code + end + }% + \gdef\pst@code{}% +} +\def\use@psCode{% + \pstVerb{ + \pst@dict + \tx@STP + \pst@newpath + \psk@origin + \psk@swapaxes + \pst@code + end + }% + \gdef\pst@code{}% +} +\def\pst@newpath{newpath } +% +\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi} +\def\KillGlue{\let\pst@killglue\pst@@killglue} +\def\DontKillGlue{\let\pst@killglue\relax} +\DontKillGlue +% +\def\solid@star{% + \if@star + \pslinewidth=\z@ + \psdoublelinefalse + \def\pslinestyle{none}% + \def\psk@fillstyle{\psfs@solid}% + \let\psfillcolor\pslinecolor + \fi} +% +\def\pst@setdoublesep{% +\pst@getlength\psdoublesep\psdoublesep +\pslinewidth=2\pslinewidth +\advance\pslinewidth\psdoublesep\p@ +\let\pst@setdoublesep\relax} +\def\tx@Shadow{Shadow } +\def\pst@closedshadow{% + \addto@pscode{% + gsave + \psk@shadowsize \psk@shadowangle \tx@PtoC + \tx@Shadow + \pst@usecolor\psshadowcolor + gsave fill grestore + stroke + grestore + gsave + \pst@usecolor\psfillcolor + gsave fill grestore + stroke + grestore}} +% +\def\pst@openshadow{% + \addto@pscode{% + gsave + \psk@shadowsize \psk@shadowangle \tx@PtoC + \tx@Shadow + \pst@usecolor\psshadowcolor + \ifx\psk@fillstyle\relax\else + gsave fill grestore + \fi + stroke}% + \pst@repeatarrows% + \addto@pscode{grestore}% + \ifx\psk@fillstyle\relax\else + \addto@pscode{% + gsave + \pst@usecolor\psfillcolor + gsave fill grestore + stroke + grestore}% + \fi} +% +\def\pst@addborder{% + \addto@pscode{% + gsave + \psk@border 2 mul + CLW add SLW + \pst@usecolor\psbordercolor + stroke + grestore}} +% +\def\pst@stroke{% + \ifx\pslinestyle\@none\else + \addto@pscode{% + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor + \tx@setStrokeTransparency % hv 2008-01-13 + \@nameuse{psls@\pslinestyle} + grestore}% + \fi} +% +\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}% +% +\def\pst@doublestroke{% + \addto@pscode{% + gsave + \psdoublesep SLW + \pst@usecolor\psdoublecolor + \tx@setStrokeTransparency % hv 2016-09-23 + stroke + grestore +}} +% +\def\pst@arrowtype{% + \ifx\psk@arrowB\@empty 0 \else -2 \fi + \ifx\psk@arrowA\@empty 0 \else -1 \fi + add } +% +\def\pst@addarrowdef{% + \addto@pscode{% + /ArrowA { + \ifx\psk@arrowA\@empty + \pst@oplineto + \else + \pst@arrowdef{A} + moveto + \fi + } def + /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def +}} +% +\def\pst@arrowdef#1{% + \ifnum\pst@repeatarrowsflag>\z@ + /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c + \fi + \tx@BeginArrow + \psk@arrowscale + \@nameuse{psas@\@nameuse{psk@arrow#1}} + \tx@EndArrow +} +% +\def\pst@repeatarrows{% + \addto@pscode{% + gsave + \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi + \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi + grestore +}} +% +\def\pst@OpenShowPoints{% + \addto@pscode{% + gsave + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + newpath + Points aload length 2 div 2 sub cvi /N ED + N 0 ge + { \ifx\psk@arrowA\@empty Dot \else pop pop \fi + N { Dot } repeat + \ifx\psk@arrowB\@empty Dot \else pop pop \fi } + { N 2 mul { pop } repeat } ifelse + grestore +}} +% +\newif\ifPst@custom\Pst@customfalse +\define@boolkey[psset]{pstricks}[Pst@]{noCurrentPoint}[true]{} +\psset[pstricks]{noCurrentPoint=false} +% +% +\def\pscustom{\pst@object{pscustom}} +\long\def\pscustom@i#1{% + \begin@SpecialObj% + \solid@star% + \let\pst@ifcustom\iftrue% + \Pst@customtrue% + \let\begin@ClosedObj\begin@CustomObj% + \let\end@ClosedObj\endgroup% + \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}% + \let\end@OpenObj\endgroup% + \let\begin@AltOpenObj\begin@CustomObj% + \def\begin@SpecialObj{% + \begingroup% + \pst@misplaced{special graphics object}% + \def\addto@pscode####1{}% + \let\end@SpecialObj\endgroup}% + \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% + \def\psclip##1{\pst@misplaced\psclip}% + \def\pst@repeatarrowsflag{\z@}% + \let\pst@setrepeatarrowsflag\relax% + \showpointsfalse% + \def\pst@linetype{\pslinetype}% + \def\psk@liftpen{\z@}% +% \psset{liftpen=0}% + \def\pst@cp{/currentpoint load stopped pop }% + \def\pst@oplineto{/lineto load stopped { moveto } if }% + \def\pst@optcp##1##2{\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}% + \let\caddto@pscode\addto@pscode% + \def\cuse@par##1{{\use@par##1}}% + \the\pst@customdefs% + \setbox\pst@hbox=\hbox{#1}% + \psk@fillstyle + \pst@stroke + \end@SpecialObj + \let\pst@ifcustom\iffalse + \ignorespaces +} +% +\let\pst@ifcustom\iffalse +% +\def\begin@CustomObj{% + \begingroup% + \use@par% + \addto@pscode{ + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor + }% +} +\def\pst@oplineto{moveto } +\def\pst@cp{} +\def\pst@optcp#1#2{} +\define@key[psset]{pstricks}{liftpen}[0]{% + \ifPst@custom% + \ifcase#1\relax% + \def\psk@liftpen{\z@}% + \def\pst@cp{/currentpoint load stopped pop }% + \def\pst@oplineto{/lineto load stopped { moveto } if }% + \or% + \def\psk@liftpen{1}% + \def\pst@cp{}% + \def\pst@oplineto{/lineto load stopped { moveto } if }% + \or% + \def\psk@liftpen{2}% + \def\pst@cp{}% + \def\pst@oplineto{moveto }% + \fi\fi% +} +\psset[pstricks]{liftpen=0} +\def\psk@liftpen{-1} +% +\define@key[psset]{pstricks}{linetype}[2]{% + \pst@getint{#1}\pslinetype + \ifnum\pst@cntg<-3 + \@pstrickserr{linetype must be greater than -3}\@ehpa + \def\pslinetype{2}% + \fi} +\psset[pstricks]{linetype=2}% otherwise there is a problem when using e.g. +% \psaxes[axesstyle=frame,linestyle=dashed]{->}(3,-2) +% +\def\caddto@pscode#1{% + \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa} +\let\cuse@par\caddto@pscode +% +\def\tx@MSave{% + /msavematrx + [ tx@Dict /msavematrx known % does msavematrix exists? + { msavematrx aload pop } if + CM % matrix currentmatrix + ] + def +%----------------- hv begin 2004-05-07 ------------- patch 15 + msavematrx +%----------------- hv end 2004-05-07 ------------- patch 15 +} +\def\tx@MRestore{% a typo in pstricks with msavematrx + tx@Dict /msavematrx known { length 0 gt } { false } ifelse + { msavematrx aload pop setmatrix } if +} +% +\newtoks\pst@customdefs +\pst@customdefs{% + \def\newpath{\addto@pscode{newpath}}% + \def\reversepath{\addto@pscode{ reversepath }}% 20131209 hv + \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% + \def\rmoveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor rmoveto}}% + \def\closepath{\addto@pscode{closepath}}% + \def\gsave{\begingroup\addto@pscode{gsave}}% + \def\grestore{\endgroup\addto@pscode{grestore}}% + \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}% + \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}% + \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}% + \def\msave{\addto@pscode{\tx@MSave}}% + \def\mrestore{\addto@pscode{\tx@MRestore}}% + \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}% + \def\stroke{\def\pst@par{}\pst@object{stroke}}% + \def\fill{\def\pst@par{}\pst@object{fill}}% + \def\openshadow{\def\pst@par{}\pst@object{openshadow}}% + \def\closedshadow{\def\pst@par{}\pst@object{closedshadow}}% + \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}% + \def\lineto{\pst@onecoor{lineto}}% + \def\rlineto{\pst@onecoor{rlineto}}% + \def\curveto{\pst@threecoor{curveto}}% + \def\rcurveto{\pst@threecoor{rcurveto}}% + \def\code#1{\addto@pscode{#1}}% + \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}% + \def\rcoor{\pst@getcoors{}{}}% + \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}% + \def\setcolor#1{% + \@ifundefined{\string\color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}% hv 1.14 2005-12-17 + \def\arrows#1{{\psset[pstricks]{arrows=#1}\pst@addarrowdef}}% + \let\file\pst@rawfile% +} % END \pst@customdefs +% +\def\closedshadow@i{\cuse@par\pst@closedshadow} +\def\openshadow@i{\cuse@par\pst@openshadow} +\def\stroke@i{\cuse@par\pst@stroke}% +\def\fill@i{\cuse@par\psk@fillstyle}% +\def\pst@onecoor#1(#2){% +\pst@@getcoor{#2}% +\addto@pscode{\pst@coor #1}} +\def\pst@threecoor#1(#2)#3(#4)#5(#6){% + \begingroup + \pst@getcoor{#2}\pst@tempa + \pst@getcoor{#4}\pst@tempb +% DG/SR modification begin - Aug. 4, 1999 - Patch 11 +%\pst@getcoor{#6}\pst@tembc + \pst@getcoor{#6}\pst@tempc +% DG/SR modification end + \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}% + \endgroup} +% +\def\pst@rawfile#1{% + \begingroup + \def\do##1{\catcode`##1=12\relax}" + \dospecials + \catcode`\%=14 + \pst@@rawfile{#1}% + \endgroup} +% +\def\pst@@rawfile#1{% + \immediate\openin1 #1 + \ifeof1 + \@pstrickserr{File `#1' not found}\@ehpa + \else + \immediate\read1 to \pst@tempg + \loop + \ifeof1 \@pstfalse\else\@psttrue\fi + \if@pst + \addto@pscode\pst@tempg + \immediate\read1 to \pst@tempg + \repeat + \fi + \immediate\closein1\relax} +% +\def\tx@NArray{NArray } +\def\tx@Line{Line } +\def\tx@Arcto{Arcto } +\def\tx@CheckClosed{CheckClosed } +\def\tx@Polygon{Polygon } +\define@key[psset]{pstricks}{gangle}[0]{\pst@getangle{#1}\psk@gangle} +\define@boolkey[psset]{pstricks}[Pst@]{trueAngle}[true]{} +\psset[pstricks]{trueAngle=false,gangle=0} +% +\def\tx@Diamond{Diamond } +\def\psdiamond{\def\pst@par{}\pst@object{psdiamond}} +\def\psdiamond@i(#1){\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}} +\def\psdiamond@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@getcoor{#2}\pst@tempb + \addto@pscode{% + \psline@iii + pop + \psk@dimen + \pst@tempb + \psk@gangle + \pst@tempa + \tx@Diamond + }% + \def\pst@linetype{4}% + \end@ClosedObj} +% +\def\tx@Triangle{Triangle } +\def\pstriangle{\def\pst@par{}\pst@object{pstriangle}} +\def\pstriangle@i(#1){\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}} +\def\pstriangle@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa% the center of the baseline + \pst@getcoor{#2}\pst@tempb% the height of the triangle + \addto@pscode{% + \psline@iii + pop % no showpoints option + \psk@dimen % outer/inner/middle + \pst@tempb + \psk@gangle % rotating angle + \pst@tempa + \tx@Triangle + }% + \def\pst@linetype{2}% + \end@ClosedObj} +% +\def\tx@CCA{CCA } +\def\tx@CCA{CCA } +\def\tx@CC{CC } +\def\tx@IC{IC } +\def\tx@BOC{BOC } +\def\tx@NC{NC } +\def\tx@EOC{EOC } +\def\tx@BAC{BAC } +\def\tx@NAC{NAC } +\def\tx@EAC{EAC } +\def\tx@OpenCurve{OpenCurve } +\def\tx@AltCurve{AltCurve } +\def\tx@ClosedCurve{ClosedCurve } +% +\define@key[psset]{pstricks}{curvature}[1 0.1 0]{% + \edef\pst@tempg{#1 }% + \expandafter\psset@@curvature\pst@tempg * * * \@nil} +\def\psset@@curvature#1 #2 #3 #4\@nil{% + \pst@checknum{#1}\pst@tempg + \pst@checknum{#2}\pst@temph + \pst@checknum{#3}\pst@tempi + \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}} +% +\psset[pstricks]{curvature=1 .1 0} +% +\def\pscurve{\pst@object{pscurve}} +\def\pscurve@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\pscurve@ii% + }% +} +\def\pscurve@ii{% + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point + \psk@curvature\space /c ED /b ED /a ED + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolCurve \else \tx@OpenCurve \fi + \ifPst@variableLW \pst@flattenpath \fi + }% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@OpenObj% +} +\def\psecurve{\pst@object{psecurve}} +\def\psecurve@i{\pst@getarrows{\begin@OpenObj\pst@getcoors[\psecurve@ii}} +\def\psecurve@ii{% + \addto@pscode{ + \psk@curvature\space /c ED /b ED /a ED + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol AltOpenSymbolCurve \else \tx@AltCurve \fi + }% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@OpenObj} +% +\def\psccurve{\pst@object{psccurve}} +\def\psccurve@i{\begin@ClosedObj\pst@getcoors[\psccurve@ii} +\def\psccurve@ii{% + \addto@pscode{% + \psk@curvature\space /c ED /b ED /a ED + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolCurve \else \tx@ClosedCurve \fi + }% + \def\pst@linetype{1}% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@ClosedObj} +% +\def\pscspline{\pst@object{pscspline}}% Christoph Bersch +\def\pscspline@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\pscspline@ii + }% +} +\def\tx@Spline{Spline } +\def\pscspline@ii{% + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi + \tx@setlinejoin + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol + \psls@symbol OpenSymbolSpline + \else + \tx@Spline + \fi + }% + \end@OpenObj +} +% +\define@key[psset]{pstricks}{dotsize}[2pt 2]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil% + \edef\psk@@dotsize{\pst@number\pst@dimg}% + \let\psk@@@dotsize\pst@tempg% + \edef\psk@dotsize{ /DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }} +\psset[pstricks]{dotsize=2pt 2} +% +\define@key[psset]{pstricks}{dotscale}[1]{% + \pst@getscale{#1}\psk@dotscale + \ifx\psk@dotscale\@empty + \def\psk@xdotscale{1 }% + \def\psk@ydotscale{1 }% + \else + \let\psk@xdotscale\pst@tempg + \let\psk@ydotscale\pst@temph + \fi} +% +\def\pst@Getangle#1#2{% + \pst@getangle{#1}\pst@tempg + \def\pst@temph{0. }% + \ifx\pst@tempg\pst@temph\def#2{}\else\edef#2{\pst@tempg\space rotate }\fi} +% +\define@key[psset]{pstricks}{dotangle}[0]{% + \pst@getangle{#1}\psk@@dotangle + \ifdim\psk@@dotangle\p@=\z@ + \let\psk@dotangle\@empty + \else + \edef\psk@dotangle{\psk@@dotangle rotate }% + \fi} +\psset[pstricks]{dotangle=0} +% +\def\pst@getdotsize{% +\pst@dimg=\psk@@@dotsize\pslinewidth +\advance\pst@dimg\psk@@dotsize\p@ +\pst@dimh=\psk@ydotscale\pst@dimg +\pst@dimg=\psk@xdotscale\pst@dimg +\divide\pst@dimh 2 +\divide\pst@dimg 2\relax} +% +\psset[pstricks]{dotscale=1} +% +\def\psdot{\pst@object{psdot}} +\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}} +\def\psdot@ii(#1){% + \begin@SpecialObj% +% hv modification 1.13 2005-11-28 + \solid@star% +% hv modification end + \pst@@getcoor{#1}% + \addto@pscode{ + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + \tx@setStrokeTransparency + \pst@coor Dot}% + \end@SpecialObj} +% +\def\psdots{\pst@object{psdots}} +\def\psdots@i{% + \begin@SpecialObj% + \pst@getcoors[\psdots@ii} +\def\psdots@ii{% + \addto@pscode{ false \tx@NArray \psdots@iii }% + \end@SpecialObj} +\def\psdots@iii{% + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + \tx@setStrokeTransparency + newpath + n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat } +% +% DG: dead code (to suppress until \psset[pstricks]{dotstyle) ? - Aug. 4, 1997 +\def\tx@SQ{SQ } +\def\tx@ST{ST } +\def\tx@SP{SP } +% +\def\pst@gdot#1{ /Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def } +% +\@namedef{psds@*}{\pst@gdot{ 0 0 DS \tx@SD }} +\@namedef{psds@o}{% + /r2 DS CLW sub def + \pst@gdot{ 0 0 DS \tx@SD \pst@usecolor\psfillcolor SLW 0 0 r2 \tx@SD }} +\@namedef{psds@square*}{ /r1 DS .886 mul def \pst@gdot{r1 \tx@SQ }} +\@namedef{psds@square}{% + /r1 DS .886 mul def /r2 r1 CLW sub def + \pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}} +\@namedef{psds@triangle*}{% + /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def + \pst@gdot{x1 y1 \tx@ST}} +\@namedef{psds@triangle}{% + /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def + /y2 y1 CLW add def /x2 y2 1.732 mul neg def + \pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}} +\@namedef{psds@pentagon*}{% + /r1 DS 1.149 mul def + \pst@gdot{r1 \tx@SP}} +\@namedef{psds@pentagon}{% + DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED + \pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}} +\@namedef{psds@+}{% + /DS DS 1.253 mul def + \pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}} +\@namedef{psds@|}{% + \psk@tbarsize CLW mul add 2 div /DS ED + \pst@gdot{0 DS moveto 0 DS neg L stroke}} +% DG: end dead code? +% +\define@key[psset]{pstricks}{dotstyle}[*]{% + \@ifundefined{psds@#1}% + {\@pstrickserr{Dot style `#1' not defined}\@eha}% + {\edef\psk@dotstyle{#1}}} +\psset[pstricks]{dotstyle=*} +% +\def\tx@FontDot{FontDot } +\def\newpsfontdot#1[#2]#3#4{% + \@namedef{psds@#1}{% + /#3 \psk@@dotangle [#2] \tx@FontDot +% DG/SR modification begin - Dec. 12, 1999 - Patch 14 +%/Dot { moveto #4 show } bind def }} + /Dot { moveto gsave \psk@dotscale #4 show grestore } bind def +}} +% DG/SR modification end +\def\newpsfontdotH#1[#2]#3#4#5{% for filled objects + \@namedef{psds@#1}{% + /#3 \psk@@dotangle [#2] \tx@FontDot + /Dot { + moveto +% \iftrue +% DG/SR modification begin - Dec. 23, 1999 - Patch 14 +%gsave \pst@usecolor\psfillcolor #5 show grestore +%\fi +%#4 show + gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore % fill first +% \fi + gsave \psk@dotscale #4 show grestore % show the unfilled one +% DG/SR modification end + } bind def +}} +% +\pstheader{pst-dots.pro} +\newpsfontdot{*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} +\newpsfontdotH{o}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} +\newpsfontdotH{Bo}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} +\newpsfontdotH{triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} +\newpsfontdotH{Btriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} +\newpsfontdot{triangle*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} +\newpsfontdotH{square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} +\newpsfontdotH{Bsquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} +\newpsfontdot{square*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} +\newpsfontdotH{pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} +\newpsfontdotH{Bpentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} +\newpsfontdot{pentagon*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} +% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14 +%\newpsfontdot{diamond*}[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{StandardSymL}{<E0>} +%\newpsfontdot{diamond}[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{StandardSymL}{<A8>} +% D.G. modification begin - Jan. 17, 2000 +\newpsfontdotH{diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} +\newpsfontdotH{Bdiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} +\newpsfontdot{diamond*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} +% DG/SR modification end +\newpsfontdot{oplus}[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{StandardSymL}{<C5>} +\newpsfontdot{otimes}[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{StandardSymL}{<C4>} +\newpsfontdot{x}[1.8 0.0 0.0 1.8 -0.495 -0.4788]{StandardSymL}{<B4>} +\newpsfontdot{+}[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{NimbusRomNo9L-Regu}{<2B>} +\newpsfontdot{asterisk}[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{NimbusRomNo9L-Regu}{<2A>} +\newpsfontdot{B+}[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{NimbusRomNo9L-Bold}{<2B>} +\newpsfontdot{Basterisk}[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{NimbusRomNo9L-Bold}{<2A>} +\newpsfontdot{|}[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{NimbusSanL-Regu}{(|)} +% DG/SR modification begin - Oct. 27, 1997 - Patch 7 +%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{NimbusSanL-Regu}{(|)} +% DG/SR modification end +\newpsfontdot{B|}[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{NimbusSanL-Bold}{(|)}% +% DG/SR modification begin - Oct. 27, 1997 - Patch 7 +%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{NimbusSanL-Bold}{(|)} + +% DG/SR modification end +\iffalse +\newpsfontdot{*}[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{StandardSymL}{<B7>} +\newpsfontdot{o}[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{StandardSymL}{<B0>} +\newpsfontdot{Bo}[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{NimbusRomNo9L-Bold}{<CA>} +\fi +% Etienne Riga +\newpsfontdot{Asterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(k)} +\newpsfontdot{BoldAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(K)} +\newpsfontdotH{SolidAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(J)}{(b)} +% +\newpsfontdotH{Pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} +\newpsfontdotH{BoldPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} +\newpsfontdot{SolidPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} +\newpsfontdotH{Hexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(h)}{(G)} +\newpsfontdotH{BoldHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(H)}{(G)} +\newpsfontdot{SolidHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(G)} +\newpsfontdotH{Octogon}[1 0 0 1 0 0]{PSTricksDotFont}{(f)}{(g)} +\newpsfontdotH{BoldOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(F)}{(g)} +\newpsfontdot{SolidOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(g)} +% +\newpsfontdot{Bullet}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} +\newpsfontdotH{Circle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} +\newpsfontdotH{BoldCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} +%\newpsfontdot{SolidCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} +\newpsfontdotH{Triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} +\newpsfontdotH{BoldTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} +\newpsfontdot{SolidTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} +\newpsfontdotH{Square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} +\newpsfontdotH{BoldSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} +\newpsfontdot{SolidSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} +\newpsfontdot{Add}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(a)} +\newpsfontdot{BoldAdd}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(A)} +\newpsfontdot{Mul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(x)} +\newpsfontdot{BoldMul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(X)} +\newpsfontdotH{Oplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(m)}{(b)} +\newpsfontdotH{BoldOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(M)}{(b)} +\newpsfontdotH{SolidOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(e)}{(b)} +\newpsfontdotH{Otimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(n)}{(b)} +\newpsfontdotH{BoldOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(N)}{(b)} +\newpsfontdotH{SolidOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(E)}{(b)} +\newpsfontdot{Bar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(i)} +\newpsfontdot{BoldBar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(I)} +\newpsfontdotH{Diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} +\newpsfontdotH{BoldDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} +\newpsfontdot{SolidDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} +% +\newdimen\pslinearc +\define@key[psset]{pstricks}{linearc}[0pt]{\pssetlength\pslinearc{#1}} +\psset[pstricks]{linearc=0pt} +% +\def\psline{\pst@object{psline}} +\def\psline@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psline@ii + }% +} +\def\psline@ii{% + \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolLine }% + \else + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point? + \psline@iii % arc and lineto type + \tx@Line % .pro function + }% + \fi + \end@OpenObj +} +\def\psline@iii{% + \ifdim\pslinearc>\z@ + /r \pst@number\pslinearc def + /Lineto { \tx@Arcto } def + \else + /Lineto /lineto load def + \fi + \tx@setlinejoin % hv 2007-10-13 + \ifshowpoints true \else false \fi +} +% +\def\psLine{\pst@object{psLine}} +\def\psLine@i{% + \pst@getarrows{% + \begin@OpenObj + \psLine@ii}} +\def\psLine@ii(#1){\@ifnextchar({\psLine@iii(#1)}{\psLine@iii(0,0)(#1)}}% +\def\psLine@iii(#1)(#2){% + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point? + [ % start for coordinate array + \pst@tempB + \pst@tempA % order vice versa + 4 copy Pyth2 \psk@arrowlength ge + { \psline@iii \tx@Line } + { pop pop pop pop pop } ifelse + }% + \end@OpenObj + \ignorespaces +} +\def\psLineSegments{\leavevmode\pst@killglue\pst@object{psLineSegments}} +\def\psLineSegments@i{\pst@getarrows{\psLineSegments@ii}} +\def\psLineSegments@ii(#1)(#2){% + \begingroup + \use@keep@par + \solid@star + \ifpsdoubleline\pst@setdoublesep\fi + \init@pscode + \let\pst@linetype\pst@arrowtype + \pst@addarrowdef + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point? + [ % start for coordinate array + \pst@tempB + \pst@tempA % order vice versa + 4 copy Pyth2 \psk@arrowlength ge + { \psline@iii \tx@Line } + { pop pop pop pop pop } ifelse + }% + \end@OpenObj + \ignorespaces + \@ifnextchar(\psLineSegments@ii{}% +}% +\def\pst@isnum#1{\pst@isnum@i\zap@space#1 \@empty\@nil}% +\def\pst@isnum@i#1\@nil{% + \if!\ifnum9<1#1!\else_\fi% + \expandafter\@firstoftwo% + \else% + \expandafter\@secondoftwo% + \fi} +% +\def\psset@@symbol#1#2#3#4\@nil{% + \ifx\relax#4\relax\def\psk@symbol{(#1)}% + \else% + \pst@isnum{#1#2#3}{% + \pst@cnta='#1#2#3\relax% + \ifnum\pst@cnta>'377\relax% + \@pstrickserr{Number too large!}\@ehpb% + \else% + \def\psk@symbol{(\@backslashchar#1#2#3)}% + \fi% +}{\@pstrickserr{Not a number!}\@ehpb}% + \fi} +% +\define@key[psset]{pstricks}{symbol}[a]{\expandafter\psset@@symbol#1!!\@nil} +\psset[pstricks]{symbol=a} +% +\newdimen\pst@symbolStep +\define@key[psset]{pstricks}{symbolStep}[20pt]{\pst@expandafter\pst@@symbolStep#1\@nil} +\def\pst@@symbolStep#1#2\@nil{\if-#1\pssetlength\pst@symbolStep{-#2pt}\else\pssetlength\pst@symbolStep{#1#2}\fi} +\psset[pstricks]{symbolStep=20pt} + +\newdimen\pst@symbolWidth +\newdimen\pst@symbolLinewidth +\define@key[psset]{pstricks}{symbolWidth}[10pt]{\pssetlength\pst@symbolWidth{#1}} +\define@key[psset]{pstricks}{symbolLinewidth}[0.5pt]{\pssetlength\pst@symbolLinewidth{#1}} +\psset[pstricks]{symbolWidth=10pt,symbolLinewidth=0.5pt} + +\define@key[psset]{pstricks}{symbolFont}[Dingbats]{\def\psk@symbolFont{/#1 }} +\psset[pstricks]{symbolFont=Dingbats} +\define@boolkey[psset]{pstricks}[Pst@]{rotateSymbol}[true]{} +\psset[pstricks]{rotateSymbol=false} +\define@key[psset]{pstricks}{startAngle}[0]{\pst@getangle{#1}\psk@startAngle} +\define@key[psset]{pstricks}{tickAngle}[0]{\pst@getangle{#1}\psk@tickAngle} +\psset[pstricks]{startAngle=0,tickAngle=0} +\define@boolkey[psset]{pstricks}[Pst@]{curveticks}[true]{} +\psset[pstricks]{curveticks=false} + +% +\def\psls@symbol{ + /Symbol \psk@symbol def + /SymbolWidth \pst@number\pst@symbolWidth def + /SymbolLinewidth \pst@number\pst@symbolLinewidth def + /SymStep \pst@number\pst@symbolStep def + \psk@symbolFont findfont %0. [1.0 0.0 0.0 1.0 0.0 0.0] + \pst@number\pst@symbolWidth scalefont %dup + setfont + /rotateSymbol \ifPst@rotateSymbol true \else false \fi def + /tickAngle \psk@tickAngle\space def + /startAngle \psk@startAngle\space def + /CorrAngle \ifx\psk@rot\@empty 0 \else \psk@rot \fi def + /curveticks \ifPst@curveticks true \else false \fi def + \pst@number\pslinewidth SLW +} +\def\psls@@symbol{symbol} +% +\def\psPline{\def\pst@par{}\pst@object{psPline}}% perpendicular to another line B-C +\def\psPline@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psPline@ii}% \pst@coors on stack +} +\def\psPline@ii{% + \addto@pscode{ % [ pC pB pA is on stack + /yA ED /xA ED + /yB ED /xB ED + yB sub exch xB sub div /mBC ED % the slope + /mA 1 mBC neg div def % orthogonal + /xS yA yB sub mBC xB mul add mA xA mul sub mBC mA sub div def + /yS mBC xS xB sub mul yB add def + xS yS xA yA + \ifPst@noCurrentPoint\else\pst@cp\fi % current point + \psline@iii % arc and lineto type + \tx@Line % .pro function + }% + \end@OpenObj% + \ignorespaces% +} +% +\def\qline(#1)(#2){% + \def\pst@par{}% + \begin@SpecialObj + \def\pst@linetype{0}% + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \addto@pscode{% + \pst@tempa moveto \pst@coor L + \@nameuse{psls@\pslinestyle}% + }% + \end@SpecialObj} +% +\def\pspolygon{\pst@object{pspolygon}} +\def\pspolygon@i{% + \begin@ClosedObj% + \def\pst@cp{}% + \pst@getcoors[\pspolygon@ii% +} +\def\pspolygon@ii{% + \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolPolygon }% + \else \addto@pscode{\psline@iii \tx@Polygon}% + \fi% + \def\pst@linetype{1}% + \end@ClosedObj} +% +\define@key[psset]{pstricks}{framearc}[0]{\pst@checknum{#1}\psk@framearc} +\psset[pstricks]{framearc=0} +% +\define@key[psset]{pstricks}{cornersize}[relative]{\pst@expandafter\psset@@cornersize{#1}\@nil} +\def\psset@@cornersize#1#2\@nil{% + \if #1a\relax + \def\psk@cornersize{\pst@number\pslinearc false }% + \else\def\psk@cornersize{\psk@framearc true }% + \fi} +\psset[pstricks]{cornersize=relative} +% +\def\tx@Rect{Rect } +\def\tx@OvalFrame{OvalFrame } +\def\tx@Frame{Frame } +% +\define@key[psset]{pstricks}{dimen}[outer]{\pst@expandafter\psset@@dimen{#1}\@nil} +\def\psset@@dimen#1#2\@nil{% + \if #1o\relax% outer + \def\psk@dimen{.5 }% + \else + \if #1m\relax% middle + \def\psk@dimen{0 }% + \else + \if #1i\relax% inner + \def\psk@dimen{-.5 }% + \fi\fi\fi} +\psset[pstricks]{dimen=outer} +% +\def\psframe{\pst@object{psframe}} +\def\psframe@i(#1){% + \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}} +\def\psframe@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \addto@pscode{ \psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame }% + \def\pst@linetype{2}% + \showpointsfalse + \end@ClosedObj +} + +\iffalse +\def\psSquare{\pst@object{psSquare}} +\def\psSquare@i(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@getcoor{#2}\pst@tempb + \addto@pscode{ \psk@cornersize + \pst@tempa /yA ED /xA ED + \pst@tempb /yB ED /xB ED + xA yA moveto xB yB L + xA xB sub yA yB sub atan /Angle ED + xA yA xB yB Pyth2 dup xA add exch yA add + \psk@dimen + \tx@Frame +% grestore + }% + \def\pst@linetype{2}% + \showpointsfalse + \end@ClosedObj +} +\fi +% +\def\psTextFrame{\pst@object{psTextFrame}} +\def\psTextFrame@i(#1)(#2)#3{% + \addbefore@par{ref=c}% to prevent an empty value + \leavevmode% + \pst@killglue + \begingroup + \use@par + \ifx\psk@yref\relax \def\psk@yref{0}\fi% no Baseline possible + \SpecialCoor + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \if@star\psframe*(#1)(#2)\else\psframe(#1)(#2)\fi + \rput(! \pst@tempA \pst@tempB % x1 y1 x2 y2 + exch 4 -1 roll % y1 y2 x2 x1 + dup /x1 ED % y1 y2 x2 x1 + sub /dx ED % y1 y2 + exch dup /y1 ED % y2 y1 + sub /dy ED + x1 dx \psk@xref\space mul add \pst@number\psxunit div + y1 dy \psk@yref\space mul add \pst@number\psyunit div ){#3} + \endgroup + \ignorespaces} +% +\def\tx@BezierNArray{ BezierNArray } +\def\tx@OpenBezier{ OpenBezier } +\def\tx@ClosedBezier{ ClosedBezier } +\def\tx@BezierShowPoints{ BezierShowPoints } +\def\tx@BezierCurve{ BezierCurve } +\def\pst@BezierType{2 } % the default +% +\def\psbezier{\pst@object{psbezier}} +\def\psbezier@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psbezier@ii% + }% +} +\def\psbezier@ii{% + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolBezier + \else + \tx@OpenBezier + \ifshowpoints \tx@BezierShowPoints \fi + \fi + }% + \def\pst@linetype{1}% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@OpenObj} +% +\def\pscbezier{\def\pst@par{}\pst@object{pscbezier}} +\def\pscbezier@i{% + \begin@ClosedObj + \pst@getcoors[\pscbezier@ii} +% +\def\pscbezier@ii{% + \addto@pscode{% + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolBezier + \else + \tx@ClosedBezier + \ifshowpoints \tx@BezierShowPoints \fi + \fi}% +% \chardef\pst@linetype=1 + \def\pst@linetype{1}% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@ClosedObj} +% +\iffalse +\define@key[psset]{pstricks}{epsilon}[0.005]{\pst@checknum{#1}\psk@epsilon} +\psset[pstricks]{epsilon=0.005} % 200 steps for one curve +% +\def\psBezier#1{% % allowed order is 1 ... 9 + \ifnum#1>0 \ifnum#1<10 \def\pst@BezierType{#1 }\fi\fi% + \def\pst@par{}\pst@object{psBezier}} +\def\psBezier@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psBezier@ii% +}} +\def\psBezier@ii{% + \addto@pscode{% + \psk@epsilon % step for Bezier T=0,0+epsilon,0+i*epsilon,...,1 + \pst@BezierType % type of the Bezier curve 2,3,4,... + \tx@BezierCurve + \ifshowpoints \tx@BezierShowPoints \fi + }% + \end@OpenObj} +\fi +% +\define@key[psset]{pstricks}{pType}[0]{\pst@cntg=#1\relax\edef\psk@pType{\the\pst@cntg}} +\psset[pstricks]{pType=0} +\def\tx@Parab{Parab }% given by 1 point and the min/max +\def\tx@Parabo{Parab1 }% given by 2 points for y-a=(x-b)^2 +% +\def\psparabola{\pst@object{psparabola}}% 2009-05-19 (hv) +\def\psparabola@i{\pst@getarrows\psparabola@ii} +\def\psparabola@ii#1(#2)#3(#4){% #2 P #4 SP + \begin@OpenObj + \pst@getcoor{#2}\pst@tempa + \pst@@getcoor{#4}% + \addto@pscode{\pst@tempa \pst@coor + \ifcase\psk@pType + \tx@Parab \or + \tx@Parabo + \fi}% + \end@OpenObj} +\let\parabola\psparabola% compatibility (hv) +% +% +\define@key[psset]{pstricks}{gridwidth}[0.8pt]{\pst@getlength{#1}\psk@gridwidth} +\psset[pstricks]{gridwidth=.8pt} +\define@key[psset]{pstricks}{griddots}[0]{% + \pst@cntg=#1\relax + \edef\psk@griddots{\the\pst@cntg}} +\psset[pstricks]{griddots=0} +\define@key[psset]{pstricks}{gridcolor}[black]{\pst@getcolor{#1}\psgridcolor} +\psset[pstricks]{gridcolor=black} +\define@key[psset]{pstricks}{subgridwidth}[0.4pt]{\pst@getlength{#1}\psk@subgridwidth} +\psset[pstricks]{subgridwidth=0.4pt} +\define@key[psset]{pstricks}{subgridcolor}[gray]{\pst@getcolor{#1}\pssubgridcolor} +\psset[pstricks]{subgridcolor=gray} +\define@key[psset]{pstricks}{subgriddots}[0]{% + \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}} +\psset[pstricks]{subgriddots=0} +\define@key[psset]{pstricks}{subgriddiv}[5]{% + \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}} +\psset[pstricks]{subgriddiv=5} +% +\define@key[psset]{pstricks}{gridfont}[NimbusSanL-Regu]{\def\psk@gridfont{/#1 }}% hv 2007-11-13 +\ifpst@psfonts + \psset[pstricks]{gridfont=Helvetica}% +\else + \psset[pstricks]{gridfont=NimbusSanL-Regu}% +\fi +% +\define@key[psset]{pstricks}{gridlabels}[10pt]{\pst@getlength{#1}\psk@gridlabels} +\psset[pstricks]{gridlabels=10pt} +\define@key[psset]{pstricks}{gridlabelcolor}[black]{\pst@getcolor{#1}\psgridlabelcolor} +\psset[pstricks]{gridlabelcolor=black} +\define@key[psset]{pstricks}{xgridoffset}[0]{\pst@getlength{#1}\psk@xgridoffset} +\define@key[psset]{pstricks}{ygridoffset}[0]{\pst@getlength{#1}\psk@ygridoffset} +\psset[pstricks]{xgridoffset=0,ygridoffset=0} + +\def\tx@Grid{Grid } + +\def\psgrid{\pst@object{psgrid}} +\def\psgrid@i{\@ifnextchar({\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}} +\def\psgrid@ii(#1){\@ifnextchar({\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}} +\def\psgrid@iii(#1)(#2){\@ifnextchar({\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}} +\def\psgrid@iv(#1)(#2)(#3){% + \begin@SpecialObj% + \pst@getcoor{#1}\pst@tempA% hv 1.11 + \pst@getcoor{#2}\pst@tempB% hv 1.11 + \pst@@getcoor{#3}% + \ifnum\psk@subgriddiv>1\relax + \addto@pscode{ + /xGridOffset \psk@xgridoffset\space def + /yGridOffset \psk@ygridoffset\space def + gsave + \tx@setStrokeTransparency + \psk@subgridwidth SLW + \pst@usecolor\pssubgridcolor + \pst@tempB \pst@coor \pst@tempA % hv 1.11 +% \pst@number\psxunit \pst@number\psyunit % hv 1.11 + \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 + \psk@subgriddiv\space \psk@subgriddots\space + {} 0 + \psk@gridfont findfont 0 scalefont setfont % hv 1.16 + \tx@Grid + grestore + }% + \fi% + \addto@pscode{ + gsave + /xGridOffset \psk@xgridoffset def + /yGridOffset \psk@ygridoffset def + \tx@setStrokeTransparency + \psk@gridwidth SLW + \pst@usecolor\psgridcolor + \pst@tempB \pst@coor \pst@tempA % hv 1.11 + \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 +% \pst@number\psxunit \pst@number\psyunit % hv 1.11 + 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor } + \psk@gridlabels + \psk@gridfont findfont \psk@gridlabels scalefont setfont % hv 1.16 + \tx@Grid + grestore + }% + \end@SpecialObj} +% +\newif\ifpsmathbox +\psmathboxtrue +\def\pst@mathflag{\z@} +\newtoks\everypsbox +\let\pst@thisbox\relax +% +\long\def\pst@makenotverbbox#1#2{% + \edef\pst@mathflag{% + \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else\z@\fi\else\z@\fi}% + \setbox\pst@hbox=\hbox{% + \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi% + {\pst@thisbox\the\everypsbox#2}% + \ifnum\pst@mathflag>\z@$\fi% $ + }% + #1} +% +\def\pst@makeverbbox#1{% + \def\pst@afterbox{#1}% + \edef\pst@mathflag{\ifpsmathbox\ifmmode\ifinner1\else2\fi\else\z@\fi\else\z@\fi}% + \afterassignment\pst@beginbox% + \setbox\pst@hbox\hbox% +} +\def\pst@beginbox{% + \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi% + \bgroup\aftergroup\pst@endbox% + \pst@thisbox% + \the\everypsbox% +} +\def\pst@endbox{% + \ifnum\pst@mathflag>\z@\relax$\fi% $ + \egroup% + \pst@afterbox% +} +\def\pst@makebox{\pst@@makebox} +\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}} +\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}} +\psverbboxfalse +\def\pst@longbox{% + \def\pst@makebox{% + \gdef\pst@makebox{\pst@@makebox}% + \pst@makelongbox% + }% +} +\def\pst@makelongbox#1{% + \def\pst@afterbox{#1}% + \edef\pst@mathflag{% + \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi% + }% + \setbox\pst@hbox\hbox\bgroup + \aftergroup\pst@afterbox + \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi + \begingroup + \pst@thisbox + \the\everypsbox% +} +\def\pst@endlongbox{% + \endgroup + \ifnum\pst@mathflag>\z@$\fi %$ + \egroup% +} +\def\pslongbox#1#2{% + \@namedef{#1}{\pst@longbox#2}% + \@namedef{end#1}{\pst@endlongbox}} +% +\newdimen\psframesep +\define@key[psset]{pstricks}{framesep}[3pt]{\pssetlength\psframesep{#1}} +\psset[pstricks]{framesep=3pt} +% +\define@boolkey[psset]{pstricks}[ps]{boxsep}[true]{} +\psset[pstricks]{boxsep} +% +\def\pst@useboxpar{% + \use@par + \if@star + \let\pslinecolor\psfillcolor + \solid@star + \let\solid@star\relax + \fi + \ifpsdoubleline \pst@setdoublesep \fi} +% +\def\psframebox{\def\pst@par{}\pst@object{psframebox}} +\def\psframebox@i{\pst@makebox\psframebox@ii} +\def\psframebox@ii{% + \begingroup + \pst@useboxpar + \pst@dima=\pslinewidth + \advance\pst@dima by \psframesep + \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima + \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima + \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima + \setbox\pst@hbox=\hbox{% + \ifpsboxsep\kern\pst@dima\fi + \begin@ClosedObj + \addto@pscode{% + \psk@cornersize % arcradius boolean + \pst@number\pst@dima neg + \pst@number\pst@dimb neg + \pst@number\pst@dimc + \pst@number\pst@dimd + .5 + \tx@Frame% + }% + \def\pst@linetype{2}% + \showpointsfalse + \end@ClosedObj + \box\pst@hbox + \ifpsboxsep\kern\pst@dima\fi% + }% + \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi + \leavevmode\box\pst@hbox + \endgroup} +% +\def\psdblframebox{\def\pst@par{}\pst@object{psdblframebox}} +\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i} +% +\define@key[psset]{pstricks}{clipcommand}[clip]{\def\pst@clipcommand{#1 }} +\psset[pstricks]{clipcommand=clip}% alternative is eoclip +% +\def\psclip{\@ifnextchar[\psclip@i{\psclip@i[]}}% +\def\psclip@i[#1]#2{% + \leavevmode% + \begingroup% + \ifx\relax#1\relax\else\psset{#1}\fi% + \begin@psclip% + \begingroup% + \def\use@pscode{% + \pstVerb{ + \pst@dict + /mtrxc CM def + CP CP T + \tx@STV + \psk@origin + \psk@swapaxes + newpath + \pst@code + \pst@clipcommand + newpath + mtrxc setmatrix + moveto + 0 setgray + end + }% + \gdef\pst@code{}}% + \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% + \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% + \hbox to\z@{#2}% + \endgroup% + \def\endpsclip{% + \end@psclip% + \endgroup}% + \ignorespaces} +% +\def\endpsclip{\pst@misplaced\endpsclip} +\let\begin@psclip\relax +\def\end@psclip{\pstVerb{currentpoint initclip moveto}} +% +\def\AltClipMode{% + \def\end@psclip{\pstVerb{\pst@grestore}}% + \def\begin@psclip{\pstVerb{gsave}}} + \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} +% DG modification begin - Apr. 3, 1997 +% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus) +%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} +\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}} +% DG modification end +\def\clipbox@@#1{% + \pssetlength\pst@dimg{#1}% + \leavevmode\hbox{% + \begin@psclip% + \pst@Verb{ + CM \tx@STV CP T newpath + /a \pst@number\pst@dimg def + /w \pst@number{\wd\pst@hbox}a add def + /d \pst@number{\dp\pst@hbox}a add neg def + /h \pst@number{\ht\pst@hbox}a add def + a neg d moveto + a neg h L + w h L + w d L + closepath + \pst@clipcommand + newpath + 0 0 moveto + setmatrix}% + \unhbox\pst@hbox% + \end@psclip}} +% +\def\psshadowbox{\def\pst@par{}\pst@object{psshadowbox}} +\def\psshadowbox@i{\pst@makebox\psshadowbox@ii} +\def\psshadowbox@ii{% +\begingroup +\pst@useboxpar +\psshadowtrue +\psboxseptrue +\def\psk@shadowangle{-45 }% +\setbox\pst@hbox=\hbox{\psframebox@ii}% +\pst@dimh=\psk@shadowsize\p@ +\pst@dimh=.7071\pst@dimh +\pst@dimg=\dp\pst@hbox +\advance\pst@dimg\pst@dimh +\dp\pst@hbox=\pst@dimg +\pst@dimg=\wd\pst@hbox +\advance\pst@dimg\pst@dimh +\wd\pst@hbox=\pst@dimg +\leavevmode +\box\pst@hbox +\endgroup} +% +\def\pscirclebox{\pst@object{pscirclebox}} +\def\pscirclebox@i{\pst@makebox\pscirclebox@ii} +\def\pscirclebox@ii{% + \begingroup + \pst@useboxpar + \setbox\pst@hbox=\hbox{% + \pst@nodehook + \pscirclebox@iii + \box\pst@hbox}% + \ifpsboxsep\pscirclebox@sep\fi + \leavevmode + \box\pst@hbox + \endgroup + \ignorespaces +} +\def\pscirclebox@iii{% +\if@star + \pslinewidth\z@ + \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor + newpath \pscirclebox@iv \tx@SD end}% +\else + \begin@ClosedObj + \def\pst@linetype{4}\showpointsfalse + \addto@pscode{ \pscirclebox@iv\space CLW 2 div add 0 360 arc closepath}% + \end@ClosedObj +\fi +} +% +\def\pscirclebox@iv{ + \pst@number{\wd\pst@hbox} 2 div + \pst@number{\ht\pst@hbox} \pst@number{\dp\pst@hbox} add 2 div + 2 copy \pst@number{\dp\pst@hbox} sub 4 2 roll + \tx@Pyth \pst@number\psframesep add } +% +\def\pscirclebox@sep{% + \pst@dimn=\ht\pst@hbox% % the height of the box + \advance\pst@dimn by \dp\pst@hbox% % the depth of the box added to \pst@dimn + \divide\pst@dimn by 2% % \pst@dimn/2 + \pst@dimm=0.5\wd\pst@hbox% % the half of the width + \pst@Pyth\pst@dimm\pst@dimn\pst@dimo% % the diameter + \advance\pst@dimo by \pslinewidth% + \advance\pst@dimo by \psframesep% + \advance\pst@dimn by -\pst@dimo% + \setbox\pst@hbox=\hbox to 2\pst@dimo{\hss\vbox{\kern-\pst@dimn\box\pst@hbox}\hss}% + \advance\pst@dimn by -\dp\pst@hbox% + \dp\pst@hbox=-\pst@dimn} +% +\let\pst@nodehook\relax +% +\def\psCirclebox{\def\pst@par{}\pst@object{psCirclebox}} +\def\psCirclebox@i{\pst@makebox\psCirclebox@ii} +\def\psCirclebox@ii{% + \begingroup + \pst@useboxpar + \pst@dima=\ht\pst@hbox + \advance\pst@dima by -\dp\pst@hbox + \divide\pst@dima\tw@ + \pssetlength\pst@dimb\psk@radius + \setbox\pst@hbox=\hbox{% + \pst@nodehook + \pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}% + \box\pst@hbox}% + \ifpsboxsep \psCirclebox@sep \fi + \leavevmode + \box\pst@hbox + \endgroup +} +% +\def\psCirclebox@sep{% + \pst@dimc=\pst@dimb + \advance\pst@dimb-\pst@dima + \advance\pst@dima\pst@dimc + \setbox\pst@hbox=\hbox to\tw@\pst@dimc{% + \hss\vrule width \z@ depth \pst@dimb height \pst@dima + \box\pst@hbox\hss}} +% +\def\psovalbox{\def\pst@par{}\pst@object{psovalbox}} +\def\psovalbox@i{\pst@makebox{\psovalbox@ii}} +\def\psovalbox@ii{% + \begingroup + \pst@useboxpar + \psovalbox@iii + \ifpsboxsep\psovalbox@sep\fi + \leavevmode + \box\pst@hbox + \endgroup} +% +\def\psovalbox@iii{% + \psovalbox@iv + \setbox\pst@hbox=\hbox{% + \begin@ClosedObj + \addto@pscode{% + 0 360 + \pst@number\pst@dimc CLW 2 div sub + \pst@number\pst@dimd CLW 2 div sub + \pst@number\pst@dima + \pst@number\pst@dimb + \tx@Ellipse + closepath }% + \def\pst@linetype{2}% + \end@ClosedObj + \unhbox\pst@hbox}} +% +\def\psovalbox@iv{% + \pst@dimc=\pslinewidth\advance\pst@dimc\psframesep + \pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox + \pst@dima=.5\wd\pst@hbox + \pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox + \pst@dimd=.707\pst@dimd + \advance\pst@dimd\pst@dimc + \advance\pst@dimc.707\wd\pst@hbox} +% +\def\psovalbox@sep{% + \setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}% + \pst@dimg=\pst@dimd + \advance\pst@dimg-\pst@dimb + \dp\pst@hbox=\pst@dimg + \advance\pst@dimd\pst@dimb + \ht\pst@hbox=\pst@dimd} +% +\def\psdiabox{\def\pst@par{}\pst@object{psdiabox}} +\def\psdiabox@i{\pst@makebox{\psdiabox@ii}} +\def\psdiabox@ii{% +\begingroup +\pst@useboxpar +\psdiabox@iii +\ifpsboxsep\psdiabox@sep\fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\psdiabox@iv{% +\pst@dimg=.707\pslinewidth +\advance\pst@dimg.707\psframesep +\pst@dima=\wd\pst@hbox +\divide\pst@dima 2 +\pst@dimc=\pst@dima +\advance\pst@dimc\pst@dimg +\pst@dimd=\ht\pst@hbox +\advance\pst@dimd\dp\pst@hbox +\divide\pst@dimd 2 +\pst@dimb=\pst@dimd +\advance\pst@dimb-\dp\pst@hbox +\advance\pst@dimd\pst@dimg} +\def\psdiabox@iii{% +\psdiabox@iv +\setbox\pst@hbox=\hbox{% +\begin@ClosedObj +\addto@pscode{% +\psline@iii +pop +.5 +\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul +0 +\pst@number\pst@dima \pst@number\pst@dimb +\tx@Diamond}% +\def\pst@linetype{4}% +\end@ClosedObj +\box\pst@hbox}} +\def\psdiabox@sep{% +\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}% +\multiply\pst@dimd 2 +\advance\pst@dimd\pst@dimb +\ht\pst@hbox\pst@dimd +\advance\pst@dimd-2\pst@dimb +\dp\pst@hbox\pst@dimd} +% +\define@key[psset]{pstricks}{trimode}[U]{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil} +\def\psset@@trimode#1#2#3\@nil{% + \let\pst@tempg#1\relax + \ifx\pst@tempg* + \let\psk@@trimode\@empty + \let\pst@tempg#2\relax + \else + \let\psk@@trimode\relax + \fi + \edef\psk@trimode{% + \ifx R\pst@tempg 1 % Right + \else + \ifx D\pst@tempg 2 % Down + \else + \ifx L\pst@tempg 3 % Left + \else + \ifx l\pst@tempg 4 % |_ + \else + \ifx r\pst@tempg 5 % _| + \else 0 \fi % Up + \fi + \fi + \fi + \fi}% +} +\psset[pstricks]{trimode=U} +% +\def\pstribox{\pst@object{pstribox}} +\def\pstribox@i{\pst@makebox{\pstribox@ii}} +\def\pstribox@ii{% + \begingroup + \pst@useboxpar + \pstribox@iii + \ifpsboxsep\pstribox@sep\fi + \leavevmode + \box\pst@hbox + \endgroup} +% +\def\pstribox@iii{% + \pstribox@iv + \setbox\pst@hbox=\hbox{% + \begin@ClosedObj + \addto@pscode{ + \psline@iii + pop + 0.5 + \pst@number\pst@dimc % Width + \pst@number\pst@dimd % Height + \ifcase\psk@trimode + \or %% 0 + exch \or %% 1 + \or %% 2 + exch \or %% 3 + \or %% 4 + \or %% 5 + \fi + \psk@trimode -90 mul + \pst@number\pst@dima % x coor for text + \pst@number\pst@dimb % y coor for text + \tx@Triangle}% + \def\pst@linetype{2}% + \end@ClosedObj + \box\pst@hbox}% +} +% +\def\pstribox@iv{% + \pst@dimh=\pslinewidth + \advance\pst@dimh\psframesep + \pst@dimg=\ht\pst@hbox + \advance\pst@dimg-\dp\pst@hbox % totalheight + \divide\pst@dimg 2 % 0.5 totalheight + \edef\pst@tempa{\number\pst@dimg sp}% % For use by nodes. + \ifodd\psk@trimode % + \pst@dimb\pst@dimg + \else + \pst@dima=\wd\pst@hbox + \divide\pst@dima 2 + \fi + \ifcase\psk@trimode + \pst@dimb=-\dp\pst@hbox + \advance\pst@dimb-\pst@dimh + \or\pst@dima=-\pst@dimh + \or\pst@dimb=\ht\pst@hbox + \advance\pst@dimb\pst@dimh + \or\pst@dima=\wd\pst@hbox + \advance\pst@dima\pst@dimh + \fi + \pst@dimd=\dp\pst@hbox + \advance\pst@dimd\ht\pst@hbox + \ifx\psk@@trimode\relax% no star for trimode= + \pst@dimc=\wd\pst@hbox + \advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh + \multiply\pst@dimc 2 + \advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh + \multiply\pst@dimd 2 + \else% trimode=R*,L*,U*,D* + \ifodd\psk@trimode + \advance\pst@dimd 1.1547\wd\pst@hbox + \advance\pst@dimd 3.4641\pst@dimh + \pst@dimc=.866\pst@dimd + \else + \advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2) + \advance\pst@dimd 3\pst@dimh + \pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3)) + \fi + \fi} +% +\def\pstribox@sep{% +\ifodd\psk@trimode +\advance\pst@dimb.5\pst@dimd +\ht\pst@hbox=\pst@dimb +\advance\pst@dimd-\pst@dimb +\dp\pst@hbox=\pst@dimd +\else +\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}% +\global\pst@dimg=.5\pst@dimc +\fi +\ifcase\psk@trimode +\dp\pst@hbox-\pst@dimb +\advance\pst@dimd\pst@dimb +\ht\pst@hbox\pst@dimd +\or +\pst@dimg=.5\wd\pst@hbox +\global\advance\pst@dimg-\pst@dima +\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}% +\or +\ht\pst@hbox\pst@dimb +\advance\pst@dimd-\pst@dimb +\dp\pst@hbox\pst@dimd +\or +\pst@dimg=\pst@dimc +\advance\pst@dimg-\pst@dima +\global\advance\pst@dimg.5\wd\pst@hbox +\setbox\pst@hbox\hbox to \pst@dimc{% +\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}% +\fi} +% +\define@key[psset]{pstricks}{arcsepA}[0]{\pst@getlength{#1}\psk@arcsepA} +\define@key[psset]{pstricks}{arcsepB}[0]{\pst@getlength{#1}\psk@arcsepB} +\define@key[psset]{pstricks}{arcsep}[0]{% + \pst@getlength{#1}\psk@arcsepA\let\psk@arcsepB\psk@arcsepA} +\psset[pstricks]{arcsep=0} +\def\tx@ArcArrow{ArcArrow } +% +\def\psarc{\pst@object{psarc}} +\def\psarc@i{\@ifnextchar({\psarc@iii}{\psarc@ii}} +\def\psarc@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarc@iii{\psarc@iii(0,0)}} +\def\psarc@iii(#1)#2#3#4{% + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \ifx\pst@tempa\pst@tempb + \else + \begin@OpenObj + \pst@@getcoor{#1}% + \pssetlength\pst@dima{#2}% + \addto@pscode{\psarc@iv \psarc@v + \ifPst@variableLW \pst@flattenpath \fi + }% + \gdef\psarc@type{0}% + \showpointsfalse + \end@OpenObj + \fi +} +% +\def\psarcOA{\pst@object{psarcOA}}% \psarcOA[..](O)(A){angle1}{angle2} +\def\psarcOA@i{\@ifnextchar({\psarcOA@iii}{\psarcOA@ii}} +\def\psarcOA@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarcOA@iii{\psarcOA@iii(0,0)}} +\def\psarcOA@iii(#1)(#2)#3#4{% + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \ifx\pst@tempa\pst@tempb + \else + \begin@OpenObj + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \addto@pscode{ + \pst@tempA 2 copy /y ED /x ED \pst@tempB Pyth2 /r ED + x y translate + /c 57.2957 r \tx@Div def + /angleA + \pst@tempa + \psk@arcsepA c mul 2 div + \ifcase\psarc@type add \or sub \fi def + /angleB + \pst@tempb + \psk@arcsepB c mul 2 div + \ifcase\psarc@type sub \or add \fi def + \ifshowpoints\psarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + r angleA \tx@PtoC moveto + \fi + \fi + /angleAtoB angleB angleA gt { true }{ false } ifelse def + 0 0 r + angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } + r 0 gt \pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse +% { \ifcase\psarc@type add \or sub \fi } + \tx@ArcArrow +% dup AngleA gt AngleAtoB exor { neg } fi + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } + r 0 gt \pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse +% { \ifcase\psarc@type sub \or add \fi } + \tx@ArcArrow + dup angleA gt angleAtoB xor { pop angleA } if + \fi + \ifcase\psarc@type arc \or arcn \fi + \ifPst@variableLW \pst@flattenpath \fi + x neg y neg translate + }% + \gdef\psarc@type{0}% + \showpointsfalse + \end@OpenObj + \fi +} +\def\psarc@iv{% + \pst@coor /y ED /x ED + /r \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dima \fi def + /c 57.2957 r \tx@Div def + /angleA + \pst@tempa + \psk@arcsepA c mul 2 div + \ifcase\psarc@type add \or sub \fi + def + /angleB + \pst@tempb + \psk@arcsepB c mul 2 div + \ifcase\psarc@type sub \or add \fi + def + \ifshowpoints\psarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + r angleA \tx@PtoC + y add exch x add exch moveto + \fi + \fi} +% hv ---- 1.10 2005-05-05 ----------------------> hv begin +\def\psarc@v{% + /angleAtoB angleB angleA gt { true }{ false } ifelse def + x y r + angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } + r 0 gt \pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse +% { \ifcase\psarc@type add \or sub \fi } + \tx@ArcArrow +% dup AngleA gt AngleAtoB exor { neg } fi + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } + r 0 gt \pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse +% { \ifcase\psarc@type sub \or add \fi } + \tx@ArcArrow + dup angleA gt angleAtoB xor { pop angleA } if + \fi + \ifcase\psarc@type arc \or arcn \fi +} +% hv ----- 1.10 2005-05-05 ------------------------> end +% +\def\psarc@type{0} +\def\psarc@showpoints{% + gsave + newpath + x y moveto + x y r \pst@tempa \pst@tempb + \ifcase\psarc@type arc \or arcn \fi + closepath + CLW 2 div SLW + [ \psk@dash\space ] 0 setdash stroke + grestore } +\def\psarcn{\def\pst@par{}\pst@object{psarcn}} +\def\psarcn@i{\def\psarc@type{1}\psarc@i} +% +\def\psarcAB{\pst@object{psarcAB}}% hv 2008-11-26 +\def\psarcAB@i{% + \addbefore@par{psscale=1}% be sure, that it is defined + \pst@getarrows{% + \begin@OpenObj% + \pst@getcoors{}% + \psarcAB@ii + }% +} +\def\psarcAB@ii{% + \addto@pscode{ + /y ED /x ED /yA ED /xA ED /yB ED /xB ED + /r xB yB x y Pyth2 \psk@psscale\space mul def + /c 57.2957 r \tx@Div def + /angleA + yA y sub xA x sub atan + \psk@arcsepA c mul 2 div + \ifcase\psarc@type add \else sub \fi + def + /angleB + yB y sub xB x sub atan + \psk@arcsepB c mul 2 div + \ifcase\psarc@type sub \else add \fi + def + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + r angleA \tx@PtoC + y add exch x add exch moveto + \fi + \fi + \psarc@v}% + \gdef\psarc@type{0}% + \showpointsfalse% + \end@OpenObj% +} +\def\psarcnAB{\def\pst@par{}\pst@object{psarcnAB}} +\def\psarcnAB@i{\def\psarc@type{1}\psarcAB@i} +% +%------------------ tvz/DG/hv (2004-05-10) begin -------------------%% +% from Denis Giroux: http://www.tug.org/pipermail/pstricks/2001/000507.html +% +% I - Definition of \psellipticwedge, a generalization of \pswedge for wedges +% of ellipses (from the code of \pswedge and \psellipse) +% +\def\psellipticwedge{\pst@object{psellipticwedge}} +\def\psellipticwedge@i(#1){% + \@ifnextchar({\psellipticwedge@ii(#1)}{\psellipticwedge@ii(0,0)(#1)}} +\def\psellipticwedge@ii(#1)(#2)#3#4{% + \begin@ClosedObj + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \pst@getcoor{#1}\pst@tempc + \pst@@getcoor{#2}% + \def\pst@linetype{1}% + \addto@pscode{% + \pst@coor /ry ED /rx ED + \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + \pst@tempa + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempa } + { rx abs ry abs sub cvi 0 eq { \pst@tempa }{ rx ry + \tx@UserCoor exch \pst@tempa tan mul exch atan + \pst@tempa 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + \pst@tempb + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempb } + { rx abs ry abs sub cvi 0 eq { \pst@tempb }{ rx ry + \tx@UserCoor exch \pst@tempb tan mul exch atan + \pst@tempb 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + rx ry + \pst@tempc moveto + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul dup 3 1 roll + sub 3 1 roll sub exch + \fi + \pst@tempc + \tx@Ellipse + closepath + }% + \showpointsfalse + \end@ClosedObj% +} +% +% Code mainly from "pstricks.tex'' 0.94 beta (TvZ) +% +\def\psellipticarcn{\pst@object{psellipticarcn}} +\def\psellipticarcn@i{\let\if@psarcn\iftrue\psellipticarc@ii} +% +\def\psellipticarc{\pst@object{psellipticarc}} +\def\psellipticarc@i{\let\if@psarcn\iffalse\psellipticarc@ii} + +\define@boolkey[psset]{pstricks}[Pst@]{correctAngle}[true]{} +\psset{correctAngle} + +\let\if@psarcn\iffalse + +\def\psellipticarc@ii{\pst@getarrows\psellipticarc@iii} +\def\psellipticarc@iii(#1){% + \@ifnextchar({\psellipticarc@iv(#1)}{\psellipticarc@iv(0,0)(#1)}} +\def\psellipticarc@iv(#1)(#2)#3#4{% +% \addbefore@par{correctAngle=false} + \pst@getangle{#3}\pst@tempc % start angle + \pst@getangle{#4}\pst@tempd % end angle + \ifx\pst@tempc\pst@tempd + \else % same angles? then do nothing + \begin@OpenObj + \pst@getcoor{#1}\pst@tempa % origin + \pst@getcoor{#2}\pst@tempb % a b + \addto@pscode{ + \psellipticarc@definearg \psellipticarc@draw + \ifPst@variableLW \pst@flattenpath \fi + \ifshowpoints{} + gsave + xOrig yOrig T % set origin to ellipse origin + \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + rx ry scale % now we draw a circle :-) + 1 \pst@tempc % start angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempc } + { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry + \tx@UserCoor exch \pst@tempc tan mul exch atan + \pst@tempc 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + PtoC moveto + 0 0 lineto + 1 \pst@tempd % end angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempd } + { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan + \pst@tempd 180 div .5 add floor 180 mul sub } ifelse + \fi + PtoC lineto 0 0 lineto + closepath + % \ifcase\psarc@type arc \or arcn \fi + CLW 3 div \pst@number\psunit div SLW + [ 1 1 \tx@UserCoor 2 mul ] 0 setdash + stroke + grestore + \fi + }% + \showpointsfalse + \end@OpenObj + \fi +} +\def\psellipticarc@definearg{% +% \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + \pst@tempa /yOrig ED /xOrig ED % Origin + \pst@tempb % radii. Now adjust: + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul dup 3 1 roll + sub 3 1 roll sub exch + \fi + /ry ED /rx ED % a b + /angleA + /d { \if@psarcn sub \else add \fi } def +% \pst@tempc +% the angle in the parameter equation is not proportional to the real angle! +% phi=atan(b*tan(angle)/a)+floor(angle/180+0.5)*180 + \pst@tempc + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempc } + { rx ry \tx@UserCoor exch \pst@tempc tan mul exch atan + \pst@tempc 180 div .5 add floor 180 mul sub } ifelse + \fi + \psk@arcsepA 2 div + ArcAdjust + def + /angleB + /d { \if@psarcn add \else sub \fi } def +% \pst@tempd + \pst@tempd + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempd } + { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan + \pst@tempd 180 div .5 add floor 180 mul sub } ifelse + \fi + \psk@arcsepB 2 div ArcAdjust def +% \ifshowpoints\psellipticarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + angleA cos rx mul xOrig add + angleA sin ry mul yOrig add + moveto + \fi% + \fi% +} +\def\psellipticarc@draw{% + 0 0 1 + angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } + { \if@psarcn sub \else add \fi } + EllipticArcArrow + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } + { \if@psarcn add \else sub \fi } + EllipticArcArrow + \fi + /mtrx CM def + xOrig yOrig T + \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + rx ry scale + \pst@ifcustom\else + 0 0 moveto + exch dup dup % end start start start + cos exch sin moveto % end start + exch % start end + \fi +%% \if@star 0 0 moveto \fi % for filling + \if@psarcn arcn \else arc \fi +%% \if@star 0 0 moveto \fi + mtrx setmatrix% +} +\def\psellipticarc@showpoints{% + gsave + /mtrx CM def + xOrig yOrig T + rx ry scale + 0 0 moveto + 0 0 1 + \pst@tempc % start angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempc } + { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry + \tx@UserCoor exch \pst@tempc tan mul exch atan + \pst@tempc 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + \pst@tempd % end angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempd } + { rx abs ry abs sub cvi 0 eq { \pst@tempd } { rx ry + \tx@UserCoor exch \pst@tempd tan mul exch atan + \pst@tempd 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + \ifcase\psarc@type arc \or arcn \fi + closepath + mtrx setmatrix + CLW 2 div SLW + [ \psk@dash\space ] 0 setdash + stroke + grestore % +} +\def\pscircle{\def\pst@par{}\pst@object{pscircle}} +\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}} +\def\pscircle@do(#1)#2{% + \if@star{\use@par\qdisk(#1){#2}}% qdisk does not allow + \else% to use opacity option + \addbefore@par{dimen=middle}% + \begin@ClosedObj + \pst@@getcoor{#1}% + \pssetlength\pst@dimc{#2}% + \def\pst@linetype{4}% + \addto@pscode{ + \pst@coor 2 copy moveto + \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi + \psk@dimen CLW mul round % prevent rounding errors + sub + dup 0 rmoveto + 0 360 arc + \ifPst@variableLW \pst@flattenpath \fi + closepath + }% + \showpointsfalse + \end@ClosedObj + \fi + \ignorespaces} +% +\def\pscircleOA{\def\pst@par{}\pst@object{pscircleOA}}% hv 2008-04-14 +\def\pscircleOA@i(#1)(#2){% + \addbefore@par{dimen=middle}% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempA + \pst@@getcoor{#2}% + \def\pst@linetype{4}% + \addto@pscode{ + \pst@tempA % x0 y0 + 2 copy % xO yO xO yO + \pst@coor % xO yO xO yO xA yA + Pyth2 % xO yO radius + \psk@dimen CLW mul sub + \if@star \tx@SD \else + 0 360 arc + closepath + \fi }% + \showpointsfalse + \end@ClosedObj + \ignorespaces} +% +\def\qdisk(#1)#2{% + \def\pst@par{}% + \begin@SpecialObj + \pst@@getcoor{#1}% + \pssetlength\pst@dimg{#2}% + \addto@pscode{ + \pst@coor + \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimg \fi +% \pst@number\pst@dimg + \tx@SD }% + \end@SpecialObj} +% +\define@key[psset]{pstricks}{radius}[0.25cm]{\pst@@getlength{#1}\psk@radius} +\psset[pstricks]{radius=.25cm} +% +\def\psCircle{\pst@object{psCircle}}% same as \pscircle, but uses \psk@radius +\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}} +\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}} +% +\def\psRing{\def\pst@par{}\pst@object{psRing}}%% hv 20130405 +\def\psRing@i{\@ifnextchar({\psRing@ii}{\psRing@ii(0,0)}} +\def\psRing@ii(#1){% + \pst@@getcoor{#1}% + \@ifnextchar[{\psRing@iii}{\psRing@iii[0,360]}} +\def\psRing@iii[#1,#2]#3#4{% origin, inner radius, outer radius + \begin@ClosedObj + \pssetlength\pst@dimc{#3}% + \edef\pst@tempA{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi}% + \pssetlength\pst@dimd{#4}% + \edef\pst@tempB{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimd \fi}% + \pst@getangle{#1}\pst@tempa + \pst@getangle{#2}\pst@tempb + \def\pst@linetype{4}% + \addto@pscode{ + \pst@coor translate +% \pst@number\pst@dimc \psk@dimen CLW mul sub /InnerRadius ED +% \pst@number\pst@dimd \psk@dimen CLW mul sub /OuterRadius ED + \pst@tempA\space \psk@dimen CLW mul sub /InnerRadius ED + \pst@tempB\space \psk@dimen CLW mul sub /OuterRadius ED + InnerRadius 0 moveto newpath + 0 0 InnerRadius \pst@tempa\space \pst@tempb\space arc + OuterRadius \pst@tempb\space PtoC + \pst@tempb\space \pst@tempa\space sub abs 360 eq { moveto }{ lineto } ifelse % whole circle or not?? + 0 0 OuterRadius \pst@tempb\space \pst@tempa\space arcn + closepath + }% + \showpointsfalse + \end@ClosedObj + \ignorespaces} +% +\def\pswedge{\def\pst@par{}\pst@object{pswedge}} +\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}} +\def\pswedge@ii(#1)#2#3#4{% + \begin@ClosedObj + \pssetlength\pst@dimc{#2}% + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \pst@@getcoor{#1}% + \def\pst@linetype{1}% + \addto@pscode{ + \ifx\psk@rot\@empty 0 \else \psk@rot \fi rotate + \pst@coor + 2 copy + moveto + \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi + \psk@dimen CLW mul sub % Adjusted radius + \pst@tempa \pst@tempb + arc + closepath}% + \showpointsfalse + \end@ClosedObj +} +\def\tx@ellipse#1{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi #1 Ellipse } +\def\tx@Ellipse{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi Ellipse } +% +\def\psellipse{\def\pst@par{}\pst@object{psellipse}} +\def\psellipse@i(#1){\@ifnextchar({\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}} +\def\psellipse@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \addto@pscode{ + 0 360 + \pst@coor + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul + dup 4 -1 roll sub neg 3 1 roll sub + \fi + \pst@tempa + \tx@ellipse{true} + \ifPst@variableLW \pst@flattenpath \fi + closepath + }% + \def\pst@linetype{2}% + \end@ClosedObj% +} +\def\psellipseAB{\def\pst@par{}\pst@object{psellipseAB}} +\def\psellipseAB@i(#1)(#2)#3{% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@getcoor{#2}\pst@tempb + \addto@pscode{ + 0 360 + #3 \pst@number\psxunit mul + \pst@tempa /yA ED /xA ED + \pst@tempb /yB ED /xB ED + xA xB sub dup mul + yA yB sub dup mul add sqrt 2 div + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul + dup 4 -1 roll sub neg 3 1 roll sub + \fi + xA xB add 2 div yA yB add 2 div + translate 0 0 + xB xA sub yA yB sub atan + Ellipse % on stack is rotate coordinates + \ifPst@variableLW \pst@flattenpath \fi + closepath + }% + \def\pst@linetype{2}% + \end@ClosedObj +} +\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}} +\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii} +\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}} +\long\def\multips@iii(#1)(#2)#3#4{% + \begingroup +%----------------- hv 1.10 ------------------ + \pst@killglue +%----------------- hv 1.10 ------------------ + \use@par + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \pst@cnta=#3\relax + \init@pscode + \addto@pscode{% + \pst@tempa T \the\pst@cnta\space \pslbrace + gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}% + \hbox to\z@{% + \def\init@pscode{% + \addto@pscode{% + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor}}% + \def\use@pscode{\addto@pscode{grestore}}% + \def\psclip##1{\pst@misplaced\psclip}% + \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% + #4% + }% + \addto@pscode{grestore \pst@coor T \psrbrace repeat}% + \leavevmode + \use@pscode + \endgroup + \ignorespaces} +\def\psscalebox#1{\pst@makebox{\ps@scalebox{#1}}} +\def\ps@scalebox#1{% + \begingroup% + \pst@getscale{#1}\pst@tempa% + \let\pst@tempc\pst@tempg% + \let\pst@tempd\pst@temph% + \ps@@scalebox% + \endgroup} +\def\ps@@scalebox{% + \leavevmode% + \hbox{% + \ifdim\pst@tempd\p@<\z@% + \pst@dimg=\pst@tempd\ht\pst@hbox% + \pst@dimh=\pst@tempd\dp\pst@hbox% + \dp\pst@hbox=-\pst@dimg% + \ht\pst@hbox=-\pst@dimh% + \else% + \ht\pst@hbox=\pst@tempd\ht\pst@hbox% + \dp\pst@hbox=\pst@tempd\dp\pst@hbox% + \fi% + \pst@dima=\pst@tempc\wd\pst@hbox% + \ifdim\pst@dima<\z@\kern-\pst@dima\fi% + \pst@Verb{CP CP translate \pst@tempa \tx@NET}% + \hbox to \z@{\box\pst@hbox\hss}% + \pst@Verb{ + CP CP translate + 1 \pst@tempc div 1 \pst@tempd div scale + \tx@NET}% + \ifdim\pst@dima>\z@\kern\pst@dima\fi% + }% +} +\pslongbox{Scalebox}{\psscalebox} +% +\def\psscaleboxto(#1,#2){\pst@makebox{\ps@scaleboxto(#1,#2)}} +\def\ps@scaleboxto(#1,#2){% + \begingroup + \pssetlength\pst@dima{#1}% + \pssetlength\pst@dimb{#2}% + \ifdim\pst@dima=\z@\else + \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc + \edef\pst@tempc{\pst@tempc\space}% + \fi + \ifdim\pst@dimb=\z@ + \ifdim\pst@dima=\z@ + \@pstrickserr{% + \string\psscaleboxto\space dimensions cannot both be zero}\@ehpa + \def\pst@tempa{}% + \def\pst@tempc{1 }% + \def\pst@tempd{1 }% + \else + \let\pst@tempd\pst@tempc + \fi + \else + \pst@dimc=\ht\pst@hbox + \advance\pst@dimc\dp\pst@hbox + \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd + \edef\pst@tempd{\pst@tempd\space}% + \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi + \fi + \edef\pst@tempa{\pst@tempc \pst@tempd scale }% + \ps@@scalebox + \endgroup} +\pslongbox{Scaleboxto}{\psscaleboxto} +% +\def\tx@Rot{Rot } +\def\psrotateleft{\pst@makebox{\ps@rotateleft\pst@hbox}} +\def\ps@rotateleft#1{% +\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% +\pst@Verb{90 \tx@Rot} +\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% +\pst@Verb{-90 \tx@Rot}}}} +\def\psrotateright{\pst@makebox{\ps@rotateright\pst@hbox}} +\def\ps@rotateright#1{% +% ----------- hv begin 2004-05-07 ----------- patch 15 +% \hbox{% + \leavevmode\hbox{% +% ----------- hv end 2004-05-07 ----------- patch 15 + \hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% + \pst@Verb{-90 \tx@Rot} + \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% + \pst@Verb{90 \tx@Rot}}}} +\def\psrotatedown{\pst@makebox{\ps@rotatedown\pst@hbox}} +\def\ps@rotatedown#1{% +\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% +\pst@Verb{180 \tx@Rot}% +\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% +\pst@Verb{-180 \tx@Rot}}}} +\pslongbox{Rotateleft}{\psrotateleft} +\pslongbox{Rotateright}{\psrotateright} +\pslongbox{Rotatedown}{\psrotatedown} +% ----------- hv begin 2004-09-23 ----------- 1.11 +% compatibility stuff +\let\rotateleft\psrotateleft +\let\rotateright\psrotateright +\let\rotatedown\psrotatedown +% ----------- hv end 2005-09-23 ----------- 1.11 +\def\pst@starbox{% +\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}} +\def\pst@@makesmall#1{% +\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}} +\def\pst@@@makesmall#1{% +\pst@dimh=\psk@xref\wd#1% +\ifx\psk@yref\relax +\pst@dimg=\dp#1% +\else +\pst@dimg=\psk@yref\ht#1% +\advance\pst@dimg\psk@yref\dp#1% +\fi +\setbox#1=\hbox to\z@{% +\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}} +% +\define@key[psset]{pstricks}{ref}[c]{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil} +\def\psset@@ref#1#2,#3,#4\@nil{% + \def\psk@xref{.5}% + \def\psk@yref{.5}% + \let\pst@makesmall\pst@@@makesmall + \ifx\@empty#3\@empty + \@nameuse{getref@#1}% + \@nameuse{getref@#2}% + \else + \pst@checknum{#1#2}\psk@xref + \pst@checknum{#3}\psk@yref + \fi} +% +\def\getref@c{\let\pst@makesmall\pst@@makesmall} +\def\getref@t{\def\psk@yref{1}} +\def\getref@b{\def\psk@yref{0}} +\def\getref@B{\let\psk@yref\relax} +\def\getref@l{\def\psk@xref{0}} +\def\getref@r{\def\psk@xref{1}} +\psset[pstricks]{ref=c} +% +\def\pst@rotlist{ mark RAngle /ps@a ED cleartomark ps@a neg } +\def\pst@rottable{% +@0=% +@U=% +@L=90 % +@D=180 % +@R=-90 % +@N=\pst@rotlist +@W=\pst@rotlist 90 add % +@S=\pst@rotlist 180 add % +@E=\pst@rotlist 90 sub } +% +\define@key[psset]{pstricks}{rot}[0]{% + \pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil} +\def\psset@@rot#1\@nil{% + \def\next##1@#1=##2@##3\@nil{% + \ifx##2\relax\pst@getangle{#1}\psk@rot \else\def\psk@rot{##2}\fi% + \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }% (MJS) + }% + \expandafter\next\pst@rottable @#1=\relax @\@nil} +% +\def\psset@@@rot#1#2\@nil{% + \psset@@rot#2\@nil% + \edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\space ps@rot add \fi}% + \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }}% (MJS) +% +%\def\psset@@rot#1\@nil{% +%\def\ps@next##1@#1=##2@##3\@nil{% +%\ifx\relax##2\pst@getangle{#1}\psk@rot\else\def\psk@rot{##2}\fi}% +%\expandafter\ps@next\pst@rottable @#1=\relax @\@nil} +% +%\def\psset@@@rot#1#2\@nil{% +%\psset@@rot#2\@nil +%\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}} +\psset[pstricks]{rot=0} +% +\def\tx@RotBegin{RotBegin } +\def\tx@RotEnd{RotEnd } +\def\pst@rotate#1#2{% + \ifx#1\@empty\else + \setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% + \fi% +} +\def\psput@cartesian#1{% +\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}% +} +\def\psput@special#1{% + \hbox{% + \pst@Verb{{ \pst@coor \pstnodescale } \tx@PutCoor \tx@PutBegin }% 20150911 hv + \box#1% + \pst@Verb{ \tx@PutEnd }% + }% +} +\def\tx@PutCoor{PutCoor } +\def\tx@PutBegin{PutBegin } +\def\tx@PutEnd{PutEnd } +\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}} +\def\rput@i[#1]{% + \test@for@options#1=\@nil + \ifnum\the\pst@cntm=\z@ + \addto@par{ref={#1}}% + \else + \expandafter\addto@par\expandafter{#1}% + \fi + \rput@ii +} +\def\test@for@options#1=#2\@nil{% + \if$#2$% #2 is empty -> old syntax + \pst@cntm=\z@ + \else % something like foo=bar + \pst@cntm=\@ne + \fi +} + +\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}} +\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}} +\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}} +\def\rput@v#1{% + \begingroup + \use@par + \if@star\pst@starbox\fi + \pst@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox% + \psput@{#1}\pst@hbox% + \endgroup + \ignorespaces} +% +\def\multirput{% + \def\pst@par{}% + \pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}} +\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii} +\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}} +\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv} +\def\multirput@iv(#1){% + \@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}} +\def\multirput@v(#1,#2)(#3,#4)#5{% + \pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}} +\def\multirput@vi(#1,#2)(#3,#4)#5{% + \pst@killglue% + \global\psLoopIndex=\@ne\relax + \begingroup + \use@par + \if@star\pst@starbox\fi + \pst@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox + \pssetxlength\pst@dima{#1}% + \pssetylength\pst@dimb{#2}% + \pssetxlength\pst@dimc{#3}% + \pssetylength\pst@dimd{#4}% + \pst@cntg=#5\relax + \leavevmode + \loop + \vbox to \z@{% + \vss + \hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}% + \vskip\pst@dimb% + }% + \ifnum\pst@cntg>\psLoopIndex + \advance\pst@dima\pst@dimc + \advance\pst@dimb\pst@dimd + \global\advance\psLoopIndex by \@ne + \repeat + \endgroup + \ignorespaces% +} +% +\newif\if@fixedradius +\def\cput{\def\pst@par{}\pst@object{cput}} +\def\cput@i{\@fixedradiusfalse\cput@ii} +\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}} +\def\cput@iii#1{% + \addto@par{rot={#1}}% + \@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}% +} +\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}} +\def\cput@v#1{% + \begingroup + \use@par + \setbox\pst@hbox=\hbox{% + \psboxsepfalse + \if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi% + }% + \pst@@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox + \psput@{#1}\pst@hbox + \endgroup + \ignorespaces% +} +% +\def\Cput{\def\pst@par{}\pst@object{Cput}} +\def\Cput@i{\@fixedradiustrue\cput@ii} +\newdimen\pslabelsep +\define@key[psset]{pstricks}{labelsep}[5pt]{% + \pssetlength\pslabelsep{#1}% + \ifx\PSTplotLoaded\endinput% Set labels for pst-plot, if laoded + \let\psxlabelsep\pslabelsep% + \let\psylabelsep\pslabelsep% + \fi} +\psset[pstricks]{labelsep=5pt} +% +\define@key[psset]{pstricks}{refangle}[0]{\pst@expandafter\psset@@refangle{#1}\@nil} +\def\psset@@refangle#1\@nil{% + \def\next##1@#1=##2"##3@##4\@nil{% + \ifx\relax##2% + \pst@getangle{#1}\psk@refangle + \def\psk@uputref{}% + \else + \def\psk@refangle{##2 }% + \def\psk@uputref{##3}% + \fi}% + \expandafter\next\pst@refangletable @#1=\relax"@\@nil% + \pst@Verb{ gsave STV CP T /ps@refangle \psk@refangle\space def grestore }%ADDED (MJS) +} +% +\def\pst@refangletable{% +@r=0"20% +@u=90"02% +@l=180"10% +@d=-90"01% +@ur=45"22% +@ul=135"12% +@dr=-135"21% +@dl=-45"11} +\psset[pstricks]{refangle=0} + +% DG/SR modification begin - Mar. 24, 1999 - Patch 10 +%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}} +\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} +% DG/SR modification end +\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii} +% +\def\uput@ii[#1]{% + \addto@par{refangle={#1}}% + \@ifnextchar({\uput@iv}{\uput@iii}} +% +\def\uput@iii#1{% + \addto@par{rot={#1}}% + \@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}} +% +\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}} +% +\def\uput@v#1{% + \begingroup + \use@par + \if@star\pst@starbox\fi + \pstCheckCoorType{#1}% needed for \uput@vii + \uput@vi + \psput@{#1}\pst@hbox + \endgroup + \ignorespaces} +% +\def\uput@vi{% + \ifx\psk@uputref\@empty\uput@vii\tx@UUput{}% + \else + \ifx\psk@rot\@empty\expandafter\uput@viii\psk@uputref + \else\uput@vii\tx@UUput{}\fi + \fi} +% +\def\uput@vii#1#2{% + \edef\pst@coor{% + \ifPst@SpecialLength\pst@SpecialLength\else\pst@number\pslabelsep\fi +% \pst@number\pslabelsep % \ifdim\pslabelsep<\z@ neg \fi + #2% + \pst@number{\wd\pst@hbox}% + \pst@number{\ht\pst@hbox}% + \pst@number{\dp\pst@hbox}% + \ifnum\pst@C@@rType=7 + ps@refangle % CHANGED (MJS) FROM \psk@refangle\space + \ifx\psk@rot\@empty\else ps@rot\space sub \fi + \else + \psk@refangle\space + \ifx\psk@rot\@empty\else \psk@rot\space sub \fi + \fi + \tx@Uput #1}% + %\show\pst@coor + \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}% + \setbox\pst@hbox=\psput@special\pst@hbox + \ifnum\pst@C@@rType=7 + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% CHANGED FROM \psk@rot (MJS) + \else + \ifx\psk@rot\@empty\else\pst@rotate{\psk@rot}\pst@hbox\fi% + \fi} +% +% +\def\uput@viii#1#2{% + \ifnum#1>\z@\relax\ifnum#2>\z@\relax\pslabelsep=.707\pslabelsep\fi\fi + \setbox\pst@hbox=\vbox to\z@{% + \ifnum#2=1\relax\vskip\pslabelsep\else\vss\fi + \hbox to\z@{% + \ifnum#1=2\relax\hskip\pslabelsep \else\hss\fi + \box\pst@hbox% + \ifnum#1=1\relax\hskip\pslabelsep\else\hss\fi}% + \ifnum#2=2\relax\vskip\pslabelsep\else\vss\fi}} +% +\def\tx@Uput{Uput } +\def\tx@UUput{UUput } +% +\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}} +\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii} +\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}} +\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}} +\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}} +\def\Rput@v#1{% + \begingroup + \use@par + \if@star\pst@starbox\fi + \Rput@vi + \pst@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox + \psput@{#1}\pst@hbox + \endgroup + \ignorespaces} +% +\def\Rput@vi{% + \pst@dimg=\dp\pst@hbox + \advance\pst@dimg\pslabelsep + \dp\pst@hbox=\pst@dimg + \pst@dimg=\ht\pst@hbox + \advance\pst@dimg\pslabelsep + \ht\pst@hbox=\pst@dimg + \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}% +% +\def\oldpsput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}} +\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii} +\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}} +\def\oldpsput@iii<#1>{\rput@iii{#1}} +\def\OldPsput{\let\psput\oldpsput} +\def\NewPsput{\let\psput\rput} +% +% ----------- hv 20120219 ------------------- +\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt} +\newpsstyle{gridstyleA}{subgriddiv=5,gridcolor=red!30,subgridcolor=green!20!black!10,gridlabels=0pt} +\newif\ifshowgrid +\newdimen\sh@wgridXunit +\newdimen\sh@wgridYunit + +\define@key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil} +\def\pst@@showgrid#1#2#3\@nil{% hv 20130403 + \def\showgridp@s{0}% + \ifx#1b\showgridtrue\else% bottom + \ifx#1f\showgridfalse\else + \ifx#1t + \ifx#2r \showgridtrue\else% true->bottom + \showgridtrue\def\showgridp@s{1}\fi% top + \fi\fi\fi + \ifnum\showgridp@s>0\relax + \sh@wgridXunit=\psxunit + \sh@wgridYunit=\psyunit + \fi + +} +\psset[pstricks]{showgrid=f} +\define@boolkey[psset]{pstricks}[Pst@]{pgffunctions}[true]{} +\psset[pstricks]{pgffunctions=false} +% +\newdimen\pst@shift +\newif\ifPst@shift@star +\define@key[psset]{pstricks}{shift}[0]{% + \ifx#1* + \global\Pst@shift@startrue + \pst@shift=\p@ + \else + \global\Pst@shift@starfalse + \pssetlength\pst@dimg{#1} + \global\pst@shift\pst@dimg% only the outer pspicture env can have a shift + \fi} +\psset[pstricks]{shift=0} +% +%------------------------------- pspicture ------------------------------ +% +\def\pspicture{\begingroup\pst@ifstar\pst@picture} +\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}} +\def\pst@@picture[#1]{\@ifnextchar({\pst@@picture@i[#1]}{\pst@@picture@i[#1](10,10)}}% +\def\pst@@picture@i[#1]#2(#3,#4){\@ifnextchar(% ignore anything between [] and () + {\pst@@@picture[#1](#3,#4)}% + {\pst@@@picture[#1](0,0)(#3,#4)}} +% +\def\pst@@@picture[#1](#2,#3)(#4,#5){% + \pssetxlength\pst@dima{#2}% + \pssetylength\pst@dimb{#3}% + \pssetxlength\pst@dimc{#4}% + \pssetylength\pst@dimd{#5}% + \ifdim\pst@dima>\pst@dimc% + \pst@dimg=\pst@dima% + \pst@dima=\pst@dimc% + \pst@dimc=\pst@dimg% + \fi% + \ifdim\pst@dimb>\pst@dimd% + \pst@dimg=\pst@dimb% + \pst@dimb=\pst@dimd% + \pst@dimd=\pst@dimg% + \fi% + \setbox\pst@hbox=\hbox\bgroup + \begingroup\KillGlue + \@ifundefined{@latexerr}{}{\let\unitlength\psunit}% + \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}% +% ----------- 1.10/12 beg hv ------------------- + \psset{showgrid=false}% % for nested pspicture environemnets + \def\pst@tempA{#1}% + \ifx\pst@tempA\@empty\else\psset{#1}\fi% sets the shift and grid option + \ifx\pst@bgcolor\@empty\else\psframe*[linecolor=\pst@bgcolor](#2,#3)(#4,#5)\fi + \ifshowgrid\ifnum\showgridp@s=0\psgrid[style=gridstyle]\fi\fi +% ----------- 1.10/12 end hv ------------------- + \ignorespaces% % 2008-12-07 + \ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17 +} +\def\pic@coor{(0,0)(0,0)(10,10)} +\def\endpspicture{% + \ifshowgrid\ifnum\showgridp@s>0 + \psgrid[xunit=\sh@wgridXunit,yunit=\sh@wgridYunit,style=gridstyle]\fi\fi + \pst@killglue + \endgroup + \egroup + \ht\pst@hbox=\pst@dimd + \dp\pst@hbox=-\pst@dimb + \setbox\pst@hbox=\hbox{% + \kern-\pst@dima + \ifPst@shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=* + \advance\pst@dimd-\pst@dimb + \pst@dimd=0.5\pst@dimd + \else\pst@dimd-\pst@shift\fi + \advance\pst@dimd\pst@dimb + \lower\pst@dimd\box\pst@hbox + \kern\pst@dimc}% + \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi + \leavevmode + \ifPst@draft + \expandafter\ifx\csname @latexerr\endcsname\relax + \box\pst@hbox + \else% do we have LaTeX? + \fboxsep=0pt + \fbox{\rule[-\pst@shift]{0pt}{\ht\pst@hbox}\rule{\wd\pst@hbox}{0pt}}% + \fi + \else + \box\pst@hbox + \fi + \endgroup + \psset[pstricks]{shift=0}% reset value +} +% +\@namedef{pspicture*}{\pspicture*} +\@namedef{endpspicture*}{\endpspicture} +% +\ifx\pstcustomize\relax \input pstricks.con \fi +\catcode`\@=\PstAtCode\relax +% +\endinput +%% +%% END: pstricks.tex diff --git a/graphics/pstricks/base/generic/pstricks97.tex b/graphics/pstricks/base/generic/pstricks97.tex new file mode 100644 index 0000000000..e4b0a5a2c9 --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks97.tex @@ -0,0 +1,2626 @@ +%% $Id: pstricks97.tex 446 2017-04-19 11:40:55Z herbert $ +%% BEGIN: pstricks.tex +%% +%% PostScript macros for Generic TeX: main input file for PSTricks 97. +%% See the PSTricks User's Guide for description. +%% This uses the header file `pstricks.pro'. +%% +\def\fileversion{97 patch 14} +\def\filedate{1999/12/23} +%% +%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +%% +\csname PSTricksLoaded\endcsname +\let\PSTricksLoaded\endinput +\edef\PstAtCode{\the\catcode`\@} +\catcode`\@=11\relax +\expandafter\ifx\csname @latexerr\endcsname\relax +\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname +#1\endcsname\relax#2\else#3\fi} +\def\@namedef#1{\expandafter\def\csname #1\endcsname} +\def\@nameuse#1{\csname #1\endcsname} +\def\@eha{% +Your command was ignored.^^J +Type \space I <command> <return> \space to replace +it with another command,^^J +or \space <return> \space to continue without it.} +\def\@spaces{\space\space\space\space} +\def\typeout#1{\immediate\write\@unused{#1}} +\alloc@7\write\chardef\sixt@@n\@unused +\def\@empty{} +\def\@gobble#1{} +\def\@nnil{\@nil} +\def\@ifnextchar#1#2#3{% +\let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch} +\def\@ifnch{% +\ifx\@tempc\@sptoken +\let\@tempd\@xifnch +\else +\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi +\fi +\@tempd} +\begingroup +\def\:{\global\let\@sptoken= } \: +\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch} +\endgroup +\fi +\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)} +\def\@pstrickserr#1#2{% +\begingroup +\newlinechar`\^^J +\edef\pst@tempc{#2}% +\expandafter\errhelp\expandafter{\pst@tempc}% +\typeout{% +PSTricks error. \space See User's Guide for further information.^^J +\@spaces\@spaces\@spaces\@spaces +Type \space H <return> \space for immediate help.}% +\errmessage{#1}% +\endgroup} +\def\@ehpa{% +Your command was ignored. Default value substituted.^^J +Type \space <return> \space to procede.} +\def\@ehpb{% +Your command was ignored. Will recover best I can.^^J +Type \space <return> \space to procede.} +\def\@ehpc{% +You better fix this before proceding.^^J +See the PSTricks User's Guide or ask your system administrator for help.^^J +Type \space X <return> \space to quit.} +\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb} +\newdimen\pst@dima +\newdimen\pst@dimb +\newdimen\pst@dimc +\newdimen\pst@dimd +\newdimen\pst@dimg +\newdimen\pst@dimh +\newbox\pst@hbox +\newbox\pst@boxg +\newcount\pst@cnta +\newcount\pst@cntb +\newcount\pst@cntc +\newcount\pst@cntd +\newcount\pst@cntg +\newcount\pst@cnth +\newif\if@pst +\newtoks\pst@toks +\newif\if@star +\def\pst@ifstar#1{% +\@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}} +\def\pst@expandafter#1#2{% +\def\next{#1}% +\edef\@tempa{#2}% +\ifx\@tempa\@empty +\@pstrickserr{Unexpected empty argument!}\@ehpb +\def\@tempa{\@empty}% +\fi +\expandafter\next\@tempa} +\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}} +\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1} +{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}} +\def\pst@pyth#1#2#3{% +\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi} +\def\pst@@pyth#1#2#3{% +\ifdim4#1>9#2% +#3=#1\advance#3 .2122#2% +\else +#3=.8384#1\advance#3 .5758#2% +\fi} +\def\pst@divide#1#2#3{% +\pst@@divide{#1}{#2}% +\pst@dimtonum\pst@dimg{#3}} +\def\pst@@divide#1#2{% +\pst@dimg=#1\relax +\pst@dimh=#2\relax +\pst@cntg=\pst@dimh +\pst@cnth=67108863 +\pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide +\divide\pst@dimg\pst@cntg} +\def\pst@@@divide{% +\ifnum +\ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth +\multiply\pst@dimg\sixt@@n +\else +\divide\pst@cntg\sixt@@n +\fi} +\def\pst@configerr#1{% +\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} +% % \begin{macrocode} +\def\pstVerb#1{\pst@configerr\pstVerb} +\def\pstverb#1{\pst@configerr\pstverb} +\def\pstverbscale{\pst@configerr\pstverbscale} +\def\pstrotate{\pst@configerr\pstrotate} +\def\pstheader#1{\pst@configerr\pstheader} +\def\pstdriver{\pst@configerr\pstdriver} +\@ifundefined{pstcustomize}% +{\def\pstcustomize{\endinput\let\pstcustomize\relax}}{} +\input pstricks.con +\newif\ifPSTricks +\PSTrickstrue +\def\PSTricksOff{% +\def\pstheader##1{}% +\def\pstverb##1{}% +\def\pstVerb##1{}% +\PSTricksfalse} +\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{} +\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{} +\pstheader{pstricks97.pro} +\def\pst@dict{tx@Dict begin } +\def\pst@theheaders{pstricks.pro} +\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}} +\def\tx@Atan{Atan } +\def\tx@Div{Div } +\def\tx@NET{NET } +\def\tx@Pyth{Pyth } +\def\tx@PtoC{PtoC } +\def\tx@PathLength@{PathLength@ } +\def\tx@PathLength{PathLength } +\pst@dimg=\pstunit\relax +\ifdim\pst@dimg=1bp +\def\pst@stp{.996264 dup scale} +\else +\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale} +\fi +\def\tx@STP{STP } +\def\tx@STV{STV } +\def\pst@number#1{\pst@@dimtonum#1\space} +\def\pst@checknum#1#2{% +\edef\next{#1}% +\ifx\next\@empty +\let\pst@num\z@ +\else +\expandafter\pst@@checknum\next..\@nil +\fi +\ifnum\pst@num=\z@ +\@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa +\def#2{0 }% +\else +\edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% +\expandafter\@gobble\the\pst@cnth\space}% +\fi} +\def\pst@@checknum{% +\@ifnextchar-% +{\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}% +{\let\pst@num\@ne\pst@@@checknum}} +\def\pst@@@checknum#1.#2.#3\@nil{% +\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil +\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil} +\def\pst@@@@checknum#1\relax\@nil{% +\ifx\@nil#1\@nil\else\let\pst@num\z@\fi} +\def\pst@getnumii#1 #2 #3\@nil{% +\pst@checknum{#1}\pst@tempg +\pst@checknum{#2}\pst@temph} +\def\pst@getnumiii#1 #2 #3 #4\@nil{% +\pst@checknum{#1}\pst@tempg +\pst@checknum{#2}\pst@temph +\pst@checknum{#3}\pst@tempi} +\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{% +\pst@checknum{#1}\pst@tempg +\pst@checknum{#2}\pst@temph +\pst@checknum{#3}\pst@tempi +\pst@checknum{#4}\pst@tempj} +\def\pst@getdimnum#1 #2 #3\@nil{% +\pssetlength\pst@dimg{#1}% +\pst@checknum{#2}\pst@tempg} +% DG/SR modification begin - Jan. 7, 1998 - Patch 9 +% Missing from pstricks.bug 0.93 +%\def\pst@getscale#1#2{% +%\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil +%\@psttrue +%\ifdim\pst@tempg\p@=\z@ +%\@pstrickserr{Bad scaling argument `#1'}\@ehpa +%\def\pst@tempg{1 }% +%\@pstfalse +%\fi +%\ifdim\pst@temph\p@=\z@ +%\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi +%\def\pst@temph{1 }% +%\fi +%\edef#2{\pst@tempg\space \pst@temph\space scale }% +%\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@ +%\def#2{}% +%\fi\fi} +\def\pst@getscale#1#2{% +\edef\pst@tempg{#1}% +\ifx\pst@tempg\@none +\def#2{}% +\else +\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil +\ifdim\pst@tempg\p@=\z@ +\@pstrickserr{Bad scaling argument `#1'}\@ehpa +\def#2{}% +\else +\ifdim\pst@temph\p@=\z@ +\@pstrickserr{Bad scaling argument `#1'}\@ehpa +\def#2{}% +\else +\edef#2{\pst@tempg\space \pst@temph\space scale }% +\fi +\fi +\fi} +% DG/SR modification end +\def\pst@getint#1#2{% +\pst@cntg=#1\relax +\edef#2{\the\pst@cntg\space}} +\begingroup +\catcode`\{=12 +\catcode`\}=12 +\catcode`\[=1 +\catcode`\]=2 +\gdef\pslbrace[{ ] +\gdef\psrbrace[} ] +\endgroup +\def\@newcolor#1#2{% +\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}% +\expandafter\edef\csname color@#1\endcsname{#2}% +\ignorespaces} +\def\pst@color#1{% +\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor} +\def\pst@endcolor{\pstVerb{\pst@currentcolor}} +\def\pst@currentcolor{0 setgray} +\def\altcolormode{% +\def\pst@color##1{% +\pstVerb{gsave ##1}\aftergroup\pst@endcolor}% +\def\pst@endcolor{\pstVerb{\pst@grestore}}} +\def\pst@grestore{% +currentpoint +matrix currentmatrix +currentfont +grestore +setfont +setmatrix +moveto} +\def\pst@usecolor#1{\csname color@#1\endcsname\space} +\def\newgray#1#2{% +\pst@checknum{#2}\pst@tempg +\@newcolor{#1}{\pst@tempg setgray}} +\def\newrgbcolor#1#2{% +\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil +\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}} +\def\newhsbcolor#1#2{% +\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil +\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}} +\def\newcmykcolor#1#2{% +\pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil +\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}} +\newgray{black}{0} +\newgray{darkgray}{.25} +\newgray{gray}{.5} +\newgray{lightgray}{.75} +\newgray{white}{1} +\newrgbcolor{red}{1 0 0} +\newrgbcolor{green}{0 1 0} +\newrgbcolor{blue}{0 0 1} +\newrgbcolor{yellow}{1 1 0} +\newrgbcolor{cyan}{0 1 1} +\newrgbcolor{magenta}{1 0 1} +\def\psset#1{\@psset#1,\@nil\ignorespaces} +\def\@psset#1,{% +\@@psset#1==\@nil +\@ifnextchar\@nil{\@gobble}{\@psset}} +\def\@@psset#1=#2=#3\@nil{% +\@ifundefined{psset@#1}% +{\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}% +{\@nameuse{psset@#1}{#2}}}% +\def\psset@style#1{% +\@ifundefined{pscs@#1}% +{\@pstrickserr{Custom style `#1' undefined}\@ehpa}% +{\@nameuse{pscs@#1}}} +\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}} +\def\@none{none} +\def\pst@getcolor#1#2{% +\@ifundefined{color@#1}% +{\@pstrickserr{Color `#1' not defined}\@eha}% +{\edef#2{#1}}} +\newdimen\psunit \psunit 1cm +\newdimen\psxunit \psxunit 1cm +\newdimen\psyunit \psyunit 1cm +\let\psrunit\psunit +\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces} +\def\pssetlength#1#2{% +\let\@psunit\psunit +\afterassignment\pstunit@off +#1 #2\@psunit} +\def\psaddtolength#1#2{% +\let\@psunit\psunit +\afterassignment\pstunit@off +\advance#1 #2\@psunit} +\def\pssetxlength#1#2{% +\let\@psunit\psxunit +\afterassignment\pstunit@off +#1 #2\@psunit} +\def\pssetylength#1#2{% +\let\@psunit\psyunit +\afterassignment\pstunit@off +#1 #2\@psunit} +\def\psset@unit#1{% +\pssetlength\psunit{#1}% +\psxunit=\psunit +\psyunit=\psunit} +\def\psset@runit#1{\pssetlength\psrunit{#1}} +\def\psset@xunit#1{\pssetxlength\psxunit{#1}} +\def\psset@yunit#1{\pssetylength\psyunit{#1}} +\def\pst@getlength#1#2{% +\pssetlength\pst@dimg{#1}% +\edef#2{\pst@number\pst@dimg}} +\def\pst@@getlength#1#2{% +\pssetlength\pst@dimg{#1}% +\edef#2{\number\pst@dimg sp}} +\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor} +\def\pst@coor{0 0 } +\def\pst@getcoors#1#2{% +\def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}% +\def\pst@coors{}% +\pst@@getcoors} +\def\pst@@getcoors(#1){% +\pst@@getcoor{#1}% +\edef\pst@coors{\pst@coor\pst@coors}% +\@ifnextchar({\pst@@getcoors}{\pst@aftercoors}} +\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle} +\def\pst@angle{0 } +\def\cartesian@coor#1,#2,#3\@nil{% +\pssetxlength\pst@dimg{#1}% +\pssetylength\pst@dimh{#2}% +\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}} +\def\NormalCoor{% +\def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}% +\def\pst@@getangle##1{% +\pst@checknum{##1}\pst@angle +\edef\pst@angle{\pst@angle \pst@angleunit}}% +\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}} +\NormalCoor +\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}} +\def\@degrees[#1]{% +\pst@checknum{#1}\pst@tempg +\edef\pst@angleunit{360 \pst@tempg div mul }% +\ignorespaces} +\def\radians{\def\pst@angleunit{57.2956 mul }} +\def\pst@angleunit{} +\def\SpecialCoor{% +\def\pst@@getcoor##1{% +\begingroup +\pst@activecoor +\xdef\pst@tempg{##1}% +\endgroup +\expandafter\special@coor\pst@tempg||\@nil}% +\def\pst@@getangle##1{% +\begingroup +\pst@activecoor +\xdef\pst@tempg{##1}% +\endgroup +\expandafter\special@angle\pst@tempg\@empty)\@nil}% +\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}} +\begingroup +\catcode`\|=13 +\catcode`\;=13 +\catcode`\!=13 +\gdef\pst@activecoor{% +\def|{\string|}% +\def;{\string;}% +\def!{\string!}} +\endgroup +\def\special@coor#1|#2|#3\@nil{% +\ifx#3|\relax +\mixed@coor{#1}{#2}% +\else +\special@@coor#1;;\@nil +\fi} +\def\special@@coor#1{% +\ifcat#1a\relax +\def\next{\node@coor#1}% +\else +\ifx#1[\relax +\def\next{\Node@coor[}% +\else +\ifx#1!\relax +\def\next{\raw@coor}% +\else +\def\next{\special@@@coor#1}% +\fi +\fi +\fi +\next} +\def\special@@@coor#1;#2;#3\@nil{% +\ifx#3;\relax +\polar@coor{#1}{#2}% +\else +\cartesian@coor#1,\relax,\@nil +\fi} +\def\mixed@coor#1#2{% +\begingroup +% DG/SR modification begin - Oct. 27, 1997 - Patch 6 +%\specialcoor@ii#1;;\@nil +%\let\pst@tempa\pst@coor +%\specialcoor@ii#2;;\@nil +\special@@coor#1;;\@nil +\let\pst@tempa\pst@coor +\special@@coor#2;;\@nil +% DG/SR modification end +\xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% +\endgroup +\let\pst@coor\pst@tempg} +\def\polar@coor#1#2{% +\pssetlength\pst@dimg{#1}% +\pst@@getangle{#2}% +\edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}} +\def\raw@coor#1;#2\@nil{% +\edef\pst@coor{% +#1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }} +\def\node@coor#1\@nil{% +\@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps +\def\pst@coor{0 0 }} +\def\Node@coor{\node@coor} +\def\special@angle#1#2)#3\@nil{% +\ifx!#1\relax +\edef\pst@angle{#2 \pst@angleunit}% +\else +\ifx(#1\relax +\pst@@getcoor{#2}% +\edef\pst@angle{\pst@coor exch \tx@Atan}% +\else +\pst@checknum{#1#2}\pst@angle +\edef\pst@angle{\pst@angle \pst@angleunit}% +\fi +\fi} +\def\Cartesian{% +\def\cartesian@coor##1,##2,##3\@nil{% +\pssetxlength\pst@dimg{##1}% +\pssetylength\pst@dimh{##2}% +\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}% +\@ifnextchar({\Cartesian@}{}} +\def\Cartesian@(#1,#2){% +\pssetxlength\psxunit{#1}% +\pssetylength\psyunit{#2}% +\ignorespaces} +\def\Polar{% +\def\psput@cartesian{\psput@special}% +\def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}% +\def\psset@origin#1{% +\pst@@getcoor{#1}% +\edef\psk@origin{\pst@coor \tx@NET }} +\def\psk@origin{} +\newif\ifswapaxes +\def\psset@swapaxes#1{% +\@nameuse{@pst#1}% +\if@pst +\def\psk@swapaxes{-90 rotate -1 1 scale }% +\else +\def\psk@swapaxes{}% +\fi} +\psset@swapaxes{false} +\newif\ifshowpoints +\def\psset@showpoints#1{\@nameuse{showpoints#1}} +\psset@showpoints{false} +\let\pst@setrepeatarrowsflag\relax +\def\psset@border#1{% +\pst@getlength{#1}\psk@border +\pst@setrepeatarrowsflag} +\psset@border{0pt} +\def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor} +\psset@bordercolor{white} +\newif\ifpsdoubleline +\def\psset@doubleline#1{% +\@nameuse{psdoubleline#1}% +\pst@setrepeatarrowsflag} +\psset@doubleline{false} +\def\psset@doublesep#1{\def\psdoublesep{#1}} +\psset@doublesep{1.25\pslinewidth} +\def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor} +\psset@doublecolor{white} +\newif\ifpsshadow +\def\psset@shadow#1{% +\@nameuse{psshadow#1}% +\pst@setrepeatarrowsflag} +\psset@shadow{false} +\def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize} +\psset@shadowsize{3pt} +\def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle} +\psset@shadowangle{-45} +\def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor} +\psset@shadowcolor{darkgray} +\def\pst@repeatarrowsflag{\z@} +\def\pst@setrepeatarrowsflag{% +\edef\pst@repeatarrowsflag{% +\ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else +\ifpsshadow 1\else \z@\fi\fi\fi}} +\def\psls@none{} +\newdimen\pslinewidth +\def\psset@linewidth#1{\pssetlength\pslinewidth{#1}} +\psset@linewidth{.8pt} +\def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor} +\psset@linecolor{black} +\def\psls@solid{0 setlinecap stroke } +\def\pst@missing{% +\z@ +\@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa} +\def\psset@dash#1{% +\pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil +\edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}} +\def\psset@@dash#1 #2 #3\@nil{% +\pssetlength\pst@dimg{#1}% +\pssetlength\pst@dimh{#2}} +\psset@dash{5pt 3pt} +\newif\ifpsdashadjust +\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}} +\psset@dashadjust{true} +\def\psls@dashed{% +\ifpsdashadjust +\psk@dash \pst@linetype\space \tx@DashLine +\else +[ \psk@dash ] 0 setdash stroke +\fi} +\def\tx@DashLine{DashLine } +\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep} +\psset@dotsep{3pt} +\def\psls@dotted{% +\ifpsdashadjust +\psk@dotsep \pst@linetype\space \tx@DotLine +\else +[ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke +\fi} +\def\tx@DotLine{DotLine } +\def\psset@linestyle#1{% +\@ifundefined{psls@#1}% +{\@pstrickserr{Line style `#1' not defined}\@eha}% +{\edef\pslinestyle{#1}}} +\psset@linestyle{solid} +\def\psfs@none{} +\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor} +\psset@fillcolor{white} +\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill}} +\def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth} +\psset@hatchwidth{.8pt} +\def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep} +\psset@hatchsep{4pt} +\def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor} +\psset@hatchcolor{black} +\def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle} +\psset@hatchangle{45} +\def\pst@linefill{% +\psk@hatchangle rotate +\psk@hatchwidth SLW +\pst@usecolor\pshatchcolor +\psk@hatchsep \tx@LineFill} +\def\psfs@vlines{\pst@fill\pst@linefill} +\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines} +\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}} +\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines} +\def\psfs@crosshatch{\psfs@vlines \psfs@hlines} +\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines} +\def\tx@LineFill{LineFill } +\def\psset@fillstyle#1{% +\edef\pst@tempg{#1}\def\pst@temph{none}% +\ifx\pst@tempg\pst@temph +\let\psk@fillstyle\relax +\else +\@ifundefined{psfs@#1}% +{\@pstrickserr{Undefined fill style: `#1'}\@eha}% +{\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}% +\fi} +\def\psset@addfillstyle#1{% +\@ifundefined{psfs@#1}% +{\@pstrickserr{Undefined fill style: `#1'}\@eha}% +{\edef\psk@fillstyle{% +\expandafter\noexpand\psk@fillstyle +\expandafter\noexpand\csname psfs@#1\endcsname}}} +\psset@fillstyle{none} +\def\psset@arrows#1{% +\begingroup +\pst@activearrows +\xdef\pst@tempg{#1}% +\endgroup +\expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil +\if@pst\else +\@pstrickserr{Bad arrows specification: #1}\@ehpa +\fi} +\def\psset@@arrows#1-#2\@empty#3\@nil{% +\@psttrue +\def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% +\expandafter\next\pst@arrowtable,#1-#1,\@nil +\@ifundefined{psas@\pst@tempg}% +{\@pstfalse\def\psk@arrowA{}}% +{\let\psk@arrowA\pst@tempg}% +\@ifundefined{psas@#2}% +{\@pstfalse\def\psk@arrowB{}}% +{\def\psk@arrowB{#2}}} +\def\psk@arrowA{} +\def\psk@arrowB{} +\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]} +\begingroup +\catcode`\<=13 +\catcode`\>=13 +\catcode`\|=13 +\gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} +\endgroup +\def\tx@BeginArrow{BeginArrow } +\def\tx@EndArrow{EndArrow } +\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale} +\psset@arrowscale{1} +\def\psset@arrowsize#1{% +\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil +\edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}} +\psset@arrowsize{1.5pt 2} +\def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength} +\psset@arrowlength{1.4} +\def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}% +\psset@arrowinset{.4} +\def\tx@Arrow{Arrow } +\@namedef{psas@>}{% +false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\@namedef{psas@>>}{% +false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +0 h T +gsave +newpath +false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +CP +grestore +CP newpath moveto +2 copy +L +stroke +moveto} +\@namedef{psas@<}{% +true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\@namedef{psas@<<}{% +true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +CP newpath moveto 0 a neg L stroke 0 h neg T +false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\def\psset@tbarsize#1{% +\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil +\edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} +\psset@tbarsize{2pt 5} +\def\tx@Tbar{Tbar } +\@namedef{psas@|}{\psk@tbarsize \tx@Tbar} +\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} +\@namedef{psas@>|}{% +\psk@tbarsize \tx@Tbar +0 CLW 2 div T +newpath +false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\@namedef{psas@>|*}{% +0 CLW -2 div T +\psk@tbarsize \tx@Tbar +0 CLW 2 div T +newpath +false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|} +\def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength} +\psset@bracketlength{.15} +\def\tx@Bracket{Bracket } +\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} +\def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength} +\psset@rbracketlength{.15} +\def\tx@RoundBracket{RoundBracket } +\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} +\def\psas@c{1 \psas@@c} +\def\psas@cc{0 CLW 2 div T 1 \psas@@c} +\def\psas@C{2 \psas@@c} +\def\psas@@c{% +setlinecap +0 0 moveto +0 CLW 2 div L +stroke +0 0 moveto} +\def\psas@{} +\psset@arrows{-} +\def\tx@SD{SD } +\def\tx@EndDot{EndDot } +\def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot} +\def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot} +\@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot} +\@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot} +\def\pst@par{} +\def\addto@par#1{% +\ifx\pst@par\@empty +\def\pst@par{#1}% +\else +\expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}% +\fi} +\def\addbefore@par#1{% +\ifx\pst@par\@empty +\def\pst@par{#1}% +\else +\toks@{#1}% +\pst@toks\expandafter{\pst@par}% +\edef\pst@par{\the\toks@,\the\pst@toks}% +\fi} +\def\use@par{% +\ifx\pst@par\@empty\else +\expandafter\@psset\pst@par,\@nil +\def\pst@par{}% +\fi} +\def\pst@object#1{% +\pst@ifstar{% +\@ifnextchar[% +{\pst@@object{#1}}% +{\def\pst@par{}\@nameuse{#1@i}}}} +\def\pst@@object#1[#2]{% +\def\pst@par{#2}% +\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}} +\def\newpsobject#1#2#3{% +\@ifundefined{#2@i}% +{\@pstrickserr{Graphics object `#2' not defined}\@eha}{% +\@namedef{#1}{\pst@object{#1}}% +\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}% +\ignorespaces} +\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} +\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} +\def\begin@ClosedObj{% +\leavevmode +\pst@killglue +\begingroup +\use@par +\solid@star +\ifpsdoubleline \pst@setdoublesep \fi +\init@pscode} +\def\end@ClosedObj{% +\ifpsshadow \pst@closedshadow \fi +\ifdim\psk@border\p@>\z@ \pst@addborder \fi +\psk@fillstyle +\pst@stroke +\ifpsdoubleline \pst@doublestroke \fi +\ifshowpoints +% DG modification begin - Mar. 4, 1995 +%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}% +\pst@OpenShowPoints +% DG modification end +\fi +\use@pscode +\endgroup +\ignorespaces} +\def\begin@OpenObj{% +\begin@ClosedObj +\let\pst@linetype\pst@arrowtype +\pst@addarrowdef} +\def\begin@AltOpenObj{% +\begin@ClosedObj +\def\pst@repeatarrowsflag{\z@}% +\def\pst@linetype{0}} +\def\end@OpenObj{% +\ifpsshadow \pst@openshadow \fi +\ifdim\psk@border\p@>\z@ \pst@addborder \fi +\psk@fillstyle +\pst@stroke +\ifpsdoubleline \pst@doublestroke \fi +\ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi +\ifshowpoints \pst@OpenShowPoints \fi +\use@pscode +\endgroup +\ignorespaces} +\def\begin@SpecialObj{% +\leavevmode +\pst@killglue +\begingroup +\use@par +\init@pscode} +\def\end@SpecialObj{% +\use@pscode +\endgroup +\ignorespaces} +\def\pst@code{}% +\def\init@pscode{% +\addto@pscode{% +\pst@number\pslinewidth SLW +\pst@usecolor\pslinecolor}} +\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}} +\def\use@pscode{% +\pstverb{% +\pst@dict +\tx@STP +\pst@newpath +\psk@origin +\psk@swapaxes +\pst@code +end}% +\gdef\pst@code{}} +\def\pst@newpath{newpath } +\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi} +\def\KillGlue{\let\pst@killglue\pst@@killglue} +\def\DontKillGlue{\let\pst@killglue\relax} +\DontKillGlue +\def\solid@star{% +\if@star +\pslinewidth=\z@ +\psdoublelinefalse +\def\pslinestyle{none}% +\def\psk@fillstyle{\psfs@solid}% +\let\psfillcolor\pslinecolor +\fi} +\def\pst@setdoublesep{% +\pst@getlength\psdoublesep\psdoublesep +\pslinewidth=2\pslinewidth +\advance\pslinewidth\psdoublesep\p@ +\let\pst@setdoublesep\relax} +\def\tx@Shadow{Shadow } +\def\pst@closedshadow{% +\addto@pscode{% +gsave +\psk@shadowsize \psk@shadowangle \tx@PtoC +\tx@Shadow +\pst@usecolor\psshadowcolor +gsave fill grestore +stroke +grestore +gsave +\pst@usecolor\psfillcolor +gsave fill grestore +stroke +grestore}} +\def\pst@openshadow{% +\addto@pscode{% +gsave +\psk@shadowsize \psk@shadowangle \tx@PtoC +\tx@Shadow +\pst@usecolor\psshadowcolor +\ifx\psk@fillstyle\relax\else +gsave fill grestore +\fi +stroke}% +\pst@repeatarrows +\addto@pscode{grestore} +\ifx\psk@fillstyle\relax\else +\addto@pscode{% +gsave +\pst@usecolor\psfillcolor +gsave fill grestore +stroke +grestore} +\fi} +\def\pst@addborder{% +\addto@pscode{% +gsave +\psk@border 2 mul +CLW add SLW +\pst@usecolor\psbordercolor +stroke +grestore}} +\def\pst@stroke{% +\ifx\pslinestyle\@none\else +\addto@pscode{% +gsave +\pst@number\pslinewidth SLW +\pst@usecolor\pslinecolor +\@nameuse{psls@\pslinestyle} +grestore}% +\fi} +\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}% +\def\pst@doublestroke{% +\addto@pscode{% +gsave +\psdoublesep SLW +\pst@usecolor\psdoublecolor +stroke +grestore}} +\def\pst@arrowtype{% +\ifx\psk@arrowB\@empty 0 \else -2 \fi +\ifx\psk@arrowA\@empty 0 \else -1 \fi +add} +\def\pst@addarrowdef{% +\addto@pscode{% +/ArrowA { +\ifx\psk@arrowA\@empty +\pst@oplineto +\else +\pst@arrowdef{A} +moveto +\fi +} def +/ArrowB { +\ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi +} def}} +\def\pst@arrowdef#1{% +\ifnum\pst@repeatarrowsflag>\z@ +/Arrow#1c [ 6 2 roll ] cvx def Arrow#1c +\fi +\tx@BeginArrow +\psk@arrowscale +\@nameuse{psas@\@nameuse{psk@arrow#1}} +\tx@EndArrow} +\def\pst@repeatarrows{% +\addto@pscode{% +gsave +\ifx\psk@arrowA\@empty\else +ArrowAc ArrowA pop pop +\fi +\ifx\psk@arrowB\@empty\else +ArrowBc ArrowB pop pop pop pop +\fi +grestore}} +\def\pst@OpenShowPoints{% +\addto@pscode{% +gsave +\psk@dotsize +\@nameuse{psds@\psk@dotstyle} +newpath +Points aload length 2 div 2 sub cvi /N ED +N 0 ge +{ \ifx\psk@arrowA\@empty +Dot +\else +pop pop +\fi +N { Dot } repeat +\ifx\psk@arrowB\@empty +Dot +\else +pop pop +\fi } +{ N 2 mul { pop } repeat } +ifelse +grestore}} +\def\pscustom{\pst@object{pscustom}} +\long\def\pscustom@i#1{% +\begin@SpecialObj +\solid@star +\let\pst@ifcustom\iftrue +\let\begin@ClosedObj\begin@CustomObj +\let\end@ClosedObj\endgroup +\def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}% +\let\end@OpenObj\endgroup +\let\begin@AltOpenObj\begin@CustomObj +\def\begin@SpecialObj{% +\begingroup +\pst@misplaced{special graphics object}% +\def\addto@pscode####1{} +\let\end@SpecialObj\endgroup}% +\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% +\def\psclip##1{\pst@misplaced\psclip}% +\def\pst@repeatarrowsflag{\z@}% +\let\pst@setrepeatarrowsflag\relax +\showpointsfalse +\let\showpointstrue\relax +\def\pst@linetype{\pslinetype}% +\let\psset@liftpen\psset@@liftpen +\psset@liftpen{\z@}% +\def\pst@cp{/currentpoint load stopped pop }% +\def\pst@oplineto{/lineto load stopped { moveto } if }% +\def\pst@optcp##1##2{% +\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}% +\let\caddto@pscode\addto@pscode +\def\cuse@par##1{{\use@par##1}}% +\the\pst@customdefs +\setbox\pst@hbox=\hbox{#1}% +\psk@fillstyle +\pst@stroke +\end@SpecialObj} +\def\begin@CustomObj{% +\begingroup +\use@par +\addto@pscode{% +\pst@number\pslinewidth SLW +\pst@usecolor\pslinecolor}} +\def\pst@oplineto{moveto } +\def\pst@cp{} +\def\pst@optcp#1#2{} +\def\psset@liftpen#1{} +\def\psset@@liftpen#1{% +\ifcase#1\relax +\def\psk@liftpen{\z@}% +\def\pst@cp{/currentpoint load stopped pop }% +\def\pst@oplineto{/lineto load stopped { moveto } if }% +\or +\def\psk@liftpen{1}% +\def\pst@cp{}% +\def\pst@oplineto{/lineto load stopped { moveto } if }% +\or +\def\psk@liftpen{2}% +\def\pst@cp{}% +\def\pst@oplineto{moveto }% +\fi} +\psset@liftpen{0} +\def\psk@liftpen{-1} +\def\psset@linetype#1{% +\pst@getint{#1}\pslinetype +\ifnum\pst@dimg<-3 +\@pstrickserr{linetype must be greater than -3}\@ehpa +\def\pslinetype{0}% +\fi} +\psset@linetype{0} +\def\caddto@pscode#1{% +\@pstrickserr{Command can only be used in \string\pscustom}\@ehpa} +\let\cuse@par\caddto@pscode +\def\tx@MSave{% +/msavemtrx +[ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ] +def } +\def\tx@MRestore{% +tx@Dict /msavemtrx known { length 0 gt } { false } ifelse +{ /msavematrx [ msavematrx aload pop setmatrix ] def } +if } +\newtoks\pst@customdefs +\pst@customdefs{% +\def\newpath{\addto@pscode{newpath}}% +\def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% +\def\closepath{\addto@pscode{closepath}}% +\def\gsave{\begingroup\addto@pscode{gsave}}% +\def\grestore{\endgroup\addto@pscode{grestore}}% +% DG/SR modification begin - May 12, 1997 - Patch 2 +%\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% +\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}% +% DG/SR modification end +\def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}% +\def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}% +\def\msave{\addto@pscode{\tx@MSave}}% +\def\mrestore{\addto@pscode{\tx@MRestore}}% +\def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}% +\def\stroke{\pst@object{stroke}}% +\def\fill{\pst@object{fill}}% +\def\openshadow{\pst@object{openshadow}}% +\def\closedshadow{\pst@object{closedshadow}}% +% DG/SR modification begin - Jan. 7, 1998 - Patch 8 +%\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}% +\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}% +% DG/SR modification end +\def\lineto{\pst@onecoor{lineto}}% +\def\rlineto{\pst@onecoor{rlineto}}% +\def\curveto{\pst@threecoor{curveto}}% +\def\rcurveto{\pst@threecoor{rcurveto}}% +\def\code#1{\addto@pscode{#1}}% +\def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}% +\def\rcoor{\pst@getcoors{}{}}% +\def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}% +\def\setcolor#1{% +\@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}% +\def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}% +\let\file\pst@rawfile +} % END \pst@customdefs +\def\closedshadow@i{\cuse@par\pst@closedshadow} +\def\openshadow@i{\cuse@par\pst@openshadow} +\def\stroke@i{\cuse@par\pst@stroke}% +\def\fill@i{\cuse@par\psk@fillstyle}% +\def\pst@onecoor#1(#2){% +\pst@@getcoor{#2}% +\addto@pscode{\pst@coor #1}} +\def\pst@threecoor#1(#2)#3(#4)#5(#6){% +\begingroup +\pst@getcoor{#2}\pst@tempa +\pst@getcoor{#4}\pst@tempb +% DG/SR modification begin - Aug. 4, 1999 - Patch 11 +%\pst@getcoor{#6}\pst@tembc +\pst@getcoor{#6}\pst@tempc +% DG/SR modification end +\addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}% +\endgroup} +\def\pst@rawfile#1{% +\begingroup +\def\do##1{\catcode`##1=12\relax}" +\dospecials +\catcode`\%=14 +\pst@@rawfile{#1}% +\endgroup} +\def\pst@@rawfile#1{% +\immediate\openin1 #1 +\ifeof1 +\@pstrickserr{File `#1' not found}\@ehpa +\else +\immediate\read1 to \pst@tempg +\loop +\ifeof1 \@pstfalse\else\@psttrue\fi +\if@pst +\addto@pscode\pst@tempg +\immediate\read1 to \pst@tempg +\repeat +\fi +\immediate\closein1\relax} +\def\tx@NArray{NArray } +\def\tx@NArray{NArray } +\def\tx@Line{Line } +\def\tx@Arcto{Arcto } +\def\tx@CheckClosed{CheckClosed } +\def\tx@Polygon{Polygon } +\def\psset@gangle#1{\pst@getangle{#1}\psk@gangle} +\psset@gangle{0} +\def\tx@Diamond{Diamond } +\def\psdiamond{\pst@object{psdiamond}} +\def\psdiamond@i(#1){% +\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}} +\def\psdiamond@ii(#1)(#2){% +\begin@ClosedObj +\pst@getcoor{#1}\pst@tempa +\pst@getcoor{#2}\pst@tempb +\addto@pscode{% +\psline@iii +pop +\psk@dimen +\pst@tempb +\psk@gangle +\pst@tempa +\tx@Diamond}% +\def\pst@linetype{4}% +\end@ClosedObj} +\def\tx@Triangle{Triangle } +\def\pstriangle{\pst@object{pstriangle}} +\def\pstriangle@i(#1){% +\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}} +\def\pstriangle@ii(#1)(#2){% +\begin@ClosedObj +\pst@getcoor{#1}\pst@tempa +\pst@getcoor{#2}\pst@tempb +\addto@pscode{% +\psline@iii +pop +\psk@dimen +\pst@tempb +\psk@gangle +\pst@tempa +\tx@Triangle}% +\def\pst@linetype{2}% +\end@ClosedObj} +\def\tx@CCA{CCA } +\def\tx@CCA{CCA } +\def\tx@CC{CC } +\def\tx@IC{IC } +\def\tx@BOC{BOC } +\def\tx@NC{NC } +\def\tx@EOC{EOC } +\def\tx@BAC{BAC } +\def\tx@NAC{NAC } +\def\tx@EAC{EAC } +\def\tx@OpenCurve{OpenCurve } +\def\tx@AltCurve{AltCurve } +\def\tx@ClosedCurve{ClosedCurve } +\def\psset@curvature#1{% +\edef\pst@tempg{#1 }% +\expandafter\psset@@curvature\pst@tempg * * * \@nil} +\def\psset@@curvature#1 #2 #3 #4\@nil{% +\pst@checknum{#1}\pst@tempg +\pst@checknum{#2}\pst@temph +\pst@checknum{#3}\pst@tempi +\edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}} +\psset@curvature{1 .1 0} +\def\pscurve{\pst@object{pscurve}} +\def\pscurve@i{% +\pst@getarrows{% +\begin@OpenObj +\pst@getcoors[\pscurve@ii}} +\def\pscurve@ii{% +\addto@pscode{% +\pst@cp +\psk@curvature\space /c ED /b ED /a ED +\ifshowpoints true \else false \fi +\tx@OpenCurve}% +\end@OpenObj} +\def\psecurve{\pst@object{psecurve}} +\def\psecurve@i{% +\pst@getarrows{% +\begin@OpenObj +\pst@getcoors[\psecurve@ii}} +\def\psecurve@ii{% +\addto@pscode{% +\psk@curvature\space /c ED /b ED /a ED +\ifshowpoints true \else false \fi +\tx@AltCurve}% +\end@OpenObj} +\def\psccurve{\pst@object{psccurve}} +\def\psccurve@i{% +\begin@ClosedObj +\pst@getcoors[\psccurve@ii} +\def\psccurve@ii{% +\addto@pscode{% +\psk@curvature\space /c ED /b ED /a ED +\ifshowpoints true \else false \fi +\tx@ClosedCurve}% +\def\pst@linetype{1}% +\end@ClosedObj} +\def\psset@dotsize#1{% +\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil +\edef\psk@@dotsize{\pst@number\pst@dimg}% +\let\psk@@@dotsize\pst@tempg +\edef\psk@dotsize{% +/DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }} +\psset@dotsize{2pt 2} +\def\psset@dotscale#1{% +\pst@getscale{#1}\psk@dotscale +\ifx\psk@dotscale\@empty +\def\psk@xdotscale{1 }% +\def\psk@ydotscale{1 }% +\else +\let\psk@xdotscale\pst@tempg +\let\psk@ydotscale\pst@temph +\fi} +% DG/SR modification begin - Oct. 17, 1997 - Patch 5 +%\psset@dotscale{1} +% DG/SR modification end +\def\pst@Getangle#1#2{% +\pst@getangle{#1}\pst@tempg +\def\pst@temph{0. }% +\ifx\pst@tempg\pst@temph +\def#2{}% +\else +\edef#2{\pst@tempg\space rotate }% +\fi} +\def\psset@dotangle#1{% +\pst@getangle{#1}\psk@@dotangle +\ifdim\psk@@dotangle\p@=\z@ +\let\psk@dotangle\@empty +\else +% DG/SR modification begin - Aug. 8, 1997 - Patch 4 +%\edef\psk@dotangle{\psk@@dotangle rotate } +\edef\psk@dotangle{\psk@@dotangle rotate }% +% DG/SR modification end +\fi} +\psset@dotangle{0} +\def\pst@getdotsize{% +\pst@dimg=\psk@@@dotsize\pslinewidth +\advance\pst@dimg\psk@@dotsize\p@ +\pst@dimh=\psk@ydotscale\pst@dimg +\pst@dimg=\psk@xdotscale\pst@dimg +\divide\pst@dimh 2 +\divide\pst@dimg 2\relax} +% DG/SR modification begin - Oct. 17, 1997 - Patch 5 +\psset@dotscale{1} +% DG/SR modification end +\def\psdot{\pst@object{psdot}} +\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}} +\def\psdot@ii(#1){% +\begin@SpecialObj +\pst@@getcoor{#1}% +\addto@pscode{% +\psk@dotsize +\@nameuse{psds@\psk@dotstyle}% +\pst@coor Dot}% +\end@SpecialObj} +\def\psdots{\pst@object{psdots}} +\def\psdots@i{% +\begin@SpecialObj +\pst@getcoors[\psdots@ii} +\def\psdots@ii{% +\addto@pscode{false \tx@NArray \psdots@iii}% +\end@SpecialObj} +\def\psdots@iii{% +\psk@dotsize +\@nameuse{psds@\psk@dotstyle} +newpath +n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat} +% DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997 +\def\tx@SQ{SQ } +\def\tx@ST{ST } +\def\tx@SP{SP } +\def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def } +\@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}} +\@namedef{psds@o}{% +/r2 DS CLW sub def +\pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}} +\@namedef{psds@square*}{% +/r1 DS .886 mul def +\pst@gdot{r1 \tx@SQ}} +\@namedef{psds@square}{% +/r1 DS .886 mul def /r2 r1 CLW sub def +\pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}} +\@namedef{psds@triangle*}{% +/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def +\pst@gdot{x1 y1 \tx@ST}} +\@namedef{psds@triangle}{% +/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def +/y2 y1 CLW add def /x2 y2 1.732 mul neg def +\pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}} +\@namedef{psds@pentagon*}{% +/r1 DS 1.149 mul def +\pst@gdot{r1 \tx@SP}} +\@namedef{psds@pentagon}{% +DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED +\pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}} +\@namedef{psds@+}{% +/DS DS 1.253 mul def +\pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}} +\@namedef{psds@|}{% +\psk@tbarsize CLW mul add 2 div /DS ED +\pst@gdot{0 DS moveto 0 DS neg L stroke}} +% DG: end dead code? +\def\psset@dotstyle#1{% +\@ifundefined{psds@#1}% +{\@pstrickserr{Dot style `#1' not defined}\@eha}% +{\edef\psk@dotstyle{#1}}} +\psset@dotstyle{*} +\def\tx@FontDot{FontDot } +\def\newpsfontdot#1[#2]#3#4{% +\@namedef{psds@#1}{% +/#3 \psk@@dotangle [#2] \tx@FontDot +% DG/SR modification begin - Dec. 12, 1999 - Patch 14 +%/Dot { moveto #4 show } bind def }} +/Dot { moveto gsave \psk@dotscale #4 show grestore } bind def }} +% DG/SR modification end +\def\newpsfontdotH#1[#2]#3#4#5{% +\@namedef{psds@#1}{% +/#3 \psk@@dotangle [#2] \tx@FontDot +/Dot { +moveto +\iftrue +% DG/SR modification begin - Dec. 23, 1999 - Patch 14 +%gsave \pst@usecolor\psfillcolor #5 show grestore +%\fi +%#4 show +gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore +\fi +gsave \psk@dotscale #4 show grestore +% DG/SR modification end +} bind def }} +\pstheader{pst-dots.pro} +\newpsfontdot{*}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} +\newpsfontdotH{o}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} +\newpsfontdotH{Bo}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} +\newpsfontdotH{triangle}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} +\newpsfontdotH{Btriangle}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} +\newpsfontdot{triangle*}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} +\newpsfontdotH{square}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} +\newpsfontdotH{Bsquare}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} +\newpsfontdot{square*}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} +\newpsfontdotH{pentagon}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} +\newpsfontdotH{Bpentagon}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} +\newpsfontdot{pentagon*}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} +% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14 +%\newpsfontdot{diamond*}% +%[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>} +%\newpsfontdot{diamond}% +%[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>} +% D.G. modification begin - Jan. 17, 2000 +\newpsfontdotH{diamond}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} +\newpsfontdotH{Bdiamond}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} +\newpsfontdot{diamond*}% +[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} +% DG/SR modification end +\newpsfontdot{oplus}% +[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{<C5>} +\newpsfontdot{otimes}% +[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{<C4>} +\newpsfontdot{x}% +[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{<B4>} +\newpsfontdot{+}% +[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>} +\newpsfontdot{asterisk}% +[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>} +\newpsfontdot{B+}% +[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>} +\newpsfontdot{Basterisk}% +[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>} +\newpsfontdot{|}% +% DG/SR modification begin - Oct. 27, 1997 - Patch 7 +%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)} +[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)} +% DG/SR modification end +\newpsfontdot{B|}% +% DG/SR modification begin - Oct. 27, 1997 - Patch 7 +%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)} +[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)} +% DG/SR modification end +\iffalse +\newpsfontdot{*}% +[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{<B7>} +\newpsfontdot{o}% +[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{<B0>} +\newpsfontdot{Bo}% +[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{<CA>} +\fi +\newdimen\pslinearc +\def\psset@linearc#1{\pssetlength\pslinearc{#1}} +\psset@linearc{0pt} +\def\psline{\pst@object{psline}} +\def\psline@i{% +\pst@getarrows{% +\begin@OpenObj +\pst@getcoors[\psline@ii}} +\def\psline@ii{% +\addto@pscode{\pst@cp \psline@iii \tx@Line}% +\end@OpenObj} +\def\psline@iii{% +\ifdim\pslinearc>\z@ +/r \pst@number\pslinearc def +/Lineto { \tx@Arcto } def +\else +/Lineto /lineto load def +\fi +\ifshowpoints true \else false \fi} +\def\qline(#1)(#2){% +\def\pst@par{}% +\begin@SpecialObj +\def\pst@linetype{0}% +\pst@getcoor{#1}\pst@tempa +\pst@@getcoor{#2}% +\addto@pscode{% +\pst@tempa moveto \pst@coor L +\@nameuse{psls@\pslinestyle}}% +\end@SpecialObj} +\def\pspolygon{\pst@object{pspolygon}} +\def\pspolygon@i{% +\begin@ClosedObj +\def\pst@cp{}% +\pst@getcoors[\pspolygon@ii} +\def\pspolygon@ii{% +\addto@pscode{\psline@iii \tx@Polygon}% +\def\pst@linetype{1}% +\end@ClosedObj} +\def\psset@framearc#1{\pst@checknum{#1}\psk@framearc} +\psset@framearc{0} +\def\psset@cornersize#1{% +\pst@expandafter\psset@@cornersize{#1}\@nil} +\def\psset@@cornersize#1#2\@nil{% +\if #1a\relax +\def\psk@cornersize{\pst@number\pslinearc false }% +\else +\def\psk@cornersize{\psk@framearc true }% +\fi} +\psset@cornersize{relative} +\def\tx@Rect{Rect } +\def\tx@OvalFrame{OvalFrame } +\def\tx@Frame{Frame } +\def\psset@dimen#1{% +\pst@expandafter\psset@@dimen{#1}\@nil} +\def\psset@@dimen#1#2\@nil{% +\if #1o\relax +\def\psk@dimen{.5 }% +\else +\if #1m\relax +\def\psk@dimen{0 }% +\else +\if #1i\relax +\def\psk@dimen{-.5 }% +\fi +\fi +\fi} +\psset@dimen{outer} +\def\psframe{\pst@object{psframe}} +\def\psframe@i(#1){% +\@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}} +\def\psframe@ii(#1)(#2){% +\begin@ClosedObj +\pst@getcoor{#1}\pst@tempa +\pst@@getcoor{#2}% +\addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}% +\def\pst@linetype{2}% +\showpointsfalse +\end@ClosedObj} +\def\tx@BezierNArray{BezierNArray } +\def\tx@OpenBezier{OpenBezier } +\def\tx@ClosedBezier{ClosedBezier } +\def\tx@BezierShowPoints{BezierShowPoints } +\def\psbezier{\pst@object{psbezier}} +\def\psbezier@i{% +\pst@getarrows{% +\begin@OpenObj +\pst@getcoors[\psbezier@ii}} +\def\psbezier@ii{% +\addto@pscode{% +% DG/SR modification begin - Apr. 28, 1997 - Patch 1 +% \psbezier doesn't work inside \pscustom +%\pst@cp +% DG/SR modification end +\ifshowpoints true \else false \fi +\tx@OpenBezier +\ifshowpoints \tx@BezierShowPoints \fi}% +\end@OpenObj} +\def\pscbezier{\pst@object{pscbezier}} +\def\pscbezier@i{% +\begin@ClosedObj +\pst@getcoors[\pscbezier@ii} +\def\pscbezier@ii{% +\addto@pscode{% +\ifshowpoints true \else false \fi +\tx@ClosedBezier +\ifshowpoints \tx@BezierShowPoints \fi}% +\chardef\pst@linetype=1 +\end@ClosedObj} +\def\tx@Parab{Parab } +\def\parabola{\pst@object{parabola}} +\def\parabola@i{\pst@getarrows\parabola@ii} +\def\parabola@ii#1(#2)#3(#4){% +\begin@OpenObj +\pst@getcoor{#2}\pst@tempa +\pst@@getcoor{#4}% +\addto@pscode{\pst@tempa \pst@coor \tx@Parab}% +\end@OpenObj} +\def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth} +\psset@gridwidth{.8pt} +\def\psset@griddots#1{% +\pst@cntg=#1\relax +\edef\psk@griddots{\the\pst@cntg}} +\psset@griddots{0} +\def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor} +\psset@gridcolor{black} +\def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth} +\psset@subgridwidth{.4pt} +\def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor} +\psset@subgridcolor{gray} +\def\psset@subgriddots#1{% +\pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}} +\psset@subgriddots{0} +\def\psset@subgriddiv#1{% +\pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}} +\psset@subgriddiv{5} +\def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels} +\psset@gridlabels{10pt} +\def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor} +\psset@gridlabelcolor{black} +\def\tx@Grid{Grid } +\def\psgrid{\pst@object{psgrid}} +\def\psgrid@i{\@ifnextchar(% +{\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}} +\def\psgrid@ii(#1){\@ifnextchar(% +{\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}} +\def\psgrid@iii(#1)(#2){\@ifnextchar(% +{\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}} +\def\psgrid@iv(#1)(#2)(#3){% +\begin@SpecialObj +\pst@getcoor{#1}\pst@tempa +\pst@getcoor{#2}\pst@tempb +\pst@@getcoor{#3}% +\ifnum\psk@subgriddiv>1 +\addto@pscode{gsave +\psk@subgridwidth SLW \pst@usecolor\pssubgridcolor +\pst@tempb \pst@coor \pst@tempa +\pst@number\psxunit \pst@number\psyunit +\psk@subgriddiv\space \psk@subgriddots\space +{} 0 \tx@Grid grestore}% +\fi +\addto@pscode{gsave +\psk@gridwidth SLW \pst@usecolor\psgridcolor +\pst@tempb \pst@coor \pst@tempa +\pst@number\psxunit \pst@number\psyunit +1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor } +\psk@gridlabels \tx@Grid grestore}% +\end@SpecialObj} +\newif\ifpsmathbox +\psmathboxtrue +\def\pst@mathflag{\z@} +\newtoks\everypsbox +\let\pst@thisbox\relax +\long\def\pst@makenotverbbox#1#2{% +\edef\pst@mathflag{% +\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% +\setbox\pst@hbox=\hbox{% +\ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi +{\pst@thisbox\the\everypsbox#2}% +\ifnum\pst@mathflag>\z@$\fi}% +#1} +\def\pst@makeverbbox#1{% +\def\pst@afterbox{#1}% +\edef\pst@mathflag{% +\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% +\afterassignment\pst@beginbox +\setbox\pst@hbox\hbox} +\def\pst@beginbox{% +\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi +\bgroup\aftergroup\pst@endbox +\pst@thisbox +\the\everypsbox} +\def\pst@endbox{% +\ifnum\pst@mathflag>\z@$\fi +\egroup +\pst@afterbox} +\def\pst@makebox{\pst@@makebox} +\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}} +\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}} +\psverbboxfalse +\def\pst@longbox{% +\def\pst@makebox{% +\gdef\pst@makebox{\pst@@makebox}% +\pst@makelongbox}} +\def\pst@makelongbox#1{% +\def\pst@afterbox{#1}% +\edef\pst@mathflag{% +\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% +\setbox\pst@hbox\hbox\bgroup +\aftergroup\pst@afterbox +\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi +\begingroup +\pst@thisbox +\the\everypsbox} +\def\pst@endlongbox{% +\endgroup +\ifnum\pst@mathflag>\z@$\fi +\egroup} +\def\pslongbox#1#2{% +\@namedef{#1}{\pst@longbox#2}% +\@namedef{end#1}{\pst@endlongbox}} +\newdimen\psframesep +\def\psset@framesep#1{\pssetlength\psframesep{#1}} +\psset@framesep{3pt} +\newif\ifpsboxsep +\def\psset@boxsep#1{\@nameuse{psboxsep#1}} +\psset@boxsep{true} +\def\pst@useboxpar{% +\use@par +\if@star +\let\pslinecolor\psfillcolor +\solid@star +\let\solid@star\relax +\fi +\ifpsdoubleline \pst@setdoublesep \fi} +\def\psframebox{\pst@object{psframebox}} +\def\psframebox@i{\pst@makebox\psframebox@ii} +\def\psframebox@ii{% +\begingroup +\pst@useboxpar +\pst@dima=\pslinewidth +\advance\pst@dima by \psframesep +\pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima +\pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima +\pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima +\setbox\pst@hbox=\hbox{% +\ifpsboxsep\kern\pst@dima\fi +\begin@ClosedObj +\addto@pscode{% +\psk@cornersize +\pst@number\pst@dima neg +\pst@number\pst@dimb neg +\pst@number\pst@dimc +\pst@number\pst@dimd +.5 +\tx@Frame}% +\def\pst@linetype{2}% +\showpointsfalse +\end@ClosedObj +\box\pst@hbox +\ifpsboxsep\kern\pst@dima\fi}% +\ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi +\leavevmode\box\pst@hbox +\endgroup} +\def\psdblframebox{\pst@object{psdblframebox}} +\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i} +\def\psclip#1{% +\leavevmode +\begingroup +\begin@psclip +\begingroup +\def\use@pscode{% +\pstVerb{% +\pst@dict +/mtrxc CM def +CP CP T +\tx@STV +\psk@origin +\psk@swapaxes +newpath +\pst@code +clip +newpath +mtrxc setmatrix +moveto +0 setgray +end}% +\gdef\pst@code{}}% +\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% +\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% +\hbox to\z@{#1}% +\endgroup +\def\endpsclip{% +\end@psclip +\endgroup}% +\ignorespaces} +\def\endpsclip{\pst@misplaced\endpsclip} +\let\begin@psclip\relax +\def\end@psclip{\pstVerb{currentpoint initclip moveto}} +\def\AltClipMode{% +\def\end@psclip{\pstVerb{\pst@grestore}}% +\def\begin@psclip{\pstVerb{gsave}}} +\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} +% DG modification begin - Apr. 3, 1997 +% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus) +%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} +\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}} +% DG modification end +\def\clipbox@@#1{% +\pssetlength\pst@dimg{#1}% +\leavevmode\hbox{% +\begin@psclip +\pst@Verb{% +CM \tx@STV CP T newpath +/a \pst@number\pst@dimg def +/w \pst@number{\wd\pst@hbox}a add def +/d \pst@number{\dp\pst@hbox}a add neg def +/h \pst@number{\ht\pst@hbox}a add def +a neg d moveto +a neg h L +w h L +w d L +closepath +clip +newpath +0 0 moveto +setmatrix}% +\unhbox\pst@hbox +\end@psclip}} +\def\psshadowbox{\pst@object{psshadowbox}} +\def\psshadowbox@i{\pst@makebox\psshadowbox@ii} +\def\psshadowbox@ii{% +\begingroup +\pst@useboxpar +\psshadowtrue +\psboxseptrue +\def\psk@shadowangle{-45 }% +\setbox\pst@hbox=\hbox{\psframebox@ii}% +\pst@dimh=\psk@shadowsize\p@ +\pst@dimh=.7071\pst@dimh +\pst@dimg=\dp\pst@hbox +\advance\pst@dimg\pst@dimh +\dp\pst@hbox=\pst@dimg +\pst@dimg=\wd\pst@hbox +\advance\pst@dimg\pst@dimh +\wd\pst@hbox=\pst@dimg +\leavevmode +\box\pst@hbox +\endgroup} +%$ +\def\pscirclebox{\pst@object{pscirclebox}} +\def\pscirclebox@i{\pst@makebox\pscirclebox@ii} +\def\pscirclebox@ii{% +\begingroup +\pst@useboxpar +\setbox\pst@hbox=\hbox{% +\pst@nodehook +\pscirclebox@iii +\box\pst@hbox}% +\ifpsboxsep \pscirclebox@sep \fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\pscirclebox@iii{% +\if@star +\pslinewidth\z@ +\pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor +newpath \pscirclebox@iv \tx@SD end}% +\else +\begin@ClosedObj +\def\pst@linetype{4}\showpointsfalse +\addto@pscode{% +\pscirclebox@iv CLW 2 div add 0 360 arc closepath}% +\end@ClosedObj +\fi} +\def\pscirclebox@iv{% +\pst@number{\wd\pst@hbox}2 div +\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div +2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll +\tx@Pyth \pst@number\psframesep add } +\def\pscirclebox@sep{% +\pst@dimb=\ht\pst@hbox +\advance\pst@dimb\dp\pst@hbox +\divide\pst@dimb 2 +\pst@dima=.5\wd\pst@hbox +\pst@pyth\pst@dima\pst@dimb\pst@dimc +\advance\pst@dimc\pslinewidth +\advance\pst@dimc\psframesep +\advance\pst@dimb-\pst@dimc +\setbox\pst@hbox=\hbox to2\pst@dimc{% +\hss +\vbox{\kern-\pst@dimb\box\pst@hbox}% +\hss}% +\advance\pst@dimb-\dp\pst@hbox +\dp\pst@hbox=-\pst@dimb} +\let\pst@nodehook\relax +\def\psCirclebox{\pst@object{psCirclebox}} +\def\psCirclebox@i{\pst@makebox\psCirclebox@ii} +\def\psCirclebox@ii{% +\begingroup +\pst@useboxpar +\pst@dima=\ht\pst@hbox +\advance\pst@dima\dp\pst@hbox +\divide\pst@dima\tw@ +\pssetlength\pst@dimb\psk@radius +\setbox\pst@hbox=\hbox{% +\pst@nodehook +\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}% +\box\pst@hbox}% +\ifpsboxsep \psCirclebox@sep \fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\psCirclebox@sep{% +\pst@dimc=\pst@dimb +\advance\pst@dimb-\pst@dima +\advance\pst@dima\pst@dimc +\setbox\pst@hbox=\hbox to\tw@\pst@dimc{% +\hss +\vrule width \z@ depth \pst@dimb height \pst@dima +\box\pst@hbox +\hss}}% +\def\psovalbox{\pst@object{psovalbox}} +\def\psovalbox@i{\pst@makebox{\psovalbox@ii}} +\def\psovalbox@ii{% +\begingroup +\pst@useboxpar +\psovalbox@iii +\ifpsboxsep\psovalbox@sep\fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\psovalbox@iii{% +\psovalbox@iv +\setbox\pst@hbox=\hbox{% +\begin@ClosedObj +\addto@pscode{% +0 360 +\pst@number\pst@dimc CLW 2 div sub +\pst@number\pst@dimd CLW 2 div sub +\pst@number\pst@dima +\pst@number\pst@dimb +\tx@Ellipse +closepath}% +\def\pst@linetype{2}% +\end@ClosedObj +\unhbox\pst@hbox}} +\def\psovalbox@iv{% +\pst@dimc=\pslinewidth\advance\pst@dimc\psframesep +\pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox +\pst@dima=.5\wd\pst@hbox +\pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox +\pst@dimd=.707\pst@dimd +\advance\pst@dimd\pst@dimc +\advance\pst@dimc.707\wd\pst@hbox} +\def\psovalbox@sep{% +\setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}% +\pst@dimg=\pst@dimd +\advance\pst@dimg-\pst@dimb +\dp\pst@hbox=\pst@dimg +\advance\pst@dimd\pst@dimb +\ht\pst@hbox=\pst@dimd} +\def\psdiabox{\pst@object{psdiabox}} +\def\psdiabox@i{\pst@makebox{\psdiabox@ii}} +\def\psdiabox@ii{% +\begingroup +\pst@useboxpar +\psdiabox@iii +\ifpsboxsep\psdiabox@sep\fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\psdiabox@iv{% +\pst@dimg=.707\pslinewidth +\advance\pst@dimg.707\psframesep +\pst@dima=\wd\pst@hbox +\divide\pst@dima 2 +\pst@dimc=\pst@dima +\advance\pst@dimc\pst@dimg +\pst@dimd=\ht\pst@hbox +\advance\pst@dimd\dp\pst@hbox +\divide\pst@dimd 2 +\pst@dimb=\pst@dimd +\advance\pst@dimb-\dp\pst@hbox +\advance\pst@dimd\pst@dimg} +\def\psdiabox@iii{% +\psdiabox@iv +\setbox\pst@hbox=\hbox{% +\begin@ClosedObj +\addto@pscode{% +\psline@iii +pop +.5 +\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul +0 +\pst@number\pst@dima \pst@number\pst@dimb +\tx@Diamond}% +\def\pst@linetype{4}% +\end@ClosedObj +\box\pst@hbox}} +\def\psdiabox@sep{% +\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}% +\multiply\pst@dimd 2 +\advance\pst@dimd\pst@dimb +\ht\pst@hbox\pst@dimd +\advance\pst@dimd-2\pst@dimb +\dp\pst@hbox\pst@dimd} +\def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil} +\def\psset@@trimode#1#2#3\@nil{% +\let\pst@tempg#1\relax +\ifx\pst@tempg*% +\let\psk@@trimode\@empty +\let\pst@tempg#2\relax +\else +\let\psk@@trimode\relax +\fi +\edef\psk@trimode{% +\ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2 +\else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}} +\psset@trimode{U} +\def\pstribox{\pst@object{pstribox}} +\def\pstribox@i{\pst@makebox{\pstribox@ii}} +\def\pstribox@ii{% +\begingroup +\pst@useboxpar +\pstribox@iii +\ifpsboxsep\pstribox@sep\fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\pstribox@iii{% +\pstribox@iv +\setbox\pst@hbox=\hbox{% +\begin@ClosedObj +\addto@pscode{% +\psline@iii +pop +.5 +\pst@number\pst@dimc \pst@number\pst@dimd +\ifodd\psk@trimode exch \fi +\psk@trimode -90 mul +\pst@number\pst@dima \pst@number\pst@dimb +\tx@Triangle}% +\def\pst@linetype{2}% +\end@ClosedObj +\box\pst@hbox}} +\def\pstribox@iv{% +\pst@dimh=\pslinewidth +\advance\pst@dimh\psframesep +\pst@dimg=\ht\pst@hbox +\advance\pst@dimg-\dp\pst@hbox +\divide\pst@dimg 2 +\edef\pst@tempa{\number\pst@dimg sp}% For use by nodes. +\ifodd\psk@trimode +\pst@dimb\pst@dimg +\else +\pst@dima=\wd\pst@hbox +\divide\pst@dima 2 +\fi +\ifcase\psk@trimode +\pst@dimb=-\dp\pst@hbox +\advance\pst@dimb-\pst@dimh +\or +\pst@dima=-\pst@dimh +\or +\pst@dimb=\ht\pst@hbox +\advance\pst@dimb\pst@dimh +\or +\pst@dima=\wd\pst@hbox +\advance\pst@dima\pst@dimh +\fi +\pst@dimd=\dp\pst@hbox +\advance\pst@dimd\ht\pst@hbox +\ifx\psk@@trimode\relax +\pst@dimc=\wd\pst@hbox +\advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh +\multiply\pst@dimc 2 +\advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh +\multiply\pst@dimd 2 +\else +\ifodd\psk@trimode +\advance\pst@dimd 1.1547\wd\pst@hbox +\advance\pst@dimd 3.4641\pst@dimh +\pst@dimc=.866\pst@dimd +\else +\advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2) +\advance\pst@dimd 3\pst@dimh +\pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3)) +\fi +\fi} +\def\pstribox@sep{% +\ifodd\psk@trimode +\advance\pst@dimb.5\pst@dimd +\ht\pst@hbox=\pst@dimb +\advance\pst@dimd-\pst@dimb +\dp\pst@hbox=\pst@dimd +\else +\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}% +\global\pst@dimg=.5\pst@dimc +\fi +\ifcase\psk@trimode +\dp\pst@hbox-\pst@dimb +\advance\pst@dimd\pst@dimb +\ht\pst@hbox\pst@dimd +\or +\pst@dimg=.5\wd\pst@hbox +\global\advance\pst@dimg-\pst@dima +\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}% +\or +\ht\pst@hbox\pst@dimb +\advance\pst@dimd-\pst@dimb +\dp\pst@hbox\pst@dimd +\or +\pst@dimg=\pst@dimc +\advance\pst@dimg-\pst@dima +\global\advance\pst@dimg.5\wd\pst@hbox +\setbox\pst@hbox\hbox to \pst@dimc{% +\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}% +\fi} +\def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA} +\def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB} +\def\psset@arcsep#1{% +\psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA} +\psset@arcsep{0} +\def\tx@ArcArrow{ArcArrow } +\def\psarc{\pst@object{psarc}} +\def\psarc@i{% +\@ifnextchar({\psarc@iii}{\psarc@ii}} +\def\psarc@ii#1{\addto@par{arrows=#1}% +\@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}} +\def\psarc@iii(#1)#2#3#4{% +\begin@OpenObj +\pst@getangle{#3}\pst@tempa +\pst@getangle{#4}\pst@tempb +\pst@@getcoor{#1}% +\pssetlength\pst@dima{#2}% +\addto@pscode{\psarc@iv \psarc@v}% +\gdef\psarc@type{0}% +\showpointsfalse +\end@OpenObj} +\def\psarc@iv{% +\pst@coor /y ED /x ED +/r \pst@number\pst@dima def +/c 57.2957 r \tx@Div def +/angleA +\pst@tempa +\psk@arcsepA c mul 2 div +\ifcase \psarc@type add \or sub \fi +def +/angleB +\pst@tempb +\psk@arcsepB c mul 2 div +\ifcase \psarc@type sub \or add \fi +def +\ifshowpoints\psarc@showpoints\fi +\ifx\psk@arrowA\@empty +\ifnum\psk@liftpen=2 +r angleA \tx@PtoC +y add exch x add exch +moveto +\fi +\fi} +\def\psarc@v{% +x y r +angleA +\ifx\psk@arrowA\@empty\else +{ ArrowA CP } +{ \ifcase\psarc@type add \or sub \fi } +\tx@ArcArrow +\fi +angleB +\ifx\psk@arrowB\@empty\else +{ ArrowB } +{ \ifcase\psarc@type sub \or add \fi } +\tx@ArcArrow +\fi +\ifcase\psarc@type arc \or arcn \fi} +\def\psarc@type{0} +\def\psarc@showpoints{% +gsave +newpath +x y moveto +x y r \pst@tempa \pst@tempb +\ifcase\psarc@type arc \or arcn \fi +closepath +CLW 2 div SLW +[ \psk@dash\space ] 0 setdash stroke +grestore } +\def\psarcn{\pst@object{psarcn}} +\def\psarcn@i{\def\psarc@type{1}\psarc@i} +\def\pscircle{\pst@object{pscircle}} +\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}} +\def\pscircle@do(#1)#2{% +\if@star +{\use@par\qdisk(#1){#2}}% +\else +\begin@ClosedObj +\pst@@getcoor{#1}% +\pssetlength\pst@dimc{#2}% +\def\pst@linetype{4}% +\addto@pscode{% +\pst@coor +\pst@number\pst@dimc +\psk@dimen CLW mul sub +0 360 arc +closepath}% +\showpointsfalse +\end@ClosedObj +\fi +\ignorespaces} +\def\qdisk(#1)#2{% +\def\pst@par{}% +\begin@SpecialObj +\pst@@getcoor{#1}% +\pssetlength\pst@dimg{#2}% +\addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}% +\end@SpecialObj} +\def\psset@radius#1{\pst@@getlength{#1}\psk@radius} +\psset@radius{.25cm} +\def\psCircle{\pst@object{psCircle}} +\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}} +\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}} +\def\pswedge{\pst@object{pswedge}} +\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}} +\def\pswedge@ii(#1)#2#3#4{% +\begin@ClosedObj +\pssetlength\pst@dimc{#2} +\pst@getangle{#3}\pst@tempa +\pst@getangle{#4}\pst@tempb +\pst@@getcoor{#1}% +\def\pst@linetype{1}% +\addto@pscode{% +\pst@coor +2 copy +moveto +\pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius +\pst@tempa \pst@tempb +arc +closepath}% +\showpointsfalse +\end@ClosedObj} +\def\tx@Ellipse{Ellipse } +\def\psellipse{\pst@object{psellipse}} +\def\psellipse@i(#1){\@ifnextchar(% +{\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}} +\def\psellipse@ii(#1)(#2){% +\begin@ClosedObj +\pst@getcoor{#1}\pst@tempa +\pst@@getcoor{#2}% +\addto@pscode{% +0 360 +\pst@coor +\ifdim\psk@dimen\p@=\z@\else +\psk@dimen CLW mul +dup 4 -1 roll sub neg 3 1 roll sub +\fi +\pst@tempa +\tx@Ellipse +closepath}% +\def\pst@linetype{2}% +\end@ClosedObj} +\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}} +\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii} +\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}} +\long\def\multips@iii(#1)(#2)#3#4{% +\begingroup +\use@par +\pst@getcoor{#1}\pst@tempa +\pst@@getcoor{#2}% +\pst@cnta=#3\relax +\init@pscode +\addto@pscode{% +\pst@tempa T \the\pst@cnta\space \pslbrace +gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}% +\hbox to\z@{% +\def\init@pscode{% +\addto@pscode{% +gsave +\pst@number\pslinewidth SLW +\pst@usecolor\pslinecolor}}% +\def\use@pscode{\addto@pscode{grestore}}% +\def\psclip##1{\pst@misplaced\psclip}% +\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% +#4}% +\addto@pscode{grestore \pst@coor T \psrbrace repeat}% +\leavevmode +\use@pscode +\endgroup +\ignorespaces} +\def\scalebox#1{\pst@makebox{\@scalebox{#1}}} +\def\@scalebox#1{% +\begingroup +\pst@getscale{#1}\pst@tempa +\let\pst@tempc\pst@tempg +\let\pst@tempd\pst@temph +\@@scalebox +\endgroup} +\def\@@scalebox{% +\leavevmode +\hbox{% +\ifdim\pst@tempd\p@<\z@ +\pst@dimg=\pst@tempd\ht\pst@hbox +\pst@dimh=\pst@tempd\dp\pst@hbox +\dp\pst@hbox=-\pst@dimg +\ht\pst@hbox=-\pst@dimh +\else +\ht\pst@hbox=\pst@tempd\ht\pst@hbox +\dp\pst@hbox=\pst@tempd\dp\pst@hbox +\fi +\pst@dima=\pst@tempc\wd\pst@hbox +\ifdim\pst@dima<\z@\kern-\pst@dima\fi +\pst@Verb{CP CP translate \pst@tempa \tx@NET}% +\hbox to \z@{\box\pst@hbox\hss}% +\pst@Verb{% +CP CP translate +1 \pst@tempc div 1 \pst@tempd div scale +\tx@NET}% +\ifdim\pst@dima>\z@\kern\pst@dima\fi}} +\pslongbox{Scalebox}{\scalebox} +\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}} +\def\@scaleboxto(#1,#2){% +\begingroup +\pssetlength\pst@dima{#1}% +\pssetlength\pst@dimb{#2}% +\ifdim\pst@dima=\z@\else +\pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc +\edef\pst@tempc{\pst@tempc\space}% +\fi +\ifdim\pst@dimb=\z@ +\ifdim\pst@dima=\z@ +\@pstrickserr{% +\string\scaleboxto\space dimensions cannot both be zero}\@ehpa +\def\pst@tempa{}% +\def\pst@tempc{1 }% +\def\pst@tempd{1 }% +\else +\let\pst@tempd\pst@tempc +\fi +\else +\pst@dimc=\ht\pst@hbox +\advance\pst@dimc\dp\pst@hbox +\pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd +\edef\pst@tempd{\pst@tempd\space}% +\ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi +\fi +\edef\pst@tempa{\pst@tempc \pst@tempd scale }% +\@@scalebox +\endgroup} +\pslongbox{Scaleboxto}{\scaleboxto} +\def\tx@Rot{Rot } +\def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}} +\def\@rotateleft#1{% +\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% +\pst@Verb{90 \tx@Rot} +\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% +\pst@Verb{-90 \tx@Rot}}}} +\def\rotateright{\pst@makebox{\@rotateright\pst@hbox}} +\def\@rotateright#1{% +\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% +\pst@Verb{-90 \tx@Rot} +\vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% +\pst@Verb{90 \tx@Rot}}}} +\def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}} +\def\@rotatedown#1{% +\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% +\pst@Verb{180 \tx@Rot}% +\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% +\pst@Verb{-180 \tx@Rot}}}} +\pslongbox{Rotateleft}{\rotateleft} +\pslongbox{Rotateright}{\rotateright} +\pslongbox{Rotatedown}{\rotatedown} +\def\pst@starbox{% +\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}} +\def\pst@@makesmall#1{% +\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}} +\def\pst@@@makesmall#1{% +\pst@dimh=\psk@xref\wd#1% +\ifx\psk@yref\relax +\pst@dimg=\dp#1% +\else +\pst@dimg=\psk@yref\ht#1% +\advance\pst@dimg\psk@yref\dp#1% +\fi +\setbox#1=\hbox to\z@{% +\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}} +\def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil} +\def\psset@@ref#1#2,#3,#4\@nil{% +\def\psk@xref{.5}% +\def\psk@yref{.5}% +\let\pst@makesmall\pst@@@makesmall +\ifx\@empty#3\@empty +\@nameuse{getref@#1}% +\@nameuse{getref@#2}% +\else +\pst@checknum{#1#2}\psk@xref +\pst@checknum{#3}\psk@yref +\fi} +\def\getref@c{\let\pst@makesmall\pst@@makesmall} +\def\getref@t{\def\psk@yref{1}} +\def\getref@b{\def\psk@yref{0}} +\def\getref@B{\let\psk@yref\relax} +\def\getref@l{\def\psk@xref{0}} +\def\getref@r{\def\psk@xref{1}} +\psset@ref{c} +\def\psset@rot#1{% +\pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil} +\def\psset@@rot#1\@nil{% +\def\next##1@#1=##2@##3\@nil{% +\ifx\relax##2% +\pst@getangle{#1}\psk@rot +\else +\def\psk@rot{##2}% +\fi}% +\expandafter\next\pst@rottable @#1=\relax @\@nil} +\def\psset@@@rot#1#2\@nil{% +\psset@@rot#2\@nil +\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}} +\def\pst@rotlist{mark RAngle /a ED cleartomark a neg } +\def\pst@rottable{% +@0=% +@U=% +@L=90 % +@D=180 % +@R=-90 % +@N=\pst@rotlist +@W=\pst@rotlist 90 add % +@S=\pst@rotlist 180 add % +@E=\pst@rotlist 90 sub } +\psset@rot{0} +\def\tx@RotBegin{RotBegin } +\def\tx@RotEnd{RotEnd } +\def\pst@rotate#1#2{% +\ifx#1\@empty\else +\setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% +\fi} +\def\psput@cartesian#1{% +\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}} +\def\psput@special#1{% +\hbox{% +\pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}% +\box#1% +\pst@Verb{\tx@PutEnd}}} +\def\tx@PutCoor{PutCoor } +\def\tx@PutBegin{PutBegin } +\def\tx@PutEnd{PutEnd } +\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}} +\def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii} +\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}} +\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}} +\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}} +\def\rput@v#1{% +\begingroup +\use@par +\if@star\pst@starbox\fi +\pst@makesmall\pst@hbox +\pst@rotate\psk@rot\pst@hbox +\psput@{#1}\pst@hbox +\endgroup +\ignorespaces} +\def\multirput{% +\def\pst@par{}% +\pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}} +\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii} +\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}} +\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv} +\def\multirput@iv(#1){% +\@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}} +\def\multirput@v(#1,#2)(#3,#4)#5{% +\pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}} +\def\multirput@vi(#1,#2)(#3,#4)#5{% +\begingroup +\use@par +\if@star\pst@starbox\fi +\pst@makesmall\pst@hbox +\pst@rotate\psk@rot\pst@hbox +\pssetxlength\pst@dima{#1}% +\pssetylength\pst@dimb{#2}% +\pssetxlength\pst@dimc{#3}% +\pssetylength\pst@dimd{#4}% +\pst@cntg=#5\relax +\pst@cnth=\@ne +\leavevmode +\loop +\vbox to \z@{% +\vss +\hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}% +\vskip\pst@dimb}% +\ifnum\pst@cntg>\pst@cnth +\advance\pst@dima\pst@dimc +\advance\pst@dimb\pst@dimd +\advance\pst@cnth\@ne +\repeat +\endgroup +\ignorespaces} +\newif\if@fixedradius +\def\cput{\pst@object{cput}} +\def\cput@i{\@fixedradiusfalse\cput@ii} +\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}} +\def\cput@iii#1{% +\addto@par{rot={#1}}% +\@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}} +\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}} +\def\cput@v#1{% +\begingroup +\use@par +\setbox\pst@hbox=\hbox{% +\psboxsepfalse +\if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi}% +\pst@@makesmall\pst@hbox +\pst@rotate\psk@rot\pst@hbox +\psput@{#1}\pst@hbox +\endgroup +\ignorespaces} +\def\Cput{\pst@object{Cput}} +\def\Cput@i{\@fixedradiustrue\cput@ii} +\newdimen\pslabelsep +\def\psset@labelsep#1{\pssetlength\pslabelsep{#1}} +\psset@labelsep{5pt} +\def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil} +\def\psset@@refangle#1\@nil{% +\def\next##1@#1=##2"##3@##4\@nil{% +\ifx\relax##2% +\pst@getangle{#1}\psk@refangle +\def\psk@uputref{}% +\else +\def\psk@refangle{##2 }% +\def\psk@uputref{##3}% +\fi}% +\expandafter\next\pst@refangletable @#1=\relax"@\@nil} +\def\pst@refangletable{% +@r=0"20% +@u=90"02% +@l=180"10% +@d=-90"01% +@ur=45"22% +@ul=135"12% +@dr=-135"21% +@dl=-45"11} +\psset@refangle{0} +% DG/SR modification begin - Mar. 24, 1999 - Patch 10 +%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}} +\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} +% DG/SR modification end +\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii} +\def\uput@ii[#1]{% +\addto@par{refangle={#1}}% +\@ifnextchar({\uput@iv}{\uput@iii}} +\def\uput@iii#1{% +\addto@par{rot={#1}}% +\@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}} +\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}} +\def\uput@v#1{% +\begingroup +\use@par +\if@star\pst@starbox\fi +\uput@vi +\psput@{#1}\pst@hbox +\endgroup +\ignorespaces} +\def\uput@vi{% +\ifx\psk@uputref\@empty +\uput@vii\tx@UUput{}% +\else +\ifx\psk@rot\@empty +\expandafter\uput@viii\psk@uputref +\else +\uput@vii\tx@UUput{}% +\fi +\fi} +\def\uput@vii#1#2{% +\edef\pst@coor{% +\pst@number\pslabelsep +#2% +\pst@number{\wd\pst@hbox}% +\pst@number{\ht\pst@hbox}% +\pst@number{\dp\pst@hbox}% +\psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi +\tx@Uput #1}% +\setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}% +\setbox\pst@hbox=\psput@special\pst@hbox +\ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi} +\def\uput@viii#1#2{% +\ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi +\setbox\pst@hbox=\vbox to\z@{% +\ifnum#2=1 \vskip\pslabelsep\else\vss\fi +\hbox to\z@{% +\ifnum#1=2 \hskip\pslabelsep\else\hss\fi +\box\pst@hbox +\ifnum#1=1 \hskip\pslabelsep\else\hss\fi}% +\ifnum#2=2 \vskip\pslabelsep\else\vss\fi}} +\def\tx@Uput{Uput } +\def\tx@UUput{UUput } +\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}} +\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii} +\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}} +\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}} +\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}} +\def\Rput@v#1{% +\begingroup +\use@par +\if@star\pst@starbox\fi +\Rput@vi +\pst@makesmall\pst@hbox +\pst@rotate\psk@rot\pst@hbox +\psput@{#1}\pst@hbox +\endgroup +\ignorespaces} +\def\Rput@vi{% +\pst@dimg=\dp\pst@hbox +\advance\pst@dimg\pslabelsep +\dp\pst@hbox=\pst@dimg +\pst@dimg=\ht\pst@hbox +\advance\pst@dimg\pslabelsep +\ht\pst@hbox=\pst@dimg +\setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}% +\def\oldpsput{% +\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}} +\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii} +\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}} +\def\oldpsput@iii<#1>{\rput@iii{#1}} +\def\OldPsput{\let\psput\oldpsput} +\def\NewPsput{\let\psput\rput} +\def\pspicture{\begingroup\pst@ifstar\pst@picture} +\def\pst@picture{% +\@ifnextchar[{\pst@@picture}{\pst@@picture[0]}} +\def\pst@@picture[#1]#2(#3,#4){% +\@ifnextchar({\pst@@@picture[#1](#3,#4)}% +{\pst@@@picture[#1](0,0)(#3,#4)}} +\def\pst@@@picture[#1](#2,#3)(#4,#5){% +\pssetxlength\pst@dima{#2}% +\pssetylength\pst@dimb{#3}% +\pssetxlength\pst@dimc{#4}% +\pssetylength\pst@dimd{#5}% +\ifdim\pst@dima>\pst@dimc +\pst@dimg=\pst@dima +\pst@dima=\pst@dimc +\pst@dimc=\pst@dimg +\fi +\ifdim\pst@dimb>\pst@dimd +\pst@dimg=\pst@dimb +\pst@dimb=\pst@dimd +\pst@dimd=\pst@dimg +\fi +\def\pst@tempa{#1}% +\setbox\pst@hbox=\hbox\bgroup +\begingroup\KillGlue +\@ifundefined{@latexerr}{}{\let\unitlength\psunit}% +\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces} +\def\pic@coor{(0,0)(0,0)(10,10)} +\def\endpspicture{% +\pst@killglue +\endgroup +\egroup +\ifdim\wd\pst@hbox=\z@\else +%\@pstrickserr{Extraneous space in the pspicture environment}% +%{Type \space <return> \space to procede.}% +\fi +\ht\pst@hbox=\pst@dimd +\dp\pst@hbox=-\pst@dimb +\setbox\pst@hbox=\hbox{% +\kern-\pst@dima +\ifx\pst@tempa\@empty\else +\advance\pst@dimd-\pst@dimb +\pst@dimd=\pst@tempa\pst@dimd +\advance\pst@dimd\pst@dimb +\lower\pst@dimd +\fi +\box\pst@hbox +\kern\pst@dimc}% +\if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi +\leavevmode\box\pst@hbox +\endgroup} +\@namedef{pspicture*}{\pspicture*} +\@namedef{endpspicture*}{\endpspicture} +\def\tx@BeginOL{BeginOL } +\def\tx@InitOL{InitOL } +\def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}} +\def\AltOverlayMode{% +\def\pst@initoverlay##1{% +\pst@Verb{% +\tx@InitOL +/Visible { initclip } def +/Invisible { +CP newpath OLUnit itransform moveto clip newpath moveto +} def +/TheOL (##1) def}}} +\def\pst@overlay#1{% +\edef\curr@overlay{#1}% +\pst@Verb{(#1) BOL}% +\aftergroup\pst@endoverlay} +\def\pst@endoverlay{% +\pst@Verb{(\curr@overlay) BOL}} +\def\curr@overlay{all} +\newbox\theoverlaybox +\def\overlaybox{% +\global\setbox\theoverlaybox=\hbox\bgroup +\begingroup +\let\psoverlay\pst@overlay +\def\overlaybox{% +\@pstrickserr{Overlays cannot be nested}\@eha}% +\def\putoverlaybox{% +\@pstrickserr{You must end the overlay box +before using \string\putoverlaybox}}% +\psoverlay{main}% +\ignorespaces} +\def\endoverlaybox{\endgroup\egroup} +\def\putoverlaybox#1{% +\hbox{\pst@initoverlay{#1}\copy\theoverlaybox}} +\def\psoverlay{\@pstrickserr{\string\psoverlay\space +can only be used after \string\overlaybox}} +\ifx\pstcustomize\relax \input pstricks.con \fi +\catcode`\@=\PstAtCode\relax +% +\endinput +%% +%% END: pstricks.tex diff --git a/graphics/pstricks/base/latex/pst-all.sty b/graphics/pstricks/base/latex/pst-all.sty new file mode 100644 index 0000000000..3c9d1a8ddb --- /dev/null +++ b/graphics/pstricks/base/latex/pst-all.sty @@ -0,0 +1,33 @@ +% $Id: pst-all.sty 446 2017-04-19 11:40:55Z herbert $ +%% +%% This is file `pst-all.sty' +%% +%% IMPORTANT NOTICE: +%% +%% Copyright (C) 1997 Timothy Van Zandt +%% Copyright (C) 2004-2008 Herbert Voss <hvoss@tug.org> +%% Rolf Niepraschk <Rolf.Niepraschk@ptb.de> +%% 2008-- Herbert Voss <hvoss@tug.org> +%% +%% This package may be distributed under the terms of the LaTeX Project +%% Public License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +\ProvidesPackage{pst-all}[2008/01/01 the main pstricks tools] +\RequirePackage{pstricks} % important +% this loads the xcolor package and pstricks in the right order +% and does some modification to the color handling. Look at the +% doc for the options. +% +\RequirePackage{pst-plot} +\RequirePackage{pst-node} +\RequirePackage{pst-tree} +\RequirePackage{pst-grad} +\RequirePackage{pst-coil} +\RequirePackage{pst-text} +\RequirePackage{pst-3d} +\RequirePackage{pst-eps} +\RequirePackage[tiling]{pst-fill} +\RequirePackage{pstricks-add} +\RequirePackage{multido} +\endinput diff --git a/graphics/pstricks/base/latex/pst-key.sty b/graphics/pstricks/base/latex/pst-key.sty new file mode 100644 index 0000000000..e1550d293e --- /dev/null +++ b/graphics/pstricks/base/latex/pst-key.sty @@ -0,0 +1,7 @@ +% $Id: pst-key.sty 446 2017-04-19 11:40:55Z herbert $ +\RequirePackage{pstricks} +\ProvidesPackage{pst-key}[2004/07/15 package wrapper for pst-key.tex] +\input{pst-key.tex} +\ProvidesFile{pst-key.tex} + [1998/07/23 v1.11 key=value parser (DPC)] +\endinput diff --git a/graphics/pstricks/base/latex/pst-platform.sty b/graphics/pstricks/base/latex/pst-platform.sty new file mode 100644 index 0000000000..a1bde247b6 --- /dev/null +++ b/graphics/pstricks/base/latex/pst-platform.sty @@ -0,0 +1,142 @@ +% $Id: pst-platform.sty 446 2017-04-19 11:40:55Z herbert $ +%% +%% This is file `pst-platform.sty', +%% +%% Copyright (C) 2017 Herbert Voß <hvoss@tug.org> +%% +%% This package may be distributed under the terms of the LaTeX Project +%% Public License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +\ProvidesPackage{pst-platform} + [2017/03/17 v0.01 Testing for the operating system, patch for luatex] +\RequirePackage{shellesc,pdftexcmds,catchfile,ifluatex} +%% +% The following code is from ifplatform.sty, it fixes a bug with lualatex +%% +\newif\ifshellescape +\newif\ifwindows +\newif\ifmacosx +\newif\iflinux +\newif\ifcygwin +\newcommand\windowsname{Windows} +\newcommand\notwindowsname{*NIX} +\newcommand\linuxname{Linux} +\newcommand\macosxname{Mac\,OS\,X} +\newcommand\cygwinname{Cygwin} +\newcommand\unknownplatform{[Unknown]} +\edef\ip@file{\jobname.w18} +\newif\if@ip@nix@ +\ifnum\pdf@shellescape=1\relax + \shellescapetrue +\else + \ifluatex\else + \PackageWarningNoLine{ifplatform}{^^J \space\space\space + shell escape is disabled, + so I can only detect \@backslashchar ifwindows% + } + \fi +\fi +\def\ip@cantdecide{% + \PackageWarningNoLine{ifplatform}{^^J \space\space\space + I can't tell if this is Windows or *nix; + you appear to be both% + }% +} +\ifluatex + \csname\directlua{ + if os.type == "unix" then + tex.sprint("@ip@nix@true") + elseif os.type == "windows" then + tex.sprint("windowstrue") + end + }\endcsname +\else + \IfFileExists{nul:}{\@ip@nix@false}{\@ip@nix@true} + \IfFileExists{/dev/null}{\windowsfalse}{\windowstrue} + \edef\ip@windows@echo@test{echo \string# > "\ip@file"} + \def\ip@backupplan{% + \IfFileExists{\ip@file}{% + \PackageWarningNoLine{ifplatform}{^^J \space\space\space + Please delete the file "\ip@file" and try again% + }% + \ip@cantdecide + }{% + \ShellEscape{\ip@windows@echo@test}% + \IfFileExists{\ip@file}{% + \ShellEscape{del "\ip@file"}% + \windowstrue + }{% + \@ip@nix@true + }% + }% + } + \ifwindows + \if@ip@nix@ + \PackageWarningNoLine{ifplatform}{^^J \space\space\space + I can't tell if this is Windows or *nix; + you appear to be neither% + } + \fi + \else + \if@ip@nix@\else + \ifshellescape + \ip@backupplan + \else + \ip@cantdecide + \fi + \fi + \fi + \fi + \def\ip@only@six#1#2#3#4#5#6#7\@nil{#1#2#3#4#5#6} + \if@ip@nix@ + \ifshellescape + \ifwindows\else + \ShellEscape{uname -s > "\ip@file"} + \CatchFileDef\@tempa{\ip@file}{} + \ShellEscape{rm -- "\ip@file"} + \edef\@tempa{\expandafter\zap@space\@tempa\@empty} + \def\@tempb{Linux} + \ifx\@tempa\@tempb + \linuxtrue + \else + \def\@tempb{Darwin} + \ifx\@tempa\@tempb + \macosxtrue + \else + \def\@tempb{CYGWIN} + \edef\@tempc{\expandafter\ip@only@six\@tempa------\@nil} + \ifx\@tempb\@tempc + \cygwintrue + \else + \edef\unknownplatform{\@tempa} + \fi + \fi + \fi + \fi +\fi\fi +\edef\platformname{% + \ifwindows + \noexpand\windowsname + \else + \ifshellescape + \iflinux + \noexpand\linuxname + \else + \ifmacosx + \noexpand\macosxname + \else + \ifcygwin + \noexpand\cygwinname + \else + \noexpand\unknownplatform + \fi + \fi + \fi + \else + \noexpand\notwindowsname + \fi + \fi +} +%% +%% End of file `pst-platform.sty'. diff --git a/graphics/pstricks/base/latex/pstcol.sty b/graphics/pstricks/base/latex/pstcol.sty new file mode 100644 index 0000000000..7a83dd1fd9 --- /dev/null +++ b/graphics/pstricks/base/latex/pstcol.sty @@ -0,0 +1,26 @@ +% $Id: pstcol.sty 446 2017-04-19 11:40:55Z herbert $ +%% +%% pstcol.sty Copyright (C) 1994--1996 1999 David Carlisle +%% 2004--2007 Herbert Voss <voss@perce.de> +%% Rolf Niepraschk <Rolf.Niepraschk@ptb.de> +%% 2007-- Herbert Voss <hvoss@tug.org> +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pstcol} + [2007/04/11 v1.3 LaTeX wrapper for `PSTricks' (RN,HV)] + +\DeclareOption*{\PassOptionsToPackage\CurrentOption{color}} +\ProcessOptions\relax + +\PackageWarningNoLine{pstcol}{% + ************************************ \MessageBreak + The package `pstcol' is obsolet! \MessageBreak + You should use `pstricks' directly: \MessageBreak + \@spaces\string\usepackage{pstricks}\MessageBreak + ************************************} + +\PassOptionsToPackage{noxcolor}{pstricks} +\RequirePackage{pstricks} + +\endinput +%% diff --git a/graphics/pstricks/base/latex/pstricks-pdf.sty b/graphics/pstricks/base/latex/pstricks-pdf.sty new file mode 100644 index 0000000000..c363a62f80 --- /dev/null +++ b/graphics/pstricks/base/latex/pstricks-pdf.sty @@ -0,0 +1,179 @@ +% $Id: pstricks-pdf.sty 446 2017-04-19 11:40:55Z herbert $ +%% +%% This is file `pstricks-pdf.sty'. +%% +%% IMPORTANT NOTICE: +%% +%% pstricks-pdf.sty Copyright (C) 2017 Herbert Voss <hvoss@tug.org> +%% +%% This package may be distributed under the terms of the LaTeX Project +%% Public License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% + +\NeedsTeXFormat{LaTeX2e} + +\ProvidesPackage{pstricks-pdf}[2017/03/17 v0.01 creating pdf output (HV)] +% +\RequirePackage{ifpdf,xkeyval,pst-platform,ifluatex,ifxetex} + +\newif\if@app@off@ +\newif\if@app@crop@ +\newcounter{app@runs} +\def\app@suffix{autopp} +\edef\app@jobname{\jobname-\app@suffix} +\edef\app@pics{\jobname-pics.pdf} + +%%% +% the following code is adapted from auto-pst-pdf +%%% +\DeclareOptionX{off}[]{\@app@off@true} +\define@choicekey{pstricks-pdf.sty}{crop}[\@tempa\@tempb]{on,off}{% + \ifcase\@tempb\relax + \@app@crop@true + \or + \@app@crop@false + \fi} +\DeclareOptionX{on}[]{\@app@off@false} +\DeclareOptionX{ext}{\def\app@ext{#1}} +\DeclareOptionX{latex}{% + \def\app@latex@opts{% + \ifwindows + -disable-write18 + \else + -no-shell-escape + \fi + -jobname="\app@jobname" + -interaction=batchmode + #1}} +\DeclareOptionX{dvips}{\def\app@dvips@opts{#1}} +\DeclareOptionX{pspdf}{\def\app@pspdf@opts{#1}} +\def\app@pdfcrop@opts{--hres}%%% hv 20130405 +\DeclareOptionX{pdfcrop}{\def\app@pdfcrop@opts{#1}} + +\DeclareOptionX{cleanup}{% + \let\app@rm@files\@empty + \@for\@ii:=#1\do{% + \edef\app@rm@files{\app@rm@files,\app@jobname.\@ii}}} + +\DeclareOptionX{runs}{% + \setcounter{app@runs}{#1}% support calc + \ifnum\c@app@runs > \z@ + \else + \app@PackageWarning{The number of runs must be at least one.}% + \c@app@runs\@ne + \fi} + +\DeclareOptionX*{% + \PassOptionsToPackage{prologue}{xcolor}% to get named colors into the ps file + \PassOptionsToPackage\CurrentOption{pstricks}% + \PassOptionsToPackage\CurrentOption{pst-pdf}% +} + +\ExecuteOptionsX{% + ext=tex, + crop=on, + latex={}, + dvips={-Ppdf}, + pdfcrop={}, + cleanup={log,aux,dvi,ps,pdf}, + runs=1 +} +\ifwindows + \ExecuteOptionsX{pspdf={}} +\else + \ExecuteOptionsX{pspdf={-dAutoRotatePages=/None}} +\fi +% +\ProcessOptionsX\relax +% +\ifxetex\@app@off@true\fi +% +\def\app@nl{^^J\space\space\space\space} +\newcommand\app@PackageError[2]{\PackageError{pstricks-pdf}{\app@nl #1^^J}{#2}} +\newcommand\app@PackageWarning[1]{% + \PackageWarning{pstricks-pdf}{\app@nl #1^^JThis warning occured}} +\newcommand\app@PackageInfo[1]{\PackageInfo{pstricks-pdf}{#1}} +\newcommand\OnlyIfFileExists[2]{\IfFileExists{#1}{#2}{}} +\newcommand\NotIfFileExists[2]{\IfFileExists{#1}{}{#2}} +\def\app@convert#1#2#3{% + \OnlyIfFileExists{#2}{% +% \expandafter\typeout\expandafter{\csname app@cmd@#1\endcsname}% + \typeout{filenameIN: #2}% + \typeout{filenameOUT: #3}% + \ShellEscape{\csname app@cmd@#1\endcsname{#2}{#3}}% + \NotIfFileExists{#3}{\app@PackageWarning{Creation of #3 failed.}}}} +\def\app@compile{% + \app@cleanup + \app@remove@container + \loop\ifnum\c@app@runs > \@ne + \app@convert{extralatex}{\jobname.\app@ext}{}% + \advance\c@app@runs\m@ne + \repeat + \app@convert{latex}{\jobname.\app@ext}{}% + \ifxetex\else + \app@convert{dvips}{\app@jobname.dvi}{\app@jobname.ps}% + \fi + \if@app@crop@ + \ifxetex\else + \app@convert{pstopdf}{\app@jobname.ps}{\app@jobname.pdf}% + \fi + \app@convert{pdfcrop}{\app@jobname.pdf}{\app@pics}% + \else + \ifxetex\else + \app@convert{pstopdf}{\app@jobname.ps}{\app@pics}% + \fi + \fi + \IfFileExists{\app@pics} + {\app@cleanup} + {\app@PackageWarning{Could not create \app@pics. + Auxiliary files not deleted.}}} +\edef\app@rm{\ifwindows del \else rm -- \fi} +\newcommand\app@try@rm[1]{% + \@for\@tempa:=#1\do{% + \OnlyIfFileExists{\@tempa}{\ShellEscape{\app@rm "\@tempa"}}}} +\def\app@remove@container{\app@try@rm{\app@pics}} +\def\app@cleanup{\app@try@rm{\app@rm@files}} +\ifluatex +% \def\app@cmd@latex#1#2{lualatex --output-format=dvi \app@latex@opts\space "\unexpanded{\let\APPmakepictures\empty\input} #1"} +% \def\app@cmd@extralatex#1#2{lualatex --output-format=dvi \app@latex@opts\space "\unexpanded{\let\APPmakepictures\undefined\input} #1"} + \def\app@cmd@latex#1#2{xelatex \app@latex@opts\space "\unexpanded{\AtBeginDocument{\pagestyle{empty}}\let\APPmakepictures\empty\input} #1"} + \def\app@cmd@extralatex#1#2{xelatex \app@latex@opts\space "\unexpanded{\AtBeginDocument{\pagestyle{empty}}\let\APPmakepictures\undefined\input} #1"} +\else + \def\app@cmd@latex#1#2{latex \app@latex@opts\space "\unexpanded{\let\APPmakepictures\empty\input} #1"} + \def\app@cmd@extralatex#1#2{\@app@prog\space \app@latex@opts\space "\unexpanded{\let\APPmakepictures\undefined\input} #1"} + \def\app@cmd@dvips#1#2{dvips \app@dvips@opts\space -o "#2" "#1"} + \def\app@cmd@pstopdf#1#2{ps2pdf \app@pspdf@opts\space "#1" "#2"} +\fi +\def\app@cmd@pdfcrop#1#2{pdfcrop \app@pdfcrop@opts\space "#1" "#2"} +\ifpdf + \if@app@off@\else + \ShellEscape{echo " "} + \ShellEscape{echo "-------------------------------------------------"} + \ShellEscape{echo "pstricks-pdf: Auxiliary LaTeX compilation"} + \ShellEscape{echo "-------------------------------------------------"} + \app@compile + \ShellEscape{echo "-------------------------------------------------"} + \ShellEscape{echo "pstricks-pdf: End auxiliary LaTeX compilation"} + \ShellEscape{echo "-------------------------------------------------"} + \fi + \if@app@crop@ + \PassOptionsToPackage{notightpage}{pst-pdf} + \fi +\else + \ifx\APPmakepictures\@undefined + \PassOptionsToPackage{inactive}{pst-pdf} + \else + \if@app@crop@ + \PassOptionsToPackage{notightpage}{pst-pdf} + \fi + \fi +\fi +\RequirePackage{pst-pdf} +\RequirePackage{pstricks} +\@ifclassloaded{beamer}{\setbeamertemplate{navigation symbols}}{}% +% +\let\app@ig\includegraphics +% +%% +%% End of file `pstricks-pdf.sty'. diff --git a/graphics/pstricks/base/latex/pstricks.sty b/graphics/pstricks/base/latex/pstricks.sty new file mode 100644 index 0000000000..dff12d797f --- /dev/null +++ b/graphics/pstricks/base/latex/pstricks.sty @@ -0,0 +1,252 @@ +% $Id: pstricks.sty 1044 2019-04-11 09:32:09Z herbert $ +%% +%% This is file `pstricks.sty'. +%% +%% IMPORTANT NOTICE: +%% +%% pstricks.sty Copyright (C) 1997 Timothy Van Zandt +%% pstcol.sty Copyright (C) 1994-1996 1999 David Carlisle +%% pstricks.sty Copyright (C) 2004- Rolf Niepraschk <Rolf.Niepraschk@gmx.de> +%% Herbert Voss <hvoss@tug.org> +%% 2019- Herbert Voss <hvoss@tug.org> +%% +%% This package may be distributed under the terms of the LaTeX Project +%% Public License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% + +\NeedsTeXFormat{LaTeX2e} + +\ProvidesPackage{pstricks}[2018/12/21 v0.69 LaTeX wrapper for `PSTricks' (RN,HV)] +% +\def\documentclass{% + \edef\@tempa{\jobname.tex }% + \edef\@tempb{\@filef@und}% + \@onelevel@sanitize\@tempa + \@onelevel@sanitize\@tempb + \ifx\@tempa\@tempb + \@latex@error + {`\jobname.tex' is a forbidden name for your document,\MessageBreak + it is already a name of a package}% + {Choose another name for your document}\@gobble + \else + \@twoclasseserror + \fi +} +% +\def\pst@ColorPackage{xcolor} +\DeclareOption{noxcolor}{\def\pst@ColorPackage{color}} +% +\newif\ifpst@useCalc \pst@useCalcfalse +\newif\ifpst@psfonts \pst@psfontsfalse +\newif\if@check@engine \@check@enginetrue +\newif\ifpst@xetex \pst@xetexfalse + +\DeclareOption{useCalc}{\pst@useCalctrue} +\DeclareOption{psfonts}{\pst@psfontstrue} +\DeclareOption{noEngineCheck}{\@check@enginefalse} +\DeclareOption{xetex}{\global\pst@xetextrue} +% +%---------------------------------DISTILLER -------------------------------- +\newif\ifpst@distiller\pst@distillerfalse +\DeclareOption{distiller}{\pst@distillertrue\pst@psfontstrue} +% +%---------------------------------COLOR -------------------------------- +\DeclareOption{monochrome}{% + \AtBeginDocument{\special{ps: + true setglobal globaldict begin + /setrgbcolor { add add 0 gt {1}{0} ifelse setgray } def + /setcmykcolor{ 4 dict begin + /k ED /y ED /m ED /c ED + 1 1 k sub c mul k add sub 0.29 mul + 1 1 k sub m mul k add sub 0.587 mul add + 1 1 k sub y mul k add sub 0.114 mul add + end 0 gt {1}{0} ifelse setgray } def + end false setglobal }}} + +\DeclareOption{grayscale}{% + \AtBeginDocument{\special{ps: + true setglobal globaldict begin + /setrgbcolor { 0.07 mul exch 0.71 mul add exch 0.21 mul add setgray } def + /setcmykcolor{ 4 dict begin + /k ED /y ED /m ED /c ED + 1 1 k sub c mul k add sub 0.29 mul + 1 1 k sub m mul k add sub 0.587 mul add + 1 1 k sub y mul k add sub 0.114 mul add + end setgray } def + end false setglobal }}} + +\DeclareOption*{\PassOptionsToPackage\CurrentOption{\pst@ColorPackage}} +\ProcessOptions\relax + + +\RequirePackage{iftex} +\RequirePackage{shellesc} +\ifpst@useCalc + \RequirePackage{pst-calculate} +\fi +%\ifPDFTeX +% \ifpdfshellescape\else +% \@latex@error +% {You are running `\jobname.tex' with pdflatex and without option `--shell-escape' ,\MessageBreak +% you need package auto-pst-pdf and that option!}% +% {Alternatively use xelatex or latex->dvips->ps2pdf} +% \fi +%\fi +\RequirePackage{\pst@ColorPackage} +% +\@ifundefined{PSTricksLoaded} +{% + \let\saved@scalebox\scalebox + \input{pst-xkey}% + \input{pstricks}% + \ProvidesFile{pstricks.tex}[\filedate\space v\fileversion\space `PSTricks' (tvz,hv)] + \input{pst-fp.tex}% + \ProvidesFile{pst-fp.tex}[\filedate\space v\fileversion\space `PST-fp' (hv)] + \IfFileExists{pstricks.pro}{% + \ProvidesFile{pstricks.pro} + [2018/11/14 v. 1.29, PostScript prologue file (hv)] + \@addtofilelist{pstricks.pro}}{}% + \IfFileExists{pst-algparser.pro}{% + \ProvidesFile{pst-algparser.pro}[2011/10/31 v. 0.04, PostScript prologue file (hv)] + \@addtofilelist{pst-algparser.pro}}{}% + \IfFileExists{pst-tools.pro}{% + \ProvidesFile{pst-tools.pro}[2012/01/01 v. 0.02, PostScript prologue file (hv)] + \@addtofilelist{pst-tools.pro}}{}% + \IfFileExists{pst-dots.pro}{% + \ProvidesFile{pst-dots.pro}[2006/12/19 v. 2.00, PostScript prologue file (hv)] + \@addtofilelist{pst-dots.pro}}{}% +}{} +% +\ifpst@distiller + \pst@def{setTransparency}< + [ /ca \psk@opacityalpha + /CA \psk@opacityalpha /SetTransparency pdfmark > + \pst@def{setStrokeTransparency}< + [ /ca \psk@strokeopacityalpha + /CA \psk@strokeopacityalpha /SetTransparency pdfmark > + \pst@def{setBlendmode}< + [ /BM% + \ifcase\psk@blendmode + /Normal \or + /Compatible \or + /Screen \or + /Multiply \or + /HardLight \or + /Darken \or + /Lighten \or + /Difference \or + /ColorDodge \or + /ColorBurn \or + /SoftLight \or + /Hue \or + /Saturation \or + /Luminosity \or + /Overlay \or + /Exclusion \or + /Color + \else + /Normal + \fi + /ca \psk@shapealpha /CA \psk@opacityalpha /SetTransparency pdfmark > +\fi +% +\@ifpackageloaded{xcolor}{% + \@ifpackagelater{xcolor}{2004/05/02}% + {% + \let\pst@getcolor\XC@getcolor + \let\pst@usecolor\XC@usecolor + } + {% + \PackageError{pstricks}{% + *************************************************\MessageBreak + * Your Version of `xcolor.sty' is too old!\MessageBreak + * You need the version from 2004/05/02 or newer\MessageBreak + * or use: \string\usepackage[noxcolor]{pstricks}\MessageBreak + *************************************************}{}% + }% +}{% + \def\pst@getcolor#1#2{% + \@ifundefined{\string\color@#1}% + {\@pstrickserr{Color `#1' not defined}\@eha}% + {\edef#2{#1}}}% + \def\pst@usecolor#1{\expandafter\expandafter\expandafter\c@lor@to@ps% + \csname\string\color@#1\endcsname\@@\space}% + \definecolor{darkgray}{gray}{.25} + \definecolor{gray}{gray}{.5} + \definecolor{lightgray}{gray}{.75} +}% +% +\definecolor{gradbegin}{rgb}{0,1,1} +\definecolor{gradend}{rgb}{0,.1,.95} +% +\@ifundefined{xglobal}% + {\def\xglobal#1#2#3#4% UK 2005-11-17 + {#1{#2}{#3}{#4}% + \expandafter\global\expandafter\let\csname\string\color@#2% + \expandafter\endcsname\csname\string\color@#2\endcsname}}{}% +% +\def\newgray#1{% + \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 + \xglobal\definecolor{#1}{gray}}% +% +\def\newrgbcolor#1#2{% + \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 + \edef\@tempa{\noexpand\newrgbcolorx{#1}#2\noexpand\@@}\@tempa}% +\def\newrgbcolorx#1#2 #3 #4\@@{% + \xglobal\definecolor{#1}{rgb}{#2,#3,#4}} +% +\def\newcmykcolor#1#2{% + \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 + \edef\@tempa{\noexpand\newcmykcolorx{#1}#2\noexpand\@@}\@tempa} +\def\newcmykcolorx#1#2 #3 #4 #5\@@{% + \xglobal\definecolor{#1}{cmyk}{#2,#3,#4,#5}} +% +\def\newhsbcolor#1#2{% + \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 + \edef\@tempa{\noexpand\newhsbcolorx{#1}#2\noexpand\@@}\@tempa} +\def\newhsbcolorx#1#2 #3 #4\@@{% + \xglobal\definecolor{#1}{hsb}{#2,#3,#4}} +% +\definecolor{black}{gray}{0} +\definecolor{darkgray}{gray}{.25} +\definecolor{gray}{gray}{.5} +\definecolor{lightgray}{gray}{.75} +\definecolor{white}{gray}{1} +\definecolor{red}{rgb}{1,0,0} +\definecolor{green}{rgb}{0,1,0} +\definecolor{blue}{rgb}{0,0,1} +%\definecolor{yellow}{rgb}{1,1,0} +%\definecolor{cyan}{rgb}{0,1,1} +%\definecolor{magenta}{rgb}{1,0,1} +\definecolor{yellow}{cmyk}{0,0,1,0} +\definecolor{cyan}{cmyk}{1,0,0,0} +\definecolor{magenta}{cmyk}{0,1,0,0} +% +\renewcommand*\black{\color{black}} +\renewcommand*\darkgray{\color{darkgray}} +\renewcommand*\gray{\color{gray}} +\renewcommand*\lightgray{\color{lightgray}} +\renewcommand*\white{\color{white}} +\renewcommand*\blue{\color{blue}} +\renewcommand*\red{\color{red}} +\renewcommand*\green{\color{green}} +\renewcommand*\yellow{\color{yellow}} +\renewcommand*\magenta{\color{magenta}} +\renewcommand*\cyan{\color{cyan}} +% +\AtBeginDocument{% +% \psset{fillcolor=white}% hv 0.33 + \let\pst@endcolor=\relax% +% \let\pst@color=\relax% +% LaTeX used `\color@endgroup' instead. RN 2004-05-06 +} +\pst@cntm=0 +\ifXeTeX\pst@cntm=1\else\ifpst@xetex\pst@cntm=1\fi\fi + +\ifnum\pst@cntm>\z@ + \typeout{>>> Loading XeTeX special macros}% + \input{pstricks-xetex.def}% +\fi +% +%% End of file `pstricks.sty'. |