summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/metapost/automata/README5
-rw-r--r--Master/texmf-dist/doc/metapost/automata/example.mp55
-rw-r--r--Master/texmf-dist/doc/metapost/automata/example.pdfbin56311 -> 90447 bytes
-rw-r--r--Master/texmf-dist/doc/metapost/automata/example.tex5
-rw-r--r--Master/texmf-dist/metapost/automata/automata.mp157
5 files changed, 158 insertions, 64 deletions
diff --git a/Master/texmf-dist/doc/metapost/automata/README b/Master/texmf-dist/doc/metapost/automata/README
index 9345ec96569..ee2805fc3c6 100644
--- a/Master/texmf-dist/doc/metapost/automata/README
+++ b/Master/texmf-dist/doc/metapost/automata/README
@@ -1,4 +1,4 @@
-AUTOMATA.MP - version 0.2
+AUTOMATA.MP - version 0.3
This package is a collection of macros for METAPOST to
make easier to draw finite-state machines, automata,
@@ -38,5 +38,4 @@ License and it can be downloaded from the web page
by following the link "Other links".
-Gabriele Puppis - gabriele.puppis@dimi.uniud.it
-University of Udine - Italy
+Gabriele Puppis - gabriele.puppis@gmail.com
diff --git a/Master/texmf-dist/doc/metapost/automata/example.mp b/Master/texmf-dist/doc/metapost/automata/example.mp
index 88cbc2eca43..79adb2f68e3 100644
--- a/Master/texmf-dist/doc/metapost/automata/example.mp
+++ b/Master/texmf-dist/doc/metapost/automata/example.mp
@@ -12,56 +12,65 @@ verbatimtex
etex
-% SIMPLE EXAMPLE FOR THE PACKAGE automata.mp
+% EXAMPLE FOR THE PACKAGE automata.mp
beginfig(0);
- % settings for some global parameters
+ % Setting of some global parameters.
+
size := 15;
incominglength := 25;
loopsize := 22;
- % instead of using `spacing := (36,29)'
- % one could use `with spacing((36,29))' to temporarily change the value of the parameter
+ % The following command defines a grid of nodes with 7 rows and 10 columns.
+ % Instead of using "spacing := (36,29)" and thus change the global parameter for the ditance
+ % between nodes, one can use `with spacing((36,29))' to temporarily change the value of this
+ % parameter.
+
with spacing((36,29)) matrix.a(7,10);
- % one can use directives btex etex to include LaTeX-compiled labels
+ % Next, one declares the shape of the nodes and possibly their labels. One can use the directives
+ % "btex" and "etex" to include LaTeX-compiled labels in nodes, or just "" to leave them unlabeled.
+ % Moreover, one can use several shapes for the nodes. There are some predefined shorhands for
+ % modified styles of nodes and arrows (e.g., "node_double" is equivalent to "with border(double) node")
+
node.a[4][0](btex $s_0$ etex);
- node.a[4][2](btex $s_1$ etex);
- node.a[4][4](btex $s_2$ etex);
- node.a[4][6](btex $s_3$ etex);
- node.a[4][8](btex $s_4$ etex);
+ with shape(boxed) node.a[4][2](btex $s_1$ etex);
+ with shape(fixedbox) node.a[4][4](btex $s_2$ etex);
+ with size(18) with shape(diamond) node.a[4][6](btex $s_3$ etex);
+ with size(22) with shape(utriangle) node.a[4][8](btex $s_4$ etex);
node.a[2][2](btex $s_5$ etex);
node.a[2][5](btex $s_6$ etex);
node.a[1][6](btex $s_7$ etex);
- % there are some predefined shorhands for modified styles of nodes and arrows
- % (e.g., `node_double ...' is equivalent to `with border(double) node ...')
node_double.a[1][8](btex $s_8$ etex);
+ % One can define arrows of different forms. Each arrow follow a path from an initial node to a
+ % final node and this path must be explicitly given as a MetaPost path expression (e.g., point..point--point).
+ % Note that labels of nodes and arrows can be rotated using the MetaPost directive "rotated".
+
incoming(0, "") (a[4][0]) 120;
loop.bot(.65, btex \small $a$ etex) (a[4][0]) -165;
- % paths can be simple expressions (e.g., point..point) ...
arrow_dash.bot(.5, btex \small $b$ etex) (a[4][0],a[4][2]) a[4][0].c..a[4][2].c;
arrow.bot(.5, btex \small $a$ etex) (a[4][2],a[4][4]) a[4][2].c..a[4][4].c;
arrow.bot(.5, btex \small $a$ etex) (a[4][4],a[4][6]) a[4][4].c..a[4][6].c;
arrow.bot(.5, btex \small $a$ etex) (a[4][6],a[4][8]) a[4][6].c..a[4][8].c;
- % ...or more complex expressions (e.g., point..point---point...point)
- % (BUG: directive `{dir <angle>}' does not work with arrows, but `{up}' does)
arrow.bot(.5, btex \small $c$ etex) (a[4][8],a[4][0]) a[4][8].c..a[5][7].c---a[5][1].c..a[4][0].c;
- % one can rotate labels as usual in MetaPost
arrow_dash.rt(.5, btex \small $a$ etex rotated 90) (a[4][2],a[2][2]) a[4][2].c..a[2][2].c;
arrow.bot(.5, btex \small $c$ etex rotated 39) (a[2][2],a[4][0]) a[2][2].c..a[4][0].c;
- arrow_dash.bot(.5, btex \small $a$ etex) (a[2][2],a[2][5]) a[2][2].c..a[2][5].c;
+ arrow_dash.bot(.5, btex \small $a$ etex) (a[2][2],a[2][5]) a[2][2].c{dir-30}..a[2][5].c;
arrow_dash.rt(.5, btex \small $a$ etex rotated 90) (a[4][6],a[1][6]) a[4][6].c..a[1][6].c;
arrow.top(.5, btex \small $a$ etex) (a[1][6],a[1][8]) a[1][6].c..a[1][8].c;
- % again some complex paths for arrows...
- arrow.bot(.38, btex \small $c$ etex) (a[2][5],a[4][0])
- a[2][5].c..a[1][4].c---a[1][2].c shifted(-10,0)..a[2][1].c shifted (-10,0)---a[4][0].c;
- arrow_bold.bot(.5, btex \small $c$ etex) (a[1][8],a[4][0])
- a[1][8].c..a[2][9].c---a[5][9].c..a[6][8].c---a[6][1].c..a[5][0].c---a[4][0].c;
- arrow_bold.top(.38, btex \small $c$ etex) (a[1][8],a[4][0])
- a[1][8].c..a[0][7].c---a[0][1].c..a[1][0].c---a[4][0].c;
+ arrow.bot(.38, btex \small $c$ etex) (a[2][5],a[4][0]) a[2][5].c..a[1][4].c---a[1][2].c shifted(-10,0)..a[2][1].c shifted (-10,0)---a[4][0].c;
+ arrow_bold.bot(.5, btex \small $c$ etex) (a[1][8],a[4][0]) a[1][8].c..a[2][9].c---a[5][9].c..a[6][8].c---a[6][1].c..a[5][0].c---a[4][0].c;
+ arrow_bold.top(.38, btex \small $c$ etex) (a[1][8],a[4][0]) a[1][8].c..a[0][7].c---a[0][1].c..a[1][0].c---a[4][0].c;
+
+ % Finally, one may want to highligh a given set of nodes. This can done using the macro
+ % "enclose"/"enclosure", which draws/returns a path that goes around the given sequence
+ % of vertices (it is always a good idea if the sequence is given in clockwise order and
+ % if it defines a convex region!).
+ with enclosuremargin(20) draw enclosure(a[4][4].c--a[2][5].c--a[1][6].c--a[4][6].c--cycle) withcolor light.light.green withpen pencircle scaled 3;
+
endfig;
end. \ No newline at end of file
diff --git a/Master/texmf-dist/doc/metapost/automata/example.pdf b/Master/texmf-dist/doc/metapost/automata/example.pdf
index 0d2ab2d5735..8fa83dc5c45 100644
--- a/Master/texmf-dist/doc/metapost/automata/example.pdf
+++ b/Master/texmf-dist/doc/metapost/automata/example.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/metapost/automata/example.tex b/Master/texmf-dist/doc/metapost/automata/example.tex
index d84c855c67f..4544ebb0325 100644
--- a/Master/texmf-dist/doc/metapost/automata/example.tex
+++ b/Master/texmf-dist/doc/metapost/automata/example.tex
@@ -10,8 +10,7 @@
\title{An example of automaton generated\\with the MetaPost package \url{automata.mp}}
\author{Gabriele Puppis\\
- \emph{Dipartimento di Matematica e Informatica, Università di Udine, Italy}\\
- \url{gabriele.puppis@dimi.uniud.it}}
+ \url{gabriele.puppis@gmail.com}}
\maketitle
@@ -30,7 +29,7 @@ and the transitions of the automaton (you can find some documentation inside the
\begin{figure}[!!h]
\centering\includegraphics{example.0}
-\caption{An example pf automaton}\label{fig:example}
+\caption{An example of automaton}\label{fig:example}
\end{figure}
\end{document} \ No newline at end of file
diff --git a/Master/texmf-dist/metapost/automata/automata.mp b/Master/texmf-dist/metapost/automata/automata.mp
index 35ed9e6ae73..f3e1e24c4e6 100644
--- a/Master/texmf-dist/metapost/automata/automata.mp
+++ b/Master/texmf-dist/metapost/automata/automata.mp
@@ -1,5 +1,4 @@
% PACKAGE FOR METAPOST TO DRAW FINITE STATE MACHINES, GRAPHS, TREES, ETC.
-% Version 0.2
% Author: gabriele puppis
% declares a grid of equally-spaced nodes
@@ -104,8 +103,8 @@ enddef;
%
% syntax: movepos.<name>(x,y);
%
-% example: movepos.a(100,100);
-% movepos.b[0][0](100,100);
+% example: movepos.a(10,10);
+% movepos.b[0][0](10,10);
vardef movepos@# expr p =
@#.c := @#.c shifted p;
@#.h := @#.h shifted p;
@@ -121,13 +120,13 @@ enddef;
% parameters: size = 7 | ...
% nodemargin = 1.5 | ...
% shape = circle | utriangle | ltriangle | btriangle | rtriangle |
-% box | fixedbox | rbox | rfixedbox | none
+% boxed | fixedbox | roundbox | roundfixedbox | diamond | none
% boxmargin = 5 | ...
-% fixedboxwidth = 7 | ...
-% fixedboxheight = 7 | ...
+% fixedboxwidth = 14 | ...
+% fixedboxheight = 14 | ...
% border = solid | bold | dash | double | none
% bordercolor = black | white | ...
-% filling = none | solid | left | right
+% filling = none | solid | lefthalf | righthalf
% fillingcolor = black | white | ...
% nodelabel = yes | no
% nodelabelcolor = black | white | ...
@@ -171,7 +170,7 @@ vardef node@#(expr l) =
@#.h := @#.c shifted (0.5xpart(@#.s),0);
fs := (size,size);
fm := 4solidsize;
- elseif (shape=box):
+ elseif (shape=boxed):
@#.s := urcorner pic - llcorner pic + (boxmargin,boxmargin);
@#.f := squarepath;
@#.h := @#.c;
@@ -183,18 +182,24 @@ vardef node@#(expr l) =
@#.h := @#.c;
fs := @#.s;
fm := 0;
- elseif (shape=rbox):
+ elseif (shape=roundbox):
@#.s := urcorner pic - llcorner pic;
@#.f := rrectangle(xpart(@#.s),ypart(@#.s));
@#.h := @#.c;
fs := @#.s;
fm := 0;
- elseif (shape=rfixedbox):
+ elseif (shape=roundfixedbox):
@#.s := (fixedboxwidth,fixedboxheight);
@#.f := rrectangle(xpart(@#.s),ypart(@#.s));
@#.h := @#.c;
fs := @#.s;
fm := 0;
+ elseif (shape=diamond):
+ @#.s := (size,size);
+ @#.f := diamondpath;
+ @#.h := @#.c;
+ fs := (size,size);
+ fm := 0;
elseif (shape=none):
@#.s := (0,0);
@#.f := (0,0)..(0,0);
@@ -216,7 +221,7 @@ vardef node@#(expr l) =
fill @#.f xscaled xpart(fs) yscaled ypart(fs)
shifted @#.c withcolor fillingcolor;
fi
- elseif (filling=left):
+ elseif (filling=lefthalf):
if (border=double):
fill buildcycle(@#.f,(0,-1)--(0,1))
xscaled (xpart(fs)-2doublesize) yscaled (ypart(fs)-2doublesize)
@@ -226,7 +231,7 @@ vardef node@#(expr l) =
xscaled xpart(fs) yscaled ypart(fs)
shifted @#.c withcolor fillingcolor;
fi
- elseif (filling=right):
+ elseif (filling=righthalf):
if (border=double):
fill buildcycle(@#.f,(0,-1)--(0,1)) rotated 180
xscaled (xpart(fs)-2doublesize) yscaled (ypart(fs)-2doublesize)
@@ -282,10 +287,11 @@ enddef;
%
% example: arrow.top(0.5, btex $a$ etex)(a[0][0],a[0][1]) a[0][0].c{dir90}..a[0][1].c;
%
-% parameters: style = solid | bold | dash | bolddash
+% parameters: style = solid | bold | dash | bolddash | invisible
% arrowcolor = black | white | ...
% arrowlabel = yes | no
% unfillonarrowlabel = yes | no
+% unfillcolor = white | black | ...
% arrowlabelcolor = black | white | ...
% tipangle = 25 | ...;
% tipsharpness = 10 | ...;
@@ -335,6 +341,7 @@ vardef arrow@#(expr o,l)(suffix a,b) expr p =
elseif (style=bolddash):
draw cutp withpen pencircle scaled boldsize dashed evenly scaled dashsize withcolor arrowcolor;
draw tip withpen pencircle scaled boldsize withcolor arrowcolor;
+ elseif (style=invisible):
else:
errmessage("Arrow style not defined");
fi
@@ -344,7 +351,7 @@ vardef arrow@#(expr o,l)(suffix a,b) expr p =
picture lab;
lab := thelabel.@#(l, point o*length(cutp) of cutp);
if (unfillonarrowlabel=yes):
- unfill (bbox lab);
+ fill (bbox lab) withcolor unfillcolor;
fi
draw lab withcolor arrowlabelcolor;
%label.@#(l, point o*length(cutp) of cutp) withcolor arrowlabelcolor;
@@ -363,8 +370,8 @@ enddef;
% example: loop.top(0.5, btex $a$ etex)(a[0][0]) 90;
%
% parameters: loopsize = 15 | ...
-% looporientation = counterclockwise | clockwise
-% style = solid | bold | dash | bolddash
+% looporientation = counterclockwiseorientation | clockwiseorientation
+% style = solid | bold | dash | bolddash | invisible
% arrowcolor = black | white | ...
% arrowlabel = yes | no
% tipangle = 25 | ...;
@@ -376,9 +383,9 @@ enddef;
vardef loop@#(expr o,l)(suffix a) expr d =
save p;
path p;
- if (looporientation=clockwise):
+ if (looporientation=clockwiseorientation):
p := (-0.5*loopsize,0)..(0,0.5*loopsize)..(0.5*loopsize,0)..(0,-0.5*loopsize)..cycle;
- elseif (looporientation=counterclockwise):
+ elseif (looporientation=counterclockwiseorientation):
p := (-0.5*loopsize,0)..(0,-0.5*loopsize)..(0.5*loopsize,0)..(0,0.5*loopsize)..cycle;
else:
errmessage("Loop orientation not defined");
@@ -445,44 +452,82 @@ vardef outgoing@#(expr o,l)(suffix a) expr d =
enddef;
+% this function can be used to enclose a sequence of points inside a bounding area
+%
+% syntax: enclose <path>;
+% where <path> is a closed path, whose points are listed in clockwise order
+%
+% example: enclose a[0][0].c--a[0][1].c--a[1][1].c--cycle;
+%
+% parameters: style = solid | bold | dash | bolddash
+% enclosurecolor = black | white | ...
+% enclosuremargin = 5 | ...
+% solidsize = 0.9 | ...
+% boldsize = 1.5 | ...
+% dashsize = 0.75 | ...
+vardef enclose expr p =
+ if (style=solid):
+ draw enclosure(p) withpen pencircle scaled solidsize withcolor enclosurecolor;
+ elseif (style=bold):
+ draw enclosure(p) withpen pencircle scaled boldsize withcolor enclosurecolor;
+ elseif (style=dash):
+ draw enclosure(p) withpen pencircle scaled solidsize dashed evenly scaled dashsize withcolor enclosurecolor;
+ elseif (style=bolddash):
+ draw enclosure(p) withpen pencircle scaled boldsize dashed evenly scaled dashsize withcolor enclosurecolor;
+ else:
+ errmessage("Arrow style not defined");
+ fi
+enddef;
+
+
% shorthand macros
def node_circle = with shape(circle) node enddef;
def node_utriangle = with shape(utriangle) node enddef;
def node_ltriangle = with shape(ltriangle) node enddef;
def node_dtriangle = with shape(dtriangle) node enddef;
def node_rtriangle = with shape(rtriangle) node enddef;
+def node_diamond = with shape(diamond) node enddef;
def node_unfilled = with filling(none) node enddef;
def node_filled = with filling(solid) node enddef;
-def node_filledleft = with filling(left) node enddef;
-def node_filledright = with filling(right) node enddef;
+def node_filledleft = with filling(lefthalf) node enddef;
+def node_filledright = with filling(righthalf) node enddef;
def node_solid = with border(solid) node enddef;
def node_bold = with border(bold) node enddef;
def node_dash = with border(dash) node enddef;
def node_double = with border(double) node enddef;
def node_hidden = with border(none) node enddef;
-def node_box = with shape(box) node enddef;
+def node_boxed = with shape(boxed) node enddef;
def node_fixed = with shape(fixedbox) node enddef;
-def node_rbox = with shape(rbox) node enddef;
-def node_rfixed = with shape(rfixedbox) node enddef;
+def node_roundbox = with shape(roundbox) node enddef;
+def node_roundfixed = with shape(roundfixedbox) node enddef;
def node_marker = with shape(none) node enddef;
def arrow_solid = with style(solid) arrow enddef;
def arrow_bold = with style(bold) arrow enddef;
def arrow_dash = with style(dash) arrow enddef;
def arrow_bolddash = with style(bolddash) arrow enddef;
+def arrow_invisible = with style(invisible) arrow enddef;
def loop_solid = with style(solid) loop enddef;
def loop_bold = with style(bold) loop enddef;
def loop_dash = with style(dash) loop enddef;
def loop_bolddash = with style(bolddash) loop enddef;
-def loop_cw = with looporientation(clockwise) loop enddef;
-def loop_ccw = with looporientation(counterclockwise) loop enddef;
+def loop_invisible = with style(invisible) loop enddef;
+def loop_cw = with looporientation(clockwiseorientation) loop enddef;
+def loop_ccw = with looporientation(counterclockwiseorientation) loop enddef;
def incoming_solid = with style(solid) incoming enddef;
def incoming_bold = with style(bold) incoming enddef;
def incoming_dash = with style(dash) incoming enddef;
def incoming_bolddash = with style(bolddash) incoming enddef;
+def incoming_invisible = with style(invisible) incoming enddef;
def outgoing_solid = with style(solid) outgoing enddef;
def outgoing_bold = with style(bold) outgoing enddef;
def outgoing_dash = with style(dash) outgoing enddef;
def outgoing_bolddash = with style(bolddash) outgoing enddef;
+def outgoing_invisible = with style(invisible) outgoing enddef;
+def enclose_solid = with style(solid) enclose enddef;
+def enclose_bold = with style(bold) enclose enddef;
+def enclose_dash = with style(dash) enclose enddef;
+def enclose_bolddash = with style(bolddash) enclose enddef;
+def enclose_thin = with style(dash) dashsize(0.5) enclose enddef;
% e.g. with fillingcolor(black) node ...
vardef with@#(expr v) text e = push.@#; @# := v; e; pop.@# enddef;
% e.g. light.gray, light.light.gray, ...
@@ -502,9 +547,34 @@ def ltrianglepath = (trianglepath rotated 90) enddef;
def btrianglepath = (trianglepath rotated 180) enddef;
def rtrianglepath = (trianglepath rotated 270) enddef;
def squarepath = ((0.5,-0.5)--(-0.5,-0.5)--(-0.5,0.5)--(0.5,0.5)--cycle) enddef;
+def diamondpath = ((0.5,0)--(0,0.5)--(-0.5,0)--(0,-0.5)--cycle) enddef;
+def urdiamondpath = ((0,0.5)--(0.5,0)--(0,0)--cycle) enddef;
+def uldiamondpath = ((-0.5,0)--(0,0.5)--(0,0)--cycle) enddef;
+def lrdiamondpath = ((0.5,0)--(0,-0.5)--(0,0)--cycle) enddef;
+def lldiamondpath = ((0,0)--(0,-0.5)--(-0.5,0)--cycle) enddef;
vardef rrectangle(expr w,h) = (((0.5w-0.25h,-0.5h)---(-0.5w+0.25h,-0.5h)..
(-0.5w+0.25h,0.5h)---(0.5w-0.25h,0.5h)..cycle)
xscaled (1/w) yscaled (1/h)) enddef;
+vardef sqr(expr x) = ((x)*(x)) enddef;
+vardef firstenclosurepoint(expr p,q) = ((ypart(p)-ypart(q)) * sqrt(sqr(enclosuremargin) / (sqr(xpart(p)-xpart(q)) + sqr(ypart(p)-ypart(q)))) + xpart(p),
+ (xpart(q)-xpart(p)) * sqrt(sqr(enclosuremargin) / (sqr(xpart(p)-xpart(q)) + sqr(ypart(p)-ypart(q)))) + ypart(p)) enddef;
+vardef secondenclosurepoint(expr p,q) = ((ypart(p)-ypart(q)) * sqrt(sqr(enclosuremargin) / (sqr(xpart(p)-xpart(q)) + sqr(ypart(p)-ypart(q)))) + xpart(q),
+ (xpart(q)-xpart(p)) * sqrt(sqr(enclosuremargin) / (sqr(xpart(p)-xpart(q)) + sqr(ypart(p)-ypart(q)))) + ypart(q)) enddef; vardef enclosuresegment(expr p,q) = firstenclosurepoint(p,q)---secondenclosurepoint(p,q) enddef;
+vardef enclosure(expr p) =
+ save enc;
+ save i;
+ path enc;
+ if (pair p):
+ enc := circlepath scaled (2*enclosuremargin) shifted point 1 of p;
+ else:
+ enc := enclosuresegment(point 0 of p, point 1 of p);
+ for i=1 upto length(p)-1:
+ enc := enc..enclosuresegment(point i of p, point i+1 of p);
+ endfor;
+ enc := enc..cycle;
+ fi
+ enc
+enddef;
% general appearence constants and variables
@@ -516,19 +586,21 @@ def utriangle = 11 enddef;
def ltriangle = 12 enddef;
def btriangle = 13 enddef;
def rtriangle = 14 enddef;
-def box = 15 enddef;
+def boxed = 15 enddef;
def fixedbox = 16 enddef;
-def rbox = 17 enddef;
-def rfixedbox = 18 enddef;
+def roundbox = 17 enddef;
+def roundfixedbox = 18 enddef;
+def diamond = 19 enddef;
def solid = 20 enddef;
-def left = 21 enddef;
-def right = 22 enddef;
+def lefthalf = 21 enddef;
+def righthalf = 22 enddef;
def bold = 30 enddef;
def dash = 31 enddef;
def bolddash = 32 enddef;
def double = 33 enddef;
-def clockwise = 40 enddef;
-def counterclockwise = 41 enddef;
+def invisible = 34 enddef;
+def clockwiseorientation = 40 enddef;
+def counterclockwiseorientation = 41 enddef;
pair spacing;
pair offset;
@@ -557,11 +629,14 @@ numeric dashsize;
numeric doublesize;
numeric nodemargin;
numeric arrowmargin;
+numeric enclosuremargin;
color bordercolor;
color fillingcolor;
color nodelabelcolor;
color arrowcolor;
color arrowlabelcolor;
+color unfillcolor;
+color enclosurecolor;
spacing = (60,30);
offset = (0,0);
@@ -569,19 +644,20 @@ numbering = (0,0);
size := 5;
shape := circle;
boxmargin := 5;
-fixedboxwidth := 7;
-fixedboxheight := 7;
+fixedboxwidth := 14;
+fixedboxheight := 14;
border := solid;
filling := none;
style := solid;
nodelabel := yes;
arrowlabel := yes;
unfillonarrowlabel := no;
+unfillcolor := white;
tipangle := 20;
tipsharpness := 15;
tipsize := 4;
loopsize := 14;
-looporientation := counterclockwise;
+looporientation := counterclockwiseorientation;
incominglength := 20;
outgoinglength := 20;
solidsize := 0.7;
@@ -590,11 +666,13 @@ dashsize := 0.7;
doublesize := 1.3;
nodemargin := 1.5;
arrowmargin := 3.8;
+enclosuremargin := 5;
bordercolor = black;
fillingcolor = black;
nodelabelcolor = black;
arrowcolor = black;
arrowlabelcolor = black;
+enclosurecolor = gray;
linecap := butt;
linejoin := mitered;
@@ -627,11 +705,14 @@ numeric dashsize.back[];
numeric doublesize.back[];
numeric nodemargin.back[];
numeric arrowmargin.back[];
+numeric enclosuremargin.back[];
color bordercolor.back[];
color fillingcolor.back[];
color nodelabelcolor.back[];
color arrowcolor.back[];
color arrowlabelcolor.back[];
+color unfillcolor.back[];
+color enclosurecolor.back[];
numeric spacing.count;
numeric offset.count;
@@ -647,6 +728,7 @@ numeric style.count;
numeric nodelabel.count;
numeric arrowlabel.count;
numeric unfillonarrowlabel.count;
+numeric unfillcolor.count;
numeric tipangle.count;
numeric tipsharpness.count;
numeric tipsize.count;
@@ -660,11 +742,13 @@ numeric dashsize.count;
numeric doublesize.count;
numeric nodemargin.count;
numeric arrowmargin.count;
+numeric enclosuremargin.count;
numeric bordercolor.count;
numeric fillingcolor.count;
numeric nodelabelcolor.count;
numeric arrowcolor.count;
numeric arrowlabelcolor.count;
+numeric enclosurecolor.count;
spacing.count := 0;
offset.count := 0;
@@ -680,6 +764,7 @@ style.count := 0;
nodelabel.count := 0;
arrowlabel.count := 0;
unfillonarrowlabel.count := 0;
+unfillcolor.count := 0;
tipangle.count := 0;
tipsharpness.count := 0;
tipsize.count := 0;
@@ -693,8 +778,10 @@ dashsize.count := 0;
doublesize.count := 0;
nodemargin.count := 0;
arrowmargin.count := 0;
+enclosuremargin.count := 0;
bordercolor.count := 0;
fillingcolor.count := 0;
nodelabelcolor.count := 0;
arrowcolor.count := 0;
arrowlabelcolor.count := 0;
+enclosurecolor.count := 0;