#############################################################################
##
#W
display.
xml
#Y Copyright (C) 2011-14 James D. Mitchell
##
## Licensing information can be found in the README file of this package.
##
#############################################################################
##
<#GAPDoc Label=
"TikzString">
<ManSection>
<Oper Name=
"TikzString" Arg=
"obj[, options]"/>
<Returns>A string.</Returns>
<Description>
This function produces a graphical representation of the object
<A>obj</A> using the <C>tikz</C> package for &LaTeX;.
More precisely, this operation outputs a string containing a minimal
&LaTeX; document which can be compiled using &LaTeX; to produce a picture
of <A>obj</A>.
<P/>
Currently the following types of objects are supported:
<List>
<Mark>blocks</Mark>
<Item>
If <A>obj</A> is the left or right blocks of a bipartition, then
<C>TikzString</C> returns a graphical representation of these blocks;
see Section <Ref Sect =
"section-blocks"/>.
</Item>
<Mark>bipartitions</Mark>
<Item>
If <A>obj</A> is a bipartition, then <C>TikzString</C> returns a
graphical representation of <A>obj</A>.
<P/>
If the optional second argument <A>options</A> is a record with the
component <C>colors</C> set to <K>true</K>, then the blocks of
<A>f</A> will be colored using the standard <C>tikz</C> colors. Due
to the limited number of colors available in <C>tikz</C> this option
only works when the degree of <A>obj</A> is less than 20.
See Chapter <Ref Chap =
"Bipartitions and blocks"/> for more details
about bipartitions.
</Item>
<Mark>pbrs</Mark>
<Item>
If <A>obj</A> is a <Ref Oper=
"PBR"/>, then <C>TikzString</C> returns a
graphical representation <A>obj</A>; see Chapter <Ref Sect =
"Partitioned binary relations (PBRs)"/>.
</Item>
<Mark>Cayley graphs</Mark>
<Item>
If <A>obj</A> is a <Ref Oper=
"Digraph" BookName=
"digraphs"/> in the
category <Ref Filt=
"IsCayleyDigraph" BookName=
"digraphs"/>, then
<C>TikzString</C> returns a picture of <A>obj</A>. No attempt is made
whatsoever to produce a sensible picture of the digraph <A>obj</A>,
in fact, the vertices are all given the same coordinates. Human
intervention is required to produce a meaningful picture from the
value returned by this method. It is intended to make the task of
drawing such a Cayley graph more straightforward by providing
everything except the final layout of the graph. Please use <Ref
Oper=
"DotString"/> if you want an automatically laid out diagram of
the digraph <A>obj</A>.
</Item>
</List>
<Log><![
CDATA[
gap> x := Bipartition([[1, 4, -2, -3], [2, 3, 5, -5], [-1, -4]]);;
gap> TikzString(RightBlocks(x));
"%tikz\n\\documentclass{minimal}\n\\usepackage{tikz}\n\\begin{documen\
t}\n\\begin{tikzpicture}\n \\draw[ultra thick](5,2)circle(.115);\n \
\\draw(1.8,5) node [top] {{$1$}};\n \\fill(4,2)circle(.125);\n \\dr\
aw(1.8,4) node [top] {{$2$}};\n \\fill(3,2)circle(.125);\n \\draw(1\
.8,3) node [top] {{$3$}};\n \\draw[ultra thick](2,2)circle(.115);\n \
\\draw(1.8,2) node [top] {{$4$}};\n \\fill(1,2)circle(.125);\n \\d\
raw(1.8,1) node [top] {{$5$}};\n\n \\draw (5,2.125) .. controls (5,2\
.8) and (2,2.8) .. (2,2.125);\n \\draw (4,2.125) .. controls (4,2.6)\
and (3,2.6) .. (3,2.125);\n\\end{tikzpicture}\n\n\\end{document}
"
gap> x := Bipartition([[1, 5], [2, 4, -3, -5], [3, -1, -2], [-4]]);;
gap> TikzString(x);
"%tikz\n\\documentclass{minimal}\n\\usepackage{tikz}\n\\begin{documen\
t}\n\\begin{tikzpicture}\n\n %block #1\n %vertices and labels\n \\\
fill(1,2)circle(.125);\n \\draw(0.95, 2.2) node [above] {{ $1$}};\n \
\\fill(5,2)circle(.125);\n \\draw(4.95, 2.2) node [above] {{ $5$}};\
\n\n %lines\n \\draw(1,1.875) .. controls (1,1.1) and (5,1.1) .. (5\
,1.875);\n\n %block #2\n %vertices and labels\n \\fill(2,2)circle(\
.125);\n \\draw(1.95, 2.2) node [above] {{ $2$}};\n \\fill(4,2)circ\
le(.125);\n \\draw(3.95, 2.2) node [above] {{ $4$}};\n \\fill(3,0)c\
ircle(.125);\n \\draw(3, -0.2) node [below] {{ $-3$}};\n \\fill(5,0\
)circle(.125);\n \\draw(5, -0.2) node [below] {{ $-5$}};\n\n %lines\
\n \\draw(2,1.875) .. controls (2,1.3) and (4,1.3) .. (4,1.875);\n \
\\draw(3,0.125) .. controls (3,0.7) and (5,0.7) .. (5,0.125);\n \\dr\
aw(2,2)--(3,0);\n\n %block #3\n %vertices and labels\n \\fill(3,2)\
circle(.125);\n \\draw(2.95, 2.2) node [above] {{ $3$}};\n \\fill(1\
,0)circle(.125);\n \\draw(1, -0.2) node [below] {{ $-1$}};\n \\fill\
(2,0)circle(.125);\n \\draw(2, -0.2) node [below] {{ $-2$}};\n\n %l\
ines\n \\draw(1,0.125) .. controls (1,0.6) and (2,0.6) .. (2,0.125);\
\n \\draw(3,2)--(2,0);\n\n %block #4\n %vertices and labels\n \\f\
ill(4,0)circle(.125);\n \\draw(4, -0.2) node [below] {{ $-4$}};\n\n \
%lines\n\\end{tikzpicture}\n\n\\end{document}
"
gap> TikzString(UniversalPBR(2));
"%latex\n\\documentclass{minimal}\n\\usepackage{tikz}\n\\begin{docume\
nt}\n\\usetikzlibrary{arrows}\n\\usetikzlibrary{arrows.meta}\n\\newco\
mmand{\\arc}{\\draw[semithick, -{>[width = 1.5mm, length = 2.5mm]}]}\
\n\\begin{tikzpicture}[\n vertex/.style={circle, draw, fill=black, i\
nner sep =0.04cm},\n ghost/.style={circle, draw = none, inner sep = \
0.14cm},\n botloop/.style={min distance = 8mm, out = -70, in = -110}\
,\n toploop/.style={min distance = 8mm, out = 70, in = 110}]\n\n % \
vertices and labels\n \\foreach \\i in {1,...,2} {\n \\node [vert\
ex] at (\\i/1.5, 3) {};\n \\node [ghost] (\\i) at (\\i/1.5, 3) {};\
\n }\n\n \\foreach \\i in {1,...,2} {\n \\node [vertex] at (\\i/\
1.5, 0) {};\n \\node [ghost] (-\\i) at (\\i/1.5, 0) {};\n }\n\n \
% arcs from vertex 1\n \\arc (1) to (-2);\n \\arc (1) to (-1);\n \
\\arc (1) edge [toploop] (1);\n \\arc (1) .. controls (1.06666666666\
66667, 2.125) and (0.93333333333333324, 2.125) .. (2);\n\n % arcs fr\
om vertex -1\n \\arc (-1) .. controls (1.0666666666666667, 0.875) an\
d (0.93333333333333324, 0.875) .. (-2);\n \\arc (-1) edge [botloop] \
(-1);\n \\arc (-1) to (1);\n \\arc (-1) to (2);\n\n % arcs from ve\
rtex 2\n \\arc (2) to (-2);\n \\arc (2) to (-1);\n \\arc (2) .. co\
ntrols (0.93333333333333324, 2.125) and (1.0666666666666667, 2.125) .\
. (1);\n \\arc (2) edge [toploop] (2);\n\n % arcs from vertex -2\n \
\\arc (-2) edge [botloop] (-2);\n \\arc (-2) .. controls (0.9333333\
3333333324, 0.875) and (1.0666666666666667, 0.875) .. (-1);\n \\arc \
(-2) to (1);\n \\arc (-2) to (2);\n\n\\end{tikzpicture}\n\\end{docum\
ent}
"]]></Log>
</Description>
</ManSection>
<#/GAPDoc>
<#GAPDoc Label=
"DotString">
<ManSection>
<Oper Name=
"DotString" Arg=
"S[, options]"/>
<Returns>A string.</Returns>
<Description>
If the argument <A>S</A> is a semigroup, and the optional second argument
<A>options</A> is a record, then this operation produces a graphical
representation of the partial order of
the &D;-classes of the semigroup <A>S</A> together with the eggbox
diagram of each &D;-class. The output is in <C>dot</C> format (also known
as <C>GraphViz</C>) format. For details about this file format, and
information about how to
display or edit this format see
<
URL>
https://www.graphviz.org</
URL>.
<P/>
The string returned by <C>DotString</C> can be written to a file using
the command <Ref Func=
"FileString" BookName=
"GAPDoc"/>.
<P/>
The &D;-classes are shown as eggbox diagrams with &L;-classes as rows and
&R;-classes as columns; group &H;-classes are shaded gray and contain an
asterisk. The &L;-classes and &R;-classes within a &D;-class are arranged
to correspond to the normalization of the principal factor given by <Ref
Attr=
"NormalizedPrincipalFactor"/>.
The &D;-classes are numbered according to their index in
<C>GreensDClasses(<A>S</A>)</C>, so that an <C>i</C> appears next to the
eggbox diagram of <C>GreensDClasses(<A>S</A>)[i]</C>. A line from one
&D;-class to another indicates that the higher &D;-class is greater than
the lower one in the &D;-order on <A>S</A>.
<P/>
If the optional second argument <A>options</A> is present, it can be used
to specify some options for output.
<List>
<Mark>number</Mark>
<Item>
if <C><A>options</A>.number</C> is <K>false</K>, then the &D;-classes
in the diagram are not numbered according to their index in the list
of &D;-classes of <A>S</A>. The default value for this option is
<K>true</K>.
</Item>
<Mark>maximal</Mark>
<Item>
if <C><A>options</A>.maximal</C> is <K>true</K>, then the structure
description of the group &H;-classes is displayed; see
<Ref Attr=
"StructureDescription" BookName=
"ref"/>. Setting
this attribute to <K>true</K> can adversely affect the performance of
<C>DotString</C>. The default value for this option is
<K>false</K>.
</Item>
<Mark>normal</Mark>
<Item>
if <C><A>options</A>.normal</C> is <K>false</K>, then the &L;- and
&R;-classes within each &D;-class arranged to correspond to <Ref
Attr=
"PrincipalFactor"/>. If <C><A>options</A>.normal</C> is
<K>true</K>, they are instead arranged to correspond to <Ref
Attr=
"NormalizedPrincipalFactor"/>. Setting this attribute to
<K>false</K> may improve the performance of <C>DotString</C> as it
avoids the computation of <Ref
Attr=
"InjectionNormalizedPrincipalFactor"/>. The default value for
this option is <K>true</K>.
</Item>
</List>
<Log><![
CDATA[
gap> S := FullTransformationMonoid(3);
<full transformation monoid of degree 3>
gap> DotString(S);
"//dot\ndigraph DClasses {\nnode [shape=plaintext]\nedge [color=blac\
k,arrowhead=none]\n1 [shape=box style=invisible label=<\n<TABLE BORDE\
R=\
"0\" CELLBORDER=\
"1\" CELLPADDING=\
"10\" CELLSPACING=\
"0\" PORT=\
"\
1\
">\n<TR BORDER=\"0\
"><TD COLSPAN=\"1\
" BORDER = \"0\
" > 1</TD></TR>\
<TR><TD BGCOLOR=\
"gray\">*</TD></TR>\n</TABLE>>];\n2 [shape=box style\
=invisible label=<\n<TABLE BORDER=\
"0\" CELLBORDER=\
"1\" CELLPADDING=\
\
"10\" CELLSPACING=\
"0\" PORT=\
"2\">\n<TR BORDER=\
"0\"><TD COLSPAN=\
"\
3\
" BORDER = \"0\
" > 2</TD></TR><TR><TD BGCOLOR=\"gray\
">*</TD><TD BG\
COLOR=\
"gray\">*</TD><TD BGCOLOR=\
"white\"></TD></TR>\n<TR><TD BGCOLO\
R=\
"gray\">*</TD><TD BGCOLOR=\
"white\"></TD><TD BGCOLOR=\
"gray\">*</T\
D></TR>\n<TR><TD BGCOLOR=\
"white\"></TD><TD BGCOLOR=\
"gray\">*</TD><T\
D BGCOLOR=\
"gray\">*</TD></TR>\n</TABLE>>];\n3 [shape=box style=invis\
ible label=<\n<TABLE BORDER=\
"0\" CELLBORDER=\
"1\" CELLPADDING=\
"10\"\
CELLSPACING=\
"0\" PORT=\
"3\">\n<TR BORDER=\
"0\"><TD COLSPAN=\
"1\" BO\
RDER = \
"0\" > 3</TD></TR><TR><TD BGCOLOR=\
"gray\">*</TD></TR>\n<TR><\
TD BGCOLOR=\
"gray\">*</TD></TR>\n<TR><TD BGCOLOR=\
"gray\">*</TD></TR>\
\n</TABLE>>];\n1 -> 2\n2 -> 3\n }
"
gap> FileString(
"t3.dot", DotString(S));
1040]]></Log>
</Description>
</ManSection>
<#/GAPDoc>
<#GAPDoc Label=
"DotStringDigraph">
<ManSection>
<Oper Name=
"DotString" Arg=
"digraph" Label=
"for a Cayley digraph"/>
<Returns>A string.</Returns>
<Description>
If <A>digraph</A> is a <Ref Oper=
"Digraph" BookName=
"digraphs"/> in the
category <Ref Filt=
"IsCayleyDigraph" BookName=
"digraphs"/>, then
<C>DotString</C> returns a graphical representation of <A>digraph</A>.
The output is in <C>dot</C> format (also known
as <C>GraphViz</C>) format. For details about this file format, and
information about how to
display or edit this format see
<
URL>
https://www.graphviz.org</
URL>.
<P/>
The string returned by <C>DotString</C> can be written to a file using
the command <Ref Func=
"FileString" BookName=
"GAPDoc"/>.<P/>
See also <Ref Oper=
"DotLeftCayleyDigraph"/> and <Ref
Oper=
"TikzLeftCayleyDigraph"/>.
</Description>
</ManSection>
<#/GAPDoc>
<#GAPDoc Label=
"DotSemilatticeOfIdempotents">
<ManSection>
<Attr Name=
"DotSemilatticeOfIdempotents" Arg=
"S"/>
<Returns>A string.</Returns>
<Description>
This function produces a graphical representation of the semilattice of
the idempotents of an inverse semigroup <A>S</A> where the elements of
<A>S</A> have a unique semigroup inverse accessible via <Ref
Attr=
"Inverse" BookName=
"ref"/>. The idempotents are grouped by the
&D;-class they belong to.
<P/>
The output is in <C>dot</C> format (also known as <C>GraphViz</C>) format.
For details about this file format, and information about how to
display
or edit this format see <
URL>
https://www.graphviz.org</
URL>. <P/>
<Example><![
CDATA[
gap> S := DualSymmetricInverseMonoid(4);
<inverse block bijection monoid of degree 4 with 3 generators>
gap> DotSemilatticeOfIdempotents(S);
"//dot\ngraph graphname {\n node [shape=point]\nranksep=2;\nsubgraph \
cluster_1{\n15 \n}\nsubgraph cluster_2{\n5 11 14 12 13 8 \n}\nsubgraph\
cluster_3{\n2 10 6 3 4 9 7 \n}\nsubgraph cluster_4{\n1 \n}\n2 -- 1\n3\
-- 1\n4 -- 1\n5 -- 2\n5 -- 3\n5 -- 4\n6 -- 1\n7 -- 1\n8 -- 2\n8 -- 6\
\n8 -- 7\n9 -- 1\n10 -- 1\n11 -- 2\n11 -- 9\n11 -- 10\n12 -- 3\n12 -- \
6\n12 -- 9\n13 -- 3\n13 -- 7\n13 -- 10\n14 -- 4\n14 -- 6\n14 -- 10\n15\
-- 5\n15 -- 8\n15 -- 11\n15 -- 12\n15 -- 13\n15 -- 14\n }
"]]></Example>
</Description>
</ManSection>
<#/GAPDoc>
<#GAPDoc Label=
"TexString">
<ManSection>
<Oper Name=
"TexString" Arg=
"f[, n]"/>
<Returns>A string.</Returns>
<Description>
This function produces a string containing LaTeX code for the
transformation <A>f</A>. If the optional parameter <A>n</A> is used, then
this is taken to be the degree of the transformation <A>f</A>, if the
parameter <A>n</A> is not given, then <Ref Attr=
"DegreeOfTransformation"
BookName=
"ref"/> is used by default. If <A>n</A> is less than the
degree of <A>f</A>, then an error is given.
<P/>
<Example><![
CDATA[
gap> TexString(Transformation([6, 2, 4, 3, 6, 4]));
"\\begin{pmatrix}\n 1 & 2 & 3 & 4 & 5 & 6 \\\\\n 6 & 2 & 4 & 3 & 6 &\
4\n\\end{pmatrix}
"
gap> TexString(Transformation([1, 2, 1, 3]), 5);
"\\begin{pmatrix}\n 1 & 2 & 3 & 4 & 5 \\\\\n 1 & 2 & 1 & 3 & 5\n\\en\
d{pmatrix}
"]]></Example>
</Description>
</ManSection>
<#/GAPDoc>
<#GAPDoc Label=
"TikzLeftCayleyDigraph">
<ManSection>
<Oper Name=
"TikzLeftCayleyDigraph" Arg=
"S"/>
<Oper Name=
"TikzRightCayleyDigraph" Arg=
"S"/>
<Returns>A string.</Returns>
<Description>
If <A>S</A> is a semigroup satisfying
<Ref Prop=
"CanUseFroidurePin"/>, then <C>TikzLeftCayleyDigraph</C>
is simply short for <C>TikzString(LeftCayleyDigraph(<A>S</A>))</C>.<P/>
<C>TikzRightCayleyDigraph</C> can be used to produce a tikz string for
the right Cayley graph of <A>S</A>.<P/>
See <Ref Oper=
"TikzString"/> for more details, and see also
<Ref Oper=
"DotLeftCayleyDigraph"/>.
<Log><![
CDATA[
gap> TikzLeftCayleyDigraph(Semigroup(IdentityTransformation));
"\\begin{tikzpicture}[scale=1, auto, \n vertex/.style={c\
ircle, draw, thick, fill=white, minimum size=0.65cm},\n \
edge/.style={arrows={-angle 90}, thick},\n loop/.style={\
min distance=5mm,looseness=5,arrows={-angle 90},thick}]\n\
\n % Vertices . . .\n \\node [vertex] (a) at (0, 0) {};\
\n \\node at (0, 0) {$a$};\n\n % Edges . . .\n \\path[\
->] (a) edge [loop]\n node {$a$} (a);\n\\end{ti\
kzpicture}
"
gap> TikzRightCayleyDigraph(Semigroup(IdentityTransformation));
"\\begin{tikzpicture}[scale=1, auto, \n vertex/.style={c\
ircle, draw, thick, fill=white, minimum size=0.65cm},\n \
edge/.style={arrows={-angle 90}, thick},\n loop/.style={\
min distance=5mm,looseness=5,arrows={-angle 90},thick}]\n\
\n % Vertices . . .\n \\node [vertex] (a) at (0, 0) {};\
\n \\node at (0, 0) {$a$};\n\n % Edges . . .\n \\path[\
->] (a) edge [loop]\n node {$a$} (a);\n\\end{ti\
kzpicture}
"]]></Log>
</Description>
</ManSection>
<#/GAPDoc>
<#GAPDoc Label=
"DotLeftCayleyDigraph">
<ManSection>
<Oper Name=
"DotLeftCayleyDigraph" Arg=
"S"/>
<Oper Name=
"DotRightCayleyDigraph" Arg=
"S"/>
<Returns>A string.</Returns>
<Description>
If <A>S</A> is a semigroup satisfying <Ref
Prop=
"CanUseFroidurePin"/>, then <C>DotLeftCayleyDigraph</C> is
simply short for <C>DotString(LeftCayleyDigraph(<A>S</A>))</C>.<P/>
<C>DotRightCayleyDigraph</C> can be used to produce a dot string for
the right Cayley graph of <A>S</A>.<P/>
See <Ref Oper=
"DotString"/> for more details, and see also
<Ref Oper=
"TikzLeftCayleyDigraph"/>.
<Log><![
CDATA[
gap> DotLeftCayleyDigraph(Semigroup(IdentityTransformation));
"//dot\ndigraph hgn{\nnode [shape=circle]\n1 [label=\"a\
"]\n1 -> 1\n}\
\n
"
gap> DotRightCayleyDigraph(Semigroup(IdentityTransformation));
"//dot\ndigraph hgn{\nnode [shape=circle]\n1 [label=\"a\
"]\n1 -> 1\n}\
\n
"]]></Log>
</Description>
</ManSection>
<#/GAPDoc>