summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-08-12 22:17:14 +0000
committerKarl Berry <karl@freefriends.org>2013-08-12 22:17:14 +0000
commit8dda786294d3a2eb9a110ff813d0a6d3d4870c51 (patch)
treece9dbab8c81a39f816188f5679c4590b0d36e562 /Master/texmf-dist/doc/generic
parent368c76584a33996d358ac5341b92dc7135cad490 (diff)
pst-plot (12aug13)
git-svn-id: svn://tug.org/texlive/trunk@31420 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic')
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/Changes1
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/Contents4
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-1.pdfbin0 -> 439324 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-2.pdfbin0 -> 141286 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.bib (renamed from Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.bib)0
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.dat (renamed from Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.dat)0
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.pdfbin0 -> 1194030 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.tex (renamed from Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.tex)57
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/doc/tugboat01-4.pdfbin0 -> 114016 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/latex/pst-plot.sty37
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.pdfbin1188325 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot.tex2509
-rw-r--r--Master/texmf-dist/doc/generic/pst-plot/tex/pst-plot97.tex642
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
new file mode 100644
index 00000000000..0fc4ce30313
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-1.pdf
Binary files differ
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
new file mode 100644
index 00000000000..014508059ef
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-2.pdf
Binary files differ
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
new file mode 100644
index 00000000000..fbcac7deaec
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-plot/doc/pst-plot-doc.pdf
Binary files differ
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
new file mode 100644
index 00000000000..eae65d2599b
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-plot/doc/tugboat01-4.pdf
Binary files differ
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
deleted file mode 100644
index 49008f441e8..00000000000
--- a/Master/texmf-dist/doc/generic/pst-plot/pst-plot-doc.pdf
+++ /dev/null
Binary files differ
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