automaton 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+ # Various monkeypatching
2
+
3
+ class Array #:nodoc:
4
+ # Turns an array of the form [[key, value], ...] into a hash of the form {key => value }
5
+ # [[:a, 1], [:b, 2]].to_h #=> {a => 1, :b => 2}
6
+ def to_h
7
+ inject({}) { |m, e| m[e[0]] = e[1]; m }
8
+ end
9
+ end
10
+
11
+ class Symbol #:nodoc:
12
+ # Create a new symbol with _name added
13
+ def tag(name)
14
+ "#{self}_#{name}".to_sym
15
+ end
16
+
17
+ # Create a new symbol a_b from the symbol a and b
18
+ def +(other)
19
+ "#{self}_#{other}".to_sym
20
+ end
21
+ end
22
+
23
+ class Hash #:nodoc:
24
+ # Invokes block once for each pair of self, each time yielding a new key, value pair.
25
+ # Returns a new hash with the values of the original hash replaced by those returned from the block.
26
+ #
27
+ # {:a => 1, :b => 2}.key_value_map{|key, value| value * 2}
28
+ # #=> {:a => 2, :a => 4}
29
+ def value_map
30
+ self.inject(self.class.new) do |hash, (key,value)|
31
+ hash[key] = yield(key, value)
32
+ hash
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ %%%%% macro FinalStateVar %%%%%%%%%%%%%%%%%%%
2
+ \newcommand{\StateLineDblTemp}{0}
3
+ \newcommand{\FinalStateVar}[3][]%
4
+ {\ifStateLineDbl
5
+ \renewcommand{\StateLineDblTemp}{1}
6
+ \else
7
+ \renewcommand{\StateLineDblTemp}{0}
8
+ \fi
9
+ \StateLineDouble
10
+ \StateVar[#1]{#2}{#3}
11
+ \ifthenelse{\equal{\StateLineDblTemp}{0}}%
12
+ {\StateLineSimple}{}%
13
+ }
14
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -0,0 +1,109 @@
1
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
+ %
3
+ % This files contains initial values
4
+ % of Vaucanson's parameter
5
+ % Modify it to create your own style
6
+ %
7
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8
+ %%%%%%%%%%%%%%
9
+ % State aspect
10
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
+ \SetStateLabelColor{black} %% color
12
+ \SetStateLabelScale{1.7} %% float
13
+ \SetStateLineStyle{solid} %% aspect (other values: none, dashed, dotted)
14
+ \SetStateLineWidth{1.8pt} %% length
15
+ \SetStateLineColor{black} %% color
16
+ \SetStateFillStatus{solid} %% aspect
17
+ \SetStateFillColor{white} %% color
18
+ \FixDimState{solid}{gray}{1}{gray}{white} %% LineStyle,LineColor,LineCoef (*\StateLineWidth),LabelColor,FillColor
19
+ \FixStateLineDouble{0.6}{0.4} %% Double style: \StateLineDblCoef, \StateLineDblSep, coeffs applied to \StateLineWidth
20
+ %%%%%%%%%%%%%%
21
+ % Edge aspect
22
+ %%%%%%%%%%%%%%
23
+ \SetEdgeLabelColor{black} %% color
24
+ \SetEdgeLabelScale{1.7} %% float
25
+ \SetEdgeLineStyle{solid} %% aspect
26
+ \SetEdgeLineWidth{1pt} %% length
27
+ \SetEdgeLineColor{black} %% color
28
+ \SetArcAngle{15} %% int (degree)
29
+ \SetLArcAngle{30} %% int (degree)
30
+ \SetArcCurvature{0.8} %% float
31
+ \SetEdgeOffset{0pt} %% length
32
+ \SetArcOffset{1pt} %% length
33
+ \SetLoopOffset{0pt} %% length
34
+ \renewcommand{\ForthBackEdgeOffset}{5} %% float : coef*\EdgeLineWidth -> offset
35
+ \FixDimEdge{solid}{1.2}{gray}{gray} %% LineStyle,LineCoef,LineColor,LabelColor
36
+ \FixEdgeBorder{2}{white} %% int,color : coef*\EdgeLineWidth -> width of border
37
+ \FixEdgeLineDouble{0.5}{0.6} %% float : coefs*\EdgeLineWidth -> (width of lines, distance)
38
+ %%%%%%%%%%%%%%
39
+ % ZZ aspect
40
+ %%%%%%%%%%%%%%
41
+ \setlength{\ZZSize}{.9cm} % length : apparent diameter
42
+ \renewcommand{\ZZShape}{0.5} % coef: opening of the ZZ
43
+ \SetZZLineWidth{1.7} % float
44
+ \renewcommand{\TransLabelZZCoef}{0.6} % float : coef*\ZZSize -> distance added for labels
45
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46
+ %%% Scales --- Default settings
47
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48
+ \renewcommand{\LargeScale}{0.85} %float : argument of a \scalebox
49
+ \renewcommand{\MediumScale}{0.6} %float
50
+ \renewcommand{\SmallScale}{0.5} %float
51
+ \renewcommand{\TinyScale}{0.42} %float
52
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53
+ %%% State parameters --- Default settings
54
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55
+ \setlength{\MediumStateDiameter}{.9cm} %length
56
+ \setlength{\SmallStateDiameter}{.6cm} %length
57
+ \setlength{\LargeStateDiameter}{1.2cm} %length
58
+ \setlength{\VerySmallStateDiameter}{.3cm} %length
59
+ \renewcommand{\VSStateLineCoef}{.6} %float : coef *\StateLineWidth
60
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61
+ \renewcommand{\ArrowOnMediumState}{1.5} %float : coef *\StateDiameter for size of initial and final arrows
62
+ \renewcommand{\ArrowOnSmallState}{1.7} %float
63
+ \renewcommand{\ArrowOnLargeState}{1.3} %float
64
+ \renewcommand{\ArrowOnVerySmallState}{5} %float
65
+ \renewcommand{\LoopOnMediumState}{7} %float : curvature
66
+ \renewcommand{\LoopOnSmallState}{9.6} %float
67
+ \renewcommand{\LoopOnLargeState}{5.8} %float
68
+ \renewcommand{\LoopOnVariableState}{5.1} %float
69
+ \renewcommand{\CLoopOnMediumState}{8} %float
70
+ \renewcommand{\CLoopOnSmallState}{12} %float
71
+ \renewcommand{\CLoopOnLargeState}{6} %float
72
+ \renewcommand{\CLoopOnVariableState}{5.2} %float
73
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74
+ %%% Edge parameters --- Default settings
75
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76
+ \renewcommand{\EdgeLabelPosit}{.45} %per cent (use \Fix..LabelPosit with values in [10;90])
77
+ \renewcommand{\EdgeLabelRevPosit}{.55}
78
+ \renewcommand{\ArcLabelPosit}{.40}
79
+ \renewcommand{\ArcLabelRevPosit}{.60}
80
+ \renewcommand{\LArcLabelPosit}{.40}
81
+ \renewcommand{\LArcLabelRevPosit}{.60}
82
+ \renewcommand{\LoopLabelPosit}{.25}
83
+ \renewcommand{\LoopLabelRevPosit}{.75}
84
+ \renewcommand{\CLoopLabelPosit}{.25}
85
+ \renewcommand{\CLoopLabelRevPosit}{.75}
86
+ \renewcommand{\InitStateLabelPosit}{.10}
87
+ \renewcommand{\InitStateLabelRevPosit}{.90}
88
+ \renewcommand{\FinalStateLabelPosit}{.90}
89
+ \renewcommand{\FinalStateLabelRevPosit}{.10}
90
+ \SetEdgeArrowWidth{5pt} %length of the edge arrow
91
+ \SetEdgeArrowLengthCoef{1.4} %float : coef*\EdgeArrowSizeDim width of EA
92
+ \setlength{\EdgeDblArrowWidth}{5.5pt} %length : size of EA for double transitions
93
+ \renewcommand{\EdgeDblArrowLengthCoef}{1.7} %int
94
+ \SetEdgeArrowInsetCoef{0.1} %float : coef*\EdgeArrowSizeDim
95
+ \SetEdgeArrowStyle{->} %style (other styles : <-, |-|, -|,...)
96
+ \renewcommand{\EdgeRevArrowStyle}{<-} %style for reverse transitions
97
+ \renewcommand{\StateDimen}{outer} %side of the boundary of states that corresponds to the diameter
98
+ \renewcommand{\StateDblDimen}{middle} %idem for states with double line (values: outer, middle or inner)
99
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
100
+ %%% Initialization
101
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
102
+ \SetVCDirectory{} %default dir=current dir
103
+ \HideFrame
104
+ \HideGrid
105
+ \MediumPicture
106
+ \HideName
107
+ \RigidLabel
108
+ \FullState %% PlainState
109
+ \MediumState
@@ -0,0 +1,946 @@
1
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
+ %
3
+ % Vaucanson_v4.tex
4
+ %
5
+ % Automata drawer based on Pstricks
6
+ %
7
+ % V 0.2 - 03/05/09
8
+ % modification of StateVar
9
+ % Chg*LabelScale is relative w.r.t Set*LabelScale
10
+ % Chg Vaucanson to Vaucanson-G
11
+ % V 0.3 - 03/09/10
12
+ % VCPref-main is no more required to initialize VC-G
13
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15
+ %%% Commands for geometric constructions
16
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
17
+ %%% constants
18
+ \newcommand{\SQRTwo}{0.717}
19
+ \newcommand{\SQRThree}{1.732}
20
+ \newcommand{\GoldMean}{0.618}
21
+ \newcommand{\GoldMeanI}{1.618}
22
+ \newcommand{\SQRGoldMeanI}{1.272}
23
+ \newcommand{\Vaucanson}{\textsc{V$\overline{\text{au}}$C%
24
+ \raisebox{.3ex}{$\underline{\text{an}}$}S$\overline{\text{on}}$-G}\xspace}
25
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26
+ %%%%% Edge label drawing macros
27
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
28
+ %%% Separator in compound labels (eg \IOL{input}{output})
29
+ \newcommand{\IOL}[2]{#1\!\mid\! #2}
30
+ %%% Stacked labels
31
+ \newcommand{\StackTwoLabels}[2]{%
32
+ \renewcommand{\arraystretch}{0.75}%
33
+ \begin{array}{c}#1\\ #2 \end{array}%
34
+ \renewcommand{\arraystretch}{1.333}}
35
+ \newcommand{\StackThreeLabels}[3]{%
36
+ \renewcommand{\arraystretch}{0.75}%
37
+ \begin{array}{c}#1\\ #2 \\ #3 \end{array}%
38
+ \renewcommand{\arraystretch}{1.333}}
39
+ %%% Stacked labels with +
40
+ \newcommand{\StackTwoLabelsP}[2]{%
41
+ \renewcommand{\arraystretch}{0.75}%
42
+ \begin{array}{c}#1\\ + \\ #2 \end{array}%
43
+ \renewcommand{\arraystretch}{1.333}}
44
+ \newcommand{\StackThreeLabelsP}[3]{%
45
+ \renewcommand{\arraystretch}{0.75}%
46
+ \begin{array}{c}#1\\ + \\ #2 \\ + \\ #3 \end{array}%
47
+ \renewcommand{\arraystretch}{1.333}}
48
+ %%% Lined up labels (with +)
49
+ \newcommand{\LineTwoLabelsP}[2]{#1 + #2}
50
+ \newcommand{\LineThreeLabelsP}[3]{#1 + #2 + #3}
51
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52
+ %%% Scales --- Default settings
53
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54
+ \newcommand{\LargeScale}{0.85}
55
+ \newcommand{\MediumScale}{0.6}
56
+ \newcommand{\SmallScale}{0.5}
57
+ \newcommand{\TinyScale}{0.42}
58
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59
+ %%% State parameters --- Default settings
60
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61
+ %%% Size = StateDiameter
62
+ %%% The preset sizes are given in cm, and not in "psunits".
63
+ %%% This allows to use different scales for the whole figure
64
+ %%% and for the "drawing grid".
65
+ \newlength{\MediumStateDiameter}
66
+ \newlength{\SmallStateDiameter}
67
+ \newlength{\LargeStateDiameter}
68
+ \newlength{\VerySmallStateDiameter}
69
+ \setlength{\MediumStateDiameter}{.9cm}
70
+ \setlength{\SmallStateDiameter}{.6cm}
71
+ \setlength{\LargeStateDiameter}{1.2cm}
72
+ \setlength{\VerySmallStateDiameter}{.3cm}
73
+ %%% Border line = StateLine
74
+ \newlength{\StateLineWidth} % width
75
+ \setlength{\StateLineWidth}{1.8pt}
76
+ \newcommand{\StateLineStyle}{solid} % style
77
+ \newcommand{\StateLineColor}{black}
78
+ \newif\ifStateLineDbl \StateLineDblfalse
79
+ \newcommand{\StateLineDblCoef}{0.6}
80
+ \newcommand{\StateLineDblSep}{0.4}
81
+ \newcommand{\VSStateLineCoef}{.6} % coef. for very small state
82
+ %%% State background and label
83
+ \newcommand{\StateFillStatus}{solid}
84
+ \newcommand{\StateFillColor}{white}
85
+ \newcommand{\StateLabelColor}{black}
86
+ \newcommand{\StateLabelScale}{1.2}
87
+ \newcommand{\SmallStateFillStatus}{solid} %
88
+ \newcommand{\SmallStateFillColor}{white} %
89
+ % As they have usually no labels it useful
90
+ % to have a coloring facility for the "SmallState"
91
+ %%% Dimmed states (e.g. for non accessible states)
92
+ \newcommand{\DimStateLineStyle}{solid}
93
+ \newcommand{\DimStateLineCoef}{1} %
94
+ \newcommand{\DimStateLineColor}{gray}
95
+ \newcommand{\DimStateLabelColor}{gray}
96
+ \newcommand{\DimStateFillColor}{white}
97
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
98
+ %%% Edge drawing parameters --- Default settings
99
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
100
+ % line
101
+ \newlength{\EdgeLineWidth}
102
+ \setlength{\EdgeLineWidth}{1pt}
103
+ \newcommand{\EdgeLineStyle}{solid}
104
+ \newif\ifEdgeLineDbl \EdgeLineDblfalse
105
+ %\newcommand{\EdgeLineDblStatus}{false}
106
+ \newcommand{\EdgeLineDblCoef}{0.5}
107
+ \newcommand{\EdgeLineDblSep}{0.6}
108
+ \newcommand{\EdgeLineColor}{black}
109
+ % arrow
110
+ \newlength{\EdgeArrowWidth}\setlength{\EdgeArrowWidth}{5pt}
111
+ \newlength{\EdgeDblArrowWidth}\setlength{\EdgeDblArrowWidth}{5.5pt}
112
+ \newcommand{\EdgeArrowLengthCoef}{1.4}
113
+ \newcommand{\EdgeDblArrowLengthCoef}{1.7}
114
+ \newcommand{\EdgeArrowInset}{0.1}
115
+ \newcommand{\EdgeArrowStyle}{->}
116
+ \newcommand{\EdgeRevArrowStyle}{<-}
117
+ % border
118
+ \newcommand{\EdgeLineBorderCoef}{2}
119
+ \newcommand{\EdgeLineBorderColor}{white}
120
+ % label
121
+ \newcommand{\EdgeLabelColor}{black}
122
+ \newcommand{\EdgeLabelScale}{0.8}
123
+ %%% Dimmed edges
124
+ \newcommand{\DimEdgeLineCoef}{1.2}
125
+ \newcommand{\DimEdgeLineStyle}{solid}
126
+ \newcommand{\DimEdgeLineColor}{gray}
127
+ \newcommand{\DimEdgeLabelColor}{gray}
128
+ %%% Zigzag edges parameter
129
+ \newlength{\ZZSize}
130
+ \setlength{\ZZSize}{.9cm}%\MediumStateDiameter
131
+ \newcommand{\ZZShape}{0.5}
132
+ \newcommand{\ZZLineWidth}{1.7}% coefficient multiplicateur
133
+ \newcommand{\TransLabelZZCoef}{0.6}% coefficient multiplicateur
134
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
135
+ %%% Edge geometric parameters --- Default settings
136
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
137
+ % Edge
138
+ \newlength{\EdgeOffset}
139
+ \setlength{\EdgeOffset}{0pt}
140
+ \newcommand{\ForthBackEdgeOffset}{5}% coef
141
+ % Arc parameters
142
+ \newcommand{\VaucArcAngle}{15}
143
+ \newcommand{\VaucArcCurvature}{0.8}
144
+ \newlength{\VaucArcOffset}
145
+ \setlength{\VaucArcOffset}{1pt}
146
+ % Large Arc parameters
147
+ \newcommand{\VaucLArcAngle}{30}
148
+ \newcommand{\VaucLArcCurvature}{0.8}
149
+ \newlength{\LoopOffset}\setlength{\LoopOffset}{0pt}
150
+ \newlength{\LoopVarOffset}\setlength{\LoopVarOffset}{.7pt}
151
+ \newcommand{\LoopAngle}{30}
152
+ \newcommand{\CLoopAngle}{22}
153
+ \newcommand{\LoopVarAngle}{28}
154
+ % Size of loops (depending on the size of the state)
155
+ \newcommand{\LoopOnMediumState}{7}
156
+ \newcommand{\LoopOnSmallState}{9.6}
157
+ \newcommand{\LoopOnLargeState}{5.8}
158
+ \newcommand{\LoopOnVariableState}{5.1}
159
+ \newcommand{\LoopOnVerySmallState}{15}
160
+ \newcommand{\CLoopOnMediumState}{8}
161
+ \newcommand{\CLoopOnSmallState}{12}
162
+ \newcommand{\CLoopOnLargeState}{6}
163
+ \newcommand{\CLoopOnVariableState}{5.2}
164
+ %\newcommand{\CLoopOnVerySmallState}{14}
165
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
166
+ %%%%% Edge label parameters --- Default settings
167
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
168
+ % label distance from transition
169
+ \newlength{\TransLabelSep}\setlength{\TransLabelSep}{3.5pt}
170
+ % label position on transitions
171
+ \newcommand{\EdgeLabelPosit}{.45}\newcommand{\EdgeLabelRevPosit}{.55}
172
+ \newcommand{\ArcLabelPosit}{.4}\newcommand{\ArcLabelRevPosit}{.6}
173
+ \newcommand{\LArcLabelPosit}{.4}\newcommand{\LArcLabelRevPosit}{.6}
174
+ \newcommand{\LoopLabelPosit}{.25}\newcommand{\LoopLabelRevPosit}{.75}
175
+ \newcommand{\CLoopLabelPosit}{.25}\newcommand{\CLoopLabelRevPosit}{.75}
176
+ % label position on initial-final arrow
177
+ \newcommand{\InitStateLabelPosit}{.1}\newcommand{\InitStateLabelRevPosit}{.9}
178
+ \newcommand{\FinalStateLabelPosit}{.9}\newcommand{\FinalStateLabelRevPosit}{.1}
179
+ %%% Size of initial and final arrow
180
+ % the size is relative to the diameter
181
+ % and the coefficient varies with the diameter
182
+ \newcommand{\ArrowOnStateCoef}{}
183
+ \newcommand{\ArrowOnMediumState}{1.5}
184
+ \newcommand{\ArrowOnSmallState}{1.7}
185
+ \newcommand{\ArrowOnLargeState}{1.3}
186
+ \newcommand{\ArrowOnVerySmallState}{5}
187
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
188
+ %%%%% Shift for aligned labels
189
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
190
+ \newlength{\VertShiftH} \settoheight{\VertShiftH}{$\{$}
191
+ \newlength{\VertShiftD} \settodepth{\VertShiftD}{$\{$}
192
+ \newlength{\VertShift}
193
+ \setlength{\VertShift}{.5\VertShiftD-.5\VertShiftH}
194
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
195
+ %%%%% flags
196
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
197
+ \newif\ifVCFrame
198
+ \newcommand{\HideFrame}{\VCFramefalse}
199
+ \newcommand{\ShowFrame}{\VCFrametrue}
200
+ \newif\ifVCGrid
201
+ \newcommand{\HideGrid}{\VCGridfalse}
202
+ \newcommand{\ShowGrid}{\VCGridtrue}
203
+ \newif\ifVCRigidLabel
204
+ \newcommand{\RigidLabel}{\VCRigidLabeltrue}
205
+ \newcommand{\SwivelLabel}{\VCRigidLabelfalse}
206
+ \newif\ifVCStateLabelBaseLine
207
+ \newcommand{\AlignedLabel}{\VCStateLabelBaseLinetrue}
208
+ \newcommand{\FloatingLabel}{\VCStateLabelBaseLinefalse}
209
+ \HideFrame
210
+ \HideGrid
211
+ \RigidLabel
212
+ \FloatingLabel
213
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
214
+ %%% style for the frame around the picture
215
+ \psset{unit=1cm}
216
+ \newpsstyle{VaucFrameStyle}{arrows=-,framesep=0pt,%
217
+ linewidth=0.6pt,linecolor=black,%
218
+ linestyle=solid,%
219
+ doubleline=false,%
220
+ fillcolor=white,fillstyle=none,%
221
+ cornersize=relative,framearc=0}
222
+ \newcommand{\FrameStyle}{\psset{style=VaucFrameStyle}}
223
+ \newpsstyle{VaucGridStyle}{%
224
+ gridwidth=0.6pt,griddots=10,subgriddiv=1,%
225
+ gridlabels=7pt}
226
+ \newcommand{\GridStyle}{\psset{style=VaucGridStyle}}
227
+ % figure, vertically centered by default
228
+ % draw frame according to VCFrame flag
229
+ % Set the shift for aligned label w.r.t the current size of characters
230
+ \newenvironment{VCPicture}[2][.5]%
231
+ {\settoheight{\VertShiftH}{$\{$}%
232
+ \settodepth{\VertShiftD}{$\{$}%
233
+ \setlength{\VertShift}{.5\VertShiftD-.5\VertShiftH}%
234
+ \begin{pspicture}[#1]#2%
235
+ \ifVCFrame \FrameStyle \psframe#2\fi%
236
+ \ifVCGrid \FrameStyle\GridStyle \psgrid#2\fi}%
237
+ {\RstState\RstEdge%
238
+ \end{pspicture}}
239
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
240
+ %%% Scaling matters
241
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
242
+ %%% The "sizes" (for states) and the "line widths" are given
243
+ %%% as "lengthes" in a fixed unit (cm or pt), whereas the positions
244
+ %%% are supposed to be given in "psunits".
245
+ %%% This allows to use different scaling parameters
246
+ %%% for the whole figure and for the "drawing grid".
247
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
248
+ %%% Scaling commands
249
+ \newcommand{\VCScale}{0.6}% Global scale parameter
250
+ \newcommand{\VCGridScale}{1}% Global scale parameter
251
+ %
252
+ \newcommand{\FixVCScale}[1]{\renewcommand{\VCScale}{#1}}% v4 pour
253
+ % % cause de syntaxe
254
+ \newcommand{\LargePicture}{\FixVCScale{\LargeScale}}
255
+ \newcommand{\MediumPicture}{\FixVCScale{\MediumScale}}
256
+ \newcommand{\SmallPicture}{\FixVCScale{\SmallScale}}
257
+ \newcommand{\TinyPicture}{\FixVCScale{\TinyScale}}
258
+ %%% Grid scale commands
259
+ % \newcommand{\VCGridScale}{}% Grid scale parameter
260
+ %
261
+ \newcommand{\FixVCGridScale}[1]{\renewcommand{\VCGridScale}{#1}}% v4 pour
262
+ % "grid unit"
263
+ %%%%% Typical figure would look like
264
+ % \scalebox{\VCScale}{%
265
+ % \begin{VCPicture}{(x0,y0)(x1,y1)}
266
+ % % figure description
267
+ % \end{VCPicture}%
268
+ % }
269
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
270
+ %%%%% Using a special directory for the figure
271
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
272
+ \newcommand{\VCDirectory}{}
273
+ \newcommand{\SetVCDirectory}[1]{\renewcommand{\VCDirectory}{#1}}
274
+ % flag for printing the name of the figure file
275
+ \newif\ifVCName
276
+ \newcommand{\HideName}{\VCNamefalse}
277
+ \newcommand{\ShowName}{\VCNametrue}
278
+ \newcommand{\VCDraw}[2][\VCGridScale]{%
279
+ \psset{unit=#1cm}%
280
+ \ifVCName\makebox[0pt][r]{\fbox{{\scriptsize #2}}}\fi%
281
+ \scalebox{\VCScale}{#2}%
282
+ \psset{unit=1cm}}
283
+ \newcommand{\VCCall}[2][\VCGridScale]{%
284
+ \psset{unit=#1cm}%
285
+ \ifVCName\makebox[0pt][r]{\fbox{{\scriptsize #2}}}\fi%
286
+ \scalebox{\VCScale}{\input{\VCDirectory #2}}%
287
+ \psset{unit=1cm}}
288
+ %%% commands
289
+ \newcommand{\VCPut}[3][0]{\rput{#1}#2{#3}}%
290
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
291
+ %%% State internal parameters --- Initial settings
292
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
293
+ \newlength{\StateLineWid}
294
+ \setlength{\StateLineWid}{\StateLineWidth}
295
+ \newcommand{\StateLineSty}{\StateLineStyle}
296
+ \newcommand{\StateLineCol}{\StateLineColor}
297
+ %\newcommand{\StateLineDblSta}{\StateLineDblStatus}
298
+ \newcommand{\StateLineDblWid}{\StateLineDblWidth}
299
+ \newcommand{\StateLineDblSp}{\StateLineDblSep}
300
+ \newcommand{\StateFillCol}{\StateFillColor}
301
+ \newcommand{\StateFillSta}{\StateFillStatus}
302
+ \newcommand{\StateLabelSca}{1}
303
+ \newcommand{\StateLabelCol}{\StateLabelColor}
304
+ \newcommand{\StateDimen}{outer}
305
+ \newcommand{\StateDblDimen}{middle}
306
+ %%% Initial-final quality
307
+ \newcommand{\VCIFflag}{2}\newcommand{\VCIFflagtemp}{2}
308
+ \newcommand{\PlainState}%
309
+ {\renewcommand{\VCIFflag}{0}\renewcommand{\VCIFflagtemp}{0}}
310
+ \newcommand{\FullState}%
311
+ {\renewcommand{\VCIFflag}{2}\renewcommand{\VCIFflagtemp}{2}}
312
+ \newcommand{\IFState}{\renewcommand{\VCIFflag}{1}}
313
+ \newcommand{\IFXState}{\renewcommand{\VCIFflag}{2}}
314
+ \newcommand{\RstVCIF}{\renewcommand{\VCIFflag}{\VCIFflagtemp}}
315
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
316
+ %%%%% State drawing style
317
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
318
+ %%% flag for hiding -- showing states (used for overlays in slides)
319
+ % the trick is to have two different styles and instead of
320
+ % saving\restoring parameters
321
+ \newif\ifVCShowState
322
+ \newcommand{\HideState}{\VCShowStatefalse}
323
+ \newcommand{\ShowState}{\VCShowStatetrue}
324
+ \ShowState % initialisation
325
+ % the only difference between the two styles is the linestyle
326
+ \newpsstyle{VaucStateStyle}{framesep=0pt,%
327
+ linewidth=\StateLineWid,linecolor=\StateLineCol,%
328
+ linestyle=\StateLineSty,doubleline=false,%
329
+ fillcolor=\StateFillCol,fillstyle=\StateFillSta,%
330
+ border=0pt,dimen=\StateDimen,%
331
+ cornersize=relative,framearc=1,framesep=0pt}
332
+ \newpsstyle{VaucStateDblStyle}{framesep=0pt,%
333
+ linewidth=\StateLineDblCoef\StateLineWid,linecolor=\StateLineCol,%
334
+ linestyle=\StateLineSty,doubleline=true,doublesep=\StateLineDblSep\StateLineWid,%
335
+ fillcolor=\StateFillCol,fillstyle=\StateFillSta,%
336
+ border=0pt,dimen=\StateDblDimen,%
337
+ cornersize=relative,framearc=1,framesep=0pt}
338
+ \newpsstyle{VaucHiddenStateStyle}{framesep=0pt,%
339
+ linewidth=\StateLineWid,linecolor=\StateLineCol,%
340
+ linestyle=none,%
341
+ fillcolor=\StateFillCol,fillstyle=none,%
342
+ border=0pt,dimen=outer,%
343
+ cornersize=relative,framearc=1,framesep=0pt}
344
+ \newcommand{\StateStyle}{%
345
+ \ifVCShowState%
346
+ \ifStateLineDbl\psset{style=VaucStateDblStyle}\else\psset{style=VaucStateStyle}\fi%
347
+ \else\psset{style=VaucHiddenStateStyle}\fi}
348
+ \newcommand{\VaucStateRBLabel}[1]{%
349
+ \textcolor{\StateLabelCol}{\scalebox{\StateLabelSca}{\scalebox{\StateLabelScale}{\rput[B]{0}(0,\VertShift){$ #1 $}}}}}%
350
+ \newcommand{\VaucStateLabel}[1]%
351
+ {\ifVCShowState%
352
+ \ifVCRigidLabel%
353
+ \ifVCStateLabelBaseLine%
354
+ \textcolor{\StateLabelCol}{\scalebox{\StateLabelSca}{\scalebox{\StateLabelScale}{\rput[B]{*0}(0,\VertShift){$ #1 $}}}}%
355
+ \else
356
+ \textcolor{\StateLabelCol}{\scalebox{\StateLabelSca}{\scalebox{\StateLabelScale}{\rput{*0}(0,0){$ #1 $}}}}%
357
+ \fi
358
+ \else
359
+ \textcolor{\StateLabelCol}{\scalebox{\StateLabelSca}{\scalebox{\StateLabelScale}{$ #1 $}}}%
360
+ \fi
361
+ \else%
362
+ \textcolor{white}{\scalebox{\StateLabelSca}{\scalebox{\StateLabelScale}{$ #1 $}}}%
363
+ \fi}
364
+ \newcommand{\VCPutStateLabel}[2]%
365
+ {\rput#1{\scalebox{\StateLabelSca}{$ #2 $}}}%
366
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
367
+ %%%%% State parameter changing and setting macros
368
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
369
+ %%% line style
370
+ \newcommand{\ChgStateLineStyle}[1]{\renewcommand{\StateLineSty}{#1}}
371
+ \newcommand{\RstStateLineStyle}{\ChgStateLineStyle{\StateLineStyle}}
372
+ \newcommand{\SetStateLineStyle}[1]%
373
+ {\renewcommand{\StateLineStyle}{#1}\RstStateLineStyle}%
374
+ %%% doubleline status
375
+ \newcommand{\StateLineDouble}{\StateLineDbltrue}
376
+ \newcommand{\StateLineSimple}{\StateLineDblfalse}
377
+ %%% line width
378
+ \newcommand{\ChgStateLineWidth}[1]{\setlength{\StateLineWid}{#1\StateLineWidth}}%
379
+ \newcommand{\RstStateLineWidth}{\ChgStateLineWidth{1}}%
380
+ \newcommand{\SetStateLineWidth}[1]% ATTN the parameter is a length
381
+ {\setlength{\StateLineWidth}{#1}\RstStateLineWidth}
382
+ %%% line color
383
+ \newcommand{\ChgStateLineColor}[1]{\renewcommand{\StateLineCol}{#1}}
384
+ \newcommand{\RstStateLineColor}{\ChgStateLineColor{\StateLineColor}}
385
+ \newcommand{\SetStateLineColor}[1]%
386
+ {\renewcommand{\StateLineColor}{#1}\RstStateLineColor}
387
+ %%% background fill status
388
+ \newcommand{\ChgStateFillStatus}[1]{\renewcommand{\StateFillSta}{#1}}
389
+ \newcommand{\RstStateFillStatus}{\ChgStateFillStatus{\StateFillStatus}}
390
+ \newcommand{\SetStateFillStatus}[1]%
391
+ {\renewcommand{\StateFillStatus}{#1}\RstStateFillStatus}
392
+ %%% backgroud color
393
+ \newcommand{\ChgStateFillColor}[1]{\renewcommand{\StateFillCol}{#1}}
394
+ \newcommand{\RstStateFillColor}{\ChgStateFillColor{\StateFillColor}}
395
+ \newcommand{\SetStateFillColor}[1]%
396
+ {\renewcommand{\StateFillColor}{#1}\RstStateFillColor}%
397
+ %%% label color
398
+ \newcommand{\ChgStateLabelColor}[1]{\renewcommand{\StateLabelCol}{#1}}
399
+ \newcommand{\RstStateLabelColor}{\ChgStateLabelColor{\StateLabelColor}}
400
+ \newcommand{\SetStateLabelColor}[1]%
401
+ {\renewcommand{\StateLabelCol}{#1}\RstStateLabelColor}
402
+ %%% label scale
403
+ \newcommand{\ChgStateLabelScale}[1]{\renewcommand{\StateLabelSca}{#1}}
404
+ \newcommand{\RstStateLabelScale}{\ChgStateLabelScale{1}}
405
+ \newcommand{\SetStateLabelScale}[1]%
406
+ {\renewcommand{\StateLabelScale}{#1}\RstStateLabelScale}
407
+ \newcommand{\FixStateLineDouble}[2]{%
408
+ \renewcommand{\StateLineDblCoef}{#1}%
409
+ \renewcommand{\StateLineDblSep}{#2}}
410
+ \newcommand{\FixDimState}[5]{%
411
+ \renewcommand{\DimStateLineStyle}{#1}%
412
+ \renewcommand{\DimStateLineCoef}{#3}%
413
+ \renewcommand{\DimStateLineColor}{#2}%
414
+ \renewcommand{\DimStateLabelColor}{#4}%
415
+ \renewcommand{\DimStateFillColor}{#5}}%
416
+ %%% restoring state parameters
417
+ \newcommand{\RstState}{%
418
+ \RstStateLineStyle\RstStateLineWidth%
419
+ \RstStateLineColor%
420
+ \RstStateFillStatus\RstStateFillColor%
421
+ \RstStateLabelColor\RstStateLabelScale}%
422
+ %%% establishing the dimmed style
423
+ \newcommand{\DimState}{%
424
+ \ChgStateLineStyle{\DimStateLineStyle}%
425
+ \ChgStateLineWidth{\DimStateLineCoef}%
426
+ \ChgStateLineColor{\DimStateLineColor}%
427
+ \ChgStateFillColor{\DimStateFillColor}%
428
+ \ChgStateLabelColor{\DimStateLabelColor}}%
429
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
430
+ %%%%% State drawing
431
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
432
+ % preparation
433
+ \newlength{\StateDiam}
434
+ \newlength{\VaucAOS}\newlength{\VaucAOSdiag}
435
+ %%% A flag to remember the current size of state
436
+ \newcommand{\StateSizeFlag}{}
437
+ %
438
+ \newcommand{\SetAOS}{%
439
+ \setlength{\VaucAOS}{\ArrowOnStateCoef\StateDiam}%
440
+ \setlength{\VaucAOSdiag}{\SQRTwo\VaucAOS}}
441
+ %% parameter for variable width states
442
+ \newlength{\VariableStateIntDiam}
443
+ \newlength{\VariableStateWidth}
444
+ \newlength{\VariableStateITPos}
445
+ \newcommand{\SetStateIntDiam}{%
446
+ \setlength{\VariableStateIntDiam}{\StateDiam}%
447
+ \addtolength{\VariableStateIntDiam}{-2\StateLineWid}%
448
+ }%
449
+ % Loop parameters
450
+ \newcommand{\LoopSize}{}\newcommand{\LoopSi}{}
451
+ \newcommand{\LoopVarSize}{}\newcommand{\LoopVarSi}{}
452
+ \newcommand{\CLoopSize}{}\newcommand{\CLoopSi}{}
453
+ %
454
+ \newcommand{\ChgLoopSize}[1]{\renewcommand{\LoopSi}{#1}}
455
+ \newcommand{\RstLoopSize}{\ChgLoopSize{\LoopSize}}
456
+ \newcommand{\SetLoopSize}[1]%
457
+ {\renewcommand{\LoopSize}{#1}\RstLoopSize}
458
+ %
459
+ \newcommand{\ChgCLoopSize}[1]{\renewcommand{\CLoopSi}{#1}}
460
+ \newcommand{\RstCLoopSize}{\ChgCLoopSize{\CLoopSize}}
461
+ \newcommand{\SetCLoopSize}[1]%
462
+ {\renewcommand{\CLoopSize}{#1}\RstCLoopSize}
463
+ %
464
+ \newcommand{\ChgLoopVarSize}[1]{\renewcommand{\LoopVarSi}{#1}}
465
+ \newcommand{\RstLoopVarSize}{\ChgLoopVarSize{\LoopVarSize}}
466
+ \newcommand{\SetLoopVarSize}[1]%
467
+ {\renewcommand{\LoopVarSize}{#1}\RstLoopVarSize}
468
+ %
469
+ %%% setting state diameter -- internal command
470
+ \newcommand{\SetStateDiam}[4]{%
471
+ \setlength{\StateDiam}{#1}%
472
+ \renewcommand{\ArrowOnStateCoef}{#2}%
473
+ \SetLoopSize{#3}%
474
+ \SetLoopVarSize{#3}%
475
+ \SetCLoopSize{#4}%
476
+ \SetAOS\SetStateIntDiam}
477
+ %%% setting state diameter -- external command
478
+ \newcommand{\FixStateDiameter}[1]% v4 pour cause de syntaxe
479
+ {\setlength{\StateDiam}{#1}\SetStateIntDiam \SetAOS}
480
+ %%%
481
+ \newcommand{\MediumState}%
482
+ {\SetStateDiam{\MediumStateDiameter}{\ArrowOnMediumState}%
483
+ {\LoopOnMediumState}{\CLoopOnMediumState}%
484
+ \renewcommand{\StateSizeFlag}{0}}
485
+ \newcommand{\SmallState}%
486
+ {\SetStateDiam{\SmallStateDiameter}{\ArrowOnSmallState}%
487
+ {\LoopOnSmallState}{\CLoopOnSmallState}%
488
+ \renewcommand{\StateSizeFlag}{1}}
489
+ \newcommand{\LargeState}%
490
+ {\SetStateDiam{\LargeStateDiameter}{\ArrowOnLargeState}%
491
+ {\LoopOnLargeState}{\CLoopOnLargeState}%
492
+ \renewcommand{\StateSizeFlag}{2}}
493
+ %
494
+ \newcommand{\RstStateSize}%
495
+ {\ifthenelse{\equal{\StateSizeFlag}{0}}%
496
+ {\MediumState}%
497
+ {\ifthenelse{\equal{\StateSizeFlag}{1}}%
498
+ {\SmallState}{\LargeState}}}%
499
+ %%% Initialization
500
+ \MediumState
501
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
502
+ \newcommand{\VaucState}[3][{}]%
503
+ {\rput#2{%
504
+ \Cnode[radius=.5\StateDiam](0,0){#3}%
505
+ \ifVCShowState%
506
+ \nput[labelsep=-.5\StateDiam]{0}{#3}%
507
+ {\makebox[0pt]{\VaucStateLabel{#1}}}%
508
+ \fi
509
+ \ifthenelse{\equal{\VCIFflag}{0}}{}{%
510
+ \pnode(-\VaucAOS,0){#3w}\pnode(\VaucAOS,0){#3e}%
511
+ \pnode(0,\VaucAOS){#3n}\pnode(0,-\VaucAOS){#3s}%
512
+ \ifthenelse{\equal{\VCIFflag}{1}}{}{%
513
+ \pnode(-\VaucAOSdiag,\VaucAOSdiag){#3nw}%
514
+ \pnode(\VaucAOSdiag,\VaucAOSdiag){#3ne}%
515
+ \pnode(-\VaucAOSdiag,-\VaucAOSdiag){#3sw}%
516
+ \pnode(\VaucAOSdiag,-\VaucAOSdiag){#3se}%
517
+ }%
518
+ }%
519
+ }%
520
+ }
521
+ %
522
+ \newcommand{\State}[3][{}]{\StateStyle\VaucState[#1]{#2}{#3}}
523
+ %
524
+ \newcommand{\FinalState}[3][{}]%
525
+ {\psset{style=VaucStateDblStyle}\VaucState[#1]{#2}{#3}}
526
+ %%% ecological commands
527
+ \newcommand{\StateIF}[3][{}]{\IFState\State[#1]{#2}{#3}\RstVCIF}%
528
+ \newcommand{\StateIFX}[3][{}]{\IFXState\State[#1]{#2}{#3}\RstVCIF}%
529
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
530
+ %%% Very Small State
531
+ \newcommand{\VSState}[2]%
532
+ {\renewcommand{\ArrowOnStateCoef}{\ArrowOnVerySmallState}%
533
+ \FixStateDiameter{\VerySmallStateDiameter}%
534
+ \ChgStateLineWidth{\VSStateLineCoef}%
535
+ \State{#1}{#2}%
536
+ \RstStateLineWidth\RstStateSize}% mod 020201
537
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
538
+ % white brace, of no width, used to place the label vertically
539
+ %\newlength{\BraceLength}
540
+ \newcommand{\WB}{%
541
+ \textcolor{white}{\{\!\!\!}}%
542
+ \newcommand{\HS}{}
543
+ \newlength{\ExtraSpace}
544
+ \setlength{\ExtraSpace}{1em}
545
+ %
546
+ \newcommand{\StateVar}[3][]%
547
+ {\StateStyle %
548
+ \settowidth{\VariableStateWidth}{\scalebox{\StateLabelSca}{\scalebox{\StateLabelScale}{$#1$}}}%
549
+ \addtolength{\VariableStateWidth}{\ExtraSpace}
550
+ \ifthenelse{\lengthtest{\VariableStateWidth < \VariableStateIntDiam}}%
551
+ {\setlength{\VariableStateWidth}{\VariableStateIntDiam}}{}%
552
+ \setlength{\VariableStateITPos}{\ArrowOnStateCoef\StateDiam}%
553
+ \addtolength{\VariableStateITPos}{0.5\VariableStateWidth}%
554
+ \addtolength{\VariableStateITPos}{-0.5\StateDiam}%
555
+ \rput#2{\pnode(\VariableStateITPos,0){#3e}%
556
+ \pnode(-\VariableStateITPos,0){#3w}%
557
+ \pnode(0,\ArrowOnStateCoef\StateDiam){#3n}%
558
+ \pnode(0,-\ArrowOnStateCoef\StateDiam){#3s}}%
559
+ \rput#2{\rnode{#3}{\psframebox{\protect\rule[-.5\VariableStateIntDiam]{0pt}{\VariableStateIntDiam}\protect\rule{\VariableStateWidth}{0pt}}}}
560
+ \rput#2{\VaucStateRBLabel{#1}}%
561
+ }%
562
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
563
+ \newcommand{\VarLoopOn}{\ChgLoopOffset{\LoopVarOff}%
564
+ \ChgLoopSize{\LoopVarSi}%
565
+ \ChgLoopAngle{\LoopVarAng}}
566
+ \newcommand{\VarLoopOff}{\RstLoopOffset \RstLoopSize \RstLoopAngle}
567
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
568
+ %%% Edge drawing parameters --- Initial settings
569
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
570
+ \newlength{\EdgeLineWid}
571
+ \setlength{\EdgeLineWid}{\EdgeLineWidth}
572
+ \newcommand{\EdgeLineSty}{\EdgeLineStyle}
573
+ \newcommand{\EdgeLineCol}{\EdgeLineColor}
574
+ % label
575
+ \newcommand{\EdgeLabelSca}{1}
576
+ \newcommand{\EdgeLabelCol}{\EdgeLabelColor}
577
+ % arrow
578
+ \newlength{\EdgeArrowSZDim}
579
+ \setlength{\EdgeArrowSZDim}{\EdgeArrowWidth}
580
+ \newcommand{\EdgeArrowSZNum}{\EdgeArrowLengthCoef}
581
+ \newcommand{\EdgeArrowSty}{\EdgeArrowStyle}
582
+ \newcommand{\EdgeArrowIns}{\EdgeArrowInset}
583
+ % border
584
+ \newlength{\EdgeLineBord}\setlength{\EdgeLineBord}{0pt}
585
+ %%% Zigzag edge parameter
586
+ \newlength{\ZZSiZ}
587
+ \setlength{\ZZSiZ}{\ZZSize}%
588
+ \newcommand{\ZZLineWid}{\ZZLineWidth}% coefficient multiplicateur
589
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
590
+ %%% Edge geometric parameters --- Initial settings
591
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
592
+ % Edge
593
+ \newlength{\EdgeOff}
594
+ \setlength{\EdgeOff}{\EdgeOffset}
595
+ % Arc
596
+ \newcommand{\VaucArcAng}{\VaucArcAngle}
597
+ \newcommand{\VaucLArcAng}{\VaucLArcAngle}
598
+ \newlength{\VaucArcOff}\setlength{\VaucArcOff}{\VaucArcOffset}
599
+ % Loop
600
+ \newcommand{\VaucArcCurv}{\VaucArcCurvature}
601
+ \newcommand{\VaucLArcCurv}{\VaucLArcCurvature}
602
+ \newcommand{\LoopAng}{\LoopAngle}
603
+ \newcommand{\CLoopAng}{\CLoopAngle}
604
+ \newcommand{\LoopVarAng}{\LoopVarAngle}
605
+ \newlength{\LoopOff}\setlength{\LoopOff}{\LoopOffset}
606
+ \newlength{\LoopVarOff}\setlength{\LoopVarOff}{\LoopVarOffset}
607
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
608
+ %%%%% Edge label parameters --- Initial settings
609
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
610
+ % label distance from transition
611
+ \newlength{\TransLabelSP}\setlength{\TransLabelSP}{\TransLabelSep}
612
+ % label position on transitions
613
+ \newcommand{\EdgeLabelPos}{\EdgeLabelPosit}
614
+ \newcommand{\ArcLabelPos}{\ArcLabelPosit}
615
+ \newcommand{\LArcLabelPos}{\LArcLabelPosit}
616
+ \newcommand{\LoopLabelPos}{\LoopLabelPosit}
617
+ \newcommand{\CLoopLabelPos}{\CLoopLabelPosit}
618
+ % label position on initial-final arrow
619
+ \newcommand{\InitStateLabelPos}{\InitStateLabelPosit}
620
+ \newcommand{\FinalStateLabelPos}{\FinalStateLabelPosit}
621
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
622
+ %%%%% Transition styles
623
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
624
+ \newpsstyle{VaucEdgeStyle}%
625
+ {arrows=\EdgeArrowSty,arrowsize=\EdgeArrowSZDim,arrowlength=\EdgeArrowSZNum,%
626
+ arrowinset=\EdgeArrowIns,%
627
+ linewidth=\EdgeLineWid,linecolor=\EdgeLineCol,linestyle=\EdgeLineSty,%
628
+ doubleline=false,%
629
+ bordercolor=\EdgeLineBorderColor,border=\EdgeLineBord,%
630
+ fillstyle=none,offset=\EdgeOff,%
631
+ labelsep=\TransLabelSP,nodesep=0pt}
632
+ \newpsstyle{VaucEdgeDblStyle}%
633
+ {arrows=\EdgeArrowSty,arrowsize=\EdgeArrowSZDim,arrowlength=\EdgeArrowSZNum,%
634
+ arrowinset=\EdgeArrowIns,%
635
+ linewidth=\EdgeLineDblCoef\EdgeLineWid,linecolor=\EdgeLineCol,linestyle=\EdgeLineSty,%
636
+ doubleline=true,doublesep=\EdgeLineDblSep\EdgeLineWid,%
637
+ bordercolor=\EdgeLineBorderColor,border=\EdgeLineBord,%
638
+ fillstyle=none,offset=\EdgeOff,%
639
+ labelsep=\TransLabelSP,nodesep=0pt}
640
+ %%% Arc
641
+ \newpsstyle{VaucArcR}{ncurv=\VaucArcCurv,arcangle=-\VaucArcAng,%
642
+ labelsep=\TransLabelSP,offset=-\VaucArcOff}
643
+ \newpsstyle{VaucArcL}{ncurv=\VaucArcCurv,arcangle=\VaucArcAng,%
644
+ labelsep=\TransLabelSP,offset=\VaucArcOff}
645
+ \newpsstyle{VaucLArcR}{ncurv=\VaucLArcCurv,arcangle=-\VaucLArcAng,%
646
+ labelsep=\TransLabelSP,offset=-\VaucArcOff}
647
+ \newpsstyle{VaucLArcL}{ncurv=\VaucLArcCurv,arcangle=\VaucLArcAng,%
648
+ labelsep=\TransLabelSP,offset=\VaucArcOff}
649
+ %%% zig-zag
650
+ \newpsstyle{VaucZigzagStyle}%
651
+ {linewidth=\ZZLineWid\EdgeLineWid,%
652
+ labelsep=\TransLabelSP,nodesep=0pt,%
653
+ coilwidth=1.2\ZZSiZ,coilarmA=0.1\ZZSiZ,%
654
+ coilarmB=0.3\ZZSiZ,coilheight=\ZZShape,linearc=1.6pt}
655
+ %%%
656
+ \newcommand{\EdgeStyle}{\ifEdgeLineDbl\psset{style=VaucEdgeDblStyle}%
657
+ \else\psset{style=VaucEdgeStyle}\fi}
658
+ \newcommand{\ZigzagStyle}%
659
+ {\addtolength{\TransLabelSP}{\TransLabelZZCoef\ZZSiZ}%
660
+ \psset{style=VaucZigzagStyle}%
661
+ \addtolength{\TransLabelSP}{-\TransLabelZZCoef\ZZSiZ}%
662
+ }
663
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
664
+ %%%%% Transition parameter changing and setting macros
665
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
666
+ %%% geometric parameters
667
+ \newcommand{\ChgEdgeOffset}[1]{\setlength{\EdgeOff}{#1}}
668
+ \newcommand{\RstEdgeOffset}{\ChgEdgeOffset{\EdgeOffset}}
669
+ \newcommand{\SetEdgeOffset}[1]%
670
+ {\setlength{\EdgeOffset}{#1}\RstEdgeOffset}
671
+ \newcommand{\ForthBackOffset}{%
672
+ \setlength{\EdgeOff}{\ForthBackEdgeOffset\EdgeLineWid}}
673
+ %
674
+ \newcommand{\ChgArcAngle}[1]{\renewcommand{\VaucArcAng}{#1}}
675
+ \newcommand{\RstArcAngle}{\ChgArcAngle{\VaucArcAngle}}
676
+ \newcommand{\SetArcAngle}[1]%
677
+ {\renewcommand{\VaucArcAngle}{#1}\RstArcAngle}
678
+ %
679
+ \newcommand{\ChgLArcAngle}[1]{\renewcommand{\VaucLArcAng}{#1}}
680
+ \newcommand{\RstLArcAngle}{\ChgLArcAngle{\VaucLArcAngle}}
681
+ \newcommand{\SetLArcAngle}[1]%
682
+ {\renewcommand{\VaucLArcAngle}{#1}\RstLArcAngle}
683
+ %
684
+ \newcommand{\ChgArcCurvature}[1]{\renewcommand{\VaucArcCurv}{#1}}
685
+ \newcommand{\RstArcCurvature}{\ChgArcCurvature{\VaucArcCurvature}}
686
+ \newcommand{\SetArcCurvature}[1]%
687
+ {\renewcommand{\VaucArcCurvature}{#1}\RstArcCurvature}
688
+ %
689
+ \newcommand{\ChgLArcCurvature}[1]{\renewcommand{\VaucLArcCurv}{#1}}
690
+ \newcommand{\RstLArcCurvature}{\ChgLArcCurvature{\VaucLArcCurvature}}
691
+ \newcommand{\SetLArcCurvature}[1]%
692
+ {\renewcommand{\VaucLArcCurvature}{#1}\RstLArcCurvature}
693
+ %
694
+ \newcommand{\ChgArcOffset}[1]{\setlength{\VaucArcOff}{#1}}
695
+ \newcommand{\RstArcOffset}{\setlength{\VaucArcOff}{\VaucArcOffset}}
696
+ \newcommand{\SetArcOffset}[1]%
697
+ {\renewcommand{\VaucArcOffset}{#1}\RstArcOffset}
698
+ %
699
+ \newcommand{\ChgLoopOffset}[1]{\setlength{\LoopOff}{#1}}
700
+ \newcommand{\RstLoopOffset}{\setlength{\LoopOff}{\LoopOffset}}
701
+ \newcommand{\SetLoopOffset}[1]%
702
+ {\renewcommand{\LoopOffset}{#1}\RstLoopOffset}
703
+ %
704
+ \newcommand{\ChgLoopAngle}[1]{\renewcommand{\LoopAng}{#1}}
705
+ \newcommand{\RstLoopAngle}{\ChgLoopAngle{\LoopAngle}}
706
+ \newcommand{\SetLoopAngle}[1]%
707
+ {\renewcommand{\LoopAngle}{#1}\RstLoopAngle}
708
+ %
709
+ \newcommand{\ChgCLoopAngle}[1]{\renewcommand{\CLoopAng}{#1}}
710
+ \newcommand{\RstCLoopAngle}{\ChgCLoopAngle{\CLoopAngle}}
711
+ \newcommand{\SetCLoopAngle}[1]%
712
+ {\renewcommand{\CLoopAngle}{#1}\RstCLoopAngle}
713
+ %
714
+ %%% drawing parameters
715
+ \newcommand{\ChgEdgeLineColor}[1]{\renewcommand{\EdgeLineCol}{#1}}
716
+ \newcommand{\RstEdgeLineColor}{\ChgEdgeLineColor{\EdgeLineColor}}
717
+ \newcommand{\SetEdgeLineColor}[1]%
718
+ {\renewcommand{\EdgeLineColor}{#1}\RstEdgeLineColor}
719
+ %
720
+ \newcommand{\ChgEdgeLineStyle}[1]{\renewcommand{\EdgeLineSty}{#1}}
721
+ \newcommand{\RstEdgeLineStyle}{\ChgEdgeLineStyle{\EdgeLineStyle}}
722
+ \newcommand{\SetEdgeLineStyle}[1]%
723
+ {\renewcommand{\EdgeLineStyle}{#1}\RstEdgeLineStyle}
724
+ %
725
+ \newcommand{\ChgEdgeLineWidth}[1]% coefficient !
726
+ {\setlength{\EdgeLineWid}{#1\EdgeLineWidth}}
727
+ \newcommand{\RstEdgeLineWidth}{\ChgEdgeLineWidth{1}}
728
+ \newcommand{\SetEdgeLineWidth}[1]% length !
729
+ {\setlength{\EdgeLineWidth}{#1}\RstEdgeLineWidth}
730
+ %
731
+ \newcommand{\EdgeLineDouble}%
732
+ {\EdgeLineDbltrue%
733
+ \ChgEdgeArrowWidth{\EdgeDblArrowWidth}
734
+ \ChgEdgeArrowLengthCoef{\EdgeDblArrowLengthCoef}}
735
+ \newcommand{\EdgeLineSimple}%
736
+ {\EdgeLineDblfalse \RstEdgeArrowWidth \RstEdgeArrowLengthCoef}
737
+ %
738
+ \newcommand{\ChgEdgeLabelColor}[1]{\renewcommand{\EdgeLabelCol}{#1}}
739
+ \newcommand{\RstEdgeLabelColor}{\ChgEdgeLabelColor{\EdgeLabelColor}}
740
+ \newcommand{\SetEdgeLabelColor}[1]%
741
+ {\renewcommand{\EdgeLabelColor}{#1}\RstEdgeLabelColor}
742
+ %
743
+ \newcommand{\ChgEdgeLabelScale}[1]{\renewcommand{\EdgeLabelSca}{#1}}
744
+ \newcommand{\RstEdgeLabelScale}{\ChgEdgeLabelScale{1}}
745
+ \newcommand{\SetEdgeLabelScale}[1]%
746
+ {\renewcommand{\EdgeLabelScale}{#1}\RstEdgeLabelScale}
747
+ \newcommand{\FixDimEdge}[4]{%
748
+ \renewcommand{\DimEdgeLineStyle}{#1}%
749
+ \renewcommand{\DimEdgeLineCoef}{#2}%
750
+ \renewcommand{\DimEdgeLineColor}{#3}%
751
+ \renewcommand{\DimEdgeLabelColor}{#4}}%
752
+ %
753
+ \newcommand{\ChgEdgeArrowStyle}[1]{\renewcommand{\EdgeArrowSty}{#1}}
754
+ \newcommand{\RstEdgeArrowStyle}{\ChgEdgeArrowStyle{\EdgeArrowStyle}}
755
+ \newcommand{\SetEdgeArrowStyle}[1]%
756
+ {\renewcommand{\EdgeArrowStyle}{#1}\RstEdgeArrowStyle}
757
+ %
758
+ \newcommand{\ChgEdgeArrowWidth}[1]%
759
+ {\setlength{\EdgeArrowSZDim}{#1}} % !! length !!
760
+ \newcommand{\RstEdgeArrowWidth}{\ChgEdgeArrowWidth{\EdgeArrowWidth}}
761
+ \newcommand{\SetEdgeArrowWidth}[1]%
762
+ {\setlength{\EdgeArrowWidth}{#1} \RstEdgeArrowWidth}
763
+ %
764
+ \newcommand{\ChgEdgeArrowLengthCoef}[1]{\renewcommand{\EdgeArrowSZNum}{#1}}
765
+ \newcommand{\RstEdgeArrowLengthCoef}{\ChgEdgeArrowLengthCoef{\EdgeArrowLengthCoef}}
766
+ \newcommand{\SetEdgeArrowLengthCoef}[1]%
767
+ {\renewcommand{\EdgeArrowLengthCoef}{#1}\RstEdgeArrowLengthCoef}
768
+ %
769
+ \newcommand{\ChgEdgeArrowInsetCoef}[1]{\renewcommand{\EdgeArrowIns}{#1}}
770
+ \newcommand{\RstEdgeArrowInsetCoef}{\ChgEdgeArrowInsetCoef{\EdgeArrowInset}}
771
+ \newcommand{\SetEdgeArrowInsetCoef}[1]%
772
+ {\renewcommand{\EdgeArrowInset}{#1}\RstEdgeArrowInsetCoef}
773
+ %
774
+ \newcommand{\ReverseArrow}%
775
+ {\ChgEdgeArrowStyle{\EdgeRevArrowStyle}%
776
+ \renewcommand{\EdgeLabelPos}{\EdgeLabelRevPosit}%
777
+ \renewcommand{\ArcLabelPos}{\ArcLabelRevPosit}%
778
+ \renewcommand{\LArcLabelPos}{\LArcLabelRevPosit}%
779
+ \renewcommand{\LoopLabelPos}{\LoopLabelRevPosit}%
780
+ \renewcommand{\CLoopLabelPos}{\CLoopLabelRevPosit}%
781
+ \renewcommand{\InitStateLabelPos}{\InitStateLabelRevPosit}%
782
+ \renewcommand{\FinalStateLabelPos}{\FinalStateLabelRevPosit}}
783
+ \newcommand{\StraightArrow}%
784
+ {\ChgEdgeArrowStyle{\EdgeArrowStyle}%
785
+ \renewcommand{\EdgeLabelPos}{\EdgeLabelPosit}%
786
+ \renewcommand{\ArcLabelPos}{\ArcLabelPosit}%
787
+ \renewcommand{\LArcLabelPos}{\LArcLabelPosit}%
788
+ \renewcommand{\LoopLabelPos}{\LoopLabelPosit}%
789
+ \renewcommand{\CLoopLabelPos}{\CLoopLabelPosit}%
790
+ \renewcommand{\InitStateLabelPos}{\InitStateLabelPosit}%
791
+ \renewcommand{\FinalStateLabelPos}{\FinalStateLabelPosit}}
792
+ % Double
793
+ \newcommand{\FixEdgeLineDouble}[2]{%
794
+ \renewcommand{\EdgeLineDblCoef}{#1}%
795
+ \renewcommand{\EdgeLineDblSep}{#2}}
796
+ % border
797
+ \newcommand{\FixEdgeBorder}[2]{%
798
+ \renewcommand{\EdgeLineBorderCoef}{#1}%
799
+ \renewcommand{\EdgeLineBorderColor}{#2}}
800
+ \newcommand{\EdgeBorder}%
801
+ {\setlength{\EdgeLineBord}{\EdgeLineBorderCoef\EdgeLineWid}}
802
+ \newcommand{\EdgeBorderOff}{\setlength{\EdgeLineBord}{0pt}}
803
+ %%%
804
+ \newcommand{\DimEdge}{%
805
+ \ChgEdgeLineStyle{\DimEdgeLineStyle}%
806
+ \ChgEdgeLineWidth{\DimEdgeLineCoef}%
807
+ \ChgEdgeLineColor{\DimEdgeLineColor}%
808
+ \ChgEdgeLabelColor{\DimEdgeLabelColor}}
809
+ %%%
810
+ \newcommand{\ChgZZSize}[1]{\setlength{\ZZSiZ}{#1}}
811
+ \newcommand{\RstZZSize}{\setlength{\ZZSiZ}{\ZZSize}}
812
+ \newcommand{\SetZZSize}[1]{\setlength{\ZZSiZe}{#1}\RstZZSize}
813
+ %%%\ZZLineWidth
814
+ \newcommand{\ChgZZLineWidth}[1]{\renewcommand{\ZZLineWid}{#1}}
815
+ \newcommand{\RstZZLineWidth}{\ChgZZLineWidth{\ZZLineWidth}}
816
+ \newcommand{\SetZZLineWidth}[1]%
817
+ {\renewcommand{\ZZLineWidth}{#1}\RstZZLineWidth}
818
+ %
819
+ %%% label of transitions
820
+ \newcommand{\VaucEdgeLabel}[1]{%
821
+ \textcolor{\EdgeLabelCol}{\scalebox{\EdgeLabelSca}{\scalebox{\EdgeLabelScale}{$ #1 $}}}}
822
+ %%%
823
+ \newcommand{\RstEdge}{%
824
+ \RstEdgeOffset\RstArcAngle\RstLArcAngle%
825
+ \RstArcCurvature\RstLArcCurvature%
826
+ \RstArcOffset\RstLoopOffset\RstLoopSize%
827
+ \RstEdgeLineColor\RstEdgeLineStyle\RstEdgeLineWidth\EdgeLineSimple%
828
+ \StraightArrow%\EdgeBorderOff%
829
+ \RstEdgeLabelScale\RstEdgeLabelColor}
830
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
831
+ %%%%% Initial-final arrow drawing
832
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
833
+ % implicit parameter
834
+ \newcommand{\InitialDir}{w}\newcommand{\FinalDir}{e}
835
+ % without label
836
+ \newcommand{\Initial}[2][\InitialDir]{\EdgeStyle\ncline{#2#1}{#2}}
837
+ \newcommand{\Final}[2][\FinalDir]{\EdgeStyle\ncline{#2}{#2#1}}
838
+ % with label
839
+ % NB modified syntax eg \InitialL[pos]{dir}{statename}{label}
840
+ \newcommand{\InitialL}[4][{\InitStateLabelPos}]%
841
+ {\EdgeStyle\ncline{#3#2}{#3}\naput[npos=#1]{\VaucEdgeLabel{#4}}}
842
+ \newcommand{\InitialR}[4][{\InitStateLabelPos}]%
843
+ {\EdgeStyle\ncline{#3#2}{#3}\nbput[npos=#1]{\VaucEdgeLabel{#4}}}
844
+ \newcommand{\FinalL}[4][{\FinalStateLabelPos}]%
845
+ {\EdgeStyle\ncline{#3}{#3#2}\naput[npos=#1]{\VaucEdgeLabel{#4}}}
846
+ \newcommand{\FinalR}[4][{\FinalStateLabelPos}]%
847
+ {\EdgeStyle\ncline{#3}{#3#2}\nbput[npos=#1]{\VaucEdgeLabel{#4}}}
848
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
849
+ %%%%% Transition drawing
850
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
851
+ \newcommand{\EdgeL}[4][{\EdgeLabelPos}]%
852
+ {\EdgeStyle \ncline{#2}{#3} \naput[npos=#1]{\VaucEdgeLabel{#4}}}
853
+ \newcommand{\EdgeR}[4][{\EdgeLabelPos}]%
854
+ {\EdgeStyle \ncline{#2}{#3} \nbput[npos=#1]{\VaucEdgeLabel{#4}}}
855
+ %
856
+ \newcommand{\ArcL}[4][{\ArcLabelPos}]%
857
+ {\EdgeStyle \psset{style=VaucArcL}%
858
+ \ncarc{#2}{#3} \naput[npos=#1]{\VaucEdgeLabel{#4}}}
859
+ \newcommand{\ArcR}[4][{\ArcLabelPos}]%
860
+ {\EdgeStyle \psset{style=VaucArcR}%
861
+ \ncarc{#2}{#3} \nbput[npos=#1]{\VaucEdgeLabel{#4}}}
862
+ \newcommand{\LArcL}[4][{\LArcLabelPos}]%
863
+ {\EdgeStyle \psset{style=VaucLArcL}%
864
+ \ncarc{#2}{#3} \naput[npos=#1]{\VaucEdgeLabel{#4}}}
865
+ \newcommand{\LArcR}[4][{\LArcLabelPos}]%
866
+ {\EdgeStyle \psset{style=VaucLArcR}%
867
+ \ncarc{#2}{#3} \nbput[npos=#1]{\VaucEdgeLabel{#4}}}
868
+ %
869
+ \newcounter{anglea}\newcounter{angleb}
870
+ \newcommand{\LoopXR}[7]%
871
+ {{\setcounter{anglea}{#2-#4}}%
872
+ {\setcounter{angleb}{#2+#4}}%
873
+ {\EdgeStyle \psset{angleA=\theanglea,angleB=\theangleb,offset=#5,ncurv=#6}%
874
+ \nccurve{#3}{#3} \nbput[npos=#1]{\VaucEdgeLabel{#7}}}}
875
+ \newcommand{\LoopXL}[7]%
876
+ {{\setcounter{anglea}{#2+#4}}%
877
+ {\setcounter{angleb}{#2-#4}}%
878
+ {\EdgeStyle \psset{angleA=\theanglea,angleB=\theangleb,offset=-#5,ncurv=#6}%
879
+ \nccurve{#3}{#3} \naput[npos=#1]{\VaucEdgeLabel{#7}}}}
880
+ \newcommand{\LoopR}[4][{\LoopLabelPos}]%
881
+ {\LoopXR{#1}{#2}{#3}{\LoopAng}{\LoopOff}{\LoopSi}{#4}}
882
+ \newcommand{\LoopL}[4][{\LoopLabelPos}]%
883
+ {\LoopXL{#1}{#2}{#3}{\LoopAng}{\LoopOff}{\LoopSi}{#4}}
884
+ \newcommand{\CLoopR}[4][{\CLoopLabelPos}]%
885
+ {\LoopXR{#1}{#2}{#3}{\CLoopAng}{\LoopOff}{\LoopSi}{#4}}
886
+ \newcommand{\CLoopL}[4][{\CLoopLabelPos}]%
887
+ {\LoopXL{#1}{#2}{#3}{\CLoopAng}{\LoopOff}{\LoopSi}{#4}}
888
+ \newcommand{\LoopVarR}[4][{\LoopLabelPos}]%
889
+ {\LoopXR{#1}{#2}{#3}{\LoopVarAng}{\LoopVarOff}{\LoopVarSi}{#4}}
890
+ \newcommand{\LoopVarL}[4][{\LoopLabelPos}]%
891
+ {\LoopXL{#1}{#2}{#3}{\LoopVarAng}{\LoopVarOff}{\LoopVarSi}{#4}}
892
+ \newcommand{\LoopW}[3][{\LoopLabelPos}]{\LoopR[#1]{180}{#2}{#3}}
893
+ \newcommand{\LoopE}[3][{\LoopLabelPos}]{\LoopL[#1]{0}{#2}{#3}}
894
+ \newcommand{\LoopN}[3][{\LoopLabelPos}]{\LoopL[#1]{90}{#2}{#3}}
895
+ \newcommand{\LoopS}[3][{\LoopLabelPos}]{\LoopR[#1]{-90}{#2}{#3}}
896
+ \newcommand{\LoopNW}[3][{\LoopLabelPos}]{\LoopR[#1]{135}{#2}{#3}}
897
+ \newcommand{\LoopNE}[3][{\LoopLabelPos}]{\LoopL[#1]{45}{#2}{#3}}
898
+ \newcommand{\LoopSW}[3][{\LoopLabelPos}]{\LoopL[#1]{-135}{#2}{#3}}
899
+ \newcommand{\LoopSE}[3][{\LoopLabelPos}]{\LoopR[#1]{-45}{#2}{#3}}
900
+ \newcommand{\CLoopW}[3][{\CLoopLabelPos}]{\CLoopR[#1]{180}{#2}{#3}}
901
+ \newcommand{\CLoopE}[3][{\CLoopLabelPos}]{\CLoopL[#1]{0}{#2}{#3}}
902
+ \newcommand{\CLoopN}[3][{\CLoopLabelPos}]{\CLoopL[#1]{90}{#2}{#3}}
903
+ \newcommand{\CLoopS}[3][{\CLoopLabelPos}]{\CLoopR[#1]{-90}{#2}{#3}}
904
+ \newcommand{\CLoopNW}[3][{\CLoopLabelPos}]{\CLoopR[#1]{135}{#2}{#3}}
905
+ \newcommand{\CLoopNE}[3][{\CLoopLabelPos}]{\CLoopL[#1]{45}{#2}{#3}}
906
+ \newcommand{\CLoopSW}[3][{\CLoopLabelPos}]{\CLoopL[#1]{-135}{#2}{#3}}
907
+ \newcommand{\CLoopSE}[3][{\CLoopLabelPos}]{\CLoopR[#1]{-45}{#2}{#3}}
908
+ \newcommand{\LoopVarN}[3][{\CLoopLabelPos}]{\LoopVarL[#1]{90}{#2}{#3}}
909
+ \newcommand{\LoopVarS}[3][{\CLoopLabelPos}]{\LoopVarR[#1]{-90}{#2}{#3}}
910
+ %
911
+ \newcommand{\ZZEdge}[2]%
912
+ {\EdgeStyle\ZigzagStyle\nczigzag{#1}{#2}}%
913
+ \newcommand{\ZZEdgeL}[4][{\EdgeLabelRevPosit}]%
914
+ {\EdgeStyle\ZigzagStyle\nczigzag{#2}{#3}%
915
+ \naput[npos=#1]{\VaucEdgeLabel{#4}}}
916
+ \newcommand{\ZZEdgeR}[4][{\EdgeLabelRevPosit}]%
917
+ {\EdgeStyle\ZigzagStyle\nczigzag{#2}{#3}%
918
+ \nbput[npos=#1]{\VaucEdgeLabel{#4}}}
919
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
920
+ %%%%% Reprise des macros pstricks
921
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
922
+ \newcommand{\Point}[2]{\pnode#1{#2}}
923
+ \newcommand{\Edge}[2]{\EdgeStyle\ncline{#1}{#2}}
924
+ %
925
+ \newcommand{\VArcL}[5][{\ArcLabelPos}]%
926
+ {\EdgeStyle \psset{style=VaucLArcL}%
927
+ \ncarc[#2]{#3}{#4} \naput[npos=#1]{\VaucEdgeLabel{#5}}}
928
+ \newcommand{\VArcR}[5][{\ArcLabelPos}]%
929
+ {\EdgeStyle \psset{style=VaucLArcR}%
930
+ \ncarc[#2]{#3}{#4} \nbput[npos=#1]{\VaucEdgeLabel{#5}}}
931
+ %
932
+ \newcommand{\VCurveL}[5][{\ArcLabelPos}]%
933
+ {\EdgeStyle \psset{angleA=0,angleB=180,ncurv=1}%
934
+ \nccurve[#2]{#3}{#4} \naput[npos=#1]{\VaucEdgeLabel{#5}}}
935
+ \newcommand{\VCurveR}[5][{\ArcLabelPos}]%
936
+ {\EdgeStyle \psset{angleA=0,angleB=0,ncurv=1}%
937
+ \nccurve[#2]{#3}{#4} \nbput[npos=#1]{\VaucEdgeLabel{#5}}}
938
+ %
939
+ \newcommand{\LabelL}[2][{\EdgeLabelPos}]%
940
+ {\naput[npos=#1]{\VaucEdgeLabel{#2}}}
941
+ \newcommand{\LabelR}[2][{\EdgeLabelPos}]%
942
+ {\nbput[npos=#1]{\VaucEdgeLabel{#2}}}
943
+ %
944
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
945
+ \endinput
946
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%