texlive[64687] Master/texmf-dist: profcollege (12oct22)

commits+karl at tug.org commits+karl at tug.org
Wed Oct 12 22:11:55 CEST 2022


Revision: 64687
          http://tug.org/svn/texlive?view=revision&revision=64687
Author:   karl
Date:     2022-10-12 22:11:55 +0200 (Wed, 12 Oct 2022)
Log Message:
-----------
profcollege (12oct22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf
    trunk/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip
    trunk/Master/texmf-dist/metapost/profcollege/PfCLabyNombre.mp
    trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp

Modified: trunk/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp	                        (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp	2022-10-12 20:11:55 UTC (rev 64687)
@@ -0,0 +1,73 @@
+color CouleurEngrenage;
+
+vardef sin(expr t) = sind(c*t) enddef;
+
+vardef cos(expr t) = cosd(c*t) enddef;
+
+vardef tan(expr t) = sin(t)/cos(t) enddef;
+
+vardef Developpante(expr dp)=
+  save $;
+  path $;
+  $=(dp*u)*(1,0) for t=0 step 0.1 until pi:
+      --((dp*u)*(cos(t)+t*sin(t),sin(t)-t*cos(t)))
+  endfor;
+  $
+enddef;
+
+vardef Entraxe(expr na,nb)=
+  0.5*(ModuleEng/u)*(na+nb)+0.04
+enddef;
+
+vardef Engrenage(expr M,Z,Cc)=%M : Module, Z : nb dents,Cc=Centre
+    % Pour des engrenages dont le profil est une développante de cercle
+  save $;
+  picture $;
+  ModuleEng:=M*u;
+  Dp:=ModuleEng*Z;%Module (mm)
+  
+  De:=Dp+2*ModuleEng;%Diamètre extérieur
+  Dpied:=Dp-2.5*ModuleEng;%Diamètre de pied
+  Alpha:=20;%Angle de pression
+  Db:=Dp*cosd(Alpha);%Diamètre de base
+  
+  pair OPfC,APfC,BPfC,CPfC,Obase[];
+  OPfC=(0,0);
+  path cerclep,cerclee,cercleb,cerclepied;
+  cerclep=cercles(OPfC,0.5*Dp);
+  cerclee=cercles(OPfC,0.5*De);
+  cercleb=cercles(OPfC,0.5*Db);
+  cerclepied=cercles(OPfC,0.5*Dpied);
+  path dd,daction,dsupport[],dperp[],dsymetrie,darret;
+  dd=demidroite(OPfC,OPfC+(0,1));
+  APfC=dd intersectionpoint cerclep;
+  BPfC=dd intersectionpoint cercleb;
+  path profil;
+  profil=(symetrie(rotation(Developpante(0.5*Db/(u)),OPfC,90),OPfC,(0,1)) cutafter cerclee);%0.5*Dp*cosd(Alpha));
+  %CPfC=dd intersectionpoint cerclepied;
+  ReleveAngle:=90-angle(profil intersectionpoint cerclep);
+  dsymetrie=rotation(dd,OPfC,-(360/(4*Z)+ReleveAngle));
+  darret=rotation(dd,OPfC,(360/(4*Z)-ReleveAngle));
+  pair D;
+  D=profil intersectionpoint cerclee;
+  path Profil;
+  Profil=(reverse(cerclepied) cutbefore darret cutafter dd)--profil--(reverse(cerclee) cutbefore demidroite(OPfC,D) cutafter dsymetrie);
+  Profil:=Profil--symetrie(reverse(Profil),OPfC,rotation((0,1),OPfC,-(360/(4*Z)+ReleveAngle)));
+  path ProfilGene;
+  ProfilGene=Profil
+    for k=1 upto Z-1:
+    --rotation(Profil,OPfC,-k*(360/Z))
+  endfor
+  --cycle;
+  $=image(
+      fill ProfilGene withcolor CouleurEngrenage;
+    trace ProfilGene;
+    fill cercles(OPfC,1u) withcolor blanc;
+    trace cercles(OPfC,1u);
+    fill cercles(OPfC,0.85u) withcolor 0.5white;
+    trace cercles(OPfC,0.85u);
+    fill rotation((cercles(OPfC,0.25u) shifted (dd intersectionpoint cerclepied)),OPfC,-(360/(4*Z)+ReleveAngle));
+    );
+  $:=rotation($,OPfC,-90+(360/(4*Z)+ReleveAngle)) shifted Cc;
+  $
+enddef;


Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCEngrenages.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCLabyNombre.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCLabyNombre.mp	2022-10-12 20:11:05 UTC (rev 64686)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCLabyNombre.mp	2022-10-12 20:11:55 UTC (rev 64687)
@@ -42,6 +42,54 @@
   fi;
 enddef;
 
+def PopCheminMathAlea=
+  if indiceChemin<1:
+    RAZPileChemin;
+    for k=-1 upto LargeurLaby:
+      for l=-1 upto LongueurLaby:
+	if (k=-1) or (k=LargeurLaby) or (l=-1) or (l=LongueurLaby):
+	  CaseExploree[k][l]:=true;
+	else:
+	  CaseExploree[k][l]:=false;
+	fi;
+      endfor;
+    endfor;
+    Mobile:=Depart;
+          if Entree="Nord":
+        CaseExploree[choixligneD-1][choixcolonneD]:=true;
+      elseif Entree="Sud":
+        CaseExploree[choixligneD+1][choixcolonneD]:=true;
+      elseif Entree="Est":
+        CaseExploree[choixligneD][choixcolonneD+1]:=true;
+      elseif Entree="Ouest":
+        CaseExploree[choixligneD][choixcolonneD-1]:=true;
+      fi;
+      if SortieUnique:
+        if (Sortie="Est") or (Sortie="Ouest"):
+          for k=0 upto LargeurLaby-1:
+          if k<>choixligneA:
+            CaseExploree[k][choixcolonneA]:=true;
+          fi;
+          endfor;
+        elseif (Sortie="Nord") or (Sortie="Sud"):
+          for k=0 upto LongueurLaby-1:
+          if k<>choixcolonneA:
+            CaseExploree[choixligneA][k]:=true;
+          fi;
+          endfor;    
+        fi;
+      fi;
+    PushChemin((choixligneD,choixcolonneD));
+    CaseExploree[choixligneD][choixcolonneD]:=true;
+    VoisinDispo(choixligneD,choixcolonneD);
+  else:
+    if indiceChemin>0:
+      CaseExploree[xpart(PileChemin[indiceChemin])][ypart(PileChemin[indiceChemin])]:=true;
+    fi;
+    indiceChemin:=indiceChemin-1;
+  fi;
+enddef;
+
 %Pile des cases voisines de la case parcourue
 pair PileVoisin[];
 numeric indiceVoisin;
@@ -152,7 +200,6 @@
   picture $;
   path pl[];
   $=image(
-    %pl1=(0,0)--u*(0.15,0)--u*(0.15,0.2){dir180}..u*(0.08+uniformdeviate(0.05),0.2+uniformdeviate(0.1))..u*(0.09+uniformdeviate(0.015),0.3+uniformdeviate(0.2))..u*(0.08+uniformdeviate(0.04),0.5+uniformdeviate(0.2))..{dir0}u*(0.15,0.8)--u*(0.15,1)--u*(0,1)--cycle;
       pl1=(0,0)--u*(0.1,0)..u*(0.02+uniformdeviate(0.05),0.25)..u*(0.1-uniformdeviate(0.03),0.5)..u*(0.02+uniformdeviate(0.05),0.75)..u*(0.1,1)--u*(0,1)--cycle;
     remplis pl[1];
     trace pl[1];

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2022-10-12 20:11:05 UTC (rev 64686)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2022-10-12 20:11:55 UTC (rev 64687)
@@ -2,9 +2,9 @@
 % licence    : Released under the LaTeX Project Public License v1.3c
 % or later, see http://www.latex-project.org/lppl.txtf
 \NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2022/09/10}%
+\def\filedate{2022/10/12}%
 \let\PfCfiledate\filedate%
-\def\fileversion{0.99-z}%
+\def\fileversion{0.99-z-a}%
 \let\PfCfileversion\fileversion%
 \ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]
 
@@ -347,10 +347,971 @@
 }
 
 %%%
