%% %% This is file `pst-sigsys.tex' v 1.4. %% %% IMPORTANT NOTICE: %% %% (C) %% Farshid Delgosha (NY - U.S.A.) %% %% v 1.0: 01/15/2009 %% v 1.1: 04/01/2009 %% v 1.2: 01/15/2010 %% v 1.3: 06/18/2010 %% v 1.4: 03/07/2011 %% %% 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. %% %% DESCRIPTION: %% `pst-sigsys' is a PSTricks package for drawing block diagrams %% related to the signal processing discipline. %% % \csname PSTsigsysLoaded\endcsname \let\PSTsigsysLoaded\endinput \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi \ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi \def\pstsigsysFV{1.4} \def\pstsigsysFD{2011/03/07} \message{`PST-SigSys' v\pstsigsysFV, \pstsigsysFD\space (fd)} \SpecialCoor %--- new pstricks styles --------------------------------- \newpsstyle{ArrowLen}{arrowsize=1.35mm,arrowlength=1.25,arrowinset=.25} \newpsstyle{Arrow}{arrows=->,style=ArrowLen} \newpsstyle{Dash}{linestyle=dashed,dash=.15 .08} \newpsstyle{Graph}{linewidth=1.25pt,linearc=0} \newpsstyle{Stem}{linewidth=1.25pt,linestyle=solid,stemhead=*} \newpsstyle{RoundCorners}{framesep=.125,framearc=.25,linearc=.1} %--- end new pstricks styles ----------------------------- %--- new pstricks-add styles ----------------------------- \AtBeginDocument{ \ifx\PSTricksAddLoaded\endinput \newpsstyle{ArrowIn}{ArrowInside=->,style=ArrowLen} \newpsstyle{DashDot}{linestyle=dashed,dash=.15 .055 .04 .055} \newpsstyle{Brace}{braceWidth=.02,braceWidthInner=.115,braceWidthOuter=.115,ref=C} \newpsobject{psBraceUp}{psbrace}{style=Brace,rot=-90,nodesepB=-\pslabelsep} \newpsobject{psBraceDown}{psbrace}{style=Brace,rot=90,nodesepB=\pslabelsep} \newpsobject{psBraceRight}{psbrace}{style=Brace,rot=-90,nodesepA=\pslabelsep} \newpsobject{psBraceLeft}{psbrace}{style=Brace,rot=-90,nodesepA=-\pslabelsep} \fi } %--- end new pstricks-add styles ------------------------- %--- internal macros ------------------------------------- \newdimen\ss@ticklength \newdimen\ss@signalsep \newdimen\ss@zerowidth \newdimen\ss@zeroradius \newdimen\ss@zeroradiusinc \newdimen\ss@polewidth \newdimen\ss@polelength \newdimen\ss@oplength \newdimen\ss@opwidth \newdimen\ss@opsep \newdimen\ss@ldotssep \newdimen\ss@ldotssize \newdimen\ss@aoffset \newdimen\ss@knoblength \newdimen\ss@knobwidth \def\ss@knobangle{} % \newdimen\ss@temp@dimA \newdimen\ss@temp@dimB \newdimen\ss@temp@dimC \newcount\ss@temp@cnt \def\ss@temp{} \def\ss@temp@choice{} % %%% add two numbers %%% \newdimen\ss@calc@dim \def\ss@calc{} \def\ss@addnum#1#2#3{% \ss@calc@dim=#1pt% \advance\ss@calc@dim #2pt% \pst@divide{\ss@calc@dim}{1pt}\ss@calc% \let#3\ss@calc% } % \def\pst@scale#1{\pssetlength{#1}{\ss@scale#1}} % %%% draw a cross %%% \def\ss@cross@temp{} \def\pst@cross(#1;#2)#3{% \ss@addnum{#2}{90}\ss@cross@temp% \psline[linewidth=#3,arrows=-](-#1;#2)(#1;#2)% \psline[linewidth=#3,arrows=-](-#1;\ss@cross@temp)(#1;\ss@cross@temp)% } % %%% set frame width %%% \def\pst@frame@width#1{% \pssetlength{\ss@temp@dimA}{#1}% \divide\ss@temp@dimA 2\relax% \edef\psk@framewidth{\pst@number\ss@temp@dimA}% } % %%% set frame height %%% \def\pst@frame@height#1{% \pssetlength{\ss@temp@dimA}{#1}% \divide\ss@temp@dimA 2\relax% \edef\psk@frameheight{\pst@number\ss@temp@dimA}% } % %%% set the frame width using the golden ratio %%% \def\pst@gratio@width#1#2{% \pssetlength{\ss@temp@dimA}{#1}% \pssetlength{\ss@temp@dimB}{#2\ss@temp@dimA}% \divide\ss@temp@dimA 2\relax% \divide\ss@temp@dimB 2\relax% \edef\psk@framewidth{\pst@number\ss@temp@dimA}% \edef\psk@frameheight{\pst@number\ss@temp@dimB}% } % %%% set the frame height using the golden ratio %%% \def\pst@gratio@height#1#2{% \pssetlength{\ss@temp@dimA}{#1}% \pssetlength{\ss@temp@dimB}{#2\ss@temp@dimA}% \divide\ss@temp@dimA 2\relax% \divide\ss@temp@dimB 2\relax% \edef\psk@frameheight{\pst@number\ss@temp@dimA}% \edef\psk@framewidth{\pst@number\ss@temp@dimB}% } % \newpsstyle{inv@frame}{fillstyle=none,linestyle=none,framearc=0} % %%% ss@ifneqdim %%% \newdimen\ss@if@dimA \newdimen\ss@if@dimB \def\ss@ifneqdim#1#2#3{% \pssetlength{\ss@if@dimA}{#1}% \pssetlength{\ss@if@dimB}{#2}% \ifdim\ss@if@dimA=\ss@if@dimB\else% #3\fi} % %%% This is my parser. %%% \def\ss@parse@temp{} \def\ss@parseA{} \def\ss@parseB{} \def\ss@parseC{} % \def\ss@parse@III#1{% \ss@parse@II{#1}{\ss@parseA}{\ss@parse@temp}% \ss@parse@II{\ss@parse@temp}{\ss@parseB}{\ss@parseC}% } % \def\ss@parse@II#1#2#3{\expandafter\ss@parse#1 \@nil#2#3} % \def\ss@parse#1 #2\@nil#3#4{% \gdef#3{#1}% \ifx\@empty#2\@empty% \gdef#4{}% \else% \ss@removespace#2\@nil#4% \fi% } % \def\ss@removespace#1 \@nil#2{\gdef#2{#1}} %--- end internal macros --------------------------------- %--- keys ------------------------------------------------ \define@key[psset]{pst-sigsys}{scale}{\def\ss@scale{#1}} \define@choicekey*[psset]{pst-sigsys}{xlpos}[\val\ss@temp@choice]{b,t}{% \ifcase\ss@temp@choice\relax% \def\ss@xlpos{b}% \or% \def\ss@xlpos{t}% \fi% } \define@choicekey*[psset]{pst-sigsys}{ylpos}[\val\ss@temp@choice]{r,l}{% \ifcase\ss@temp@choice\relax% \def\ss@ylpos{r}% \or% \def\ss@ylpos{l}% \fi% } \define@key[psset]{pst-sigsys}{ticklength}{\pssetlength{\ss@ticklength}{#1}} \define@key[psset]{pst-sigsys}{signalsep}{\pssetlength{\ss@signalsep}{#1}} \define@key[psset]{pst-sigsys}{stemhead}[]{\def\ss@stemhead{#1}} \define@boolkey[psset]{pst-sigsys}[ss@]{stemtag}[true]{} \define@key[psset]{pst-sigsys}{stemtagformat}[]{\def\ss@stemtagformat{#1}} \define@boolkey[psset]{pst-sigsys}[ss@]{killzero}[true]{} \define@key[psset]{pst-sigsys}{order}{\def\ss@order{#1}} \define@key[psset]{pst-sigsys}{zerowidth}{\pssetlength{\ss@zerowidth}{#1}} \define@key[psset]{pst-sigsys}{zeroradius}{\pssetlength{\ss@zeroradius}{#1}} \define@key[psset]{pst-sigsys}{zeroradiusinc}{\pssetlength{\ss@zeroradiusinc}{#1}} \define@key[psset]{pst-sigsys}{polewidth}{\pssetlength{\ss@polewidth}{#1}} \define@key[psset]{pst-sigsys}{polelength}{\pssetlength{\ss@polelength}{#1}} \define@key[psset]{pst-sigsys}{opwidth}{\pssetlength{\ss@opwidth}{#1}} \define@key[psset]{pst-sigsys}{oplength}{\pssetlength{\ss@oplength}{#1}} \define@key[psset]{pst-sigsys}{opsep}{\pssetlength{\ss@opsep}{#1}} \define@choicekey*[psset]{pst-sigsys}{operation}[\val\ss@temp@choice]{plus,times}{% \ifcase\ss@temp@choice\relax% \def\ss@angle{0}% \or% \def\ss@angle{45}% \fi% } \define@key[psset]{pst-sigsys}{angle}{\def\ss@angle{#1}} \define@key[psset]{pst-sigsys}{ldotssize}{\pssetlength{\ss@ldotssize}{#1}} \define@key[psset]{pst-sigsys}{ldotssep}{\pssetlength{\ss@ldotssep}{#1}} \define@key[psset]{pst-sigsys}{gratioWh}{\pst@gratio@width{#1}{.6180339887}} \define@key[psset]{pst-sigsys}{gratioWv}{\pst@gratio@width{#1}{1.618033989}} \define@key[psset]{pst-sigsys}{gratioHh}{\pst@gratio@height{#1}{1.618033989}} \define@key[psset]{pst-sigsys}{gratioHv}{\pst@gratio@height{#1}{.6180339887}} \define@key[psset]{pst-sigsys}{aoffset}{\pssetlength{\ss@aoffset}{#1}} \define@key[psset]{pst-sigsys}{afac}{\def\ss@afac{#1}} \define@key[psset]{pst-sigsys}{knoblength}{\pssetlength{\ss@knoblength}{#1}} \define@key[psset]{pst-sigsys}{knobwidth}{\pssetlength{\ss@knobwidth}{#1}} \define@key[psset]{pst-sigsys}{knobangle}{\def\ss@knobangle{#1}} \define@key[psset]{pst-sigsys}{framewidth}{\pst@frame@width{#1}} \define@key[psset]{pst-sigsys}{frameheight}{\pst@frame@height{#1}} \define@key[psset]{pst-sigsys}{FillColor}{\psset{fillstyle=solid,fillcolor=#1}} %--- end keys -------------------------------------------- %--- default key values ---------------------------------- \psset[pst-sigsys]{scale=1,angle=0}% global \psset[pst-sigsys]{xlpos=b,ylpos=r}% psaxeslabels \psset[pst-sigsys]{ticklength=.15}% psTick \psset[pst-sigsys]{signalsep=5pt}% pssignal \psset[pst-sigsys]{stemhead=*,stemtag=false,stemtagformat=\scriptstyle,killzero=false}% psstem \psset[pst-sigsys]{zerowidth=.7pt,zeroradius=.08,zeroradiusinc=.07,order=1}% pszero \psset[pst-sigsys]{polewidth=.7pt,polelength=.12}% pspole \psset[pst-sigsys]{opwidth=.7pt,oplength=.125,opsep=.1,operation=plus}% pscircleop and psframeop \psset[pst-sigsys]{ldotssize=.05,ldotssep=.15}% psldots \psset[pst-sigsys]{aoffset=0,afac=1}% psadaptive \psset[pst-sigsys]{knobwidth=.7pt,knoblength=1,knobangle=45}% psknob %--- end default key values ------------------------------ \pst@addfams{pst-sigsys} %--- psaxeslabels ---------------------------------------- \def\psaxeslabels{\def\pst@par{}\pst@object{psaxeslabels}} \def\psaxeslabels@i{\pst@getarrows\psaxeslabels@ii} \def\psaxeslabels@ii(#1,#2)(#3,#4)(#5,#6)#7#8{{% \use@par% \ss@ifneqdim{#3}{#5}{\psline(#3,#2)(#5,#2)}% \ss@ifneqdim{#4}{#6}{\psline(#1,#4)(#1,#6)}% % \if\ss@xlpos t% \rput(#5,#2){\rput[rb](0,\pslabelsep){#7}}% \else% \rput(#5,#2){\rput[rt](0,-\pslabelsep){#7}}% \fi% % \if\ss@ylpos l% \rput(#1,#6){\rput[tr](-\pslabelsep,0){#8}}% \else% \rput(#1,#6){\rput[tl](\pslabelsep,0){#8}}% \fi% }\ignorespaces} %--- end psaxeslabels ------------------------------------ %--- pstick ---------------------------------------------- \def\pstick{\def\pst@par{}\pst@object{pstick}} \def\pstick@i{\@ifnextchar({\pstick@ii{\ss@angle}}{\pstick@ii}} \def\pstick@ii#1(#2)#3{{% \use@par% \pssetlength{\ss@temp@dimA}{#3}% \pssetlength{\ss@temp@dimA}{.5\ss@temp@dimA}% \rput(#2){\psline(-\ss@temp@dimA;#1)(\ss@temp@dimA;#1)}% }\ignorespaces} %--- end pstick ------------------------------------------ %--- psTick ---------------------------------------------- \def\psTick{\def\pst@par{}\pst@object{psTick}} \def\psTick@i{\@ifnextchar({\psTick@ii{\ss@angle}}{\psTick@ii}} \def\psTick@ii#1(#2){{% \use@par% \pstick@ii#1(#2){\ss@ticklength}% }\ignorespaces} %--- end psTick ------------------------------------------ %--- pssignal -------------------------------------------- \def\pssignal{\def\pst@par{}\pst@object{pssignal}} \def\pssignal@i(#1)#2#3{{% \use@par% \rput(#1){\rnode{#2}{\psframebox[style=inv@frame,framesep=\ss@signalsep]{#3}}}% }\ignorespaces} %--- end pssignal ---------------------------------------- %--- psstem ---------------------------------------------- \def\psstem{\def\pst@par{}\pst@object{psstem}} \def\psstem@i{\@ifnextchar({\psstem@ii}{\psstem@ii(0,1)}} \def\psstem@ii(#1,#2)#3{{% \use@par% \ss@temp@cnt=#1% \@for\ss@for@ind:=#3\do{% \pssetlength{\ss@temp@dimA}{\ss@for@ind}% \ifss@killzero% \ifdim\ss@temp@dimA=\z@\else% \psline{-\ss@stemhead}(\ss@temp@cnt,0)(\ss@temp@cnt,\ss@for@ind)% \fi\else% \psline{-\ss@stemhead}(\ss@temp@cnt,0)(\ss@temp@cnt,\ss@for@ind)% \fi% % \ifss@stemtag% \ifdim\ss@temp@dimA<\z@% \rput[b](\ss@temp@cnt,\pslabelsep){$\ss@stemtagformat\the\ss@temp@cnt$}% \else% \rput[t](\ss@temp@cnt,-\pslabelsep){$\ss@stemtagformat\the\ss@temp@cnt$}% \fi\fi% % \advance\ss@temp@cnt#2}% }\ignorespaces} %--- end psstem ------------------------------------------ %--- pszero ---------------------------------------------- \def\pszero{\def\pst@par{}\pst@object{pszero}} \def\pszero@i(#1)#2{{% \use@par% \pst@scale{\ss@zerowidth}% \pst@scale{\ss@zeroradius}% \pst@scale{\ss@zeroradiusinc}% \pssetlength{\ss@temp@dimA}{\ss@zeroradius}% \ss@temp@cnt=\ss@order% \loop% \cnode[linewidth=\ss@zerowidth](#1){\ss@temp@dimA}{#2}% \psaddtolength{\ss@temp@dimA}{\ss@zeroradiusinc}% \ifnum\ss@temp@cnt>\@ne% \advance\ss@temp@cnt-\@ne% \repeat% }\ignorespaces} %--- end pszero ------------------------------------------ %--- pspole ---------------------------------------------- % The main part of this code is borrowed from pst-node % \def\pspole{\def\pst@par{}\pst@object{pspole}} \def\pspole@i(#1)#2{% \leavevmode% \hbox{% \use@par% \pst@scale{\ss@polelength}% \pst@scale{\ss@polewidth}% \pst@@getcoor{#1}% \pssetlength\pst@dimc{\ss@polelength}% \pst@dimg=\psk@dimen\pslinewidth% \advance\pst@dimc-\pst@dimg% \advance\pst@dimc.5\pslinewidth% \ifPst@nodealign% \kern\pst@dimc% \vrule width\z@ height \pst@dimc depth \pst@dimc% \fi% \rput(#1){\pst@cross(\ss@polelength;45){\ss@polewidth}}% \pst@newnode{#2}{11}{\pst@coor \pst@number\pst@dimc}{\tx@InitCnode}% \ifPst@nodealign\kern\pst@dimc\fi% }\ignorespaces} %--- end pspole ------------------------------------------ %--- pscircleop ------------------------------------------ \def\pscircleop{\def\pst@par{}\pst@object{pscircleop}} \def\pscircleop@i(#1)#2{{% \use@par% \pst@scale{\ss@oplength}% \pst@scale{\ss@opsep}% \pst@scale{\ss@opwidth}% \pst@scale{\pslinewidth}% \pssetlength{\ss@temp@dimA}{\ss@oplength}% \psaddtolength{\ss@temp@dimA}{\ss@opsep}% \cnode(#1){\ss@temp@dimA}{#2}% \rput(#1){\pst@cross(\ss@oplength;\ss@angle){\ss@opwidth}}% }\ignorespaces} %--- end pscircleop -------------------------------------- %--- psframeop ------------------------------------------- \def\psframeop{\def\pst@par{}\pst@object{psframeop}} \def\psframeop@i(#1)#2{{% \use@par% \pst@scale{\ss@oplength}% \pst@scale{\ss@opsep}% \pst@scale{\ss@opwidth}% \pst@scale{\pslinewidth}% \pssetlength{\ss@temp@dimA}{2\ss@oplength}% \psaddtolength{\ss@temp@dimA}{2\ss@opsep}% \fnode[framesize=\ss@temp@dimA](#1){#2}% \rput(#1){\pst@cross(\ss@oplength;\ss@angle){\ss@opwidth}}% }\ignorespaces} %--- end psframeop --------------------------------------- %--- psdisk ---------------------------------------------- \def\psdisk{\def\pst@par{}\pst@object{psdisk}} \def\psdisk@i(#1)#2{{% \use@par% \pscircle*[linestyle=none,linecolor=\psfillcolor](#1){#2}% }\ignorespaces} %--- end psdisk ------------------------------------------ %--- psring ---------------------------------------------- \def\psring{\def\pst@par{}\pst@object{psring}} \def\psring@i(#1)#2#3{{% \use@par% \pssetlength{\ss@temp@dimA}{#2}% \pssetlength{\ss@temp@dimB}{#3}% \psaddtolength{\ss@temp@dimB}{-\ss@temp@dimA}% \pscircle[dimen=inner,linewidth=\ss@temp@dimB,linecolor=\psfillcolor](#1){\ss@temp@dimA}% }\ignorespaces} %--- end psring ------------------------------------------ %--- psdiskc --------------------------------------------- \def\psdiskc{\def\pst@par{}\pst@object{psdiskc}} \def\psdiskc@i(#1)(#2,#3)#4{{% \use@par% \pssetlength{\ss@temp@dimA}{#2}% \pssetlength{\ss@temp@dimB}{#3}% \ifdim\ss@temp@dimA>\ss@temp@dimB% \pssetlength{\ss@temp@dimC}{1.5\ss@temp@dimA}% \else% \pssetlength{\ss@temp@dimC}{1.5\ss@temp@dimB}% \fi% \psclip{\rput(#1){\psframe[linestyle=none,linecolor=\psfillcolor](-#2,-#3)(#2,#3)}}% \psring@i(#1){#4}{\ss@temp@dimC}% \endpsclip% }\ignorespaces} %--- end psdiskc ----------------------------------------- %--- psldots --------------------------------------------- \def\psldots{\def\pst@par{}\pst@object{psldots}} \def\psldots@i{\@ifnextchar({\psldots@ii{\ss@angle}}{\psldots@ii}} \def\psldots@ii#1(#2){{% \use@par% \pst@scale{\ss@ldotssep}% \pst@scale{\ss@ldotssize}% \rput(#2){\psdots[dotsize=\ss@ldotssize](-\ss@ldotssep;#1)(0,0)(\ss@ldotssep;#1)}% }\ignorespaces} %--- end psldots ----------------------------------------- %--- ldotsnode ------------------------------------------- \def\ldotsnode{\def\pst@par{}\pst@object{ldotsnode}} \def\ldotsnode@i{\@ifnextchar({\ldotsnode@ii{\ss@angle}}{\ldotsnode@ii}} \def\ldotsnode@ii#1(#2)#3{{% \use@par% \ss@temp@dimC=.5\ss@signalsep% \ss@temp@dimB=.5\ss@ldotssize% \advance\ss@temp@dimB\ss@temp@dimC% \ss@temp@dimA=\ss@ldotssep% \advance\ss@temp@dimA\ss@temp@dimB% \advance\ss@temp@dimA\ss@temp@dimC% \edef\psk@framewidth{\pst@number\ss@temp@dimA}% \edef\psk@frameheight{\pst@number\ss@temp@dimB}% \rput{#1}(#2){\fnode[style=inv@frame](0,0){#3}}% \psldots{#1}(#2)% }\ignorespaces} %--- end ldotsnode --------------------------------------- %--- psblock --------------------------------------------- \def\psblock{\def\pst@par{}\pst@object{psblock}} \def\psblock@i(#1)#2#3{{% \use@par% \rput(#1){\rnode{#2}{\psframebox{#3}}}% }\ignorespaces} %--- end psblock ----------------------------------------- %--- psfblock -------------------------------------------- \def\psfblock{\def\pst@par{}\pst@object{psfblock}} \def\psfblock@i(#1)#2#3{{% \use@par% \fnode(#1){#2}% \rput(#1){#3}% }\ignorespaces} %--- end psfblock ---------------------------------------- %--- psadaptive ------------------------------------------ \def\psadaptive{\def\pst@par{}\pst@object{psadaptive}} \def\psadaptive@i{\check@arrow{\psadaptive@ii}} \def\psadaptive@ii#1(#2)#3{{% \use@par% \nodexn{(#1)+(#2)}{ss@nodeA}% \nodexn{(ss@nodeA)+(\ss@aoffset,0)}{#3}% \psLNode(#1)(ss@nodeA){-\ss@afac}{ss@nodeB}% \ifdim\ss@aoffset>\z@% \ncdiagg[armA=\ss@aoffset,angleA=180]{-}{#3}{#1}% \else% \ncdiagg[armA=-\ss@aoffset,angleA=0]{-}{#3}{#1}% \fi% \ncline{#1}{ss@nodeB}% }\ignorespaces} %--- end psadaptive -------------------------------------- %--- psknob ---------------------------------------------- \def\psknob{\def\pst@par{}\pst@object{psknob}} \def\psknob@i(#1)#2{{% \psset{arrows=->}% \use@par% \pst@scale{\ss@knobwidth}% \pst@scale{\ss@knoblength}% \pssetlength{\ss@temp@dimA}{\psk@radius}% \pst@scale{\ss@temp@dimA}% \cnode[linewidth=\ss@knobwidth](#1){\ss@temp@dimA}{#2}% \pstick[linewidth=\ss@knobwidth]{\ss@knobangle}(#1){\ss@knoblength}% }\ignorespaces} %--- end psknob ------------------------------------------ %--- psusampler ------------------------------------------ \def\psusampler{\def\pst@par{}\pst@object{psusampler}} \def\psusampler@i(#1)#2#3{{% \use@par% \psfblock(#1){#2}{$\mathord{\uparrow}#3$}% }\ignorespaces} %--- end psusampler -------------------------------------- %--- psdsampler ------------------------------------------ \def\psdsampler{\def\pst@par{}\pst@object{psdsampler}} \def\psdsampler@i(#1)#2#3{{% \use@par% \psfblock(#1){#2}{$\mathord{\downarrow}#3$}% }\ignorespaces} %--- end psdsampler -------------------------------------- %--- nclist ---------------------------------------------- \def\nclist{\def\pst@par{}\pst@object{nclist}} \def\nclist@i{\check@arrow{\nclist@ii}} \def\nclist@ii#1{\@ifnextchar[{\nclist@iii{#1}}{\nclist@iv{#1}}} % \def\nclist@iii#1[#2]#3{{% \use@par% \def\ss@prevnode{}% \@for\ss@for@ind:=#3\do{% \ifx\@empty\ss@prevnode\@empty% \let\ss@prevnode\ss@for@ind% \else% \ss@parse@III{\ss@for@ind}% \csname#1\endcsname{\ss@prevnode}{\ss@parseA}% \ifx\@empty\ss@parseB\@empty\else% \ifx\@empty\ss@parseC\@empty% \csname#2\endcsname{\ss@parseB}% \else% \csname\ss@parseB\endcsname{\ss@parseC}% \fi\fi% \let\ss@prevnode\ss@parseA% \fi% }% }\ignorespaces} % \def\nclist@iv#1#2{{% \use@par% \def\ss@prevnode{}% \@for\ss@for@ind:=#2\do{% \ifx\@empty\ss@prevnode\@empty% \else% \csname#1\endcsname{\ss@prevnode}{\ss@for@ind}% \fi% \let\ss@prevnode\ss@for@ind% }% }\ignorespaces} %--- end nclist ------------------------------------------ %--- ncstar ---------------------------------------------- \def\ncstar{\def\pst@par{}\pst@object{ncstar}} \def\ncstar@i{\check@arrow{\ncstar@ii}} \def\ncstar@ii#1{\@ifnextchar[{\ncstar@iii{#1}}{\ncstar@iv{#1}}} % \def\ncstar@iii#1[#2]#3#4{{% \use@par% \@for\ss@for@ind:=#3\do{% \ss@parse@III{\ss@for@ind}% \csname#1\endcsname{\ss@parseA}{#4}% \ifx\@empty\ss@parseB\@empty\else% \ifx\@empty\ss@parseC\@empty% \csname#2\endcsname{\ss@parseB}% \else% \csname\ss@parseB\endcsname{\ss@parseC}% \fi\fi% }% }\ignorespaces} % \def\ncstar@iv#1#2#3{{% \use@par% \@for\ss@for@ind:=#2\do{\csname#1\endcsname{\ss@for@ind}{#3}}% }\ignorespaces} %--- end ncstar ------------------------------------------ \endinput