%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % tkz-berge.sty encodage : utf8 % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % Créé par Alain Matthes le 08-05-2007. % % contribution : Rafael Villarroel 2007 (RV) % % contribution : Rafael Villarroel 2009 (RV) % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % modif Doyle form 1 % add \setkeys[GR]{edge}{#1}% in edge's macros % remove somme bugs with pgf 2.00 cvs %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %% Objet : Création de graphes classiques %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{tkz-berge}[2011/06/01 2.00 tkz-berge for named graphs] %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \RequirePackage{tkz-graph} \def\tkzutil@empty{} \def\tkzutil@firstofone#1{#1} \def\tkzutil@firstoftwo#1#2{#1} \def\tkzutil@secondoftwo#1#2{#2} %<--------------------------------------------------------------------------–> \long\def\tkzutil@ifundefined#1{% \expandafter\ifx\csname#1\endcsname\relax \expandafter\tkzutil@firstoftwo \else \expandafter\tkzutil@secondoftwo \fi} %\input{tkz-tools-arith.tex} \tkzutil@ifundefined{pgfmath@function@isfactor}{% \pgfmathdeclarefunction{isfactor}{2}{% \begingroup \c@pgfmath@counta#1\relax% \c@pgfmath@countb#2\relax% \c@pgfmath@countc#1\relax% \divide\c@pgfmath@counta by\c@pgfmath@countb% \multiply\c@pgfmath@counta by\c@pgfmath@countb% \advance\c@pgfmath@countc by-\c@pgfmath@counta% \ifnum\c@pgfmath@countc=0 \def\pgfmathresult{1}% \else \def\pgfmathresult{0}% \fi \pgfmath@smuggleone\pgfmathresult% \endgroup} }{} \edef\tkzAtCode{\the\catcode`\@} \catcode`\@=11\relax %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcounter{tkz@bg@cnt} % NAMED GRAPHS %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % Graphes cls %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \define@cmdkey [GR] {cl} {L}{} \define@boolkey [GR] {cl} {Math}[true]{} \define@boolkey [GR] {cl} {inv}[true]{} \define@cmdkey [GR] {cl} {RA}{} \define@cmdkey [GR] {cl} {RB}{} \define@cmdkey [GR] {cl} {RC}{} \define@cmdkey [GR] {cl} {RD}{} \define@cmdkey [GR] {cl} {RE}{} \define@cmdkey [GR] {cl} {RS}{} \define@cmdkey [GR] {cl} {prefix}{} \define@cmdkey [GR] {cl} {prefixx}{} \define@cmdkey [GR] {cl} {prefixxx}{} \define@cmdkey [GR] {cl} {prefixxxx}{} \define@cmdkey [GR] {cl} {prefixxxxx}{} \define@cmdkey [GR] {cl} {form}{} \define@cmdkey [GR] {cl} {num}{} \define@cmdkey [GR] {cl} {rotation}{} \define@cmdkey [GR] {cl} {x}{} \define@cmdkey [GR] {cl} {y}{} \define@cmdkey [GR] {cl} {r}{} \define@cmdkey [GR] {cl} {d}{} \presetkeys [GR] {cl} {RA = 4, RB = 3, RC = 2, RD = 1, RE = 0.5, RS = 0, form = 1, prefix = a, prefixx = b, prefixxx = c, prefixxxx = d, prefixxxxx = e, num = {}, Math = false, x = 0, y = 0, r = 0, d = 0, rotation = 0}{} %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % Tools Graphes particuliers %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % Some tools %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grMathSep}{_} \newcommand*{\grLabelSep}{;} \newcommand*{\write@math}[3]{% \Vertex[x = #1,y = #2,% L = \cmdGR@cl@prefix\grMathSep{#3}]{\cmdGR@cl@prefix#3}} \newcommand*{\write@nomath}[3]{% \Vertex[x = #1,y = #2]{\cmdGR@cl@prefix#3}} %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % Empty graphs %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grEmptyCycle}{\@ifstar% \grEmptyCycleStar% \grEmptyCycleNoStar} \newcommand*{\grEmptyCycleNoStar}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@p}{#2-1} \edef\tkz@auxctp{\thetkz@gr@p} \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathparse{360/#2*\V@x+\cmdGR@cl@rotation} \let\tkz@angle\pgfmathresult% \pgfmathsetmacro{\x@result}{% \cmdGR@cl@RA*cos(\tkz@angle)+\cmdGR@cl@r*cos(\cmdGR@cl@d)} \pgfmathsetmacro{\y@result}{% \cmdGR@cl@RA*sin(\tkz@angle)+\cmdGR@cl@r*sin(\cmdGR@cl@d)} \ifGR@cl@Math% \presetkeys [GR] {vertex} {Math = true}{}% \Vertex[x = \x@result+\cmdGR@cl@x,% y = \y@result+\cmdGR@cl@y,% L = \cmdGR@cl@prefix\grMathSep{\V@x}]{\cmdGR@cl@prefix\V@x}% \else% \Vertex[x = \x@result+\cmdGR@cl@x,% y = \y@result+\cmdGR@cl@y]{\cmdGR@cl@prefix\V@x}% \fi% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grEmptyCycleStar}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \setcounter{tkz@gr@a}{0} \setcounter{tkz@gr@b}{0} \foreach \V@x in {#2}{\stepcounter{tkz@gr@b}{1}} \foreach \V@x in {#2}{% \pgfmathsetmacro{\x@result}{% \cmdGR@cl@RA*cos((360/\thetkz@gr@b)*\thetkz@gr@a+\cmdGR@cl@rotation)% +\cmdGR@cl@r*cos(\cmdGR@cl@d)% } \pgfmathsetmacro{\y@result}{% \cmdGR@cl@RA*sin((360/\thetkz@gr@b)*\thetkz@gr@a+\cmdGR@cl@rotation)% +\cmdGR@cl@r*sin(\cmdGR@cl@d)% } \ifGR@cl@Math% \Vertex[% x=\x@result+\cmdGR@cl@x, y=\y@result+\cmdGR@cl@y, L=$\V@x$]{\cmdGR@cl@prefix\thetkz@gr@a}% \else% \Vertex[% x=\x@result+\cmdGR@cl@x, y=\y@result+\cmdGR@cl@y, L=\V@x]{\cmdGR@cl@prefix\thetkz@gr@a}% \fi% \stepcounter{tkz@gr@a}% } \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grEmptyPath from (RV) %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grEmptyPath}{\@ifstar% \grEmptyPathStar% \grEmptyPathNoStar} \newcommand*{\grEmptyPathNoStar}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@a}{#2-1} \edef\tkz@auxctp{\thetkz@gr@a} \ifcase\cmdGR@cl@form \or \def\tkzb@result{0} \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathsetmacro{\x@result}{\cmdGR@cl@RA*(\V@x)*cos(\cmdGR@cl@rotation)} \pgfmathsetmacro{\y@result}{\cmdGR@cl@RA*(\V@x)*sin(\cmdGR@cl@rotation)} \pgfmathsetmacro{\x@coord}{\x@result+\cmdGR@cl@x+\cmdGR@cl@r*cos(\cmdGR@cl@d)} \pgfmathsetmacro{\y@coord}{\y@result+\cmdGR@cl@y+ \cmdGR@cl@r*sin(\cmdGR@cl@d)+\cmdGR@cl@RS} \ifGR@cl@Math% \presetkeys [GR] {vertex} {Math = true}{}% \ifthenelse{\equal{\cmdGR@cl@num}{}}{% \write@math{\x@coord}{\y@coord}{\V@x}}{% \write@math{\x@coord}{\y@coord}{\V@x\grLabelSep\cmdGR@cl@num}}% \else \ifthenelse{\equal{\cmdGR@cl@num}{}}{% \write@nomath{\x@coord}{\y@coord}{\V@x}}{% \write@nomath{\x@coord+\cmdGR@cl@x}{\y@coord}{% \V@x\grLabelSep\cmdGR@cl@num}}% \fi}% \or \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathsetmacro{\x@result}{% \cmdGR@cl@RA*(2*\V@x-\thetkz@gr@a)*0.5*cos(\cmdGR@cl@rotation)} \pgfmathsetmacro{\y@result}{% \cmdGR@cl@RA*(2*\V@x-\thetkz@gr@a)*0.5*sin(\cmdGR@cl@rotation)} \pgfmathsetmacro{\x@coord}{% \x@result+\cmdGR@cl@x+\cmdGR@cl@r*cos(\cmdGR@cl@d)} \pgfmathsetmacro{\y@coord}{% \y@result+\cmdGR@cl@y+\cmdGR@cl@r*sin(\cmdGR@cl@d)+\cmdGR@cl@RS} \ifGR@cl@Math% \presetkeys [GR] {vertex} {Math = true}{}% \ifthenelse{\equal{\cmdGR@cl@num}{}}{% \write@math{\x@coord}{\y@coord}{\V@x}}{% \write@math{\x@coord}{\y@coord}{\cmdGR@cl@num\grLabelSep\V@x}}% \else \ifthenelse{\equal{\cmdGR@cl@num}{}}{% \write@nomath{\x@coord}{\y@coord}{\V@x}}{% \write@nomath{\x@coord}{\y@coord}{\cmdGR@cl@num\grLabelSep\V@x}}% \fi }% \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grEmptyPathStar}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \setcounter{tkz@gr@a}{0} \ifcase\cmdGR@cl@form \or % form 1 \foreach \V@x in {#2}{% \pgfmathsetmacro{\x@result}{\cmdGR@cl@RA*\value{tkz@gr@a}*cos(\cmdGR@cl@rotation)% +\cmdGR@cl@r*cos(\cmdGR@cl@d)}% \pgfmathsetmacro{\y@result}{\cmdGR@cl@RA*\value{tkz@gr@a}*sin(\cmdGR@cl@rotation)% +\cmdGR@cl@r*sin(\cmdGR@cl@d)}% \ifGR@cl@Math% \Vertex[% x=\x@result+\cmdGR@cl@x, y=\y@result+\cmdGR@cl@y, L=$\V@x$]{\cmdGR@cl@prefix\thetkz@gr@a}% \else% \Vertex[% x=\x@result+\cmdGR@cl@x, y=\y@result+\cmdGR@cl@y, L=\V@x]{\cmdGR@cl@prefix\thetkz@gr@a}% \fi% \stepcounter{tkz@gr@a}% }% \or % form 2 \setcounter{tkz@gr@a}{0} \setcounter{tkz@gr@b}{0} \foreach \V@x in {#2}{\stepcounter{tkz@gr@b}{1}} \foreach \V@x in {#2}{% \pgfmathsetmacro{\x@result}{\cmdGR@cl@RA*(2*\value{tkz@gr@a}-\value{tkz@gr@b}+1)*0.5% *cos(\cmdGR@cl@rotation)% +\cmdGR@cl@r*cos(\cmdGR@cl@d)% } \pgfmathsetmacro{\y@result}{\cmdGR@cl@RA*(2*\value{tkz@gr@a}-\value{tkz@gr@b}+1)*0.5% *sin(\cmdGR@cl@rotation)% +\cmdGR@cl@r*sin(\cmdGR@cl@d)% } \ifGR@cl@Math% \Vertex[% x=\x@result+\cmdGR@cl@x, y=\y@result+\cmdGR@cl@y, L=$\V@x$]{\cmdGR@cl@prefix\thetkz@gr@a}% \else% \Vertex[% x=\x@result+\cmdGR@cl@x, y=\y@result+\cmdGR@cl@y, L=\V@x]{\cmdGR@cl@prefix\thetkz@gr@a}% \fi% \stepcounter{tkz@gr@a} } \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grEmptyStar %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grEmptyStar}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@a}{#2-1} \ifGR@cl@Math\presetkeys [GR] {vertex} {Math = true}{}% \write@math{0}{0}{\thetkz@gr@a}% \else \write@nomath{0}{0}{\thetkz@gr@a}% \fi \grEmptyCycle[#1]{\thetkz@gr@a} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grEmptyGrid %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grEmptyGrid}[3][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@a}{#2-1} \edef\tkz@auxctpa{\thetkz@gr@a} \pgfmathsetcounter{tkz@gr@b}{#3-1} \edef\tkz@auxctpb{\thetkz@gr@b} \foreach \V@x in {0,...,\tkz@auxctpa}{% \foreach \V@y in {0,...,\tkz@auxctpb}{% \ifGR@cl@Math\presetkeys [GR] {vertex} {Math = true}{}% \write@math{\cmdGR@cl@RA*\V@x}{\cmdGR@cl@RB*\V@y}{\V@x\grLabelSep\V@y}% \else \write@nomath{\cmdGR@cl@RA*\V@x}{\cmdGR@cl@RB*\V@y}{\V@x\grLabelSep\V@y}% \fi}% } \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grEmptyLadder %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grEmptyLadder}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grEmptyPath[#1,RS=0]{#2} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grEmptyPath[#1,prefix=\tkzb@ptemp,RS=\tkzb@rtemp]{#2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % Edges %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeInGraphFromOneToComp}[4][]{% #4 \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@ta}{#3-1} \edef\tkz@auxctp{\thetkz@gr@ta} \foreach \cx in {0,...,\tkz@auxctp}{% \ifthenelse{\equal{\cx}{#4}}{}{\Edge[#1](#2#4)(#2\cx)}% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % new tool EdgeInGraphLoop loop 0--1--2.........n--0 % star 0--1--2.........n- %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeInGraphLoop}{\@ifstar% \EdgeInGraphLoopStar% \EdgeInGraphLoopNoStar} \newcommand*{\EdgeInGraphLoopNoStar}[3][]{% #4 \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@ta}{#3-1} \setcounter{tkz@gr@n}{0} \Edge[#1](#2\thetkz@gr@ta)(#2\thetkz@gr@n) \pgfmathaddtocounter{tkz@gr@ta}{-1} \edef\tkz@auxctp{\thetkz@gr@ta} \foreach \V@x in {0,...,\tkz@auxctp}{% \stepcounter{tkz@gr@n} \Edge[#1](#2\V@x)(#2\thetkz@gr@n)% }% \endgroup% } \newcommand*{\EdgeInGraphLoopStar}[3][]{% #4 \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@ta}{#3-2} \setcounter{tkz@gr@n}{0} \edef\tkz@auxctp{\thetkz@gr@ta} \foreach \V@x in {0,...,\tkz@auxctp}{% \stepcounter{tkz@gr@n} \Edge[#1](#2\V@x)(#2\thetkz@gr@n)% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % new tool EdgeInGraphMod replace nextmod %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeInGraphMod}{\@ifstar% \EdgeInGraphModStar% \EdgeInGraphModNoStar} \newcommand*{\EdgeInGraphModNoStar}[4][]{% #2 order \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@ta}{#3-1} \edef\tkz@auxctp{\thetkz@gr@ta} \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@tb}{Mod(\V@x+#4,#3)} \Edge[#1](#2\thetkz@gr@tb)(#2\V@x)% }% \endgroup% } %#1 prefix #2 order #3 add #4 start #5 décalage \newcommand*{\EdgeInGraphModStar}[6][]{% \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@ta}{#5} \whiledo{\value{tkz@gr@ta}<#3}{% \pgfmathsetcounter{tkz@gr@n}{Mod(\thetkz@gr@ta+#4,#3)} \Edge[#1](#2\thetkz@gr@ta)(#2\thetkz@gr@n) \pgfmathaddtocounter{tkz@gr@ta}{#6}% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeInGraphModLoop dep #4 add #3 mod #2 until #4 %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeInGraphModLoop}[5][]{% #2 order \begingroup% \setkeys[GR]{edge}{#1}% \setcounter{tkz@gr@ta}{#5} \setcounter{tkz@gr@n}{#3} \whiledo{\not\equal{\value{tkz@gr@n}}{#5}}{% \pgfmathsetcounter{tkz@gr@n}{Mod(\thetkz@gr@ta+#4,#3)} \Edge[#1](#2\thetkz@gr@ta)(#2\thetkz@gr@n)% \setcounter{tkz@gr@ta}{\thetkz@gr@n} }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeIdentity % la version étoilée permet d'utliser une sélection %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeIdentity}{\@ifstar% \EdgeIdentityStar% \EdgeIdentityNoStar} \newcommand*{\EdgeIdentityNoStar}[4][]{% \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@e}{#4-1} \edef\tkz@auxctp{\thetkz@gr@e} \foreach \V@x in {0,...,\tkz@auxctp}{% \Edge[#1](#2\V@x)(#3\V@x)% }% \endgroup% } \newcommand*{\EdgeIdentityStar}[4][]{% \begingroup% \setkeys[GR]{edge}{#1}% \foreach \V@x in {#4}{% \Edge[#1](#2\V@x)(#3\V@x)% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeFromOneToAll vertex #1#3 through #2 0...#2 n-1 #5 order of the graph %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeFromOneToAll}[5][]{% #4 = order of the graph \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@e}{#5-1} \edef\tkz@auxctp{\thetkz@gr@e} \foreach \V@x in {0,...,\tkz@auxctp}{% \Edge[#1](#2#4)(#3\V@x)% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeFromOneToSeq vertex #1#3 through #2#4...#2#5 %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeFromOneToSeq}[6][]{% #4 \begingroup% \setkeys[GR]{edge}{#1}% \foreach \V@x in {#5,...,#6}{% \Edge[#1](#2#4)(#3\V@x)% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeFromOneToSel vertex #1#3 through #2#4...#2#5 %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeFromOneToSel}[5][]{% #4 \begingroup% \setkeys[GR]{edge}{#1}% \foreach \V@x in {#5}{% \Edge[#1](#2#4)(#3\V@x)% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeFromOneToComplement vertex #1#3 through #2#4...#2#5 %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeFromOneToComp}[5][]{% \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@e}{#5-1} \edef\tkz@auxctp{\thetkz@gr@e} \foreach \cx in {0,...,\tkz@auxctp}{% \ifthenelse{\equal{\cx}{#4}}{}{\Edge[#1](#2#4)(#3\cx)}% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % new tool EdgeMod replace nextmod % identity with step like nextmod ??? %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeMod}{\@ifstar% \EdgeModStar% \EdgeModNoStar} \newcommand*{\EdgeModNoStar}[5][]{%#3 order #4 step \begingroup% \setkeys[GR]{edge}{#1}% \pgfmathsetcounter{tkz@gr@e}{#4-1} \edef\tkz@auxctp{\thetkz@gr@e} \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@tb}{Mod(\V@x+#5,#4)} \Edge[#1](#2\V@x)(#3\thetkz@gr@tb)% }% \endgroup% } %#1 prefix #2 prefix #3 order #4 order inf #5 step \newcommand*{\EdgeModStar}[6][]{% \begingroup% \setkeys[GR]{edge}{#1}% \setcounter{tkz@gr@ta}{0} \whiledo{\value{tkz@gr@ta}<#4}{% \pgfmathsetcounter{tkz@gr@tb}{Mod(\thetkz@gr@ta+#5,#4)} \Edge[#1](#2\thetkz@gr@ta)(#3\thetkz@gr@tb)% \pgfmathaddtocounter{tkz@gr@ta}{#6}}% \endgroup% }% %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % new tool EdgeInGraphSeq sequence i--i+1--.....--j % or i--i+k--...--j % #1 options #2 graph #3 from #4 to %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeInGraphSeq}[4][]{% #4 \begingroup% \setkeys[GR]{edge}{#1}% \foreach \V@x in {#3,...,#4}{% \pgfmathsetcounter{tkz@gr@n}{\V@x+1} \Edge[#1](#2\V@x)(#2\thetkz@gr@n)}% \endgroup% }% %%%%%%%%%%% NEW COMMANDS %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % new tool EdgeSeq sequence % #1 options #2 first graph #3 second graph #4 from #5 to %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\EdgeSequence}[5][]{% \begingroup% \setkeys[GR]{edge}{#1}% \foreach \V@x in {#4,...,#5}{% \pgfmathsetcounter{tkz@gr@n}{\V@x+1} \Edge[#1](#2\V@x)(#3\thetkz@gr@n)}% \endgroup% }% %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % EdgeDoubleMod by RV %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\EdgeDoubleMod}[9]{% \begingroup% \foreach \V@x in {0,...,#9}{% \pgfmathsetcounter{tkz@gr@c}{Mod(#3+(#4*\V@x),#2)} \pgfmathsetcounter{tkz@gr@n}{Mod(#7+(#8*\V@x),#6)} \Edge(#1\thetkz@gr@c)(#5\thetkz@gr@n) }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grPath %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grPath}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grEmptyPath[#1]{#2} \ifthenelse{\equal{\cmdGR@cl@num}{}}{% \ifthenelse{\equal{#2}{1}}{}{% \EdgeInGraphLoop*{\cmdGR@cl@prefix}{#2}% }}{% \ifthenelse{\equal{#2}{1}}{}{% \ifcase\cmdGR@cl@form \or \pgfmathsetcounter{tkz@gr@ta}{#2-2} \setcounter{tkz@gr@n}{0} \edef\tkz@auxctp{\thetkz@gr@ta} \foreach \V@x in {0,...,\tkz@auxctp}{% \stepcounter{tkz@gr@n} \Edge(\cmdGR@cl@prefix\V@x\grLabelSep\cmdGR@cl@num)% (\cmdGR@cl@prefix\thetkz@gr@n\grLabelSep\cmdGR@cl@num)% }% \or \EdgeInGraphLoop*{\cmdGR@cl@prefix\cmdGR@cl@num\grLabelSep}{#2} \fi% }} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grGrid %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grGrid}[3][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grEmptyGrid[#1]{#2}{#3} \pgfmathsetcounter{tkz@gr@a}{#2-2} \edef\tkz@auxctpa{\thetkz@gr@a} \pgfmathsetcounter{tkz@gr@b}{#3-2} \edef\tkz@auxctpb{\thetkz@gr@b} \foreach \V@x in {0,...,\tkz@auxctpa}{% \foreach \V@y in {0,...,\tkz@auxctpb}{% \pgfmathsetcounter{tkz@gr@c}{\V@x+1} \pgfmathsetcounter{tkz@gr@d}{\V@y+1} \Edge(\cmdGR@cl@prefix\V@x\grLabelSep\V@y)% (\cmdGR@cl@prefix\V@x\grLabelSep\thetkz@gr@d) \Edge(\cmdGR@cl@prefix\V@x\grLabelSep\V@y)% (\cmdGR@cl@prefix\thetkz@gr@c\grLabelSep\V@y)% }% }% \pgfmathsetcounter{tkz@gr@a}{#2-2} \pgfmathsetcounter{tkz@gr@b}{#3-1} \edef\tkz@auxctpa{\thetkz@gr@a} \foreach \V@x in {0,...,\tkz@auxctpa}{% \pgfmathsetcounter{tkz@gr@c}{\V@x+1} \Edge(\cmdGR@cl@prefix\V@x\grLabelSep\thetkz@gr@b)% (\cmdGR@cl@prefix\thetkz@gr@c\grLabelSep\thetkz@gr@b)% }% \pgfmathsetcounter{tkz@gr@a}{#2-1} \pgfmathsetcounter{tkz@gr@b}{#3-2} \edef\tkz@auxctpb{\thetkz@gr@b} \foreach \V@y in {0,...,\tkz@auxctpb}{% \pgfmathsetcounter{tkz@gr@d}{\V@y+1} \Edge(\cmdGR@cl@prefix\thetkz@gr@a\grLabelSep\V@y)% (\cmdGR@cl@prefix\thetkz@gr@a\grLabelSep\thetkz@gr@d)% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grComplete %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grComplete}[2][]{% #1 options #2 ordre du graphe \begingroup% \setkeys[GR]{cl}{#1}% \grEmptyCycle[#1]{#2}% \pgfmathsetcounter{tkz@gr@a}{#2-1} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \ia in {0,...,\tkz@auxctp}% {\foreach \ib in {\ia,...,\tkz@auxctp} {\Edge(\cmdGR@cl@prefix\ia)(\cmdGR@cl@prefix\ib)}% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grCycle %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grCycle}[2][]{% \begingroup% \setkeys[GR]{cl}{#1} \grEmptyCycle[#1]{#2} \EdgeInGraphLoop{\cmdGR@cl@prefix}{#2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grLCF %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grLCF}[3][]{% \begingroup% \setkeys[GR]{cl}{#1}% \setcounter{tkz@gr@a}{#3} \setcounter{tkz@gr@b}{0} \foreach \V@x in {#2}{\stepcounter{tkz@gr@b}} \pgfmathsetcounter{tkz@gr@c}{\thetkz@gr@a * \thetkz@gr@b} \setcounter{tkz@gr@b}{\thetkz@gr@c} \grCycle[#1]{\thetkz@gr@c} %<––––––––––––––––––––––––– End Vertex ––––––––––––––––––––––––––––––––––––> \pgfmathsetcounter{tkz@gr@a}{#3-1} \edef\tkz@auxctp{\thetkz@gr@a} \setcounter{tkz@gr@e}{0} \foreach \V@k in {0,...,\tkz@auxctp}{% \foreach \n in {#2}{% \ifthenelse{\n < 0}{% \pgfmathsetcounter{tkz@gr@b}{\n+\thetkz@gr@c}}{% \pgfmathsetcounter{tkz@gr@b}{\n}} \pgfmathsetcounter{tkz@gr@n}% {Mod(\thetkz@gr@e+\thetkz@gr@b,\thetkz@gr@c)} \Edge(\cmdGR@cl@prefix\thetkz@gr@e)(\cmdGR@cl@prefix\thetkz@gr@n) \stepcounter{tkz@gr@e}% }% }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grStar %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grStar}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grEmptyStar[#1]{#2} \pgfmathsetcounter{tkz@gr@p}{#2-1} \EdgeInGraphFromOneToComp{\cmdGR@cl@prefix}{#2}{\thetkz@gr@p} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grWheel %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grWheel}[2][]{ \begingroup% \setkeys[GR]{cl}{#1}% \grStar[#1]{#2} \pgfmathsetcounter{tkz@gr@e}{#2-1} \EdgeInGraphLoop{\cmdGR@cl@prefix}{\thetkz@gr@e} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grSQCircle %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grSQCycle}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grCycle[#1]{#2}% \EdgeInGraphMod{\cmdGR@cl@prefix}{#2}{2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grLadder %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grLadder}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grPath[#1,RS=0]{#2} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RS} \grPath[#1,prefix=\tkzb@ptemp,RS=\tkzb@rtemp]{#2} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{#2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grPrism %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grPrism}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grCycle[#1]{#2} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCycle[#1,RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{#2} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{#2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grCompleteBipartite %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grCompleteBipartite}[3][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@a}{#2-1} \pgfmathparse{(\cmdGR@cl@RA * \thetkz@gr@a) /2} \let\tkzRAxpos\pgfmathresult% \pgfmathsetcounter{tkz@gr@a}{#3-1} \pgfmathparse{(\cmdGR@cl@RB * \thetkz@gr@a) /2} \let\tkzRBxpos\pgfmathresult% \ifdim\tkzRBxpos pt > \tkzRAxpos pt\relax% \pgfmathadd{\tkzRBxpos}{-\tkzRAxpos} \let\tkzaxpos\pgfmathresult% \def\tkzbxpos{0} \else% \pgfmathadd{\tkzRAxpos}{-\tkzRBxpos} \let\tkzbxpos\pgfmathresult% \def\tkzaxpos{0} \fi% \begin{scope}[xshift=\tkzaxpos cm] \grEmptyPath[#1,RS=0]{#2} \end{scope} \begin{scope}[xshift=\tkzbxpos cm] \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RS} \edef\tkzb@stemp{\cmdGR@cl@RB} \grEmptyPath[#1,RA=\tkzb@stemp,prefix=\tkzb@ptemp,RS=\tkzb@rtemp]{#3} \end{scope} \pgfmathsetcounter{tkz@gr@p}{#2-1} \pgfmathsetcounter{tkz@gr@e}{#3-1} \edef\tkz@auxctp{\thetkz@gr@e} \foreach \cpx in {0,...,\tkz@auxctp}{% \EdgeFromOneToAll{\cmdGR@cl@prefixx}{\cmdGR@cl@prefix}{\cpx}{#2} }% \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grTriangularGrid %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grTriangularGrid}[2][]{% \begingroup% \setkeys[GR]{cl}{#1} \ifcase\cmdGR@cl@form \or %<––––––––––––––––––––– form 1 equilateral triangle ––––––––––––––––––––––––> \pgfmathsetcounter{tkz@gr@a}{#2-1} %\pgfmathsetcounter{tkz@gr@b}{#2} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \lg in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@b}{#2-\lg} \setcounter{tkz@gr@b}{\thetkz@gr@b} \edef\tkzb@rtemp{\cmdGR@cl@RA} \edef\tkzb@ptemp{\cmdGR@cl@prefix} \pgfmathmultiply{\cmdGR@cl@RA}{\lg} \let\myresult\pgfmathresult \pgfmathparse{\cmdGR@cl@RA*\lg/2} \let\tkzaxpos\pgfmathresult \begin{scope}[xshift=\tkzaxpos cm] \grPath[#1,% RA = \tkzb@rtemp,% RS = \myresult,% prefix = \tkzb@ptemp,% num = \lg]{\thetkz@gr@b}% \end{scope}% } \or %<––––––––––––––––––––––––––– form 2 right triangle ––––––––––––––––––––––––> \pgfmathsetcounter{tkz@gr@a}{#2-1} % \pgfmathsetcounter{tkz@gr@b}{#2} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \lg in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@b}{#2-\lg} \setcounter{tkz@gr@b}{\thetkz@gr@b} \edef\tkzb@rtemp{\cmdGR@cl@RA} \edef\tkzb@ptemp{\cmdGR@cl@prefix} \pgfmathmultiply{\cmdGR@cl@RA}{\lg} \let\myresult\pgfmathresult \grPath[#1,% RA = \tkzb@rtemp,% RS = \myresult,% prefix = \tkzb@ptemp,% num = \lg,form=1]{\thetkz@gr@b}% } \or \pgfmathsetcounter{tkz@gr@a}{#2-1} \pgfmathsetcounter{tkz@gr@b}{#2} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \lg in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@b}{#2-\lg} \setcounter{tkz@gr@b}{\thetkz@gr@b} \edef\tkzb@rtemp{\cmdGR@cl@RA} \edef\tkzb@ptemp{\cmdGR@cl@prefix} \pgfmathmultiply{\cmdGR@cl@RA}{\lg} \let\myresult\pgfmathresult \begin{scope}[xshift=\myresult cm] \grPath[#1,% RA = \tkzb@rtemp,% RS = \myresult,% prefix = \tkzb@ptemp,% num = \lg,form=1]{\thetkz@gr@b}% \end{scope}% } \fi% \pgfmathsetcounter{tkz@gr@a}{#2-2} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@e}{\thetkz@gr@a-\V@x} \edef\tkz@auxctpb{\thetkz@gr@e} \foreach \V@y in {0,...,\tkz@auxctpb}{% \pgfmathsetcounter{tkz@gr@b}{\V@y+1} \Edge(\cmdGR@cl@prefix\V@x\grLabelSep\V@y)% (\cmdGR@cl@prefix\V@x\grLabelSep\thetkz@gr@b) \pgfmathsetcounter{tkz@gr@p}{\V@x+1} \Edge(\cmdGR@cl@prefix\V@x\grLabelSep\thetkz@gr@b)% (\cmdGR@cl@prefix\thetkz@gr@p\grLabelSep\V@y) }% } \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grHeawood %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grHeawood}[1][]{% #1 options #2 ordre du graphe \begingroup% \setkeys[GR]{cl}{#1}% \grCycle[#1]{14} \EdgeInGraphMod*{\cmdGR@cl@prefix}{14}{5}{0}{2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grCirculant #1 option #2 vertex #3 add k %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grCirculant}[3][]{% \begingroup% \setkeys[GR]{cl}{#1} \grEmptyCycle[#1]{#2}% \pgfmathisprime{#2}% \ifnum\pgfmathresult=1\relax \foreach \kci in {#3}{% \EdgeInGraphMod{\cmdGR@cl@prefix}{#2}{\kci}}% \else \foreach \kci in {#3}{% \pgfmathisfactor{#2}{\kci}% \ifnum\pgfmathresult=1\relax \pgfmathsetcounter{tkz@gr@a}{\kci-1} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \start in {0,...,\tkz@auxctp}{% \setcounter{tkz@gr@i}{\start}% \setcounter{tkz@gr@n}{#2}% \whiledo{\not\equal{\value{tkz@gr@n}}{\start}}{% \pgfmathsetcounter{tkz@gr@n}{Mod(\thetkz@gr@i+\kci,#2)} \Edge(\cmdGR@cl@prefix\thetkz@gr@i)% (\cmdGR@cl@prefix\thetkz@gr@n)% \pgfmathsetcounter{tkz@gr@i}{\thetkz@gr@n}% }% }% \else \EdgeInGraphMod{\cmdGR@cl@prefix}{#2}{\kci} \fi }% \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grPetersenG %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grGeneralizedPetersen}[3][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grCycle[#1]{#2} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@pptemp{\cmdGR@cl@prefixx} \edef\tkzb@ptemp{\cmdGR@cl@prefix} \grCirculant[#1,RA=\tkzb@rtemp,prefix=\tkzb@pptemp]{#2}{#3} \EdgeIdentity{\tkzb@ptemp}{\cmdGR@cl@prefixx}{#2} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grPetersen %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grStartwo}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@e}{3*#2-2} \pgfmathsetcounter{tkz@gr@a}{3*#2-1} \grEmptyCycle[#1]{\thetkz@gr@a} \EdgeInGraphMod{\cmdGR@cl@prefix}{\thetkz@gr@a}{#2}% \endgroup% } \newcommand*{\grPetersen}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grCycle[#1]{5}% \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grStartwo[#1,RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{2} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{5} \or \grCycle[#1]{6} \begin{scope}[rotate=30] \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grStar[#1,RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{4} \end{scope} \setcounter{tkz@gr@a}{2} \foreach \V@x in {0,...,5}{% \ifthenelse{\equal{\thetkz@gr@a}{-1}}{% \setcounter{tkz@gr@a}{2}}{% }% \Edge(\cmdGR@cl@prefix\V@x)(\cmdGR@cl@prefixx\thetkz@gr@a) \addtocounter{tkz@gr@a}{-1}% }% \or \grEmptyStar[#1]{10} \EdgeInGraphLoop{\cmdGR@cl@prefix}{9} \EdgeInGraphMod*{\cmdGR@cl@prefix}{9}{4}{0}{3} \foreach \V@x in {2,5,8}{% \Edge(\cmdGR@cl@prefix\V@x)(\cmdGR@cl@prefix 9)}% \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grPlatonic %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grTetrahedral}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \begin{scope}[rotate=90] \grWheel[#1]{4}% \end{scope} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grOctahedral %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grOctahedral}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grComplete[#1]{3}% \begin{scope}[rotate=-60] \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grComplete[#1,RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{3}% \end{scope} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{3} \EdgeMod{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{3}{1} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grCubicalGraph %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grCubicalGraph}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grCycle[#1]{4} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCycle[#1,RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{4} \ifcase\cmdGR@cl@form \or \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{4} \or \EdgeMod*{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{4}{1}{2} \EdgeMod*{\cmdGR@cl@prefixx}{\cmdGR@cl@prefix}{4}{1}{2} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grIcosahedral %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grIcosahedral}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grCycle[#1]{6}% \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCirculant[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{6}{2} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{6} \EdgeMod{\cmdGR@cl@prefixx}{\cmdGR@cl@prefix}{6}{1} \EdgeMod{\cmdGR@cl@prefixx}{\cmdGR@cl@prefix}{6}{-1} \or \grCycle[#1]{3} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{6}% \begin{scope}[rotate=60] \edef\tkzb@rtemp{\cmdGR@cl@RC} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \grCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{3}% \end{scope} \setcounter{tkz@gr@a}{2} \foreach \st in {5,0,1}{% \foreach \v in {0,1,2}{% \pgfmathsetcounter{tkz@gr@n}{Mod((\thetkz@gr@a*\v)+\st,6)}% \Edge(\cmdGR@cl@prefix\v)(\cmdGR@cl@prefixx\thetkz@gr@n) }% }% \setcounter{tkz@gr@a}{2} \foreach \v in {0,1,2}{% \foreach \st in {0,1,2}{% \pgfmathsetcounter{tkz@gr@n}{Mod(\thetkz@gr@a*\v+\st,6)}% \Edge(\cmdGR@cl@prefixxx\v)(\cmdGR@cl@prefixx\thetkz@gr@n) }% }% \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grDodecahedral %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grDodecahedral}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grCycle[#1]{10} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCirculant[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{10}{2} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{10} \or \grCycle[#1]{5} \begin{scope}[rotate=36] \edef\tkzb@rtemp{\cmdGR@cl@RC} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \grEmptyCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{5} \end{scope} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grEmptyCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{5} \begin{scope}[rotate=36] \edef\tkzb@rtemp{\cmdGR@cl@RD} \edef\tkzb@ptemp{\cmdGR@cl@prefixxxx} \grCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{5}% \end{scope} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{5} \EdgeIdentity{\cmdGR@cl@prefixxx}{\cmdGR@cl@prefixxxx}{5} \EdgeIdentity{\cmdGR@cl@prefixx}{\cmdGR@cl@prefixxx}{5} \EdgeMod{\cmdGR@cl@prefixx}{\cmdGR@cl@prefixxx}{5}{-1} \or \grCycle[#1]{5} \begin{scope}[rotate=36] \edef\tkzb@rtemp{\cmdGR@cl@RC} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \grEmptyCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{5} \end{scope} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{10} \EdgeInGraphLoop{\cmdGR@cl@prefixxx}{5} \EdgeDoubleMod{\cmdGR@cl@prefix}{5}{0}{1}% {\cmdGR@cl@prefixx}{10}{0}{2}{5} \EdgeDoubleMod{\cmdGR@cl@prefixxx}{5}{0}{1}% {\cmdGR@cl@prefixx}{10}{1}{2}{5} \or \grLCF[#1]{10,7,4,-4,-7,10,-4,7,-7,4}{2} \or \grCycle[#1]{10} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grEmptyCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{6} \begin{scope}[rotate=45] \edef\tkzb@rtemp{\cmdGR@cl@RC} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \grEmptyCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{4}% \end{scope} \setcounter{tkz@gr@a}{0} \foreach \v in {1,4,6,9}{% \Edge(\cmdGR@cl@prefix\v)(\cmdGR@cl@prefixxx\thetkz@gr@a) \stepcounter{tkz@gr@a} }% \setcounter{tkz@gr@a}{0} \foreach \v in {2,1,5,4}{% \Edge(\cmdGR@cl@prefixx\v)(\cmdGR@cl@prefixxx\thetkz@gr@a) \stepcounter{tkz@gr@a} }% \setcounter{tkz@gr@a}{0} \foreach \v in {0,2,3,5,7,8}{% \Edge(\cmdGR@cl@prefix\v)(\cmdGR@cl@prefixx\thetkz@gr@a) \stepcounter{tkz@gr@a} }% \Edge(\cmdGR@cl@prefixxx0)(\cmdGR@cl@prefixxx3) \Edge(\cmdGR@cl@prefixxx1)(\cmdGR@cl@prefixxx2) \Edge(\cmdGR@cl@prefixx0)(\cmdGR@cl@prefixx1) \Edge(\cmdGR@cl@prefixx0)(\cmdGR@cl@prefixx5) \Edge(\cmdGR@cl@prefixx3)(\cmdGR@cl@prefixx2) \Edge(\cmdGR@cl@prefixx3)(\cmdGR@cl@prefixx4) \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grMobiusKantor %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grMobiusKantor}[1][]{% #1 options #2 ordre du graphe \begingroup% \setkeys[GR]{cl}{#1} \ifcase\cmdGR@cl@form \or \grCycle[#1]{16} \EdgeInGraphMod*{\cmdGR@cl@prefix}{16}{5}{0}{2} \or \grCycle[#1]{8} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCirculant[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{8}{3} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{8} \or \grCirculant[#1]{8}{3} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grCycle[#1,RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{8} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{8} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grMoebiusLadder %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grMobiusLadder}[2][]{% \begingroup% \setkeys[GR]{cl}{#1} \grEmptyCycle[#1]{#2} \pgfmathsetcounter{tkz@gr@p}{#2-1} \edef\tkzb@rtemp{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \grEmptyCycle[RA=\tkzb@rtemp,prefix=\tkzb@ptemp]{#2}% \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{#2} \EdgeInGraphLoop*{\cmdGR@cl@prefix}{#2} \EdgeInGraphLoop*{\cmdGR@cl@prefixx}{#2} \Edge(\cmdGR@cl@prefix0)(\cmdGR@cl@prefixx\thetkz@gr@p) \Edge(\cmdGR@cl@prefixx0)(\cmdGR@cl@prefix\thetkz@gr@p) \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grCocktailParty %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grCocktailParty}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@p}{#2-1} \grPath[#1,RS=0]{#2} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RS} \grPath[#1,prefix=\tkzb@ptemp,RS=\tkzb@rtemp]{#2} \edef\tkz@auxctp{\thetkz@gr@p} \foreach \cpx in {0,...,\tkz@auxctp}{% \EdgeFromOneToComp{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{\cpx}{#2} } \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grCrown %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grCrown}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@gr@p}{#2-1} \grEmptyPath[#1,RS=0]{#2} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RS} \grEmptyPath[#1,prefix=\tkzb@ptemp,RS=\tkzb@rtemp]{#2} \edef\tkz@auxctp{\thetkz@gr@p} \foreach \cpx in {0,...,\thetkz@gr@p}{% \EdgeFromOneToComp{\cmdGR@cl@prefix}{\cmdGR@cl@prefixx}{\cpx}{#2} } \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grMcGee %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grMcGee}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{-12,7,-7}{8} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grRobertson %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grRobertson}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{8,4,7,4,8,5,7,4,7,8,4,5,7,8,4,8,4,8,4}{1} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grRobertsonWegner %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grRobertsonWegner}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{6,12}{15} \EdgeInGraphMod{\cmdGR@cl@prefix}{30}{9}{1}{6} \EdgeInGraphMod*{\cmdGR@cl@prefix}{30}{15}{2}{6} \EdgeInGraphMod*{\cmdGR@cl@prefix}{30}{9}{3}{6} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grDoyle %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grDoyle}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grCycle[#1]{9} \begin{scope}[rotate=18] \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{9}{2} \end{scope} \EdgeMod{\cmdGR@cl@prefixx}{\cmdGR@cl@prefix}{9}{1} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{9}{4} \EdgeIdentity{\cmdGR@cl@prefix}{\cmdGR@cl@prefixxx}{9} \EdgeMod{\cmdGR@cl@prefixx}{\cmdGR@cl@prefixxx}{9}{1} \or \grCycle[#1]{27} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{0}{3} {\cmdGR@cl@prefix}{27}{13}{3}{9} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{1}{3} {\cmdGR@cl@prefix}{27}{5}{3}{9} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{0}{3} {\cmdGR@cl@prefix}{27}{20}{3}{9} \or \grCycle[#1]{27} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{17}{1} {\cmdGR@cl@prefix}{27}{10}{-2}{4} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{26}{1} {\cmdGR@cl@prefix}{27}{19}{-2}{4} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{8}{1} {\cmdGR@cl@prefix}{27}{1}{-2}{4} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{4}{1} {\cmdGR@cl@prefix}{27}{27}{-2}{3} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{8}{1} {\cmdGR@cl@prefix}{27}{1}{-2}{4} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{14}{1} {\cmdGR@cl@prefix}{27}{7}{-2}{2} \EdgeDoubleMod{\cmdGR@cl@prefix}{27}{23}{1} {\cmdGR@cl@prefix}{27}{16}{-2}{2} \Edge(\cmdGR@cl@prefix9)(\cmdGR@cl@prefix13)% \Edge(\cmdGR@cl@prefix18)(\cmdGR@cl@prefix22)% \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grDesargues %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grDesargues}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grLCF[#1]{5,-5,9,-9}{5} \or \grGeneralizedPetersen[#1]{10}{3} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grKonisberg %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % #1 prefix #2 indice #2 prefix #3 indice choisie entre #4 et #5 ... \newcommand{\grKonisberg}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grCycle[#1]{4} \Edge[style={bend left}](\cmdGR@cl@prefix1)(\cmdGR@cl@prefix2) \Edge[style={bend left}](\cmdGR@cl@prefix2)(\cmdGR@cl@prefix3) \Edge(\cmdGR@cl@prefix0)(\cmdGR@cl@prefix2) \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grWong %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grWong}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{8,4,12,4,8,4}{5} \EdgeInGraphMod*{\cmdGR@cl@prefix}{30}{15}{0}{3} \EdgeInGraphMod*{\cmdGR@cl@prefix}{30}{16}{1}{6} \EdgeInGraphMod*{\cmdGR@cl@prefix}{30}{18}{4}{6} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grTutte %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grTutteCoxeter}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{-13,-9,7,-7,9,13}{5} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grFoster %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grFoster}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{17,-9,37,-37,9,-17}{15} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grFolkman %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grFolkman}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{5,-7,-7,5}{5} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grFranklin %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grFranklin}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{5,-5}{6} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grNauru %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grNauru}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{5, −9, 7, −7, 9, −5}{4} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grDick %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grDick}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{5,-5,13,-13}{8} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grHarries %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand{\grHarries}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \grLCF[#1]{-29,-19,-13,13,21,-27,27,33,-13,13,19,-21,-33,29}{5} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grAndrasfai %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcounter{tkza@tmp} \newcommand*{\grAndrasfai}[2][]{% \begingroup \setkeys[GR]{cl}{#1}% \pgfmathsetcounter{tkz@bg@cnt}{3*#2-1} \grEmptyCycle[#1]{\thetkz@bg@cnt} \pgfmathsetcounter{tkza@tmp}{\thetkz@bg@cnt/2} \pgfmathsetcounter{tkza@tmp}{\thetkz@bg@cnt+1} \pgfmathsetcounter{tkz@gr@p}{1} \whiledo{\value{tkz@gr@p} < \value{tkza@tmp}}{% \EdgeInGraphMod*{\cmdGR@cl@prefix}{\thetkz@bg@cnt}{\thetkz@gr@p}{0}{1} \pgfmathsetcounter{tkz@gr@p}{\thetkz@gr@p+3} } \endgroup } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grGrotzsch %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grGrotzsch}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \begin{scope}[rotate=18]% \grStar[#1]{6}% \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{5}% \Edges(\cmdGR@cl@prefix0,\cmdGR@cl@prefixx1,% \cmdGR@cl@prefix2,\cmdGR@cl@prefixx3,% \cmdGR@cl@prefix4,\cmdGR@cl@prefixx0,% \cmdGR@cl@prefix1,\cmdGR@cl@prefixx2,% \cmdGR@cl@prefix3,\cmdGR@cl@prefixx4,\cmdGR@cl@prefix0) \end{scope} \or \begin{scope}[rotate=18]% \grStar[#1]{6}% \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \begin{scope}[rotate=-36]% \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{5}{2}% \end{scope} \EdgeDoubleMod{a}{5}{0}{1}% {b}{5}{1}{1}{4} \EdgeIdentity{a}{b}{5} \end{scope} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grLevi %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grLevi}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grLCF[#1]{-13,-9,7,-7,9,13}{5} \or \grCycle[#1]{10} \EdgeInGraphMod{\cmdGR@cl@prefix}{10}{5} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10} \EdgeInGraphMod{\cmdGR@cl@prefixxx}{10}{4} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grPappus %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grPappus}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grLCF[#1]{5,7,-7,7,-7,-5}{3} \or \begin{scope}[rotate=30]% \grCycle[#1]{6} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{6} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{6} \EdgeDoubleMod{\cmdGR@cl@prefixxx}{6}{0}{2}% {\cmdGR@cl@prefixx}{6}{5}{2}{2} \EdgeDoubleMod{\cmdGR@cl@prefixxx}{6}{5}{2}% {\cmdGR@cl@prefix}{6}{1}{2}{2} \EdgeDoubleMod{\cmdGR@cl@prefixx}{6}{0}{2}% {\cmdGR@cl@prefix}{6}{0}{2}{2} \end{scope} \or \begin{scope}[rotate=30] \grCycle[#1]{6} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{6}{2} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{6} \EdgeIdentity{\cmdGR@cl@prefixx}{\cmdGR@cl@prefix}{6} \EdgeInGraphMod{\cmdGR@cl@prefixxx}{6}{3} \end{scope} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grChvatal %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grChvatal}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \begin{scope}[rotate=45] \grCycle[#1]{4} \end{scope} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \begin{scope}[rotate=22.25] \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{8} \end{scope} \EdgeInGraphMod{\cmdGR@cl@prefixx}{8}{4} \EdgeInGraphMod*{\cmdGR@cl@prefixx}{8}{1}{1}{2} \EdgeInGraphMod*{\cmdGR@cl@prefixx}{8}{3}{1}{2} \EdgeDoubleMod{\cmdGR@cl@prefix}{4}{0}{1}% {\cmdGR@cl@prefixx}{8}{1}{2}{3} \EdgeDoubleMod{\cmdGR@cl@prefix}{4}{0}{1}% {\cmdGR@cl@prefixx}{8}{0}{2}{3} \or \begin{scope}[rotate=18] \grCycle[#1]{5} \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{5} \end{scope} \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{2} \EdgeDoubleMod{\cmdGR@cl@prefix}{5}{0}{1}% {\cmdGR@cl@prefixx}{5}{1}{1}{4} \EdgeDoubleMod{\cmdGR@cl@prefix}{5}{0}{1}% {\cmdGR@cl@prefixx}{5}{4}{1}{4} \EdgeFromOneToSel{\cmdGR@cl@prefixxx}{\cmdGR@cl@prefixx}{0}{4,0,1} \EdgeFromOneToSel{\cmdGR@cl@prefixxx}{\cmdGR@cl@prefixx}{1}{1,2,3} \Edge(\cmdGR@cl@prefixx3)(\cmdGR@cl@prefixx4) \Edge(\cmdGR@cl@prefixx0)(\cmdGR@cl@prefixxx1) \Edge(\cmdGR@cl@prefixx2)(\cmdGR@cl@prefixxx0) \or \grCycle[#1]{12} \Edges(\cmdGR@cl@prefix0,\cmdGR@cl@prefix6,\cmdGR@cl@prefix3,% \cmdGR@cl@prefix8,\cmdGR@cl@prefix11,\cmdGR@cl@prefix5,% \cmdGR@cl@prefix2,\cmdGR@cl@prefix9,\cmdGR@cl@prefix0) \Edges(\cmdGR@cl@prefix1,\cmdGR@cl@prefix7,\cmdGR@cl@prefix10,% \cmdGR@cl@prefix4,\cmdGR@cl@prefix1) \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grBalaban %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \newcommand*{\grBalaban}[1][]{% \begingroup% \setkeys[GR]{cl}{#1}% \ifcase\cmdGR@cl@form \or \grCycle[#1]{50} \EdgeInGraphMod*{\cmdGR@cl@prefix}{50}{9}{3}{5} \EdgeInGraphMod*{\cmdGR@cl@prefix}{50}{25}{0}{5} \begin{scope}[rotate=12] \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10}{3} \end{scope} \begin{scope}[rotate=24] \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10}{3} \end{scope} \EdgeDoubleMod{\cmdGR@cl@prefix}{50}{1}{5}% {\cmdGR@cl@prefixx}{10}{0}{1}{10} \EdgeDoubleMod{\cmdGR@cl@prefix}{50}{4}{5}% {\cmdGR@cl@prefixxx}{10}{0}{1}{10} \or \begin{scope}[rotate=9] \grCycle[#1]{10} \end{scope} \begin{scope}[rotate=-9] \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10} \end{scope} \begin{scope}[rotate=6] \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{30} \EdgeInGraphMod*{\cmdGR@cl@prefixxx}{30}{1}{0}{3} \EdgeInGraphMod*{\cmdGR@cl@prefixxx}{30}{1}{1}{3} \EdgeInGraphMod*{\cmdGR@cl@prefixxx}{30}{15}{1}{3} \end{scope} \begin{scope}[rotate=9] \edef\tkzb@ptemp{\cmdGR@cl@prefixxxx} \edef\tkzb@rtemp{\cmdGR@cl@RD} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{20} \EdgeInGraphMod*{\cmdGR@cl@prefixxxx}{20}{7}{0}{2} \EdgeInGraphMod*{\cmdGR@cl@prefixxxx}{20}{5}{1}{2} \end{scope} \EdgeDoubleMod{\cmdGR@cl@prefix}{10}{0}{1} {\cmdGR@cl@prefixxx}{30}{0}{3}{9} \EdgeDoubleMod{\cmdGR@cl@prefixx}{10}{0}{1}% {\cmdGR@cl@prefixxx}{30}{29}{3}{9} \EdgeDoubleMod{\cmdGR@cl@prefixxx}{30}{0}{3}% {\cmdGR@cl@prefixxxx}{20}{0}{2}{9} \EdgeDoubleMod{\cmdGR@cl@prefixxx}{30}{2}{3}% {\cmdGR@cl@prefixxxx}{20}{1}{2}{9} \or \grEmptyCycle[#1]{10} \begin{scope}[rotate=9] \edef\tkzb@ptemp{\cmdGR@cl@prefixx} \edef\tkzb@rtemp{\cmdGR@cl@RB} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{20} \end{scope} \begin{scope}[rotate=13] \edef\tkzb@ptemp{\cmdGR@cl@prefixxx} \edef\tkzb@rtemp{\cmdGR@cl@RC} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10} \end{scope} \begin{scope}[rotate=-13] \edef\tkzb@ptemp{\cmdGR@cl@prefixxxx} \edef\tkzb@rtemp{\cmdGR@cl@RD} \grEmptyCycle[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{10} \end{scope} \begin{scope}[rotate=9] \edef\tkzb@ptemp{\cmdGR@cl@prefixxxxx} \edef\tkzb@rtemp{\cmdGR@cl@RE} \grCirculant[#1,prefix=\tkzb@ptemp,RA=\tkzb@rtemp]{20}{6} \end{scope} \EdgeIdentity{\cmdGR@cl@prefixx}{\cmdGR@cl@prefixxxxx}{20} \EdgeDoubleMod{\cmdGR@cl@prefix}{10}{0}{1}% {\cmdGR@cl@prefixx}{20}{0}{2}{10} \EdgeDoubleMod{\cmdGR@cl@prefix}{10}{0}{1}% {\cmdGR@cl@prefixx}{20}{19}{2}{10} \EdgeInGraphMod{\cmdGR@cl@prefix}{10}{5} \EdgeDoubleMod{\cmdGR@cl@prefixxx}{10}{0}{1}% {\cmdGR@cl@prefixx}{20}{0}{2}{10} \EdgeDoubleMod{\cmdGR@cl@prefixxxx}{10}{0}{1}% {\cmdGR@cl@prefixx}{20}{19}{2}{10} \EdgeDoubleMod{\cmdGR@cl@prefixxxx}{10}{0}{1}% {\cmdGR@cl@prefixxx}{10}{1}{1}{10} \EdgeDoubleMod{\cmdGR@cl@prefixxxx}{10}{1}{1}% {\cmdGR@cl@prefixxx}{10}{0}{1}{10} \fi \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % Labels %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % #2 label/prefix/num \define@cmdkey [GR] {WL} {color}[black]{} \define@cmdkey [GR] {WL} {labelstyle}{} \define@cmdkey [GR] {WL} {size}{} \define@cmdkey [GR] {WL} {style}{} \presetkeys [GR] {WL} {color = black,% labelstyle = {},% size = {},% style = {}}{} \newcommand{\grWriteExplicitLabels}[2][]{% \begingroup% \setkeys[GR]{WL}{#1}% \foreach \text/\where in {#2}{% \node at (\where) {\text}; }% \endgroup% } \newcommand{\grWriteExplicitLabel}[2][]{% \begingroup% \setkeys[GR]{cl}{#1}% \node at (\where) {\text}; \endgroup% }% %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % AssignVertexLabel %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \tikzset{AssignStyle/.style={}} \define@cmdkey [GR] {AVL} {color}{} \define@cmdkey [GR] {AVL} {size}{} \define@cmdkey [GR] {AVL} {mathsize}{} \define@boolkey[GR] {AVL} {Math}[true]{} \presetkeys [GR] {AVL} {size = \normalsize,% mathsize = \displaystyle,% color = black,% Math = false}{} \newcommand*{\AssignVertexLabel}[3][]{% \begingroup% \setkeys[GR]{AVL}{#1} \foreach \name [count=\xi from 0] in {#3}{% \ifGR@AVL@Math% \node at (#2\xi) {$\textcolor{\cmdGR@AVL@color}{\cmdGR@AVL@mathsize\name}$}; \else \node[AssignStyle] at (#2\xi) {\textcolor{\cmdGR@AVL@color}{\cmdGR@AVL@size\name}}; \fi} \endgroup% } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % grEdgeForTree %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % #1 prefix #2 indice #2 prefix #3 indice choisie entre #4 et #5 ... \newcommand{\grEdgeForTree}[5]{% \begingroup% \foreach \V@x in {#4,...,#5}{% \Edge(#1#2)(#3\V@x)% }% \endgroup% } \newcommand{\grSubtreeOfCage}[3][]{% \begingroup \setkeys[GR]{cl}{#1}% \edef\tkzb@rtemp{\cmdGR@cl@RA} \edef\tkzb@rtempx{\cmdGR@cl@RB} \edef\tkzb@ptemp{\cmdGR@cl@prefix} \ifthenelse{\isodd{#3}}% % odd girth {% \pgfmathsetcounter{tkz@gr@a}{(#3-3)/2} \Vertex{\cmdGR@cl@prefix 0\grLabelSep 0} \edef\tkz@auxctp{\thetkz@gr@a} \foreach \V@x in {0,...,\tkz@auxctp}{% \pgfmathsetcounter{tkz@gr@b}{#2*((#2-1)^\V@x)}% \pgfmathsetmacro{\sep@path}{\tkzb@rtemp/((#2-1)^\V@x)}% \pgfmathsetmacro{\y@h}{\tkzb@rtempx*(\V@x+1)}% \pgfmathsetcounter{tkz@gr@c}{\V@x+1}% \grEmptyPath[% prefix=\tkzb@ptemp\thetkz@gr@c\grLabelSep, form=2, RA=\sep@path, x=0, y=\y@h]{\thetkz@gr@b}% }% % edges from the root of the tree \EdgeFromOneToAll{\tkzb@ptemp0\grLabelSep}% {\tkzb@ptemp1\grLabelSep}{0}{#2} % ca = levels from where extra edges emerge % cb = edges per vertex \pgfmathsetcounter{tkz@gr@a}{\thetkz@gr@a-1} \edef\tkz@auxctpa{\thetkz@gr@a} \foreach \V@y in {0,...,\tkz@auxctpa}{% \pgfmathsetcounter{tkz@gr@b}{#2*(#2-1)^\V@y-1} \edef\tkz@auxctpb{\thetkz@gr@b} \foreach \a in {0,...,\tkz@auxctpb}{% \pgfmathsetcounter{tkz@gr@c}{\a*(#2-1)}% \pgfmathsetcounter{tkz@gr@d}{\a*(#2-1)+(#2-2)}% \pgfmathsetcounter{tkz@gr@ta}{\V@y+1} \pgfmathsetcounter{tkz@gr@tb}{\V@y+2} \EdgeFromOneToSeq{\tkzb@ptemp\thetkz@gr@ta\grLabelSep}% {\tkzb@ptemp\thetkz@gr@tb\grLabelSep}{\a}% {\thetkz@gr@c}{\thetkz@gr@d} }% }% }% % even girth {% \pgfmathsetcounter{tkz@gr@a}{(#3-2)/2} \foreach \V@x in {0,...,\thetkz@gr@a}{% \pgfmathsetcounter{tkz@gr@b}{2*((#2-1)^\V@x)}% \pgfmathsetmacro{\sep@path}{\tkzb@rtemp/((#2-1)^\V@x)}% \pgfmathsetmacro{\y@h}{\tkzb@rtempx*\V@x}% \pgfmathsetcounter{tkz@gr@c}{\V@x}% \grEmptyPath[% prefix=\tkzb@ptemp\thetkz@gr@c\grLabelSep, form=2, RA=\sep@path, x=0, y=\y@h]{\thetkz@gr@b}% }% %%%%% \Edge% (\tkzb@ptemp0\grLabelSep0)% (\tkzb@ptemp0\grLabelSep1) %%%% \pgfmathsetcounter{tkz@gr@a}{\thetkz@gr@a-1} \foreach \V@y in {0,...,\thetkz@gr@a}{% \pgfmathsetcounter{tkz@gr@b}{2*(#2-1)^\V@y-1} \foreach \a in {0,...,\thetkz@gr@b}{% \pgfmathsetcounter{tkz@gr@c}{\a*(#2-1)}% \pgfmathsetcounter{tkz@gr@d}{\a*(#2-1)+(#2-2)}% \pgfmathsetcounter{tkz@gr@ta}{\V@y} \pgfmathsetcounter{tkz@gr@tb}{\V@y+1} \EdgeFromOneToSeq{\tkzb@ptemp\thetkz@gr@ta\grLabelSep}% {\tkzb@ptemp\thetkz@gr@tb\grLabelSep}{\a}% {\thetkz@gr@c}{\thetkz@gr@d} }% }% }% \endgroup } %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> % The End %<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––> \catcode`\@=\tkzAtCode\relax \endinput