+% Codage RLE
+%%%
+\setKVdefault[RLE]{Largeur=10pt,Taille=5,Unite=1cm,Solution=false,Enonce=true}
+
+\newtoks\toklisterle
+\def\UpdatetoksRLE#1\nil{\addtotok\toklisterle{#1,}}%
+
+%\newlength\PfCRLEHeight%
+\NewDocumentCommand\CodageRLE{o m}{%
+  \useKVdefault[RLE]%
+  \setKV[RLE]{#1}%
+  %\setlength{\PfCRLEHeight}{\useKV[RLE]{Largeur}}%
+  \setsepchar{,}%
+  \readlist*\PfCListeRLE{#2}%
+  \toklisterle{}%
+  \foreachitem\compteur\in\PfCListeRLE{\expandafter\UpdatetoksRLE\compteur\nil}%
+  \BuildRLE{\the\toklisterle}%
+}
+
+\NewDocumentCommand\BuildRLE{m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    Taille:=\useKV[RLE]{Taille};
+    u:=\useKV[RLE]{Unite};
+    boolean Solution,Enonce;
+    Solution:=\useKV[RLE]{Solution};
+    Enonce:=\useKV[RLE]{Enonce};
+    
+    color RLEFill;
+    RLEFill=white;
+
+    numeric nbretenir[][];
+    
+    vardef NombreLigne(text t)=
+    retiens:=0;
+    nblignes:=0;
+    for p_=t:
+    retiens:=retiens+p_;
+    if retiens=Taille:
+    nblignes:=nblignes+1;
+    retiens:=0;
+    fi;
+    endfor;
+    enddef;
+
+    path Square;
+    Square=unitsquare scaled u;
+
+    vardef RLE(text t)=
+    nbcoups:=0;
+    nbcases:=0;
+    nbcaseslignes:=0;
+    cptretiensnb:=0;
+    cptretiensnblignes:=1;
+    for p_=t:
+    if p_=0:
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    RLEFill:=black;
+    else:
+    nbcoups:=nbcoups+1;
+    for l=0 upto p_-1:
+        if Solution: fill ((Square scaled 0.95) shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))+u*(0.025,0.025))) withcolor RLEFill; fi;
+    trace (Square shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))));
+    endfor;
+    nbcaseslignes:=nbcaseslignes+p_;
+    nbcases:=nbcases+p_;
+    if (nbcaseslignes mod Taille)=0:
+    RLEFill:=white;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    cptretiensnblignes:=cptretiensnblignes+1;
+    cptretiensnb:=0;
+    else:
+    if RLEFill=white: RLEFill:=black else: RLEFill:=white fi;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    string Sequence[];
+
+    boolean STOP;
+    STOP:=false;
+    
+    vardef Affichage=
+    for k=1 upto nblignes:
+    Sequence[k]=decimal(nbretenir[k][1]);
+    n:=1;
+    forever:
+    n:=n+1;
+    if unknown nbretenir[k][n]:
+    STOP:=true;
+    else:
+    Sequence[k]:=Sequence[k]&","&decimal(nbretenir[k][n]);
+    fi;
+    exitif STOP;
+    endfor;
+    label.rt(TEX(Sequence[k]),u*(Taille+1,-k+1+0.5));
+    STOP:=false;
+    endfor;
+    enddef;
+    
+    NombreLigne(#1);
+    RLE(#1);
+    if Enonce:
+    Affichage;
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+    Taille:=\useKV[RLE]{Taille};
+    u:=\useKV[RLE]{Unite};
+    boolean Solution,Enonce;
+    Solution:=\useKV[RLE]{Solution};
+    Enonce:=\useKV[RLE]{Enonce};
+    }]
+    color RLEFill;
+    RLEFill=white;
+
+    numeric nbretenir[][];
+    
+    vardef NombreLigne(text t)=
+    retiens:=0;
+    nblignes:=0;
+    for p_=t:
+    retiens:=retiens+p_;
+    if retiens=Taille:
+    nblignes:=nblignes+1;
+    retiens:=0;
+    fi;
+    endfor;
+    enddef;
+
+    path Square;
+    Square=unitsquare scaled u;
+
+    vardef RLE(text t)=
+    nbcoups:=0;
+    nbcases:=0;
+    nbcaseslignes:=0;
+    cptretiensnb:=0;
+    cptretiensnblignes:=1;
+    for p_=t:
+    if p_=0:
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    RLEFill:=black;
+    else:
+    nbcoups:=nbcoups+1;
+    for l=0 upto p_-1:
+        if Solution: fill ((Square scaled 0.95) shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))+u*(0.025,0.025))) withcolor RLEFill; fi;
+    trace (Square shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))));
+    endfor;
+    nbcaseslignes:=nbcaseslignes+p_;
+    nbcases:=nbcases+p_;
+    if (nbcaseslignes mod Taille)=0:
+    RLEFill:=white;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    cptretiensnblignes:=cptretiensnblignes+1;
+    cptretiensnb:=0;
+    else:
+    if RLEFill=white: RLEFill:=black else: RLEFill:=white fi;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    string Sequence[];
+
+    boolean STOP;
+    STOP:=false;
+    
+    vardef Affichage=
+    for k=1 upto nblignes:
+    Sequence[k]=decimal(nbretenir[k][1]);
+    n:=1;
+    forever:
+    n:=n+1;
+    if unknown nbretenir[k][n]:
+    STOP:=true;
+    else:
+    Sequence[k]:=Sequence[k]&","&decimal(nbretenir[k][n]);
+    fi;
+    exitif STOP;
+    endfor;
+    label.rt(LATEX(Sequence[k]),u*(Taille+1,-k+1+0.5));
+    STOP:=false;
+    endfor;
+    enddef;
+    
+    NombreLigne(#1);
+    RLE(#1);
+    if Enonce:
+    Affichage;
+    fi;    
+  \end{mpost}
+  \fi
+}
+
+%%%
+% Engrenages
+%%%
+\newtoks\tokPfCEngrenages%
+\def\UpdatetoksEngrenages#1/#2\nil{\addtotok\tokPfCEngrenages{#1,#2,}}%
+
+\setKVdefault[Engrenages]{Couleur=LightSteelBlue,Unite=3mm}
+
+\NewDocumentCommand\Engrenages{o m}{%
+  \tokPfCEngrenages{}
+  \useKVdefault[Engrenages]%
+  \setKV[Engrenages]{#1}%
+  \setsepchar[*]{,*/}%
+  \ignoreemptyitems
+  \readlist*\ListePfCEngrenages{#2}%
+  \foreachitem\compteur\in\ListePfCEngrenages{\expandafter\UpdatetoksEngrenages\compteur\nil}%
+  \BuildEngrenages{\the\tokPfCEngrenages}%
+}%
+
+\NewDocumentCommand\BuildEngrenages{m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCEngrenages;
+    
+    u:=\useKV[Engrenages]{Unite};
+    CouleurEngrenage=\useKV[Engrenages]{Couleur};
+    
+    vardef LectureDonnees(text t)=
+    n:=0;k=0;l=0;
+    for p_=t:
+    n:=n+1;
+    if (n mod 2)=0:
+    l:=l+1;
+    Zz[l]=p_;
+    else:
+    k:=k+1;
+    Mm[k]=p_;
+    fi;
+    endfor;
+    enddef;
+    
+    LectureDonnees(#1);
+
+    pair K;
+    K=(0,0);
+    
+    trace Engrenage(Mm[1],Zz[1],(0,0));
+    for w=2 upto (n div 2):
+    K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0);
+    AngleRot:=360/(2*Zz[w]);
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot);
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={input PfCEngrenages;u:=\useKV[Engrenages]{Unite};CouleurEngrenage=\useKV[Engrenages]{Couleur};}]
+    vardef LectureDonnees(text t)=
+    n:=0;k=0;l=0;
+    for p_=t:
+    n:=n+1;
+    if (n mod 2)=0:
+    l:=l+1;
+    Zz[l]=p_;
+    else:
+    k:=k+1;
+    Mm[k]=p_;
+    fi;
+    endfor;
+    enddef;
+    
+    LectureDonnees(#1);
+
+    pair K;
+    K=(0,0);
+    
+    trace Engrenage(Mm[1],Zz[1],(0,0));
+    for w=2 upto (n div 2):
+    K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0);
+    AngleRot:=360/(2*Zz[w]);
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot);
+    endfor;
+  \end{mpost}
+  \fi
+}%
+
+%%%
+% Tortue
+%%%
+\setKVdefault[Tortue]{Pas=0.2mm,Etapes=false,Nom=\jobname,Grille=false,LargeurG=10,HauteurG=10,TortueD=false,TortueF=false,Epaisseur=1,Angle=0,Debut=false,Depart={(0,0)},Axes=false}
+\defKV[Tortue]{Etape=\setKV[Tortue]{Etapes}}%
+
+\newcounter{PfCTortue}
+\setcounter{PfCTortue}{0}
+
+\makeatletter
+\NewDocumentCommand\TortueCreationFichier{o m}{%
+  \stepcounter{PfCTortue}%
+  \useKVdefault[Tortue]%
+  \setKV[Tortue]{#1}%
+  \setKV[Tortue]{Nom=\jobname+t\thePfCTortue}%
+  \setsepchar[*]{,* }%
+  \readlist*\PfCListeCmdTortue{#2}%
+  \setsepchar{,}%
+  \xdef\PfCNbRep{0}%
+  \savecomparemode%
+  \newwrite\turtle at out%
+  \immediate\openout\turtle at out \jobname+t\thePfCTortue.turtle%
+  \immediate\write\turtle at out{numeric ut;}%
+  \immediate\write\turtle at out{ut=\useKV[Tortue]{Pas};}%
+  \immediate\write\turtle at out{Etapes=\useKV[Tortue]{Etapes};}%
+  \immediate\write\turtle at out{if Etapes:Total=\useKV[Tortue]{Etape};fi;}%
+%  \immediate\write\turtle at out{vardef Dessin=}%
+%  \immediate\write\turtle at out{save Tortue; picture Tortue;}%
+  \ifboolKV[Tortue]{Grille}{%
+    \immediate\write\turtle at out{%
+      larg=\useKV[Tortue]{LargeurG}; haut=\useKV[Tortue]{HauteurG};
+      for k=-larg upto larg:
+      draw 3*ut*(10k,-10haut)--3*ut*(10k,10haut) withcolor 0.75white;
+      endfor;
+      for k=-haut upto haut:
+      draw 3*ut*(-10larg,10k)--3*ut*(10larg,10k) withcolor 0.75white;
+      endfor;
+      if \useKV[Tortue]{Axes}:
+      drawarrow 3*ut*(-10larg,0)--3*ut*(10larg,0);
+      drawarrow 3*ut*(0,-10haut)--3*ut*(0,10haut);
+      label.llft(btex O etex,(0,0));
+      dotlabel.lrt(btex 30 etex,(30*ut,0));
+      dotlabel.ulft(btex 30 etex,(0,30*ut));
+      fi;
+    }%
+  }{}%
+  \ifboolKV[Tortue]{Debut}{}{%
+    \foreachitem\compteur\in\PfCListeCmdTortue{%
+      \comparestrict%
+      \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{[}[\PfCTestCrochetO]%
+      \xintifboolexpr{\PfCTestCrochetO==0}{}{%
+        \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{]}[\PfCTestCrochetF]%
+        \xintifboolexpr{\PfCTestCrochetF==0}{%
+          \immediate\write\turtle at out{TotalRemplis:=tt-1; remplis for l=1 upto TotalRemplis:B[l]--endfor cycle withcolor CouleurRemplis;}%
+        }{%
+          \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Remplis}[\PfCTestRemplis]%
+          \xintifboolexpr{\PfCTestRemplis==0}{%
+            \immediate\write\turtle at out{tt:=0;
+            TotalRemplis:=0; CouleurRemplis:=\PfCListeCmdTortue[\compteurcnt,2];}%
+          }{%
+            \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Fin}[\PfCTestFinPour]%
+            \xintifboolexpr{\PfCTestFinPour==0}{%
+              \immediate\write\turtle at out{enddef;k:=0;}%
+              \xdef\PfCNbRep{\fpeval{\PfCNbRep+1}}%
+            }{%
+              \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Pour}[\PfCTestPour]%
+              \xintifboolexpr{\PfCTestPour==0}{%
+                \immediate\write\turtle at out{vardef \PfCListeCmdTortue[\compteurcnt,2](expr \PfCListeCmdTortue[\compteurcnt,3])=}%
+              }{%
+                \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Rep}[\PfCTestRep]%
+                \xintifboolexpr{\PfCTestRep==0}{%
+                  \xdef\PfCNbRep{\fpeval{\PfCNbRep+1}}%
+                  \immediate\write\turtle at out{nb[\PfCNbRep]:=0;}%
+                  \immediate\write\turtle at out{forever:}%
+                  \immediate\write\turtle at out{nb[\PfCNbRep]:=nb[\PfCNbRep]+1;}%
+                  % \immediate\write\turtle at out{nbcomp:=nbcomp+1;}
+                }{%
+                  \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{)}[\PfCTestParaF]%
+                  \xintifboolexpr{\PfCTestParaF==0}{%
+                    \immediate\write\turtle at out{exitif nb[\PfCNbRep]=\PfCListeCmdTortue[\compteurcnt,2];}%
+                    \immediate\write\turtle at out{endfor;}%
+                    \xdef\PfCNbRep{\fpeval{\PfCNbRep-1}}%
+                  }{%
+                    \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{(}[\PfCTestParaO]%
+                    \xintifboolexpr{\PfCTestParaO==0}{%
+                    }{%
+                      \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Bc}[\PfCTestBc]%
+                      \xintifboolexpr{\PfCTestBc==0}{%
+                        \immediate\write\turtle at out{Bc;}%
+                      }{%
+                        \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Lc}[\PfCTestLc]%
+                        \xintifboolexpr{\PfCTestLc==0}{%
+                          \immediate\write\turtle at out{Lc;}%
+                        }{%
+                          \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Tlp}[\PfCTestTlp]%
+                          \xintifboolexpr{\PfCTestTlp==0}{%
+                            \immediate\write\turtle at out{Teleporter(\PfCListeCmdTortue[\compteurcnt,2],\PfCListeCmdTortue[\compteurcnt,3]);}%
+                          }{%
+                            \immediate\write\turtle at out{\PfCListeCmdTortue[\compteurcnt,1](\PfCListeCmdTortue[\compteurcnt,2]);}%
+                          }%
+                        }%
+                      }%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+  % \immediate\write\turtle at out{Tortue:=currentpicture;Tortue enddef;}%
+  % \immediate\write\turtle at out{draw Dessin;}%
+  \ifboolKV[Tortue]{TortueD}{%
+    \immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[0] scaled 1.5,A[0]);}%
+  }{}%
+  \ifboolKV[Tortue]{Etapes}{%
+    \immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[Total] scaled 1.5,A[Total]);}%
+  }{\ifboolKV[Tortue]{TortueF}{\immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[k] scaled 1.5,A[k]);}}{}}%
+  %\immediate\write\turtle at out{}
+  \immediate\closeout\turtle at out%
+  \restorecomparemode%
+}%
+\makeatother
+
+\NewDocumentCommand\Tortue{o m}{%
+  \useKVdefault[Tortue]%
+  \setKV[Tortue]{#1}%
+  \TortueCreationFichier[#1]{#2}%
+  \TortueDessinFinal%
+}
+
+\NewDocumentCommand\TortueDessinFinal{}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCTurtleTestRemplis.mp;
+
+    pair Depart;
+    Depart=\useKV[Tortue]{Depart};
+    pair A[],B[];
+    A[0]=\useKV[Tortue]{Pas}*(xpart(Depart),ypart(Depart));
+    B[0]=A[0];
+    Epaisseur:=0.25;%\useKV[Tortue]{Epaisseur};
+    Angle:=0;
+    numeric RetiensAngle[];
+    RetiensAngle[0]=\useKV[Tortue]{Angle};
+    
+    pair VecteurDpt;
+    VecteurDpt=(1,0) rotated RetiensAngle[0];
+    input \useKV[Tortue]{Nom}.turtle;
+  \end{mplibcode}
+  \else
+  \fi
+}%
+
+%%%
+% Le compte est bon
+%%%
+\setKVdefault[CompteBon]{NombreCalculs=5,NombrePlaques=4,Solution=false,Relatifs=false,Original=false,Graines=false,Plaques=6}
+\defKV[CompteBon]{Graine=\setKV[CompteBon]{Graines}}%
+
+\makeatletter
+
+\newcommand\PfC at CreerListeCalculs[4]{%
+  \xdef\PfC at ListeCalculs{%
+    #1+#2+#3+#4,%
+    #1+#2+#3*#4/#1+#3*#4+#2/#3*#4+#1+#2,%
+    #1+#3+#2*#4/#1+#2*#4+#3/#2*#4+#1+#3,%
+    #1+#4+#2*#3/#1+#2*#3+#4/#2*#3+#1+#4,%
+    #2+#3+#1*#4/#2+#1*#4+#3/#1*#4+#2+#3,%
+    #2+#4+#1*#3/#2+#1*#3+#4/#2+#4+#1*#3,%
+    #3+#4+#1*#2/#3+#1*#2+#4/#3+#4+#1*#2,%
+    #1*#2+#3*#4/#3*#4+#1*#2,%
+    #1*#3+#2*#4/#2*#4+#1*#3,%
+    #1*#4+#2*#3/#2*#3+#1*#4,%
+    #1*#2*#3+#4/#4+#1*#2*#3,
+    #1*#2*#4+#3/#3+#1*#2*#4,%
+    #1*#3*#4+#2/#2+#1*#3*#4,%
+    #2*#3*#4+#1/#1+#2*#3*#4,%
+    #1*#2*#3*#4,%
+    #1+(#2+#3)*#4/(#2+#3)*#4+#1/#1+#4*(#2+#3)/#4*(#2+#3)+#1,%
+    #1+(#2+#4)*#3/(#2+#4)*#3+#1/#1+#3*(#2+#4)/#3*(#2+#4)+#1,%
+    #1+(#3+#4)*#2/(#3+#4)*#2+#1/#1+#2*(#3+#4)/#2*(#3+#4)+#1,%
+    #2+(#1+#3)*#4,%
+    #2+(#1+#4)*#3,%
+    #2+(#3+#4)*#1,%
+    #3+(#1+#2)*#4,%
+    #3+(#1+#4)*#2,%
+    #3+(#2+#4)*#1,%
+    #4+(#1+#2)*#3,%
+    #4+(#1+#3)*#2,%
+    #4+(#2+#3)*#1,%
+    (#1+#2+#3)*#4,%
+    (#1+#2+#4)*#3,%
+    (#1+#3+#4)*#2,%
+    (#2+#3+#4)*#1,%
+    (#1+#2)*(#3+#4),%
+    (#1+#3)*(#2+#4),%
+    (#1+#4)*(#2+#3)%
+  }%
+  \ifboolKV[CompteBon]{Relatifs}{%
+    \xdef\PfC at ListeCalculs{%
+      \PfC at ListeCalculs,%
+      #1-#2-#3-#4,%
+      #1-#2-#3*#4/#1-#3*#4-#2/#3*#4-#1-#2,%
+      #1-#3-#2*#4/#1-#2*#4-#3/#2*#4-#1-#3,%
+      #1-#4-#2*#3/#1-#2*#3-#4/#2*#3-#1-#4,%
+      #2-#3-#1*#4/#2-#1*#4-#3/#1*#4-#2-#3,%
+      #2-#4-#1*#3/#2-#1*#3-#4/#2-#4-#1*#3,%
+      #3-#4-#1*#2/#3-#1*#2-#4/#3-#4-#1*#2,%
+      #1*#2-#3*#4/#3*#4-#1*#2,%
+      #1*#3-#2*#4/#2*#4-#1*#3,%
+      #1*#4-#2*#3/#2*#3-#1*#4,%
+      #1*#2*#3-#4/#4-#1*#2*#3,
+      #1*#2*#4-#3/#3-#1*#2*#4,%
+      #1*#3*#4-#2/#2-#1*#3*#4,%
+      #2*#3*#4-#1/#1-#2*#3*#4,%
+      #1*#2*#3*#4,%
+      #1-(#2-#3)*#4/(#2-#3)*#4-#1/#1-#4*(#2-#3)/#4*(#2-#3)-#1,%
+      #1-(#2-#4)*#3/(#2-#4)*#3-#1/#1-#3*(#2-#4)/#3*(#2-#4)-#1,%
+      #1-(#3-#4)*#2/(#3-#4)*#2-#1/#1-#2*(#3-#4)/#2*(#3-#4)-#1,%
+      #2-(#1-#3)*#4,%
+      #2-(#1-#4)*#3,%
+      #2-(#3-#4)*#1,%
+      #3-(#1-#2)*#4,%
+      #3-(#1-#4)*#2,%
+      #3-(#2-#4)*#1,%
+      #4-(#1-#2)*#3,%
+      #4-(#1-#3)*#2,%
+      #4-(#2-#3)*#1,%
+      (#1-#2-#3)*#4,%
+      (#1-#2-#4)*#3,%
+      (#1-#3-#4)*#2,%
+      (#2-#3-#4)*#1,%
+      (#1-#2)*(#3-#4),%
+      (#1-#3)*(#2-#4),%
+      (#1-#4)*(#2-#3)%
+    }%
+  }{}%
+}%
+
+\newtoks\tokPfCCBRappels
+\def\UpdatetoksCB#1\nil{\addtotok\tokPfCCBRappels{#1,}}%
+
+\NewDocumentCommand\PfCCompteBonOriginal{o}{%
+  \useKVdefault[CompteBon]
+  \setKV[CompteBon]{#1}%
+  %On définit la liste des cartes
+  \xdef\PfCCBListeCartes{1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,25,50,75,100}%
+  \MelangeListe{\PfCCBListeCartes}{\useKV[CompteBon]{Plaques}}
+  \readlist*\PfCCBListeTirage{\faa}
+  \MelangeListe{\faa}{\useKV[CompteBon]{Plaques}}
+  \readlist*\PfCCBListeTirageAffiche{\faa}
+  %%Tirage ok
+  \xdef\PfCCBResultatFinal{1001}%
+  \whiledo{\PfCCBResultatFinal>1000}{%
+    \xdef\PfCListeATrier{\PfCCBListeTirage[1]}%
+    \xintFor* ##1 in{\xintSeq{2}{\useKV[CompteBon]{Plaques}}}\do{%
+      \xdef\PfCListeATrier{\PfCListeATrier,\PfCCBListeTirage[##1]}%
+    }%
+    % 
+    \tokPfCCBRappels{}%
+    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[CompteBon]{Plaques}-1}}}\do{%
+      \MelangeListe{\PfCListeATrier}{2}
+      \readlist*\PfCCBListeTirageIntermediaire{\faa}
+      \xintifboolexpr{\PfCCBListeTirageIntermediaire[1]==1 || \PfCCBListeTirageIntermediaire[2]==1}{%
+        % On ne fait pas de multiplication par 1
+        \xdef\PfCCBAlea{\fpeval{randint(1,2)}}%
+        \xintifboolexpr{\PfCCBAlea==1}{%
+          \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+          \expandafter\UpdatetoksCB\PfCCBTest\nil%
+          \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+          \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+        }{%
+          \xintifboolexpr{\PfCCBListeTirageIntermediaire[1]==\PfCCBListeTirageIntermediaire[2]}{%
+            \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+            \expandafter\UpdatetoksCB\PfCCBTest\nil%
+            \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+          }{%
+            \xdef\PfCCBTest{\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}-\fpeval{min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}=\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])-min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}}
+            \expandafter\UpdatetoksCB\PfCCBTest\nil%
+            \xdef\PfCCBResultat{\fpeval{abs(\PfCCBListeTirageIntermediaire[1]-\PfCCBListeTirageIntermediaire[2])}}
+          }%
+          \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+        }%
+        \xdef\PfCListeATrier{\fii,\PfCCBResultat}%
+      }{%
+        \xdef\PfCCBAlea{\fpeval{randint(1,3)}}%
+        \xintifboolexpr{\PfCCBAlea==1}{%
+          \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+          \expandafter\UpdatetoksCB\PfCCBTest\nil%
+          \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+          \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+        }{%
+          \xintifboolexpr{\PfCCBAlea==2}{%
+            \xintifboolexpr{\PfCCBListeTirageIntermediaire[1]==\PfCCBListeTirageIntermediaire[2]}{%
+              \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+              \expandafter\UpdatetoksCB\PfCCBTest\nil%
+              \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+            }{%
+              \xdef\PfCCBTest{\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}-\fpeval{min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}=\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])-min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}}
+              \expandafter\UpdatetoksCB\PfCCBTest\nil%
+              \xdef\PfCCBResultat{\fpeval{abs(\PfCCBListeTirageIntermediaire[1]-\PfCCBListeTirageIntermediaire[2])}}
+            }%
+            \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+          }{%
+            \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]*\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]*\PfCCBListeTirageIntermediaire[2]}}
+            \expandafter\UpdatetoksCB\PfCCBTest\nil%
+            \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]*\PfCCBListeTirageIntermediaire[2]}}
+            \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+          }
+        }%
+        \xdef\PfCListeATrier{\fii,\PfCCBResultat}%
+      }%
+    }%
+    \xintifboolexpr{\useKV[CompteBon]{Plaques}>5}{\xintifboolexpr{\PfCCBResultat<100}{\xdef\PfCCBResultat{1001}}{}}{}%
+    \xdef\PfCCBResultatFinal{\PfCCBResultat}%
+  }%
+  \begin{center}
+    \textbf{\PfCCBResultatFinal}
+    
+    \fbox{\PfCCBListeTirage[1]} \xintFor* ##1 in{\xintSeq{2}{\useKV[CompteBon]{Plaques}}}\do{\qquad \fbox{\PfCCBListeTirage[##1]}}%
+  \end{center}
+  \xdef\PfCCBListeRappels{\the\tokPfCCBRappels}
+  \setsepchar[*]{,*=}\ignoreemptyitems
+  \readlist*\PfCCBDecompositionEtapes{\PfCCBListeRappels}
+  \reademptyitems
+  \ifboolKV[CompteBon]{Solution}{%
+    \begin{align*}
+      \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[CompteBon]{Plaques}-1}}}\do{
+      \StrSubstitute{\PfCCBDecompositionEtapes[##1,1]}{*}{\times}[\PfCCBAffiche]\PfCCBAffiche&=\PfCCBDecompositionEtapes[##1,2]\xintifForLast{\\}{}
+      }
+    \end{align*}
+  }{}%
+}%
+
+\NewDocumentCommand\CompteBon{o}{%
+  \useKVdefault[CompteBon]%
+  \setKV[CompteBon]{#1}%
+  \ifboolKV[CompteBon]{Graines}{\PfCGraineAlea{\useKV[CompteBon]{Graine}}}{}%
+  \ifboolKV[CompteBon]{Original}{%
+    \PfCCompteBonOriginal[#1]%
+  }{%
+    % on choisit NombrePlaques parmi la liste des nombres 1 à 9, 10/25/50/75/100, La moitié +1 devant appartenir à 1..9
+    \xdef\PfCCBListeEntiers{2,3,4,5,6,7,8,9}%
+    \xdef\PfCCBListeMultiples{10,25,50,75,100}%
+    \xdef\PfCCBNbPlaqueEntiers{\fpeval{floor(\useKV[CompteBon]{NombrePlaques}/2)+1}}%
+    \xdef\PfCCBNbPlaqueMultiples{\useKV[CompteBon]{NombrePlaques}-\PfCCBNbPlaqueEntiers}%
+    \MelangeListe{\PfCCBListeEntiers}{\PfCCBNbPlaqueEntiers}%
+    \setsepchar{,}%
+    \ignoreemptyitems%
+    \readlist*\PfCCBListeEntiersChoisis{\faa}%
+    \MelangeListe{\PfCCBListeMultiples}{\PfCCBNbPlaqueMultiples}%
+    \ignoreemptyitems%
+    \readlist*\PfCCBListeMultiplesChoisis{\faa}%
+    \reademptyitems%
+    \xdef\PfCCBListeToutesCartes{}%
+    \foreachitem\compteur\in\PfCCBListeEntiersChoisis{%
+      \xdef\PfCCBListeToutesCartes{\PfCCBListeToutesCartes{},\PfCCBListeEntiersChoisis[\compteurcnt]}%
+    }%
+    \foreachitem\compteur\in\PfCCBListeMultiplesChoisis{%
+      \xdef\PfCCBListeToutesCartes{\PfCCBListeToutesCartes{},\PfCCBListeMultiplesChoisis[\compteurcnt]}%
+    }%
+    \MelangeListe{\PfCCBListeToutesCartes}{4}%
+    \readlist*\PfCCBListeFinaleCartes{\faa}%
+    % Choix des calculs
+    \xdef\PfC at CalculUn{\PfCCBListeFinaleCartes[1]}%
+    \xdef\PfC at CalculDeux{\PfCCBListeFinaleCartes[2]}%
+    \xdef\PfC at CalculTrois{\PfCCBListeFinaleCartes[3]}%
+    \xdef\PfC at CalculQuatre{\PfCCBListeFinaleCartes[4]}%
+    \PfC at CreerListeCalculs{\PfC at CalculUn}{\PfC at CalculDeux}{\PfC at CalculTrois}{\PfC at CalculQuatre}
+    \MelangeListe{\PfC at ListeCalculs}{\useKV[CompteBon]{NombreCalculs}}%
+    \setsepchar[*]{,*/}%
+    \readlist*\PfC at ListeCalculsChoisis{\faa}%
+    \begin{center}
+      \setlength{\tabcolsep}{0.5\tabcolsep}
+      % Le tableau des nombres
+      \begin{NiceTabular}{m{20pt}m{10pt}m{20pt}m{10pt}m{20pt}m{10pt}m{20pt}}
+        \Block[draw]{}{\PfCCBListeFinaleCartes[1]}&&\Block[draw]{}{\PfCCBListeFinaleCartes[2]}&&\Block[draw]{}{\PfCCBListeFinaleCartes[3]}&&\Block[draw]{}{\PfCCBListeFinaleCartes[4]}
+      \end{NiceTabular}
+      
+      \bigskip
+      
+      % Le tableau des calculs%
+      \begin{NiceTabular}{m{30pt}cccm{20pt}m{10pt}m{20pt}m{10pt}m{20pt}m{10pt}m{20pt}}
+        \xintFor* ##1 in{\xintSeq{1}{\useKV[CompteBon]{NombreCalculs}}}\do{%
+          \Block[draw]{}{\num{\fpeval{\PfC at ListeCalculsChoisis[##1,1]}}}&&$=$&&\Block[draw]{}{~}&\Block{}{~}&\Block[draw]{}{~}&\Block{}{~}&\Block[draw]{}{~}&\Block{}{~}&\Block[draw]{}{~}\\
+          \ifboolKV[CompteBon]{Solution}{\Block{1-11}{\footnotesize Une solution : \StrSubstitute[0]{\PfC at ListeCalculsChoisis[##1,1]}{*}{\times}[\PfCEcritureCalcul]$\PfCEcritureCalcul$}}{}\\
+        }%
+      \end{NiceTabular}
+    \end{center}
+  }%
+}%
+
+%%%
+% Nombre Astral
+%%%
+\setKVdefault[NombreAstral]{Solution=false,Graines=false,Echelle=1}
+\defKV[NombreAstral]{Graine=\setKV[NombreAstral]{Graines}}%
+
+\newtoks\toklisteNANombres%
+\newtoks\toklisteNAMelange%
+\def\UpdatetoksNANombres#1\nil{\addtotok\toklisteNANombres{"#1",}}%
+\def\UpdatetoksNAMelange#1\nil{\addtotok\toklisteNAMelange{#1,}}%
+
+\NewDocumentCommand\NombreAstral{o}{%
+  \toklisteNANombres{}%
+  \toklisteNAMelange{}%
+  \useKVdefault[NombreAstral]%
+  \setKV[NombreAstral]{#1}%
+  \ifboolKV[NombreAstral]{Graines}{\PfCGraineAlea{\useKV[NombreAstral]{Graine}}}{}%
+  \xdef\PfCNACible{\fpeval{2*randint(25,45)}}%
+  \xdef\PfCNAListeNombres{}%
+  \xintFor* ##1 in{\xintSeq{11}{\fpeval{floor(\PfCNACible/3)}}}\do{%
+    \xdef\PfCNAListeNombres{\PfCNAListeNombres ##1,}%
+  }%
+  \MelangeListe{\PfCNAListeNombres}{5}%
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\PfCNAListeNombresBase{\faa}%
+  \reademptyitems
+  \readlist*\PfCNAListeNombres{%
+    \PfCNAListeNombresBase[1],%
+    \PfCNAListeNombresBase[2],%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[5]-\PfCNAListeNombresBase[4]-\PfCNAListeNombresBase[3]},%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[4]-\PfCNAListeNombresBase[2]-\PfCNAListeNombresBase[5]},%
+    \PfCNAListeNombresBase[3],%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[3]-\PfCNAListeNombresBase[5]-\PfCNAListeNombresBase[1]},%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[2]-\PfCNAListeNombresBase[4]-\PfCNAListeNombresBase[1]},%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[1]-\PfCNAListeNombresBase[2]-\PfCNAListeNombresBase[3]},%
+    \PfCNAListeNombresBase[4],%
+    \PfCNAListeNombresBase[5]%
+  }%
+  \foreachitem\compteur\in\PfCNAListeNombres{\expandafter\UpdatetoksNANombres\compteur\nil}%
+  \xdef\PfCNAListeAEffacer{1,2,3,4,5,6,7,8,9,10}%
+  \MelangeListe{\PfCNAListeAEffacer}{6}%
+  \ignoreemptyitems%
+  \readlist*\PfCNAListeMelange{\faa}%
+  \reademptyitems%
+  \foreachitem\compteur\in\PfCNAListeMelange{\expandafter\UpdatetoksNAMelange\compteur\nil}%
+  \BuildNombreAstral{\the\toklisteNANombres}{\the\toklisteNAMelange}%
+}%
+
+\NewDocumentCommand\BuildNombreAstral{m m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    Cible=\PfCNACible;
+    
+    boolean Solution;
+    Solution:=\useKV[NombreAstral]{Solution};
+
+    Echelle:=\useKV[NombreAstral]{Echelle};
+    
+    string Rappel[];
+    Rayon:=4cm;
+    
+    path cc,ca[];
+    cc=cercles((0,0),Rayon);
+    
+    pair A[],C[],D[];
+    for k=1 upto 5:
+    C[k]=pointarc(cc,90+(k-1)*72);
+    endfor;
+    
+    D1=C2+30*unitvector(C2-C4);
+    D2=C2+30*unitvector(C2-C5);
+    D3=C3+30*unitvector(C3-C1);
+    D4=C4+30*unitvector(C4-C1);
+    D5=C5+30*unitvector(C5-C3);
+    
+    drawarrow C2--D1;
+    drawarrow C2--D2;
+    drawarrow C3--D3;
+    drawarrow C4--D4;
+    drawarrow C5--D5;
+    
+    label.ulft(TEX("\bfseries\Large"&decimal(Cible)),D1);
+    label.lft(TEX("\bfseries\Large"&decimal(Cible)),D2);
+    label.llft(TEX("\bfseries\Large"&decimal(Cible)),D3);
+    label.lrt(TEX("\bfseries\Large"&decimal(Cible)),D4);
+    label.urt(TEX("\bfseries\Large"&decimal(Cible)),D5);
+    
+    trace polygone(C1,C3,C5,C2,C4) withpen (pencircle scaled 8);
+    A1=C1;
+    A2=C2;
+    A9=C3;
+    A10=C4;
+    A5=C5;
+    A3=segment(C1,C3) intersectionpoint segment(C2,C5);
+    A4=segment(C1,C4) intersectionpoint segment(C2,C5);
+    A6=segment(C1,C3) intersectionpoint segment(C2,C4);
+    A7=segment(C1,C4) intersectionpoint segment(C3,C5);
+    A8=segment(C2,C4) intersectionpoint segment(C3,C5);
+    for k=1 upto 10:
+    ca[k]=cercles(A[k],0.6u);
+    fill ca[k] withcolor white;
+    trace ca[k];
+    endfor;
+    vardef Affichage(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    Rappel[n]=p_;
+    label(TEX("\Large"&p_),A[n]);
+    endfor;
+    enddef;
+    
+    vardef Suppression(text t)=
+    k:=0;
+    for p_=t:
+    k:=k+1;
+    fill ca[p_] withcolor white;
+    trace ca[p_];
+    label(TEX("\Large"&Rappel[p_]),u*(-7,5.6-1.5k));
+    trace cercles(u*(-7,5.6-1.5k),0.6u);
+    endfor;
+    enddef;
+    
+    Affichage(#1);
+    if Solution=false:
+    Suppression(#2);
+    fi;
+    picture recap;%
+    recap:=currentpicture scaled Echelle;%
+    currentpicture:=nullpicture;%
+    draw recap;%
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+      Echelle:=\useKV[NombreAstral]{Echelle};
+      Cible=\PfCNACible;boolean Solution;Solution:=\useKV[NombreAstral]{Solution};
+      string Rappel[];
+      n:=0;
+      for p_=#1:
+      n:=n+1;
+      Rappel[n]=p_;
+      endfor;
+    }]
+    
+    Rayon:=4cm;
+    
+    path cc,ca[];
+    cc=cercles((0,0),Rayon);
+    
+    pair A[],C[],D[];
+    for k=1 upto 5:
+    C[k]=pointarc(cc,90+(k-1)*72);
+    endfor;
+    
+    D1=C2+30*unitvector(C2-C4);
+    D2=C2+30*unitvector(C2-C5);
+    D3=C3+30*unitvector(C3-C1);
+    D4=C4+30*unitvector(C4-C1);
+    D5=C5+30*unitvector(C5-C3);
+    
+    drawarrow C2--D1;
+    drawarrow C2--D2;
+    drawarrow C3--D3;
+    drawarrow C4--D4;
+    drawarrow C5--D5;
+    
+    label.ulft(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)&""),D1);
+    label.lft(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D2);
+    label.llft(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D3);
+    label.lrt(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D4);
+    label.urt(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D5);
+    
+    trace polygone(C1,C3,C5,C2,C4) withpen (pencircle scaled 8);
+    A1=C1;
+    A2=C2;
+    A9=C3;
+    A10=C4;
+    A5=C5;
+    A3=segment(C1,C3) intersectionpoint segment(C2,C5);
+    A4=segment(C1,C4) intersectionpoint segment(C2,C5);
+    A6=segment(C1,C3) intersectionpoint segment(C2,C4);
+    A7=segment(C1,C4) intersectionpoint segment(C3,C5);
+    A8=segment(C2,C4) intersectionpoint segment(C3,C5);
+    for k=1 upto 10:
+    ca[k]=cercles(A[k],0.6u);
+    fill ca[k] withcolor white;
+    trace ca[k];
+    endfor;
+    vardef Affichage(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label(LATEX("\noexpand\Large"&Rappel[n]),A[n]);
+    endfor;
+    enddef;
+    
+    vardef Suppression(text t)=
+    k:=0;
+    for p_=t:
+    k:=k+1;
+    fill ca[p_] withcolor white;
+    trace ca[p_];
+    label(LATEX("\noexpand\Large"&Rappel[p_]),u*(-7,5.6-1.5k));
+    trace cercles(u*(-7,5.6-1.5k),0.6u);
+    endfor;
+    enddef;
+
+    Affichage(#1);
+    if Solution=false:
+    Suppression(#2);
+    fi;
+
+    picture recap;%
+    recap:=currentpicture scaled Echelle;%
+    currentpicture:=nullpicture;%
+    draw recap;%
+  \end{mpost}
+  \fi
+}%
+
+%%%
+% Mentalo
+%%%
+\NewDocumentCommand\PfCNum{m}{%
+  \xintifboolexpr{#1<0}{(\num{#1})}{\num{#1}}%
+}%
+
+\setKVdefault[Mentalo]{Questions=10,ValeurMin=1,ValeurMax=15}
+
+\NewDocumentCommand\Mentalo{o m}{%
+  \useKVdefault[Mentalo]%
+  \setKV[Mentalo]{#1}%
+  \xdef\PfCMentaloEtages{\fpeval{\useKV[Mentalo]{Questions}+1}}
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\PfCMentaloListeOperations{#2}%
+  \reademptyitems%
+  \setlength{\tabcolsep}{0.25\tabcolsep}
+  \renewcommand{\arraystretch}{1.5}
+  \begin{NiceTabular}{*{\fpeval{\PfCMentaloEtages}}{m{5pt}}m{20pt}cm{20pt}cl*{\fpeval{\PfCMentaloEtages}}{m{5pt}}*{5}{m{15pt}}*{2}{m{10pt}}}
+    \Block{1-\fpeval{\PfCMentaloEtages}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages}}}\do{&}%
+    \Block[draw,fill=gray!15]{1-5}{Arrivée}&&&&&\Block{1-\fpeval{\PfCMentaloEtages}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages}}}\do{&}\\
+    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages-1}}}\do{%
+      \Block{1-\fpeval{\PfCMentaloEtages-##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages-##1}}}\do{&}%
+      \Block[borders={top,left,bottom}]{1-\fpeval{##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{##1}}}\do{&}%
+      \Block[borders={top,bottom}]{1-1}{%
+        \xdef\PfCMentaloPremierTerme{\fpeval{randint(\useKV[Mentalo]{ValeurMin},\useKV[Mentalo]{ValeurMax})}}%
+        \num{\PfCMentaloPremierTerme}}&\Block[borders={top,bottom}]{1-1}{%
+        \xintifboolexpr{\PfCMentaloListeOperationslen==1}{%
+          \StrSubstitute{\PfCMentaloListeOperations[1]}{*}{\times}[\PfCCBAffiche]$\PfCCBAffiche$%
+        }{%
+          \StrSubstitute{\PfCMentaloListeOperations[##1]}{*}{\times}[\PfCCBAffiche]$\PfCCBAffiche$%
+        }%
+      }&%
+      \Block[borders={top,bottom}]{1-1}{\xdef\PfCMentaloDeuxiemeTerme{\fpeval{randint(\useKV[Mentalo]{ValeurMin},\useKV[Mentalo]{ValeurMax})}}%
+        \PfCNum{\PfCMentaloDeuxiemeTerme}}&\Block[borders={top,bottom}]{1-1}{$=$}&\Block[borders={top,bottom}]{1-1}{\pointilles[20pt]}&%
+      \Block[borders={top,right,bottom}]{1-\fpeval{##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{##1}}}\do{&}%
+      \Block{1-\fpeval{\PfCMentaloEtages-##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages-##1}}}\do{&}%
+      &&&&\Block{1-2}{%
+        \xintifboolexpr{\PfCMentaloListeOperationslen==1}{%
+          \num{\fpeval{\PfCMentaloPremierTerme\PfCMentaloListeOperations[1]\PfCMentaloDeuxiemeTerme}}
+        }{%
+          \num{\fpeval{\PfCMentaloPremierTerme\PfCMentaloListeOperations[##1]\PfCMentaloDeuxiemeTerme}}
+        }%
+      }&\\
+    }%
+    \Block[draw,fill=gray!15]{1-\fpeval{2*\PfCMentaloEtages+5}}{Départ}\xintFor* ##2 in{\xintSeq{1}{\fpeval{2*\PfCMentaloEtages+5}}}\do{&}\\%
+    \CodeAfter
+    \tikz\draw[dashed] (1-|\fpeval{5+5+2+2*\PfCMentaloEtages-2})--(last-|\fpeval{5+5+2+2*\PfCMentaloEtages-2});
+  \end{NiceTabular}
+}%
+
+%%%
 % Calculs Croises
 %%%
-\setKVdefault[CalculsCroises]{Largeur=20pt,Solution=false,Inverse=false,Creation=false,Graines=false,Vide=false,Couleur=LightGray,Negatifs=false}
+\setKVdefault[CalculsCroises]{Largeur=20pt,Solution=false,Inverse=false,Creation=false,Graines=false,Vide=false,Couleur=LightGray,Negatifs=false,Aide=false}
 \defKV[CalculsCroises]{Graine=\setKV[CalculsCroises]{Graines}}%
+\defKV[CalculsCroises]{ListeNombres=\setKV[CalculsCroises]{Aide}}%
 
 \newlength\PfCCalculsCroises%
 \NewDocumentCommand\CalculsCroises{o m}{%
@@ -372,12 +1333,68 @@
     \setsepchar{,}%
     \readlist*\PfCListeCCNb{\faa}%
     \readlist*\PfCListeCCOp{#2}%
+    \xdef\PfCCCfoo{\useKV[CalculsCroises]{ListeNombres}}%
+    \readlist*\PfCListeCCAide{\PfCCCfoo}%
     \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
-      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[1]}}{~}}&\StrCompare{\PfCListeCCOp[1]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[1]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[2]}}{~}}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[3]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[1]\PfCListeCCNb[2]\PfCListeCCOp[2]\PfCListeCCNb[3]}}}}\\
+      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[1]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[1]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[1]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[1]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[1]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[2]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[2]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[2]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[3]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[3]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[3]}}{}%
+            }%
+          }{}%
+        }}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[1]\PfCListeCCNb[2]\PfCListeCCOp[2]\PfCListeCCNb[3]}}}}\\
       \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[3]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[3]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[5]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[5]$}}\\
