[pstricks] doesn't work the way it should

Jean-Côme Charpentier Jean-Come.Charpentier at wanadoo.fr
Mon Mar 27 23:59:12 CEST 2006


Herbert Voss a écrit :
> Germi Camps wrote:
> 
>> yes, it is quite difficult to understand without an image. what I'm 
>> drawing is a Smith Chart. I send you the output I get with the code 
>> writed by me, and also another pdf wich describes clearly how to draw 
>> the Smith Chart (I found it on the internet, and it is been done also 
>> using PSTricks, but I can't contact the author). in this pdf are the 
>> equations for the center points, intersection points, etc.. of the 
>> arcs. the variable r on the explaining document is my \rad and the 
>> variable x on the document is my \ics.
>> the problem I have now is that i want to put labels on an arc, 
>> everyone in its right position and rotated a certain angle.
>> in my pdf you will see everithing in it's right place but 5 labels 
>> that are the problematic ones. my pdf is Smith.pdf
> 
> 
> ok, understood
> please send the complete LaTeX document of what you did
> 
> but this seems to be a good competotion to Jean-Côme, isn't it ...

   Uuuh? :-)

With the code send by Germi, as far as I understand the problem, the 
mistake is only about (many many) spurious spaces.
I haven't think very hard : I have just put "%%%" everywhere it seems 
necessary (Some of them are certainly useless!) Then I changed "-0.1432" 
to "0" and the result seems good, isn't it?

I don't see immediately that you (Germi) wrote a macro \SmithChart which 
are 320 lines long! Imho, it's much better to split this macro in 
several more little ones... it would be more human readable.

--------------8<------------8<-------------
\documentclass[a4paper,12pt]{article}
\usepackage[margin=2cm]{geometry}
\usepackage{pstricks}
\usepackage{multido}



\SpecialCoor \makeatletter

