summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-10-19 00:02:12 +0000
committerKarl Berry <karl@freefriends.org>2009-10-19 00:02:12 +0000
commit4b211dcd2439c153b096e7870837947d4dda436a (patch)
treea930a2ee83edd74c7bdff4e5dc994564d26333bf /Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex
parentf178d106a65d06929870917eddad8bdaa1ece706 (diff)
pstricks-add 3.35 (13oct09)
git-svn-id: svn://tug.org/texlive/trunk@15833 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex176
1 files changed, 100 insertions, 76 deletions
diff --git a/Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex b/Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex
index bcb74d07d02..7b9214d004c 100644
--- a/Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex
+++ b/Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex
@@ -1,4 +1,4 @@
-%% $Id: pstricks-add.tex 118 2009-05-25 18:47:43Z herbert $
+%% $Id: pstricks-add.tex 139 2009-10-13 12:16:45Z herbert $
%%
%%
%% This is file `pstricks-add.tex',
@@ -31,8 +31,8 @@
\ifx\PSTFPloaded\endinput\else \input pst-fp \fi
\ifx\PSTmathLoaded\endinput\else \input pst-math \fi
%
-\def\fileversion{3.34}
-\def\filedate{2009/05/25}
+\def\fileversion{3.35}
+\def\filedate{2009/10/12}
\message{`pstricks-add' v\fileversion, \filedate\space (dr,hv)}
%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
@@ -1528,11 +1528,11 @@
\define@key[psset]{pstricks-add}{xlabelPos}[b]{\pst@expandafter\psset@@xlabelPos{#1}\@nil}
\define@key[psset]{pstricks-add}{ylabelPos}[l]{\pst@expandafter\psset@@ylabelPos{#1}\@nil}
\def\psset@@xlabelPos#1#2\@nil{%
- \ifx#1t
+ \ifx#1t
\def\psk@xlabelPos{\tw@}% 2=top
\pst@xticksizeC=\pst@xticksizeB%
\else
- \ifx#1a
+ \ifx#1a
\def\psk@xlabelPos{\@ne}% 1=axis
\pst@xticksizeC=\z@%
\else
@@ -1540,11 +1540,11 @@
\pst@xticksizeC=\pst@xticksizeA%
\fi\fi}%
\def\psset@@ylabelPos#1#2\@nil{%
- \ifx#1r
+ \ifx#1r
\def\psk@ylabelPos{\tw@}% 2=right
\pst@yticksizeC=\pst@yticksizeB%
\else
- \ifx#1a
+ \ifx#1a
\def\psk@ylabelPos{\@ne}% 1=axis
\pst@yticksizeC=\z@%
\else
@@ -1566,9 +1566,6 @@
\define@key[psset]{pstricks-add}{trigLabelBase}[0]{\pst@getint{#1}{\psk@trigLabelBase}}
\psset{trigLabelBase=0}
%
-\define@boolkey[psset]{pstricks-add}[Pst@]{trigLabelsSimplify}[true]{}
-\psset[pstricks-add]{trigLabelsSimplify=true}
-%
\define@boolkey[psset]{pstricks-add}[Pst@]{trigLabels}[true]{%
\ifPst@trigLabels
\def\pst@@@hlabel##1{\pshlabel{##1}}
@@ -1751,10 +1748,12 @@
\ifx\@xyDecimals\@empty% take value as is
\def\@tempa{#1}% write only if not empty
\ifx\@tempa\@empty% write nothing
- \else\psk@decimalSeparator#1\fi%
+ \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
- \psk@decimalSeparator%
+ \ifmmode\expandafter\mathord\expandafter{\psk@decimalSeparator}\else\psk@decimalSeparator\fi%
+% \psk@decimalSeparator
\@Reset@digitcounter
\expandafter\@process@digits#1*;
\fi%
@@ -1787,10 +1786,11 @@
\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
+ \begingroup%
+ \use@par%
\uput{\pslabelsep}[#5](#3|#1){#4}\uput{\pslabelsep}[#7](#1|#3){#6}%
\endgroup%
+ \ignorespaces%
}
%
\def\psaxes@vii(#1,#2)(#3,#4)(#5,#6){%
@@ -2486,15 +2486,16 @@
} ifelse
} repeat
}{%
- /ncount 0 def
+ /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
+ \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
@@ -2725,13 +2726,13 @@
%
\def\psplot@i#1#2{\@ifnextchar[{\psplot@I{#1}{#2}}{\psplot@I{#1}{#2}[]}}
\def\psplot@I#1#2[#3]#4{%
- \pst@killglue
- \begingroup
- \use@par
+ \pst@killglue%
+ \begingroup%
+ \use@par%
\@nameuse{beginplot@\psplotstyle}%
% D.G. modification begin - Jun. 9, 1998
- \ifPst@polarplot
- \addto@pscode{%
+ \ifPst@polarplot%
+ \addto@pscode{
\psplot@init
#3
/x #1 def
@@ -2767,7 +2768,7 @@
} def}%
\else% polarplot
% D.G. modification end
- \addto@pscode{%
+ \addto@pscode{
\psplot@init
#3
/x #1 def
@@ -2799,20 +2800,16 @@
x \pst@number\psxunit mul F@pstplot \pst@number\psyunit mul
% \ifPst@algebraic F@pstplot \else #4 \fi \pst@number\psyunit mul
} def}%
- \fi
+ \fi%
\gdef\psplot@init{}%
- \@pstfalse
+ \@pstfalse%
\@nameuse{testqp@\psplotstyle}%
- \if@pst
- \psplot@ii
- \else
- \psplot@iii
- \fi
- \endgroup
+ \if@pst\psplot@ii\else\psplot@iii\fi%
+ \endgroup%
\ignorespaces}
%
\def\psplot@ii{%
- \ifPst@VarStep
+ \ifPst@VarStep%
\addto@pscode{%
mark xy \@nameuse{beginqp@\psplotstyle}
{ F2@pstplot abs ComputeStep
@@ -2822,7 +2819,7 @@
xy \@nameuse{doqp@\psplotstyle}
x x1 eq { exit } if} loop}%
\else\pst@killglue%
- \addto@pscode{%
+ \addto@pscode{
/ps@Exit false def
xy \@nameuse{beginqp@\psplotstyle}
\ifx\psk@method\@varrkiv\else\psk@plotpoints 1 sub \fi {
@@ -2839,8 +2836,8 @@
\fi%
\@nameuse{endqp@\psplotstyle}}
\def\psplot@iii{%
- \ifPst@VarStep
- \addto@pscode{%
+ \ifPst@VarStep%
+ \addto@pscode{
/n 2 def
mark
{ xy n 2 roll F2@pstplot abs
@@ -2849,9 +2846,10 @@
/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}%
+ xy
+ n 2 roll}%
\else\pst@killglue%
- \addto@pscode{%
+ \addto@pscode{
mark
/n 2 def
\ifx\psk@method\@varrkiv\else\psk@plotpoints\fi {
@@ -2860,9 +2858,10 @@
/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
+ } \ifx\psk@method\@varrkiv loop\else repeat \fi \space
/x x1 def
- xy
+ xy
+ 2 copy \tx@UserCoor 2 array astore /SaveFinalState ED
n 2 roll}%
\fi%
\@nameuse{endplot@\psplotstyle}}
@@ -3202,16 +3201,17 @@
%% #1 : x value
%% #2 : delta x or x0,x1
%% #3 : function
-\def\psplotTangent{\pst@object{psplotTangent}}% idea from Dominique Rodriguez
-\def\psplotTangent@i#1#2#3{%
- \expandafter\psplotTangent@ii#2,,\@nil
+\def\psplotTangent{\@ifnextchar*{\def\pst@tempA{true }\psplotTangent@v}{\def\pst@tempA{false }\psplotTangent@v*}}
+\def\psplotTangent@v*{\@ifnextchar[{\psplotTangent@i}{\psplotTangent@i[]}}
+\def\psplotTangent@i[#1]#2#3#4{%
+ \expandafter\psplotTangent@ii#3,,\@nil
+ \def\pst@par{#1}%
+ \ifx\psk@Derive\@empty\ifPst@algebraic\addbefore@par{Derive=NOT@EMPTY}\fi\fi%%dr 0606
\begin@OpenObj%
-% \let\pst@linetype\pst@arrowtype%
-% \pst@addarrowdef%
- \ifx\psk@Derive\@empty\ifPst@algebraic\psset{Derive=NOT@EMPTY}\fi\fi%%dr 0606
\addto@pscode{
+ /StarVersion \pst@tempA def
gsave % save current state
- /F@pstplot \ifPst@algebraic (#3) tx@addDict begin AlgParser end cvx \else { #3 } \fi def % define function
+ /F@pstplot \ifPst@algebraic (#4) tx@addDict begin AlgParser end cvx \else { #4 } \fi def % define function
\ifx\psk@Derive\@empty\else
\ifx\psk@Derive\@NOTEMPTY\else%%dr 0606
/FDer@pstplot % do we have a derivation defined?
@@ -3220,39 +3220,39 @@
\fi
/@parametric false def %%dr 0606
% first we calculate the origin
- #1 dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
+ #2 dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
%%{ /y ED /x ED } % if yes, then we have 2 values
{ /y ED /x ED /@parametric true def } % if yes, then we have 2 values%%dr 0606
{ \ifPst@polarplot x \ifPst@algebraic RadtoDeg \fi PtoC /y ED /x ED \else /y ED \fi } ifelse
cleartomark
\ifx\psk@Derive\@NOTEMPTY%%begin dr 0606
%% algebraic we can use the derivative machine
- /FDer@pstplot (#3) @parametric { (t) } { (x) } ifelse
+ /FDer@pstplot (#4) @parametric { (t) } { (x) } ifelse
tx@Derive begin Derive end tx@addDict begin AlgParser end cvx def
\fi%%end dr 0606
x \pst@number\psxunit mul y \pst@number\psyunit mul
translate % define the temporary origin
% now we calculate the slope of the tangent
\ifx\psk@Derive\@empty% de we have a derivation defined?
- #1 abs 1.0e-6 lt % no, we choose secant for the tangent
- { #1 0.0005 add dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
+ #2 abs 1.0e-6 lt % no, we choose secant for the tangent
+ { #2 0.0005 add dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
{ /y2 ED /x2 ED } % we have 2 values
{ \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi
cos mul /x2 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x2 x def \fi /y2 ED } ifelse
cleartomark % delete the mark
- #1 0.0005 sub dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
+ #2 0.0005 sub dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
{ /y1 ED /x1 ED }
{ \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi
cos mul /x1 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x1 x def \fi /y1 ED } ifelse
cleartomark
y2 y1 sub x2 x1 sub } % dy dx
{ % > 1.0e-06
- #1 1.0005 mul dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
+ #2 1.0005 mul dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
{ /y2 ED /x2 ED } % we have 2 values
{ \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi
cos mul /x2 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x2 x def \fi /y2 ED } ifelse
cleartomark
- #1 .9995 mul dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
+ #2 .9995 mul dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot
{ /y1 ED /x1 ED } % we have 2 values
{ \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi
cos mul /x1 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x1 x def \fi /y1 ED } ifelse
@@ -3260,7 +3260,7 @@
y2 y1 sub \pst@number\psyunit mul x2 x1 sub \pst@number\psxunit mul } ifelse
atan % atan(dy dx), we have the slope angle of the secant
\else % there is a derivation defined
- #1 dup /x ED /t ED tx@addDict begin mark FDer@pstplot end counttomark 1 gt % test, if we have parametricplot
+ #2 dup /x ED /t ED tx@addDict begin mark FDer@pstplot end counttomark 1 gt % test, if we have parametricplot
{ /y ED /x ED }
{ \ifPst@polarplot /Fphi ED % the value F'(phi)
tx@addDict begin F@pstplot end x \ifPst@algebraic RadtoDeg \fi PtoC /y0 ED /x0 ED % the x y values
@@ -3271,36 +3271,37 @@
y \pst@number\psyunit mul x \pst@number\psxunit mul Atan \ifPST@Tnormal 90 add \fi
% y ATAN1 % we have the slope angle of the tangent. ATAN is defined int the pstricks.pro, patch 6
\fi
- cvi 180 mod dup 90 gt { 180 sub } if % -90 <= angle <= 90
- rotate % rotate, depending to the origin
- /Lineto /lineto load def % the pro file needs /Lineto
- [ % start array of points
+ cvi 180 mod dup 90 gt { 180 sub } if % -90 <= angle <= 90
+ rotate % rotate, depending to the origin
+ /Lineto /lineto load def % the pro file needs /Lineto
+ [ % start array of points
\ifPST@Tnormal
0 0 % moveto
- #2
+ #3
y \pst@number\psyunit mul x \pst@number\psxunit mul Atan 90 add cos div \pst@number\psxunit mul 0 % lineto
\else % points are in reverse order ...
- \ifx\pst@tempRight\@empty #2 \else \pst@tempRight\space \fi \pst@number\psxunit mul 0 % moveto
- \if@star 0 \else
- \ifx\pst@tempRight\@empty #2 neg \else \pst@tempLeft\space \fi \pst@number\psxunit mul \fi 0 % lineto
+ \ifx\pst@tempRight\@empty #3 \else \pst@tempRight\space \fi \pst@number\psxunit mul 0 % moveto
+ StarVersion { 0 }{\ifx\pst@tempRight\@empty #3 neg \else
+ \pst@tempLeft\space \fi \pst@number\psxunit mul} ifelse 0 % lineto
\fi
- \pst@cp % kill the currentpoint, if any
- false % don't show the points
+ \pst@cp % kill the currentpoint, if any
+ false % don't show the points
\tx@Line
-% ArrowA CP 4 2 roll ArrowB L % the line with arrows L is defined in pstricks.pro
+% ArrowA CP 4 2 roll ArrowB L % the line with arrows L is defined in pstricks.pro
% \pst@number\pslinewidth SLW % set linewidth in pt
-% \@nameuse{psls@\pslinestyle} % linestyle
-% \pst@usecolor\pslinecolor % linecolor
- stroke % stroke everything
- \ifshowpoints % show the points?
+% \@nameuse{psls@\pslinestyle} % linestyle
+% \pst@usecolor\pslinecolor % linecolor
+ stroke % stroke everything
+ \ifshowpoints % show the points?
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}%
0 0 Dot
\fi
- grestore % restore old graphics state
+ grestore % restore old graphics state
}%
\use@pscode % part of \end@OpenObj
\endgroup% % part of \end@OpenObj
+ \@starfalse%
\ignorespaces% % part of \end@OpenObj
}%
%
@@ -3309,21 +3310,41 @@
%% #3 initial value of y (which is a vector) y(0) y'(0) y''(0) ...
%% #4 value of the derivative (y and t can be used)
%
+\define@boolkey[psset]{pstricks-add}[Pst@]{GetFinalState}[true]{}
\define@key[psset]{pstricks-add}{filename}{\def\psk@filename{#1}}%
\define@boolkey[psset]{pstricks-add}[Pst@]{saveData}[true]{} % \ifPst@saveData
-\psset[pstricks-add]{saveData=false,filename=PSTdata}
-%
+\psset[pstricks-add]{GetFinalState=false,saveData=false,filename=PSTdata}
+%
+\def\Begin@SaveFinalState{ end
+ /PST@beginspecial /@beginspecial load def
+ /PST@endspecial /@endspecial load def
+ /PST@setspecial /@setspecial load def
+ /@beginspecial {} def /@endspecial{} def /@setspecial {} def
+ tx@Dict begin
+}
+\newif\ifPst@BeginSaveFinalState \Pst@BeginSaveFinalStatefalse
+\def\BeginSaveFinalState{\Pst@BeginSaveFinalStatetrue}
+\def\End@SaveFinalState{
+ /@beginspecial /PST@beginspecial load def
+ /@endspecial /PST@endspecial load def
+ /@setspecial /PST@setspecial load def
+}
+\def\EndSaveFinalState{\pstverb{\End@SaveFinalState}}
+
\def\psplotDiffEqn{\pst@object{psplotDiffEqn}}% initial code by Dominique 2005-05-21
\def\psplotDiffEqn@i#1#2#3#4{%
+ \addbefore@par{xStart=#1}%
\pst@killglue%
\begingroup%
\use@par%
\@nameuse{beginplot@\psplotstyle}%
\addto@pscode{%
+ \ifPst@BeginSaveFinalState \Begin@SaveFinalState \fi
\ifPst@saveData /Pst@data (\psk@filename) (w) file def \fi
/x #1 def % first value
/x1 #2 def % last value
- /y [ #3 ] def % values for t=0
+ \ifPst@GetFinalState \Begin@SaveFinalState /y SaveFinalState def
+ \else /y [ #3 ] def \fi % values for t=0
/ylength y length def % number of elements in #3
/addvect {
1 1 ylength {
@@ -3344,13 +3365,13 @@
/Func {
\ifPst@algebraic F@pstplot ylength array astore
\else
- \ifPst@buildvector\else y aload pop \fi #4
+ \ifPst@buildvector\else y aload pop \fi #4
\ifPst@buildvector\else ylength array astore \fi
\fi
} def
\ifx\psk@method\@adams /F1 0 def /F2 0 def /F3 0 def /F4 0 def /F5 0 def /F6 0 def /INIT 1 def \fi
\ifx\psk@method\@empty\else
- \ifx\psk@method\@varrkiv %% RUNGE-KUTTA method with var step algorithm
+ \ifx\psk@method\@varrkiv %% RUNGE-KUTTA method with var step algorithm
/VarStep false def /VarStepRatio 1 def
/RK {
/k0 Func { dx mul } forall ylength array astore def %% y
@@ -3476,11 +3497,14 @@
\ifx\psk@whichord\@empty 0 \else \psk@whichord\space \fi get %
\else \psk@plotfuncy\space \fi
\pst@number\psyunit mul
+% Pst@data (\string\[) writestring
\ifPst@saveData
- 2 copy \pst@number\psyunit div exch \pst@number\psxunit div
+ 2 copy
+ \pst@number\psyunit div exch \pst@number\psxunit div
20 string cvs Pst@data exch writestring
Pst@data (\space) writestring
20 string cvs Pst@data exch writestring
+% Pst@data (\string\]) writestring
Pst@data (\string\n) writestring
\fi
} def