-      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[4]}}{~}}&\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[5]}}{~}}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[6]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[4]\PfCListeCCOp[6]\PfCListeCCNb[5]\PfCListeCCOp[7]\PfCListeCCNb[6]}}}}\\
+      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[4]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[4]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[4]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[5]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[5]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[5]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[6]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[6]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[6]}}{}%
+            }%
+          }{}%
+        }}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[4]\PfCListeCCOp[6]\PfCListeCCNb[5]\PfCListeCCOp[7]\PfCListeCCNb[6]}}}}\\
       \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[8]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[8]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[9]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[9]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}\\
-      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[7]}}{~}}&\StrCompare{\PfCListeCCOp[11]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[11]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[8]}}{~}}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[9]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[7]\PfCListeCCOp[11]\PfCListeCCNb[8]\PfCListeCCOp[12]\PfCListeCCNb[9]}}}}\\
+      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[7]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[7]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[7]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[11]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[11]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[8]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[8]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[8]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[9]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[9]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[9]}}{}%
+            }%
+          }{}%
+        }}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[7]\PfCListeCCOp[11]\PfCListeCCNb[8]\PfCListeCCOp[12]\PfCListeCCNb[9]}}}}\\
       \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[3]\PfCListeCCNb[4]\PfCListeCCOp[8]\PfCListeCCNb[7]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[2]\PfCListeCCOp[4]\PfCListeCCNb[5]\PfCListeCCOp[9]\PfCListeCCNb[8]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[3]\PfCListeCCOp[5]\PfCListeCCNb[6]\PfCListeCCOp[10]\PfCListeCCNb[9]}}}}\\
       \CodeAfter
       \tikz\draw (1-|1) rectangle (6-|6);
