%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                           
%                  Vaucanson_v4.tex                      
%                                                           
%       Automata drawer based on Pstricks
%                       
%                V 0.2 - 03/05/09
%  modification of StateVar
%  Chg*LabelScale is relative w.r.t Set*LabelScale
%  Chg Vaucanson to Vaucanson-G
%                V 0.3 - 03/09/10
%  VCPref-main is no more required to initialize VC-G
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 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}
\newcommand{\Vaucanson}{\textsc{V$\overline{\text{au}}$C%
\raisebox{.3ex}{$\underline{\text{an}}$}S$\overline{\text{on}}$-G}\xspace}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 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.2}
\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}{0.8}
%%% 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
\newcommand{\TransLabelZZCoef}{0.6}% coefficient multiplicateur
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Edge geometric parameters  --- Default settings
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Edge 
\newlength{\EdgeOffset}
\setlength{\EdgeOffset}{0pt}
\newcommand{\ForthBackEdgeOffset}{5}% coef
% 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}}% v4 pour 
%                                              % cause de syntaxe
\newcommand{\LargePicture}{\FixVCScale{\LargeScale}}
\newcommand{\MediumPicture}{\FixVCScale{\MediumScale}}
\newcommand{\SmallPicture}{\FixVCScale{\SmallScale}}
\newcommand{\TinyPicture}{\FixVCScale{\TinyScale}}
%%% Grid scale commands
% \newcommand{\VCGridScale}{}% Grid scale parameter
% 
\newcommand{\FixVCGridScale}[1]{\renewcommand{\VCGridScale}{#1}}% v4 pour 
% "grid unit"
%%%%% 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}%
\ifVCName\makebox[0pt][r]{\fbox{{\scriptsize #2}}}\fi%
\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}
\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}
\newcommand{\VCPutStateLabel}[2]%
    {\rput#1{\scalebox{\StateLabelSca}{$ #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{\StateLabelCol}{#1}\RstStateLabelColor}
%%% label scale
\newcommand{\ChgStateLabelScale}[1]{\renewcommand{\StateLabelSca}{#1}}
\newcommand{\RstStateLabelScale}{\ChgStateLabelScale{1}}
\newcommand{\SetStateLabelScale}[1]%
   {\renewcommand{\StateLabelScale}{#1}\RstStateLabelScale}
\newcommand{\FixStateLineDouble}[2]{%
    \renewcommand{\StateLineDblCoef}{#1}%
    \renewcommand{\StateLineDblSep}{#2}}
\newcommand{\FixDimState}[5]{%
    \renewcommand{\DimStateLineStyle}{#1}%
    \renewcommand{\DimStateLineCoef}{#3}%
    \renewcommand{\DimStateLineColor}{#2}%
    \renewcommand{\DimStateLabelColor}{#4}%
    \renewcommand{\DimStateFillColor}{#5}}%
%%% restoring state parameters
\newcommand{\RstState}{%
   \RstStateLineStyle\RstStateLineWidth%
   \RstStateLineColor%
   \RstStateFillStatus\RstStateFillColor%
   \RstStateLabelColor\RstStateLabelScale}%
%%% establishing the dimmed style
\newcommand{\DimState}{%
    \ChgStateLineStyle{\DimStateLineStyle}%
    \ChgStateLineWidth{\DimStateLineCoef}%
    \ChgStateLineColor{\DimStateLineColor}%
        \ChgStateFillColor{\DimStateFillColor}%
    \ChgStateLabelColor{\DimStateLabelColor}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 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}%
   \SetAOS\SetStateIntDiam}
%%% setting state diameter -- external command
\newcommand{\FixStateDiameter}[1]%  v4 pour cause de syntaxe
   {\setlength{\StateDiam}{#1}\SetStateIntDiam \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}}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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 parameter
\newlength{\ZZSiZ}
\setlength{\ZZSiZ}{\ZZSize}%
\newcommand{\ZZLineWid}{\ZZLineWidth}% coefficient multiplicateur
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 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}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 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=0pt}
\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=0pt}
%%% 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,%
    labelsep=\TransLabelSP,nodesep=0pt,%
    coilwidth=1.2\ZZSiZ,coilarmA=0.1\ZZSiZ,%
    coilarmB=0.3\ZZSiZ,coilheight=\ZZShape,linearc=1.6pt}
%%%
\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
\newcommand{\ChgEdgeOffset}[1]{\setlength{\EdgeOff}{#1}}
\newcommand{\RstEdgeOffset}{\ChgEdgeOffset{\EdgeOffset}}
\newcommand{\SetEdgeOffset}[1]%
   {\setlength{\EdgeOffset}{#1}\RstEdgeOffset}
\newcommand{\ForthBackOffset}{%
   \setlength{\EdgeOff}{\ForthBackEdgeOffset\EdgeLineWid}}
%
\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}
%
%%% 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}
%
\newcommand{\EdgeLineDouble}%
        {\EdgeLineDbltrue%
    \ChgEdgeArrowWidth{\EdgeDblArrowWidth}
    \ChgEdgeArrowLengthCoef{\EdgeDblArrowLengthCoef}}
\newcommand{\EdgeLineSimple}%
   {\EdgeLineDblfalse \RstEdgeArrowWidth \RstEdgeArrowLengthCoef}
%
\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}
\newcommand{\FixDimEdge}[4]{%
    \renewcommand{\DimEdgeLineStyle}{#1}%
    \renewcommand{\DimEdgeLineCoef}{#2}%
    \renewcommand{\DimEdgeLineColor}{#3}%
    \renewcommand{\DimEdgeLabelColor}{#4}}%
%
\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}}
% Double
\newcommand{\FixEdgeLineDouble}[2]{%
    \renewcommand{\EdgeLineDblCoef}{#1}%
    \renewcommand{\EdgeLineDblSep}{#2}}
% border
\newcommand{\FixEdgeBorder}[2]{%
    \renewcommand{\EdgeLineBorderCoef}{#1}%
    \renewcommand{\EdgeLineBorderColor}{#2}}
\newcommand{\EdgeBorder}%
  {\setlength{\EdgeLineBord}{\EdgeLineBorderCoef\EdgeLineWid}}
\newcommand{\EdgeBorderOff}{\setlength{\EdgeLineBord}{0pt}}
%%%
\newcommand{\DimEdge}{%
    \ChgEdgeLineStyle{\DimEdgeLineStyle}%
    \ChgEdgeLineWidth{\DimEdgeLineCoef}%
    \ChgEdgeLineColor{\DimEdgeLineColor}%
        \ChgEdgeLabelColor{\DimEdgeLabelColor}}
%%%
\newcommand{\ChgZZSize}[1]{\setlength{\ZZSiZ}{#1}}
\newcommand{\RstZZSize}{\setlength{\ZZSiZ}{\ZZSize}}
\newcommand{\SetZZSize}[1]{\setlength{\ZZSiZe}{#1}\RstZZSize}
%%%\ZZLineWidth
\newcommand{\ChgZZLineWidth}[1]{\renewcommand{\ZZLineWid}{#1}}
\newcommand{\RstZZLineWidth}{\ChgZZLineWidth{\ZZLineWidth}}
\newcommand{\SetZZLineWidth}[1]%
   {\renewcommand{\ZZLineWidth}{#1}\RstZZLineWidth}
%
%%% label of transitions
\newcommand{\VaucEdgeLabel}[1]{%
        \textcolor{\EdgeLabelCol}{\scalebox{\EdgeLabelSca}{\scalebox{\EdgeLabelScale}{$ #1 $}}}}
%%%
\newcommand{\RstEdge}{%
   \RstEdgeOffset\RstArcAngle\RstLArcAngle%
   \RstArcCurvature\RstLArcCurvature%
   \RstArcOffset\RstLoopOffset\RstLoopSize%
   \RstEdgeLineColor\RstEdgeLineStyle\RstEdgeLineWidth\EdgeLineSimple%
   \StraightArrow%\EdgeBorderOff%
   \RstEdgeLabelScale\RstEdgeLabelColor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%  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}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%  Transition drawing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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}}}
%
\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}}}
%
\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}}
%
\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}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%  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 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
