diff options
author | Karl Berry <karl@freefriends.org> | 2010-06-12 00:11:41 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-06-12 00:11:41 +0000 |
commit | 3ca859b7c25a23c6fa253978191197782df3d799 (patch) | |
tree | 7f38b43de274e72138f80c27f917ef50b05578f1 /Master/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex | |
parent | b3ba42c57f43aa4acf39c30b4fc092ffdbf63269 (diff) |
pstricks-add 3.40 (11jun10)
git-svn-id: svn://tug.org/texlive/trunk@18900 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.tex | 158 |
1 files changed, 152 insertions, 6 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 7fd67ab5812..aff34a73d99 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 288 2010-02-11 15:43:29Z herbert $ +%% $Id: pstricks-add.tex 345 2010-06-10 16:07:44Z herbert $ %% %% %% This is file `pstricks-add.tex', @@ -9,6 +9,7 @@ %% %% Dominique Rodriguez %% Herbert Voss <hvoss@tug.org> +%% Michael Sharpe <msharpe@ucsd.edu> %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives @@ -30,8 +31,8 @@ \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi \ifx\PSTmathLoaded\endinput\else \input pst-math \fi % -\def\fileversion{3.39} -\def\filedate{2010/03/12} +\def\fileversion{3.40} +\def\filedate{2010/06/05} \message{`pstricks-add' v\fileversion, \filedate\space (dr,hv)} % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax @@ -174,6 +175,7 @@ /radius1 \psk@braceWidthOuter def /radius2 \psk@braceWidthInner def /Alpha \pst@tempA \pst@tempB 3 -1 roll sub 3 1 roll exch sub atan def + gsave STV CP T /ps@rot \psk@rot\space def grestore /Length \pst@tempA \pst@tempB Pyth2 def /Left { Length \psk@bracePos\space mul } bind def /Right { Length Left sub } bind def @@ -752,6 +754,150 @@ /VPutPos { { VPutLines } HPutCurve } def }> % +\def\parseRP#1;#2;#3\@nil{%check whether arg of refpt contains ; +\def\arg@A{#1}\def\arg@B{#2}% +%\ifx\arg@B\@empty\let\uflag\@empty\else\edef\uflag{1}\fi% +}% +\def\Put{\pst@object{Put}}% +\def\Put@i{\@ifnextchar({\Put@ii{}}{\Put@ii}}% +\def\Put@ii#1(#2)#3{{% +\pst@killglue% +\use@par% +\expandafter\parseRP#1;;\@nil%sets \arg@A, \arg@B +\ifx\arg@B\@empty% use \rput + \edef\arg@A{\if@star*\fi% + \ifx\arg@A\@empty\else[\arg@A]\fi% + }% + \edef\pst@tempA{\noexpand\rput\arg@A(#2){\noexpand#3}}\pst@tempA% +\else% use \uput + \edef\arg@A{\if@star*\fi% + \ifx\arg@A\@empty\else{\arg@A}\fi% + \ifx\arg@B\@empty[0]\else[\arg@B]\fi% + }% + \edef\pst@tempA{\noexpand\uput\arg@A(#2){\noexpand#3}}\pst@tempA% +\fi}\ignorespaces}% +% Modify pst@rot so that a rotation may be specified with a node or ps code +% +\define@key[psset]{pstricks-add}{Os}[0]{\def\PST@Os{#1}} +\psset{Os=0}% +\define@key[psset]{pstricks-add}{Ds}[1]{\def\PST@Ds{#1}} +\psset{Ds=1}% +\define@key[psset]{pstricks-add}{metricInitValue}[0]{\def\PST@metricInitValue{#1}} +\psset{metricInitValue=0}% +\define@boolkey[psset]{pstricks-add}[PST@]{metricFunction}[true]{}%use \ifPST@metricFunction +\psset{metricFunction=false}% +\def\pscurvepoints{\pst@object{pscurvepoints}}% +\def\pscurvepoints@i#1#2#3#4{{%optional [plotpoints=xx] +% #1=tmin,#2=tmax,#3=function (of t),#4=array root name, + \pst@killglue% + \use@par% + \edef\my@tempA{#3}% x(t) y(t) expanded + \expandafter\testAlg\my@tempA|\@nil% + \pst@Verb{ % so we can use definitions from tx@Dict + /unitratio \pst@number\psyunit \pst@number\psxunit div def + /unitratiosq unitratio dup mul def + /t0 #1 def + /t1 #2 def + t1 t0 sub \psk@plotpoints\space div /dt exch def }% + \pst@cntc=\psk@plotpoints\relax%\psk@plotpoints=plotpoints-1 + \pst@cntb=\pst@cntc\relax%\psk@plotpoints=plotpoints-1 + \advance\pst@cntc by \@ne\relax%=plotpoints + \ifx\my@tempD\@empty\pst@Verb{ /Func (#3) cvx def }% + \else\pst@Verb{ /Func (#3 ) AlgParser cvx def }% + \fi% + \pst@Verb{ + /#4.X \the\pst@cntc\space array def + /#4.Y \the\pst@cntc\space array def % + /#4Delta.X \the\pst@cntc\space array def % + /#4Delta.Y \the\pst@cntc\space array def % + /#4Normal.X \the\pst@cntc\space array def % + /#4Normal.Y \the\pst@cntc\space array def % + /t #1 def Func 2 copy /priory ED /priorx ED #4.Y 0 3 -1 roll put #4.X 0 3 -1 roll put % + 1 1 \the\pst@cntb\space { dup /j ED dt mul #1 add /t ED Func %x y on stack + 2 copy priory sub dup #4Delta.Y j 3 -1 roll put % x y x y-priory + unitratiosq mul neg #4Normal.X j 3 -1 roll put % x y x + priorx sub dup #4Delta.X j 3 -1 roll put % x y x-priorx + #4Normal.Y j 3 -1 roll put % x y + 2 copy /priory ED /priorx ED % x y + #4.Y j 3 -1 roll put #4.X j 3 -1 roll put } for % + }% + \expandafter\xdef \csname #4pointcount\endcsname {\psk@plotpoints}% +% \typeout{Created points #40 .. #4\psk@plotpoints}% +}\ignorespaces}% +% +%code to place ticks along polyline +\def\pspolylineticks{\pst@object{pspolylineticks}}% +\def\pspolylineticks@i#1{\@ifnextchar[{\pspolylineticks@ii{#1}}{\pspolylineticks@ii{#1}[]}}% +\def\pspolylineticks@ii#1[#2]#3#4#5{{% +%#1= root name,#2=pscode (optional),#3=metric function,#4=first tick,#5=tick count +% Metric function may be a function of x, y (keyword metricFunction) +% or a function of x, y, dx, dy, ds requiring incremental build +\pst@killglue% +\addbefore@par{arrows=-,linewidth=\psk@ytickwidth\pslinewidth}% +\use@par% +\pst@killglue%there's a leak that can occur here with ticksize--fixed in recent pstricks.tex +\newcount\pst@cntC% +\pst@cntC=\expandafter\csname #1pointcount\endcsname\relax% +\pst@cntb=\pst@cntC\advance\pst@cntb\m@ne\relax% +\pst@cntd=\pst@cntC\advance\pst@cntd\@ne\relax% +\pst@Verb{ % so we can use definitions from tx@Dict in pstricks.pro + /TDict 20 dict def TDict begin % + /Func (#3) cvx def /sarray \the\pst@cntd\space array def % + #2 + \ifPST@metricFunction + 0 1 #1.X length 1 sub { /j ED sarray j % + #1.X j get /x ED #1.Y j get /y ED Func put } for % + \else %build by increments + sarray 0 \PST@metricInitValue\space put % + 1 1 #1.X length 1 sub { /j ED sarray j % + #1.X j 1 sub get /x ED #1.Y j 1 sub get /y ED #1Delta.X j get /dx ED #1Delta.Y j get /dy ED /ds dx dup mul dy dup mul add sqrt def % + Func sarray j 1 sub get add put } for % + \fi %\ifPSTfunctionMetric + /str 10 string def /tmpar [(Metric range: [) () (, ) () (])] def % + tmpar 1 sarray 0 get str cvs put + /str 10 string def + tmpar 3 sarray \the\pst@cntC\space get str cvs put tmpar + tx@NodeDict begin concatstringarray = end % +%compute ticks + /nl 0 def /nu \the\pst@cntC\space def + /smin sarray 0 get def + /smax sarray nu get def + /Os \ifx\PST@Os\@empty smin \else \PST@Os\space \fi def % + /Ds \ifx\PST@Ds\@empty smax Os sub 10 div \else \PST@Ds\space \fi def % + /scount smax Os sub Ds div cvi def % + /tarray scount 1 add array def % + /#1Tick.X scount 1 add array def % +/#1Tick.Y scount 1 add array def % +/#1TickN.X scount 1 add array def % +/#1TickN.Y scount 1 add array def % +0 1 scount { dup Ds mul Os add tarray 3 1 roll put } for %tick positions in tarray +% find the corresponding s values using binary search +0 1 scount { dup tarray exch get /s exch def /j exch def %sought metric value,index +/m nl def /n nu def /k nl nu add 2 div cvi def 20 { s sarray k get lt { % +/n k def /k k m add 2 div cvi def }{ /m k def /nl k def /k k n add 2 div cvi def } ifelse % +n 1 sub m le { /nl m def exit } if } repeat % +sarray n get sarray m get dup 3 1 roll % sm sn sm +sub dup 0 le { pop pop 0 }{%sm sn-sm +exch %sn-sm sm +s sub neg exch div } ifelse % s->(s-sm)/(sn-sm) +dup #1Delta.X m 1 add get mul #1.X m get add #1Tick.X j 3 -1 roll put % s on stack +#1Delta.Y m 1 add get mul #1.Y m get add #1Tick.Y j 3 -1 roll put % +#1TickN.X j #1Normal.X m 1 add get put #1TickN.Y j #1Normal.Y m 1 add get put % + } for % +/tmpar 2 array def /str 4 string def tmpar 0 (Created data for points #1Tick0..#1Tick) put tmpar 1 scount str cvs put tmpar tx@NodeDict begin concatstringarray = % + end end }% end pst@Verb +%Draw ticks +\multido{\iA=#4+1}{#5}{% + \pnode(! TDict begin \iA\space scount gt + { 1 0 /VV ED /UU ED 0 0 } + { #1TickN.X \iA\space get #1TickN.Y \iA\space get /VV ED /UU ED #1Tick.X \iA\space get #1Tick.Y \iA\space get } ifelse + 2 copy /YY ED /XX ED end){#1Tick\iA}% + \pnode(! TDict begin UU VV end ){#1Normal\iA}% + \pnode(! TDict begin VV UU neg unitratiosq div end ){#1Tangent\iA}% + \edef\cmd{\noexpand\psline(\the\pst@yticksizeA;{(! TDict begin UU VV end )})(\the\pst@yticksizeB;{(! TDict begin UU VV end )})}% + \pscustom{\translate(! TDict begin XX YY end)\cmd}}% +}\ignorespaces}% +% \define@key[psset]{pstricks-add}{randomPoints}[1000]{\def\psk@randomPoints{#1}} \define@boolkey[psset]{pstricks-add}[Pst@]{color}[true]{} \psset{randomPoints=1000,color=false} @@ -1122,6 +1268,7 @@ \def\psplotTangent@i#1#2#3{% \expandafter\psplotTangent@ii#2,,\@nil % \def\pst@par{#1}% +% \addbefore@par{Derive=NOT@EMPTY} \begin@OpenObj% \ifx\psk@Derive\@empty\ifPst@algebraic\def\psk@Derive{NOT@EMPTY}\fi\fi%%dr 0606 hv 1003 \addto@pscode{ @@ -1632,7 +1779,7 @@ \pst@dimo=0.5\pst@dimn\advance\pst@dimo by 0.5\pst@dimm% half angle of the chart \global\@chartSepfalse% \if$\psk@chartSepValues$\else - \psforeach{\chart@tempC}{\psk@chartSepValues}{\ifnum\chart@tempC=\the\pst@cnta \global\@chartSeptrue\fi}% + \psforeach{\chart@tempC}{\psk@chartSepValues}{\ifnum\chart@tempC=\the\pst@cnta\relax \global\@chartSeptrue\fi}% \fi \if@chartSep% \pswedge(\psk@chartSep\p@;\pst@number\pst@dimo){\pst@chartRadius}{\pst@number\pst@dimn}{\pst@number\pst@dimm}% @@ -1660,7 +1807,7 @@ \pst@dimo=0.5\pst@dimn\advance\pst@dimo by 0.5\pst@dimm% half angle of the chart \global\@chartSepfalse \if$\psk@chartSepValues$\else - \psForeach{\chart@tempC}{\psk@chartSepValues}{\ifnum\chart@tempC=\the\pst@cnta \global\@chartSeptrue\fi}% + \psForeach{\chart@tempC}{\psk@chartSepValues}{\ifnum\chart@tempC=\the\pst@cnta\relax \global\@chartSeptrue\fi}% \fi \if@chartSep% \pswedge[linecolor={chartFillColor\the\pst@cnta},fillstyle=solid,fillcolor={chartFillColor\the\pst@cnta}]% @@ -1880,7 +2027,6 @@ } % \def\resetOptions{% - \@zero=0% \def\pst@linetype{0}% \pstScalePoints(1,1){}{}% \psset[pstricks-add]{% |