@@ -408,12 +1425,59 @@
       \end{NiceTabular}        
     }{%
       \readlist*\PfCListeCCOp{#2}%
+      \xdef\PfCCCfoo{\useKV[CalculsCroises]{ListeNombres}}%
+      \readlist*\PfCListeCCAide{\PfCCCfoo}%
       \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
-        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[1]}}{~}}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[3]}}{~}}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[5]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[2]\PfCListeCCOp[3]\PfCListeCCOp[4]\PfCListeCCOp[5]}}}}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[1]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[1]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[1]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[3]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[3]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[3]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[5]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[5]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[5]}}{}%
+            }%
+          }{}%
+}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[2]\PfCListeCCOp[3]\PfCListeCCOp[4]\PfCListeCCOp[5]}}}}\\
         \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[8]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[8]$}}\\
-        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[9]}}{~}}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[11]}}{~}}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[13]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[9]\PfCListeCCOp[10]\PfCListeCCOp[11]\PfCListeCCOp[12]\PfCListeCCOp[13]}}}}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[9]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[9]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[9]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[11]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[11]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[11]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[13]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[13]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[13]}}{}%
+            }%
+          }{}%
+}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[9]\PfCListeCCOp[10]\PfCListeCCOp[11]\PfCListeCCOp[12]\PfCListeCCOp[13]}}}}\\
         \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[14]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[14]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[15]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[15]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[16]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[16]$}}\\
