%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Package `VauCanSon-G' version 0.4 %% %% This is file `VauCanSon-G'. %% %% IMPORTANT NOTICE: %% %% Copyright (C) 2002-2008 Sylvain Lombardy and Jacques Sakarovitch %% %% This package may be distributed under the terms of the LaTeX Project %% Public License, as described in lppl.txt in the base LaTeX distribution. %% Either version 1.0 or, at your option, any later version. %% %% DESCRIPTION: %% %% `VauCanSon-G' is the main file of the package and contains all %% macro definitions file. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Writing VauCanSon-G macro %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\VCSG}% {\textsc{V$\overline{\text{au}}$C% \raisebox{.3ex}{$\underline{\text{an}}$}S% $\overline{\text{on}}$-G}\xspace} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Commands for geometric constructions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% constants \newcommand{\SQRTwo}{0.717} \newcommand{\SQRThree}{1.732} \newcommand{\GoldMean}{0.618} \newcommand{\GoldMeanI}{1.618} \newcommand{\SQRGoldMeanI}{1.272} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Edge label drawing macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Separator in compound labels (eg \IOL{input}{output}) \newcommand{\IOL}[2]{#1\!\mid\! #2} %%% Stacked labels \newcommand{\StackTwoLabels}[2]% {\renewcommand{\arraystretch}{0.75}% \begin{array}{c}#1\\ #2 \end{array}% \renewcommand{\arraystretch}{1.333}} \newcommand{\StackThreeLabels}[3]% {\renewcommand{\arraystretch}{0.75}% \begin{array}{c}#1\\ #2 \\ #3 \end{array}% \renewcommand{\arraystretch}{1.333}} %%% Stacked labels with + \newcommand{\StackTwoLabelsP}[2]% {\renewcommand{\arraystretch}{0.75}% \begin{array}{c}#1\\ + \\ #2 \end{array}% \renewcommand{\arraystretch}{1.333}} \newcommand{\StackThreeLabelsP}[3]% {\renewcommand{\arraystretch}{0.75}% \begin{array}{c}#1\\ + \\ #2 \\ + \\ #3 \end{array}% \renewcommand{\arraystretch}{1.333}} %%% Lined up labels (with +) \newcommand{\LineTwoLabelsP}[2]{#1 + #2} \newcommand{\LineThreeLabelsP}[3]{#1 + #2 + #3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Scales --- Default settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\LargeScale}{0.85} \newcommand{\MediumScale}{0.6} \newcommand{\SmallScale}{0.5} \newcommand{\TinyScale}{0.42} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% State parameters --- Default settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Size = StateDiameter %%% The preset sizes are given in cm, and not in "psunits". %%% This allows to use different scales for the whole figure %%% and for the "drawing grid". \newlength{\MediumStateDiameter} \newlength{\SmallStateDiameter} \newlength{\LargeStateDiameter} \newlength{\VerySmallStateDiameter} \setlength{\MediumStateDiameter}{.9cm} \setlength{\SmallStateDiameter}{.6cm} \setlength{\LargeStateDiameter}{1.2cm} \setlength{\VerySmallStateDiameter}{.3cm} %%% Border line = StateLine \newlength{\StateLineWidth} % width \setlength{\StateLineWidth}{1.8pt} \newcommand{\StateLineStyle}{solid} % style \newcommand{\StateLineColor}{black} \newif\ifStateLineDbl \StateLineDblfalse \newcommand{\StateLineDblCoef}{0.6} \newcommand{\StateLineDblSep}{0.4} \newcommand{\VSStateLineCoef}{.6} % coef. for very small state %%% State background and label \newcommand{\StateFillStatus}{solid} \newcommand{\StateFillColor}{white} \newcommand{\StateLabelColor}{black} \newcommand{\StateLabelScale}{1.7} \newcommand{\SmallStateFillStatus}{solid} % \newcommand{\SmallStateFillColor}{white} % % As they have usually no labels it useful % to have a coloring facility for the "SmallState" %%% Dimmed states (e.g. for non accessible states) \newcommand{\DimStateLineStyle}{solid} \newcommand{\DimStateLineCoef}{1} % \newcommand{\DimStateLineColor}{gray} \newcommand{\DimStateLabelColor}{gray} \newcommand{\DimStateFillColor}{white} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Edge drawing parameters --- Default settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % line \newlength{\EdgeLineWidth} \setlength{\EdgeLineWidth}{1pt} \newcommand{\EdgeLineStyle}{solid} \newif\ifEdgeLineDbl \EdgeLineDblfalse %\newcommand{\EdgeLineDblStatus}{false} \newcommand{\EdgeLineDblCoef}{0.5} \newcommand{\EdgeLineDblSep}{0.6} \newcommand{\EdgeLineColor}{black} % arrow \newlength{\EdgeArrowWidth} \setlength{\EdgeArrowWidth}{5pt} \newlength{\EdgeDblArrowWidth} \setlength{\EdgeDblArrowWidth}{5.5pt} \newcommand{\EdgeArrowLengthCoef}{1.4} \newcommand{\EdgeDblArrowLengthCoef}{1.7} \newcommand{\EdgeArrowInset}{0.1} \newcommand{\EdgeArrowStyle}{->} \newcommand{\EdgeRevArrowStyle}{<-} % border \newcommand{\EdgeLineBorderCoef}{2} \newcommand{\EdgeLineBorderColor}{white} % label \newcommand{\EdgeLabelColor}{black} \newcommand{\EdgeLabelScale}{1.7} %%% Dimmed edges \newcommand{\DimEdgeLineCoef}{1.2} \newcommand{\DimEdgeLineStyle}{solid} \newcommand{\DimEdgeLineColor}{gray} \newcommand{\DimEdgeLabelColor}{gray} %%% Zigzag edges parameter \newlength{\ZZSize} \setlength{\ZZSize}{.9cm} % =\MediumStateDiameter \newcommand{\ZZShape}{0.5} \newcommand{\ZZLineWidth}{1.7} % coefficient multiplicateur % coef*\ZZSize -> distance added for labels \newcommand{\TransLabelZZCoef}{0.6} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Edge geometric parameters --- Default settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Edge \newlength{\EdgeOffset} \setlength{\EdgeOffset}{0pt} \newcommand{\ForthBackEdgeOffset}{5}% coef \newlength{\EdgeNodeSep}\setlength{\EdgeNodeSep}{0pt} % Arc parameters \newcommand{\VaucArcAngle}{15} \newcommand{\VaucArcCurvature}{0.8} \newlength{\VaucArcOffset}\setlength{\VaucArcOffset}{1pt} % Large Arc parameters \newcommand{\VaucLArcAngle}{30} \newcommand{\VaucLArcCurvature}{0.8} \newlength{\LoopOffset}\setlength{\LoopOffset}{0pt} \newlength{\LoopVarOffset}\setlength{\LoopVarOffset}{.7pt} \newcommand{\LoopAngle}{30} \newcommand{\CLoopAngle}{22} \newcommand{\LoopVarAngle}{28} % Size of loops (depending on the size of the state) \newcommand{\LoopOnMediumState}{7} \newcommand{\LoopOnSmallState}{9.6} \newcommand{\LoopOnLargeState}{5.8} \newcommand{\LoopOnVariableState}{5.1} \newcommand{\LoopOnVerySmallState}{15} \newcommand{\CLoopOnMediumState}{8} \newcommand{\CLoopOnSmallState}{12} \newcommand{\CLoopOnLargeState}{6} \newcommand{\CLoopOnVariableState}{5.2} %\newcommand{\CLoopOnVerySmallState}{14} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Edge label parameters --- Default settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % label distance from transition \newlength{\TransLabelSep}\setlength{\TransLabelSep}{3.5pt} % label position on transitions \newcommand{\EdgeLabelPosit}{.45}\newcommand{\EdgeLabelRevPosit}{.55} \newcommand{\ArcLabelPosit}{.4}\newcommand{\ArcLabelRevPosit}{.6} \newcommand{\LArcLabelPosit}{.4}\newcommand{\LArcLabelRevPosit}{.6} \newcommand{\LoopLabelPosit}{.25}\newcommand{\LoopLabelRevPosit}{.75} \newcommand{\CLoopLabelPosit}{.25}\newcommand{\CLoopLabelRevPosit}{.75} % label position on initial-final arrow \newcommand{\InitStateLabelPosit}{.1} \newcommand{\InitStateLabelRevPosit}{.9} \newcommand{\FinalStateLabelPosit}{.9} \newcommand{\FinalStateLabelRevPosit}{.1} %%% Size of initial and final arrow % the size is relative to the diameter % and the coefficient varies with the diameter \newcommand{\ArrowOnStateCoef}{} \newcommand{\ArrowOnMediumState}{1.5} \newcommand{\ArrowOnSmallState}{1.7} \newcommand{\ArrowOnLargeState}{1.3} \newcommand{\ArrowOnVerySmallState}{5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Shift for aligned labels %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength{\VertShiftH} \settoheight{\VertShiftH}{$\{$} \newlength{\VertShiftD} \settodepth{\VertShiftD}{$\{$} \newlength{\VertShift} \setlength{\VertShift}{.5\VertShiftD-.5\VertShiftH} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% flags %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif\ifVCFrame \newcommand{\HideFrame}{\VCFramefalse} \newcommand{\ShowFrame}{\VCFrametrue} \newif\ifVCGrid \newcommand{\HideGrid}{\VCGridfalse} \newcommand{\ShowGrid}{\VCGridtrue} \newif\ifVCRigidLabel \newcommand{\RigidLabel}{\VCRigidLabeltrue} \newcommand{\SwivelLabel}{\VCRigidLabelfalse} \newif\ifVCStateLabelBaseLine \newcommand{\AlignedLabel}{\VCStateLabelBaseLinetrue} \newcommand{\FloatingLabel}{\VCStateLabelBaseLinefalse} \HideFrame \HideGrid \RigidLabel \FloatingLabel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% style for the frame around the picture \psset{unit=1cm} \newpsstyle{VaucFrameStyle}% {arrows=-,% framesep=0pt,% linewidth=0.6pt,% linecolor=black,% linestyle=solid,% doubleline=false,% fillcolor=white,% fillstyle=none,% cornersize=relative,% framearc=0}% \newcommand{\FrameStyle}{\psset{style=VaucFrameStyle}} \newpsstyle{VaucGridStyle}% {gridwidth=0.6pt,% griddots=10,% subgriddiv=1,% gridlabels=7pt} \newcommand{\GridStyle}{\psset{style=VaucGridStyle}} % figure, vertically centered by default % draw frame according to VCFrame flag % Set the shift for aligned label w.r.t the current size of characters \newenvironment{VCPicture}[2][.5]% {\settoheight{\VertShiftH}{$\{$}% \settodepth{\VertShiftD}{$\{$}% \setlength{\VertShift}{.5\VertShiftD-.5\VertShiftH}% \begin{pspicture}[#1]#2% \ifVCFrame \FrameStyle \psframe#2\fi% \ifVCGrid \FrameStyle\GridStyle \psgrid#2\fi% }% {\RstState\RstEdge\end{pspicture}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Scaling matters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% The "sizes" (for states) and the "line widths" are given %%% as "lengthes" in a fixed unit (cm or pt), whereas the positions %%% are supposed to be given in "psunits". %%% This allows to use different scaling parameters %%% for the whole figure and for the "drawing grid". %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Scaling commands \newcommand{\VCScale}{0.6}% Global scale parameter \newcommand{\VCGridScale}{1}% Global scale parameter % \newcommand{\FixVCScale}[1]{\renewcommand{\VCScale}{#1}} \newcommand{\FixVCGridScale}[1]{\renewcommand{\VCGridScale}{#1}} % \newcommand{\LargePicture}{\FixVCScale{\LargeScale}} \newcommand{\MediumPicture}{\FixVCScale{\MediumScale}} \newcommand{\SmallPicture}{\FixVCScale{\SmallScale}} \newcommand{\TinyPicture}{\FixVCScale{\TinyScale}} %%%%% Typical figure would look like % \scalebox{\VCScale}{% % \begin{VCPicture}{(x0,y0)(x1,y1)} % % figure description % \end{VCPicture}% % } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Using a special directory for the figure %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\VCDirectory}{} \newcommand{\SetVCDirectory}[1]{\renewcommand{\VCDirectory}{#1}} % flag for printing the name of the figure file \newif\ifVCName \newcommand{\HideName}{\VCNamefalse} \newcommand{\ShowName}{\VCNametrue} \newcommand{\VCDraw}[2][\VCGridScale]% {\psset{unit=#1cm}% \scalebox{\VCScale}{#2}% \psset{unit=1cm}} \newcommand{\VCCall}[2][\VCGridScale]% {\psset{unit=#1cm}% \ifVCName\makebox[0pt][r]{\fbox{{\scriptsize #2}}}\fi% \scalebox{\VCScale}{\input{\VCDirectory #2}}% \psset{unit=1cm}} %%% commands \newcommand{\VCPut}[3][0]{\rput{#1}#2{#3}}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% State internal parameters --- Initial settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength{\StateLineWid} \setlength{\StateLineWid}{\StateLineWidth} \newcommand{\StateLineSty}{\StateLineStyle} \newcommand{\StateLineCol}{\StateLineColor} %\newcommand{\StateLineDblSta}{\StateLineDblStatus} \newcommand{\StateLineDblWid}{\StateLineDblWidth} \newcommand{\StateLineDblSp}{\StateLineDblSep} \newcommand{\StateFillCol}{\StateFillColor} \newcommand{\StateFillSta}{\StateFillStatus} \newcommand{\StateLabelSca}{1} \newcommand{\StateLabelCol}{\StateLabelColor} \newcommand{\StateDimen}{outer} \newcommand{\StateDblDimen}{middle} %%% Initial-final quality \newcommand{\VCIFflag}{2}\newcommand{\VCIFflagtemp}{2} \newcommand{\PlainState}% {\renewcommand{\VCIFflag}{0}\renewcommand{\VCIFflagtemp}{0}} \newcommand{\FullState}% {\renewcommand{\VCIFflag}{2}\renewcommand{\VCIFflagtemp}{2}} \newcommand{\IFState}{\renewcommand{\VCIFflag}{1}} \newcommand{\IFXState}{\renewcommand{\VCIFflag}{2}} \newcommand{\RstVCIF}{\renewcommand{\VCIFflag}{\VCIFflagtemp}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% State drawing style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% flag for hiding -- showing states (used for overlays in slides) % the trick is to have two different styles and instead of % saving\restoring parameters \newif\ifVCShowState \newcommand{\HideState}{\VCShowStatefalse} \newcommand{\ShowState}{\VCShowStatetrue} \ShowState % initialisation % the only difference between the two styles is the linestyle \newpsstyle{VaucStateStyle}% {framesep=0pt,% linewidth=\StateLineWid,% linecolor=\StateLineCol,% linestyle=\StateLineSty,% doubleline=false,% fillcolor=\StateFillCol,% fillstyle=\StateFillSta,% border=0pt, dimen=\StateDimen,% cornersize=relative,% framearc=1,% framesep=0pt} \newpsstyle{VaucStateDblStyle}% {framesep=0pt,% linewidth=\StateLineDblCoef\StateLineWid,% linecolor=\StateLineCol,% linestyle=\StateLineSty,% doubleline=true,% doublesep=\StateLineDblSep\StateLineWid,% fillcolor=\StateFillCol,% fillstyle=\StateFillSta,% border=0pt,% dimen=\StateDblDimen,% cornersize=relative,% framearc=1,% framesep=0pt} \newpsstyle{VaucHiddenStateStyle}% {framesep=0pt,% linewidth=\StateLineWid,% linecolor=\StateLineCol,% linestyle=none,% fillcolor=\StateFillCol,% fillstyle=none,% border=0pt,% dimen=outer,% cornersize=relative,% framearc=1,% framesep=0pt} \newcommand{\StateStyle}% {\ifVCShowState% \ifStateLineDbl\psset{style=VaucStateDblStyle}% \else\psset{style=VaucStateStyle}% \fi% \else\psset{style=VaucHiddenStateStyle}% \fi} %%% used in StateVar \newcommand{\VaucStateRBLabel}[1]% {\textcolor{\StateLabelCol}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}% {\rput[B]{0}(0,\VertShift){$#1$}}}}} %%% \newcommand{\VaucStateLabel}[1]% {\ifVCShowState% \ifVCRigidLabel% \ifVCStateLabelBaseLine% \textcolor{\StateLabelCol}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}% {\rput[B]% {*0}% (0,\VertShift){$#1$}}}}% \else% \textcolor{\StateLabelCol}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}% {\rput{*0}% (0,0)% {$ #1 $}}}}% \fi% \else% \textcolor{\StateLabelCol}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}{$#1$}}}% \fi% \else% \textcolor{white}% {\scalebox{\StateLabelSca} {\scalebox{\StateLabelScale}{$#1$}}}% \fi} %%% Write label without state (not documented) %%% 080612 new version that takes into account color, scale and %%% baseline \newcommand{\VCStateLabel}[1]% {\ifVCStateLabelBaseLine \textcolor{\StateLabelCol}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}% {\rput[B]{0}(0,\VertShift){$#1$}}}}% \else \textcolor{\StateLabelCol}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}{$#1$}}} \fi }% \newcommand{\VCPutStateLabel}[2]{\VCPut{#1}{\VCStateLabel{#2}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% State parameter changing and setting macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% line style \newcommand{\ChgStateLineStyle}[1]{\renewcommand{\StateLineSty}{#1}} \newcommand{\RstStateLineStyle}{\ChgStateLineStyle{\StateLineStyle}} \newcommand{\SetStateLineStyle}[1]% {\renewcommand{\StateLineStyle}{#1}\RstStateLineStyle}% %%% doubleline status \newcommand{\StateLineDouble}{\StateLineDbltrue} \newcommand{\StateLineSimple}{\StateLineDblfalse} %%% line width \newcommand{\ChgStateLineWidth}[1]% {\setlength{\StateLineWid}{#1\StateLineWidth}}% \newcommand{\RstStateLineWidth}{\ChgStateLineWidth{1}}% \newcommand{\SetStateLineWidth}[1]% ATTN the parameter is a length {\setlength{\StateLineWidth}{#1}\RstStateLineWidth} %%% line color \newcommand{\ChgStateLineColor}[1]{\renewcommand{\StateLineCol}{#1}} \newcommand{\RstStateLineColor}{\ChgStateLineColor{\StateLineColor}} \newcommand{\SetStateLineColor}[1]% {\renewcommand{\StateLineColor}{#1}\RstStateLineColor} %%% background fill status \newcommand{\ChgStateFillStatus}[1]{\renewcommand{\StateFillSta}{#1}} \newcommand{\RstStateFillStatus}{\ChgStateFillStatus{\StateFillStatus}} \newcommand{\SetStateFillStatus}[1]% {\renewcommand{\StateFillStatus}{#1}\RstStateFillStatus} %%% backgroud color \newcommand{\ChgStateFillColor}[1]{\renewcommand{\StateFillCol}{#1}} \newcommand{\RstStateFillColor}{\ChgStateFillColor{\StateFillColor}} \newcommand{\SetStateFillColor}[1]% {\renewcommand{\StateFillColor}{#1}\RstStateFillColor}% %%% label color \newcommand{\ChgStateLabelColor}[1]{\renewcommand{\StateLabelCol}{#1}} \newcommand{\RstStateLabelColor}{\ChgStateLabelColor{\StateLabelColor}} \newcommand{\SetStateLabelColor}[1]% {\renewcommand{\StateLabelColor}{#1}\RstStateLabelColor} %%% label scale \newcommand{\ChgStateLabelScale}[1]{\renewcommand{\StateLabelSca}{#1}} \newcommand{\RstStateLabelScale}{\ChgStateLabelScale{1}} \newcommand{\SetStateLabelScale}[1]% {\renewcommand{\StateLabelScale}{#1}\RstStateLabelScale} %%% double line \newcommand{\FixStateLineDouble}[2]% {\renewcommand{\StateLineDblCoef}{#1}% \renewcommand{\StateLineDblSep}{#2}} %%% dimmed state \newcommand{\FixDimState}[5]% {\renewcommand{\DimStateLineStyle}{#1}% \renewcommand{\DimStateLineCoef}{#3}% \renewcommand{\DimStateLineColor}{#2}% \renewcommand{\DimStateLabelColor}{#4}% \renewcommand{\DimStateFillColor}{#5}} \newcommand{\DimState}% {\ChgStateLineStyle{\DimStateLineStyle}% \ChgStateLineWidth{\DimStateLineCoef}% \ChgStateLineColor{\DimStateLineColor}% \ChgStateFillColor{\DimStateFillColor}% \ChgStateLabelColor{\DimStateLabelColor}} %%% restoring state parameters \newcommand{\RstState}% {\RstStateLineStyle% \RstStateLineWidth% \RstStateLineColor% \RstStateFillStatus% \RstStateFillColor% \RstStateLabelColor% \RstStateLabelScale} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% State drawing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % preparation \newlength{\StateDiam} \newlength{\VaucAOS}\newlength{\VaucAOSdiag} %%% A flag to remember the current size of state \newcommand{\StateSizeFlag}{} % \newcommand{\SetAOS}% {\setlength{\VaucAOS}{\ArrowOnStateCoef\StateDiam}% \setlength{\VaucAOSdiag}{\SQRTwo\VaucAOS}} %% parameter for variable width states \newlength{\VariableStateIntDiam} \newlength{\VariableStateWidth} \newlength{\VariableStateITPos} \newcommand{\SetStateIntDiam}% {\setlength{\VariableStateIntDiam}{\StateDiam}% \addtolength{\VariableStateIntDiam}{-2\StateLineWid}} % Loop parameters \newcommand{\LoopSize}{}\newcommand{\LoopSi}{} \newcommand{\LoopVarSize}{}\newcommand{\LoopVarSi}{} \newcommand{\CLoopSize}{}\newcommand{\CLoopSi}{} % \newcommand{\ChgLoopSize}[1]{\renewcommand{\LoopSi}{#1}} \newcommand{\RstLoopSize}{\ChgLoopSize{\LoopSize}} \newcommand{\SetLoopSize}[1]% {\renewcommand{\LoopSize}{#1}\RstLoopSize} % \newcommand{\ChgCLoopSize}[1]{\renewcommand{\CLoopSi}{#1}} \newcommand{\RstCLoopSize}{\ChgCLoopSize{\CLoopSize}} \newcommand{\SetCLoopSize}[1]% {\renewcommand{\CLoopSize}{#1}\RstCLoopSize} % \newcommand{\ChgLoopVarSize}[1]{\renewcommand{\LoopVarSi}{#1}} \newcommand{\RstLoopVarSize}{\ChgLoopVarSize{\LoopVarSize}} \newcommand{\SetLoopVarSize}[1]% {\renewcommand{\LoopVarSize}{#1}\RstLoopVarSize} % %%% setting state diameter -- internal command \newcommand{\SetStateDiam}[4]% {\setlength{\StateDiam}{#1}% \renewcommand{\ArrowOnStateCoef}{#2}% \SetLoopSize{#3}% \SetLoopVarSize{#3}% \SetCLoopSize{#4}% \SetStateIntDiam% \SetAOS} %%% setting state diameter -- external command \newcommand{\FixStateDiameter}[1]% {\setlength{\StateDiam}{#1}% \SetStateIntDiam% \SetAOS} %%% setting coeff for initial/final arrows \newcommand{\FixAOSLengthCoef}[1]% {\renewcommand{\ArrowOnStateCoef}{#1}% \SetAOS} %%% \newcommand{\MediumState}% {\SetStateDiam{\MediumStateDiameter}% {\ArrowOnMediumState}% {\LoopOnMediumState}% {\CLoopOnMediumState}% \renewcommand{\StateSizeFlag}{0}} \newcommand{\SmallState}% {\SetStateDiam{\SmallStateDiameter}% {\ArrowOnSmallState}% {\LoopOnSmallState}% {\CLoopOnSmallState}% \renewcommand{\StateSizeFlag}{1}} \newcommand{\LargeState}% {\SetStateDiam{\LargeStateDiameter}% {\ArrowOnLargeState}% {\LoopOnLargeState} {\CLoopOnLargeState}% \renewcommand{\StateSizeFlag}{2}} % \newcommand{\RstStateSize}% {\ifthenelse{\equal{\StateSizeFlag}{0}}% {\MediumState}% {\ifthenelse{\equal{\StateSizeFlag}{1}}% {\SmallState}{\LargeState}}} %%% Initialization \MediumState %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\VaucState}[3][{}]% {\rput#2% {\Cnode[radius=.5\StateDiam](0,0){#3}% \ifVCShowState% \nput[labelsep=-.5\StateDiam]% {0}{#3}{\makebox[0pt]{\VaucStateLabel{#1}}}% \fi% \ifthenelse{\equal{\VCIFflag}{0}}% {}% {\pnode(-\VaucAOS,0){#3w}% \pnode(\VaucAOS,0){#3e}% \pnode(0,\VaucAOS){#3n}% \pnode(0,-\VaucAOS){#3s}% \ifthenelse{\equal{\VCIFflag}{1}}% {}% {\pnode(-\VaucAOSdiag,\VaucAOSdiag){#3nw}% \pnode(\VaucAOSdiag,\VaucAOSdiag){#3ne}% \pnode(-\VaucAOSdiag,-\VaucAOSdiag){#3sw}% \pnode(\VaucAOSdiag,-\VaucAOSdiag){#3se}}% }% }% } % \newcommand{\State}[3][{}]{\StateStyle\VaucState[#1]{#2}{#3}} % \newcommand{\FinalState}[3][{}]% {\psset{style=VaucStateDblStyle}% \VaucState[#1]{#2}{#3}} %%% ecological commands \newcommand{\StateIF}[3][{}]{\IFState\State[#1]{#2}{#3}\RstVCIF}% \newcommand{\StateIFX}[3][{}]{\IFXState\State[#1]{#2}{#3}\RstVCIF}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Very Small State \newcommand{\VSState}[2]% {\renewcommand{\ArrowOnStateCoef}{\ArrowOnVerySmallState}% \FixStateDiameter{\VerySmallStateDiameter}% \ChgStateLineWidth{\VSStateLineCoef}% \State{#1}{#2}% \RstStateLineWidth% \RstStateSize}% mod 020201 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % white brace, of no width, used to place the label vertically %\newlength{\BraceLength} \newcommand{\WB}{\textcolor{white}{\{\!\!\!}}% \newcommand{\HS}{} \newlength{\ExtraSpace}\setlength{\ExtraSpace}{1em} % \newcommand{\StateVar}[3][]% {\StateStyle% \settowidth{\VariableStateWidth}% {\scalebox{\StateLabelSca}% {\scalebox{\StateLabelScale}{$#1$}}}% \addtolength{\VariableStateWidth}{\ExtraSpace}% \ifthenelse{\lengthtest{\VariableStateWidth<\VariableStateIntDiam}}% {\setlength{\VariableStateWidth}{\VariableStateIntDiam}}% {}% \setlength{\VariableStateITPos}{\ArrowOnStateCoef\StateDiam}% \addtolength{\VariableStateITPos}{0.5\VariableStateWidth}% \addtolength{\VariableStateITPos}{-0.5\StateDiam}% \rput#2% {\pnode(\VariableStateITPos,0){#3e}% \pnode(-\VariableStateITPos,0){#3w}% \pnode(0,\ArrowOnStateCoef\StateDiam){#3n}% \pnode(0,-\ArrowOnStateCoef\StateDiam){#3s}}% \rput#2% {\rnode{#3}% {\psframebox{\protect\rule[-.5\VariableStateIntDiam]% {0pt}% {\VariableStateIntDiam}% \protect\rule{\VariableStateWidth}{0pt}}}}% \rput#2{\VaucStateRBLabel{#1}}% }% %%%%% macro FinalStateVar %%%%%%%%%%%%%%%%%%% \newcommand{\StateLineDblTemp}{0} \newcommand{\FinalStateVar}[3][]% {\ifStateLineDbl\renewcommand{\StateLineDblTemp}{1}% \else\renewcommand{\StateLineDblTemp}{0}% \fi% \StateLineDouble% \StateVar[#1]{#2}{#3}% \ifthenelse{\equal{\StateLineDblTemp}{0}}% {\StateLineSimple}{}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\VarLoopOn}% {\ChgLoopOffset{\LoopVarOff}% \ChgLoopSize{\LoopVarSi}% \ChgLoopAngle{\LoopVarAng}} \newcommand{\VarLoopOff}{\RstLoopOffset\RstLoopSize\RstLoopAngle} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Edge drawing parameters --- Initial settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength{\EdgeLineWid} \setlength{\EdgeLineWid}{\EdgeLineWidth} \newcommand{\EdgeLineSty}{\EdgeLineStyle} \newcommand{\EdgeLineCol}{\EdgeLineColor} % label \newcommand{\EdgeLabelSca}{1} \newcommand{\EdgeLabelCol}{\EdgeLabelColor} % arrow \newlength{\EdgeArrowSZDim} \setlength{\EdgeArrowSZDim}{\EdgeArrowWidth} \newcommand{\EdgeArrowSZNum}{\EdgeArrowLengthCoef} \newcommand{\EdgeArrowSty}{\EdgeArrowStyle} \newcommand{\EdgeArrowIns}{\EdgeArrowInset} % border \newlength{\EdgeLineBord}\setlength{\EdgeLineBord}{0pt} %%% Zigzag edge parameters \newlength{\ZZSiZ} \setlength{\ZZSiZ}{\ZZSize}% \newcommand{\ZZLineWid}{\ZZLineWidth}% multiplying coefficient %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Edge geometric parameters --- Initial settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Edge \newlength{\EdgeOff} \setlength{\EdgeOff}{\EdgeOffset} % Arc \newcommand{\VaucArcAng}{\VaucArcAngle} \newcommand{\VaucLArcAng}{\VaucLArcAngle} \newlength{\VaucArcOff} \setlength{\VaucArcOff}{\VaucArcOffset} % Loop \newcommand{\VaucArcCurv}{\VaucArcCurvature} \newcommand{\VaucLArcCurv}{\VaucLArcCurvature} \newcommand{\LoopAng}{\LoopAngle} \newcommand{\CLoopAng}{\CLoopAngle} \newcommand{\LoopVarAng}{\LoopVarAngle} \newlength{\LoopOff}\setlength{\LoopOff}{\LoopOffset} \newlength{\LoopVarOff}\setlength{\LoopVarOff}{\LoopVarOffset} \newlength{\EdgeNodeSP}\setlength{\EdgeNodeSP}{\EdgeNodeSep} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Edge label parameters --- Initial settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % label distance from transition \newlength{\TransLabelSP}\setlength{\TransLabelSP}{\TransLabelSep} % label position on transitions \newcommand{\EdgeLabelPos}{\EdgeLabelPosit} \newcommand{\ArcLabelPos}{\ArcLabelPosit} \newcommand{\LArcLabelPos}{\LArcLabelPosit} \newcommand{\LoopLabelPos}{\LoopLabelPosit} \newcommand{\CLoopLabelPos}{\CLoopLabelPosit} % label position on initial-final arrow \newcommand{\InitStateLabelPos}{\InitStateLabelPosit} \newcommand{\FinalStateLabelPos}{\FinalStateLabelPosit} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Transition styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpsstyle{VaucEdgeStyle}% {arrows=\EdgeArrowSty,% arrowsize=\EdgeArrowSZDim,% arrowlength=\EdgeArrowSZNum,% arrowinset=\EdgeArrowIns,% linewidth=\EdgeLineWid,% linecolor=\EdgeLineCol,% linestyle=\EdgeLineSty,% doubleline=false,% bordercolor=\EdgeLineBorderColor,% border=\EdgeLineBord,% fillstyle=none,% offset=\EdgeOff,% labelsep=\TransLabelSP,% nodesep=\EdgeNodeSP} \newpsstyle{VaucEdgeDblStyle}% {arrows=\EdgeArrowSty,% arrowsize=\EdgeArrowSZDim,% arrowlength=\EdgeArrowSZNum,% arrowinset=\EdgeArrowIns,% linewidth=\EdgeLineDblCoef\EdgeLineWid,% linecolor=\EdgeLineCol, linestyle=\EdgeLineSty,% doubleline=true,% doublesep=\EdgeLineDblSep\EdgeLineWid,% bordercolor=\EdgeLineBorderColor,% border=\EdgeLineBord,% fillstyle=none,% offset=\EdgeOff,% labelsep=\TransLabelSP,% nodesep=\EdgeNodeSP} %%% Arc \newpsstyle{VaucArcR}% {ncurv=\VaucArcCurv,% arcangle=-\VaucArcAng,% labelsep=\TransLabelSP,% offset=-\VaucArcOff} \newpsstyle{VaucArcL}% {ncurv=\VaucArcCurv,% arcangle=\VaucArcAng,% labelsep=\TransLabelSP,% offset=\VaucArcOff} \newpsstyle{VaucLArcR}% {ncurv=\VaucLArcCurv,% arcangle=-\VaucLArcAng,% labelsep=\TransLabelSP,% offset=-\VaucArcOff} \newpsstyle{VaucLArcL}% {ncurv=\VaucLArcCurv,% arcangle=\VaucLArcAng,% labelsep=\TransLabelSP,% offset=\VaucArcOff} %%% zig-zag \newpsstyle{VaucZigzagStyle}% {linewidth=\ZZLineWid\EdgeLineWid,% linearc=1.6pt,% coilwidth=1.2\ZZSiZ,% coilheight=\ZZShape,% coilarmA=0.1\ZZSiZ,% coilarmB=0.3\ZZSiZ,% labelsep=\TransLabelSP,% nodesep=\EdgeNodeSP} %%% \newcommand{\EdgeStyle}% {\ifEdgeLineDbl\psset{style=VaucEdgeDblStyle}% \else\psset{style=VaucEdgeStyle}% \fi} \newcommand{\ZigzagStyle}% {\addtolength{\TransLabelSP}{\TransLabelZZCoef\ZZSiZ}% \psset{style=VaucZigzagStyle}% \addtolength{\TransLabelSP}{-\TransLabelZZCoef\ZZSiZ}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Transition parameter changing and setting macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% geometric parameters %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% edges \newcommand{\ChgEdgeOffset}[1]{\setlength{\EdgeOff}{#1}} \newcommand{\RstEdgeOffset}{\ChgEdgeOffset{\EdgeOffset}} \newcommand{\SetEdgeOffset}[1]% {\setlength{\EdgeOffset}{#1}\RstEdgeOffset} \newcommand{\ForthBackOffset}% {\setlength{\EdgeOff}{\ForthBackEdgeOffset\EdgeLineWid}} % \newcommand{\ChgEdgeNodeSep}[1]{\setlength{\EdgeNodeSP}{#1\EdgeNodeSep}} \newcommand{\RstEdgeNodeSep}{\ChgEdgeNodeSep{1}} \newcommand{\SetEdgeNodeSep}[1]% {\setlength{\EdgeNodeSep}{#1}\RstEdgeNodeSep} %% arcs \newcommand{\ChgArcAngle}[1]{\renewcommand{\VaucArcAng}{#1}} \newcommand{\RstArcAngle}{\ChgArcAngle{\VaucArcAngle}} \newcommand{\SetArcAngle}[1]% {\renewcommand{\VaucArcAngle}{#1}\RstArcAngle} % \newcommand{\ChgLArcAngle}[1]{\renewcommand{\VaucLArcAng}{#1}} \newcommand{\RstLArcAngle}{\ChgLArcAngle{\VaucLArcAngle}} \newcommand{\SetLArcAngle}[1]% {\renewcommand{\VaucLArcAngle}{#1}\RstLArcAngle} % \newcommand{\ChgArcCurvature}[1]{\renewcommand{\VaucArcCurv}{#1}} \newcommand{\RstArcCurvature}{\ChgArcCurvature{\VaucArcCurvature}} \newcommand{\SetArcCurvature}[1]% {\renewcommand{\VaucArcCurvature}{#1}\RstArcCurvature} % \newcommand{\ChgLArcCurvature}[1]{\renewcommand{\VaucLArcCurv}{#1}} \newcommand{\RstLArcCurvature}{\ChgLArcCurvature{\VaucLArcCurvature}} \newcommand{\SetLArcCurvature}[1]% {\renewcommand{\VaucLArcCurvature}{#1}\RstLArcCurvature} % \newcommand{\ChgArcOffset}[1]{\setlength{\VaucArcOff}{#1}} \newcommand{\RstArcOffset}{\setlength{\VaucArcOff}{\VaucArcOffset}} \newcommand{\SetArcOffset}[1]% {\renewcommand{\VaucArcOffset}{#1}\RstArcOffset} % \newcommand{\ChgLoopOffset}[1]{\setlength{\LoopOff}{#1}} \newcommand{\RstLoopOffset}{\setlength{\LoopOff}{\LoopOffset}} \newcommand{\SetLoopOffset}[1]% {\renewcommand{\LoopOffset}{#1}\RstLoopOffset} % \newcommand{\ChgLoopAngle}[1]{\renewcommand{\LoopAng}{#1}} \newcommand{\RstLoopAngle}{\ChgLoopAngle{\LoopAngle}} \newcommand{\SetLoopAngle}[1]% {\renewcommand{\LoopAngle}{#1}\RstLoopAngle} % \newcommand{\ChgCLoopAngle}[1]{\renewcommand{\CLoopAng}{#1}} \newcommand{\RstCLoopAngle}{\ChgCLoopAngle{\CLoopAngle}} \newcommand{\SetCLoopAngle}[1]% {\renewcommand{\CLoopAngle}{#1}\RstCLoopAngle} %% labels \newcommand{\ChgEdgeLabelSep}[1]% {\setlength{\TransLabelSP}{#1\TransLabelSep}} \newcommand{\RstEdgeLabelSep}{\ChgEdgeLabelSep{1}} \newcommand{\SetEdgeLabelSep}[1]% {\setlength{\TransLabelSep}{#1}\RstEdgeLabelSep} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% drawing parameters \newcommand{\ChgEdgeLineColor}[1]{\renewcommand{\EdgeLineCol}{#1}} \newcommand{\RstEdgeLineColor}{\ChgEdgeLineColor{\EdgeLineColor}} \newcommand{\SetEdgeLineColor}[1]% {\renewcommand{\EdgeLineColor}{#1}\RstEdgeLineColor} % \newcommand{\ChgEdgeLineStyle}[1]{\renewcommand{\EdgeLineSty}{#1}} \newcommand{\RstEdgeLineStyle}{\ChgEdgeLineStyle{\EdgeLineStyle}} \newcommand{\SetEdgeLineStyle}[1]% {\renewcommand{\EdgeLineStyle}{#1}\RstEdgeLineStyle} % \newcommand{\ChgEdgeLineWidth}[1]% coefficient ! {\setlength{\EdgeLineWid}{#1\EdgeLineWidth}} \newcommand{\RstEdgeLineWidth}{\ChgEdgeLineWidth{1}} \newcommand{\SetEdgeLineWidth}[1]% length ! {\setlength{\EdgeLineWidth}{#1}\RstEdgeLineWidth} % double line \newcommand{\EdgeLineDouble}% {\EdgeLineDbltrue% \ChgEdgeArrowWidth{\EdgeDblArrowWidth}% \ChgEdgeArrowLengthCoef{\EdgeDblArrowLengthCoef}} \newcommand{\EdgeLineSimple}% {\EdgeLineDblfalse\RstEdgeArrowWidth\RstEdgeArrowLengthCoef} \newcommand{\FixEdgeLineDouble}[2]{% \renewcommand{\EdgeLineDblCoef}{#1}% \renewcommand{\EdgeLineDblSep}{#2}} % edge labels \newcommand{\ChgEdgeLabelColor}[1]{\renewcommand{\EdgeLabelCol}{#1}} \newcommand{\RstEdgeLabelColor}{\ChgEdgeLabelColor{\EdgeLabelColor}} \newcommand{\SetEdgeLabelColor}[1]% {\renewcommand{\EdgeLabelColor}{#1}\RstEdgeLabelColor} % \newcommand{\ChgEdgeLabelScale}[1]{\renewcommand{\EdgeLabelSca}{#1}} \newcommand{\RstEdgeLabelScale}{\ChgEdgeLabelScale{1}} \newcommand{\SetEdgeLabelScale}[1]% {\renewcommand{\EdgeLabelScale}{#1}\RstEdgeLabelScale} % arrows \newcommand{\ChgEdgeArrowStyle}[1]{\renewcommand{\EdgeArrowSty}{#1}} \newcommand{\RstEdgeArrowStyle}{\ChgEdgeArrowStyle{\EdgeArrowStyle}} \newcommand{\SetEdgeArrowStyle}[1]% {\renewcommand{\EdgeArrowStyle}{#1}\RstEdgeArrowStyle} % \newcommand{\ChgEdgeArrowWidth}[1]% {\setlength{\EdgeArrowSZDim}{#1}} % !! length !! \newcommand{\RstEdgeArrowWidth}{\ChgEdgeArrowWidth{\EdgeArrowWidth}} \newcommand{\SetEdgeArrowWidth}[1]% {\setlength{\EdgeArrowWidth}{#1} \RstEdgeArrowWidth} % \newcommand{\ChgEdgeArrowLengthCoef}[1]{\renewcommand{\EdgeArrowSZNum}{#1}} \newcommand{\RstEdgeArrowLengthCoef}{\ChgEdgeArrowLengthCoef{\EdgeArrowLengthCoef}} \newcommand{\SetEdgeArrowLengthCoef}[1]% {\renewcommand{\EdgeArrowLengthCoef}{#1}\RstEdgeArrowLengthCoef} % \newcommand{\ChgEdgeArrowInsetCoef}[1]{\renewcommand{\EdgeArrowIns}{#1}} \newcommand{\RstEdgeArrowInsetCoef}{\ChgEdgeArrowInsetCoef{\EdgeArrowInset}} \newcommand{\SetEdgeArrowInsetCoef}[1]% {\renewcommand{\EdgeArrowInset}{#1}\RstEdgeArrowInsetCoef} % \newcommand{\ReverseArrow}% {\ChgEdgeArrowStyle{\EdgeRevArrowStyle}% \renewcommand{\EdgeLabelPos}{\EdgeLabelRevPosit}% \renewcommand{\ArcLabelPos}{\ArcLabelRevPosit}% \renewcommand{\LArcLabelPos}{\LArcLabelRevPosit}% \renewcommand{\LoopLabelPos}{\LoopLabelRevPosit}% \renewcommand{\CLoopLabelPos}{\CLoopLabelRevPosit}% \renewcommand{\InitStateLabelPos}{\InitStateLabelRevPosit}% \renewcommand{\FinalStateLabelPos}{\FinalStateLabelRevPosit}} \newcommand{\StraightArrow}% {\ChgEdgeArrowStyle{\EdgeArrowStyle}% \renewcommand{\EdgeLabelPos}{\EdgeLabelPosit}% \renewcommand{\ArcLabelPos}{\ArcLabelPosit}% \renewcommand{\LArcLabelPos}{\LArcLabelPosit}% \renewcommand{\LoopLabelPos}{\LoopLabelPosit}% \renewcommand{\CLoopLabelPos}{\CLoopLabelPosit}% \renewcommand{\InitStateLabelPos}{\InitStateLabelPosit}% \renewcommand{\FinalStateLabelPos}{\FinalStateLabelPosit}} % border \newcommand{\FixEdgeBorder}[2]% {\renewcommand{\EdgeLineBorderCoef}{#1}% \renewcommand{\EdgeLineBorderColor}{#2}} \newcommand{\EdgeBorder}% {\setlength{\EdgeLineBord}{\EdgeLineBorderCoef\EdgeLineWid}} \newcommand{\EdgeBorderOff}{\setlength{\EdgeLineBord}{0pt}} % dimmed edges \newcommand{\FixDimEdge}[4]{% \renewcommand{\DimEdgeLineStyle}{#1}% \renewcommand{\DimEdgeLineCoef}{#2}% \renewcommand{\DimEdgeLineColor}{#3}% \renewcommand{\DimEdgeLabelColor}{#4}}% % \newcommand{\DimEdge}% {\ChgEdgeLineStyle{\DimEdgeLineStyle}% \ChgEdgeLineWidth{\DimEdgeLineCoef}% \ChgEdgeLineColor{\DimEdgeLineColor}% \ChgEdgeLabelColor{\DimEdgeLabelColor}} % zigzag edges \newcommand{\ChgZZSize}[1]{\setlength{\ZZSiZ}{#1}} \newcommand{\RstZZSize}{\setlength{\ZZSiZ}{\ZZSize}} \newcommand{\SetZZSize}[1]{\setlength{\ZZSiZe}{#1}\RstZZSize} % \newcommand{\ChgZZLineWidth}[1]{\renewcommand{\ZZLineWid}{#1}} \newcommand{\RstZZLineWidth}{\ChgZZLineWidth{\ZZLineWidth}} \newcommand{\SetZZLineWidth}[1]% {\renewcommand{\ZZLineWidth}{#1}\RstZZLineWidth} %%% \newcommand{\RstEdge}% {\RstEdgeOffset% \RstArcAngle% \RstLArcAngle% \RstArcCurvature% \RstLArcCurvature% \RstArcOffset% \RstLoopOffset% \RstLoopSize% \RstEdgeLineColor% \RstEdgeLineStyle% \RstEdgeLineWidth% \EdgeLineSimple% \StraightArrow%\EdgeBorderOff% \RstEdgeLabelScale% \RstEdgeLabelColor} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Transition drawing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% composition of transition label \newcommand{\VaucEdgeLabel}[1]% {\textcolor{\EdgeLabelCol}% {\scalebox{\EdgeLabelSca}% {\scalebox{\EdgeLabelScale}{$#1$}}}}% %%% Edges \newcommand{\EdgeL}[4][{\EdgeLabelPos}]% {\EdgeStyle \ncline{#2}{#3} \naput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\EdgeR}[4][{\EdgeLabelPos}]% {\EdgeStyle \ncline{#2}{#3} \nbput[npos=#1]{\VaucEdgeLabel{#4}}} %%% Arcs \newcommand{\ArcL}[4][{\ArcLabelPos}]% {\EdgeStyle% \psset{style=VaucArcL}% \ncarc{#2}{#3}% \naput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\ArcR}[4][{\ArcLabelPos}]% {\EdgeStyle% \psset{style=VaucArcR}% \ncarc{#2}{#3}% \nbput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\LArcL}[4][{\LArcLabelPos}]% {\EdgeStyle% \psset{style=VaucLArcL}% \ncarc{#2}{#3}% \naput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\LArcR}[4][{\LArcLabelPos}]% {\EdgeStyle% \psset{style=VaucLArcR}% \ncarc{#2}{#3}% \nbput[npos=#1]{\VaucEdgeLabel{#4}}} %%% Loops \newcounter{anglea}\newcounter{angleb} \newcommand{\LoopXR}[7]% {{\setcounter{anglea}{#2-#4}}% {\setcounter{angleb}{#2+#4}}% {\EdgeStyle% \psset{angleA=\theanglea,angleB=\theangleb,offset=#5,ncurv=#6}% \nccurve{#3}{#3}% \nbput[npos=#1]{\VaucEdgeLabel{#7}}}} \newcommand{\LoopXL}[7]% {{\setcounter{anglea}{#2+#4}}% {\setcounter{angleb}{#2-#4}}% {\EdgeStyle% \psset{angleA=\theanglea,angleB=\theangleb,offset=-#5,ncurv=#6}% \nccurve{#3}{#3}% \naput[npos=#1]{\VaucEdgeLabel{#7}}}} % \newcommand{\LoopR}[4][{\LoopLabelPos}]% {\LoopXR{#1}{#2}{#3}{\LoopAng}{\LoopOff}{\LoopSi}{#4}} \newcommand{\LoopL}[4][{\LoopLabelPos}]% {\LoopXL{#1}{#2}{#3}{\LoopAng}{\LoopOff}{\LoopSi}{#4}} \newcommand{\CLoopR}[4][{\CLoopLabelPos}]% {\LoopXR{#1}{#2}{#3}{\CLoopAng}{\LoopOff}{\LoopSi}{#4}} \newcommand{\CLoopL}[4][{\CLoopLabelPos}]% {\LoopXL{#1}{#2}{#3}{\CLoopAng}{\LoopOff}{\LoopSi}{#4}} \newcommand{\LoopVarR}[4][{\LoopLabelPos}]% {\LoopXR{#1}{#2}{#3}{\LoopVarAng}{\LoopVarOff}{\LoopVarSi}{#4}} \newcommand{\LoopVarL}[4][{\LoopLabelPos}]% {\LoopXL{#1}{#2}{#3}{\LoopVarAng}{\LoopVarOff}{\LoopVarSi}{#4}} % \newcommand{\LoopW}[3][{\LoopLabelPos}]{\LoopR[#1]{180}{#2}{#3}} \newcommand{\LoopE}[3][{\LoopLabelPos}]{\LoopL[#1]{0}{#2}{#3}} \newcommand{\LoopN}[3][{\LoopLabelPos}]{\LoopL[#1]{90}{#2}{#3}} \newcommand{\LoopS}[3][{\LoopLabelPos}]{\LoopR[#1]{-90}{#2}{#3}} \newcommand{\LoopNW}[3][{\LoopLabelPos}]{\LoopR[#1]{135}{#2}{#3}} \newcommand{\LoopNE}[3][{\LoopLabelPos}]{\LoopL[#1]{45}{#2}{#3}} \newcommand{\LoopSW}[3][{\LoopLabelPos}]{\LoopL[#1]{-135}{#2}{#3}} \newcommand{\LoopSE}[3][{\LoopLabelPos}]{\LoopR[#1]{-45}{#2}{#3}} \newcommand{\CLoopW}[3][{\CLoopLabelPos}]{\CLoopR[#1]{180}{#2}{#3}} \newcommand{\CLoopE}[3][{\CLoopLabelPos}]{\CLoopL[#1]{0}{#2}{#3}} \newcommand{\CLoopN}[3][{\CLoopLabelPos}]{\CLoopL[#1]{90}{#2}{#3}} \newcommand{\CLoopS}[3][{\CLoopLabelPos}]{\CLoopR[#1]{-90}{#2}{#3}} \newcommand{\CLoopNW}[3][{\CLoopLabelPos}]{\CLoopR[#1]{135}{#2}{#3}} \newcommand{\CLoopNE}[3][{\CLoopLabelPos}]{\CLoopL[#1]{45}{#2}{#3}} \newcommand{\CLoopSW}[3][{\CLoopLabelPos}]{\CLoopL[#1]{-135}{#2}{#3}} \newcommand{\CLoopSE}[3][{\CLoopLabelPos}]{\CLoopR[#1]{-45}{#2}{#3}} \newcommand{\LoopVarN}[3][{\CLoopLabelPos}]{\LoopVarL[#1]{90}{#2}{#3}} \newcommand{\LoopVarS}[3][{\CLoopLabelPos}]{\LoopVarR[#1]{-90}{#2}{#3}} %%% Zigzag edges \newcommand{\ZZEdge}[2]% {\EdgeStyle% \ZigzagStyle% \nczigzag{#1}{#2}} \newcommand{\ZZEdgeL}[4][{\EdgeLabelRevPosit}]% {\EdgeStyle% \ZigzagStyle% \nczigzag{#2}{#3}% \naput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\ZZEdgeR}[4][{\EdgeLabelRevPosit}]% {\EdgeStyle% \ZigzagStyle% \nczigzag{#2}{#3}% \nbput[npos=#1]{\VaucEdgeLabel{#4}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Initial-final arrow drawing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % implicit parameter \newcommand{\InitialDir}{w}\newcommand{\FinalDir}{e} % without label \newcommand{\Initial}[2][\InitialDir]{\EdgeStyle\ncline{#2#1}{#2}} \newcommand{\Final}[2][\FinalDir]{\EdgeStyle\ncline{#2}{#2#1}} % with label % NB modified syntax eg \InitialL[pos]{dir}{statename}{label} \newcommand{\InitialL}[4][{\InitStateLabelPos}]% {\EdgeStyle% \ncline{#3#2}{#3}% \naput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\InitialR}[4][{\InitStateLabelPos}]% {\EdgeStyle% \ncline{#3#2}{#3}% \nbput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\FinalL}[4][{\FinalStateLabelPos}]% {\EdgeStyle% \ncline{#3}{#3#2}% \naput[npos=#1]{\VaucEdgeLabel{#4}}} \newcommand{\FinalR}[4][{\FinalStateLabelPos}]% {\EdgeStyle% \ncline{#3}{#3#2}% \nbput[npos=#1]{\VaucEdgeLabel{#4}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Reprise des macros pstricks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\Point}[2]{\pnode#1{#2}} \newcommand{\Edge}[2]{\EdgeStyle\ncline{#1}{#2}} % \newcommand{\VArcL}[5][{\ArcLabelPos}]% {\EdgeStyle% \psset{style=VaucLArcL}% \ncarc[#2]{#3}{#4}% \naput[npos=#1]{\VaucEdgeLabel{#5}}} \newcommand{\VArcR}[5][{\ArcLabelPos}]% {\EdgeStyle% \psset{style=VaucLArcR}% \ncarc[#2]{#3}{#4}% \nbput[npos=#1]{\VaucEdgeLabel{#5}}} % \newcommand{\VCurveL}[5][{\ArcLabelPos}]% {\EdgeStyle% \psset{angleA=0,angleB=180,ncurv=1}% \nccurve[#2]{#3}{#4}% \naput[npos=#1]{\VaucEdgeLabel{#5}}} \newcommand{\VCurveR}[5][{\ArcLabelPos}]% {\EdgeStyle% \psset{angleA=0,angleB=0,ncurv=1}% \nccurve[#2]{#3}{#4}% \nbput[npos=#1]{\VaucEdgeLabel{#5}}} % \newcommand{\LabelL}[2][{\EdgeLabelPos}]% {\naput[npos=#1]{\VaucEdgeLabel{#2}}} \newcommand{\LabelR}[2][{\EdgeLabelPos}]% {\nbput[npos=#1]{\VaucEdgeLabel{#2}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%