diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/profcollege/PfCGrimuku.tex | 222 |
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 |