-        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[17]}}{~}}&\StrCompare{\PfCListeCCOp[18]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[18]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[19]}}{~}}&\StrCompare{\PfCListeCCOp[20]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[20]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[21]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[17]\PfCListeCCOp[18]\PfCListeCCOp[19]\PfCListeCCOp[20]\PfCListeCCOp[21]}}}}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[17]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[17]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[17]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[18]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[18]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[19]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[19]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[19]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[20]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[20]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[21]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[21]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[21]}}{}%
+            }%
+          }{}%
+}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[17]\PfCListeCCOp[18]\PfCListeCCOp[19]\PfCListeCCOp[20]\PfCListeCCOp[21]}}}}\\
         \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[6]\PfCListeCCOp[9]\PfCListeCCOp[14]\PfCListeCCOp[17]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[3]\PfCListeCCOp[7]\PfCListeCCOp[11]\PfCListeCCOp[15]\PfCListeCCOp[19]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[5]\PfCListeCCOp[8]\PfCListeCCOp[13]\PfCListeCCOp[16]\PfCListeCCOp[21]}}}}\\
         \CodeAfter
         \tikz\draw (1-|1) rectangle (6-|6);
@@ -732,8 +1796,9 @@
 %%%
 % Kakuro
 %%%
-\setKVdefault[Kakuro]{CouleurCase=LightGray,Taille=5,Solution=false,Largeur=2em,Aide=false,CouleurSolution=Black}
+\setKVdefault[Kakuro]{CouleurCase=LightGray,TLargeur=5,THauteur=5,Solution=false,Largeur=2em,Aide=false,CouleurSolution=Black,Tailles=false}%,Taille=5
 \defKV[Kakuro]{ListeNombres=\setKV[Kakuro]{Aide}}%
+\defKV[Kakuro]{Taille=\setKV[Kakuro]{Tailles}}%
 
 \newlength\PfCKakuro%
 
