%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% 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 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
