\define@key{psset}{Derive}{\edef\psk@Derive{#1}}\setkeys{psset}{Derive=default}
\def\polarplot#1#2#3{\parametricplot{#1}{#2}{#3 dup t cos mul exch t sin mul}}
\def\psplotput#1#2#3{\rput(!#1 dup /x exch def #2){#3}}\def\parametricplotput#1#2#3{\rput(!/t #1 def #2){#3}}\def\polarplotput#1#2#3{\rput(!/t #1 def #2 dup #1 cos mul exch #1 sin mul){#3}}\def\psplottangent{\@ifnextchar[\Pst@psplottangent{\Pst@psplottangent[]}}\def\Pst@psplottangent[#1]#2#3#4{ \bgroup\setkeys{psset}{#1} \ifx\psk@Derive\@default \rput{!tx@EcldDict begin
1 #2 dup ZeroEq
\pslbrace dup 0.0005 add /x exch def #4 exch 0.0005 sub /x exch def #4 sub .001 div \psrbrace
\pslbrace dup dup 1.0005 mul /x exch def #4 exch
.9995 mul /x exch def #4 sub exch .001 mul div \psrbrace ifelse
end exch atan}(!#2 dup /x exch def #4){\psline(-#3,0)(#3,0)}
\else \rput{!1 /x #2 def \psk@Derive\space exch atan}(!#2 dup /x exch def #4){\psline(-#3,0)(#3,0)}\fi \egroup}\def\parametricplottangent{\@ifnextchar[\parametricplottangent@i{\parametricplottangent@i[]}}\def\parametricplottangent@i[#1]#2#3#4{ \bgroup\setkeys{psset}{#1} \ifx\psk@Derive\@default \rput{!tx@EcldDict begin
#2 dup ZeroEq
\pslbrace dup 0.0005 add /t exch def #4 3 -1 roll 0.0005 sub /x exch def
#4 ABVect .001 div exch .001 div \psrbrace
\pslbrace dup dup 1.0005 mul /t exch def #4 3 -1 roll
.9995 mul /t exch def #4 ABVect 3 -1 roll .001 mul exch 1 index div 3 1
roll div \psrbrace ifelse
end atan}(!/t #2 def #4){\psline(-#3,0)(#3,0)}
\else \rput{!/t #2 def \psk@Derive\space exch atan}(!/t #2 def #4){\psline(-#3,0)(#3,0)}\fi \egroup}\def\polarplottangent{\@ifnextchar[\polarplottangent@i{\polarplottangent@i[]}}\def\polarplottangent@i[#1]#2#3#4{ \bgroup\setkeys{psset}{#1} \ifx\psk@Derive\@default \parametricplottangent@i[]{#2}{#3}{#4 dup t cos mul exch t sin mul} \else \psset{Derive=\psk@Derive\space dup t cos mul exch t sin mul #4 dup t sin mul exch
t cos mul neg tx@EcldDict begin ABVect end}
\parametricplottangent@i[]{#2}{#3}{#4 dup t cos mul exch t sin mul}\fi \egroup}