@@ -740,6 +1805,10 @@
 \NewDocumentCommand\Kakuro{o m}{%
   \useKVdefault[Kakuro]%
   \setKV[Kakuro]{#1}%
+  \ifboolKV[Kakuro]{Tailles}{%
+    \setKV[Kakuro]{THauteur=\useKV[Kakuro]{Taille}}%
+    \setKV[Kakuro]{TLargeur=\useKV[Kakuro]{Taille}}%
+  }{}%
   \setlength{\PfCKakuro}{\useKV[Kakuro]{Largeur}+\tabcolsep}%
   \setsepchar[*]{,*/}%
   \readlist*\ListeCasesKK{#2}%
@@ -748,21 +1817,21 @@
   \readlist*\ListeKakuroNombres{\ListeAvantNombres}%
   \savecomparemode%
   \comparestrict%
-  \begin{NiceTabular}{*{\useKV[Kakuro]{Taille}}{m{\useKV[Kakuro]{Largeur}}}}[hvlines]
-    \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Kakuro]{Taille}-1}}}\do{%
-      \xintFor* ##2 in {\xintSeq{1}{\useKV[Kakuro]{Taille}}}\do{%
+  \begin{NiceTabular}{*{\useKV[Kakuro]{TLargeur}}{m{\useKV[Kakuro]{Largeur}}}}[hvlines]
+    \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Kakuro]{THauteur}-1}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[Kakuro]{TLargeur}}}\do{%
         \rule{0pt}{\PfCKakuro}%
-        \StrCompare{\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2},1]}{*}[\PfCTestBlack]
+        \StrCompare{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}{*}[\PfCTestBlack]
         \xintifboolexpr{\PfCTestBlack==0}{%
           \Block[fill=black]{1-1}{}%
         }{%
-          \xintifboolexpr{\listlen\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2}]==2}{
-            \Block[fill=\useKV[Kakuro]{CouleurCase}]{1-1}{\diagbox{\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2},1]}{\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2},2]}}%
+          \xintifboolexpr{\listlen\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2}]==2}{
+            \Block[fill=\useKV[Kakuro]{CouleurCase}]{1-1}{\diagbox{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},2]}}%
           }{%
-            \Block{1-1}{\ifboolKV[Kakuro]{Solution}{\Large\color{\useKV[Kakuro]{CouleurSolution}}\num{\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2},1]}}{%
+            \Block{1-1}{\ifboolKV[Kakuro]{Solution}{\Large\color{\useKV[Kakuro]{CouleurSolution}}\num{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}}{%
                 \ifboolKV[Kakuro]{Aide}{%
                   \xintFor* ##3 in{\xintSeq{1}{\ListeKakuroNombreslen}}\do{%
-                    \Block{1-1}{\xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2},1]==\ListeKakuroNombres[##3]}{\Large\color{\useKV[Kakuro]{CouleurSolution}}\num{\ListeCasesKK[\fpeval{\useKV[Kakuro]{Taille}*##1+##2},1]}}{}}%
+                    \Block{1-1}{\xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]==\ListeKakuroNombres[##3]}{\Large\color{\useKV[Kakuro]{CouleurSolution}}\num{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}}{}}%
                   }%
                 }{}%
               }%
@@ -5381,18 +6450,458 @@
 %%%
 % Labyrinthe Nombre
 %%%
-\setKVdefault[ClesLabyNb]{Multiple=5,XDepart=0,YDepart=0,Longueur=7,Largeur=4,XArrivee=6,YArrivee=3,Solution=false,Echelle=1,Angle=0,Couleur=red,Murs=false,Nom=Ex1,CouleurChemin=LightSteelBlue}
+\setKVdefault[ClesLabyNb]{Multiple=5,XDepart=0,YDepart=0,Longueur=7,Largeur=4,XArrivee=6,YArrivee=3,Solution=false,Echelle=1,Angle=0,Couleur=red,Murs=false,Nom=Ex1,CouleurChemin=Brown,DoubleOperation=false,Chemin=false,EntreeSortie=false,Entree="Nord",Sortie="Sud",SortieUnique=true}
 
 \newcommand\LabyNombre[1][]{%
   \useKVdefault[ClesLabyNb]%
   \setKV[ClesLabyNb]{#1}%
-  \ifboolKV[ClesLabyNb]{Solution}{%
-    \TraceSolution{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}
+  \ifboolKV[ClesLabyNb]{EntreeSortie}{%
+    \ifboolKV[ClesLabyNb]{Solution}{%
+      \TraceLabyMathAleaSolution{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+    }{%
+      \TraceLabyMathAlea{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+    }%
   }{%
-    \TraceLabyNombre{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}
+    \ifboolKV[ClesLabyNb]{DoubleOperation}{%
+      \ifboolKV[ClesLabyNb]{Solution}{%
+        \TraceDoubleSolution{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+      }{%
+        \TraceLabyNombreDouble{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+      }%
+    }{%
+      \ifboolKV[ClesLabyNb]{Solution}{%
+        \TraceSolution{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+      }{%
+        \TraceLabyNombre{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+      }%
+    }%
   }%
+}%
+
+\newcommand\TraceLabyMathAlea[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    input PfCLabyNombre;
+
+    boolean Murs;
+    Murs=\useKV[ClesLabyNb]{Murs};
+
+    string Entree,Sortie;
+    Entree=\useKV[ClesLabyNb]{Entree};
+    Sortie=\useKV[ClesLabyNb]{Sortie};
+    boolean SortieUnique;
+    SortieUnique:=\useKV[ClesLabyNb]{SortieUnique};
+    picture Square;
+    Square=image(
+    path Test;
+    Test=unitsquare scaled 10mm;
+    trace subpath(0.85,1.15) of Test;
+    trace subpath(1.85,2.15) of Test;
+    trace subpath(2.85,3.15) of Test;
+    trace subpath(3.85,4.15) of Test;
+    );
+    
+    numeric Multiple;
+    Multiple=#1;
+    % Initialisation du labyrinthe
+    InitialisationLabyrinthe(#2,#3);
+    % On initialise les paramètres du parcours
+    numeric choixligneD,choixligneA,choixcolonneD,choixcolonneA;
+    choixligneD=xpart(#4);
+    choixcolonneD=ypart(#4);
+    choixligneA=xpart(#5);
+    choixcolonneA=ypart(#5);%
+    pair Depart;
+    Depart=N[choixligneD][choixcolonneD];
+    pair Arrivee;
+    Arrivee=N[choixligneA][choixcolonneA];
+    pair Mobile;
+    Mobile=Depart;
+    %
+    RAZPileChemin;
+
+    if \useKV[ClesLabyNb]{SortieUnique}:
+    if (Sortie="Est") or (Sortie="Ouest"):
+    for k=0 upto LargeurLaby-1:
+    if k<>choixligneA:
+    CaseExploree[k][choixcolonneA]:=true;
+    fi;
+    endfor;
+    elseif (Sortie="Nord") or (Sortie="Sud"):
+    for k=0 upto LongueurLaby-1:
+    if k<>choixcolonneA:
+    CaseExploree[choixligneA][k]:=true;
+    fi;
+    endfor;
+    fi;
+    fi;
+    % Exploration du labyrinthe
+    if Entree="Nord":
+    CaseExploree[choixligneD-1][choixcolonneD]:=true;
+    elseif Entree="Sud":
+    CaseExploree[choixligneD+1][choixcolonneD]:=true;
+    elseif Entree="Est":
+    CaseExploree[choixligneD][choixcolonneD+1]:=true;
+    elseif Entree="Ouest":
+    CaseExploree[choixligneD][choixcolonneD-1]:=true;
+    fi;
+    %
+    PushChemin((choixligneD,choixcolonneD));
+    CaseExploree[choixligneD][choixcolonneD]:=true;
+    VoisinDispo(choixligneD,choixcolonneD);
+    forever: exitif Mobile=Arrivee;%nb=0;
+    nb:=ceiling(uniformdeviate(nbvoisin));
+    if nb>0:
+      for k=1 upto nbvoisin:
+        CaseExploree[xpart(PileVoisin[k])][ypart(PileVoisin[k])]:=true;
+      endfor;
+      PushChemin((xpart(PileVoisin[nb]),ypart(PileVoisin[nb])));
+      Mobile:=N[xpart(PileChemin[indiceChemin])][ypart(PileChemin[indiceChemin])];
+      VoisinDispo(xpart(PileChemin[indiceChemin]),ypart(PileChemin[indiceChemin]));
+    else:
+      PopCheminMathAlea;
+    fi;
+    endfor;
+    % Affichagefinal
+    % on sauvegarde les nombres aléatoires
+    numeric NbAffiche[];
+    numeric NbSol[];
+    % on écrit des nombres au hasard, mais sans être multiple du nombre choisi
+    numeric nbaffiche;
+    nbaffiche=0;
+    for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+        nbaffiche:=nbaffiche+1;
+        NbAffiche[nbaffiche]:=(50+ceiling(uniformdeviate(100)))*Multiple+ceiling(uniformdeviate(Multiple-1));
+      endfor;
+    endfor;
+    % On crée des multiples du nombre choisi
+    for k=1 upto indiceChemin:
+      NbSol[k]=(50+ceiling(uniformdeviate(100)))*Multiple;
+    endfor;
+    % On affiche
+    picture Corps;
+    Corps=image(
+      nbaffiche:=0;
+      for k=0 upto LargeurLaby-1:
+        for l=0 upto LongueurLaby-1:
+	  nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+      endfor;
+      for k=1 upto indiceChemin:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      % trace TraceLabyrinthe;
+      for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      trace Square shifted N[k][l];
+      endfor;
+      endfor;
+      trace u*(0,0)--u*(LongueurLaby,0)--u*(LongueurLaby,-LargeurLaby)--u*(0,-LargeurLaby)--cycle;
+      % On dessine l'entrée.
+      if Entree="Nord":
+      N[-1][-1]:=Depart+(0,10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(1,4) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Ouest":
+      N[-1][-1]:=Depart+(-10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(2,5) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(1.15,1.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Sud":
+      N[-1][-1]:=Depart+(0,-10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(3,6) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(2.15,2.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Est":
+      N[-1][-1]:=Depart+(10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(0,3) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(3.18,3.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      fi;
+      % On dessine les sorties
+      if Sortie="Nord":
+      N[-2][-2]=Arrivee+(5mm,20mm);
+      for k=0 upto LongueurLaby-1:
+      draw ((point(0.15) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      draw ((point(0.85) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted (N[0][k]+(0,10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[0][k]+(0,10mm)));
+      endfor;
+      elseif Sortie="Ouest":
+      N[-2][-2]=Arrivee+(-10mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(1.15) of unitsquare scaled 10mm)--0.5[(point(1.15) of unitsquare scaled 10mm),(point(3.85) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      draw ((point(1.85) of unitsquare scaled 10mm)--0.5[(point(1.85) of unitsquare scaled 10mm),(point(3.15) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      undraw (subpath(1.18,1.82) of unitsquare scaled 10mm) shifted (N[k][0]+(-10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][0]+(-10mm,0)));
+      endfor;
+      elseif Sortie="Sud":
+      N[-2][-2]=Arrivee+(5mm,-10mm);
+      for k=0 upto LongueurLaby-1:
+      draw ((point(2.85) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      draw ((point(2.15) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      undraw (subpath(2.18,2.82) of unitsquare scaled 10mm) shifted (N[LargeurLaby-1][k]+(0,-10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[LargeurLaby-1][k]+(0,-10mm)));
+      endfor;
+      elseif Sortie="Est":
+      N[-2][-2]=Arrivee+(20mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(3.15) of unitsquare scaled 10mm)--0.5[(point(3.15) of unitsquare scaled 10mm),(point(1.85) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      draw ((point(3.85) of unitsquare scaled 10mm)--0.5[(point(3.85) of unitsquare scaled 10mm),(point(1.15) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      undraw (subpath(3.18,3.8) of unitsquare scaled 10mm) shifted (N[k][LongueurLaby-1]+(10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][LongueurLaby-1]+(10mm,0)));
+      endfor;
+      fi;
+      );
+    Corps:=(Corps scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+    trace Corps;
+  \end{mplibcode}
 }
 
+\newcommand\TraceLabyMathAleaSolution[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]%
+    color CouleurChemin;
+    CouleurChemin:=\useKV[ClesLabyNb]{CouleurChemin};
+    picture CorpsSolution;
+    CorpsSolution=image(
+    nbaffiche:=0;
+      for k=0 upto LargeurLaby-1:
+        for l=0 upto LongueurLaby-1:
+	  nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+      endfor;
+      for k=1 upto indiceChemin:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      % trace TraceLabyrinthe;
+      for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      trace Square shifted N[k][l];
+      endfor;
+      endfor;
+      trace u*(0,0)--u*(LongueurLaby,0)--u*(LongueurLaby,-LargeurLaby)--u*(0,-LargeurLaby)--cycle;
+      % On dessine l'entrée.
+      if Entree="Nord":
+      N[-1][-1]:=Depart+(0,10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(1,4) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Ouest":
+      N[-1][-1]:=Depart+(-10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(2,5) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(1.15,1.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Sud":
+      N[-1][-1]:=Depart+(0,-10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(3,6) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(2.15,2.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Est":
+      N[-1][-1]:=Depart+(10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(0,3) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(3.18,3.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      fi;
+      % On dessine les sorties
+      if Sortie="Nord":
+      N[-2][-2]=Arrivee+(5mm,20mm);
+      for k=0 upto LongueurLaby-1:
+      draw ((point(0.15) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      draw ((point(0.85) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted (N[0][k]+(0,10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[0][k]+(0,10mm)));
+      endfor;
+      elseif Sortie="Ouest":
+      N[-2][-2]=Arrivee+(-10mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(1.15) of unitsquare scaled 10mm)--0.5[(point(1.15) of unitsquare scaled 10mm),(point(3.85) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      draw ((point(1.85) of unitsquare scaled 10mm)--0.5[(point(1.85) of unitsquare scaled 10mm),(point(3.15) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      undraw (subpath(1.18,1.82) of unitsquare scaled 10mm) shifted (N[k][0]+(-10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][0]+(-10mm,0)));
+      endfor;
+      elseif Sortie="Sud":
+      N[-2][-2]=Arrivee+(5mm,-10mm);
+      for k=0 upto LongueurLaby-1:
+      % draw (Square) shifted (N[LargeurLaby-1][k]+(0,-10mm)) withcolor red;
+      draw ((point(2.85) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      draw ((point(2.15) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      undraw (subpath(2.18,2.82) of unitsquare scaled 10mm) shifted (N[LargeurLaby-1][k]+(0,-10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[LargeurLaby-1][k]+(0,-10mm)));
+      endfor;
+      elseif Sortie="Est":
+      N[-2][-2]=Arrivee+(20mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(3.15) of unitsquare scaled 10mm)--0.5[(point(3.15) of unitsquare scaled 10mm),(point(1.85) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      draw ((point(3.85) of unitsquare scaled 10mm)--0.5[(point(3.85) of unitsquare scaled 10mm),(point(1.15) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      undraw (subpath(3.18,3.8) of unitsquare scaled 10mm) shifted (N[k][LongueurLaby-1]+(10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][LongueurLaby-1]+(10mm,0)));
+      endfor;
+      fi;
+      path CheminSolution;
+      CheminSolution=(N[-1][-1] shifted (5mm,5mm))--((center unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD])
+      for k=2 upto indiceChemin-1:
+      -- ((center unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])])
+      endfor
+      --((center unitsquare scaled 10mm) shifted Arrivee)--N[-2][-2];
+      trace CheminSolution dashed evenly withcolor CouleurChemin;
+      );
+      CorpsSolution:=(CorpsSolution scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+      trace CorpsSolution;
+  \end{mplibcode}%
+}%
+
+\newcommand\TraceLabyNombreDouble[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    input PfCLabyNombre;
+
+    boolean Murs;
+    Murs=\useKV[ClesLabyNb]{Murs};
+    
+    numeric Multiple;
+    Multiple=#1;
+    % Initialisation du labyrinthe
+    InitialisationLabyrinthe(#2,#3);
+    % On initialise les paramètres du parcours
+    numeric choixligneD,choixligneA,choixcolonneD,choixcolonneA;
+    choixligneD=xpart(#4);
+    choixcolonneD=ypart(#4);
+    choixligneA=xpart(#5);
+    choixcolonneA=ypart(#5);%
+    pair Depart;
+    Depart=N[choixligneD][choixcolonneD];
+    pair Arrivee;
+    Arrivee=N[choixligneA][choixcolonneA];
+    pair Mobile;
+    Mobile=Depart;
+    RAZPileChemin;
+    % Exploration du labyrinthe
+    PushChemin((choixligneD,choixcolonneD));
+    CaseExploree[choixligneD][choixcolonneD]:=true;
+    VoisinDispo(choixligneD,choixcolonneD);
+    forever: exitif Mobile=Arrivee;%nb=0;
+    nb:=ceiling(uniformdeviate(nbvoisin));
+    if nb>0:
+      for k=1 upto nbvoisin:
+        CaseExploree[xpart(PileVoisin[k])][ypart(PileVoisin[k])]:=true;
+      endfor;
+      PushChemin((xpart(PileVoisin[nb]),ypart(PileVoisin[nb])));
+      Mobile:=N[xpart(PileChemin[indiceChemin])][ypart(PileChemin[indiceChemin])];
+      VoisinDispo(xpart(PileChemin[indiceChemin]),ypart(PileChemin[indiceChemin]));
+    else:
+      PopChemin;
+    fi;
+    endfor;
+    % Affichagefinal
+    % on sauvegarde les nombres aléatoires
+    numeric NbAffiche[];
+    numeric NbSol[];
+    % on écrit des nombres au hasard, mais sans être multiple du nombre choisi
+    numeric nbaffiche;
+    nbaffiche=0;
+    NbAffiche[0]=5+ceiling(uniformdeviate(7));
+    for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      nbaffiche:=nbaffiche+1;
+      mathalea:=uniformdeviate(1);
+      if mathalea<0.95:
+      NbAffiche[nbaffiche]=NbAffiche[nbaffiche-1]+Multiple+1;
+      else:
+      NbAffiche[nbaffiche]=NbAffiche[nbaffiche-1]*(Multiple-1);
+      fi;
+      endfor;
+    endfor;
+    % On crée des multiples du nombre choisi
+    NbSol[1]=5+ceiling(uniformdeviate(7));
+    for k=2 upto indiceChemin-1:
+    mathalea:=uniformdeviate(1);
+    if mathalea<0.9:
+    NbSol[k]=NbSol[k-1]+Multiple;
+    else:
+    NbSol[k]=NbSol[k-1]*Multiple;
+    fi;
+    endfor;
+    % On affiche
+    picture Corps;
+    Corps=image(
+      nbaffiche:=0;
+      for k=0 upto LargeurLaby-1:
+        for l=0 upto LongueurLaby-1:
+	  nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+      endfor;
+      remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNb]{Couleur};
+      remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNb]{Couleur};
+      for k=2 upto indiceChemin-1:
+        remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+        label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      trace TraceLabyrinthe;
+    );
+    Corps:=(Corps scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+    trace Corps;
+  \end{mplibcode}
+}
+
+\newcommand\TraceDoubleSolution[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    picture CorpsSolution;
+    CorpsSolution=image(
+      nbaffiche:=0;
+      for k=0 upto #3-1:
+        for l=0 upto #2-1:
+          nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+        endfor;
+      remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNb]{Couleur};
+      remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNb]{Couleur};
+      if \useKV[ClesLabyNb]{Chemin}:
+      for k=2 upto indiceChemin-1:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+      endfor;
+      trace ((center unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD])
+      for k=2 upto indiceChemin-1:
+      -- ((center unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])])
+      endfor
+      --((center unitsquare scaled 10mm) shifted Arrivee) dashed evenly withcolor Brown;
+      for k=2 upto indiceChemin-1:
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      else:
+      for k=2 upto indiceChemin-1:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor \useKV[ClesLabyNb]{CouleurChemin};
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      fi;
+      trace TraceLabyrinthe;
+      );
+      CorpsSolution:=(CorpsSolution scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+      trace CorpsSolution;
+  \end{mplibcode}
+}%
+
 \newcommand\TraceLabyNombre[6]{%
   \mplibforcehmode%
   \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
@@ -6504,7 +8013,7 @@
 }%
 
 %%% Autonomie %%%
-\setKVdefault[Autonomie]{AfficheMarge=false,TitreEnigme=Enigme,TitreAtoi=\`A toi,Enigme=false,TexteCorrection=\bfseries Correction,ARemplir=false,Deux=false}%
+\setKVdefault[Autonomie]{AfficheMarge=false,TitreEnigme=Enigme,TitreAtoi=\`A toi,Enigme=false,TexteCorrection=\bfseries Correction,ARemplir=false,Deux=false,Landscape=false}%
 
 \newcommand\Autonomie[3][]{%
   \useKVdefault[Autonomie]%
@@ -6541,6 +8050,10 @@
         \draw (E\i) to (F\i);%
       }%
     }%
+    \coordinate (O1) at ($(D1)!0.5!(D2)$);
+    \coordinate (O2) at ($(D3)!0.5!(D4)$);
+    \coordinate (O3) at ($(E1)!0.5!(E2)$);
+    \coordinate (O4) at ($(E3)!0.5!(E4)$);
     \coordinate (Q1) at ($(F1)!0.5!(A3)$);%
     \coordinate (Q2) at ($(F2)!0.5!(E1)$);%
     \coordinate (Q3) at ($(F3)!0.5!(E2)$);%
@@ -6549,20 +8062,44 @@
     \coordinate (Q6) at ($(C2)!0.5!(D1)$);%
     \coordinate (Q7) at ($(C3)!0.5!(D2)$);%
     \coordinate (Q8) at ($(C4)!0.5!(D3)$);%
-    \draw[dashed] (A1) to (B1);%
-    \draw[dashed] (A3) to (B3);%
-    \ifboolKV[Autonomie]{ARemplir}{%
+    \ifboolKV[Autonomie]{Landscape}{%
+      \draw[dashed] (C1) to (F1);
+      \draw[dashed] (C3) to (F3);
+      \draw (A2) to (B2);%
+    }{%
       \ifboolKV[Autonomie]{Deux}{%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test1) at ($(Q1)!0.5!(Q2)$) {\ListeAutoQ[1,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test2) at ($(Q3)!0.5!(Q4)$) {\ListeAutoQ[2,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test3) at ($(Q5)!0.5!(Q6)$) {\ListeAutoQ[3,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test4) at ($(Q7)!0.5!(Q8)$) {\ListeAutoQ[4,1]};%
+        \draw (C2) to (D2);
+        \draw (E2) to (F2);
       }{%
-        \foreach \i in {1,...,4}{%
-          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test\i) at (Q\i) {\ListeAutoQ[\i,1]};%
+        \foreach\i in{1,...,4}{%
+          \draw (C\i) to (D\i);
+          \draw (E\i) to (F\i);
         }%
-        \foreach \i in {5,...,8}{%
-          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test\i) at (Q\i) {\ListeAutoQ[\i,1]};%
+      }%
+      \draw[dashed] (A1) to (B1);%
+      \draw[dashed] (A3) to (B3);%
+    }%
+    %\draw[dashed] (A1) to (B1);%
+    %\draw[dashed] (A3) to (B3);%
+    \ifboolKV[Autonomie]{ARemplir}{%
+      \ifboolKV[Autonomie]{Landscape}{%
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O1) {\ListeAutoQ[1,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O2) {\ListeAutoQ[2,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O3) {\ListeAutoQ[3,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O4) {\ListeAutoQ[4,1]};
+      }{%
+        \ifboolKV[Autonomie]{Deux}{%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test1) at ($(Q1)!0.5!(Q2)$) {\ListeAutoQ[1,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test2) at ($(Q3)!0.5!(Q4)$) {\ListeAutoQ[2,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test3) at ($(Q5)!0.5!(Q6)$) {\ListeAutoQ[3,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test4) at ($(Q7)!0.5!(Q8)$) {\ListeAutoQ[4,1]};%
+        }{%
+          \foreach \i in {1,...,4}{%
+            \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test\i) at (Q\i) {\ListeAutoQ[\i,1]};%
+          }%
+          \foreach \i in {5,...,8}{%
+            \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test\i) at (Q\i) {\ListeAutoQ[\i,1]};%
+          }%
         }%
       }%
     }{%
@@ -6639,23 +8176,51 @@
     \coordinate (V6) at ($(T6)!0.5!(U6)$);%
     \coordinate (V7) at ($(T7)!0.5!(U7)$);%
     \coordinate (V8) at ($(T8)!0.5!(U8)$);%
-    \draw[dashed] (A1) to (B1);%
-    \draw[dashed] (A2) to (B2);%
-    \draw[dashed] (A3) to (B3);%
+    \coordinate (W1) at ($(A3)!0.5!(E1)$);
+    \coordinate (W2) at ($(E1)!0.5!(E2)$);
+    \coordinate (W3) at ($(E2)!0.5!(E3)$);
+    \coordinate (W4) at ($(E3)!0.5!(E4)$);
+    \coordinate (W5) at ($(A1)!0.5!(D1)$);
+    \coordinate (W6) at ($(D1)!0.5!(D2)$);
+    \coordinate (W7) at ($(D2)!0.5!(D3)$);
+    \coordinate (W8) at ($(D3)!0.5!(D4)$);
+    \ifboolKV[Autonomie]{Landscape}{%
+      \draw[dashed] (C1) to (F1);%
+      \draw[dashed] (C3) to (F3);
+      \draw (A2) to (B2);%
+    }{%
+      \draw[dashed] (A1) to (B1);%
+      \draw[dashed] (A2) to (B2);
+      \draw[dashed] (A3) to (B3);%
+    }%
+    %\draw[dashed] (A1) to (B1);%
+    %\draw[dashed] (A2) to (B2);%
+    %\draw[dashed] (A3) to (B3);%
     \ifboolKV[Autonomie]{ARemplir}{%
-      \ifboolKV[Autonomie]{Deux}{%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V1)!0.5!(V2)$) {\ListeAutoEn[1,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V3)!0.5!(V4)$) {\ListeAutoEn[2,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V5)!0.5!(V6)$) {\ListeAutoEn[3,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V7)!0.5!(V8)$) {\ListeAutoEn[4,1]};%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R1)!0.5!(R2)$) {\ListeAutoQ[1,2]};%%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R3)!0.5!(R4)$) {\ListeAutoQ[2,2]};%%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R5)!0.5!(R6)$) {\ListeAutoQ[3,2]};%%
-        \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R7)!0.5!(R8)$) {\ListeAutoQ[4,2]};%%
+      \ifboolKV[Autonomie]{Landscape}{%
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W2) {\ListeAutoEn[4,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W4) {\ListeAutoEn[3,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W6) {\ListeAutoEn[2,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W8) {\ListeAutoEn[1,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W1) {\ListeAutoQ[4,2]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W3) {\ListeAutoQ[3,2]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W5) {\ListeAutoQ[2,2]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W7) {\ListeAutoQ[1,2]};
       }{%
-        \foreach \i in {1,...,8}{%
-          \node[text width=0.9*0.25\paperwidth] at (V\i) {\ListeAutoQ[\i,2]};%
-          \node[text width=0.9*0.25\paperwidth] at (R\i) {\ListeAutoEn[\i,1]};%
+        \ifboolKV[Autonomie]{Deux}{%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V1)!0.5!(V2)$) {\ListeAutoEn[1,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V3)!0.5!(V4)$) {\ListeAutoEn[2,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V5)!0.5!(V6)$) {\ListeAutoEn[3,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V7)!0.5!(V8)$) {\ListeAutoEn[4,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R1)!0.5!(R2)$) {\ListeAutoQ[1,2]};%%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R3)!0.5!(R4)$) {\ListeAutoQ[2,2]};%%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R5)!0.5!(R6)$) {\ListeAutoQ[3,2]};%%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R7)!0.5!(R8)$) {\ListeAutoQ[4,2]};%%
+        }{%
+          \foreach \i in {1,...,8}{%
+            \node[text width=0.9*0.25\paperwidth] at (V\i) {\ListeAutoQ[\i,2]};%
+            \node[text width=0.9*0.25\paperwidth] at (R\i) {\ListeAutoEn[\i,1]};%
+          }%
         }%
       }%
     }{%
@@ -9041,7 +10606,7 @@
 %%%
 % Le th\'eor\`eme de Pythagore
 %%%
-\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0,Perso=false,AllPerso=false}
+\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0,Perso=false,AllPerso=false,SansMots=false}
 
 % On d\'efinit les figures \`a utiliser
 \def\MPFigurePytha#1#2#3#4#5#6{%
@@ -9222,6 +10787,88 @@
   \fi
 }
 
+\def\MPFigurePythaSansMots#1#2#3#4#5#6{%
+  % #1 Premier sommet
+  % #2 Sommet de l'angle droit
+  % #3 troisi\`eme sommet
+  % #4 1ere longueur
+  % #5 2eme longueur
+  % #6 angle de rotation de la figure
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesPythagore]{Echelle};
+    pair A,B,C,O,D,E,F,L[],M[],N[];%B est le sommet de l'angle droit
+    O=u*(2.5,2.5);
+    path cc;
+    cc=(fullcircle scaled 4u) shifted O;
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.9*length cc) of cc;
+    B=A rotatedabout(O,-120);
+    C=2[A,O];
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % On d\'efinit l'angle droit
+    D-B=7*unitvector(C-B);
+    F-B=7*unitvector(A-B);
+    E-D=F-B;
+    trace polygone(A,B,C);
+    draw D--E--F;
+    L1=rotation(B,A,90);
+    L2-L1=B-A;
+    trace chemin(A,L1,L2,B);
+    M1=rotation(C,B,90);
+    M2-M1=C-B;
+    trace chemin(B,M1,M2,C);
+    N1=rotation(A,C,90);
+    N2-N1=A-C;
+    trace chemin(C,N1,N2,A);    
+    numeric decalage;
+    decalage=3mm;
+    if (#4<#5) or (#4=#5) :
+    if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]+decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(B,M2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}+\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4+#5*#5}}$\\\end{tabular}"),iso(C,N2));
+     else:
+        label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]+decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(B,M2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}+\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4+#5*#5}}$\\\end{tabular}"),iso(C,N2));
+        drawarrow 2/10[iso(A,L2),iso(C,N2)]--8/10[iso(A,L2),iso(C,N2)];
+        drawarrow 2/10[iso(B,M2),iso(C,N2)]--8/10[iso(B,M2),iso(C,N2)];
+     fi
+    else:
+      if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(C,N2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}-\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4-#5*#5}}$\\\end{tabular}"),iso(B,M2));
+        drawarrow 2/10[iso(A,L2),iso(B,M2)]--8/10[iso(A,L2),iso(B,M2)];
+        drawarrow 2/10[iso(C,N2),iso(B,M2)]--8/10[iso(C,N2),iso(B,M2)];
+        else:
+        label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(C,N2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}-\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4-#5*#5}}$\\\end{tabular}"),iso(B,M2));
+        drawarrow 2/10[iso(A,L2),iso(B,M2)]--8/10[iso(A,L2),iso(B,M2)];
+        drawarrow 2/10[iso(C,N2),iso(B,M2)]--8/10[iso(C,N2),iso(B,M2)];
+      fi;
+    fi;
+    label(btex #3 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #1 etex,1.2[O,C]);
+  \end{mplibcode}
+  \fi
+}
+
 \newcommand\RedactionPythagore{}%
 \newcommand\RedactionReciPythagore{}%
 \newcommand\RedactionCalculsPythagore{}%
@@ -9228,7 +10875,8 @@
 \newcommand\RedactionCalculsReciPythagore{}%
 \newcommand\RedactionConclusionReciPythagore{}%
 
-\newcommand\Pythagore[5][]{%
+% \newcommand\Pythagore[5][]{%
+\NewDocumentCommand\Pythagore{o m m m m}{%
   % #1 Param\`etres sous forme de cl\'es
   % #2 Nom "complet" du triangle : ABC par exemple
   % #3 Premi\`ere longueur
@@ -9417,51 +11065,55 @@
         \end{multicols}
       }{%
         % On d\'emarre la r\'esolution
-        \ifboolKV[ClesPythagore]{AllPerso}{%
-          \RedactionPythagore%
-          \RedactionCalculsPythagore%
+        \ifboolKV[ClesPythagore]{SansMots}{%
+         \MPFigurePythaSansMots{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}
         }{%
-          \ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
-            }}%
-          \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
-            \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
-            \begin{align*}
-              \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
-              \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
-              \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-              \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
-              \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-              \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
-                                                               \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
-              }
-            \end{align*}
-          }{%\else
-            \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
-            \ifboolKV[ClesPythagore]{Soustraction}{%
+          \ifboolKV[ClesPythagore]{AllPerso}{%
+            \RedactionPythagore%
+            \RedactionCalculsPythagore%
+          }{%
+            \ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
+              }}%
+            \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
+              \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
               \begin{align*}
-                \NomA\NomB^2&=\NomA\NomC^2-\NomB\NomC^2\\
-                \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}-\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
-                \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-                \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
-                \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-                \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
-                                                                 \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
-                }
-              \end{align*}
-            }{%
-              \begin{align*}
                 \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
-                \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
-                \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-                \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-                \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
                 \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-                \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}%
-                                                                 \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                                 \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
                 }
               \end{align*}
-            }%
-          }%\fi%
+            }{%\else
+              \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+              \ifboolKV[ClesPythagore]{Soustraction}{%
+                \begin{align*}
+                  \NomA\NomB^2&=\NomA\NomC^2-\NomB\NomC^2\\
+                  \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}-\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                  \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                  \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                  \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+                  \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                                   \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                  }
+                \end{align*}
+              }{%
+                \begin{align*}
+                  \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+                  \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                  \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                  \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                  \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                  \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+                  \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}%
+                                                                   \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                  }
+                \end{align*}
+              }%
+            }%\fi%
+          }%
         }%
       }%
     }%
@@ -11449,7 +13101,9 @@
   \ppcm=\numexpr#1*#2/\pgcd\relax%
 }%
 
-\setKVdefault[ClesThales]{Calcul=true,Droites=false,Propor=false,Segment=false,Figure=false,FigureSeule=false,Figurecroisee=false,FigurecroiseeSeule=false,Angle=0,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false,Echelle=1cm,Perso=false,CalculsPerso=false,IntroCalculs}
+\setKVdefault[ClesThales]{Calcul=true,Droites=false,Propor=false,Segment=false,Figure=false,FigureSeule=false,Figurecroisee=false,FigurecroiseeSeule=false,Angle=0,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false,Echelle=1cm,Perso=false,CalculsPerso=false,IntroCalculs,CouleursNum=false,CouleursDen=false}
+\defKV[ClesThales]{CouleurNum=\setKV[ClesThales]{CouleursNum}}
+\defKV[ClesThales]{CouleurDen=\setKV[ClesThales]{CouleursDen}}
 
 \DeclareSIUnit{\PfCThalesUnit}{\useKV[ClesThales]{Unite}}%
 
@@ -11466,6 +13120,20 @@
   \mplibforcehmode
   \begin{mplibcode}
     u:=\useKV[ClesThales]{Echelle};
+    boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;
     pair A,B,C,M,N,O;%
     %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
     A=u*(1,1);
@@ -11490,6 +13158,14 @@
     triangle=cotes1--cotes2--cotes3--cycle;
     draw triangle;
     draw cotes4;
+    if CouleursDen:
+    draw triangle dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen;
+    fi;
+    if CouleursNum:
+    draw (cotes1 cutafter cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes4 cutbefore cotes1 cutafter cotes3) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes3 cutbefore cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    fi;
     %on labelise
     label(btex #1 etex,1.15[O,A]);
     label(btex #2 etex,1.15[O,B]);
@@ -11513,7 +13189,20 @@
   \end{mplibcode}
 %  \mplibcodeinherit{disable}
   \else
-  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}]
+  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;}]
     pair A,B,C,M,N,O;%
     %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
     A=u*(1,1);
@@ -11538,6 +13227,14 @@
     triangle=cotes1--cotes2--cotes3--cycle;
     draw triangle;
     draw cotes4;
+        if CouleursDen:
+    draw triangle dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen;
+    fi;
+    if CouleursNum:
+    draw (cotes1 cutafter cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes4 cutbefore cotes1 cutafter cotes3) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes3 cutbefore cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    fi;
     %on labelise
     label(btex #1 etex,1.15[O,A]);
     label(btex #2 etex,1.15[O,B]);
@@ -11658,6 +13355,20 @@
   \mplibcodeinherit{enable}
   \begin{mplibcode}
     u:=\useKV[ClesThales]{Echelle};
+    boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;
     pair A,B,C,M,N,O;%
     O=(2.5u,2.5u);
     path cc;
@@ -11683,6 +13394,20 @@
     for k=1 upto 6:
     draw cotes[k];
     endfor;
+    if CouleursDen:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen);
+    draw (cotes[1] cutafter cotes[2]);
+    draw (cotes[2] cutbefore cotes[1] cutafter cotes[3]);
+    draw (cotes[3] cutbefore cotes[2]);
+    drawoptions();
+    fi;
+    if CouleursNum:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurNum);
+    draw (cotes[5] cutafter cotes[4]);
+    draw (cotes[4] cutbefore cotes[5] cutafter cotes[6]);
+    draw (cotes[6] cutafter cotes[4]);
+    drawoptions();
+    fi;
     pair I;
     % On d\'efinit le centre du cercle inscrit \`a AMC
     (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
@@ -11710,7 +13435,20 @@
   \end{mplibcode}
   \mplibcodeinherit{disable}
   \else
-  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}]
+  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;}]
     pair A,B,C,M,N,O;%
     O=(2.5u,2.5u);
     path cc;
@@ -11736,6 +13474,20 @@
     for k=1 upto 6:
     draw cotes[k];
     endfor;
+    if CouleursDen:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen);
+    draw (cotes[1] cutafter cotes[2]);
+    draw (cotes[2] cutbefore cotes[1] cutafter cotes[3]);
+    draw (cotes[3] cutbefore cotes[2]);
+    drawoptions();
+    fi;
+    if CouleursNum:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurNum);
+    draw (cotes[5] cutafter cotes[4]);
+    draw (cotes[4] cutbefore cotes[5] cutafter cotes[6]);
+    draw (cotes[6] cutafter cotes[4]);
+    drawoptions();
+    fi;
     pair I;
     % On d\'efinit le centre du cercle inscrit \`a AMC
     (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
@@ -11891,7 +13643,7 @@
       est un tableau de proportionnalit\'e\ifboolKV[ClesThales]{Segment}{.}{ d'apr\`es le th\'eor\`eme de Thal\`es.}%
     }{%
       \ifboolKV[ClesThales]{Segment}{on a :}{le th\'eor\`eme de Thal\`es permet d'\'ecrire :}%
-      \[\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#5}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#3}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#6}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#4}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#5#6}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#3#4}}\]%
+      \[\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursNum}{\mathcolor{\useKV[ClesThales]{CouleurNum}}{#2#5}}{#2#5}}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursDen}{\mathcolor{\useKV[ClesThales]{CouleurDen}}{#2#3}}{#2#3}}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursNum}{\mathcolor{\useKV[ClesThales]{CouleurNum}}{#2#6}}{#2#6}}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursDen}{\mathcolor{\useKV[ClesThales]{CouleurDen}}{#2#4}}{#2#4}}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursNum}{\mathcolor{\useKV[ClesThales]{CouleurNum}}{#5#6}}{#5#6}}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursDen}{\mathcolor{\useKV[ClesThales]{CouleurDen}}{#3#4}}{#3#4}}}\]%
     }%
   }%
 }%
@@ -13337,7 +15089,7 @@
 %%%
 % Statistiques
 %%%
-\newcommand\NbDonnees{}
+\newcommand\NbDonnees{}%
 \newcommand\SommeDonnees{}%
 \newcommand\EffectifTotal{}%
 \newcommand\Moyenne{}%
@@ -13360,7 +15112,7 @@
 Representation=false,%
 %Pour les barres horizontales
 Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dispo
-}
+}%
 %compl\'ements
 \defKV[ClesStat]{AngleRotationAbscisse=\setKV[ClesStat]{AbscisseRotation}}%
 \defKV[ClesStat]{AffichageDonnees=\setKV[ClesStat]{AffichageAngle=false}\setKV[ClesStat]{AffichageDonnee}}%
@@ -13367,9 +15119,9 @@
 \defKV[ClesStat]{CasesVides=\setKV[ClesStat]{CaseVide}}%
 \defKV[ClesStat]{LegendesVides=\setKV[ClesStat]{LegendeVide}}%
 % La construction du tableau
-\def\addtotok#1#2{#1\expandafter{\the#1#2}}
-\newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc
-\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{\ifboolKV[ClesStat]{Qualitatif}{&#1}{&\num{#1}}}\addtotok\tabtoksb{&\num{#2}}}
+\def\addtotok#1#2{#1\expandafter{\the#1#2}}%
+\newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc%
+\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{\ifboolKV[ClesStat]{Qualitatif}{&#1}{&\num{#1}}}\addtotok\tabtoksb{&\num{#2}}}%
 %
 \newcounter{PfCCompteLignes}%
 %
@@ -15109,8 +16861,8 @@
     trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
     --cycle;
     % etiquettage des pas
-    dotlabel.urt(btex \tiny #4 etex,pointarc(cc,0));
-    dotlabel.urt(btex \tiny #3 etex,(1/pas)[O,pointarc(cc,0)]);
+    dotlabel.urt(TEX("\tiny"&decimal(#4)),pointarc(cc,0));
+    dotlabel.urt(TEX("\tiny"&decimal(#3)),(1/pas)[O,pointarc(cc,0)]);
     % trac\'e des r\'esultats \'el\`eves
     pair El[];
     el=0;
@@ -15225,8 +16977,8 @@
   \useKVdefault[ClesBarre]%
   \setKV[ClesBarre]{#1}%
   \xdef\NomComp{\useKV[ClesBarre]{Nom}}%
-  \xdef\TexteOrigine{\useKV[ClesBarre]{Origine}}%
-  \xdef\TexteReference{\useKV[ClesBarre]{Reference}}%
+  \def\TexteOrigine{\useKV[ClesBarre]{TexteOrigine}}%
+  \def\TexteReference{\useKV[ClesBarre]{TexteReference}}%
   \xdef\CouleurFond{\useKV[ClesBarre]{CouleurFond}}%
   \xdef\CouleurGrad{\useKV[ClesBarre]{CouleurGraduation}}%
   \xdef\CouleurBarre{\useKV[ClesBarre]{CouleurBarre}}%
@@ -24317,7 +26069,7 @@
 \else%
 \NewDocumentEnvironment{Scratch}{o +b}{%
   \setKV[Scratch]{#1}%
-  \begin{mpost}[mpsettings={boolean Naturel;Naturel=\useKV[Scratch]{Naturel};if Naturel: input PfCPseudo; print:=true; else: input PfCScratch; print:=\useKV[Scratch]{Impression}; fi;NumeroteLignes:=\useKV[Scratch]{Numerotation};Echelle:=\useKV[Scratch]{Echelle};}]%
+  \begin{mpost}[mpsettings={boolean Naturel;Naturel=\useKV[Scratch]{Naturel};if Naturel: input PfCPseudo; print:=true; else: input PfCScratchpdf; print:=\useKV[Scratch]{Impression}; fi;NumeroteLignes:=\useKV[Scratch]{Numerotation};Echelle:=\useKV[Scratch]{Echelle};}]%
     #2%
     picture recap;%
     recap:=currentpicture scaled Echelle;%



More information about the tex-live-commits mailing list.