summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex')
-rw-r--r--Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex222
1 files changed, 222 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex b/Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex
new file mode 100644
index 00000000000..81e667533a3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex
@@ -0,0 +1,222 @@
+%%%
+% Grimuku
+%%%
+\setKVdefault[Grimuku]{TLargeur=7,Solution=false,Largeur=30pt,CouleurCase=0.7white}%
+\defKV[Grimuku]{CouleurSolution=\setKV[Grimuku]{Solution}}%
+
+\newtoks\toklistegrimukupdt
+\newtoks\toklistegrimukunb
+
+\def\UpdatetoksGrimCases#1/#2/#3/#4\nil{\addtotok\toklistegrimukunb{"*",}\addtotok\toklistegrimukupdt{"#1",}\addtotok\toklistegrimukupdt{"#2",}\addtotok\toklistegrimukupdt{"#3",}\addtotok\toklistegrimukupdt{"#4",}}%
+\def\UpdatetoksGrimCasesNb#1\nil{\addtotok\toklistegrimukunb{"#1",}\addtotok\toklistegrimukupdt{"",}\addtotok\toklistegrimukupdt{"",}\addtotok\toklistegrimukupdt{"",}\addtotok\toklistegrimukupdt{"",}}%
+
+\NewDocumentCommand\Grimuku{om}{%
+ \toklistegrimukunb{}%
+ \toklistegrimukupdt{}%
+ \useKVdefault[Grimuku]%
+ \setKV[Grimuku]{#1}%
+ \setsepchar[*]{,*/}\reademptyitems%
+ \readlist*\ListeCasesGrim{#2}%
+ \xdef\PfCGrimLargeur{\useKV[Grimuku]{TLargeur}}%
+ \xdef\PfCGrimHauteur{\fpeval{\ListeCasesGrimlen/\PfCGrimLargeur}}%
+ \savecomparemode%
+ \comparestrict%
+ \foreachitem\compteur\in\ListeCasesGrim{%
+ \StrCount{\ListeCasesGrim[\compteurcnt]}{/}[\PfCTestLongueur]%
+ \xintifboolexpr{\PfCTestLongueur>0}{%
+ \expandafter\UpdatetoksGrimCases\compteur\nil%
+ }{%
+ \expandafter\UpdatetoksGrimCasesNb\compteur\nil%
+ }%
+ }%
+ \restorecomparemode%
+ \BuildGrimuku{\the\toklistegrimukupdt}{\the\toklistegrimukunb}%
+}%
+
+\NewDocumentCommand\BuildGrimuku{mm}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ color CouleurSolution,CouleurCase;
+
+ boolean Solution;
+ Solution=\useKV[Grimuku]{Solution};
+ if Solution:
+ CouleurSolution=\useKV[Grimuku]{CouleurSolution};
+ fi;
+ Unite=\useKV[Grimuku]{Largeur};
+ Largeur=\useKV[Grimuku]{TLargeur};
+ Hauteur=\PfCGrimHauteur;
+
+ CouleurCase=\useKV[Grimuku]{CouleurCase};
+
+ path Base;
+ Base=(unitsquare scaled Unite) shifted ((0,0)-(Unite/2,Unite/2));
+
+
+ vardef TraceFleche(expr a,b,c)=
+ if a="g":
+ drawarrow (Unite*(b-0.4,c))--(Unite*(b-0.75,c));
+ elseif a="gh":
+ drawarrow (Unite*(b-0.4,c))--(Unite*(b-0.6,c))--(Unite*(b-0.6,c+0.5));
+ elseif a="gb":
+ drawarrow (Unite*(b-0.4,c))--(Unite*(b-0.6,c))--(Unite*(b-0.6,c-0.5));
+ elseif a="d":
+ drawarrow (Unite*(b+0.4,c))--(Unite*(b+0.75,c));
+ elseif a="dh":
+ drawarrow (Unite*(b+0.4,c))--(Unite*(b+0.6,c))--(Unite*(b+0.6,c+0.5));
+ elseif a="db":
+ drawarrow (Unite*(b+0.4,c))--(Unite*(b+0.6,c))--(Unite*(b+0.6,c-0.5));
+ elseif a="h":
+ drawarrow (Unite*(b,c+0.15))--(Unite*(b,c+0.5));
+ elseif a="hd":
+ drawarrow (Unite*(b,c+0.15))--(Unite*(b,c+0.35))--(Unite*(b+0.5,c+0.35));
+ elseif a="hg":
+ drawarrow (Unite*(b,c+0.15))--(Unite*(b,c+0.35))--(Unite*(b-0.5,c+0.35));
+ elseif a="b":
+ drawarrow (Unite*(b,c-0.15))--(Unite*(b,c-0.5));
+ elseif a="bd":
+ drawarrow (Unite*(b,c-0.15))--(Unite*(b,c-0.35))--(Unite*(b+0.5,c-0.35));
+ elseif a="bg":
+ drawarrow (Unite*(b,c-0.15))--(Unite*(b,c-0.35))--(Unite*(b-0.5,c-0.35));
+ fi;
+ enddef;
+
+ vardef EcritureProduits(text t)=
+ n:=0;
+ m:=-1;
+ for p_=t:
+ q:=n div Largeur;
+ r:=n mod Largeur;
+ m:=m+1;
+ if (m mod 4)=0:
+ label(TEX(p_),Unite*(r,-q+0.25));
+ elseif (m mod 4)=1:
+ TraceFleche(p_,r,-q+0.25);
+ elseif (m mod 4)=2:
+ label(TEX(p_),Unite*(r,-q-0.25));
+ elseif (m mod 4)=3:
+ TraceFleche(p_,r,-q-0.25);
+ n:=n+1;
+ fi;
+ endfor;
+ enddef;
+
+ vardef Ecriture(text t)=
+ n=0;
+ for p_=t:
+ q:=n div Largeur;
+ r:=n mod Largeur;
+ if p_="*":
+ fill (Base shifted (Unite*(r,-q))) withcolor CouleurCase;
+ draw (Unite*(r-0.5,-q))--(Unite*(r+0.5,-q));
+ else:
+ if Solution:
+ drawoptions(withcolor CouleurSolution);
+ label(TEX(p_),Unite*(r,-q));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+
+ Ecriture(#2);
+ EcritureProduits(#1);
+ % On quadrille
+ for k=0 upto Largeur-1:
+ for l=0 upto Hauteur-1:
+ trace Base shifted(Unite*(k,-l));
+ endfor;
+ endfor;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={color CouleurSolution,CouleurCase;boolean Solution;Solution=\useKV[Grimuku]{Solution}; if Solution:
+ CouleurSolution=\useKV[Grimuku]{CouleurSolution};
+ fi;
+ Unite=\useKV[Grimuku]{Largeur};
+ Largeur=\useKV[Grimuku]{TLargeur};
+ Hauteur=\PfCGrimHauteur;
+ CouleurCase=\useKV[Grimuku]{CouleurCase};
+ };]
+ path Base;
+ Base=(unitsquare scaled Unite) shifted ((0,0)-(Unite/2,Unite/2));
+ %
+ vardef TraceFleche(expr a,b,c)=
+ if a="g":
+ drawarrow (Unite*(b-0.4,c))--(Unite*(b-0.75,c));
+ elseif a="gh":
+ drawarrow (Unite*(b-0.4,c))--(Unite*(b-0.6,c))--(Unite*(b-0.6,c+0.5));
+ elseif a="gb":
+ drawarrow (Unite*(b-0.4,c))--(Unite*(b-0.6,c))--(Unite*(b-0.6,c-0.5));
+ elseif a="d":
+ drawarrow (Unite*(b+0.4,c))--(Unite*(b+0.75,c));
+ elseif a="dh":
+ drawarrow (Unite*(b+0.4,c))--(Unite*(b+0.6,c))--(Unite*(b+0.6,c+0.5));
+ elseif a="db":
+ drawarrow (Unite*(b+0.4,c))--(Unite*(b+0.6,c))--(Unite*(b+0.6,c-0.5));
+ elseif a="h":
+ drawarrow (Unite*(b,c+0.15))--(Unite*(b,c+0.5));
+ elseif a="hd":
+ drawarrow (Unite*(b,c+0.15))--(Unite*(b,c+0.35))--(Unite*(b+0.5,c+0.35));
+ elseif a="hg":
+ drawarrow (Unite*(b,c+0.15))--(Unite*(b,c+0.35))--(Unite*(b-0.5,c+0.35));
+ elseif a="b":
+ drawarrow (Unite*(b,c-0.15))--(Unite*(b,c-0.5));
+ elseif a="bd":
+ drawarrow (Unite*(b,c-0.15))--(Unite*(b,c-0.35))--(Unite*(b+0.5,c-0.35));
+ elseif a="bg":
+ drawarrow (Unite*(b,c-0.15))--(Unite*(b,c-0.35))--(Unite*(b-0.5,c-0.35));
+ fi;
+ enddef;
+ %
+ vardef EcritureProduits(text t)=
+ n:=0;
+ m:=-1;
+ for p_=t:
+ q:=n div Largeur;
+ r:=n mod Largeur;
+ m:=m+1;
+ if (m mod 4)=0:
+ label(LATEX(p_),Unite*(r,-q+0.25));
+ elseif (m mod 4)=1:
+ TraceFleche(p_,r,-q+0.25);
+ elseif (m mod 4)=2:
+ label(LATEX(p_),Unite*(r,-q-0.25));
+ elseif (m mod 4)=3:
+ TraceFleche(p_,r,-q-0.25);
+ n:=n+1;
+ fi;
+ endfor;
+ enddef;
+ %
+ vardef Ecriture(text t)=
+ n=0;
+ for p_=t:
+ q:=n div Largeur;
+ r:=n mod Largeur;
+ if p_="*":
+ fill (Base shifted (Unite*(r,-q))) withcolor CouleurCase;
+ draw (Unite*(r-0.5,-q))--(Unite*(r+0.5,-q));
+ else:
+ if Solution:
+ drawoptions(withcolor CouleurSolution);
+ label(LATEX(p_),Unite*(r,-q));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+
+ Ecriture(#2);
+ EcritureProduits(#1);
+ % On quadrille
+ for k=0 upto Largeur-1:
+ for l=0 upto Hauteur-1:
+ trace Base shifted(Unite*(k,-l));
+ endfor;
+ endfor;
+ \end{mpost}
+ \fi
+} \ No newline at end of file