diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-plot')
13 files changed, 3231 insertions, 19 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-plot/Changes b/Master/texmf-dist/doc/generic/pst-plot/Changes index c33bc30f666..245c85c7d4f 100644 --- a/Master/texmf-dist/doc/generic/pst-plot/Changes +++ b/Master/texmf-dist/doc/generic/pst-plot/Changes @@ -1,4 +1,5 @@ ----- pst-plot.tex +1.48 2013-08-10 - allow x|ylabelOffset also for special Labels 1.47 2013-07-08 - added \psreadColumnData 1.46 2013-06-10 - fix bug with missing \relax in \get@label 1.45 2013-04-29 - fix for loglines with subticks>10 (pm) diff --git a/Master/texmf-dist/doc/generic/pst-plot/doc/Contents b/Master/texmf-dist/doc/generic/pst-plot/doc/Contents new file mode 100644 index 00000000000..fd84649dc46 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/Contents @@ -0,0 +1,4 @@ +pst-plot-doc.pdf: the main documentation +dtk02-1.pdf : Die mathematischen Funktionen von PostScript +dtk02-2.pdf : Die Plotfunktionen von pst-plot +tugboat01-4.pdf : The plot functions of pst-plot diff --git a/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-1.pdf b/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-1.pdf Binary files differnew file mode 100644 index 00000000000..0fc4ce30313 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-1.pdf diff --git a/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-2.pdf b/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-2.pdf Binary files differnew file mode 100644 index 00000000000..014508059ef --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-2.pdf diff --git a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.bib b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.bib index 95b2a67e6af..95b2a67e6af 100644 --- a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.bib +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.bib diff --git a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.dat b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.dat index 0a7bbbe462e..0a7bbbe462e 100644 --- a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.dat +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.dat diff --git a/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.pdf b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.pdf Binary files differnew file mode 100644 index 00000000000..fbcac7deaec --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.pdf diff --git a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.tex b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.tex index 07a6e04cb21..fd36215a17d 100644 --- a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.tex +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.tex @@ -804,18 +804,6 @@ can be outside of the visible \Lenv{pspicture} environment. } \end{lstlisting} - -\begin{LTXexample}[width=7cm] -\psset{xAxisLabel=,yAxisLabel=, - llx=-5mm,urx=1cm,lly=-5mm, - mathLabel=false, - xLabels={A,b,C,d,E,f,}, - xlabelsep=-5pt} -\begin{psgraph}{->}(5,5){6cm}{6cm} -\end{psgraph} -\end{LTXexample} - - \subsection{The new macro \Lcs{pslegend} for \nxLenv{psgraph}}\label{pslegend} \begin{BDef} @@ -1068,6 +1056,7 @@ redefinition, then do it for \Lcs{pst@@@hlabel} and \Lkeyword{xEnd} & integer or empty & \{\} & \pageref{nxend}\\ \Lkeyword{xLabels} & list & \{\Lcs{empty}\} & \pageref{xLabels}\\ \Lkeyword{xlabelFactor} & anything & \{\Lcs{@empty}\} & \pageref{labelfactor}\\ +\Lkeyword{xlabelOffset} & length & 0 & \pageref{labelOffset}\\ \Lkeyword{xlabelPos} & \Lkeyval{bottom},\Lkeyval{axis},\Lkeyval{top} & \Lkeyval{bottom} & \pageref{labelpos}\\ \Lkeyword{xlogBase} & integer or empty & \{\} & \pageref{xlogbase}\\ @@ -1093,6 +1082,7 @@ redefinition, then do it for \Lcs{pst@@@hlabel} and \Lkeyword{yEnd} & integer or empty & \{\} & \pageref{ystartend}\\ \Lkeyword{yLabels} & list & \{\Lcs{empty}\} & \pageref{xLabels}\\ \Lkeyword{ylabelFactor} & literal & \{\Lcs{empty}\} & \pageref{labelfactor}\\ +\Lkeyword{ylabelOffset} & length & 0 & \pageref{labelOffset}\\ \Lkeyword{ylabelPos} & \Lkeyval{left}|\Lkeyval{axis}|\Lkeyval{right} & \Lkeyval{left} & \pageref{labelpos}\\ \Lkeyword{ylogBase} & integer or empty & \{\} & \pageref{ylogbase}\\ @@ -1129,6 +1119,35 @@ redefinition, then do it for \Lcs{pst@@@hlabel} and \end{LTXexample} The values for \Lkeyword{xlabelsep} and \Lkeyword{ylabelsep} are taken into account. + +\subsection{Option \nxLkeyword{xLabelOffset} and \nxLkeyword{ylabelOffset}}\label{labelOffset} + + +\begin{LTXexample}[width=7cm] +\psset{xAxisLabel=,yAxisLabel=, + llx=-5mm,urx=1cm,lly=-5mm, + mathLabel=false,xlabelsep=-5pt, + xLabels={A,b,C,d,E,f}} +\begin{psgraph}{->}(5,2){6cm}{2cm} +\end{psgraph} +\end{LTXexample} + +\xLkeyword{xlabelOffset}\xLkeyword{xLabels}\xLkeyword{xlabelsep}\xLkeyword{mathLabel} +\begin{LTXexample}[width=7cm] +\psset{xAxisLabel=,yAxisLabel=, + llx=-5mm,urx=1cm,lly=-5mm, + mathLabel=false,xlabelsep=-5pt, + xLabels={,A,b,C,d,E}, + xlabelOffset=-0.5, + ylabelOffset=0.5} +\begin{psgraph}{->}(5,2){6cm}{2cm} +\end{psgraph} +\end{LTXexample} + + + + + %------------------------------------------------------------------------------------ \subsection{Option \nxLkeyword{yMaxValue} and \nxLkeyword{yMinValue}}\label{yMaxValue} %------------------------------------------------------------------------------------ @@ -1142,8 +1161,7 @@ two arguments \Lkeyword{yMaxValue} and \Lkeyword{yMinValue} can be set. - -\begingroup +\begin{lstlisting} \begin{pspicture}(-6.5,-6)(6.5,7.5) \multido{\rA=-4.71239+\psPiH}{7}{% \psline[linecolor=black!20,linestyle=dashed](\rA,-5.5)(\rA,6.5)} @@ -1151,15 +1169,16 @@ be set. \psaxes[trigLabelBase=2,dx=\psPiH,xunit=\psPi,trigLabels] {->}(0,0)(-1.7,-5.5)(1.77,6.5)[$x$,0][$y$,-90] \psclip{\psframe[linestyle=none](-4.55,-5.5)(5.55,6.5)} - \psplot[yMaxValue=6,yMinValue=-5,linewidth=2pt,linecolor=red]{-4.55}{4.55}{(x)/(sin(2*x))} + \psplot[?\ON?yMaxValue=6,yMinValue=-5?\OFF?,linewidth=2pt,linecolor=red]{-4.55}{4.55}{(x)/(sin(2*x))} \endpsclip \psplot[linestyle=dashed,linecolor=blue!30]{-4.8}{4.8}{x} \psplot[linestyle=dashed,linecolor=blue!30]{-4.8}{4.8}{-x} \rput(0,0.5){$\times$} \end{pspicture} -\endgroup +\end{lstlisting} -\begin{lstlisting} + +\begingroup \begin{pspicture}(-6.5,-6)(6.5,7.5) \multido{\rA=-4.71239+\psPiH}{7}{% \psline[linecolor=black!20,linestyle=dashed](\rA,-5.5)(\rA,6.5)} @@ -1167,13 +1186,13 @@ be set. \psaxes[trigLabelBase=2,dx=\psPiH,xunit=\psPi,trigLabels] {->}(0,0)(-1.7,-5.5)(1.77,6.5)[$x$,0][$y$,-90] \psclip{\psframe[linestyle=none](-4.55,-5.5)(5.55,6.5)} - \psplot[?\ON?yMaxValue=6,yMinValue=-5?\OFF?,linewidth=2pt,linecolor=red]{-4.55}{4.55}{(x)/(sin(2*x))} + \psplot[yMaxValue=6,yMinValue=-5,linewidth=2pt,linecolor=red]{-4.55}{4.55}{(x)/(sin(2*x))} \endpsclip \psplot[linestyle=dashed,linecolor=blue!30]{-4.8}{4.8}{x} \psplot[linestyle=dashed,linecolor=blue!30]{-4.8}{4.8}{-x} \rput(0,0.5){$\times$} \end{pspicture} -\end{lstlisting} +\endgroup \begingroup diff --git a/Master/texmf-dist/doc/generic/pst-plot/doc/tugboat01-4.pdf b/Master/texmf-dist/doc/generic/pst-plot/doc/tugboat01-4.pdf Binary files differnew file mode 100644 index 00000000000..eae65d2599b --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/doc/tugboat01-4.pdf diff --git a/Master/texmf-dist/doc/generic/pst-plot/latex/pst-plot.sty b/Master/texmf-dist/doc/generic/pst-plot/latex/pst-plot.sty new file mode 100644 index 00000000000..e515363d30d --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/latex/pst-plot.sty @@ -0,0 +1,37 @@ +% $Id: pst-plot.sty 541 2011-07-20 16:38:34Z herbert $ +%% +%% This is file `pst-plot.sty'. +%% +%% IMPORTANT NOTICE: +%% +%% pst-plot.sty Copyright (C) 2004-2011 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{pst-plot} + [2011/06/05 v1.00 LaTeX wrapper for `pst-plot' (HV)] +% +\newif\ifpst@OldVersion\pst@OldVersionfalse +\DeclareOption{97}{\pst@OldVersiontrue} +\ProcessOptions\relax +% +\ifpst@OldVersion +\RequirePackage[97]{pstricks} +\ProvidesPackage{pst-plot}[1993/03/12 package wrapper for pst-plot.tex] +\input{pst-plot97.tex} +\ProvidesFile{pst-plot.tex} + [\filedate\space \fileversion\space `pst-plot' (tvz)] +\else +\RequirePackage{pstricks} +\RequirePackage{pst-xkey} +\RequirePackage{multido} +\ProvidesPackage{pst-plot}[2011/04/13 package wrapper for pst-plot.tex (hv)] +\input{pst-plot.tex} +\ProvidesFile{pst-plot.tex} + [\filedate\space \fileversion\space `pst-plot' (tvz,hv)] +\fi +\endinput diff --git a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.pdf b/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.pdf Binary files differdeleted file mode 100644 index 49008f441e8..00000000000 --- a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot.tex b/Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot.tex new file mode 100644 index 00000000000..111a92abcaa --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot.tex @@ -0,0 +1,2509 @@ +% $Id: pst-plot.tex 817 2013-08-10 14:18:43Z herbert $ +%% BEGIN pst-plot.tex +%% +%% plotting functions and data with PSTricks. +%% See the betadoc documentation for usage. +%% +%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. +%% COPYRIGHT 2009-2013 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. +%% +% +\csname PSTplotLoaded\endcsname +\let\PSTplotLoaded\endinput +% +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey.tex\fi +\ifx\PSTFPloaded\endinput\else \input pst-fp.tex \fi +\ifx\MultidoLoaded\endinput\else \input multido.tex \fi +% +\def\fileversion{1.48} +\def\filedate{2013/08/10} +\message{ v\fileversion, \filedate\space (tvz,hv)} +% +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11 +% +\pst@addfams{pst-plot} +% +\def\pst@linetype{2}% +\SpecialCoor +% +\def\psPiFour{12.566371} +\def\psPiTwo{6.283185} +\def\psPi{3.14159265} +\def\psPiH{1.570796327} +\newdimen\pstRadUnit +\newdimen\pstRadUnitInv +\pstRadUnit=1.047198cm % this is pi/3 +\pstRadUnitInv=0.95493cm % this is 3/pi +% +% Using lists of data is optimized for \dataplot and \fileplot +% Here is the tricky part. As each line is read from file, +% we want to ignore trailing delimiters, and convert arbitrary +% strings of non-trailing delimiters to _D_. +% We end up with +% D x1 D y1 D x2 D y2 ... D xn D yn +% +\begingroup +\catcode`\{=13 +\catcode`\}=13 +\catcode`\(=13 +\catcode`\)=13 +\catcode`\,=13 +\catcode`\!=1 +\catcode`\*=2 +\catcode`\ =13 +\catcode`\_=13 +\catcode`\^^M=13 +\gdef\pst@datadelimiters!% Begin def +\catcode`\{=13% +\catcode`\}=13% +\catcode`\(=13% +\catcode`\)=13% +\catcode`\,=13% +\catcode`\ =13% +\catcode`\^^M=13% +\def,##1!% +\ifcat\noexpand,\noexpand##1% +\expandafter##1% +\else\space% +D\space##1% +\fi*% +\let(,\let),\let{,\let},\let ,\let^^M,\let_\@empty*% End def +\endgroup +\define@key[psset]{pst-plot}{ignoreLines}[0]{\def\psk@ignoreLines{#1}} +\psset[pst-plot]{ignoreLines=0} +% +\newcount\pst@linecnt +\begingroup +\catcode`\,=13 +\catcode`\_=13 +\gdef\savedata@#1[#2]{% + \xdef\pst@tempg{#2_}% + \endgroup + \let#1\pst@tempg + \global\let\pst@tempg\relax + \ignorespaces} +% +\gdef\readdata@{% + \read1 to \pst@tempA + \ifnum\pst@linecnt=\psk@nStep + \global\pst@linecnt=0 + \expandafter\readdata@@\pst@tempA_\@nil + \fi + \global\advance\pst@linecnt by 1 + \ifeof1\else\expandafter\readdata@\fi} +\gdef\pst@@readfile#1#2\@nil{\addto@pscode{,#1#2}}% +\gdef\readdata@@#1#2\@nil{\xdef\pst@tempg{\pst@tempg,#1#2}}% +\endgroup +% +\def\readdata{\@ifnextchar[{\readdata@i}{\readdata@i[]}} +\def\readdata@i[#1]#2#3{% +% \def\pst@tempA{#1}% + \openin1=#3 + \begingroup + \ifx#1\relax#1\else\psset{#1}\fi + \def\pst@tempg{}% + \ifeof1 + \@pstrickserr{Data file `#3' not found.}\@ehpa + \else + \pst@datadelimiters + \catcode`\[=1 + \catcode`\]=2 + \pst@cnta=0 + \loop \ifnum\the\pst@cnta<\psk@ignoreLines + \advance\pst@cnta by 1\relax + \read1 to \pst@tempA + \repeat + \psDEBUG[pst-plot]{>>> ignored \the\pst@cnta\space data lines}% + \global\pst@linecnt=\psk@nStep% + \readdata@% + \fi% + \endgroup% + \global\let#2\pst@tempg% + \global\let\pst@tempg\relax% +\ignorespaces} +% +\def\pst@readfile#1{{\let\readdata@@\pst@@readfile\readdata\pst@tempg{#1}}} +\def\pst@altreadfile#1{% + \openin1=#1 + \ifeof1 + \@pstrickserr{Data file `#1' not found.}\@ehpa + \else + \catcode`\{=10 + \catcode`\}=10 + \catcode`\(=10 + \catcode`\)=10 + \catcode`\,=10 + \catcode`\^^M=10 + \catcode`\[=1 + \catcode`\]=2 + \pst@@altreadfile + \fi} +\def\pst@@altreadfile{% + \read1 to \pst@tempg + \expandafter\pst@@@altreadfile\pst@tempg\@empty\@nil + \ifeof1\else\expandafter\pst@@@altreadfile\fi} +\def\pst@@@altreadfile#1#2\@nil{\addto@pscode{#1#2}}% +% +\def\savedata#1{\begingroup\pst@datadelimiters\savedata@{#1}} +% +\newread\RCD@file +\def\psreadDataColumn#1#2#3#4{% #1:column #2:delimiter #3:\result #4:data file + \immediate\openin\RCD@file=#4\relax + \global\let#3=\@empty + \loop + \read\RCD@file to \@tempa + \ifeof\RCD@file\else + %%%\typeout{*** \@tempa ***}% + \edef\@tempa{\@tempa#2}% + \def\reserved@b{}% + \@tempswafalse + \@tempcnta=#1\relax + \expandafter\@tfor\expandafter\reserved@a + \expandafter:\expandafter=\@tempa\do{% loop over every token + \if\reserved@a#2\relax% delimiter? + \advance\@tempcnta \m@ne + \ifnum \@tempcnta=\z@ + \expandafter\g@addto@macro\expandafter#3\expandafter{\reserved@b\space}% + \@tempswatrue + \fi + \def\reserved@b{}% ??? + \else + \edef\reserved@b{\reserved@b\reserved@a} + \fi + \if@tempswa\@break@tfor\fi + }% + \repeat + \immediate\closein\RCD@file +} + +%%%%%%%%%%%%%% the plot-styles %%%%%%%%%%%%%%%%%% +% +\def\beginplot@line{\begin@OpenObj} +\def\endplot@line{\psline@ii} +% +\def\beginplot@polygon{\begin@ClosedObj} +\def\endplot@polygon{\pspolygon@ii} +% +\def\beginplot@curve{\begin@OpenObj} +\def\endplot@curve{\pscurve@ii} +% +\def\beginplot@ecurve{\begin@OpenObj} +\def\endplot@ecurve{\psecurve@ii} +% +\def\beginplot@ccurve{\begin@ClosedObj} +\def\endplot@ccurve{\psccurve@ii} +% +\def\beginplot@dots{\begin@SpecialObj} +\def\endplot@dots{\psdots@ii} +% +\define@key[psset]{pst-plot}{Hue}[180]{\pst@getint{#1}\pst@HueAngle} +\psset[pst-plot]{Hue=180} +\def\beginplot@colordots{\begin@SpecialObj} +\def\endplot@colordots{% + \addto@pscode{% + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + newpath + /MaxValue 0 def + /m n 2 mul def + n { + dup MaxValue gt { dup /MaxValue ED } if + m 2 roll + } repeat + n { dup MaxValue div % y y + \pst@number\psyunit div abs % to orig y value + \pst@HueAngle\space 360 div exch dup sethsbcolor % 180 Y Y hsb color + transform floor .5 add exch floor + .5 add exch itransform Dot stroke } repeat }% + \end@SpecialObj% +} +% +\def\beginplot@bezier{\begin@OpenObj} +\def\endplot@bezier{\psbezier@ii} +% +\def\beginplot@cbezier{\begin@ClosedObj} +\def\endplot@cbezier{\pscbezier@ii} + +% added 2007-06-26 (hv) +\let\beginplot@LineToYAxis\beginplot@line % all from pst-plot +\def\endplot@LineToYAxis{\psLineToYAxis@ii} +\let\beginqp@LineToYAxis\beginqp@line +\let\doqp@LineToYAxis\doqp@line +\let\endqp@LineToYAxis\endqp@line +\let\testqp@LineToYAxis\testqp@line +\let\beginplot@LineToXAxis\beginplot@line +\def\endplot@LineToXAxis{\psLineToXAxis@ii} +\let\beginqp@LineToXAxis\beginqp@line +\let\doqp@LineToXAxis\doqp@line +\let\endqp@LineToXAxis\endqp@line +\let\testqp@LineToXAxis\testqp@line +% +\newif\ifPst@interrupt \Pst@interruptfalse +\define@key[psset]{pst-plot}{barwidth}[0.25cm]{\pst@getlength{#1}\Add@barwidth} +\psset[pst-plot]{barwidth=0.25cm} +\define@key[psset]{pst-plot}{interrupt}[]{\expandafter\pst@interrupt#1,,,\@nil} +\def\pst@interrupt#1,#2,#3,#4\@nil{% + \ifx\relax#1\relax \Pst@interruptfalse + \else + \Pst@interrupttrue + \def\pst@interrupt@YMax{#1 }% + \def\pst@interrupt@YMaxSep{#2 }% + \def\pst@interrupt@YMaxDiff{#3 }% + \fi +} +% +\def\psbar@ii{\addto@pscode{false \tx@NArray \psbar@iii}} + +\def\psbar@iii{% + \ifPst@interrupt + /YMax \pst@interrupt@YMax \strip@pt\psyunit\space mul def + /YMaxSep \pst@interrupt@YMaxSep \strip@pt\psyunit\space mul def + /YMaxDiff \pst@interrupt@YMaxDiff \strip@pt\psyunit\space mul def + /Tilde { % on stack DX + /Op ED % add or sub + /DX ED + currentpoint 2 copy + /Y ED /X ED % x y + X DX add Y YMaxSep 2 div Op + X DX dup add add Y + curveto + currentpoint 2 copy pop /X ED + X DX add Y YMaxSep 2 div neg Op + X DX dup add add Y + curveto + } def + newpath + n { + /Yval exch def /Xval exch def + Xval \number\Add@barwidth 0.5 mul sub 0 moveto + Yval YMax le { + 0 Yval rlineto \number\Add@barwidth 0 rlineto + 0 Yval neg rlineto \number\Add@barwidth neg 0 rlineto + }{ + 0 YMax rlineto + \number\Add@barwidth 4 div + { add } Tilde + 0 YMax neg rlineto + \number\Add@barwidth neg 0 rlineto + closepath + Xval \number\Add@barwidth 0.5 mul sub YMax YMaxSep add moveto + 0 Yval YMax sub YMaxSep sub YMaxDiff sub rlineto + \number\Add@barwidth 0 rlineto + 0 Yval YMax YMaxSep add sub YMaxDiff sub neg rlineto + \number\Add@barwidth 4 div neg + { sub } Tilde + } ifelse + } repeat + \else + newpath + n { + /Yval exch def /Xval exch def + Xval \number\Add@barwidth 0.5 mul sub 0 moveto + 0 Yval rlineto \number\Add@barwidth 0 rlineto + 0 Yval neg rlineto \number\Add@barwidth neg 0 rlineto + } repeat + \fi +}% +\def\beginplot@bar{\begin@SpecialObj} +\def\endplot@bar{% + \psbar@ii\psk@fillstyle\ifpsshadow\pst@closedshadow\fi% + \pst@stroke + \end@SpecialObj} +% +\def\psybar@ii{\addto@pscode{false \tx@NArray \psybar@iii}} +\def\psybar@iii{% + newpath + n { + /Yval exch def /Xval exch def + 0 Yval \number\Add@barwidth 0.5 mul sub moveto + Xval 0 rlineto 0 \number\Add@barwidth rlineto + Xval neg 0 rlineto 0 \number\Add@barwidth neg rlineto + } repeat +}% +\def\beginplot@ybar{\begin@SpecialObj} +\def\endplot@ybar{% + \psybar@ii\psk@fillstyle\ifpsshadow\pst@closedshadow\fi% + \pst@stroke + \end@SpecialObj} +% +% LSM Least Square Method 2006-03-13 (hv) +\def\psLSM@ii{\addto@pscode{ false \tx@NArray \psLSM@iii }} +\def\psLSM@iii{% + /xiSquare 0 def % xi*xi + /xi 0 def % xi + /fi 0 def % f(xi) + /xifi 0 def % xi*f(xi) + exch dup dup /xEnd ED /xStart ED exch + n { % number of data pairs + /Yval ED /Xval ED % save x y values + /xi xi Xval add def % sum xi + /xiSquare xiSquare Xval dup mul add def % sum xi*xi + /xifi xifi Xval Yval mul add def % sum xi*yi, same as xi*f(xi) + /fi fi Yval add def % sum yi, same as f(xi) + Xval xStart lt { /xStart Xval def } if % find the lowest xi + Xval xEnd gt { /xEnd Xval def } if % find the largest xi + } repeat + /u xiSquare fi mul xi xifi mul sub n xiSquare mul xi dup mul sub div def + /v n xifi mul xi fi mul sub n xiSquare mul xi dup mul sub div def + \Pst@Debug\space 0 gt { % print the equation + /Helvetica findfont 12 scalefont setfont + 0 -50 moveto (y=) show % print y= + v \pst@number\psyunit \pst@number\psxunit div div 20 string cvs show ( x+) show % m*x+ + u \pst@number\psyunit div 20 string cvs show } if + newpath + (\psk@xStart) length 0 gt % special start value? + { \psk@xStart\space \pst@number\psxunit mul } + { xStart } ifelse + dup v mul u add % xStart f(xStart) + moveto % goto first point x1 y(x1) + (\psk@xEnd) length 0 gt % special end value? + { \psk@xEnd\space \pst@number\psxunit mul } + { xEnd } ifelse + dup v mul u add % xEnd f(xEnd) + lineto % line to second point x2 y(x2) +}% +% +\def\beginplot@LSM{\begin@SpecialObj} +\def\endplot@LSM{% + \psLSM@ii\psk@fillstyle\ifpsshadow\pst@closedshadow\fi% + \pst@stroke + \end@SpecialObj} +% +\define@key[psset]{pst-plot}{IQLfactor}{\pst@checknum{#1}\pst@IQLfactor} +\psset[pst-plot]{IQLfactor=1.5} +% +\def\psBoxplot@ii{% + \addto@pscode{ + /Barwidth \number\Add@barwidth 2 div def + /Endwidth Barwidth \psk@arrowlength\space mul def + NArray bubblesort + /NArray ED % save sorted array + [ NArray { yUnit mul } forall ] /NArray ED % multiply with y unit + NArray 0 get /MinVal ED % save minimum + NArray m 1 sub get /MaxVal ED % maximum + m 2 div cvi /M ED % the middle + NArray length 2 mod 0 eq { % even numbers of entries + M 1 sub NArray exch get % even number of values + NArray M get % and the upper one + add 2 div /Median ED % the median + }{ + NArray M get /Median ED % odd numbers of values + } ifelse + m 4 mod 0 eq { % get the lower Quartil even/odd + m 4 div cvi dup 1 sub NArray exch get + exch NArray exch get +% M 2 div cvi 1 add dup /M2 ED % save middle index +% 1 sub NArray exch get +% NArray M2 get + add 2 div floor /LowerQuartil ED + }{ + NArray M 2 div cvi get /LowerQuartil ED + } ifelse % end even/odd + m 0.75 mul dup dup cvi sub 0 eq { % get the upper Quartil +% 0.75*m is an integer + cvi dup 1 sub NArray exch get exch NArray exch get +% M 1.5 mul cvi 1 add dup /M3 ED +% 1 sub NArray exch get +% NArray M3 get + add 2 div floor /UpperQuartil ED + }{ % upper quartil + NArray m 0.75 mul floor cvi get /UpperQuartil ED + } ifelse +% + /IQL UpperQuartil LowerQuartil sub \pst@IQLfactor\space mul def + 0 1 m 1 sub { % Index on stack + dup /Index ED + NArray exch get LowerQuartil sub abs IQL sub 0 gt { + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + 0 NArray Index get + Dot + NArray Index LowerQuartil UpperQuartil LowerQuartil sub \pst@IQLfactor\space mul sub + dup /MinVal ED put % replace with 1.5 IQL +% NArray Index 1 add get /MinVal ED + } { exit } ifelse + } for + m 1 sub -1 0 { % Index on stack + dup /Index ED + NArray exch get UpperQuartil sub abs IQL sub 0 gt { +% newpath + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + 0 NArray Index get + Dot + NArray Index UpperQuartil LowerQuartil sub \pst@IQLfactor\space mul UpperQuartil add + dup /MaxVal ED put % replace with 1.5 IQL + }{ exit } ifelse + } for +% + Endwidth neg MaxVal moveto % we are on top + Endwidth dup add 0 rlineto + 0 MaxVal moveto + 0 UpperQuartil lineto % upper quartil + 0 LowerQuartil moveto + 0 MinVal lineto + Endwidth neg MinVal moveto + Endwidth dup add 0 rlineto + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor + \tx@setStrokeTransparency +% \tx@setStrokeTransparency + \@nameuse{psls@\pslinestyle} + stroke + grestore + newpath + Barwidth neg LowerQuartil moveto % lower quartil + Barwidth neg UpperQuartil lineto + Barwidth dup add 0 rlineto + Barwidth LowerQuartil lineto + closepath + gsave \pst@usecolor\psfillcolor \tx@setTransparency fill grestore + Barwidth neg Median moveto % median + Barwidth dup add 0 rlineto + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor + \tx@setStrokeTransparency +% \tx@setStrokeTransparency + \@nameuse{psls@solid} +}}% +% +\def\beginplot@Boxplot{\init@pscode} +\def\endplot@Boxplot{% + \psBoxplot@ii\psk@fillstyle\ifpsshadow\pst@closedshadow\fi% + \pst@stroke + \end@SpecialObj} +% +\def\psBoxplot{\def\pst@par{}\pst@object{psBoxplot}} +\def\psBoxplot@i#1{% + \leavevmode + \pst@killglue + \begingroup + \addbefore@par{barwidth=40pt,arrowlength=0.75}% + \addto@par{plotstyle=Boxplot}% + \use@par + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{ + /D {} def + [ #1 ] /NArray ED + NArray aload length /m ED + /xUnit \pst@number\psxunit def + /yUnit \pst@number\psyunit def + }% + \@nameuse{endplot@\psplotstyle}% + \ignorespaces% +} +% +\define@key[psset]{pst-plot}{plotstyle}[line]{% + \@ifundefined{beginplot@#1}% + {\@pstrickserr{Plot style `#1' not defined}\@eha}% + {\def\psplotstyle{#1}}} +\psset[pst-plot]{plotstyle=line} +% +\define@key[psset]{pst-plot}{plotpoints}[50]{% + \pst@cntg=#1\relax + \ifnum\pst@cntg<2 + \@pstrickserr{plotpoints parameter must be at least 2}\@ehpa + \else + \advance\pst@cntg-1 + \edef\psk@plotpoints{\the\pst@cntg\space}% + \fi} +\psset[pst-plot]{plotpoints=50} +% +%the following works only for plotstyle line, polygon and bezier +\define@key[psset]{pst-plot}{yMaxValue}[1.e30]{\def\psk@yMaxValue{#1 }\def\psk@yMinValue{#1 neg }} +\psset{yMaxValue=1.e30} +\define@key[psset]{pst-plot}{yMinValue}[-1.e30]{\def\psk@yMinValue{#1 }} +\psset{yMinValue=-1.e30} +% can be in PS syntax (eg 1e1.2) and must be positiv! negative values +% will beignored +% +% For quick plots, define: +% \beginqp@<foo> : What to do to first point (PS code only). +% \doqp@<foo> : What to do to subsequent points (PS code only). +% \endqp@<foo> : How to end plot. +% \testqp@<foo> : Set \@psttrue if OK to use quick plot. +% +\def\beginqp@line{\pst@oplineto} +\def\doqp@line{ + dup + \psk@yMaxValue \pst@number\psyunit mul gt + { moveto } + { dup \psk@yMinValue \pst@number\psyunit mul lt + { moveto } + { L } ifelse + } ifelse +} +\def\endqp@line{% + \ifPst@variableLW \addto@pscode{ \pst@flattenpath }\fi% + \end@OpenObj}% + +\def\testqp@line{% + \ifdim\pslinearc>\z@\else + \ifshowpoints\else + \ifx\psk@arrowA\@empty + \ifx\psk@arrowB\@empty + \@psttrue + \fi + \fi + \fi + \fi} +% +\def\beginqp@polygon{moveto } +\def\doqp@polygon{ + dup + \psk@yMaxValue \pst@number\psyunit mul gt + { moveto }{ + dup + \psk@yMinValue \pst@number\psyunit mul lt + { moveto }{ L } ifelse + } ifelse +} +\def\endqp@polygon{% + \addto@pscode{closepath}% + \end@ClosedObj} +\def\testqp@polygon{% + \ifdim\pslinearc>\z@\else + \ifshowpoints\else + \@psttrue + \fi + \fi} +% +\def\beginqp@dots{% + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} +% DG/SR modification begin - Dec. 12, 1999 - Patch 2 +% /TheDot { gsave \psk@dotangle \psk@dotscale Dot grestore } def +% TheDot } + Dot } +%\def\doqp@dots{TheDot } +\def\doqp@dots{Dot } +% DG/SR modification end +\def\endqp@dots{\end@SpecialObj} +\def\testqp@dots{\@psttrue} +% +\def\beginqp@bezier{/n 0 def \pst@oplineto} +\def\doqp@bezier{/n n 1 add def n 3 mod 0 eq { % we need 3 points + dup \psk@yMaxValue\space \pst@number\psyunit mul gt + { moveto pop pop pop pop} + { dup \psk@yMinValue\space \pst@number\psyunit mul lt + { moveto pop pop pop pop}{ curveto } ifelse + } ifelse + } if +} +\def\endqp@bezier{% + \addto@pscode{n 3 mod { pop pop } repeat} + \end@OpenObj}% +\def\testqp@bezier{% + \ifshowpoints\else + \ifx\psk@arrowA\@empty + \ifx\psk@arrowB\@empty + \@psttrue + \fi + \fi + \fi} +% +\def\beginqp@cbezier{/n 0 def moveto } +\def\doqp@cbezier{\doqp@bezier} +\def\endqp@cbezier{% + \addto@pscode{n 3 mod { pop pop } repeat closepath} + \end@ClosedObj}% +\def\testqp@cbezier{\ifshowpoints\else\@psttrue\fi} +% +% added 2007-06-26 (hv) ------------------------------------------------- +\def\tx@LineToYAxis{LineToYAxis } +\def\psLineToYAxis@ii{% +\addto@pscode{\pst@cp \psline@iii \psk@Ox\space \pst@number\psxunit mul \tx@LineToYAxis}% +\end@OpenObj} +% +\def\tx@LineToXAxis{LineToXAxis } +\def\psLineToXAxis@ii{% +\addto@pscode{\pst@cp \psline@iii \psk@Oy\space \pst@number\psyunit mul \tx@LineToXAxis}% +\end@OpenObj} +% +\define@key[psset]{pst-plot}{PSfont}[Times-Roman]{\def\psk@PSfont{/#1 }} +\define@key[psset]{pst-plot}{valuewidth}[10]{\pst@getint{#1}\psk@valuewidth } +\define@key[psset]{pst-plot}{fontscale}[10]{\pst@checknum{#1}\psk@fontscale } +\define@key[psset]{pst-plot}{decimals}[-1]{\pst@getint{#1}\psk@decimals } +\psset[pst-plot]{PSfont=Times-Roman,fontscale=10,valuewidth=10,decimals=-1} +% +\newdimen\psxlabelsep +\newdimen\psylabelsep +\define@key[psset]{pst-plot}{xlabelsep}[5pt]{\pssetlength\psxlabelsep{#1}} +\define@key[psset]{pst-plot}{ylabelsep}[5pt]{\pssetlength\psylabelsep{#1}} +\psset[pst-plot]{xlabelsep=5pt,ylabelsep=5pt} + +% +\newif\ifPst@valuesStar\Pst@valuesStarfalse +\newif\ifPst@xvalues\Pst@xvaluesfalse +% +\def\psvalues@ii{\addto@pscode{ false \tx@NArray \psvalues@iii }} +\def\psvalues@iii{ + \psk@PSfont findfont \psk@fontscale scalefont setfont + newpath + n { /yO ED /xO ED + gsave + \ifPst@xvalues + xO \pst@number\psxunit div + \else + yO \pst@number\psyunit div + \fi + \psk@decimals 0 eq { cvi } if + \psk@decimals 0 gt { 10 \psk@decimals exp dup 3 1 roll mul cvi exch div } if + \psk@valuewidth string cvs /Str ED + \ifPst@valuesStar + Str stringwidth pop /yS \psk@fontscale def /xS ED + gsave newpath + xO \ifPst@xvalues \pst@number\pslabelsep add \fi + yO \ifPst@xvalues\else \pst@number\pslabelsep add \fi + moveto \ifx\psk@rot\@empty\else\psk@rot rotate \fi + xS 0 rlineto 0 yS rlineto xS neg 0 rlineto 0 yS neg rlineto + closepath 1 setgray fill stroke + grestore + \fi + xO \ifPst@xvalues \pst@number\pslabelsep add \fi + yO \ifPst@xvalues\else \pst@number\pslabelsep add \fi + moveto \ifx\psk@rot\@empty\else\psk@rot rotate \fi + Str show + grestore } repeat +}% +\def\beginplot@values{\Pst@valuesStarfalse\begin@SpecialObj} +\expandafter\def\csname beginplot@values*\endcsname{\Pst@valuesStartrue\begin@SpecialObj} +\def\beginplot@xvalues{\Pst@valuesStarfalse\begin@SpecialObj} +\expandafter\def\csname beginplot@xvalues*\endcsname{\Pst@valuesStartrue\begin@SpecialObj} +\def\endplot@values{% + \Pst@xvaluesfalse% + \psvalues@ii% + \pst@stroke + \end@SpecialObj} +\@namedef{endplot@values*}{\endplot@values} +\def\endplot@xvalues{% + \Pst@xvaluestrue% + \psvalues@ii% + \pst@stroke + \end@SpecialObj} +\@namedef{endplot@xvalues*}{\endplot@xvalues} +% +% end (hv) -------------------------------------------------------------- +% +% +\def\psdataplot{\def\pst@par{}\pst@object{dataplot}} +\def\dataplot{\def\pst@par{}\pst@object{dataplot}} +\def\dataplot@i#1{% + \pst@killglue + \begingroup + \use@par + \@pstfalse + \@nameuse{testqp@\psplotstyle}% + \if@pst + \dataplot@ii{\addto@pscode{#1}}% + \else + \listplot@ii{\addto@pscode{#1}}% + \fi + \endgroup + \ignorespaces} +% +\def\dataplot@ii#1{% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{% + /Dx { \pst@number\psxunit mul /D { Dy } def } def + /Dy { \pst@number\psyunit mul Do /D { Dx } def } def + /D { /D { Dx } def } def + /Do { + \@nameuse{beginqp@\psplotstyle}% + /Do { \@nameuse{doqp@\psplotstyle}} def + } def}% + #1% % this is \pst@readfile{#1} for fileplot + \addto@pscode{ D }% + \@nameuse{endqp@\psplotstyle}} +% +\def\psfileplot{\def\pst@par{}\pst@object{fileplot}} +\def\fileplot{\def\pst@par{}\pst@object{fileplot}} +\def\fileplot@i#1{% + \pst@killglue% + \begingroup% + \use@par% + \@pstfalse% + \@nameuse{testqp@\psplotstyle}% + \if@pst\dataplot@ii{\pst@readfile{#1}}\else\listplot@ii{\pst@altreadfile{#1}}\fi% + \endgroup% + \ignorespaces} +% +\def\pslistplot{\pst@object{listplot}} +\def\listplot{\pst@object{listplot}} +\def\listplot@i#1{\listplot@ii{\addto@pscode{#1}}} +\def\listplot@ii#1{% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{/D {} def mark}% + #1% + \addto@pscode{ + \tx@PreparePoints + \pst@number\psxunit + \pst@number\psyunit + \tx@ScalePoints + }% + \@nameuse{endplot@\psplotstyle}% +} +% +\define@boolkey[psset]{pst-plot}[Psk@]{xyValues}[true]{} +\define@boolkey[psset]{pst-plot}[Pst@]{ChangeOrder}[true]{} +\psset[pst-plot]{xyValues,ChangeOrder=false} +% +\pst@def{PreparePoints}<{% + counttomark /m exch def + /maxYValues \psk@plotNoMax\space def + /YValuePos \psk@plotNo\space def + /XValuePos \psk@plotNoX\space def + \ifPsk@xyValues\else % we have only y values + /mm m def + /M m 1 add def + m { mm exch M 2 roll /M M 1 add def /mm mm 1 sub def } repeat + /m m dup add def + \fi + \ifPst@ChangeOrder + /m0 m def + m maxYValues 1 add div 1 sub cvi { + m0 maxYValues 1 add roll /m0 m0 maxYValues 1 add sub def + } repeat + \fi + /n m maxYValues 1 add div cvi def +% +% when having multiple x values, we first delete the first X value +% and then put the plotNoX onto the first position +% + XValuePos 1 gt {% multiple x values? x y y xNo y + n { + maxYValues 1 add XValuePos neg roll % y x y y xNo + dup /XValue ED + maxYValues 1 add XValuePos 1 sub roll % y y xNo y x + pop XValue % y y xNo y xNo + maxYValues 1 add 1 roll % xNo y y xNo y + m maxYValues 1 add roll % next values + } repeat + } if % no multiple data files + maxYValues 1 gt {% multiple data files? x y y yNo y + n { + maxYValues YValuePos 1 sub neg roll % x yNo y y y ... + maxYValues 1 sub { pop } repeat % x yNo + /m m maxYValues 1 sub sub def + m 2 roll + } repeat + } if % no multiple data files +% counttomark /m exch def +% /n m 2 div cvi def + /xMax -99999 def /yMax -99999 def + /xP 0 def /yP 0 def + m copy + n { + /y exch def /x exch def + xMax x lt { /xMax x def } if + yMax y lt {/yMax y def } if + xP x gt { /xP x def } if + yP y gt { /yP y def } if + } repeat +% m 2 roll + \psk@xStep\space 0 gt \psk@yStep\space 0 gt or (\psk@xStart) length 0 gt or + (\psk@yStart) length 0 gt or (\psk@xEnd) length 0 gt or (\psk@yEnd) length 0 gt or { +% + (\psk@xStart) length 0 gt {\psk@xStart\space }{ xP } ifelse /xStart exch def + (\psk@yStart) length 0 gt {\psk@yStart\space }{ yP } ifelse /yStart exch def + (\psk@xEnd) length 0 gt { \psk@xEnd\space }{ xMax } ifelse /xEnd exch def + (\psk@yEnd) length 0 gt { \psk@yEnd\space }{ yMax } ifelse /yEnd exch def + n { + m -2 roll + 2 copy /yVal exch def /xVal exch def + xVal xP ge + yVal yP ge and + xVal xEnd le and + yVal yEnd le and + xVal xStart ge and + yVal yStart ge and { + /xP xP \psk@xStep\space add def + /yP yP \psk@yStep\space add def + }{% + pop pop + /m m 2 sub def + } ifelse + } repeat + }{% + /ncount 1 def + (\psk@nEnd) length 0 gt { \psk@nEnd\space }{ m } ifelse + /nEnd exch def + n { + m -2 roll + \psk@nStep\space 1 gt { ncount \psk@nStart\space sub \psk@nStep\space mod 0 eq }{ true } ifelse + ncount nEnd le and + ncount \psk@nStart\space ge and not { +% ncount nEnd le and +% ncount \psk@nStart\space ge and not { + pop pop + /m m 2 sub def + } if + /ncount ncount 1 add def + } repeat + } ifelse +}> +% +% \psplot +% D.G. addition - Jun. 9, 1998 - Polar plots using the \psplot macro +% Code added according the way suggested by Ulrich Dirr +% For polar plots +\define@boolkey[psset]{pst-plot}[Pst@]{polarplot}[true]{} +\define@boolkey[psset]{pst-plot}[Pst@]{VarStep}[true]{} +\define@key[psset]{pst-plot}{PlotDerivative}{\def\psk@PlotDerivative{#1}}% +\define@key[psset]{pst-plot}{VarStepEpsilon}{\def\psk@VarStepEpsilon{#1}}% +\define@key[psset]{pst-plot}{method}{\def\psk@method{#1}}% adams - rk4 +\def\@rkiv{rk4}% Runge-Kutta 4 method +\def\@varrkiv{varrkiv}% Runge-Kutta 4 with an adaptive step method +\def\@adams{adams}% Adams method +\def\@default{default}% Adams method +\psset[pst-plot]{VarStep=false,PlotDerivative=none,VarStepEpsilon=default,polarplot=false,method={}} +% +\def\psplotinit#1{\xdef\psplot@init{#1 }} +\def\psplot@init{} +% +\def\psplot{\def\pst@par{}\pst@object{psplot}} +\def\psplot@i#1#2{\@ifnextchar[{\psplot@x{#1}{#2}}{\psplot@x{#1}{#2}[]}} +\def\psplot@x#1#2[#3]#4{% + \pst@killglue% + \begingroup% + \use@par% + \@nameuse{beginplot@\psplotstyle}% + \ifPst@polarplot% + \addto@pscode{ + \psplot@init + #3 + /x #1 def + /x1 #2 def + /dx x1 x sub \psk@plotpoints div def + /F@pstplot \ifPst@algebraic (#4) + \ifx\psk@PlotDerivative\@none\else + \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat + \fi\space + tx@AlgToPs begin AlgToPs end cvx + \else { #4 } \fi def + \ifPst@VarStep + /StillZero 0 def /LastNonZeroStep dx def + /F2@pstplot tx@Derive begin (#4) (x) Derive (x) Derive end + \ifx\psk@PlotDerivative\@none\else + \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat + \fi\space + tx@AlgToPs begin AlgToPs end cvx def + %% computation of the tolerance defined by plotpoints + /epsilon12 \ifx\psk@VarStepEpsilon\@default tx@Derive begin F2@pstplot end dx 3 exp abs mul abs + \else\psk@VarStepEpsilon\space 12 mul \fi def + /ComputeStep { + dup 1e-4 lt + { pop StillZero 2 ge { LastNonZeroStep 2 mul } { LastNonZeroStep } ifelse /StillZero StillZero 1 add def } + { epsilon12 exch div 1 3 div exp /StillZero 0 def } + ifelse } bind def + \fi + /xy {% Adapted from \parametricplot@i + F@pstplot x \ifPst@algebraic RadtoDeg \fi PtoC +% #4 dup x cos mul exch x sin mul + \pst@number\psyunit mul exch + \pst@number\psxunit mul exch + } def}% + \else% polarplot + \addto@pscode{ + \psplot@init + #3 + /x #1 def + /x1 #2 def + /dx x1 x sub \psk@plotpoints div def + /F@pstplot \ifPst@algebraic (#4) + \ifx\psk@PlotDerivative\@none\else + \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat + \fi\space + tx@AlgToPs begin AlgToPs end cvx + \else { #4 } \fi def + \ifPst@VarStep + /StillZero 0 def /LastNonZeroStep dx def + /F2@pstplot tx@Derive begin (#4) (x) Derive (x) Derive end + \ifx\psk@PlotDerivative\@none\else + \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat + \fi\space + tx@AlgToPs begin AlgToPs end cvx def + %% computation of the tolerance defined by plotpoints + /epsilon12 \ifx\psk@VarStepEpsilon\@default tx@Derive begin F2@pstplot end dx 3 exp abs mul abs + \else\psk@VarStepEpsilon\space 12 mul \fi def + /ComputeStep { + dup 1e-4 lt + { pop StillZero 2 ge { LastNonZeroStep 2 mul } { LastNonZeroStep } ifelse /StillZero StillZero 1 add def } + { epsilon12 exch div 1 3 div exp /StillZero 0 def } + ifelse } bind def + \fi + /xy { x \pst@number\psxunit mul F@pstplot \pst@number\psyunit mul +% \ifPst@algebraic F@pstplot \else #4 \fi \pst@number\psyunit mul + } def}% + \fi% + \gdef\psplot@init{}% + \ifx\pslinestyle\psls@@symbol + \psplot@iii + \else + \@pstfalse% + \@nameuse{testqp@\psplotstyle}% + \if@pst\psplot@ii\else\psplot@iii\fi% + \fi% + \endgroup% + \ignorespaces} +% +\def\psplot@ii{% + \ifPst@VarStep% + \addto@pscode{% + mark xy \@nameuse{beginqp@\psplotstyle} + { F2@pstplot abs ComputeStep + x 2 copy add dup x1 gt {pop x1} if /x exch def F2@pstplot abs ComputeStep + /x 3 -1 roll def 2 copy gt { exch } if pop + /x x 3 -1 roll add dup x1 gt {pop x1} if def + xy \@nameuse{doqp@\psplotstyle} + x x1 eq { exit } if} loop}% + \else + \pst@killglue% + \addto@pscode{ + /ps@Exit false def + xy \@nameuse{beginqp@\psplotstyle} + \ifx\psk@method\@varrkiv\else\psk@plotpoints 1 sub \fi { + /x x dx add \ifx\psk@method\@varrkiv dup x1 gt { pop x1 } if \fi def + xy \@nameuse{doqp@\psplotstyle} + \ifx\psk@method\@varrkiv x x1 eq { exit } if \fi + } + ps@Exit { exit } if + \ifx\psk@method\@varrkiv loop \else repeat \fi + ps@Exit not { + /x x1 def + xy \@nameuse{doqp@\psplotstyle} + } if }% + \fi% + \@nameuse{endqp@\psplotstyle}} +% +\def\psplot@iii{% + \ifPst@VarStep% + \addto@pscode{ + /n 2 def + mark + { xy n 2 roll F2@pstplot abs + ComputeStep x 2 copy add dup x1 gt {pop x1} if + /x exch def F2@pstplot abs ComputeStep + /x 3 -1 roll def 2 copy gt { exch } if pop + /x x 3 -1 roll dup /LastNonZeroStep exch def add dup x1 gt {pop x1} if def /n n 2 add def + x x1 eq { exit } if } loop + xy + n 2 roll}% + \else\pst@killglue% + \addto@pscode{ + mark + /n 2 def + \ifx\psk@method\@varrkiv\else\psk@plotpoints\fi { + xy + n 2 roll + /n n 2 add def + /x x dx add \ifx\psk@method\@varrkiv dup x1 gt { pop x1 } if \fi def + \ifx\psk@method\@varrkiv x x1 eq { exit } if \fi + } \ifx\psk@method\@varrkiv loop\else repeat \fi \space + /x x1 def + xy + 2 copy \tx@UserCoor 2 array astore /SaveFinalState ED + n 2 roll}% + \fi% + \@nameuse{endplot@\psplotstyle}} +% +\def\psparametricplot{\pst@object{parametricplot}}% hv 2008-11-22 +\def\parametricplot{\pst@object{parametricplot}} +\def\parametricplot@i#1#2{\@ifnextchar[{\parametricplot@x{#1}{#2}}{\parametricplot@x{#1}{#2}[]}} +\def\parametricplot@x#1#2[#3]{\@ifnextchar[{\parametricplot@xi{#1}{#2}[#3]}{\parametricplot@xi{#1}{#2}[#3][]}} +\def\parametricplot@xi#1#2[#3][#4]#5{% + \pst@killglue% + \begingroup% + \use@par% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{% + #3 %prefix PS code + \psplot@init + /t #1 def + /t1 #2 def + /dt t1 t sub \psk@plotpoints div def + /F@pstplot \ifPst@algebraic (#5) + \ifx\psk@PlotDerivative\@none\else + \psk@PlotDerivative\space { (t) tx@Derive begin Derive end } repeat + \fi\space + tx@AlgToPs begin AlgToPs end cvx + \else { #5 } \fi def + \ifPst@VarStep + /StillZero 0 def /LastNonZeroStep dt def + /F2@pstplot tx@Derive begin (#5) (t) Derive (t) Derive end + \ifx\psk@PlotDerivative\@none\else + \psk@PlotDerivative\space { (t) tx@Derive begin Derive end } repeat + \fi\space + tx@AlgToPs begin AlgToPs end cvx def + %% computation of the tolerance defined by plotpoints + /epsilon12 \ifx\psk@VarStepEpsilon\@default + tx@Derive begin F2@pstplot end Pyth + dt 3 exp abs mul + \else\psk@VarStepEpsilon\space 12 mul \fi def + /ComputeStep { + dup 1e-4 lt + { pop StillZero 2 ge { LastNonZeroStep 2 mul } { LastNonZeroStep } ifelse /StillZero StillZero 1 add def } + { epsilon12 exch div 1 3 div exp /StillZero 0 def } + ifelse } bind def + \fi + /xy { + \ifPst@algebraic F@pstplot \else #5 \fi + \pst@number\psyunit mul exch + \pst@number\psxunit mul exch + } def + }% + \gdef\psplot@init{}% + \@pstfalse + \@nameuse{testqp@\psplotstyle}% + \if@pst\parametricplot@ii{#4}\else\parametricplot@iii{#4}\fi + \endgroup% + \ignorespaces} +% +\def\parametricplot@ii#1{% para is the post code + \ifPst@VarStep% + \addto@pscode{% + mark xy \@nameuse{beginqp@\psplotstyle} + { F2@pstplot Pyth ComputeStep + t 2 copy add dup t1 gt {pop t1} if /t exch def F2@pstplot Pyth ComputeStep + /t 3 -1 roll def 2 copy gt { exch } if pop + /t t 3 -1 roll add dup t1 gt {pop t1} if def + xy \@nameuse{doqp@\psplotstyle} + t t1 eq { exit } if } loop}% + \else\pst@killglue% + \addto@pscode{% + /ps@Exit false def + xy \@nameuse{beginqp@\psplotstyle} + \psk@plotpoints 1 sub { + /t t dt add def + xy \@nameuse{doqp@\psplotstyle} + ps@Exit { exit } if + } repeat + ps@Exit not { + /t t1 def + xy \@nameuse{doqp@\psplotstyle} + } if + }% + \fi% + \addto@pscode{ #1 }% + \@nameuse{endqp@\psplotstyle}} +% +\def\parametricplot@iii#1{% + \ifPst@VarStep% + \addto@pscode{% + /n 2 def + mark + { xy n 2 roll F2@pstplot Pyth + ComputeStep t 2 copy add dup t1 gt {pop t1} if + /t exch def F2@pstplot Pyth ComputeStep + /t 3 -1 roll def 2 copy gt { exch } if pop + /t t 3 -1 roll dup /LastNonZeroStep exch def add dup t1 gt {pop t1} if def /n n 2 add def + t t1 eq { exit } if } loop + xy n 2 roll}% + \else\pst@killglue% + \addto@pscode{ + mark + /n 2 def + \psk@plotpoints { + xy + n 2 roll + /n n 2 add def + /t t dt add def + } repeat + /t t1 def + xy + n 2 roll}% + \fi% + \addto@pscode{ #1 }% + \@nameuse{endplot@\psplotstyle}} +% +% +\newdimen\psk@subticksize\psk@subticksize=\z@ +\newdimen\pst@xticksizeA +\newdimen\pst@xticksizeB +\newdimen\pst@xticksizeC +\newdimen\pst@yticksizeA +\newdimen\pst@yticksizeB +\newdimen\pst@yticksizeC +% +\define@key[psset]{pst-plot}{ticks}[all]{\pst@expandafter\psset@@ticks{#1}\@nil\psk@ticks} +\def\psset@@ticks#1#2\@nil#3{% + \ifx#1a\let#3\z@\else% 0=a)ll + \ifx#1x\let#3\@ne\else% 1=x + \ifx#1y\let#3\tw@\else% 2=y + \ifx#1n\let#3\thr@@\else% 3=n)one + \@pstrickserr{Bad argument: `#1#2'}\@ehpa + \fi\fi\fi\fi} +\psset[pst-plot]{ticks=all} +% +\define@key[psset]{pst-plot}{labels}[all]{\pst@expandafter\psset@@ticks{#1}\@nil\psk@labels}% same as ticks +\psset[pst-plot]{labels=all} +% +\define@key[psset]{pst-plot}{Ox}[0]{\def\psk@Ox{#1}} +\psset[pst-plot]{Ox=0} +\define@key[psset]{pst-plot}{Dx}[1]{\def\psk@Dx{#1}} +\psset[pst-plot]{Dx=1} +\define@key[psset]{pst-plot}{dx}[0]{% + \pssetxlength\pst@dimg{#1}% + \edef\psk@dx{\number\pst@dimg}} +\psset[pst-plot]{dx=0} +% +\define@key[psset]{pst-plot}{Oy}[0]{\def\psk@Oy{#1}} +\psset[pst-plot]{Oy=0} +\define@key[psset]{pst-plot}{Dy}[1]{\def\psk@Dy{#1}} +\psset[pst-plot]{Dy=1} +\define@key[psset]{pst-plot}{dy}[0]{% + \pssetylength\pst@dimg{#1}% + \edef\psk@dy{\number\pst@dimg}} +\psset[pst-plot]{dy=0} +% +\define@boolkey[psset]{pst-plot}[]{showorigin}[true]{} +\psset[pst-plot]{showorigin} +% +\define@key[psset]{pst-plot}{labelFontSize}[{}]{\def\psk@labelFontSize{#1}}% +\define@boolkey[psset]{pst-plot}[Pst@]{mathLabel}[true]{% + \ifPst@mathLabel% + \def\pshlabel##1{$\psk@labelFontSize##1$}% + \def\psvlabel##1{$\psk@labelFontSize##1$}% + \else% + \def\pshlabel##1{\psk@labelFontSize##1}% + \def\psvlabel##1{\psk@labelFontSize##1}% + \fi} +\psset[pst-plot]{labelFontSize={},mathLabel} +% +\define@key[psset]{pst-plot}{decimalSeparator}[.]{\def\psk@decimalSeparator{#1}}% +\define@boolkey[psset]{pst-plot}[Pst@]{comma}[true]{% + \ifPst@comma\def\psk@decimalSeparator{,}\else\def\psk@decimalSeparator{.}\fi} +\define@boolkey[psset]{pst-plot}[Pst@]{xAxis}[true]{} +\define@boolkey[psset]{pst-plot}[Pst@]{yAxis}[true]{} +\define@boolkey[psset]{pst-plot}[Pst@]{xyAxes}[true]{% + \@nameuse{Pst@xAxis#1}\@nameuse{Pst@yAxis#1}}% +\psset[pst-plot]{decimalSeparator=.,xAxis,yAxis,comma=false,}% +% +\define@key[psset]{pst-plot}{xlabelPos}[b]{\pst@expandafter\psset@@xlabelPos{#1}\@nil} +\define@key[psset]{pst-plot}{ylabelPos}[l]{\pst@expandafter\psset@@ylabelPos{#1}\@nil} +\def\psset@@xlabelPos#1#2\@nil{% + \ifx#1t + \def\psk@xlabelPos{\tw@}% 2=top + \pst@xticksizeC=\pst@xticksizeB% + \else + \ifx#1a + \def\psk@xlabelPos{\@ne}% 1=axis + \pst@xticksizeC=\z@% + \else + \def\psk@xlabelPos{\z@}% 0=bottom + \pst@xticksizeC=\pst@xticksizeA% + \fi\fi}% +\def\psset@@ylabelPos#1#2\@nil{% + \ifx#1r + \def\psk@ylabelPos{\tw@}% 2=right + \pst@yticksizeC=\pst@yticksizeB% + \else + \ifx#1a + \def\psk@ylabelPos{\@ne}% 1=axis + \pst@yticksizeC=\z@% + \else + \def\psk@ylabelPos{\z@}% 0=left + \pst@yticksizeC=\pst@yticksizeA% + \fi\fi} +\psset[pst-plot]{xlabelPos=b, ylabelPos=l}% +% +\define@key[psset]{pst-plot}{xyDecimals}[{}]{\def\psk@xDecimals{#1}\def\psk@yDecimals{#1}} +\define@key[psset]{pst-plot}{xDecimals}[{}]{\def\psk@xDecimals{#1}} +\define@key[psset]{pst-plot}{yDecimals}[{}]{\def\psk@yDecimals{#1}} +\psset[pst-plot]{xyDecimals={}}% +% +\define@key[psset]{pst-plot}{xlogBase}[{}]{\def\psk@xlogBase{#1}} +\define@key[psset]{pst-plot}{ylogBase}[{}]{\def\psk@ylogBase{#1}} +\define@key[psset]{pst-plot}{xylogBase}[{}]{\def\psk@xlogBase{#1}\def\psk@ylogBase{#1}}% +\psset[pst-plot]{xylogBase={}}% +% +\define@key[psset]{pst-plot}{trigLabelBase}[0]{\pst@getint{#1}{\psk@trigLabelBase}} +\psset[pst-plot]{trigLabelBase=0} +% +\define@boolkey[psset]{pst-plot}[Pst@]{xtrigLabels}[true]{% + \ifPst@xtrigLabels + \def\pst@@@hlabel##1{\pshlabel{##1}} + \def\pshlabel##1{% + \ifnum\psk@trigLabelBase<2 + \def\de@nominator{\@ne}\else\def\de@nominator{\psk@trigLabelBase}\fi + \def\pst@tempA{##1} + \pst@abs{\pst@tempA}\pst@cntm + \pst@mod{\pst@cntm}{\de@nominator}\pst@cntp % cntb=##1 modulo trigLabelBase + \ifnum\@ne>\pst@cntp % 1 > modulo -> then we have pi/x + \pst@cnto=\pst@cntm \divide\pst@cnto by \de@nominator + \ifPst@mathLabel% + $\psk@labelFontSize + \ifnum\pst@tempA<0 -\fi + \ifnum\pst@cnto=\@ne % #1 = trigLabelBase + \pi % print pi + \else + \the\pst@cnto\pi % print \pst@cnto/\de@nominator pi + \fi$% + \else% + \psk@labelFontSize% + \ifnum\pst@tempA<0 -\fi% + \ifnum\pst@cnto=\@ne% % #1 = trigLabelBase + $\pi$% % print pi + \else% + \the\pst@cnto$\pi$% % print \pst@cnto/\de@nominator pi + \fi% + \fi% + \else% + \ifPst@mathLabel% + $\psk@labelFontSize% + \ifnum\pst@cntp=\@ne% % < 1 pi? + \if\pst@cntm=\@ne% + \frac{\pi}{\de@nominator}% % pi/x + \else\ifnum\pst@tempA=-1 \frac{-\pi}{\de@nominator}% + \else \ifnum\pst@tempA=1 \frac{\pi}{\de@nominator}% + \else\frac{\pst@tempA\pi}{\de@nominator}% (x pi)/y + \fi\fi\fi% + \else% + \ifnum\pst@tempA=1 \frac{\pi}{\de@nominator}% + \else\ifnum\pst@tempA=\de@nominator \pi% + \else\frac{\pst@tempA\pi}{\de@nominator}% + \fi\fi\fi$% + \else% + \psk@labelFontSize% + \ifnum\pst@cntp=\@ne% % < 1 pi? + \if\pst@cntm=\@ne% + $\frac{\pi}{\de@nominator}$% % pi/x + \else\ifnum\pst@tempA=-1 $\frac{-\pi}{\de@nominator}$% + \else \ifnum\pst@tempA=1 $\frac{\pi}{\de@nominator}$% + \else$\frac{\pst@tempA\pi}{\de@nominator}$% (x pi)/y + \fi\fi\fi% + \else% + \ifnum\pst@tempA=1 $\frac{\pi}{\de@nominator}$% + \else\ifnum\pst@tempA=\de@nominator $\pi$% + \else$\frac{\pst@tempA\pi}{\de@nominator}$% + \fi\fi\fi% + \fi% + \fi% + }% + \else% + \def\pst@@@hlabel##1{% + \edef\@xyDecimals{\psk@xDecimals}% +% \ifnum\psk@ticks<\tw@ % ticks=all|x + \ifnum\psk@labels<\tw@ % labels=all|x + \ifx\psk@xlogBase\@empty% + \pshlabel{\psk@labelFontSize\expandafter\@LabelComma##1..\@nil\psk@xlabelFactor}% + \else% + \ifPst@mathLabel% + \pshlabel{\psk@labelFontSize\psk@xlogBase^{\expandafter\@stripDecimals##1..\@nil}}% + \else% + \pshlabel{\psk@labelFontSize\psk@xlogBase\textsuperscript{\expandafter\@stripDecimals##1..\@nil}}% + \fi + \fi% + \fi% + }% + \ifPst@mathLabel% + \def\pshlabel##1{$\psk@labelFontSize##1$}\else\def\pshlabel##1{\psk@labelFontSize##1}\fi% + \fi% +}% +% +\define@boolkey[psset]{pst-plot}[Pst@]{ytrigLabels}[true]{% + \ifPst@ytrigLabels + \def\pst@@@vlabel##1{\psvlabel{##1}} + \def\psvlabel##1{% + \ifnum\psk@trigLabelBase<2 + \def\de@nominator{\@ne}\else\def\de@nominator{\psk@trigLabelBase}\fi + \def\pst@tempA{##1} + \pst@abs{\pst@tempA}\pst@cntm + \pst@mod{\pst@cntm}{\de@nominator}\pst@cntp % cntb=##1 modulo trigLabelBase + \ifnum\@ne>\pst@cntp % 1 > modulo -> then we have pi/x + \pst@cnto=\pst@cntm \divide\pst@cnto by \de@nominator + \ifPst@mathLabel% + $\psk@labelFontSize + \ifnum\pst@tempA<0 -\fi + \ifnum\pst@cnto=\@ne % #1 = trigLabelBase + \pi % print pi + \else + \the\pst@cnto\pi % print \pst@cnto/\de@nominator pi + \fi$% + \else% + \psk@labelFontSize% + \ifnum\pst@tempA<0 -\fi% + \ifnum\pst@cnto=\@ne% % #1 = trigLabelBase + $\pi$% % print pi + \else% + \the\pst@cnto$\pi$% % print \pst@cnto/\de@nominator pi + \fi% + \fi% + \else% + \ifPst@mathLabel% + $\psk@labelFontSize% + \ifnum\pst@cntp=\@ne% % < 1 pi? + \if\pst@cntm=\@ne% + \frac{\pi}{\de@nominator}% % pi/x + \else\ifnum\pst@tempA=-1 \frac{-\pi}{\de@nominator}% + \else \ifnum\pst@tempA=1 \frac{\pi}{\de@nominator}% + \else\frac{\pst@tempA\pi}{\de@nominator}% (x pi)/y + \fi\fi\fi% + \else% + \ifnum\pst@tempA=1 \frac{\pi}{\de@nominator}% + \else\ifnum\pst@tempA=\de@nominator \pi% + \else\frac{\pst@tempA\pi}{\de@nominator}% + \fi\fi\fi$% + \else% + \psk@labelFontSize% + \ifnum\pst@cntp=\@ne% % < 1 pi? + \if\pst@cntm=\@ne% + $\frac{\pi}{\de@nominator}$% % pi/x + \else\ifnum\pst@tempA=-1 $\frac{-\pi}{\de@nominator}$% + \else \ifnum\pst@tempA=1 $\frac{\pi}{\de@nominator}$% + \else$\frac{\pst@tempA\pi}{\de@nominator}$% (x pi)/y + \fi\fi\fi% + \else% + \ifnum\pst@tempA=1 $\frac{\pi}{\de@nominator}$% + \else\ifnum\pst@tempA=\de@nominator $\pi$% + \else$\frac{\pst@tempA\pi}{\de@nominator}$% + \fi\fi\fi% + \fi% + \fi% + }% + \else + \def\pst@@@vlabel##1{% + \edef\@xyDecimals{\psk@yDecimals}% +% \ifodd\psk@ticks % ticks=all||y (0,2) + \ifodd\psk@labels % labelss=all||y (0,2) + \else% + \ifx\psk@ylogBase\@empty% + \psvlabel{\expandafter\@LabelComma##1..\@nil\psk@ylabelFactor}% + \else% + \ifPst@mathLabel% + \psvlabel{\psk@ylogBase^{\expandafter\@stripDecimals##1..\@nil }}% + \else + \psvlabel{\psk@ylogBase\textsuperscript{\expandafter\@stripDecimals##1..\@nil }}% + \fi% + \fi% + \fi% + }% + \fi}% +\define@boolkey[psset]{pst-plot}[Pst@]{trigLabels}[true]{% + \ifPst@trigLabels\psset[pst-plot]{xtrigLabels,ytrigLabels=false} + \else \psset[pst-plot]{xtrigLabels=false,ytrigLabels=false}% + \fi} +\psset[pst-plot]{trigLabels=false} +% +%logLines=all|x|y|none (0,1,2,3) +\def\psk@logLines{3} +\define@key[psset]{pst-plot}{logLines}[none]{\pst@expandafter\psset@@logLines#1\@nil\psk@logLines} +\def\psset@@logLines#1#2\@nil#3{% + \ifx#1a + \let#3\z@ + \Pst@maxxTickstrue\Pst@maxyTickstrue + \set@xticksize{0 4pt}\set@yticksize{0 4pt}% + \def\psk@xsubticksize{1}\def\psk@ysubticksize{1}% + \else + \ifx#1x + \let#3\@ne + \Pst@maxxTickstrue\Pst@maxyTicksfalse + \set@xticksize{0 4pt}\def\psk@xsubticksize{1}% + \else + \ifx#1y + \let#3\tw@ + \Pst@maxyTickstrue\Pst@maxxTicksfalse + \set@yticksize{0 4pt}\def\psk@ysubticksize{1}% + \else + \ifx#1n\let#3\thr@@\else + \@pstrickserr{Bad argument: `#1#2'}\@ehpa + \fi\fi\fi\fi} +\psset[pst-plot]{logLines=none}% +% +\define@key[psset]{pst-plot}{ylabelFactor}[\relax]{\def\psk@ylabelFactor{#1}} +\define@key[psset]{pst-plot}{xlabelFactor}[\relax]{\def\psk@xlabelFactor{#1}} +\define@boolkey[psset]{pst-plot}[Pst@]{showOriginTick}[true]{}% +\psset[pst-plot]{xlabelFactor=\relax,ylabelFactor=\relax,showOriginTick}% + +%% #1 : optional arguments passed to psline +%% #2 : rotating angle +%% #3 : x value +%% #4 : label +\def\psxTick{\pst@object{psxTick}}% idea by Martin Chicoine +\def\psxTick@i{\@ifnextchar({\psxTick@ii{0}}\psxTick@ii} +\def\psxTick@ii#1(#2)#3{{ + \pst@killglue + \addbefore@par{arrows=-,linewidth=\psk@xtickwidth\pslinewidth} + \use@par + \psline(#2, \pst@xticksizeB)(#2,\pst@xticksizeA) + \rput[t]{#1}(! \psk@origin + #2 \pst@number\psxlabelsep \pst@number\pst@xticksizeB add + \pst@number\psyunit div neg ){\pshlabel{#3\vphantom{1}}}}\ignorespaces} +% +%% #1 : optional arguments passed to psline +%% #2 : rotating angle +%% #3 : y value +%% #4 : label +\def\psyTick{\pst@object{psyTick}}% idea by Martin Chicoine +\def\psyTick@i{\@ifnextchar({\psyTick@ii{0}}\psyTick@ii} +\def\psyTick@ii#1(#2)#3{{ + \pst@killglue + \addbefore@par{arrows=-,linewidth=\psk@ytickwidth\pslinewidth} + \use@par + \psline(\pst@yticksizeB,#2)(\pst@yticksizeA,#2) + \rput[r]{#1}(! \psk@origin + \pst@number\pst@yticksizeB \pst@number\psylabelsep add + \pst@number\psxunit div neg #2){\psvlabel{#3}}}\ignorespaces} +% +\def\psCoordinates{\pst@object{psCoordinates}} +\def\psCoordinates@i(#1){% + \pst@killglue% + \begin@OpenObj + \SpecialCoor% + \psline(#1|0,0)(#1)\psline(#1)(0,0|#1)\psdot(#1)% + \end@OpenObj% + \ignorespaces% +} +% +\def\stripDecimals#1{\expandafter\@stripDecimals#1..\@nil} +%% #1 integer +%% #2 decimals +%% #3 dot +\def\@stripDecimals#1.#2.#3\@nil{% + \def\pst@dummy{#1}% + \ifx\pst@dummy\@empty\the\@zero\else#1\fi% the integer part +} +% +\newcount\@digitcounter\@digitcounter=0\relax +\def\@inc@digitcounter{\global\advance\@digitcounter by 1\relax} +\def\@get@digitcounter{\the\@digitcounter\relax} +\def\@Reset@digitcounter{\global\@digitcounter=0\relax} +\def\@zeroFill{% + \ifnum \@xyDecimals>\@get@digitcounter + \bgroup + 0\@inc@digitcounter\@zeroFill + \egroup% + \fi% +} +% #1 the value, maybe empty +% +\def\@process@digits#1#2;{% + \ifx *#1\@zeroFill\else#1\@inc@digitcounter + \ifnum\@xyDecimals>\@get@digitcounter\expandafter\@process@digits#2;\fi\fi% +} +% +\def\@writeDecimals#1{% + \ifx\@xyDecimals\@empty% take value as is + \def\@tempa{#1}% write only if not empty + \ifx\@tempa\@empty% write nothing + \else\ifmmode\expandafter\mathord\expandafter{\psk@decimalSeparator}\else\psk@decimalSeparator\fi#1\fi% +% \else\psk@decimalSeparator\fi% + \else% write only \xy@decimals + \ifnum\@xyDecimals>\@zero + \ifmmode\expandafter\mathord\expandafter{\psk@decimalSeparator}\else\psk@decimalSeparator\fi% +% \psk@decimalSeparator + \@Reset@digitcounter + \expandafter\@process@digits#1*; + \fi% + \fi% +} +%% #1 integer +%% #2 decimals +%% #3 dot +\def\@LabelComma#1.#2.#3\@nil{% + \def\pst@tempA{#1}% + \ifx\pst@tempA\@empty\the\@zero\else#1\fi% the integer part + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty\@writeDecimals{}\else\@writeDecimals{#2}\fi} +% +% +\def\set@xticksize#1{% + \pst@expandafter\pst@getydimdim{#1} {} {}\@nil% y-unit!! + \ifdim\pst@dimm>\pst@dimn% % first > second value + \pst@xticksizeA=\the\pst@dimn% + \pst@xticksizeB=\the\pst@dimm% + \else% + \pst@xticksizeA=\the\pst@dimm% + \pst@xticksizeB=\the\pst@dimn% first > second value + \fi% + \edef\psk@xticksize{\pst@number\pst@xticksizeA \pst@number\pst@xticksizeB}% + \ifnum\psk@xlabelPos<\z@\relax % top + \pst@xticksizeC=\pst@dimn% + \else% + \pst@xticksizeC=\pst@dimm% bottom + \fi% +} +\def\set@yticksize#1{% + \pst@expandafter\pst@getxdimdim{#1} {} {}\@nil% x-unit! + \ifdim\pst@dimm>\pst@dimn\relax% % first > second value + \pst@yticksizeA=\the\pst@dimn% + \pst@yticksizeB=\the\pst@dimm% + \else% + \pst@yticksizeA=\the\pst@dimm% + \pst@yticksizeB=\the\pst@dimn% first > second value + \fi% + \edef\psk@yticksize{\pst@number\pst@yticksizeA \pst@number\pst@yticksizeB}% + \ifnum\psk@ylabelPos<\z@ % right + \pst@yticksizeC=\pst@dimn% + \else% + \pst@yticksizeC=\pst@dimo% left + \fi% +} +\newif\ifPst@maxxTicks +\newif\ifPst@maxyTicks +\define@key[psset]{pst-plot}{ticksize}[-4pt 4pt]{% + \def\pst@tempA{max}% + \def\pst@tempB{#1}% + \ifx\pst@tempA\pst@tempB% + \Pst@maxxTickstrue\Pst@maxyTickstrue% + \set@xticksize{0 4pt}\set@yticksize{0 4pt}% + \else% + \Pst@maxxTicksfalse\Pst@maxyTicksfalse% + \set@xticksize{#1}\set@yticksize{#1}% + \fi} +\define@key[psset]{pst-plot}{xticksize}{% + \def\pst@tempA{max}% + \def\pst@tempB{#1}% + \ifx\pst@tempA\pst@tempB + \Pst@maxxTickstrue\set@xticksize{0 4pt}% + \else\set@xticksize{#1}\Pst@maxxTicksfalse\fi} +\define@key[psset]{pst-plot}{yticksize}{% + \def\pst@tempA{max}% + \def\pst@tempB{#1}% + \ifx\pst@tempA\pst@tempB% + \Pst@maxyTickstrue\set@yticksize{0 4pt}% + \else\set@yticksize{#1}\Pst@maxyTicksfalse\fi}% +\psset[pst-plot]{ticksize=-4pt 4pt} +% +% full= 0, top=1, bottom=-1, inner=2 => -1 0 1 2 +\define@key[psset]{pst-plot}{tickstyle}[full]{\pst@expandafter\psset@@tickstyle{#1}\@nil} +\def\psset@@tickstyle#1#2\@nil{% + \ifx#1f\let\psk@tickstyle\z@\else % 0=f)ull + \ifx#1t\let\psk@tickstyle\@ne % 1=t)op + \edef\psk@xticksize{0 \pst@number\pst@xticksizeB}% + \edef\psk@yticksize{0 \pst@number\pst@yticksizeB}% + \else\ifx#1b\let\psk@tickstyle\m@ne % -1=b)ottom + \edef\psk@xticksize{\pst@number\pst@xticksizeA 0}% + \edef\psk@yticksize{\pst@number\pst@yticksizeA 0}% + \else\ifx#1i\let\psk@tickstyle\tw@% % 2=i)nner (for frame) + \else\@pstrickserr{Bad tick style: `#1#2'}\@ehpa + \fi\fi\fi\fi} +\psset[pst-plot]{tickstyle=full} +% +\define@key[psset]{pst-plot}{subticks}[1]{\def\psk@xsubticks{#1}\def\psk@ysubticks{#1}} +\define@key[psset]{pst-plot}{xsubticks}[1]{\def\psk@xsubticks{#1}} +\define@key[psset]{pst-plot}{ysubticks}[1]{\def\psk@ysubticks{#1}} +% +\define@key[psset]{pst-plot}{subticksize}[0.75]{\def\psk@xsubticksize{#1}\def\psk@ysubticksize{#1}} +\define@key[psset]{pst-plot}{xsubticksize}[0.75]{\def\psk@xsubticksize{#1}} +\define@key[psset]{pst-plot}{ysubticksize}[0.75]{\def\psk@ysubticksize{#1}} +% +\define@key[psset]{pst-plot}{tickwidth}[0.5\pslinewidth]{% + \pst@getlength{#1}\psk@xtickwidth% + \pst@getlength{#1}\psk@ytickwidth} +\define@key[psset]{pst-plot}{xtickwidth}[0.5\pslinewidth]{\pst@getlength{#1}\psk@xtickwidth} +\define@key[psset]{pst-plot}{ytickwidth}[0.5\pslinewidth]{\pst@getlength{#1}\psk@ytickwidth} +\define@key[psset]{pst-plot}{subtickwidth}[0.25\pslinewidth]{% + \pst@getlength{#1}\psk@xsubtickwidth% + \pst@getlength{#1}\psk@ysubtickwidth} +\define@key[psset]{pst-plot}{xsubtickwidth}[0.25\pslinewidth]{\pst@getlength{#1}\psk@xsubtickwidth} +\define@key[psset]{pst-plot}{ysubtickwidth}[0.25\pslinewidth]{\pst@getlength{#1}\psk@ysubtickwidth} +% +\define@key[psset]{pst-plot}{labelOffset}[0pt]{% + \pst@getlength{#1}\psk@xlabelOffset% + \pst@getlength{#1}\psk@ylabelOffset} +\define@key[psset]{pst-plot}{xlabelOffset}[0pt]{\pst@getlength{#1}\psk@xlabelOffset} +\define@key[psset]{pst-plot}{ylabelOffset}[0pt]{\pst@getlength{#1}\psk@ylabelOffset} +% +\define@key[psset]{pst-plot}{tickcolor}[black]{% + \pst@getcolor{#1}\psk@xtickcolor% + \pst@getcolor{#1}\psk@ytickcolor} +\define@key[psset]{pst-plot}{xtickcolor}[black]{\pst@getcolor{#1}\psk@xtickcolor} +\define@key[psset]{pst-plot}{ytickcolor}[black]{\pst@getcolor{#1}\psk@ytickcolor} +\define@key[psset]{pst-plot}{subtickcolor}[gray]{% + \pst@getcolor{#1}\psk@xsubtickcolor% + \pst@getcolor{#1}\psk@ysubtickcolor} +\define@key[psset]{pst-plot}{xsubtickcolor}[gray]{\pst@getcolor{#1}\psk@xsubtickcolor} +\define@key[psset]{pst-plot}{ysubtickcolor}[gray]{\pst@getcolor{#1}\psk@ysubtickcolor} +% +\define@key[psset]{pst-plot}{xticklinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psxticklinestyle{#1}}} +\define@key[psset]{pst-plot}{xsubticklinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psxsubticklinestyle{#1}}} +\define@key[psset]{pst-plot}{yticklinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psyticklinestyle{#1}}} +\define@key[psset]{pst-plot}{ysubticklinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psysubticklinestyle{#1}}} +\define@key[psset]{pst-plot}{ticklinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psxticklinestyle{#1}\def\psyticklinestyle{#1}}} +\define@key[psset]{pst-plot}{subticklinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psxsubticklinestyle{#1}\def\psysubticklinestyle{#1}}} +% +\psset[pst-plot]{subticksize=0.75,subticks=1,tickcolor=black,ticklinestyle=solid, + subticklinestyle=solid,subtickcolor=gray,tickwidth=0.5\pslinewidth, + subtickwidth=0.25\pslinewidth,labelOffset=0pt} +% +\define@key[psset]{pst-plot}{nStep}[1]{\def\psk@nStep{#1}} +\define@key[psset]{pst-plot}{nStart}[0]{\def\psk@nStart{#1}} +\define@key[psset]{pst-plot}{nEnd}[{}]{\def\psk@nEnd{#1}} +\define@key[psset]{pst-plot}{xStep}[0]{\def\psk@xStep{#1}} +\define@key[psset]{pst-plot}{yStep}[0]{\def\psk@yStep{#1}} +% +\define@key[psset]{pst-plot}{xStart}[{}]{\def\psk@xStart{#1}} +\define@key[psset]{pst-plot}{xEnd}[{}]{\def\psk@xEnd{#1}} +\define@key[psset]{pst-plot}{yStart}[{}]{\def\psk@yStart{#1}} +\define@key[psset]{pst-plot}{yEnd}[{}]{\def\psk@yEnd{#1}} +% +\define@key[psset]{pst-plot}{plotNoX}[1]{\def\psk@plotNoX{#1}} +\define@key[psset]{pst-plot}{plotNo}[1]{\def\psk@plotNo{#1}} +\define@key[psset]{pst-plot}{plotNoMax}[1]{\def\psk@plotNoMax{#1}} +% +\psset[pst-plot]{nStep=1, nStart=0, nEnd={},% + xStep=0, yStep=0, xStart={}, xEnd={}, yStart={}, yEnd={}, comma=false,% + plotNo=1,plotNoMax=1,plotNoX=1}% +% +\def\pstScalePoints(#1,#2)#3#4{% +% xScale | yScale | xOperator | yOperator +% the operators can be any Postscript code + \def\pstXScale{#1 }% + \def\pstYScale{#2 }% + \def\pstXPSScale{#3 }% + \def\pstYPSScale{#4 }% + \pst@def{ScalePoints}<% + /y ED /x ED + /yPSOp { #4 y mul #2 mul } def + /xPSOp { #3 x mul #1 mul } def + counttomark dup dup cvi eq not { exch pop } if + /m exch def /n m 2 div cvi def + n { + yPSOp m 1 roll xPSOp m 1 roll + /m m 2 sub + def } repeat>% +} +\pstScalePoints(1,1){}{}% the default -> no special operators +% +\def\psxs@none{\let\psk@arrowA\@empty\let\psk@arrowB\@empty\psxs@axes} +% +\def\psxs@axes{{% + \ifPst@xAxis\psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{}{x}\fi% + \ifPst@yAxis\psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{exch}{y}\fi% +}} +% +\def\psaxes{\pst@object{psaxes}} +\def\psaxes@i{\pst@getarrows\psaxes@ii} +\def\psaxes@ii(#1){\@ifnextchar({\psaxes@iii(#1)}{\psaxes@iv(0,0)(0,0)(#1)}} +\def\psaxes@iii(#1)(#2){\@ifnextchar({\psaxes@iv(#1)(#2)}{\psaxes@iv(#1)(#1)(#2)}} +\def\psaxes@iv(#1)(#2)(#3){\@ifnextchar[{\psaxes@v(#1)(#2)(#3)}{\psaxes@vii(#1)(#2)(#3)}}% +\def\psaxes@v(#1)(#2)(#3)[#4]{\@ifnextchar[{\psaxes@vi(#1)(#2)(#3)[#4]}{\psaxes@vi(#1)(#2)(#3)[#4][]}}% +\def\psaxes@vi(#1)(#2)(#3)[#4,#5][#6,#7]{% + \psaxes@vii(#1)(#2)(#3)% + \begingroup% + \use@par% + \uput{\psxlabelsep}[#5](#3|#1){#4}\uput{\psylabelsep}[#7](#1|#3){#6}% + \endgroup% + \ignorespaces} +% +\def\psaxes@vii(#1,#2)(#3,#4)(#5,#6){% + \pst@killglue% + \begingroup% + \pssetxlength\pst@dimc{#5}% ur-x + \pssetylength\pst@dimd{#6}% ur-y + \ifdim\pst@dimc<\z@\ifdim\pst@dimd<\z@\relax% axes show to left and down + \addbefore@par{xlabelPos=top,ylabelPos=right}\fi\fi% + \setbox\pst@hbox=\hbox\bgroup% + \use@par% now the same with an optional unit=... in par + \pssetxlength\pst@dimg{#1}% o-x + \pssetylength\pst@dimh{#2}% o-y + \pssetxlength\pst@dima{#3}% ll-x + \pssetylength\pst@dimb{#4}% ll-y + \pssetxlength\pst@dimc{#5}% ur-x + \pssetylength\pst@dimd{#6}% ur-y +% If minimum values are negative in log mode, we modify Ox +% (respectively Oy) if this was not done by the user +% X axis labels (\psk@log = 0 or 1) +% +% Whole thing will be translated to origin: + \advance\pst@dima by -\pst@dimg% Dist. from ll-x to o-x + \advance\pst@dimb by -\pst@dimh% Dist. from ll-y to o-y + \advance\pst@dimc by -\pst@dimg% Dist. from ur-x to o-x + \advance\pst@dimd by -\pst@dimh% Dist. from ur-y to o-y +% Make lines/arrows or frame: + \@nameuse{psxs@\psk@axesstyle}% \psxs@axes or \psxs@frame or \psxs@polar + \ifPst@yAxis% + \begingroup% + \ifdim\pst@dima=\z@\else\showoriginfalse\fi% + \ifnum\psk@dy=\z@% + \pst@dimg=\psk@Dy\psyunit% + \ifdim\pst@dimg<\p@\pst@cnta=\psk@Dy\edef\psk@Dy{-\the\pst@cnta}\fi% v.1.21 + \edef\psk@dy{\number\pst@dimg}% + \fi% +% \ifPst@xAxis\else\showorigintrue\fi% 2009-10-21 + \pst@vlabels{\pst@dimd}{\psk@arrowB}{#3}{#5}% + \ifPst@xAxis\ifdim\pst@dima<\z@\showoriginfalse\fi\fi% no 0 when x- axis is crossing + \pst@vlabels{\pst@dimb}{\psk@arrowA}{#3}{#5}% + \endgroup% + \fi% + \ifPst@xAxis% + \begingroup% + \ifdim\pst@dimb=\z@\else\showoriginfalse\fi% + \ifnum\psk@dx=\z@% + \pst@dimg=\psk@Dx\psxunit% + \ifdim\pst@dimg<\p@\pst@cnta=\psk@Dx\edef\psk@Dx{-\the\pst@cnta}% v.1.21 + \fi% v.1.21 + \edef\psk@dx{\number\pst@dimg}% + \fi% +% \ifPst@yAxis\else\showorigintrue\fi% 2009-10-21 + \pst@hlabels{\pst@dimc}{\psk@arrowB}{#4}{#6}% + \ifPst@yAxis\showoriginfalse\fi% + \pst@hlabels{\pst@dima}{\psk@arrowA}{#4}{#6}% + \endgroup% + \fi% +% Now close "\pst@hbox" (which is 0-dimensional), and put it at the origin. + \egroup% + \pssetxlength\pst@dimg{#1}% + \pssetylength\pst@dimh{#2}% + \leavevmode\psput@cartesian\pst@hbox% + \endgroup% + \ignorespaces% +} +% +\newif\ifis@yAxis% +% +\def\psxs@@axes#1#2#3#4#5#6{% llx,lly,urx,ury,exch,x|y,arrowA,arrowB + \pst@killglue% + \begin@SpecialObj% + \ifx#6x\relax% % x-axis? + \is@yAxisfalse% + \ifnum\psk@dx=\z@% + \pst@dimg=\psk@Dx\psxunit% + \def\psk@dx{\number\pst@dimg}% + \fi% + \else% + \is@yAxistrue% + \ifnum\psk@dy=\z@% + \pst@dimg=\psk@Dy\psyunit% + \def\psk@dy{\number\pst@dimg}% + \fi% + \fi% + \let\pst@linetype\pst@arrowtype% + \def\pst@axes{axes}% + \pst@addarrowdef% + \addto@pscode{ + /showOrigin \ifPst@showOriginTick true \else false \fi def % ticks for 0/0 ? + \ifis@yAxis 0 \pst@number#4 \else \pst@number#3 0 \fi + \ifis@yAxis 0 \pst@number#2 \else \pst@number#1 0 \fi + ArrowA + CP 4 2 roll + ArrowB + 2 copy + /yEnd exch def /xEnd exch def + \ifx\psk@axesstyle\@none + pop pop % axesstyle = none (only ticks) or frame (already drawn) + \else + L % the line with arrows + \@nameuse{psls@\pslinestyle} % linestyle for the axes + stroke % draw the main line + \fi + /yStart exch def + /xStart exch def +% \psk@ticks: all=0; x=1; y=2; none=3 + \number\psk@ticks\space dup 2 mod 0 eq \ifis@yAxis true \else false \fi and + exch 2 lt \ifis@yAxis false \else true \fi and or { + /viceversa + \ifis@yAxis\pst@number#2 \pst@number#4 \else\pst@number#1 \pst@number#3 \fi + gt { true }{ false } ifelse def % other way round + /epsilon 0.01 def % rounding errors + /minTickline \ifis@yAxis \pst@number#1 \else \pst@number#2 \fi def + /maxTickline \ifis@yAxis \pst@number#3 \else \pst@number#4 \fi def + /dT \ifis@yAxis \psk@dy \else \psk@dx \fi\space abs % added abs 2006-07-07 + 65536 div viceversa { neg } if def % div to get pt instead of sp + /DT \ifis@yAxis \psk@Dy \else \psk@Dx \fi\space abs viceversa { neg } if def + /subTNo \ifis@yAxis\psk@ysubticks\else\psk@xsubticks\fi \space def + subTNo 0 gt { /dsubT dT subTNo div def}{ /dsubT 0 def } ifelse % deltaSubTick + \ifis@yAxis \psk@yticksize \else \psk@xticksize \fi + /tickend exch def /tickstart exch def + /Twidth \ifis@yAxis \psk@ytickwidth \else \psk@xtickwidth \fi\space def + /subTwidth \ifis@yAxis \psk@ysubtickwidth \else \psk@xsubtickwidth \fi\space def + /STsize \ifis@yAxis \psk@ysubticksize \else \psk@xsubticksize \fi\space def + /TColor { + \ifis@yAxis\pst@usecolor\psk@ytickcolor + \else\pst@usecolor\psk@xtickcolor\fi\space } def + /subTColor { + \ifis@yAxis\pst@usecolor\psk@ysubtickcolor + \else\pst@usecolor\psk@xsubtickcolor\fi\space } def + /MinValue { \ifis@yAxis yStart \else xStart \fi + \ifx\psk@arrowA\@empty\else + \psk@arrowsize\space CLW mul add \psk@arrowlength\space mul + viceversa { sub epsilon add }{ add epsilon sub } ifelse \fi } def + /MaxValue { \ifis@yAxis yEnd \else xEnd \fi + \ifx\psk@arrowB\@empty\else + \psk@arrowsize\space CLW mul add \psk@arrowlength\space mul + viceversa { add epsilon sub }{ sub epsilon add } ifelse \fi } def + /logLines { + \ifnum\psk@logLines=\z@ true \else % all axes + \ifnum\psk@logLines<\tw@ % x axis + \ifis@yAxis false \else true \fi % do we have x or y axis + \else + \ifnum\psk@logLines<\thr@@ % y axis + \ifis@yAxis true \else false \fi % do we have x or y axis + \else + false % no one + \fi + \fi + \fi + } def + /LSstroke { % set linestyle and stroke + \ifis@yAxis\@nameuse{psls@\psyticklinestyle} + \else\@nameuse{psls@\psxticklinestyle}\fi stroke} def + /subLSstroke { % set sublinestyle and stroke + \ifis@yAxis\@nameuse{psls@\psysubticklinestyle} + \else\@nameuse{psls@\psxsubticklinestyle}\fi stroke} def +%\iffalse +% start ticks --------------------------------------------------------- +% showOrigin { 0 }{ dT } ifelse + 0 dT MaxValue 1 add { % the positive part of the axes, step unit is pt + /cntTick exch def % the index + logLines { % log lines? + gsave + 1 1 DT { + 1 sub /OffSet exch def +% 1 10 subTNo div 9.99 { % do not write a line for 1 +% 10 subTNo 1 add div dup 10 { % do not write a line for 1 + -10 subTNo 1 add div dup 10 add exch dup -0.1 mul 1 add { % do not write a line for 10 and 1, trace lines between 10 and 1 by steps of 10/subTno + /dx exch def % save index +% /x cntTick dT dx log mul add def % + /x dx log OffSet add \ifis@yAxis\pst@number\psyunit\else\pst@number\psxunit\fi\space mul cntTick add def % + x abs MaxValue abs le { % out of range? + \ifis@yAxis + \ifPst@maxyTicks true \else false \fi + \else + \ifPst@maxxTicks true \else false \fi + \fi + { x minTickline #5 moveto + x maxTickline #5 lineto } + { x tickstart STsize mul #5 moveto + x tickend STsize mul #5 lineto } ifelse + } if + } for } for + subTwidth SLW subTColor % set line width and subtick color + subLSstroke + grestore % restore main tick status + stroke + /dsubT 0 def % no other subticks + } if % end logLines + dsubT abs 0 gt { % du we have subticks? + gsave % save graphic state +% start subticks ---------------------------------------------------------- + /cntsubTick cntTick dsubT add def + subTNo 1 sub { + cntsubTick abs MaxValue abs le { % out of range? + \ifis@yAxis + \ifPst@maxyTicks true \else false \fi + \else + \ifPst@maxxTicks true \else false \fi + \fi + { cntsubTick minTickline STsize mul #5 moveto + cntsubTick maxTickline STsize mul #5 lineto } + { cntsubTick tickstart STsize mul #5 moveto + cntsubTick tickend STsize mul #5 lineto } ifelse + }{ exit } ifelse + /cntsubTick cntsubTick dsubT add def + } repeat + subTwidth SLW subTColor % set line width and subtick color + subLSstroke +% end subticks ---------------------------------------------------------- + grestore % restore tick status + } if + showOrigin { + gsave + \ifis@yAxis + \ifPst@maxyTicks true \else false \fi + \else + \ifPst@maxxTicks true \else false \fi + \fi + { cntTick minTickline #5 moveto + cntTick maxTickline #5 lineto } + { cntTick tickstart #5 moveto % line begin main Tick + cntTick tickend #5 lineto } ifelse % lineto tick end + Twidth SLW TColor % set line width and tick color + LSstroke + grestore + }{ /showOrigin true def } ifelse % only for the very first tick valid + } for +% end ticks ---------------------------------------------------------- +%\fi +%\iffalse +% ================================================ % the other side + /showOrigin \ifPst@showOriginTick true \else false \fi def % ticks for 0/0 ? + /dT dT neg def % the other side of the axis + /dsubT dsubT neg def +% start ticks ---------------------------------------------------------- +% showOrigin { 0 }{ dT } ifelse + 0 dT MinValue epsilon viceversa { add }{ sub } ifelse { + /cntTick exch def + logLines { % log lines? + gsave + 1 1 DT cvi { + 1 sub /OffSet exch def + -10 subTNo 1 add div dup 10 add exch dup -0.1 mul 1 add { % do not write a line for 10 and 1, trace lines between 10 and 1 by steps of 10/subTno +% 10 subTNo 1 add div dup 10 { % do not write a line for 1 +% 1 10 subTNo div 9.99 { % do not write a line for 1 + /dx exch def % save index +% /x cntTick dT dx log mul add def % + /x dx log OffSet add \ifis@yAxis\pst@number\psyunit\else\pst@number\psxunit\fi\space mul cntTick add def + x abs MinValue abs le { % out of range? + \ifis@yAxis + \ifPst@maxyTicks true \else false \fi + \else + \ifPst@maxxTicks true \else false \fi + \fi + { x minTickline #5 moveto + x maxTickline #5 lineto } + { x tickstart STsize mul #5 moveto + x tickend STsize mul #5 lineto } ifelse + } if + } for } for + /dsubT 0 def + subTwidth SLW subTColor % set line width and subtick color + subLSstroke + grestore + } % end loglines + dsubT abs 0 gt { % do we have subticks? + gsave % save main state +% start subticks ---------------------------------------------------------- + /cntsubTick cntTick dsubT add def + subTNo 1 sub { + cntsubTick abs MinValue abs le { % out of range? + cntsubTick tickstart STsize mul #5 moveto + cntsubTick tickend STsize mul #5 lineto + }{ exit } ifelse + /cntsubTick cntsubTick dsubT add def + } repeat % for +% end subticks ---------------------------------------------------------- + subTwidth SLW subTColor % set line width and subtick color + subLSstroke + grestore % restore main state + } if + showOrigin { + gsave + cntTick tickstart #5 moveto % line begin main Tick + cntTick tickend #5 lineto % lineto tick end + Twidth SLW TColor % set line width and tick color + LSstroke + grestore + }{ /showOrigin true def } ifelse % only for the very first tick valid + } for +% end ticks ---------------------------------------------------------- +%\fi + } if% + }% end of \pscode + \end@SpecialObj% + % now draw the axes again with the correct linecolor + \ifx\psk@axesstyle\@none\else + \ifPst@yAxis\psline[linecolor=\pslinecolor](0,#2)(0,#4)\fi% + \ifPst@xAxis\psline[linecolor=\pslinecolor](#1,0)(#3,0)\fi% + \fi% + \ignorespaces% +}% +% +\def\psxs@frame{% + \begin@SpecialObj% + \addto@pscode{ % the frame + \pst@number\pst@dima \pst@number\pst@dimb moveto % lower left + \pst@number\pst@dimc \pst@number\pst@dimb L % upper left + \pst@number\pst@dimc \pst@number\pst@dimd L % upper right + \pst@number\pst@dima \pst@number\pst@dimd L % lower right + closepath + }% + \pst@stroke% + \psk@fillstyle% + \end@SpecialObj% + \let\psk@arrowA\@empty% + \let\psk@arrowB\@empty% + \pst@xticksizeC=\z@\pst@yticksizeC=\z@% + \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{}{x}% x axis + \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{ exch }{y}% y axis + \ifnum\psk@tickstyle=\tw@ % llx,lly,urx,ury,exch,x|y,arrowA,arrowB + \psDEBUG[psxs@frame]{psk@tickstyle=2 (inner)}% + \psDEBUG[psxs@frame]{pst@dima=\pst@number\pst@dima}% + \psDEBUG[psxs@frame]{pst@dimb=\pst@number\pst@dimb}% + \psDEBUG[psxs@frame]{pst@dimc=\pst@number\pst@dimc}% + \psDEBUG[psxs@frame]{pst@dimd=\pst@number\pst@dimd}% + \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{ neg \pst@number\pst@dimd add }{x}% % upper x axis + \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{ neg \pst@number\pst@dimc add exch }{y}% right y axis + \fi% +} +% +\def\psxs@polar{% (rx,ry) % all other values are ignored + \pst@killglue + \begingroup + \edef\pst@dimC{\strip@pt\pst@dimc}% RadiusX + \pstFPDiv\pstR@dius{\pst@dimC}{\strip@pt\psxunit}% in cm and as integer + \addbefore@par{Dy=30}% for the angle step + \use@keep@par + \pstFPDiv\pstN@lpha{360}{\psk@Dy}% No of (int) main lines + \pstFPdiv\pstd@lpha{\psk@Dy}{\psk@ysubticks}% sub dAlpha + \pstFPdiv\pstdR@dius{1}{\psk@xsubticks}% sub dRadius + \pst@cntm=\psk@xsubticks\advance\pst@cntm by \m@ne + \multido{\iA=\psk@Dx+\psk@Dx,\rB=\pstdR@dius+\psk@Dx,\iB=0+1}{\pstR@dius}{% + \multido{\rA=\rB+\pstdR@dius}{\the\pst@cntm}{\pscircle[linestyle=\psxsubticklinestyle, + linecolor=\psk@xsubtickcolor,linewidth=\psk@xsubtickwidth pt]{\rA}} + \pscircle[linestyle=\psxticklinestyle,linecolor=\psk@xtickcolor, + linewidth=\psk@xtickwidth pt]{\iA}% + \ifnum\psk@labels<2\relax% is all or x (0,1) + \uput[-45](\iB,0){\pshlabel{\iB}}\uput[45](0,\iB){\pshlabel{\iB}}% + \fi% + }% +% \uput[-45](\pstR@dius,0){\pstR@dius}\uput[45](0,\pstR@dius){\pstR@dius}% + \pst@cntm=\psk@ysubticks\advance\pst@cntm by \m@ne + \multido{\iA=\psk@Dy+\psk@Dy,\rB=\pstd@lpha+\psk@Dy}{\pstN@lpha}{% + \multido{\rA=\rB+\pstd@lpha}{\the\pst@cntm}{\psline[linestyle=\psysubticklinestyle, + linecolor=\psk@ysubtickcolor,linewidth=\psk@ysubtickwidth pt](\pstR@dius;\rA)} + \psline[linestyle=\psyticklinestyle, + linecolor=\psk@ytickcolor,linewidth=\psk@ytickwidth pt](\pstR@dius;\iA)% + \ifodd\psk@labels\else% is all or y (0,3) + \uput[\iA](\pstR@dius;\iA){\psvlabel{\iA}}% + \fi% + } + \endgroup\ignorespaces% + \Pst@xAxisfalse\Pst@yAxisfalse% +} +% +\define@key[psset]{pst-plot}{axesstyle}[axes]{% + \@ifundefined{psxs@#1}% + {\@pstrickserr{Axes style `#1' not defined}\@eha}% + {\def\psk@axesstyle{#1}}} +\psset[pst-plot]{axesstyle=axes} +\define@key[psset]{pst-plot}{xLabels}[]{\def\psk@xLabels{#1}} +\define@key[psset]{pst-plot}{xLabelsRot}[0]{\pst@getangle{#1}\pst@xLabelsRot} +\psset[pst-plot]{xLabels=,xLabelsRot=0} +\define@key[psset]{pst-plot}{yLabels}[]{\def\psk@yLabels{#1}} +\define@key[psset]{pst-plot}{yLabelsRot}[0]{\pst@getangle{#1}\pst@yLabelsRot} +\psset[pst-plot]{yLabels=,yLabelsRot=0} +% +% #1:Max/Min in pt from origin; #2:arrow; #3:min; #4:max +\def\pst@hlabels#1#2#3#4{% + \kern\psk@xlabelOffset pt% % set the x offset? + \ifx\empty\psk@xLabels + \ifdim#1=\z@\else% % start from 0 ? + \ifx#2\empty\else\advance#1\ifdim#1>\z@-\fi7\pslinewidth\fi% + \pst@cnta=#1\relax% % Distance (in sp) to end. + \divide\pst@cnta\psk@dx\relax% % Number of ticks/labels + \ifnum\pst@cnta=\z@\else% + \pst@dimb=\psk@dx sp% % Space between ticks. + \ifPst@yAxis\else\showorigintrue\fi% + \ifnum\psk@labels<\tw@\ifPst@xAxis\pst@@hlabels\fi\fi% + \showoriginfalse% + \fi% + \fi% + \else + \pst@cnta=#1\relax% % Distance (in sp) to end. + \pstFPdiv\pst@tempA{\the\pst@cnta}{\psk@dx} + \pstFPadd\pst@tempA{1.55}{\pst@tempA} % to prevent rounding errors + \edef\pst@tempB{\pst@int{\pst@tempA}} +% \divide\pst@cnta\psk@dx\relax% % Number of ticks/labels + \multido{\iB=#3+1}{\pst@tempB}% + {\uput{\psxlabelsep}[-90]{\pst@xLabelsRot}(\iB,0)%\psxlabelsep) + {\strut\pshlabel{\psPutXLabel{\iB}}}}% + \fi% +} +% Knows \pst@dimb and \pst@cnta +\def\pst@@hlabels{% + \psDEBUG[pst@@hlabels]{xticksizeC=\the\pst@xticksizeC}% + \setbox\z@=\vbox{% save all in a box + \ifcase\psk@xlabelPos% 0 + \vskip-\pst@xticksizeA\vskip\psxlabelsep\or % 1 + \vskip-1ex\vskip-\pslabelsep\or % 2 + \vskip-\pst@xticksizeB\vskip-\psxlabelsep\vskip-1ex % 3 + \fi + \ifnum\pst@cnta<\z@ \pst@dimb=-\pst@dimb\fi + \hbox to\z@{% + \ifshoworigin\hbox to \z@{\hss\pst@@@hlabel{\psk@Ox}\hss}\fi% + \mmultido{\nA=\psk@Ox+\psk@Dx}{\pst@cnta}{% + \hskip\pst@dimb\hbox to \z@{\hss% + \ifdim\nA pt=\z@ \pst@@@hlabel{0}% + \else\expandafter\pst@@@hlabel{\nA}% + \fi% prevent -0, doesn't work with \ifnum + \hss}% + }\hss% + }% + }\ht\z@\z@ \dp\z@\z@ \box\z@}% set all values to zero +% +% #1:Max/Min in pt from origin; #2:arrow; #3:min; #4:max +% \psk@labels 0:all; 1:x; 2:y; 3:none +\def\pst@vlabels#1#2#3#4{% + \ifx\empty\psk@yLabels + \ifdim#1=\z@\else% + \ifx#2\empty\else\advance#1\ifdim#1>\z@-\fi7\pslinewidth\fi% + \pst@cnta=#1\relax% % % Distance (in sp) to end. + \divide\pst@cnta\psk@dy\relax% % Number of ticks/labels + \ifnum\pst@cnta=\z@\else% + \pst@dima=\psk@dy sp% % Space between ticks. + \ifodd\number\psk@labels\else\ifPst@yAxis\pst@@vlabels\fi\fi% + \showoriginfalse% + \fi% + \fi% + \else% + \pst@cnta=#1\relax% % % Distance (in sp) to end. + \pstFPdiv\pst@tempA{\the\pst@cnta}{\psk@dy} + \pstFPadd\pst@tempA{1.55}{\pst@tempA} % to prevent rounding errors + \edef\pst@tempB{\pst@int{\pst@tempA}} +% \divide\pst@cnta\psk@dy\relax% % Number of ticks/labels + \multido{\nA=#3+1}{\pst@tempB}{\uput{\psylabelsep}[180]{\pst@yLabelsRot}(0,\nA){% + \strut\expandafter\psvlabel\expandafter{\psPutYLabel{\nA}}}}% + \fi% +} +% \pst@dima: the width between two labels in pt +% \pst@dimc: the coordinate of the origin in pt +% \pst@cnta: the lowest label +% \pst@ticksizeC the lowest or highest value +\def\pst@@vlabels{% + \psDEBUG[pst@@vlabels]{yticksizeC=\the\pst@yticksizeC}% for left labels we use \def\llap#1{\hb@xt@\z@{\hss#1}} + \vbox to\z@{% + \vbox to -\psk@ylabelOffset pt{}% the y label offset + \ifnum\pst@cnta>\z@ \pst@dima=-\pst@dima\fi% up or down label positions + \offinterlineskip% + \ifshoworigin% + \vbox to \z@{\vss\hbox to\z@{% + \ifcase\psk@ylabelPos% + \hss\pst@@@vlabel{\psk@Oy}\hskip\psylabelsep\hskip-\pst@yticksizeA\or% + \hskip\pslabelsep\hss\pst@@@vlabel{\psk@Oy}\hss\or % right labels + \hskip\pst@yticksizeB\hskip\psylabelsep\pst@@@vlabel{\psk@Oy}% + \fi}\vss}% + \fi% + \mmultido{\nA=\psk@Oy+\psk@Dy}{\pst@cnta}{% + \vbox to\pst@dima{\vss}% + \vbox to \z@{% + \vss\hbox to\z@{% + \ifcase\psk@ylabelPos% and also check for -0 + \hss\ifdim\nA pt=\z@ \pst@@@vlabel{0}\else\pst@@@vlabel{\nA}\fi% + \hskip\psylabelsep\hskip-\pst@yticksizeA\or% top + \hss\ifdim\nA pt=\z@\pst@@@vlabel{0}\else\pst@@@vlabel{\nA}\fi% + \ifdim\psylabelsep=\z@\hss\else\kern-\psylabelsep\fi\or% axis + \hskip\pst@yticksizeB\hskip\psylabelsep% + \ifdim\nA pt=\z@\pst@@@vlabel{0}\else\pst@@@vlabel{\nA}\fi% bottom + \fi}\vss}% + }\vss}% +} +% +\define@key[psset]{pst-plot}{xAxisLabel}[x]{\def\psk@xAxisLabel{#1}} +\define@key[psset]{pst-plot}{yAxisLabel}[y]{\def\psk@yAxisLabel{#1}} +\psset[pst-plot]{xAxisLabel=x,yAxisLabel=y} +\define@key[psset]{pst-plot}{xAxisLabelPos}[{}]{\def\psk@xAxisLabelPos{#1}} +\define@key[psset]{pst-plot}{yAxisLabelPos}[{}]{\def\psk@yAxisLabelPos{#1}} +\psset[pst-plot]{yAxisLabelPos={},xAxisLabelPos={}} +% +\newdimen\psk@llx +\newdimen\psk@lly +\newdimen\psk@urx +\newdimen\psk@ury +\define@key[psset]{pst-plot}{llx}[\z@]{\pssetxlength\psk@llx{#1}} +\define@key[psset]{pst-plot}{lly}[\z@]{\pssetylength\psk@lly{#1}} +\define@key[psset]{pst-plot}{urx}[\z@]{\pssetxlength\psk@urx{#1}} +\define@key[psset]{pst-plot}{ury}[\z@]{\pssetylength\psk@ury{#1}} +\psset[pst-plot]{llx=\z@, lly=\z@, urx=\z@, ury=\z@}% prevents rounding errors +% +\define@boolkey[psset]{pst-plot}[Pst@]{psgrid}[true]{} +\define@key[psset]{pst-plot}{gridpara}[{}]{\def\psk@gridpara{#1}} +\define@key[psset]{pst-plot}{gridcoor}[\relax]{\def\psk@gridcoor{#1}} +\psset[pst-plot]{psgrid=false,gridpara={},gridcoor=\relax} +% +\newdimen\pst@xunit +\newdimen\pst@yunit +% +\def\pslegend{\@ifnextchar[\pslegend@i{\pslegend@i[rt]}} +\def\pslegend@i[#1]{\@ifnextchar({\pslegend@ii[#1]}{\pslegend@ii[#1](\pst@number\pslabelsep,\pst@number\pslabelsep)}} +\def\pslegend@ii[#1](#2,#3)#4{% + \gdef\pslegend@ref{#1}% + \xdef\pslegend@sepx{#2 }% + \xdef\pslegend@sepy{#3 }% + \gdef\pslegend@text{#4}} +% +\newpsstyle{legendstyle}{fillstyle=solid,fillcolor=white,linewidth=0.5pt} +% +\def\pslegend@iii[#1](#2){\rput[#1](#2){\psframebox[style=legendstyle]{% + \footnotesize\tabcolsep=2pt% + \tabular[t]{@{}ll@{}}\pslegend@text\endtabular}}\global\let\pslegend@text\relax} +\let\pslegend@text\relax% define it as empty +% +\def\psgraph{\pst@object{psgraph}} +\def\psgraph@i{\pst@getarrows\psgraph@ii} +\def\psgraph@ii(#1,#2){\catcode`\!=12\relax + \@ifnextchar({\psgraph@iii(#1,#2)}{\psgraph@iv(0,0)(#1,#2)}} +\def\psgraph@iii(#1,#2)(#3,#4){\@ifnextchar({\psgraph@v(#1,#2)(#3,#4)}{\psgraph@iv(#1,#2)(#3,#4)}} +% +\def\psgraph@iv(#1,#2)(#3,#4)#5#6{% no special origin defined +% minX | minY | maxX | maxY | Length x-axis | length y-axis% + \pst@killglue% + \begingroup% + \bgroup% + \use@keep@par% + \ifPst@psgrid% + \expandafter\psset\expandafter{\psk@gridpara}% + \rput(0,0){\expandafter\psgrid\psk@gridcoor} + \fi% + \egroup% + \pstFPsub\pst@tempA{#3}{#1}% + \pst@dimm=#5% + \pst@dimo=\pst@tempA pt% + \pstFPdiv\pst@@dx{\strip@pt\pst@dimm}{\pst@tempA}% + \pst@xunit=\pst@@dx\p@% +% + \ifx!#6\let\pst@yunit=\pst@xunit\else% + \pst@dimm=#6% +% \pst@dimm=\pst@@dx\pst@dimo\else\pst@dimm=#6\fi% + \pstFPsub\pst@tempA{#4}{#2}% + \pstFPdiv\pst@@dy{\strip@pt\pst@dimm}{\pst@tempA}% + \pst@yunit=\pst@@dy\p@% + \fi% + % + \pst@dimm=#1\pst@xunit\advance\pst@dimm by \psk@llx% + \pst@dimn=#2\pst@yunit\advance\pst@dimn by \psk@lly% + \pst@dimo=#3\pst@xunit\advance\pst@dimo by \psk@urx% + \pst@dimp=#4\pst@yunit\advance\pst@dimp by \psk@ury% + \if@star\pspicture*(\pst@dimm,\pst@dimn)(\pst@dimo,\pst@dimp)\else% + \pspicture(\pst@dimm,\pst@dimn)(\pst@dimo,\pst@dimp)\fi% + \let\psxunit\pst@xunit \let\psyunit\pst@yunit% + \ifdim\pst@xunit=\pst@yunit\relax\psset[pstricks]{runit=\pst@xunit}\fi% + \bgroup% + \use@par% + \psaxes(#1,#2)(#3,#4)% + \egroup% + \psgraph@vi(#1,#2)(#1,#2)(#3,#4)% +} +\def\psgraph@v(#1,#2)(#3,#4)(#5,#6)#7#8{% with special origin +% Xorig | yorig | minX | minY | maxX | maxY | Length x-axis | length y-axis% + \pst@killglue% + \begingroup% + \bgroup% + \use@keep@par% + \ifPst@psgrid% + \expandafter\psset\expandafter{\psk@gridpara}% + \rput(0,0){\expandafter\psgrid\psk@gridcoor} + \fi% + \egroup% + \pstFPsub\pst@tempA{#5}{#3}% + \pst@dimm=#7% + \pst@dimo=\pst@tempA pt% + \pstFPdiv\pst@@dx{\strip@pt\pst@dimm}\pst@tempA% + \pst@xunit=\pst@@dx\p@% +% + \ifx!#8\let\pst@yunit=\pst@xunit\else + \pst@dimm=#8% + \pstFPsub\pst@tempA{#6}{#4}% + \pstFPdiv\pst@@dy{\strip@pt\pst@dimm}\pst@tempA% + \pst@yunit=\pst@@dy\p@% + \fi% + % + \pst@dima=#3\pst@xunit \advance\pst@dima by \psk@llx% + \pst@dimb=#4\pst@yunit \advance\pst@dimb by \psk@lly% + \pst@dimc=#5\pst@xunit \advance\pst@dimc by \psk@urx% + \pst@dimd=#6\pst@yunit \advance\pst@dimd by \psk@ury% + \if@star\pspicture*(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dimd)\else% + \pspicture(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dimd)\fi% + \psset[pstricks]{xunit=\pst@xunit,yunit=\pst@yunit} + \ifdim\pst@xunit=\pst@yunit \psset[pstricks]{runit=\pst@xunit}\fi% + \bgroup% + \use@par% + \psaxes(#1,#2)(#3,#4)(#5,#6)% + \egroup% + \psgraph@vi(#1,#2)(#3,#4)(#5,#6)% +} +% +\def\setxLabelC@@r#1,#2(#3,#4)(#5){% + \pst@getcoor{#5}\pst@tempB% + \ifx c#1 + \pssetylength\pst@dimm{#2}% + \rput(! #4 #3 add 2 div \pst@number\pst@dimm \pst@tempB\space exch pop add + \pst@number\psyunit div ){\psk@xAxisLabel}% + \else% + \pst@getcoor{\psk@xAxisLabelPos}\pst@tempA% + \rput(! \pst@tempA\space \pst@tempB\space exch pop add \tx@UserCoor ){\psk@xAxisLabel}% + \fi} +\def\setyLabelC@@r#1,#2(#3,#4)(#5){% + \pst@getcoor{#5}\pst@tempB% + \ifx c#2 + \pssetxlength\pst@dimm{#1}% + \rput{90}(! \pst@number\pst@dimm \pst@tempB\space pop add \pst@number\psxunit div #4 #3 add 2 div ){\psk@yAxisLabel}% + \else% + \pst@getcoor{\psk@yAxisLabelPos}\pst@tempA% + \rput{90}(! \pst@tempB\space pop \pst@tempA\space 3 1 roll add exch \tx@UserCoor ){\psk@yAxisLabel}% + \fi} +% +\def\psgraph@vi(#1,#2)(#3,#4)(#5,#6){% + \ifx\psk@xAxisLabel\@empty\else% + \ifx\psk@xAxisLabelPos\@empty\uput[0](#5,#2){\psk@xAxisLabel}% + \else\expandafter\setxLabelC@@r\psk@xAxisLabelPos(#3,#5)(#1,#2)\fi% + \fi% + \ifx\psk@yAxisLabel\@empty\else% + \ifx\psk@yAxisLabelPos\@empty\uput[90](#1,#6){\psk@yAxisLabel}% + \else\expandafter\setyLabelC@@r\psk@yAxisLabelPos(#4,#6)(#1,#2)\fi% + \fi% + \def\lt@@{lt}\def\lb@@{lb}\def\rb@@{rb}% + \ifx\pslegend@ref\lb@@ \gdef\pslegend@coor{#3 \pslegend@sepx \pst@number\psxunit div add + \pslegend@sepy \pst@number\psyunit div}% + \else% + \ifx\pslegend@ref\lt@@ \gdef\pslegend@coor{#3 \pslegend@sepx \pst@number\psxunit div add + #6 \pslegend@sepy \pst@number\psyunit div sub}% + \else% + \ifx\pslegend@ref\rb@@\gdef\pslegend@coor{#5 \pslegend@sepx \pst@number\psxunit div sub + \pslegend@sepy \pst@number\psyunit div}% + \else \gdef\pslegend@coor{#5 \pslegend@sepx \pst@number\psxunit div sub + #6 \pslegend@sepy \pst@number\psyunit div sub}% + \fi% + \fi% + \fi% + \xdef\psgraphLLx{#3}\xdef\psgraphLLy{#4}\xdef\psgraphURx{#5}\xdef\psgraphURy{#6}% + \ignorespaces +} +% +\def\endpsgraph{% +% \pst@killglue% + \ifx\relax\pslegend@text\relax \else\pslegend@iii[\pslegend@ref](!\pslegend@coor)\fi% + \endpspicture% + \endgroup\ignorespaces} +% +\@namedef{psgraph*}{\psgraph*} +\@namedef{endpsgraph*}{\endpsgraph} +% +\def\psPutXLabel#1{% + \global\pst@cnto=0\relax + \global\pst@cntp=#1\relax + \expandafter\get@Label\psk@xLabels,,\@nil% +} +\def\psPutYLabel#1{% + \global\pst@cnto=0\relax + \global\pst@cntp=#1\relax + \expandafter\get@Label\psk@yLabels,,\@nil% +} +\def\get@Label#1,#2,#3\@nil{% + \ifnum\the\pst@cnto<\the\pst@cntp + \global\advance\pst@cnto by \@ne + \ifx\relax#2\relax\else\expandafter\get@Label#2,#3\@nil\fi% + \else #1\fi% +} +% +\def\psFixpoint{\pst@object{psFixpoint}} +\def\psFixpoint@i#1#2#3{% #1: xStart #2: f(x) #3: number of iterations + \pst@killglue% + \begingroup% + \use@par% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{ + \psplot@init + /x #1 def + /F@pstplot \ifPst@algebraic (#2) tx@AlgToPs begin AlgToPs end cvx + \else { #2 } \fi def + /xy { x \pst@number\psxunit mul F@pstplot dup /x ED \pst@number\psyunit mul } def + }% + \gdef\psplot@init{}% + \@pstfalse% + \@nameuse{testqp@\psplotstyle}% + \addto@pscode{ + mark + x \pst@number\psxunit mul 0 + /n 2 def + #3 { + xy + dup dup + /n n 4 add def + } repeat + }% + \@nameuse{endplot@\psplotstyle}% + \endgroup% + \ignorespaces} +% +\define@boolkey[psset]{pst-plot}[Pst@]{showDerivation}[true]{} +\psset{showDerivation} +% +\def\psNewton{\pst@object{psNewton}} +\def\psNewton@i#1#2{\@ifnextchar[{\psNewton@ii{#1}{#2}}{\psNewton@iii{#1}{#2}}} +\def\psNewton@ii#1#2[#3]#4{% #1:xStart #2:f(x) #3:f'(x) #4:number of iterations + \pst@killglue% + \begingroup% + \addbefore@par{showDerivation}% + \use@par% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{ + \psplot@init + /x #1 def + /F@pstplot \ifPst@algebraic (#2) tx@AlgToPs begin AlgToPs end cvx \else { #2 } \fi def + /F@pstplotDerive \ifPst@algebraic (#3) tx@AlgToPs begin AlgToPs end cvx \else { #3 } \fi def + /newxVal { % y on stack + F@pstplotDerive % we have m + div neg %\pst@number\psxunit div % new x val = -y0/m + } def + }% + \gdef\psplot@init{}% + \@pstfalse% + \@nameuse{testqp@\psplotstyle}% + \addto@pscode{ + mark + x 0 \tx@ScreenCoor % start point + /n 2 def + #4 { + F@pstplot /yVal ED + x yVal \tx@ScreenCoor + /n n 2 add def + yVal newxVal x add /x ED + x 0 \tx@ScreenCoor + \ifPst@showDerivation /n n 4 add def \else moveto /n n 2 add def\fi + } repeat + pstack + }% + \@nameuse{endplot@\psplotstyle}% + \endgroup% + \ignorespaces} +\def\psNewton@iii#1#2#3{% #1:xStart #2:f(x) #3:number of iterations + \pst@killglue% + \begingroup% + \addbefore@par{VarStepEpsilon=0.01,showDerivation}% + \use@par% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{ + \psplot@init + /epsilon \psk@VarStepEpsilon\space def + /x #1 def + /F@pstplot \ifPst@algebraic (#2) tx@AlgToPs begin AlgToPs end cvx \else { #2 } \fi def + /newxVal { % y on stack + /saveX x def + saveX epsilon add /x ED F@pstplot saveX epsilon sub /x ED F@pstplot sub epsilon dup add div % we have m + div neg % new x val = -y0/m + /x saveX def + } def + }% + \gdef\psplot@init{}% + \@pstfalse% + \@nameuse{testqp@\psplotstyle}% + \addto@pscode{ + mark + x 0 \tx@ScreenCoor % start point + /n 2 def + #3 { + F@pstplot /yVal ED + x yVal \tx@ScreenCoor + yVal newxVal x add /x ED + x 0 \tx@ScreenCoor + \ifPst@showDerivation /n n 4 add def \else moveto /n n 2 add def\fi + } repeat + }% + \@nameuse{endplot@\psplotstyle}% + \endgroup% + \ignorespaces} +% +\def\psResetPlotValues{% + \psset{method={}}% +}% +\catcode`\@=\TheAtCode\relax +\endinput +%% +%% END pst-plot.tex diff --git a/Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot97.tex b/Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot97.tex new file mode 100644 index 00000000000..c72ea79624a --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot97.tex @@ -0,0 +1,642 @@ +%% BEGIN pst-plot.tex +\def\fileversion{0.93a-patch2} +\def\filedate{94/09/19} +%% +%% This is for use with PSTricks v0.93a, but contains several +%% patches for bugs in the pst-plot.tex that was distributed +%% with v0.93a until March 30, 1994. +%% +%% For plots and axes with PSTricks. +%% +%% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU +%% See pstricks.doc or pstricks.tex for copying restrictions. +%% +%% See the PSTricks read-me file and the User's Guide for documentation. + + +\message{ v\fileversion, \filedate} + +\csname PSTplotLoaded\endcsname +\let\PSTplotLoaded\endinput + +\ifx\PSTricksLoaded\endinput\else + \def\next{\input pstricks97.tex } + \expandafter\next +\fi + +\ifx\MultidoLoaded\endinput\else + \def\next{\input multido.tex } + \expandafter\next +\fi + +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11 + +% Using lists of data is optimized for \dataplot and \fileplot +% Here is the tricky part. As each line is read from file, +% we want to ignore trailing delimiters, and convert arbitrary +% strings of non-trailing delimiters to _D_. +% We end up with +% D x1 D y1 D x2 D y2 ... D xn D yn +% +\begingroup +\catcode`\{=13 +\catcode`\}=13 +\catcode`\(=13 +\catcode`\)=13 +\catcode`\,=13 +\catcode`\!=1 +\catcode`\*=2 +\catcode`\ =13 +\catcode`\_=13 +\catcode`\^^M=13 +\gdef\pst@datadelimiters!% Begin def +\catcode`\{=13% +\catcode`\}=13% +\catcode`\(=13% +\catcode`\)=13% +\catcode`\,=13% +\catcode`\ =13% +\catcode`\^^M=13% +\def,##1!% +\ifcat\noexpand,\noexpand##1% +\expandafter##1% +\else\space% +D\space##1% +\fi*% +\let(,\let),\let{,\let},\let ,\let^^M,\let_\@empty*% End def +\endgroup +\begingroup +\catcode`\,=13 +\catcode`\_=13 +\gdef\savedata@#1[#2]{% + \xdef\pst@tempg{#2_}% + \endgroup + \let#1\pst@tempg + \global\let\pst@tempg\relax + \ignorespaces} +\gdef\readdata@{% + \read1 to \pst@tempa + \expandafter\readdata@@\pst@tempa_\@nil + \ifeof1\else\expandafter\readdata@\fi} +\gdef\pst@@readfile#1#2\@nil{\addto@pscode{,#1#2}}% +\gdef\readdata@@#1#2\@nil{\xdef\pst@tempg{\pst@tempg,#1#2}}% +\endgroup + +\def\readdata#1#2{% + \openin1=#2 + \begingroup + \def\pst@tempg{}% + \ifeof1 + \@pstrickserr{Data file `#2' not found.}\@ehpa + \else + \pst@datadelimiters + \catcode`\[=1 + \catcode`\]=2 + \readdata@% + \fi + \endgroup + \let#1\pst@tempg + \global\let\pst@tempg\relax + \ignorespaces} + +\def\pst@readfile#1{{\let\readdata@@\pst@@readfile\readdata\pst@tempg{#1}}} +\def\pst@altreadfile#1{% + \openin1=#1 + \ifeof1 + \@pstrickserr{Data file `#1' not found.}\@ehpa + \else + \catcode`\{=10 + \catcode`\}=10 + \catcode`\(=10 + \catcode`\)=10 + \catcode`\,=10 + \catcode`\^^M=10 + \catcode`\[=1 + \catcode`\]=2 + \pst@@altreadfile + \fi} +\def\pst@@altreadfile{% + \read1 to \pst@tempg + \expandafter\pst@@@altreadfile\pst@tempg\@empty\@nil + \ifeof1\else\expandafter\pst@@@altreadfile\fi} +\def\pst@@@altreadfile#1#2\@nil{\addto@pscode{#1#2}}% + +\def\savedata#1{\begingroup\pst@datadelimiters\savedata@{#1}} + +\def\beginplot@line{\begin@OpenObj} +\def\endplot@line{\psline@ii} +\def\beginplot@polygon{\begin@ClosedObj} +\def\endplot@polygon{\pspolygon@ii} +\def\beginplot@curve{\begin@OpenObj} +\def\endplot@curve{\pscurve@ii} +\def\beginplot@ecurve{\begin@OpenObj} +\def\endplot@ecurve{\psecurve@ii} +\def\beginplot@ccurve{\begin@ClosedObj} +\def\endplot@ccurve{\psccurve@ii} +\def\beginplot@dots{\begin@SpecialObj} +\def\endplot@dots{\psdots@ii} +\def\beginplot@bezier{\begin@OpenObj} +\def\endplot@line{\psbezier@ii} +\def\beginplot@cbezier{\begin@ClosedObj} +\def\endplot@cbezier{\pscbezier@ii} + +\def\psset@plotstyle#1{% + \@ifundefined{beginplot@#1}% + {\@pstrickserr{Plot style `#1' not defined}\@eha}% + {\edef\psplotstyle{#1}}} +\psset@plotstyle{line} + +\def\psset@plotpoints#1{% + \pst@cntg=#1\relax + \ifnum\pst@cntg<2 + \@pstrickserr{plotpoints parameter must be at least 2}\@ehpa + \else + \advance\pst@cntg-1 + \edef\psk@plotpoints{\the\pst@cntg\space}% + \fi} +\psset@plotpoints{50} + +% For quick plots, define: +% \beginqp@<foo> : What to do to first point (PS code only). +% \doqp@<foo> : What to do to subsequent points (PS code only). +% \endqp@<foo> : How to end plot. +% \testqp@<foo> : Set \@psttrue if OK to use quick plot. + +\def\beginqp@line{\pst@oplineto} +\def\doqp@line{L } +\def\endqp@line{\end@OpenObj}% +\def\testqp@line{% + \ifdim\pslinearc>\z@\else + \ifshowpoints\else + \ifx\psk@arrowA\@empty + \ifx\psk@arrowB\@empty + \@psttrue + \fi + \fi + \fi + \fi} + +\def\beginqp@polygon{moveto } +\def\doqp@polygon{L } +\def\endqp@polygon{% + \addto@pscode{closepath}% + \end@ClosedObj} +\def\testqp@polygon{% + \ifdim\pslinearc>\z@\else + \ifshowpoints\else + \@psttrue + \fi + \fi} + +\def\beginqp@dots{% + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + Dot } +\def\doqp@dots{Dot } +\def\endqp@dots{\end@SpecialObj} +\def\testqp@dots{\@psttrue} + +\def\beginqp@bezier{/n 0 def \pst@oplineto} +\def\doqp@bezier{/n n 1 add def n 3 mod 0 eq { curveto } if } +\def\endqp@bezier{% + \addto@pscode{n 3 mod { pop pop } repeat} + \end@OpenObj}% +\def\testqp@bezier{% + \ifshowpoints\else + \ifx\psk@arrowA\@empty + \ifx\psk@arrowB\@empty + \@psttrue + \fi + \fi + \fi} + +\def\beginqp@cbezier{/n 0 def moveto } +\def\doqp@cbezier{\doqp@bezier} +\def\endqp@cbezier{% + \addto@pscode{n 3 mod { pop pop } repeat closepath} + \end@ClosedObj}% +\def\testqp@cbezier{\ifshowpoints\else\@psttrue\fi} + +\def\dataplot{\def\pst@par{}\pst@object{dataplot}} +\def\dataplot@i#1{% + \pst@killglue + \begingroup + \use@par + \@pstfalse + \@nameuse{testqp@\psplotstyle}% + \if@pst + \dataplot@ii{\addto@pscode{#1}}% + \else + \listplot@ii{\addto@pscode{#1}}% + \fi + \endgroup + \ignorespaces} +\def\dataplot@ii#1{% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{% + /Dx { \pst@number\psxunit mul /D { Dy } def } def + /Dy { \pst@number\psyunit mul Do /D { Dx } def } def + /D { /D { Dx } def } def + /Do { + \@nameuse{beginqp@\psplotstyle}% + /Do { \@nameuse{doqp@\psplotstyle}} def + } def}% + #1% + \addto@pscode{D}% + \@nameuse{endqp@\psplotstyle}} + +\def\fileplot{\def\pst@par{}\pst@object{fileplot}} +\def\fileplot@i#1{% + \pst@killglue + \begingroup + \use@par + \@pstfalse + \@nameuse{testqp@\psplotstyle}% + \if@pst + \dataplot@ii{\pst@readfile{#1}}% + \else + \listplot@ii{\pst@altreadfile{#1}}% + \fi + \endgroup + \ignorespaces} + +\pst@def{ScalePoints}<% + /y ED /x ED + counttomark dup dup cvi eq not { exch pop } if + /m exch def /n m 2 div cvi def + n { y mul m 1 roll x mul m 1 roll /m m 2 sub def } repeat> + +\def\listplot{\def\pst@par{}\pst@object{listplot}} +\def\listplot@i#1{\listplot@ii{\addto@pscode{#1}}} +\def\listplot@ii#1{% + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{/D {} def mark}% + #1% + \addto@pscode{\pst@number\psxunit \pst@number\psyunit \tx@ScalePoints}% + \@nameuse{endplot@\psplotstyle}} + +% \psplot + +\def\psplotinit#1{\xdef\psplot@init{#1 }} +\def\psplot@init{} + +\def\psplot{\def\pst@par{}\pst@object{psplot}} +\def\psplot@i#1#2#3{% + \pst@killglue + \begingroup + \use@par + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{% + \psplot@init + /x #1 def + /x1 #2 def + /dx x1 x sub \psk@plotpoints div def + /xy { + x \pst@number\psxunit mul + #3 \pst@number\psyunit mul + } def}% + \gdef\psplot@init{}% + \@pstfalse + \@nameuse{testqp@\psplotstyle}% + \if@pst + \psplot@ii + \else + \psplot@iii + \fi + \endgroup + \ignorespaces} +\def\psplot@ii{% + \addto@pscode{% + xy \@nameuse{beginqp@\psplotstyle} + \psk@plotpoints 1 sub { + /x x dx add def + xy \@nameuse{doqp@\psplotstyle} + } repeat + /x x1 def + xy \@nameuse{doqp@\psplotstyle}}% + \@nameuse{endqp@\psplotstyle}} +\def\psplot@iii{% + \addto@pscode{% + mark + /n 2 def + \psk@plotpoints { + xy + n 2 roll + /n n 2 add def + /x x dx add def + } repeat + /x x1 def + xy + n 2 roll}% + \@nameuse{endplot@\psplotstyle}} + +\def\parametricplot{\def\pst@par{}\pst@object{parametricplot}} +\def\parametricplot@i#1#2#3{% + \pst@killglue + \begingroup + \use@par + \@nameuse{beginplot@\psplotstyle}% + \addto@pscode{% + \psplot@init + /t #1 def + /t1 #2 def + /dt t1 t sub \psk@plotpoints div def + /xy { + #3 + \pst@number\psyunit mul exch + \pst@number\psxunit mul exch + } def}% + \gdef\psplot@init{}% + \@pstfalse + \@nameuse{testqp@\psplotstyle}% + \if@pst + \parametricplot@ii + \else + \parametricplot@iii + \fi + \endgroup + \ignorespaces} +\def\parametricplot@ii{% + \addto@pscode{% + xy \@nameuse{beginqp@\psplotstyle} + \psk@plotpoints 1 sub { + /t t dt add def + xy \@nameuse{doqp@\psplotstyle} + } repeat + /t t1 def + xy \@nameuse{doqp@\psplotstyle}}% + \@nameuse{endqp@\psplotstyle}} +\def\parametricplot@iii{% + \addto@pscode{% + mark + /n 2 def + \psk@plotpoints { + xy + n 2 roll + /n n 2 add def + /t t dt add def + } repeat + /t t1 def + xy + n 2 roll}% + \@nameuse{endplot@\psplotstyle}} + +% These axes macros are complicated. Be careful. + +% \pst@ticks{angle}{dx}{n}{int} +% int=1 if ticks appear on top of axes, 0 otherwise. +\def\pst@ticks#1#2#3#4{% + \begin@SpecialObj + \addto@pscode{% + #1 rotate + /n #3 def + /dx #2 def + n 0 lt { /dx dx neg def /n n neg def } if + /y2 \psk@ticksize CLW 2 div add def + /y1 y2 neg def + \ifnum\psk@tickstyle=1 + \ifdim#4<\z@ /y2 \else /y1 \fi 0 def + \else + \ifnum\psk@tickstyle=-1 + \ifdim#4<\z@ /y1 \else /y2 \fi 0 def + \fi + \fi + /x dx def + n { x y1 moveto x y2 lineto stroke /x x dx add def } repeat}% + \end@SpecialObj} + + +\def\psset@ticksize#1{\pst@getlength{#1}\psk@ticksize} +\psset@ticksize{3pt} + +\def\psset@tickstyle#1{\pst@expandafter\psset@@tickstyle{#1}\@nil} +\def\psset@@tickstyle#1#2\@nil{% + \ifx#1f\let\psk@tickstyle\z@\else + \ifx#1t\let\psk@tickstyle\@ne\else + \ifx#1b\let\psk@tickstyle\m@ne\else + \@pstrickserr{Bad tick style: `#1#2'}\@ehpa + \fi\fi\fi} +\psset@tickstyle{full} + +\def\psset@ticks#1{\pst@expandafter\psset@@ticks{#1}\@nil\psk@ticks} +\def\psset@@ticks#1#2\@nil#3{% + \ifx#1a\let#3\z@\else + \ifx#1x\let#3\@ne\else + \ifx#1y\let#3\tw@\else + \ifx#1n\let#3\thr@@\else + \@pstrickserr{Bad argument: `#1#2'}\@ehpa + \fi\fi\fi\fi} +\psset@ticks{all} + +\def\psset@labels#1{\pst@expandafter\psset@@ticks{#1}\@nil\psk@labels} +\psset@labels{all} + +\def\psset@Ox#1{\edef\psk@Ox{#1}} +\psset@Ox{0} +\def\psset@Dx#1{\edef\psk@Dx{#1}} +\psset@Dx{1} +\def\psset@dx#1{% + \pssetxlength\pst@dimg{#1}% + \edef\psk@dx{\number\pst@dimg}} +\psset@dx{0} + +\def\psset@Oy#1{\edef\psk@Oy{#1}} +\psset@Oy{0} +\def\psset@Dy#1{\edef\psk@Dy{#1}} +\psset@Dy{1} +\def\psset@dy#1{% + \pssetylength\pst@dimg{#1}% + \edef\psk@dy{\number\pst@dimg}} +\psset@dy{0} + +\newif\ifshoworigin +\def\psset@showorigin#1{\@nameuse{showorigin#1}} +\psset@showorigin{true} + + +\def\psaxes{\def\pst@par{}\pst@object{psaxes}} +\def\psaxes@i{\pst@getarrows\psaxes@ii} +\def\psaxes@ii(#1){\@ifnextchar({\psaxes@iii(#1)}{\psaxes@iv(0,0)(0,0)(#1)}} +\def\psaxes@iii(#1)(#2){% + \@ifnextchar(% + {\psaxes@iv(#1)(#2)}% + {\psaxes@iv(#1)(#1)(#2)}} +\def\psaxes@iv(#1,#2)(#3,#4)(#5,#6){% + \setbox\pst@hbox=\hbox\bgroup + \use@par + \pssetxlength\pst@dimg{#1}% o-x + \pssetylength\pst@dimh{#2}% o-y + \pssetxlength\pst@dima{#3}% bl-x + \pssetylength\pst@dimb{#4}% bl-y + \pssetxlength\pst@dimc{#5}% ur-x + \pssetylength\pst@dimd{#6}% ur-y +% Whole thing will be translated to origin: + \advance\pst@dima-\pst@dimg % Dist. from bl-x to o-x + \advance\pst@dimb-\pst@dimh % Dist. from bl-y to o-y + \advance\pst@dimc-\pst@dimg % Dist. from ur-x to o-x + \advance\pst@dimd-\pst@dimh % Dist. from ur-y to o-y +% Make lines/arrows or frame: + \@nameuse{psxs@\psk@axesstyle}% +% "\pslabelsep" should be from the edge of the axis. + \advance\pslabelsep.5\pslinewidth +% Now the ticks and labels. Start by checking for "\multido". +% !!Need to fix this so that does nothing when there are 0 ticks.!! + \begingroup + \ifdim\pst@dimb=\z@\else\showoriginfalse\fi + \ifnum\psk@dx=\z@ + \pst@dimg=\psk@Dx\psxunit + \edef\psk@dx{\number\pst@dimg}% + \fi + \ifnum\psk@ticks<\tw@ + \ifnum\psk@tickstyle>\z@\else + \advance\pslabelsep\psk@ticksize\p@ + \fi + \fi + \pst@hlabels\pst@dimc\psk@arrowB + \pst@hlabels\pst@dima\psk@arrowA + \endgroup + \begingroup + \ifdim\pst@dima=\z@\else\showoriginfalse\fi + \ifnum\psk@dy=\z@ + \pst@dimg=\psk@Dy\psyunit + \edef\psk@dy{\number\pst@dimg}% + \fi + \ifodd\psk@ticks\else + \ifnum\psk@tickstyle>\z@\else + \advance\pslabelsep\psk@ticksize\p@ + \fi + \fi + \pst@vlabels\pst@dimd\psk@arrowB + \pst@vlabels\pst@dimb\psk@arrowA + \endgroup +% Now close "\pst@hbox" (which is 0-dimensional), and put it at the origin. + \egroup + \pssetxlength\pst@dimg{#1}% + \pssetylength\pst@dimh{#2}% + \leavevmode\psput@cartesian\pst@hbox + \ignorespaces} + +\def\psxs@axes{% + \psxs@@axes\pst@dima\pst@dimc{}% + \psxs@@axes\pst@dimb\pst@dimd{exch}} +\def\psxs@@axes#1#2#3{% + \begin@SpecialObj + \ifdim#1=\z@ + \def\psk@arrowA{C}% + \else + \ifdim#2=\z@ + \def\psk@arrowB{C}% + \fi + \fi + \let\pst@linetype\pst@arrowtype + \pst@addarrowdef + \addto@pscode{% + \pst@number#2 0 #3 + \pst@number#1 0 #3 + ArrowA + CP 4 2 roll + ArrowB + L + pop pop}% + \pst@stroke + \end@SpecialObj} + +\def\psxs@frame{% + \begin@SpecialObj + \addto@pscode{% + 0 0 moveto \pst@number\pst@dimc 0 L + 0 \pst@number\pst@dimd 2 copy rlineto L closepath}% + \pst@stroke + \pst@fill + \end@SpecialObj + \let\psk@arrowA\@empty + \let\psk@arrowB\@empty} + +\def\psset@axesstyle#1{% + \@ifundefined{psxs@#1}% + {\@pstrickserr{Axes style `#1' not defined}\@eha}% + {\edef\psk@axesstyle{#1}}} +\psset@axesstyle{axes} +\def\psxs@none{\let\psk@arrowA\@empty\let\psk@arrowB\@empty} + +% The origin is never the only label. +\def\pst@hlabels#1#2{% + \ifdim#1=\z@\else + \ifx#2\empty\else + \advance#1\ifdim#1>\z@-\fi7\pslinewidth + \fi + \pst@cnta=#1\relax % Distance (in sp) to end. + \divide\pst@cnta\psk@dx\relax % Number of ticks/labels + \ifnum\pst@cnta=\z@\else + \pst@dimb=\psk@dx sp % Space between ticks. + \ifnum\psk@ticks<\tw@ + \pst@ticks{0}{\pst@number\pst@dimb}{\the\pst@cnta}{\pst@dimd}% + \fi + \ifnum\psk@labels<\tw@ \pst@@hlabels\fi + \showoriginfalse + \fi + \fi} + +% Knows \pst@dimb and \pst@cnta +\def\pst@@hlabels{% + \vbox to\z@{% + \ifdim\pst@dimd>\z@\vskip\pslabelsep\else\vss\fi + \ifnum\pst@cnta<\z@ + \pst@dimb=-\pst@dimb + \fi + \hbox to\z@{% + \ifshoworigin\hbox to \z@{\hss\pshlabel{\psk@Ox}\hss}\fi + \mmultido + {\n=\psk@Ox+\psk@Dx}% + {\pst@cnta}% + {\hskip\pst@dimb\hbox to \z@{\hss\pshlabel{\n}\hss}}% + \hss}% + \ifdim\pst@dimd>\z@\vss\else\vskip\pslabelsep\fi}}% + +\def\pshlabel#1{$#1$} + +\def\pst@vlabels#1#2{% + \ifdim#1=\z@\else + \ifx#2\empty\else + \advance#1\ifdim#1>\z@-\fi7\pslinewidth + \fi + \pst@cnta=#1\relax % Distance (in sp) to end. + \divide\pst@cnta\psk@dy\relax % Number of ticks/labels + \ifnum\pst@cnta=\z@\else + \pst@dima=\psk@dy sp % Space between ticks. + \ifodd\psk@ticks\else + \pst@ticks{90}{\pst@number\pst@dima}{\the\pst@cnta}{-\pst@dimc}% + \fi + \ifodd\psk@labels\else\pst@@vlabels\fi + \showoriginfalse + \fi + \fi} + +% Knows \pst@dima and \pst@cnta +\def\pst@@vlabels{% + \vbox to\z@{% + \ifnum\pst@cnta>\z@ + \pst@dima=-\pst@dima + \fi + \offinterlineskip + \ifshoworigin + \vbox to \z@{\vss\hbox to\z@{% + \ifdim\pst@dimc>\z@\hss\else\hskip\pslabelsep\fi + \psvlabel{\psk@Oy}% + \ifdim\pst@dimc>\z@\hskip\pslabelsep\else\hss\fi}\vss}% + \fi + \mmultido + {\n=\psk@Oy+\psk@Dy}% + {\pst@cnta}% + {\vbox to\pst@dima{\vss}\vbox to \z@{\vss\hbox to\z@{% + \ifdim\pst@dimc>\z@\hss\else\hskip\pslabelsep\fi + \psvlabel{\n}% + \ifdim\pst@dimc>\z@\hskip\pslabelsep\else\hss\fi}\vss}}% + \vss}} + +\def\psvlabel#1{$#1$} + +\catcode`\@=\TheAtCode\relax +\endinput +%% pst-plot.tex |