\def\psarc at iii(#1)#2#3#4{%
   \begin at OpenObj
     \def\pst at tempa{#3}%%%
     \def\pst at tempb{#4}%%%
     \pst@@getcoor{#1}%
     \def\pst at tempA{#2}%
     \addto at pscode{\psarc at iv \psarc at v}%
     \gdef\psarc at type{0}%
     \showpointsfalse
   \end at OpenObj%
}
\def\psarc at iv{%
   \pst at coor /y ED /x ED
   /r \pst at tempA\space \pst at number\psunit mul def
   /c 57.2957 r \tx at Div def
   /angleA
     \pst at tempa
     \psk at arcsepA c mul 2 div
     \ifcase \psarc at type add \or sub \fi
   def
   /angleB
     \pst at tempb
     \psk at arcsepB c mul 2 div
     \ifcase \psarc at type sub \or add \fi
   def
   \ifshowpoints\psarc at showpoints\fi
   \ifx\psk at arrowA\@empty
     \ifnum\psk at liftpen=2
       r angleA \tx at PtoC
       y add exch x add exch moveto
     \fi
   \fi}


\makeatother



\def\SmithChart#1{%%%
\def\radi{#1}
\def\arcsmith{%%
\rput(0,0){%%%
   \psarc(!\rad\space 1 \rad\space add div \radi\space mul 0)%
   { 1 1 \rad\space add div \radi\space mul }
   { \ics\space 2 mul \rad\space 1 add 2 exp \ics\space 2 exp add div 
\rad\space 2 exp 1 sub \ics\space 2 exp add \rad\space 1 add 2 exp 
\ics\space 2 exp add div \rad\space 1 \rad\space add div sub atan }
   { \ics\space 2 mul neg \rad\space 1 add 2 exp \ics\space 2 exp add 
div \rad\space 2 exp 1 sub \ics\space 2 exp add \rad\space 1 add 2 exp 
\ics\space 2 exp add div \rad\space 1 \rad\space add div sub atan }
}}
%%%
\def\arcsmithfin{%%%
\rput(0,0){%%%
   \psarc(!\rad\space 1 \rad\space add div \radi\space mul 0)%
   { 1 1 \rad\space add div \radi\space mul }
   { 0 }
   { 360 }
}}
%%%
\def\arcsmithb{%%%
\rput(0,0){%%%
\psarc(!\rad\space 1 \rad\space add div \radi\space mul 0)%
   { 1 1 \rad\space add div \radi\space mul }
   { \ics\space 2 mul \rad\space 1 add 2 exp \ics\space 2 exp add div 
\rad\space 2 exp 1 sub \ics\space 2 exp add \rad\space 1 add 2 exp 
\ics\space 2 exp add div \rad\space 1 \rad\space add div sub atan }
   { \icsb\space 2 mul \rad\space 1 add 2 exp \icsb\space 2 exp add div 
\rad\space 2 exp 1 sub \icsb\space 2 exp add \rad\space 1 add 2 exp 
\icsb\space 2 exp add div \rad\space 1 \rad\space add div sub atan }
}
%%%
\rput(0,0){%%%
\psarc(!\rad\space 1 \rad\space add div \radi\space mul 0)%
   { 1 1 \rad\space add div \radi\space mul }
   { \icsb\space 2 mul neg \rad\space 1 add 2 exp \icsb\space 2 exp add 
div \rad\space 2 exp 1 sub \icsb\space 2 exp add \rad\space 1 add 2 exp 
\icsb\space 2 exp add div \rad\space 1 \rad\space add div sub atan }
   { \ics\space 2 mul neg \rad\space 1 add 2 exp \ics\space 2 exp add 
div \rad\space 2 exp 1 sub \ics\space 2 exp add \rad\space 1 add 2 exp 
\ics\space 2 exp add div \rad\space 1 \rad\space add div sub atan }
}}
%%%
\def\arcsmithc{%%%
\rput(0,0){%%%
\psarc(!\radi\space 1 \ics\space div \radi\space mul)%
   { 1 \ics\space div \radi\space mul }
   { \ics\space 2 mul \ics\space 2 exp 1 add div 1 \ics\space div sub 
    1 \ics\space 2 exp sub \ics\space 2 exp 1 add neg div 1 sub atan }
   { \ics\space 2 mul \rad\space 1 add 2 exp \ics\space 2 exp add div 1 
\ics\space div sub \rad\space 2 exp 1 sub \ics\space 2 exp add 
\rad\space 1 add 2 exp \ics\space 2 exp add div 1 sub atan }
}
\rput(0,0){%%%
\psarc(!\radi\space 1 \ics\space div \radi\space mul neg)%
   { 1 \ics\space div \radi\space mul }
   { \ics\space 2 mul \rad\space 1 add 2 exp \ics\space 2 exp add div 1 
\ics\space div sub neg \rad\space 2 exp 1 sub \ics\space 2 exp add 
\rad\space 1 add 2 exp \ics\space 2 exp add div 1 sub atan }
   { \ics\space 2 mul \ics\space 2 exp 1 add div 1 \ics\space div sub 
neg     1 \ics\space 2 exp sub \ics\space 2 exp 1 add neg div 1 sub atan }
}}
%%%
\def\arcsmithcfin{%%%
\rput(0,0){%%%
\psarc(!\radi\space 1 \ics\space div \radi\space mul)%
   { 1 \ics\space div \radi\space mul }
   { \ics\space 2 mul \ics\space 2 exp 1 add div 1 \ics\space div sub 
    1 \ics\space 2 exp sub \ics\space 2 exp 1 add neg div 1 sub atan }
   { 270 }
} \rput(0,0){%%%
\psarc(!\radi\space 1 \ics\space div \radi\space mul neg)%
   { 1 \ics\space div \radi\space mul }
   { 90 }
   { \ics\space 2 mul \ics\space 2 exp 1 add div 1 \ics\space div sub 
neg     1 \ics\space 2 exp sub \ics\space 2 exp 1 add neg div 1 sub atan }
}}
%%%
\def\arcsmithd{%%%
\rput(0,0){%%%
\psarc(!\radi\space 1 \ics\space div \radi\space mul)%
   { 1 \ics\space div \radi\space mul }
   { \ics\space 2 mul \radb\space 1 add 2 exp \ics\space 2 exp add div 1 
\ics\space div sub \radb\space 2 exp 1 sub \ics\space 2 exp add 
\radb\space 1 add 2 exp \ics\space 2 exp add div 1 sub atan }
   { \ics\space 2 mul \rad\space 1 add 2 exp \ics\space 2 exp add div 1 
\ics\space div sub \rad\space 2 exp 1 sub \ics\space 2 exp add 
\rad\space 1 add 2 exp \ics\space 2 exp add div 1 sub atan }
} \rput(0,0){%%%
\psarc(!\radi\space 1 \ics\space div \radi\space mul neg)%
   { 1 \ics\space div \radi\space mul }
   { \ics\space 2 mul \rad\space 1 add 2 exp \ics\space 2 exp add div 1 
\ics\space div sub neg \rad\space 2 exp 1 sub \ics\space 2 exp add 
\rad\space 1 add 2 exp \ics\space 2 exp add div 1 sub atan }
   { \ics\space 2 mul \radb\space 1 add 2 exp \ics\space 2 exp add div 1 
\ics\space div sub neg \radb\space 2 exp 1 sub \ics\space 2 exp add 
\radb\space 1 add 2 exp \ics\space 2 exp add div 1 sub atan }
}}
%%%
%%%\rput(-0.1432,0){\psset{linewidth=.25pt}
\rput(0,0){\psset{linewidth=.25pt}
\def\rad{1}%%%
\def\radb{0.5}%%%
\multido{\n=0.05+0.10}{5}{%%%
\def\ics{\n}%%%
\arcsmithd }%%%
%%%
\def\rad{0.5}
\multido{\n=0.02+0.02}{25}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{0.2}
\multido{\n=0.01+0.02}{10}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{1}%%%
\multido{\n=0.55+0.10}{5}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{2}%%%
\multido{\n=0.1+0.2}{10}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{5}%%%
\multido{\n=0.2+0.2}{25}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{50}%%%
\multido{\n=10+10}{2}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{20}%%%
\multido{\n=2+2}{10}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{10}%%%
\multido{\n=1+2}{5}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
\def\ics{0.5}%%%
%%%
\multido{\n=0.02+0.02}{25}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{0.2}%%%
%%%
\multido{\n=0.01+0.02}{10}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{5}%%%
%%%
\multido{\n=0.2+0.2}{25}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{1}%%%
%%%
\multido{\n=0.55+0.10}{5}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{2}%%%
%%%
\multido{\n=0.1+0.2}{10}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{50}%%%
%%%
\multido{\n=10+10}{4}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{20}%%%
%%%
\multido{\n=2+2}{10}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{10}%%%
%%%
\multido{\n=1+2}{5}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{1}%%%
\def\icsb{0.5}%%%
%%%
\multido{\n=0.05+0.10}{5}{%%%
\def\rad{\n}%%%
\arcsmithb }%
%%%
\psset{linewidth=.5pt}%%%
%%%
\def\rad{2}%%%
\multido{\n=0.2+0.2}{4}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{2}%%%
\multido{\n=1.2+0.2}{4}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{1}%%%
\multido{\n=0.1+0.2}{5}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{0.2}%%%
\multido{\n=0.05+0.10}{2}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{20}%%%
\multido{\n=10+10}{2}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\rad{5}%%%
\multido{\n=1+1}{4}{%%%
\def\ics{\n}%%%
\arcsmithc }%%%
%%%
\def\ics{5}%%%
\def\rad{10}%%%
\arcsmithc
%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
\def\ics{0.2}%%%
%%%
\def\rad{0.05}%%%
\arcsmith
%%%
\def\rad{0.15}%%%
\arcsmith
%%%
\def\ics{1}%%%
%%%
\multido{\n=0.1+0.2}{5}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
%%%
\def\ics{2}%%%
%%%
\multido{\n=0.2+0.2}{4}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\multido{\n=1.2+0.2}{4}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{5}%%%
%%%
\multido{\n=1+1}{4}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
\def\ics{10}%%%
\def\rad{5}%%%
\arcsmith
%%%
\def\ics{20}%%%
%%%
\multido{\n=10+10}{2}{%%%
\def\rad{\n}%%%
\arcsmith }%%%
%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
\def\rad{0}%%%
\arcsmithfin
\def\rad{50}%%%
\arcsmithfin
\def\ics{50}%%%
\arcsmithcfin}%%%
%%%
\psline[linewidth=.5pt](-\radi,0)(\radi,0)
%%%
\multido{\n=0.6+0.6}{2}{%%%
%%%\rput(-0.1432,0){\psarc[linewidth=.5pt](0,0){ \radi\space \n\space
\rput(0,0){\psarc[linewidth=.5pt](0,0){ \radi\space \n\space
add }{ 0 }{ 360 }}}%%%
%%%
\multido{\n=0.3+0.6}{2}{%%%
%%%\rput(-0.1432,0){\psarc[linewidth=.25pt](0,0){ \radi\space \n\space
\rput(0,0){\psarc[linewidth=.25pt](0,0){ \radi\space \n\space
add }{ 0 }{ 360 }}}%%%
%%%
\multido{\n=0+1.44}{250}{\psline[linewidth=.25pt](!\radi\space 0.85
add \n\space cos mul \radi\space 0.85 add \n\space sin
mul)(!\radi\space 0.95 add \n\space cos mul \radi\space 0.95 add
\n\space sin mul)}%%%
%%%
\multido{\n=0+2}{180}{\psline[linewidth=.25pt](!\radi\space 0.3 add
\n\space cos mul \radi\space 0.3 add \n\space sin mul)(!\radi\space
0.35 add \n\space cos mul \radi\space 0.35 add \n\space sin mul)}%%%
%%%
\multido{\n=0+7.2,\nb=0.00+0.01,\nc=90.0+7.2}{50}{\rput{\nc}(!\radi\space
0.725 add \n\space 180 add cos mul \radi\space 0.725 add \n\space
180 add sin mul){\tiny\nb}}%%%
%%%
\multido{\n=0+7.2,\nb=0.00+0.01,\nc=90.0+{-7.2}}{50}{\rput{\nc}(!\radi\space
1.075 add 180 \n\space sub cos mul \radi\space 1.075 add 180
\n\space sub sin mul){\tiny\nb}}%%%
%%%
\multido{\n=0+10,\nc=270+10}{19}{\rput{\nc}(!\radi\space 0.475 add
\n\space cos mul \radi\space 0.475 add \n\space sin mul){\tiny\n}}%%%
%%%
\multido{\n=190+10,\nb=-170+10,\nc=100+10}{17}{\rput{\nc}(!\radi\space
0.475 add \n\space cos mul \radi\space 0.475 add \n\space sin
mul){\tiny\nb}}%%%
%%%
\multido{\n=0.1+0.1}{10}{\def\rad{\n} \rput[bl]{90}(!\rad\space 1
sub \rad\space 1 add div \radi\space mul \radi\space 200 div sub
\radi\space 200 div){\psscalebox{0.75}{\textbf{\tiny\n}}}}%%%
%%%
\multido{\n=1.2+0.2}{5}{\def\rad{\n} \rput[bl]{90}(!\rad\space 1 sub
\rad\space 1 add div \radi\space mul \radi\space 200 div sub
\radi\space 200 div){\psscalebox{0.75}{\textbf{\tiny\n}}}}%%%
%%%
\multido{\n=3.0+1.0}{3}{\def\rad{\n} \rput[bl]{90}(!\rad\space 1 sub
\rad\space 1 add div \radi\space mul \radi\space 200 div sub
\radi\space 200 div){\psscalebox{0.75}{\textbf{\tiny\n}}}}%%%
%%%
\multido{\n=10+10}{2}{\def\rad{\n} \rput[bl]{90}(!\rad\space 1 sub
\rad\space 1 add div \radi\space mul \radi\space 200 div sub
\radi\space 200 div){\psscalebox{0.75}{\textbf{\tiny\n}}}}%%%
%%%
\def\rad{50} \rput[bl]{90}(!\rad\space 1 sub
\rad\space 1 add div \radi\space mul \radi\space 200 div sub
\radi\space 200 div){\psscalebox{0.75}{\textbf{\tiny 50}}}%%%
%%%
}


\begin{document}

\begin{center}
\begin{pspicture}(-5,-9)(5,9)
%\psset{linecolor=green,linewidth=.5pt}
%\multido{\n=0.5+0.5}{14}{\pscircle{\n}}
%\multido{\n=0+10}{36}{\psline(7.5;\n)}

\psset{linecolor=black} \SmithChart{7.5}

\end{pspicture}
\end{center}

\begin{center}
\begin{pspicture}(-4,-4)(4,4)
\SmithChart{4}
\end{pspicture}
\end{center}


\end{document}
--------------8<------------8<-------------


   Jean-Côme Charpentier




More information about the PSTricks mailing list