texlive[69336] Master/texmf-dist: profcollege (6jan24)

commits+karl at tug.org commits+karl at tug.org
Sun Jan 7 22:27:13 CET 2024


Revision: 69336
          https://tug.org/svn/texlive?view=revision&revision=69336
Author:   karl
Date:     2024-01-07 22:27:13 +0100 (Sun, 07 Jan 2024)
Log Message:
-----------
profcollege (6jan24)

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/PfCCalculatrice.mp
    trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCible.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCLego.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulArt.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCNumerationsAnciennes.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrio.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCConversion.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEquationModeleBarre.tex

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)

Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCCalculatrice.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCCalculatrice.mp	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCCalculatrice.mp	2024-01-07 21:27:13 UTC (rev 69336)
@@ -30,6 +30,9 @@
 boolean print;
 print:=false;
 
+color coulprint;
+coulprint=0.8white;
+
 color CouleurEcran;
 CouleurEcran=(107/255,148/255,107/255);
 
@@ -177,8 +180,8 @@
   nblignes:=nblignes+1;
   path Ecran;
   Ecran:=(u*(0,-1)--u*(LargeurEcran,-1)--u*(LargeurEcran,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
-  fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
-  draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+  fill Ecran withcolor if print=true:coulprint else:CouleurEcran fi;
+  draw Ecran withcolor if print=true:coulprint else:CouleurEcran fi;
   if length(nt)>0:
   for k=0 upto length(nt)-1:
     BlocAffichage;
@@ -187,13 +190,13 @@
   fi;
   for k=1 upto NB:
     Ecran:=(u*(0,-1)--u*(LargeurEcran,-1)--u*(LargeurEcran,7)--u*(0,7)--cycle) shifted(u*(0,-8*(k+nblignes-1)));
-    fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
-    draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+    fill Ecran withcolor if print=true:coulprint else:CouleurEcran fi;
+    draw Ecran withcolor if print=true:coulprint else:CouleurEcran fi;
   endfor;
   nblignes:=nblignes+NB+1;
   Ecran:=(u*(0,-1)--u*(LargeurEcran,-1)--u*(LargeurEcran,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
-  fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
-  draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+  fill Ecran withcolor if print=true:coulprint else:CouleurEcran fi;
+  draw Ecran withcolor if print=true:coulprint else:CouleurEcran fi;
   if Calcul:
     string toto;
     toto=decimal(rep);
@@ -207,4 +210,17 @@
   fi;
 enddef;
 
+def tand(expr nbang)=sind(nbang)/cosd(nbang)enddef;
+
+vardef arcsind(expr x)=%Définition mathématique en degré
+  angle((sqrt(1-x**2),x))
+enddef;
+
+vardef arccosd(expr x)=%Définition mathématique en degré
+  angle((x,sqrt(1-x**2)))
+enddef;
+
+vardef arctand(expr x)=arcsind(x/(1++x))
+enddef;
+
 endinput;

Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp	2024-01-07 21:27:13 UTC (rev 69336)
@@ -523,6 +523,45 @@
   tr
 enddef;
 
+vardef marque_para(expr dd,ee,pa)=
+  save im;
+  picture im;
+  pair kk,ll,mn,mo;
+  kk=point(pa*length dd) of dd;
+  ll=projection(kk,point(0.25*length ee) of ee,point(0.5*length ee) of ee);
+  mn=iso(kk,ll);
+  mo=(mn--kk) intersectionpoint cercles(mn,3mm);
+  im=image(
+    drawarrow mo--kk;
+    drawarrow symetrie(mo,mn)--ll;
+    label(btex // etex,mn);
+    );
+  im
+enddef;
+
+vardef marque_Para(text totem)(expr dd,ee,pa)=
+  save im;
+  picture im;
+  pair kk,ll,mn,mo;
+  kk=point(pa*length dd) of dd;
+  ll=projection(kk,point(0.25*length ee) of ee,point(0.5*length ee) of ee);
+  mn=iso(kk,ll);
+  mo=(mn--kk) intersectionpoint cercles(mn,3mm);
+  im=image(
+      drawarrow (mn{dir(210+angle(mn-mo))}..{dir(150+angle(mn-mo))}kk) cutbefore cercles(mn,3mm);
+    drawarrow symetrie((mn{dir(210+angle(mn-mo))}..{dir(150+angle(mn-mo))}kk) cutbefore cercles(mn,3mm),mn);
+    trace cercles(mn,3mm);
+    for p_=totem:
+    if p_="":
+      label(btex // etex ,mn);
+    else:
+      label(btex ? etex,mn);
+    fi;
+    endfor;
+    );
+  im
+enddef;
+
 %------------------------------------------------
 % Transformations
 %------------------------------------------------
@@ -1349,7 +1388,7 @@
   pair CentreE;
   CentreE=CentreCercleI(perpen,ptt,pttt);
   $=image(
-      fill (perpen--ptt--pttt--cycle) withcolor 0.9*white;
+      fill (perpen--ptt--pttt--cycle) withcolor gris;
     draw perpen--ptt--pttt--cycle;
     draw codeperp(ptt,perpen,pttt,5);
     fill homothetie(polygone(perpen,ptt,pttt),CentreE,0.6) withcolor white;

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -4,7 +4,7 @@
 \newcommand\Autonomie[3][]{%
   \useKVdefault[Autonomie]%
   \setKV[Autonomie]{#1}%
-  \setsepchar[*]{§*/}%
+  \setsepchar[*]{§*/}\reademptyitems%
   \readlist*\ListeAutoQ{#2}%
   % \setsepchar{§}
   % \readlist*\ListeAutoR{#3}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -81,7 +81,6 @@
 \readlist*\ListePetitsObjetsCAN{bonbons,billes,biscuits,gommes,clous,vis}
 \readlist*\ListeFruitsCAN{pommes,poires,abricots,cerises,fraises,framboises,noix,pêches,nectarines,myrtilles,oranges,mandarines}
 \readlist*\ListeSommetsCAN{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
-
 \newcommand\ExtraitPetitsObjets[1]{%
   \xdef\CANSGFoo{}%
   \foreachitem\compteur\in\ListePetitsObjetsCAN{%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -113,7 +113,12 @@
     \mplibnumbersystem{double}%
     \mplibforcehmode%
     \begin{mplibcode}%
+      defaultcolormodel := \useKV[ClesCalculatrice]{ModeleCouleur};
       input PfCCalculatrice;
+      if defaultcolormodel=7:
+      cmykcolor coulprint;
+      coulprint=0.2(0,0,0,1);
+      fi;
       LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};
       boolean Calcul;
       Calcul=\useKV[ClesCalculatrice]{Calcul};
@@ -128,7 +133,7 @@
   \fi%
 }%
 
-\setKVdefault[ClesCalculatrice]{Ecran=false,NbLignes=0,BL=0.775,Largeur=120,Calcul=false,Impression=false}%
+\setKVdefault[ClesCalculatrice]{ModeleCouleur=5,Ecran=false,NbLignes=0,BL=0.775,Largeur=120,Calcul=false,Impression=false}%
 
 \newcommand\Calculatrice[2][]{%
   \setstackgap{L}{\useKV[ClesCalculatrice]{BL}\baselineskip}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Calisson
 %%%
-\setKVdefault[Calisson]{Taille=3,Solution=false,Rayon=5cm,Couleur=red}%
+\setKVdefault[Calisson]{Taille=3,Solution=false,Rayon=5cm,Couleur=red,CouleurTrace=black}%
 
 \def\UpdatetoksCalissong#1\nil{\addtotok\tokcalissonlistetracesg{,"#1"}}%
 \def\UpdatetoksCalissongDepart#1\nil{\addtotok\tokcalissonlistetracesg{"#1"}}%
@@ -143,9 +143,11 @@
   boolean Solution;
   Solution:=\useKV[Calisson]{Solution};
   % 
-  color CouleurSolution;
+  color CouleurSolution,CouleurTrace;
   CouleurSolution:=\useKV[Calisson]{Couleur};
+  CouleurTrace:=\useKV[Calisson]{CouleurTrace};
   %
+  %
   Rayon=\useKV[Calisson]{Rayon};
   Taille=\useKV[Calisson]{Taille};
   %
@@ -219,6 +221,7 @@
   Depla:=Hor;
   %
   vardef LesTracesg(text t)=
+  drawoptions(withcolor CouleurTrace);
   trace polygone(A,B,C,D,E,F) withpen pencircle scaled 2;
   for k=1 upto 2*Taille-1:
   trace (point(k*length Gauche/(2*Taille)) of Gauche)--(point(k*length Droit/(2*Taille)) of Droit) dashed evenly;
@@ -225,6 +228,7 @@
   trace (point(k*length Haut/(2*Taille)) of Haut)--(point(k*length Bas/(2*Taille)) of Bas) dashed evenly;
   trace (point(k*length TopGauche/(2*Taille)) of TopGauche)--(point(k*length BasDroit/(2*Taille)) of BasDroit) dashed evenly;
   endfor;
+  drawoptions(withcolor CouleurTrace);
   n:=0;
   for p_=t:
   n:=n+1;
@@ -236,7 +240,7 @@
   fi;
   if (Retiens="0") or (Retiens="f"):
   elseif Retiens="t":
-  trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2;
+  trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurTrace;
   elseif Retiens="s":
   if Solution:
   trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution;
@@ -263,7 +267,7 @@
 %  fill ((fullcircle scaled 3mm) shifted M[n]);
   if (Retiens="0") or (Retiens="f"):
   elseif Retiens="t":
-  trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2;
+  trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurTrace;
   elseif Retiens="s":
   if Solution:
   trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution;

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Cartographie
 %%%
-\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2023/texmf-dist/metapost/profcollege/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2,Codes=false,Epaisseur=2}
+\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2023/texmf-dist/metapost/profcollege/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2,Codes=false,Epaisseur=2,ModeleCouleur}
 \defKV[Cartographie]{EchelleCarte=\setKV[Cartographie]{Carte}}
 \defKV[Cartographie]{Pays=\setKV[Cartographie]{PaysSeul}}
 \defKV[Cartographie]{Villes=\setKV[Cartographie]{VillesSup}}
@@ -135,6 +135,7 @@
 %    \mplibforcehmode
     \begin{mplibcode}
       input PfCMonde;
+      defaultcolormodel:=\useKV[Cartographie]{ModeleCouleur};
       string arborescence;
       arborescence:=\useKV[Cartographie]{Arborescence};
       LargeurCadre=\useKV[Cartographie]{Largeur};
@@ -147,6 +148,19 @@
       Impression=\useKV[Cartographie]{Impression};
       VillesSup=\useKV[Cartographie]{VillesSup};
       Codes=\useKV[Cartographie]{Codes};
+      if defaultcolormodel=7:
+      cmykcolor couleurfond,white,payscolor,couleurfleuve;
+      couleurfond=\useKV[Cartographie]{CouleurFond};
+      white=(0,0,0,1);
+      payscolor=white;
+      couleurfleuve=white;
+      if Impression:
+        noncolore:=true;
+        payscolor:=0.15white;
+        couleurfond:=(0,0,0,0);
+        couleurfleuve:=couleurfond;
+      fi;
+      else:
       couleurfond:=\useKV[Cartographie]{CouleurFond};
       if Impression:
         noncolore:=true;
@@ -154,6 +168,7 @@
         couleurfond:=white;
         couleurfleuve:=couleurfond;
       fi;
+      fi;
       capitales:=\useKV[Cartographie]{Capitales};
       All:=\useKV[Cartographie]{All};
       Europe:=\useKV[Cartographie]{Europe};

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCible.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCible.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCible.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -13,10 +13,10 @@
   \toklisteciblea{}%
   \xdef\PfCNombreZone{0}%
   \ifboolKV[Cible]{Flechettes}{}{%
-  \setsepchar{,}%
-  \readlist*\PfCListeCible{#2}%
-  \foreachitem\compteur\in\PfCListeCible{\expandafter\UpdatetoksCibleA\compteur\nil}%
-  \xdef\PfCNombreZone{\PfCListeCiblelen}%
+    \setsepchar{,}%
+    \readlist*\PfCListeCible{#2}%
+    \foreachitem\compteur\in\PfCListeCible{\expandafter\UpdatetoksCibleA\compteur\nil}%
+    \xdef\PfCNombreZone{\PfCListeCiblelen}%
   }%
   \BuildCible{\the\toklisteciblea}%
 }%
@@ -127,7 +127,6 @@
     \end{mplibcode}
   \else
     \begin{mpost}[mpsettings={Rayon=\useKV[Cible]{RayonBase};Ecart=\useKV[Cible]{Ecart};boolean Flechettes,Impression;Flechettes=\useKV[Cible]{Flechettes};Impression=\useKV[Cible]{Impression};NombreCercles=\PfCNombreZone;}]
-      
       vardef affichage(text t)=
       pair O;
       O=u*(5,5);
@@ -210,7 +209,8 @@
       n:=0;
       for p_=t:
       n:=n+1;
-      label(LATEX("\bfseries "&p_),E[n]);
+      % label(LATEX("\noexpand\bfseries "&p_),E[n]);
+      label(LATEX(p_),E[n]);
       endfor;
       enddef;
       

Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCConversion.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCConversion.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCConversion.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -0,0 +1,99 @@
+\setKVdefault[ClesConversion]{Longueur,Aire=false,Vol=false,Masses=false,Capas=false,Sans=false,Complete=40pt}
+\defKV[ClesConversion]{Masse=\setKV[ClesConversion]{Longueur=false}\setKV[ClesConversion]{Masses}}
+\defKV[ClesConversion]{Capa=\setKV[ClesConversion]{Longueur=false}\setKV[ClesConversion]{Capas}}
+
+\NewDocumentCommand\ChoixUniteD{m}{%
+  \IfStrEqCase{#1}{%
+    {G}{\DeclareSIUnit{\TempoPrefixeD}{\giga}\xdef\ExposantD{9}}%
+    {M}{\DeclareSIUnit{\TempoPrefixeD}{\mega}\xdef\ExposantD{6}}%
+    {t}{\DeclareSIUnit{\TempoPrefixeD}{\tonne}\xdef\ExposantD{6}}%
+    {q}{\DeclareSIUnit{\TempoPrefixeD}{\quintal}\xdef\ExposantD{5}}%
+    {k}{\DeclareSIUnit{\TempoPrefixeD}{\kilo}\xdef\ExposantD{3}}%
+    {h}{\DeclareSIUnit{\TempoPrefixeD}{\hecto}\xdef\ExposantD{2}}%
+    {da}{\DeclareSIUnit{\TempoPrefixeD}{\deca}\xdef\ExposantD{1}}%
+    {u}{\DeclareSIUnit{\TempoPrefixeD}{}\xdef\ExposantD{0}}%
+    {d}{\DeclareSIUnit{\TempoPrefixeD}{\deci}\xdef\ExposantD{-1}}%
+    {c}{\DeclareSIUnit{\TempoPrefixeD}{\centi}\xdef\ExposantD{-2}}%
+    {m}{\DeclareSIUnit{\TempoPrefixeD}{\milli}\xdef\ExposantD{-3}}%
+    {µ}{\DeclareSIUnit{\TempoPrefixeD}{\micro}\xdef\ExposantD{-6}}%
+    {n}{\DeclareSIUnit{\TempoPrefixeD}{\nano}\xdef\ExposantD{-9}}%
+  }%
+}%
+
+\NewDocumentCommand\ChoixUniteA{m}{%
+  \IfStrEqCase{#1}{%
+    {G}{\DeclareSIUnit{\TempoPrefixeA}{\giga}\xdef\ExposantA{9}}%
+    {M}{\DeclareSIUnit{\TempoPrefixeA}{\mega}\xdef\ExposantA{6}}%
+    {t}{\DeclareSIUnit{\TempoPrefixeA}{\tonne}\xdef\ExposantA{6}}%
+    {q}{\DeclareSIUnit{\TempoPrefixeA}{\quintal}\xdef\ExposantA{5}}%
+    {k}{\DeclareSIUnit{\TempoPrefixeA}{\kilo}\xdef\ExposantA{3}}%
+    {h}{\DeclareSIUnit{\TempoPrefixeA}{\hecto}\xdef\ExposantA{2}}%
+    {da}{\DeclareSIUnit{\TempoPrefixeA}{\deca}\xdef\ExposantA{1}}%
+    {u}{\DeclareSIUnit{\TempoPrefixeA}{}\xdef\ExposantA{0}}%
+    {d}{\DeclareSIUnit{\TempoPrefixeA}{\deci}\xdef\ExposantA{-1}}%
+    {c}{\DeclareSIUnit{\TempoPrefixeA}{\centi}\xdef\ExposantA{-2}}%
+    {m}{\DeclareSIUnit{\TempoPrefixeA}{\milli}\xdef\ExposantA{-3}}%
+    {µ}{\DeclareSIUnit{\TempoPrefixeA}{\micro}\xdef\ExposantA{-6}}%
+    {n}{\DeclareSIUnit{\TempoPrefixeA}{\nano}\xdef\ExposantA{-9}}%
+  }%
+}%
+
+\NewDocumentCommand\Convertir{somm}{%
+  \useKVdefault[ClesConversion]%
+  \setKV[ClesConversion]{#2}%
+  \StrBefore{#3}{>}[\PrefixeDepart]
+  \StrBehind{#3}{>}[\PrefixeArrivee]
+  \ChoixUniteD{\PrefixeDepart}%
+  \ChoixUniteA{\PrefixeArrivee}%
+  \ifboolKV[ClesConversion]{Aire}{%
+    \DeclareSIUnit{\TempoAvant}{\square}%
+    \DeclareSIUnit{\TempoBase}{\meter}
+    \xdef\PfCConvExposant{2}
+  }{\ifboolKV[ClesConversion]{Vol}{%
+      \DeclareSIUnit{\TempoAvant}{\cubic}%
+      \DeclareSIUnit{\TempoBase}{\meter}
+      \xdef\PfCConvExposant{3}
+    }{%
+      \DeclareSIUnit{\TempoAvant}{}%
+      \xdef\PfCConvExposant{1}
+    }%
+  }%
+  \ifboolKV[ClesConversion]{Masses}{%
+    \DeclareSIUnit{\TempoBase}{\gram}%
+  }{}%
+  \ifboolKV[ClesConversion]{Longueur}{%
+    \DeclareSIUnit{\TempoBase}{\meter}%
+  }{}%
+  \ifboolKV[ClesConversion]{Capas}{%
+    \DeclareSIUnit{\TempoBase}{\liter}%
+  }{}%
+  \ensuremath{
+    \IfBooleanTF{#1}{%
+      \IfStrEq{\PrefixeDepart}{t}{\DeclareSIUnit{\TempoBase}{\relax}}{}\IfStrEq{\PrefixeDepart}{q}{\DeclareSIUnit{\TempoBase}{\relax}}{}
+      \SI{#4}{\TempoAvant\TempoPrefixeD\TempoBase}
+      \IfStrEq{\PrefixeDepart}{t}{\DeclareSIUnit{\TempoBase}{\gram}}{}\IfStrEq{\PrefixeDepart}{q}{\DeclareSIUnit{\TempoBase}{\gram}}{}
+      =
+      \IfStrEq{\PrefixeArrivee}{t}{\DeclareSIUnit{\TempoBase}{\relax}}{}\IfStrEq{\PrefixeArrivee}{q}{\DeclareSIUnit{\TempoBase}{\relax}}{}
+      \PointsSuspension{\fpeval{#4*(10**((\ExposantD-(\ExposantA))*\PfCConvExposant))}\fpeval{#4*(10**((\ExposantD-(\ExposantA))*\PfCConvExposant))}}~\si{\TempoAvant\TempoPrefixeA\TempoBase}
+      \IfStrEq{\PrefixeArrivee}{t}{\DeclareSIUnit{\TempoBase}{\gram}}{}\IfStrEq{\PrefixeArrivee}{q}{\DeclareSIUnit{\TempoBase}{\gram}}{}
+    }{%
+      \ifboolKV[ClesConversion]{Sans}{%
+        \IfStrEq{\PrefixeDepart}{t}{\DeclareSIUnit{\TempoBase}{\relax}}{}\IfStrEq{\PrefixeDepart}{q}{\DeclareSIUnit{\TempoBase}{\relax}}{}
+        \SI{#4}{\TempoAvant\TempoPrefixeD\TempoBase}
+        \IfStrEq{\PrefixeDepart}{t}{\DeclareSIUnit{\TempoBase}{\gram}}{}\IfStrEq{\PrefixeDepart}{q}{\DeclareSIUnit{\TempoBase}{\gram}}{}
+        =
+        \IfStrEq{\PrefixeArrivee}{t}{\DeclareSIUnit{\TempoBase}{\relax}}{}\IfStrEq{\PrefixeArrivee}{q}{\DeclareSIUnit{\TempoBase}{\relax}}{}
+        \num{\fpeval{#4*(10**((\ExposantD-(\ExposantA))*\PfCConvExposant))}}~\pointilles[25pt]
+        \IfStrEq{\PrefixeArrivee}{t}{\DeclareSIUnit{\TempoBase}{\gram}}{}\IfStrEq{\PrefixeArrivee}{q}{\DeclareSIUnit{\TempoBase}{\gram}}{}
+      }{%
+        \IfStrEq{\PrefixeDepart}{t}{\DeclareSIUnit{\TempoBase}{\relax}}{}\IfStrEq{\PrefixeDepart}{q}{\DeclareSIUnit{\TempoBase}{\relax}}{}
+        \SI{#4}{\TempoAvant\TempoPrefixeD\TempoBase}
+        \IfStrEq{\PrefixeDepart}{t}{\DeclareSIUnit{\TempoBase}{\gram}}{}\IfStrEq{\PrefixeDepart}{q}{\DeclareSIUnit{\TempoBase}{\gram}}{}
+        =
+        \IfStrEq{\PrefixeArrivee}{t}{\DeclareSIUnit{\TempoBase}{\relax}}{}\IfStrEq{\PrefixeArrivee}{q}{\DeclareSIUnit{\TempoBase}{\relax}}{}
+        \SI{\fpeval{#4*(10**((\ExposantD-(\ExposantA))*\PfCConvExposant))}}{\TempoAvant\TempoPrefixeA\TempoBase}
+        \IfStrEq{\PrefixeArrivee}{t}{\DeclareSIUnit{\TempoBase}{\gram}}{}\IfStrEq{\PrefixeArrivee}{q}{\DeclareSIUnit{\TempoBase}{\gram}}{}
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCConversion.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Lien : ratio
 %%%
-\setKVdefault[ClesRatio]{FigureCours=false,Figure=false,Longueur=5cm,TexteTotal=quantit\'e,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,CouleurTab=gray!15}
+\setKVdefault[ClesRatio]{FigureCours=false,Figure=false,Longueur=5cm,TexteTotal=quantit\'e,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,CouleurTab=gray!15,ModeleCouleur=5}
 
 \newcommand\MPTest[9][]{%
   % #2 : Longueur de la barre unit\'e
@@ -12,7 +12,8 @@
   % #7 \`a #9: Couleurs de remplissage
   \ifluatex
    \mplibforcehmode
-  \begin{mplibcode}
+   \begin{mplibcode}
+     defaultcolormodel := \useKV[ClesRatio]{ModeleCouleur};
     vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantit\'e \`a partager / textepart :) / t le ratio
     pair A,B,C,D;
     A=u*(1,1);
@@ -172,7 +173,8 @@
   % #7 \`a #9: Couleurs de remplissage
   \ifluatex
    \mplibforcehmode
-  \begin{mplibcode}
+   \begin{mplibcode}
+     defaultcolormodel := \useKV[ClesRatio]{ModeleCouleur};
     vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantit\'e \`a partager / textepart :) / t le ratio
     pair A,B,C,D;
     A=u*(1,1);

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -36,7 +36,7 @@
 
 \newcounter{NbCalculDistri}%Pour compter combien de distributivit\'e il
 % y a dans un "seul calcul".
-\setcounter{NbCalculDistri}{0}
+\setcounter{NbCalculDistri}{1}
 
 \setKVdefault[ClesDistributivite]{Cours=false,Etape=1,Lettre=x,Lettrea=a,Lettreb=b,Lettrec=c,Lettred=d,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0,Tuile=false,Vide=false,Reperes=false,Impression=false,Tableau=false}%,AideAdd=false:inutile ?
 \defKV[ClesDistributivite]{CouleurReduction=\colorlet{DCReduction}{#1}\setKV[ClesDistributivite]{Reduction}}%
@@ -434,16 +434,18 @@
   \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
   \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
   \ensuremath{%
-    % partie du x^2
-    \xintifboolexpr{#2==0}{}{\xintifboolexpr{#2==1}{}{\xintifboolexpr{#2==-1}{-}{\num{#2}}}\LETTRE^2}%
-    % partie du x
-    \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{%
-        \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}%
-      }\LETTRE}%
-    % partie du nombre
-    \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\num{#4}}{%
-        \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}%
-    % 
+%    \xintifboolexpr{\fpeval{#2}==0 'and' \fpeval{#3}==0 'and' \fpeval{#4}==0}{0}{%
+      % partie du x^2
+      \xintifboolexpr{#2==0}{}{\xintifboolexpr{#2==1}{}{\xintifboolexpr{#2==-1}{-}{\num{#2}}}\LETTRE^2}%
+      % partie du x
+      \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{%
+          \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}%
+        }\LETTRE}%
+      % partie du nombre
+      \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\num{#4}}{%
+          \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}%
+      % 
+%    }%
   }%
 }%
 
@@ -465,7 +467,7 @@
   \ifboolKV[ClesDistributivite]{Cours}{%
     \ensuremath{%
       \xintifboolexpr{#2==0}{%
-      }{\xintifboolexpr{#3==0}{}{(}}\xintifboolexpr{#2==0}{\Tikzmark{}}{\Tikzmark{\useKV[ClesDistributivite]{Lettrea}}}
+      }{\xintifboolexpr{#3==0}{}{(}}\xintifboolexpr{#2==0}{\Tikzmark{}}{\Tikzmark{\useKV[ClesDistributivite]{Lettrea}}}%
       \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
       \xintifboolexpr{#3==0}{\Tikzmark{}}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\useKV[ClesDistributivite]{Lettreb}}}%
       \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
@@ -483,12 +485,12 @@
       \xintifboolexpr{\Multi==0}{%
         \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
       %
-      =
+      =%
       %
       \xdef\Multi{\fpeval{#2*#4}}%
       \xintifboolexpr{\Multi==0}{}{%
         \xintifboolexpr{#2<0}{(-}{}\useKV[ClesDistributivite]{Lettrea}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(-}{}\useKV[ClesDistributivite]{Lettrec}\xintifboolexpr{#4<0}{)}{}%
-      }
+      }%
       \xdef\Multij{\fpeval{#2*#5}}%
       \xintifboolexpr{\Multij==0}{}{%
         \xintifboolexpr{\Multi==0}{}{+}%
@@ -615,6 +617,7 @@
                 }{%
                   % Etape 1
                   \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
+                    %cpt=\theNbCalculDistri%
                     \xintifboolexpr{#2==0}{%
                     }{\xintifboolexpr{#3==0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
                     \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
@@ -645,6 +648,7 @@
                   }{}
                   % Etape 2
                   \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{%
+                    %cpt=\theNbCalculDistri%
                     \xdef\Multi{\fpeval{#2*#4}}%
                     \xintifboolexpr{\Multi==0}{}{%
                       \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
@@ -666,7 +670,9 @@
                   }{}%
                   % Etape 3
                   \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{%
+                    %cpt=\theNbCalculDistri%
                     \stepcounter{NbCalculDistri}%
+                    %--cpt=\theNbCalculDistri%
                     \xdef\Multi{\fpeval{#2*#4}}%
                     \xdef\Multij{\fpeval{#2*#5}}%
                     \xdef\Multik{\fpeval{#3*#4}}%
@@ -683,9 +689,12 @@
                       \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#2==0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
                     }%
                     \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+                    \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+                    \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
                   }{}%
                   % Etape 4
                   \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==4}{%
+                    %cpt=\theNbCalculDistri%
                     \xdef\Multi{\fpeval{#2*#4}}%
                     \xdef\Multij{\fpeval{#2*#5}}%
                     \xdef\Multik{\fpeval{#3*#4}}%
@@ -705,7 +714,7 @@
                     }{%
                       \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
                       \xintifboolexpr{\Multim==0}{}{%
-                        \xintifboolexpr{\Multim>0}{\ifnum\Multi>0\relax{}+\fi\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+                        \xintifboolexpr{\Multim>0}{\ifnum\fpeval{abs(\Multi)}>0\relax{}+\fi\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
                       }%
                       \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
                     }

Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEquationModeleBarre.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEquationModeleBarre.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEquationModeleBarre.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -0,0 +1,301 @@
+% Licence    : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newtoks\TestEquaMBarreH%
+\newtoks\TestEquaMBarreB%
+
+\def\UpdateToksBarreH#1\nil{\addtotok\TestEquaMBarreH{#1}}%
+\def\UpdateToksBarreB#1\nil{\addtotok\TestEquaMBarreB{#1}}%
+
+\newcommand\EquaBaseMBarre[5][]{%type ax=d ou b=cx
+  \useKVdefault[ClesEquation]%
+  \setKV[ClesEquation]{#1}%
+  \ifnum\fpeval{#2}=0\relax
+    \ifnum\fpeval{#4}=0\relax
+      \textbf{??}%% il manque un paramètre
+    \else
+      \xintifboolexpr{\fpeval{#4}==0}{%
+        \xintifboolexpr{\fpeval{#3}==0}{%
+          L'équation $0\times\useKV[ClesEquation]{Lettre}=0$ a une infinité de solutions.}{L'équation $0\times\useKV[ClesEquation]{Lettre}=\num{\fpeval{#3}}$ n'a aucune solution.}%
+      }{%\else
+        \xintifboolexpr{\fpeval{#3}==0}{L'équation $0=\num{\fpeval{#4}}\times\useKV[ClesEquation]{Lettre}$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+          \TestEquaMBarreB{white}%
+          \TestEquaMBarreH{}%
+          \xintFor* ##1 in{\xintSeq{1}{\fpeval{#4}}}\do{%
+            \expandafter\UpdateToksBarreB{,1}\nil%
+            \expandafter\UpdateToksBarreB{,"$x$"}\nil%
+          }%
+          \expandafter\UpdateToksBarreH{white,#4,"\num{\fpeval{#3}}"}\nil%
+          %          % Le tok H est \the\TestEquaMBarreH.%
+          %          % \\Le tok B est \the\TestEquaMBarreB.%
+          \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+          \ifnum\fpeval{#4}=1\relax
+          \else
+            \bigskip%
+          
+            \PfCMPDessineModelBarreNonHomogene{white,1,"$\num{\fpeval{#3}}/\num{\fpeval{#4}}$"}{white,1,"$x$"}{}%
+            \SSimpliTest{\fpeval{#3}}{\fpeval{#4}}%
+            \ifthenelse{\boolean{Simplification}}{\bigskip%
+              
+              \PfCMPDessineModelBarreNonHomogene{white,1,"\PGCD{\fpeval{#3}}{\fpeval{#4}}\ifnum\fpeval{abs(\pgcd)}=\fpeval{#4}\relax{}\num{\fpeval{#3/#4}}\else\num{\fpeval{#3/\pgcd}}/\num{\fpeval{#4/\pgcd}}\fi"}{white,1,"$x$"}{}%
+            }{}%
+          \fi
+        }%
+      }%
+    \fi%
+  \else%
+    % si non, on est dans le cas ax=d
+    \xintifboolexpr{\fpeval{#2}==0}{%
+      \xintifboolexpr{\fpeval{#5}==0}{%
+        L'équation $0\times\useKV[ClesEquation]{Lettre}=0$ a une infinité de solutions.}{L'équation $0\times\useKV[ClesEquation]{Lettre}=\num{\fpeval{#5}}$ n'a aucune solution.}%
+    }{%\else
+      \xintifboolexpr{\fpeval{#5}==0}{L'équation $\num{\fpeval{#2}}\times\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+        % \begin{center}
+        \TestEquaMBarreH{white}%
+        \TestEquaMBarreB{}%
+        \xintFor* ##1 in{\xintSeq{1}{\fpeval{#2}}}\do{%
+          \expandafter\UpdateToksBarreH{,1}\nil%
+          \expandafter\UpdateToksBarreH{,"$x$"}\nil%
+        }%
+        \expandafter\UpdateToksBarreB{white,#2,"\num{\fpeval{#5}}"}\nil%
+        % Le tok H est \the\TestEquaMBarreH.%
+        % \\Le tok B est \the\TestEquaMBarreB.%
+        \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+        \ifnum\fpeval{#2}=1\relax%
+        \else
+          \bigskip%
+          
+          \PfCMPDessineModelBarreNonHomogene{white,1,"$x$"}{white,1,"$\num{\fpeval{#5}}/\num{\fpeval{#2}}$"}{}%
+          \SSimpliTest{\fpeval{#5}}{\fpeval{#2}}%
+          \ifthenelse{\boolean{Simplification}}{\bigskip
+            
+            \PfCMPDessineModelBarreNonHomogene{white,1,"$x$"}{white,1,"\PGCD{\fpeval{#5}}{\fpeval{#2}}\ifnum\fpeval{abs(\pgcd)}=\fpeval{#2}\relax{}\num{\fpeval{#5/#2}}\else\num{\fpeval{#5/\pgcd}}/\num{\fpeval{#2/\pgcd}}\fi"}{}%
+          }{}%
+        \fi
+      }%
+    }%
+  \fi%
+}%
+
+\newcommand\EquaDeuxMBarre[5][]{%type ax+b=d ou b=cx+d$
+  \useKVdefault[ClesEquation]%
+  \setKV[ClesEquation]{#1}%
+  \setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
+  \ifnum\fpeval{#2}=0\relax%On échange en faisant attention à ne pas boucler : c doit être non vide
+    % cas b=cx+d
+    \xintifboolexpr{\fpeval{#4}==0}{%
+      \xintifboolexpr{\fpeval{#3}==\fpeval{#5}}{%b=d
+        L'équation $\num{\fpeval{#3}}=\num{\fpeval{#5}}$ a une infinité de solutions.%
+      }{%b<>d
+        L'équation $\num{\fpeval{#3}}=\num{\fpeval{#5}}$ n'a aucune solution.%
+      }%
+    }{%ELSE
+      \xintifboolexpr{\fpeval{#3}==0}{%ax+b=d
+        \EquaBaseMBarre[#1]{0}{\fpeval{-#5}}{\fpeval{#4}}{0}%
+      }{%ax+b=d$ Ici
+        % \begin{center}
+        \TestEquaMBarreB{white}%
+        \TestEquaMBarreH{}%
+        \xintFor* ##1 in{\xintSeq{1}{#4}}\do{%
+          \expandafter\UpdateToksBarreB{,1}\nil%
+          \expandafter\UpdateToksBarreB{,"$x$"}\nil%
+        }%
+        \expandafter\UpdateToksBarreB{,white,2.5,"\num{\fpeval{#5}}"}\nil%
+        \expandafter\UpdateToksBarreH{white,#4+2.5,"\num{\fpeval{#3}}"}\nil%
+        % Le tok H est \the\TestEquaMBarreH.%
+        % \\Le tok B est \the\TestEquaMBarreB.%
+        \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+        
+        \bigskip%
+        
+        \PfCMPDessineModelBarreNonHomogene{white,#4,"\num{\fpeval{#3-#5}}",white,2.5,"\num{\fpeval{#5}}"}{\the\TestEquaMBarreB}{#4}%
+        
+        \bigskip
+        
+        \EquaBaseMBarre{0}{(#3-(#5))}{#4}{0}%
+      }%
+    }%
+  \else%cas ax+b=d
+    \xintifboolexpr{\fpeval{#2}==0}{%
+      \xintifboolexpr{\fpeval{#3}==\fpeval{#5}}{%b=d
+        L'équation $\num{\fpeval{#3}}=\num{\fpeval{#5}}$ a une infinité de solutions.%
+      }{%b<>d
+        L'équation $\num{\fpeval{#3}}=\num{\fpeval{#5}}$ n'a aucune solution.%
+      }%
+    }{%ELSE
+      \xintifboolexpr{\fpeval{#3}==0}{%ax+b=d
+        \EquaBaseMBarre[#1]{#2}{0}{0}{#5}%
+      }{%ax+b=d$ Ici
+%        % \begin{center}
+        \TestEquaMBarreH{white}%
+        \TestEquaMBarreB{}%
+        \xintFor* ##1 in{\xintSeq{1}{\fpeval{#2}}}\do{%
+          \expandafter\UpdateToksBarreH{,1}\nil%
+          \expandafter\UpdateToksBarreH{,"$x$"}\nil%
+        }%
+        \expandafter\UpdateToksBarreH{,white,2.5,"\num{\fpeval{#3}}"}\nil%
+        \expandafter\UpdateToksBarreB{white,#2+2.5,"\num{\fpeval{#5}}"}\nil%
+%        % Le tok H est \the\TestEquaMBarreH.%
+%        % \\Le tok B est \the\TestEquaMBarreB.%
+        \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+        
+        \bigskip%
+        
+        \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{white,#2,"\num{\fpeval{#5-#3}}",white,2.5,"\num{\fpeval{#3}}"}{#2}%
+%        
+        \bigskip
+        
+       \EquaBaseMBarre{#2}{0}{0}{(#5-(#3))}%
+      }%
+    }%
+  \fi%
+}%
+
+\newcommand\EquaTroisMBarre[5][]{%ax+b=cx ou ax=cx+d
+  \useKVdefault[ClesEquation]%
+  \setKV[ClesEquation]{#1}%
+  \ifnum\fpeval{#3}=0\relax%on inverse en faisant attention à la boucle #3<->#5
+    \ifnum\fpeval{#5}=0\relax%
+      %% paramètre oublié
+    \else
+      \EquaTroisMBarre[#1]{#4}{#5}{#2}{0}%
+    \fi
+  \else
+    \xintifboolexpr{\fpeval{#2}==0}{%b=cx
+      \EquaBaseMBarre[#1]{#4}{0}{0}{#3}
+    }{%
+      \xintifboolexpr{\fpeval{#4}==0}{%ax+b=0
+        \EquaDeuxMBarre[#1]{#2}{#3}{0}{0}
+      }{%ax+b=cx
+        \xintifboolexpr{\fpeval{#2}==\fpeval{#4}}{%
+          \xintifboolexpr{\fpeval{#3}==0}{%ax=ax
+            L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.%
+          }{%ax+b=ax
+            L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+          }
+        }{%% Cas délicat
+          \xintifboolexpr{\fpeval{#2}>\fpeval{#4}}{%ax+b=cx avec a>c
+            \TestEquaMBarreH{white}%
+            \TestEquaMBarreB{white}%
+            \xintFor* ##1 in{\xintSeq{1}{\fpeval{#2}}}\do{%
+              \expandafter\UpdateToksBarreH{,1}\nil%
+              \expandafter\UpdateToksBarreH{,"$x$"}\nil%
+            }%
+            \expandafter\UpdateToksBarreH{,white,2.5,"\num{\fpeval{#3}}"}\nil%
+            \xintFor* ##1 in{\xintSeq{1}{\fpeval{#4}}}\do{%
+              \expandafter\UpdateToksBarreB{,1}\nil%
+              \expandafter\UpdateToksBarreB{,"$x$"}\nil%
+            }%
+            \expandafter\UpdateToksBarreB{,white,#2-#4+2.5,"0"}\nil%
+            \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+            
+            \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{#4}%      
+          
+            \EquaDeuxMBarre{(#2-#4)}{#3}{0}{0}
+          }{%ax+b=cx avec a<c              % Autre cas délicat
+            \TestEquaMBarreH{white}%
+            \TestEquaMBarreB{white}%
+            \xintFor* ##1 in{\xintSeq{1}{\fpeval{#2}}}\do{%
+              \expandafter\UpdateToksBarreH{,1}\nil%
+              \expandafter\UpdateToksBarreH{,"$x$"}\nil%
+            }%
+            \expandafter\UpdateToksBarreH{,white,#4-#2,"\num{\fpeval{#3}}"}\nil%
+            \xintFor* ##1 in{\xintSeq{1}{\fpeval{#4}}}\do{%
+              \expandafter\UpdateToksBarreB{,1}\nil%
+              \expandafter\UpdateToksBarreB{,"$x$"}\nil%
+            }%
+%            \expandafter\UpdateToksBarreB{,white,#2-#4+2.5,"0"}\nil%
+            \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+            
+            \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{#2}%
+            
+            \EquaDeuxMBarre{0}{#3}{(#4-#2)}{0}
+          }%
+        }%
+      }%
+    }%
+  \fi
+}%
+
+\newcommand\ResolEquationMBarre[5][]{%
+  \useKVdefault[ClesEquation]%
+  \setKV[ClesEquation]{#1}%
+  \setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
+  \xintifboolexpr{#2==0}{%
+    \xintifboolexpr{#4==0}{%
+      \xintifboolexpr{#3==#5}{%b=d
+        L'équation $\num{\fpeval{#3}}=\num{\fpeval{#5}}$ a une infinité de solutions.}%
+      {%b<>d
+        L'équation $\num{\fpeval{#3}}=\num{\fpeval{#5}}$ n'a aucune solution.%
+      }%
+    }%
+    {%0x+b=cx+d$
+      \EquaDeuxMBarre[#1]{#4}{#5}{#2}{#3}%
+    }%
+  }{%
+    \xintifboolexpr{#4==0}{%ax+b=0x+d
+      \EquaDeuxMBarre[#1]{#2}{#3}{0}{#5}%
+    }
+    {%ax+b=cx+d$
+      \xintifboolexpr{#3==0}{%
+        \xintifboolexpr{#5==0}{%ax=cx
+          \EquaTroisMBarre[#1]{#2}{0}{#4}{0}%
+        }%
+        {%ax=cx+d
+          \EquaTroisMBarre[#1]{#4}{#5}{#2}{0}%
+        }%
+      }%
+      {\xintifboolexpr{#5==0}{%ax+b=cx
+          \EquaTroisMBarre[#1]{#2}{#3}{#4}{0}%
+        }%
+        {%ax+b=cx+d -- ici
+          \xintifboolexpr{#2==#4}{%
+            \xintifboolexpr{#3==#5}{%b=d
+                            L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
+            {%b<>d
+              L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+            }%
+          }{%
+            %% Cas délicat
+            \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+              \TestEquaMBarreH{white}%
+              \TestEquaMBarreB{white}%
+              \xintFor* ##1 in{\xintSeq{1}{\fpeval{#2}}}\do{%
+                \expandafter\UpdateToksBarreH{,1}\nil%
+                \expandafter\UpdateToksBarreH{,"$x$"}\nil%
+              }%
+              \expandafter\UpdateToksBarreH{,white,2.5,"\num{\fpeval{#3}}"}\nil%
+              \xintFor* ##1 in{\xintSeq{1}{\fpeval{#4}}}\do{%
+                \expandafter\UpdateToksBarreB{,1}\nil%
+                \expandafter\UpdateToksBarreB{,"$x$"}\nil%
+              }%
+              \expandafter\UpdateToksBarreB{,white,#2-#4+2.5,"\num{\fpeval{#5}}"}\nil%
+              \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+            
+              \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{#4}%      
+          
+              \EquaDeuxMBarre{(#2-(#4))}{#3}{0}{#5}
+            }{%ax+b=cx+d avec a<c              % Autre cas délicat
+              \TestEquaMBarreH{white}%
+              \TestEquaMBarreB{white}%
+              \xintFor* ##1 in{\xintSeq{1}{\fpeval{#4}}}\do{%
+                \expandafter\UpdateToksBarreB{,1}\nil%
+                \expandafter\UpdateToksBarreB{,"$x$"}\nil%
+              }%
+              \expandafter\UpdateToksBarreB{,white,2.5,"\num{\fpeval{#5}}"}\nil%
+              \xintFor* ##1 in{\xintSeq{1}{\fpeval{#2}}}\do{%
+                \expandafter\UpdateToksBarreH{,1}\nil%
+                \expandafter\UpdateToksBarreH{,"$x$"}\nil%
+              }%
+              \expandafter\UpdateToksBarreH{,white,#4-#2+2.5,"\num{\fpeval{#3}}"}\nil%
+              \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{}%
+            
+              \PfCMPDessineModelBarreNonHomogene{\the\TestEquaMBarreH}{\the\TestEquaMBarreB}{#2}%
+          
+              \EquaDeuxMBarre{0}{#3}{(#4-(#2))}{#5}
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEquationModeleBarre.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,8 @@
 %%%
 % Geometrie
 %%%
-\setKVdefault[Geometrie]{CoinBG={(0,0)},CoinHD={(10u,10u)},TypeTrace="Instruments"}%
+\setKVdefault[Geometrie]{CoinBG={(0,0)},CoinHD={(10u,10u)},TypeTrace="Instruments",Clip,Cadres=false,Epaisseur=1,Pointilles=false,Ombre=false,Couleur=black,Ecart=2,ModeleCouleur=5}%
+\defKV[Geometrie]{Cadre=\setKV[Geometrie]{Cadres}\setKV[Geometrie]{Clip=false}}%
 
 \ifluatex%
 \NewDocumentEnvironment{Geometrie}{o +b}{%
@@ -9,10 +10,31 @@
   \setKV[Geometrie]{#1}%
   \mplibforcehmode%
   \begin{mplibcode}
-    % input PfCMPFr;
+    defaultcolormodel := \useKV[Geometrie]{ModeleCouleur};
+    
+     vardef rounded_corners expr p =
+     for i=1 upto length p:
+     subpath (i-15/16, i-1/16) of p ..
+     endfor cycle
+     enddef;
+    %
+    boolean Clip,Cadres,Pointilles,Ombre;
+    Clip=\useKV[Geometrie]{Clip};
+    Cadres=\useKV[Geometrie]{Cadres};
+    Pointilles=\useKV[Geometrie]{Pointilles};
+    Ombre=\useKV[Geometrie]{Ombre};
+    Epaisseur=\useKV[Geometrie]{Epaisseur};
+    bboxmargin:=\useKV[Geometrie]{Ecart};
+    color CouleurCadre;
+    CouleurCadre=\useKV[Geometrie]{Couleur};
     pair Coinbg,Coinhd;
+    if Clip:
     Coinbg=\useKV[Geometrie]{CoinBG};
     Coinhd=\useKV[Geometrie]{CoinHD};
+    else:
+    Coinbg=(-1000,-1000);
+    Coinhd=(1000,1000);
+    fi;
     if \useKV[Geometrie]{TypeTrace}="Instruments":
     typetrace:="normal";
     elseif \useKV[Geometrie]{TypeTrace}="MainLevee":
@@ -29,6 +51,43 @@
     _tfig:=if (xb-xa)>(yb-ya): (xb-xa) else: (yb-ya) fi;
     _tfig:=2*_tfig;
     #2%
+    %%
+    if Cadres:
+    string Cadre;
+    Cadre=\useKV[Geometrie]{Cadre};
+
+    picture P; P = currentpicture;
+
+    if Cadre<>"aucun":
+    if Cadre="rectangle":
+      if Ombre:
+        fill bbox P shifted (3,-3) withcolor 3/4[CouleurCadre,white];
+        unfill bbox P;
+      fi;
+      if Pointilles:
+        drawoptions(dashed evenly withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      else:
+        drawoptions(withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      fi;
+      draw bbox P;
+      drawoptions();
+      draw P;
+    else:
+      if Ombre:
+        fill rounded_corners bbox P shifted (3,-3) withcolor 3/4[CouleurCadre,white];
+        unfill rounded_corners bbox P;
+      fi;
+      if Pointilles:
+        drawoptions(dashed evenly withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      else:
+        drawoptions(withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      fi;
+      draw rounded_corners bbox P;
+      drawoptions();
+      draw P;
+      fi;
+      fi;
+      fi;
   \end{mplibcode}
 }{}%
 \else
@@ -36,6 +95,21 @@
   \useKVdefault[Geometrie]%
   \setKV[Geometrie]{#1}%
   \begin{mpost}[mpsettings={%
+      vardef rounded_corners expr p =
+     for i=1 upto length p:
+     subpath (i-15/16, i-1/16) of p ..
+     endfor cycle
+     enddef;
+    %
+    boolean Clip,Cadres,Pointilles,Ombre;
+    Clip=\useKV[Geometrie]{Clip};
+    Cadres=\useKV[Geometrie]{Cadres};
+    Pointilles=\useKV[Geometrie]{Pointilles};
+    Ombre=\useKV[Geometrie]{Ombre};
+    Epaisseur=\useKV[Geometrie]{Epaisseur};
+    bboxmargin:=\useKV[Geometrie]{Ecart};
+    color CouleurCadre;
+    CouleurCadre=\useKV[Geometrie]{Couleur};
       pair Coinbg,Coinhd;
       Coinbg=\useKV[Geometrie]{CoinBG};
       Coinhd=\useKV[Geometrie]{CoinHD};
@@ -56,6 +130,43 @@
     _tfig:=if (xb-xa)>(yb-ya): (xb-xa) else: (yb-ya) fi;
     _tfig:=2*_tfig;
     #2%
+        %%
+    if Cadres:
+    string Cadre;
+    Cadre=\useKV[Geometrie]{Cadre};
+
+    picture P; P = currentpicture;
+
+    if Cadre<>"aucun":
+    if Cadre="rectangle":
+      if Ombre:
+        fill bbox P shifted (3,-3) withcolor 3/4[CouleurCadre,white];
+        unfill bbox P;
+      fi;
+      if Pointilles:
+        drawoptions(dashed evenly withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      else:
+        drawoptions(withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      fi;
+      draw bbox P;
+      drawoptions();
+      draw P;
+    else:
+      if Ombre:
+        fill rounded_corners bbox P shifted (3,-3) withcolor 3/4[CouleurCadre,white];
+        unfill rounded_corners bbox P;
+      fi;
+      if Pointilles:
+        drawoptions(dashed evenly withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      else:
+        drawoptions(withpen pencircle scaled Epaisseur withcolor CouleurCadre;);
+      fi;
+      draw rounded_corners bbox P;
+      drawoptions();
+      draw P;
+      fi;
+      fi;
+      fi;
   \end{mpost}
 }{}%
 \fi%
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCLego.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCLego.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCLego.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Lego
 %%%
-\setKVdefault[Lego]{Couleur=LightSteelBlue,Unite=8,Diviseur=2,Perso=false,Plaque=false}%
+\setKVdefault[Lego]{Echelle=1,Couleur=LightSteelBlue,Unite=8,Diviseur=2,Perso=false,Plaque=false,Largeura=2,Largeurb=2,Unique=false}%
 \defKV[Lego]{ListePerso=\setKV[Lego]{Perso}\xdef\PfCFooLegoListePerso{#1}}%
 
 \NewDocumentCommand\ChoixCouleur{m}{%
@@ -21,7 +21,11 @@
 \NewDocumentCommand\Lego{o}{%
   \useKVdefault[Lego]%
   \setKV[Lego]{#1}%
-  \xdef\PfCNbCouleurs{\fpeval{floor(\useKV[Lego]{Unite}/\useKV[Lego]{Diviseur})}}%
+  \xintifboolexpr{\useKV[Lego]{Unite}==1}{%
+    \xdef\PfCNbCouleurs{1}%
+  }{%
+    \xdef\PfCNbCouleurs{\fpeval{floor(\useKV[Lego]{Unite}/\useKV[Lego]{Diviseur})}}%
+  }%
   \ChoixCouleur{\PfCNbCouleurs}%
   \ifboolKV[Lego]{Perso}{%
     \BuildBarreLego{\FooCouleur}{\PfCFooLegoListePerso}%
@@ -34,8 +38,11 @@
   \ifluatex%
     \mplibforcehmode%
     \begin{mplibcode}
-      boolean Plaque;
+      boolean Plaque,Unique;
       Plaque=\useKV[Lego]{Plaque};
+      Unique=\useKV[Lego]{Unique};
+
+      Echelle=\useKV[Lego]{Echelle};
       
       input PfCLego;
       %
@@ -59,7 +66,8 @@
       ChoixCouleur(#1);
       %
       Longueur=\useKV[Lego]{Unite};
-      Largeur=2;
+      Largeura=\useKV[Lego]{Largeura};
+      Largeurb=\useKV[Lego]{Largeurb};
       Diviseur=\useKV[Lego]{Diviseur};
       color BriqueUnite;
       BriqueUnite=\useKV[Lego]{Couleur};
@@ -71,25 +79,31 @@
       lego_height_old:=lego_height;
       lego_height:=lego_thickness;
       TR:=(0,1,0);
-      Lego_box(2*Longueur,4*Largeur,Gold);
+      Lego_box(2*Longueur,4*Largeura,Gold);
       TR:=(0,0,0);
       lego_height:=lego_height_old;
       fi;      
-      Lego_box(Longueur,Largeur,BriqueUnite);
+      Lego_box(Longueur,Largeura,BriqueUnite);
+      if Unique=false:
       if Perso:
       Somme=0;
       ListePerso(#2);
       for k=0 upto (nbperso-1):
-      TR:=(0.5*(Longueur-Diviseurs[k]-Somme),2,0);
-      Lego_box(Diviseurs[k],2,Brique[k]);
+      TR:=(0.5*(Longueur-Diviseurs[k]-Somme),Largeura+0.5*(Largeurb-Largeura),0);
+      Lego_box(Diviseurs[k],Largeurb,Brique[k]);
       Somme:=Somme+2*Diviseurs[k];
       endfor;
       else:
       for k=0 upto ((Longueur div Diviseur)-1):
-      TR:=(0.5*(Longueur-Diviseur)-k*Diviseur,2,0);
-      Lego_box(Diviseur,2,Brique[k]);
+      TR:=(0.5*(Longueur-Diviseur)-k*Diviseur,Largeura+0.5*(Largeurb-Largeura),0);
+      Lego_box(Diviseur,Largeurb,Brique[k]);
       endfor;
       fi;
+      fi;
+      picture RetiensLego;
+      RetiensLego=currentpicture;
+      currentpicture:=nullpicture;
+      draw RetiensLego scaled Echelle;
     \end{mplibcode}
   \else
     \begin{mpost}

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,8 +1,10 @@
 %%%
 % Modele en barre
 %%%
-\setKVdefault[ClesModeleBarre]{Hauteur=0.5cm,Largeur=1cm,Separation={0},Homogene=false}%Separation pour conserver le lien avec les équations.
+\setKVdefault[ClesModeleBarre]{Hauteur=0.5cm,Largeur=1cm,Separation={0},Homogene=false,Multiplicatif=false,MultiplicatifH=false,MultiplicatifB=false}%Separation pour conserver le lien avec les équations.
 \defKV[ClesModeleBarre]{Longueur=\setKV[ClesModeleBarre]{Homogene}}%
+\defKV[ClesModeleBarre]{AccoladesH=\setKV[ClesModeleBarre]{MultiplicatifH}\setKV[ClesModeleBarre]{Multiplicatif}}%
+\defKV[ClesModeleBarre]{AccoladesB=\setKV[ClesModeleBarre]{MultiplicatifB}\setKV[ClesModeleBarre]{Multiplicatif}}%
 
 \newtoks\toklistemodelbarresup%
 \def\UpdateListeModelBarreSup#1\nil{\addtotok\toklistemodelbarresup{#1,}}%
@@ -10,6 +12,10 @@
 \def\UpdateListeModelBarreInf#1\nil{\addtotok\toklistemodelbarreinf{#1,}}%
 \newtoks\toklistemodelbarresep%
 \def\UpdateListeModelBarreSep#1\nil{\addtotok\toklistemodelbarresep{#1,}}%
+\newtoks\toklistemodelbarreaccosup%
+\def\UpdateListeModelBarreAccoSup#1\nil{\addtotok\toklistemodelbarreaccosup{#1,}}%
+\newtoks\toklistemodelbarreaccoinf%
+\def\UpdateListeModelBarreAccoInf#1\nil{\addtotok\toklistemodelbarreaccoinf{#1,}}%
 
 \newcommand\ModeleBarre[3][]{%
   % #1 options
@@ -42,7 +48,36 @@
   \ifboolKV[ClesModeleBarre]{Homogene}{%
     \PfCMPDessineModelBarre{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}%
   }{%
-    \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}%
+    \ifboolKV[ClesModeleBarre]{Multiplicatif}{%
+      %
+      \toklistemodelbarreaccosup{}%
+      \toklistemodelbarreaccoinf{}%
+      \ifboolKV[ClesModeleBarre]{MultiplicatifH}{%
+        \xdef\PfCListeAccoladesH{\useKV[ClesModeleBarre]{AccoladesH}}%
+        \setsepchar{\\/ }%
+        \readlist\ListeModeleBarreAccoSup{\PfCListeAccoladesH}%
+        \foreachitem\compteur\in\ListeModeleBarreAccoSup{%
+          \foreachitem\valeur\in\ListeModeleBarreAccoSup[\compteurcnt]{%
+            \expandafter\UpdateListeModelBarreAccoSup\valeur\nil%
+          }%
+        }%
+      %  Les accolades hautes sont \the\toklistemodelbarreaccosup.\\
+      }{}% 
+      \ifboolKV[ClesModeleBarre]{MultiplicatifB}{%
+        \xdef\PfCListeAccoladesB{\useKV[ClesModeleBarre]{AccoladesB}}%
+        \setsepchar{\\/ }%
+        \readlist\ListeModeleBarreAccoInf{\PfCListeAccoladesB}%
+        \foreachitem\compteur\in\ListeModeleBarreAccoInf{%
+          \foreachitem\valeur\in\ListeModeleBarreAccoInf[\compteurcnt]{%
+            \expandafter\UpdateListeModelBarreAccoInf\valeur\nil%
+          }%
+        }%
+      %  Les accolades basses sont \the\toklistemodelbarreaccoinf.\\
+      }{}%
+      \PfCMPDessineModelBarreNonHomogeneMultiplicatif{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}{\the\toklistemodelbarreaccosup}{\the\toklistemodelbarreaccoinf}%
+    }{%
+      \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}%
+    }%
   }%
 }%
 
@@ -163,6 +198,133 @@
   \end{mplibcode}
 }%
 
+\def\PfCMPDessineModelBarreAccoladeCode{%
+}%
+
+\newcommand\PfCMPDessineModelBarreNonHomogeneMultiplicatif[5]{%
+  \ifluatex%
+    \mplibforcehmode%
+    \begin{mplibcode}
+      \PfCMPDessineModelBarreNHCode
+      \PfCMPDessineModelBarreBriqueCode
+      % \PfCMPDessineModelBarreAccoladeCode
+
+        vardef TraceAccoH(text t)=
+  pair PfCAccoPtH[];
+  numeric etape,ProporHauteur;
+  etape:=0;
+  ProporHauteur:=1;
+  numeric decaetape[][];
+  string toto;
+  numeric n;
+  n=0;
+  for p_=t:
+  n:=n+1;
+  if (n mod 3)=1:
+  etape:=etape+1;
+  decaetape[etape][1]=p_;
+  fi;
+  if (n mod 3)=2:
+  decaetape[etape][2]=p_;
+  fi;
+  if (n mod 3)=0:
+    toto:=p_;
+  if substring(1,2) of toto="*":
+  ltoto=length toto;
+  ProporHauteur:=scantokens(substring(0,1) of toto)+1;
+  toto:=substring(2,ltoto) of toto;
+  else:
+  ProporHauteur:=1;
+  fi;
+  PfCAccoPtH[1]:=(0,ProporHauteur*Hauteur) shifted(VecteurDepla*(decaetape[etape][1]-1));
+  PfCAccoPtH[2]:=PfCAccoPtH[1] shifted(VecteurDepla*decaetape[etape][2]);
+  if ProporHauteur>1:
+  draw PfCAccoPtH[1]--(PfCAccoPtH[1] shifted(0,-(ProporHauteur-1)*Hauteur)) dashed evenly;
+  draw PfCAccoPtH[2]--(PfCAccoPtH[2] shifted(0,-(ProporHauteur-1)*Hauteur)) dashed evenly;
+  fi;
+  label(TEX("$\overbrace{\hbox to"&decimal(abs(PfCAccoPtH[1]-PfCAccoPtH[2]))&"pt{\PfCTBstrut}}^{"&toto&"}$"),1/2[PfCAccoPtH[1],PfCAccoPtH[2]]);
+  fi;      
+  endfor;
+  enddef;
+  % 
+  vardef TraceAccoB(text t)=
+  pair PfCAccoPtB[];
+  numeric etape,ProporHauteur;
+  etape:=0;
+  ProporHauteur:=1;
+  numeric decaetape[][];
+  string toto;
+  numeric n;
+  n=0;
+  for p_=t:
+  n:=n+1;
+  if (n mod 3)=1:
+  etape:=etape+1;
+  decaetape[etape][1]=p_;
+  fi;
+  if (n mod 3)=2:
+  decaetape[etape][2]=p_;
+  fi;
+  if (n mod 3)=0:
+  toto:=p_;
+  if substring(1,2) of toto="*":
+  ltoto=length toto;
+  ProporHauteur:=scantokens(substring(0,1) of toto)+1;
+  toto:=substring(2,ltoto) of toto;
+  else:
+  ProporHauteur:=1;
+  fi;
+  PfCAccoPtB[1]:=(0,-ProporHauteur*Hauteur) shifted(VecteurDepla*(decaetape[etape][1]-1));
+  PfCAccoPtB[2]:=PfCAccoPtB[1] shifted(VecteurDepla*decaetape[etape][2]);
+  if ProporHauteur>1:
+  draw PfCAccoPtB[1]--(PfCAccoPtB[1] shifted(0,(ProporHauteur-1)*Hauteur)) dashed evenly;
+  draw PfCAccoPtB[2]--(PfCAccoPtB[2] shifted(0,(ProporHauteur-1)*Hauteur)) dashed evenly;
+  fi;
+  label(TEX("$\underbrace{\hbox to"&decimal(abs(PfCAccoPtB[1]-PfCAccoPtB[2]))&"pt{\PfCTBstrut}}_{"&toto&"}$"),1/2[PfCAccoPtB[1],PfCAccoPtB[2]]);
+  fi;      
+  endfor;
+  enddef;
+      
+      Longueur:=\useKV[ClesModeleBarre]{Largeur};
+      Hauteur:=\useKV[ClesModeleBarre]{Hauteur};
+      u:=Longueur;
+      
+      toto(#1);
+      tata(#2);
+      
+      pair VecteurDepla;
+      VecteurDepla=(Longueur,0);
+      
+      numeric MBnbdepla;
+      MBnbdepla=0;
+      for k=1 upto MBnbcolsup:
+      for l=1 upto MBnbinfosup[k]:
+      trace Brique(MBColSup[k],MBnbcasessup[k][l])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDepla);
+      MBnbdepla:=MBnbdepla+MBnbcasessup[k][l];
+      endfor;
+      endfor;
+      
+      MBnbdepla:=0;
+      for k=1 upto MBnbcolinf:
+      for l=1 upto MBnbinfoinf[k]:
+      trace Brique(MBColInf[k],MBnbcasesinf[k][l])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDepla+(0,-Hauteur));
+      if MBnbcasesinf[k][l]<0:
+      for j=1 upto (abs(MBnbcasesinf[k][l])-1):
+      trace ((0,0)--(0,Hauteur)) shifted((MBnbdepla+j)*VecteurDepla+(0,-Hauteur)) withcolor black;
+      endfor;
+      fi;
+      MBnbdepla:=MBnbdepla+abs(MBnbcasesinf[k][l]);
+      endfor;
+      endfor;
+      
+      Separation(#3);
+      
+      TraceAccoH(#4);
+      TraceAccoB(#5);
+    \end{mplibcode}%
+  \fi
+}
+
 \def\PfCMPDessineModelBarreNHCode{%
   numeric MBnbcolinf;%compte combien de couleurs
   MBnbcolinf=0;

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -9,19 +9,20 @@
   \setsepchar[*]{§*/}%
   \readlist*\ListeMotsCodes{#2}%
   \xdef\ListeMotsCodesPas{\fpeval{\ListeMotsCodeslen/\useKV[MotsCodes]{Colonnes}}}%
-  \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{Largeur}}}}[color-inside]
+  % \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{Largeur}}}}[color-inside]
+    \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{m{\useKV[MotsCodes]{Largeur}}}}[color-inside]
     \xintFor* ##1 in {\xintSeq {1}{\ListeMotsCodesPas}}\do{%
       \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
         \xintifForFirst{}{&}\Block[draw=black]{4-1}{}%
       }\\
       \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
-        \xintifForFirst{}{&}\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},1]
+        \xintifForFirst{}{&}\Block{}{\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},1]}
       }\\
       \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
         \xintifForFirst{}{&}%
       }\\
       \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
-        \xintifForFirst{}{&}\textbf{\Large\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},2]}
+        \xintifForFirst{}{&}\Block{}{\textbf{\Large\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},2]}}
       }\\
     }%
   \end{NiceTabular}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulArt.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulArt.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMulArt.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -44,9 +44,9 @@
     \xdef\PfCFooRetiensCible{\useKV[TabMul]{Cible}}%
     \readlist*\PfCListeDesNombresCibles{\PfCFooRetiensCible}%
     \xintFor* ##2 in{\xintSeq{1}{\PfCListeDesNombresCibleslen}}\do{%
-      \PfCListeDiviseurs{\PfCListeDesNombresCibles[##2]}%
+      \PfCListeDiviseursInfDix{\PfCListeDesNombresCibles[##2]}%
       \setsepchar{,}\ignoreemptyitems%
-      \readlist*\PfCTabMulDiviseursCible{\PfCListeDiviseursRetour}%
+      \readlist*\PfCTabMulDiviseursCible{\PfCListeDiviseursInfDixRetour}%
       \xdef\PfCFooListePdtCible{$1\times\num{\PfCListeDesNombresCibles[##2]}$,$\num{\PfCListeDesNombresCibles[##2]}\times1$}%
       \xintFor* ##1 in {\xintSeq{1}{\PfCNbDiviseurs}}\do{%
         \xdef\PfCFooListePdtCible{\PfCFooListePdtCible,$\num{\PfCTabMulDiviseursCible[##1]}\times\num{\fpeval{\PfCListeDesNombresCibles[##2]/\PfCTabMulDiviseursCible[##1]}}$,$\num{\fpeval{\PfCListeDesNombresCibles[##2]/\PfCTabMulDiviseursCible[##1]}}\times\num{\PfCTabMulDiviseursCible[##1]}$}%
@@ -92,11 +92,11 @@
       \ifboolKV[TabMul]{Enonce}{%
         \begin{enumerate}
           \xintFor* ##1 in {\xintSeq{1}{\PfCCompteurX}}\do{%
-            \PfCListeDiviseurs{\PfCListeProduits[##1]}%
+            \PfCListeDiviseursInfDix{\PfCListeProduits[##1]}%
             \ifnum\PfCNbDiviseurs>1\relax
-              \MelangeListe{\PfCListeDiviseursRetour}{1}%
+              \MelangeListe{\PfCListeDiviseursInfDixRetour}{1}%
             \else
-              \xdef\faa{\PfCListeDiviseursRetour}
+              \xdef\faa{\PfCListeDiviseursInfDixRetour}
             \fi
             \ignoreemptyitems
             \readlist*\PfCListeDiviseurChoisi{\faa}%
@@ -126,18 +126,18 @@
   \reademptyitems%
 }%
 
-\NewDocumentCommand\PfCListeDiviseurs{m}{%
+\NewDocumentCommand\PfCListeDiviseursInfDix{m}{%
   \ifnum#1<10\relax
     \xdef\PfCLimiteDiv{#1}
   \else
     \xdef\PfCLimiteDiv{10}
   \fi
-  \xdef\PfCListeDiviseursRetour{}
+  \xdef\PfCListeDiviseursInfDixRetour{}
   \xdef\PfCNbDiviseurs{}
   \xintFor* ##2 in {\xintSeq{2}{\PfCLimiteDiv}}\do{%
     \modulo{#1}{##2}\relax
     \ifnum\remainder=0\relax
-      \xdef\PfCListeDiviseursRetour{\PfCListeDiviseursRetour ##2,}%
+      \xdef\PfCListeDiviseursInfDixRetour{\PfCListeDiviseursInfDixRetour ##2,}%
       \xdef\PfCNbDiviseurs{\fpeval{\PfCNbDiviseurs+1}}%
     \fi
   }%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Fonction
 %%%
-\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Splines=false,Epaisseur=1,Couleur=black,CouleurTrace=black,PointsCourbe=true,Codes=false,Origine={(0,0)},Vide=false}
+\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Splines=false,Lagrange=false,Epaisseur=1,Couleur=black,CouleurTrace=black,PointsCourbe=true,Codes=false,Origine={(0,0)},Vide=false}
 \defKV[ClesFonction]{Traces=\setKV[ClesFonction]{Codes}}%
 
 \newtoks\toklistePtsFn%pour la discipline
@@ -42,6 +42,13 @@
       \toklistePtsFn{}%
       \setsepchar[*]{§*/}%\ignoreemptyitems%
       \readlist*\ListePoints{#2}%
+      \ifboolKV[ClesFonction]{Lagrange}{
+          \xdef\PfCFooListePoints{}%
+          \foreachitem\compteur\in\ListePoints{%
+            \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
+          }%
+          \MPLagrange{\PfCFooListePoints}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}%
+        }{%
       \ifboolKV[ClesFonction]{Splines}{%
         \xdef\PfCFooListePoints{}%
           \foreachitem\compteur\in\ListePoints{%
@@ -70,6 +77,7 @@
           \MPCourbeNew{\PfCFooListePoints}%
         }%
       }%
+    }
     }{%
       \setsepchar{,}\ignoreemptyitems%
       \readlist*\ListeFonction{#2}%
@@ -265,6 +273,226 @@
 }
 }%
 
+\def\MPLagrangeCode{%
+  path Cb[];
+  %
+  boolean PointsCourbe,Code,Prolonge;
+  PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+  Code=\useKV[ClesFonction]{Codes};
+  Prolonge:=\useKV[ClesFonction]{Prolonge};
+  color CoulTrace;
+  CoulTrace:=\useKV[ClesFonction]{CouleurTrace};
+  Epaisseur:=\useKV[ClesFonction]{Epaisseur};
+  %
+  vardef EffectuerTraces=
+  \useKV[ClesFonction]{Traces};
+  enddef;
+%
+  def enplace=
+  xscaled X.u yscaled Y.u
+  enddef;
+  %
+  vardef placepoint(expr q,r)=
+  (q,r)*cm enplace
+  enddef;
+  %
+  def replace=
+  xscaled (1/X.u) yscaled (1/Y.u)
+  enddef;
+%
+  def retrouvecoord(expr p)=%
+  (p/cm) replace
+  enddef;
+  %
+%  nbpoints:=100;
+  %
+  vardef intersectioncourbes(expr aa,bb)=
+  pair pti[];
+  nbpoints:=100;
+  n:=0;
+  for k=0 upto nbpoints-1:
+  if ((subpath(k/nbpoints*length aa,(k+1)/nbpoints*length aa) of aa) intersectiontimes bb)<>(-1,-1):
+      n:=n+1;
+      pti[n]:=(subpath(k/nbpoints*length aa,(k+1)/nbpoints*length aa) of aa) intersectionpoint bb;
+    fi;
+  endfor;
+  enddef;
+  %
+  vardef IntersectionCourbes(expr aa,bb)=
+  pair pti[];
+  numeric vali[];
+  n:=0;
+  for k=0 upto 100:
+    if ((subpath(k/100*length aa,(k+1)/100*length aa) of aa) intersectiontimes bb)<>(-1,-1):
+      n:=n+1;
+      vali[n]:=k;
+      message("vali : "&decimal(vali[n]));
+      pti[n]:=(subpath(k/100*length aa,(k+1)/100*length aa) of aa) intersectionpoint bb;
+    fi;
+  endfor;
+  enddef;
+  %
+  vardef courbe[](expr a,b,nb)(text texte)=
+ path PfCCb;
+ for i:=0 upto nb :
+ x@[i]:=(a+i*(b-a)/nb);
+ x:=x@[i];
+ y@[i]:=texte;
+% if y@[i]>MaxY:
+% MaxY:=y@[i];
+%    fi;
+%    if y@[i]<MinY:
+%    MinY:=y@[i];
+%    fi;
+ endfor ;
+  Cb@:=placepoint(x at .0,y at .0)
+ for i:=1 upto nb :
+   ..placepoint(x@[i],y@[i])
+ endfor;  
+ PfCCb=Cb@;
+ PfCCb
+enddef;
+}
+
+\def\MPLagrange#1#2#3#4#5{
+  % #1 la liste des points
+  % #2: pas en x
+  % #3: pas en y
+  % #4: unit\'e en x
+  % #5: unit\'e en y
+  \ifluatex
+    \mplibforcehmode
+    \mplibnumbersystem{double}
+    \begin{mplibcode}
+      \MPLagrangeCode
+
+      pair M[];%Les points de passage
+      pair N[][];%Les points conservés pour les calculs.
+      numeric nbm;%Le nombre de points de passage;
+      
+vardef Lagrange(expr valeur)(text t)=
+  save Lagpt;
+  numeric Lagpt;
+  nbm:=0;
+  for p_=t:
+    nbm:=nbm+1;
+  endfor;
+  nbpoints:=0;
+  for p_=t:
+    nbpoints:=nbpoints+1;
+    M[nbpoints]:=p_;
+  endfor;
+  for k=1 upto nbm:
+    nbpoints:=0;
+    for l=1 upto nbm:
+      if l<>k:
+	nbpoints:=nbpoints+1;
+	N[k][nbpoints]:=M[l];
+      fi;
+    endfor;
+  endfor;
+  Lagpt=0;
+  for k=1 upto nbm:
+    ImagePoly:=for l=1 upto (nbm-1):(xpart(M[k])-xpart(N[k][l]))* endfor 1;
+    Lagpt:=Lagpt+((ypart(M[k])/ImagePoly)*for l=1 upto (nbm-1):(valeur-xpart(N[k][l]))* endfor 1);
+    endfor;
+    Lagpt
+    enddef;
+
+x.u:=#2;
+    y.u:=#3;
+    X.u:=#4;
+    Y.u:=#5;
+    %
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    %
+    nbpointsLg=0;
+    for p_=#1:
+    nbpointsLg:=nbpointsLg+1;
+    M[nbpointsLg]:=p_;
+    endfor;
+    for k=1 upto nbpointsLg:
+    if xpart(M[k])<MinX:
+    MinX:=xpart(M[k]);
+    fi;
+    if xpart(M[k])>MaxX:
+    MaxX:=xpart(M[k]);
+    fi;
+    if ypart(M[k])<MinY:
+    MinY:=ypart(M[k]);
+    fi;
+    if ypart(M[k])>MaxY:
+    MaxY:=ypart(M[k]);
+    fi;
+    endfor;
+    if MaxY<1:
+    MaxY:=2;
+    fi;
+    if MinY>-1:
+    MinY:=-2;
+    fi;
+    if MinY<0:
+    if MinY<>ceiling(MinY):
+    MinY:=ceiling(MinY)-1;
+    fi;
+    fi;
+    if MinX<0:
+    if MinX<>ceiling(MinX):
+    MinX:=ceiling(MinX)-1;
+    fi;
+    fi;
+    if MaxY<>ceiling(MaxY):
+    MaxY:=ceiling(MaxY);
+    fi;
+    if MaxX<>ceiling(MaxX):
+    MaxX:=ceiling(MaxX);
+    fi;
+    if MaxX<1:
+    MaxX:=1;
+    fi;
+    if MaxY<1:
+    MaxY:=1;
+    fi;
+    if Prolonge:
+    draw courbe1(MinX-1,MaxX+1,25,Lagrange(x)(#1)) withpen pencircle scaled Epaisseur withcolor CoulTrace;
+    else:
+    draw courbe1(MinX,MaxX,25,Lagrange(x)(#1)) withpen pencircle scaled Epaisseur withcolor CoulTrace;
+    fi;
+    path cadreexterieur;
+    cadreexterieur=(((MinX-1)*X.u*cm,(floor(MinY)-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(floor(MinY)-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(floor(MaxY)+1)*Y.u*cm)--((MinX-1)*X.u*cm,(floor(MaxY)+1)*Y.u*cm)--cycle);
+    clip currentpicture to cadreexterieur;
+    picture RetiensCourbe;
+    RetiensCourbe=currentpicture;
+    currentpicture:=nullpicture;
+    for k=(floor(MinY)-1) step y.u until (floor(MaxY)+1):
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(floor(MinY)-1)*Y.u)--cm*(k*X.u,(floor(MaxY)+1)*Y.u) withcolor 0.75white;
+    endfor;
+    draw RetiensCourbe;
+    if PointsCourbe:
+    for k=1 upto nbpointsLg:
+    fill cercles(placepoint(xpart(M[k]),ypart(M[k])),0.5mm);
+    endfor;
+    fi;
+    drawarrow (0,(floor(MinY)-1)*Y.u*cm)--(0,(floor(MaxY)+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+    %
+    label.llft(TEX("O"),(0,0));
+    dotlabel.bot(TEX("1"),cm*X.u*(1,0));
+    dotlabel.lft(TEX("1"),cm*Y.u*(0,1));
+    if Code:
+    EffectuerTraces;
+    fi;
+  \end{mplibcode}
+  \mplibnumbersystem{scaled}
+  \fi
+}%
+
 \def\MPSplineCode{%
   boolean PointsCourbe,Code,Prolonge;
   PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
@@ -328,8 +556,371 @@
   endfor --placepoint(xuno,yuno);
   Spline
   enddef;
+  %
+  path Cb[];
+  vardef courbe[](expr a,b,nb)(text texte)=
+  path PfCCb;
+  for i:=0 upto nb :
+  x@[i]:=(a+i*(b-a)/nb);
+  x:=x@[i];
+  y@[i]:=texte;
+%  if y@[i]>MaxY:
+%  MaxY:=y@[i];
+%  fi;
+%  if (y@[i]/(Y.u*cm))<MinY:
+%  MinY:=y@[i];
+%  fi;
+  endfor ;
+  Cb@:=placepoint(x at .0,y at .0)
+  for i:=1 upto nb :
+  ..placepoint(x@[i],y@[i])
+  endfor;  
+  PfCCb=Cb@;
+  PfCCb
+  enddef;
+  %
+  pair M[];%Les points de passage
+      pair N[][];%Les points conservés pour les calculs.
+      numeric nbm;%Le nombre de points de passage;
+  %    
+vardef Lagrange(expr valeur)(text t)=
+  save Lagpt;
+  numeric Lagpt;
+  nbm:=0;
+  for p_=t:
+    nbm:=nbm+1;
+  endfor;
+  nbpoints:=0;
+  for p_=t:
+    nbpoints:=nbpoints+1;
+    M[nbpoints]:=p_;
+  endfor;
+  for k=1 upto nbm:
+    nbpoints:=0;
+    for l=1 upto nbm:
+      if l<>k:
+	nbpoints:=nbpoints+1;
+	N[k][nbpoints]:=M[l];
+      fi;
+    endfor;
+  endfor;
+  Lagpt=0;
+  for k=1 upto nbm:
+    ImagePoly:=for l=1 upto (nbm-1):(xpart(M[k])-xpart(N[k][l]))* endfor 1;
+    Lagpt:=Lagpt+((ypart(M[k])/ImagePoly)*for l=1 upto (nbm-1):(valeur-xpart(N[k][l]))* endfor 1);
+    endfor;
+    Lagpt
+    enddef;
+    vardef SplinePointsDeux(text t)=
+    pair Xxn[],Ffn[],Ddn[];%Xn abscisse,ordonnée D : dérivé g,dérivée d
+    nbsplined=0;
+    for p_=t:
+    nbsplined:=nbsplined+1;
+    if (nbsplined mod 2)=1:
+    Xxn[(nbsplined div 2)+1]=p_;
+    Ffn[(nbsplined div 2)+1]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    else:
+    Ddn[(nbsplined div 2)]=p_
+    fi;
+    endfor;
+    enddef;    
 }
 
+\def\MPLagrangeDouble#1#2#3#4#5#6{
+  % #1 la liste des points
+  % #2 la deuxième liste de points
+  % #3: pas en x
+  % #4: pas en y
+  % #5: unit\'e en x
+  % #6: unit\'e en y
+  \ifluatex
+    \mplibforcehmode
+    \mplibnumbersystem{double}
+    \begin{mplibcode}
+      \MPLagrangeCode
+
+      pair M[];%Les points de passage
+      pair N[][];%Les points conservés pour les calculs.
+      numeric nbm;%Le nombre de points de passage;
+      
+      vardef Lagrange(expr valeur)(text t)=
+      save Lagpt;
+      numeric Lagpt;
+      nbm:=0;
+      for p_=t:
+      nbm:=nbm+1;
+      endfor;
+      nbpoints:=0;
+      for p_=t:
+      nbpoints:=nbpoints+1;
+      M[nbpoints]:=p_;
+      endfor;
+      for k=1 upto nbm:
+      nbpoints:=0;
+      for l=1 upto nbm:
+      if l<>k:
+      nbpoints:=nbpoints+1;
+      N[k][nbpoints]:=M[l];
+      fi;
+      endfor;
+      endfor;
+      Lagpt=0;
+      for k=1 upto nbm:
+      ImagePoly:=for l=1 upto (nbm-1):(xpart(M[k])-xpart(N[k][l]))* endfor 1;
+      Lagpt:=Lagpt+((ypart(M[k])/ImagePoly)*for l=1 upto (nbm-1):(valeur-xpart(N[k][l]))* endfor 1);
+      endfor;
+      Lagpt
+      enddef;
+      
+      x.u:=#3;
+      y.u:=#4;
+      X.u:=#5;
+      Y.u:=#6;
+      % 
+      MinY=-10;%999;
+      MaxY=10;%-999;
+      % 
+      MaxX=7;
+      MinX=-7;
+      %
+    draw courbe1(-7,7,100,Lagrange(x)(#1)) withpen pencircle scaled Epaisseur withcolor CoulTrace;
+    draw courbe2(-7,7,100,Lagrange(x)(#2)) withpen pencircle scaled Epaisseur dashed dashpattern(on4 off2) withcolor CoulTrace;
+    % Détermination des MinY et MaxY
+    MinY:=Lagrange(MinX)(#1);
+    for k=0 upto 100:
+    if Lagrange(MinX+(k/100)*(MaxX-MinX))(#1)<MinY:
+    MinY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#1);
+    fi;
+    endfor;
+    for k=0 upto 100:
+    if Lagrange(MinX+(k/100)*(MaxX-MinX))(#2)<MinY:
+    MinY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#2);
+    fi;
+    endfor;
+    MaxY:=Lagrange(MinX)(#1);
+    for k=0 upto 100:
+    if Lagrange(MinX+(k/100)*(MaxX-MinX))(#1)>MaxY:
+    MaxY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#1);
+    fi;
+    endfor;
+    for k=0 upto 100:
+    if Lagrange(MinX+(k/100)*(MaxX-MinX))(#2)>MaxY:
+    MaxY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#2);
+    fi;
+    endfor;
+    if MinY>0:
+    MinY:=-1;
+    fi;
+    if MaxY<0:
+    MaxY:=1;
+    fi;
+    path cadreexterieur;
+    % cadreexterieur=(((MinX)*X.u*cm,(floor(MinY)-1)*Y.u*cm)--((MaxX)*X.u*cm,(floor(MinY)-1)*Y.u*cm)--((MaxX)*X.u*cm,(floor(MaxY)+1)*Y.u*cm)--((MinX)*X.u*cm,(floor(MaxY)+1)*Y.u*cm)--cycle);
+    cadreexterieur=(((MinX)*X.u*cm,(floor(MinY))*Y.u*cm)--((MaxX)*X.u*cm,(floor(MinY))*Y.u*cm)--((MaxX)*X.u*cm,(ceiling(MaxY))*Y.u*cm)--((MinX)*X.u*cm,(ceiling(MaxY))*Y.u*cm)--cycle);
+    clip currentpicture to cadreexterieur;
+    picture RetiensCourbe;
+    RetiensCourbe=currentpicture;
+    currentpicture:=nullpicture;
+    for k=(floor(MinY)) step y.u until (ceiling(MaxY)):
+    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX step x.u until MaxX:
+    draw cm*(k*X.u,(floor(MinY))*Y.u)--cm*(k*X.u,(ceiling(MaxY))*Y.u) withcolor 0.75white;
+    endfor;
+    draw RetiensCourbe;
+%    if PointsCourbe:
+%    for k=1 upto nbpointsLg:
+%    fill cercles(placepoint(xpart(M[k]),ypart(M[k])),0.5mm);
+%    endfor;
+%    fi;
+    drawarrow (0,(floor(MinY))*Y.u*cm)--(0,(ceiling(MaxY))*Y.u*cm);
+    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+    %
+    label.llft(TEX("O"),(0,0));
+    dotlabel.bot(TEX("1"),cm*X.u*(1,0));
+    dotlabel.lft(TEX("1"),cm*Y.u*(0,1));
+    if Code:
+    EffectuerTraces;
+    fi;
+    %draw cadreexterieur withpen pencircle scaled 2;
+  \end{mplibcode}
+  \mplibnumbersystem{scaled}
+  \fi
+}%
+
+\def\MPSplineDouble#1#2#3#4#5#6{%
+  % #1 la liste des points
+  % #2 la deuxième liste de points
+  % #3: pas en x
+  % #4: pas en y
+  % #5: unit\'e en x
+  % #6: unit\'e en y
+  \ifluatex
+    \mplibforcehmode
+  \begin{mplibcode}
+    \MPSplineCode;
+    
+    x.u:=#3;
+    y.u:=#4;
+    X.u:=#5;
+    Y.u:=#6;
+
+    pair Xn[][],Fn[][],Dn[][];%Xn abscisse,ordonnée D : dérivé g,dérivée d
+
+    numeric N[];
+    
+    NbTotalSpline=0;
+
+    vardef PointsSplines(text t)=
+    n:=0;
+    NbTotalSpline:=NbTotalSpline+1;
+    for p_=t:
+    n:=n+1;
+    if (n mod 2)=1:
+    Xn[NbTotalSpline][(n div 2)+1]=p_;
+    Fn[NbTotalSpline][(n div 2)+1]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    else:
+    Dn[NbTotalSpline][(n div 2)]=p_
+    fi;
+    endfor;
+    N[NbTotalSpline]:=n div 2;
+    enddef;
+
+    PointsSplines(#1);
+    PointsSplines(#2);
+    
+    if Prolonge:
+    debutbalai=2;
+    else:
+    debutbalai=1;
+    fi;
+
+    vardef DeterminationMinMax(expr nbs)=
+    finbalai:=N[nbs];
+    Minx[nbs]=999;
+    Maxx[nbs]=-999;
+    Miny[nbs]=999;
+    Maxy[nbs]=-999;
+    for k=debutbalai upto finbalai:
+    if xpart(Xn[nbs][k])<Minx[nbs]:
+    Minx[nbs]:=xpart(Xn[nbs][k]);
+    fi;
+    if xpart(Xn[nbs][k])>Maxx[nbs]:
+    Maxx[nbs]:=xpart(Xn[nbs][k]);
+    fi;
+    if ypart(Xn[nbs][k])<Miny[nbs]:
+    Miny[nbs]:=ypart(Xn[nbs][k]);
+    fi;
+    if ypart(Xn[nbs][k])>Maxy[nbs]:
+    Maxy[nbs]:=ypart(Xn[nbs][k]);
+    fi;
+    endfor;
+    enddef;
+
+    DeterminationMinMax(1);
+    DeterminationMinMax(2);
+
+    if Minx[1]<Minx[2]:
+    MinX:=Minx[2];
+    else:
+    MinX:=Minx[1];
+    fi;
+
+    if Maxx[1]<Maxx[2]:
+    MaxX:=Maxx[1];
+    else:
+    MaxX:=Maxx[2];
+    fi;
+
+    if Miny[1]<Miny[2]:
+    MinY:=Miny[1];
+    else:
+    MinY:=Miny[2];
+    fi;
+
+    if Maxy[1]<Maxy[2]:
+    MaxY:=Maxy[2];
+    else:
+    MaxY:=Maxy[1];
+    fi;
+    
+    if MaxY<1:
+    MaxY:=2;
+    fi;
+    if MinY>-1:
+    MinY:=-2;
+    fi;
+    if MinY<0:
+    if MinY<>ceiling(MinY):
+    MinY:=ceiling(MinY)-1;
+    fi;
+    fi;
+    if MinX<0:
+    if MinX<>ceiling(MinX):
+    MinX:=ceiling(MinX)-1;
+    fi;
+    fi;
+    if MaxY<>ceiling(MaxY):
+    MaxY:=ceiling(MaxY);
+    fi;
+    if MaxX<>ceiling(MaxX):
+    MaxX:=ceiling(MaxX);
+    fi;
+    if MinX<0:
+    else:
+    MinX:=-1;
+    fi;
+    if MaxX<1:
+    MaxX:=1;
+    fi;
+    if MaxY<1:
+    MaxY:=1;
+    fi;
+    %
+    path cadreexterieur;
+    cadreexterieur=(((MinX)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
+    path SplineRecap[][],CourbeTotale[];
+    for r=1 upto 2:
+    for l=1 upto N[r]-1:
+    SplineRecap[r][l]=SplineCubique(xpart(Xn[r][l]),ypart(Xn[r][l]),xpart(Xn[r][l+1]),ypart(Xn[r][l+1]),ypart(Dn[r][l]),xpart(Dn[r][l+1]));
+    endfor;
+    CourbeTotale[r]=SplineRecap[r][1] for l=2 upto N[r]-1:..SplineRecap[r][l] endfor;
+    endfor;
+    draw CourbeTotale[1] withpen pencircle scaled Epaisseur withcolor CoulTrace;
+    draw CourbeTotale[2] withpen pencircle scaled Epaisseur dashed dashpattern(on4 off 2) withcolor CoulTrace;
+    %
+    if PointsCourbe:
+    for k=debutbalai upto finbalai:
+    fill cercles(Fn[1][k],0.5mm);
+    fill cercles(Fn[2][k],0.5mm);
+    endfor;
+    fi;
+    %
+    clip currentpicture to cadreexterieur;
+    picture RetiensCourbe;
+    RetiensCourbe=currentpicture;
+    currentpicture:=nullpicture;
+    for k=MinY step y.u until MaxY:
+    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX step x.u until MaxX:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+    %
+    draw RetiensCourbe;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+    if Code:
+    EffectuerTraces;
+    fi;
+    trace cadreexterieur withcolor 0.75white;
+  \end{mplibcode}
+\fi
+}
+
 \def\MPSpline#1#2#3#4#5{%
   % #1 la liste des points
   % #2: pas en x
@@ -337,7 +928,7 @@
   % #4: unit\'e en x
   % #5: unit\'e en y
   \ifluatex
-  \mplibforcehmode
+    \mplibforcehmode
   \begin{mplibcode}
     \MPSplineCode;
     
@@ -405,6 +996,10 @@
     if MaxX<>ceiling(MaxX):
     MaxX:=ceiling(MaxX);
     fi;
+    if MinX<0:
+    else:
+    MinX:=-1;
+    fi;
     if MaxX<1:
     MaxX:=1;
     fi;

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNumerationsAnciennes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCNumerationsAnciennes.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCNumerationsAnciennes.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,13 +1,21 @@
-\NewDocumentCommand\Chinoise{m}{%
-  \BuildNumerationChinoise{#1}%
+\setKVdefault[NumerationAncienne]{Couleur=black}%
+
+\NewDocumentCommand\Chinoise{om}{%
+  \useKVdefault[NumerationAncienne]%
+  \setKV[NumerationAncienne]{#1}%
+  \BuildNumerationChinoise{#2}%
 }%
 
-\NewDocumentCommand\Maya{m}{%
-  \BuildNumerationMaya{#1}%
+\NewDocumentCommand\Maya{om}{%
+  \useKVdefault[NumerationAncienne]%
+  \setKV[NumerationAncienne]{#1}%
+  \BuildNumerationMaya{#2}%
 }%
 
-\NewDocumentCommand\Babylone{m}{%
-  \BuildNumerationBabylone{#1}%
+\NewDocumentCommand\Babylone{om}{%
+  \useKVdefault[NumerationAncienne]%
+  \setKV[NumerationAncienne]{#1}%
+  \BuildNumerationBabylone{#2}%
 }%
 
 \NewDocumentCommand\BuildNumerationChinoise{m}{%
@@ -15,7 +23,9 @@
     \mplibnumbersystem{double}%
     \mplibforcehmode
     \begin{mplibcode}
-      drawoptions(withpen pencircle scaled 1.5);
+      color CouleurTrace;
+      CouleurTrace=\useKV[NumerationAncienne]{Couleur};
+      drawoptions(withpen pencircle scaled 1.5 withcolor CouleurTrace);
       ecart:=0.15u;
       vardef Chiffre(expr t,a)=
       picture Chinois;
@@ -94,7 +104,9 @@
     \mplibnumbersystem{double}%
     \mplibforcehmode
     \begin{mplibcode}
-      drawoptions(withpen pencircle scaled 1.5);
+      color CouleurTrace;
+      CouleurTrace=\useKV[NumerationAncienne]{Couleur};
+      drawoptions(withpen pencircle scaled 1.5 withcolor CouleurTrace);
       %
       picture MayaZero;
       MayaZero=image(
@@ -170,7 +182,9 @@
     \mplibforcehmode%
     \begin{mplibcode}
       u:=8mm;
-      drawoptions(withpen pencircle scaled 1.5);
+      color CouleurTrace;
+      CouleurTrace=\useKV[NumerationAncienne]{Couleur};
+      drawoptions(withpen pencircle scaled 1.5 withcolor CouleurTrace);
       %
       picture Chevron,Clou;
       Chevron=image(%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -10,6 +10,7 @@
 \def\Buildtabpropor{%
   \setcounter{NbProporG}{0}%
   \setcounter{NbProporD}{0}%
+  \colorlet{FondGrandeur}{\useKV[ClesPropor]{CouleurTab}}
   \renewcommand{\arraystretch}{\useKV[ClesPropor]{Stretch}}%
   \ifboolKV[ClesPropor]{Vertical}{%
     \begin{tabular}{c|*{2}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}c}%
@@ -26,8 +27,8 @@
   }{%
     \tabtoksa{}\tabtoksb{}%
     \ifboolKV[ClesPropor]{Simple}{}{%
-    \tabtoksa{\cellcolor{\useKV[ClesPropor]{CouleurTab}}\useKV[ClesPropor]{GrandeurA}}%
-    \tabtoksb{\cellcolor{\useKV[ClesPropor]{CouleurTab}}\useKV[ClesPropor]{GrandeurB}}%
+    \tabtoksa{\cellcolor{FondGrandeur}\useKV[ClesPropor]{GrandeurA}}%
+    \tabtoksb{\cellcolor{FondGrandeur}\useKV[ClesPropor]{GrandeurB}}%
     }%
     \ifboolKV[ClesPropor]{Math}{%
       \foreachitem\compteur\in\ListeValeur{\expandafter\Updatetoksmath\compteur\nil}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,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,Perso=false,AllPerso=false,SansMots=false,Decalage=5mm}%
+\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,Perso=false,AllPerso=false,SansMots=false,Decalage=5mm,ModeleCouleur=5}%
 \defKV[ClesPythagore]{ValeurA=\setKV[ClesPythagore]{EnchaineA}}%
 \defKV[ClesPythagore]{ValeurB=\setKV[ClesPythagore]{EnchaineB}}%
 \defKV[ClesPythagore]{ValeurC=\setKV[ClesPythagore]{EnchaineC}}%
@@ -21,6 +21,8 @@
   \ifluatex
     \mplibforcehmode%
     \begin{mplibcode}
+      defaultcolormodel := \useKV[ClesPythagore]{ModeleCouleur};
+      
     u:=\useKV[ClesPythagore]{Echelle};
     pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
     O=u*(2.5,2.5);
@@ -88,6 +90,7 @@
     draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
     draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
     draw D--E--F;
+    numeric decalage;
     decalage=3mm;
     if (#4<#5) or (#4=#5) :
     if ypart(B)>ypart(O) :
@@ -124,7 +127,8 @@
     % #7 angle de rotation de la figure
   \ifluatex
    \mplibforcehmode
-  \begin{mplibcode}
+   \begin{mplibcode}
+     defaultcolormodel := \useKV[ClesPythagore]{ModeleCouleur};
     u:=\useKV[ClesPythagore]{Echelle};
     decalage=\useKV[ClesPythagore]{Decalage};
     pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
@@ -165,7 +169,8 @@
     C:=C rotatedabout(O,#7);
     draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
-    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    numeric decalage;
     decalage=3mm;
     label(LATEX("\num{#4}"),O+decalage*(unitvector(O-B)));
     label(LATEX("\num{#5}"),1/2[C,B]+decalage*(unitvector(1/2[C,B]-O)));
@@ -186,7 +191,8 @@
   % #6 angle de rotation de la figure
   \ifluatex
    \mplibforcehmode
-  \begin{mplibcode}
+   \begin{mplibcode}
+     defaultcolormodel := \useKV[ClesPythagore]{ModeleCouleur};
     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);

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -2,9 +2,47 @@
 % R\'eponses \`a relier
 %%%
 \setKVdefault[ClesRelie]{Solution=false,LargeurG=5cm,LargeurD=2cm,Stretch=1.5,Ecart=2cm,Couleur=black}%
+\defKV[ClesRelie]{Graine=\PfCGraineAlea{#1}}%
 
-\newcommand\Relie[2][]{%
+\NewDocumentCommand\Relie{som}{%
   \useKVdefault[ClesRelie]%
+  \setKV[ClesRelie]{#2}%
+  \colorlet{PfCRelieCouleurTrace}{\useKV[ClesRelie]{Couleur}}%
+  \setsepchar[*]{,*/}\reademptyitems%
+  \readlist*\ListeRelie{#3}%
+  \ignoreemptyitems%
+  \IfBooleanTF{#1}{%
+    \buildtabrelieauto%
+    %\par
+    \ifboolKV[ClesRelie]{Solution}{%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{%
+        \itemtomacro\PfCListeReponsesMelangees[##1]\PfCNumReponses%
+        \itemtomacro\ListeRelie[\PfCNumReponses,1]\untest%
+        % Le test est \untest\\
+        \ifx\bla\untest\bla%
+        \else
+          \tikz[remember picture,overlay]{\draw[PfCRelieCouleurTrace] (RelieG-\PfCNumReponses) -- (RelieD-##1);}%
+        \fi
+      }%
+    }{%
+    }%
+  }{%
+    \buildtabrelie%
+    \ifboolKV[ClesRelie]{Solution}{%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{%
+        \itemtomacro\ListeRelie[##1,1]\untest%
+        \ifx\bla\untest\bla%
+        \else%
+          \tikz[remember picture,overlay]{\draw[PfCRelieCouleurTrace] (RelieG-##1) -- (RelieD-\ListeRelie[##1,3]);}%
+        \fi
+      }%
+    }{%
+    }%
+  }%
+}%
+
+\newcommand\Relieold[2][]{%
+  \useKVdefault[ClesRelie]%
   \setKV[ClesRelie]{#1}%
   \setsepchar[*]{,*/}\reademptyitems%
   \readlist*\ListeRelie{#2}%
@@ -44,17 +82,32 @@
   \setcounter{NbRelie}{0}%
 }%
 
-\def\buildtabrelieold{%
+\def\buildtabrelieauto{%
   \setcounter{NbRelie}{0}%
+  \xdef\PfCFooListeNbQ{1}%
+  \xintFor* ##1 in{\xintSeq{2}{\ListeRelielen}}\do{%
+    \xdef\PfCFooListeNbQ{\PfCFooListeNbQ,##1}%
+  }%
+  \setsepchar{,}\ignoreemptyitems%
+  \MelangeListe{\PfCFooListeNbQ}{\ListeRelielen}%
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\PfCListeReponsesMelangees{\faa}%
   \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}%
   \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember
-    picture,baseline]{\node[name=RelieD-\theNbRelie]{\Large\textbullet};}}cp{\useKV[ClesRelie]{LargeurD}}}%
-    \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest%
-\ifx\bla\untest\bla%                                     
-    \uppercase{&}\stepcounter{NbRelie}%
+          picture]{\node[name=RelieD-\theNbRelie,inner
+            sep=0pt]{};\fill[] (RelieD-\theNbRelie) circle[radius=1.5pt]}}cp{\useKV[ClesRelie]{LargeurD}}}%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{
+      \ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest%
+      \ifx\bla\untest\bla%                                     
+      \uppercase{&}\stepcounter{NbRelie}\tikz[remember
+        picture,overlay]{\node[name=RelieG-\theNbRelie,inner
+          sep=0pt]{};}
       \else
-      \uppercase{&}\stepcounter{NbRelie}\tikz[remember picture,baseline]{\node[name=RelieG-\theNbRelie]{\Large\textbullet};}
-\fi&&&\ListeRelie[##1,2]\\}%
+      \uppercase{&}\stepcounter{NbRelie}\tikz[remember
+        picture,overlay]{\node[name=RelieG-\theNbRelie,inner
+          sep=0pt]{};\fill[]
+        (RelieG-\theNbRelie) circle[radius=1.5pt];}
+      \fi&&&\itemtomacro\PfCListeReponsesMelangees[##1]\PfCNumReponses\ListeRelie[\PfCNumReponses,2]\\}%
   \end{tabular}%
   \setcounter{NbRelie}{0}%
 }%
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Reperage
 %%%
-\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageUnites=true,MarquePrimaire=true,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false,CouleurMercure=black,Celsius,Kelvin=false,Farenheit=false,ValeurMin=-4000,ValeurMax=4000,ValeurMiny=-4000,ValeurMaxy=4000,Etages=4,Code=false,Globe=false,Rho=1500,Phi=22,Theta=10,CouleurE=orange,CouleurG=green,Axes=false,TypeProj="persp",Niveaux=false,Decale=false,Tiret=false,Cadre=false}
+\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageUnites=true,MarquePrimaire=true,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false,CouleurMercure=black,Celsius,Kelvin=false,Farenheit=false,ValeurMin=-4000,ValeurMax=4000,ValeurMiny=-4000,ValeurMaxy=4000,Etages=4,Code=false,Globe=false,Rho=1500,Phi=22,Theta=10,CouleurE=orange,CouleurG=green,Axes=false,TypeProj="persp",Niveaux=false,Decale=false,Tiret=false,Cadre=false,ModeleCouleur=5,EchelleCroix=1,CouleurCroix=black}
 \defKV[ClesReperage]{Traces=\setKV[ClesReperage]{Code}}%
 \defKV[ClesReperage]{Niveau=\setKV[ClesReperage]{Etages=#1}\setKV[ClesReperage]{Niveaux}}%
 % ValeurOrigine permet de faire des morceaux de demi-droite gradu\'ee en passant par droite :)
@@ -53,6 +53,13 @@
     \mplibnumbersystem{double}%
   \mplibforcehmode%
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
+
+    if defaultcolormodel=7:
+    cmykcolor black;
+    black=(0,0,0,1);
+    fi;
+    
     input PfCSolid;
     % Pour convertir les (Long,lat) données en degrés en (Long,lat) données en radians
     vardef ConvDeg(expr fa,fl)=
@@ -235,7 +242,13 @@
 \def\MPEspaceSphere#1#2{%
   \ifluatex
     \mplibforcehmode
-  \begin{mplibcode}
+    \begin{mplibcode}
+      defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
+      if defaultcolormodel=7:
+      cmykcolor white,blanc;
+      white=(0,0,0,1);
+      blanc=(0,0,0,0);
+      fi;
     typetrace:="3D";
     typerepre:="persp";
     anglephi:=\useKV[ClesReperage]{AnglePhi};
@@ -425,136 +438,142 @@
 \def\MPEspacePave#1#2#3#4#5#6#7#8#9{%
   \ifluatex%
     \mplibforcehmode%
-  \begin{mplibcode}
-    typetrace:="3D";
-    typerepre:="persp";
-    Figure(-20u,-20u,20u,20u);
-    Initialisation(1500,30,20,abs(#9));
-    %marque_r:=marque_r/2;
-    marque_p:="plein";
-    color A,B,C,D,E,F,G,H,M[],N[];
-    draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
-    if #9>0:
-    drawarrow Projette(A)--Projette(1.5[D,A]);
-    drawarrow Projette(C)--Projette(1.5[D,C]);
-    drawarrow Projette(E)--Projette(1.5[D,E]);
-    label.top(btex $x$ etex,Projette(1.5[D,A]));
-    label.top(btex $y$ etex,Projette(1.5[D,C]));
-    label.top(btex $z$ etex,Projette(1.5[D,E]));
-    label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
-    label.bot(btex 1 etex,Projette((1/#4)[D,C]));
-    label.lft(btex 1 etex,Projette((1/#6)[D,E]));
-    for k=1 upto (#2):
-    pointe((k/#2)[D,A]);
-    endfor;
-    for k=1 upto (#4):
-    pointe((k/#4)[D,C]);
-    endfor;
-    for k=1 upto (#6):
-    pointe((k/#6)[D,E]);
-    endfor;
-    else:
-    drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
-    drawarrow Projette(B)--Projette(1.5[A,B]);
-    drawarrow Projette(F)--Projette(1.5[A,F]);
-    label.lrt(btex $x$ etex,Projette(1.5[A,D]));
-    label.top(btex $y$ etex,Projette(1.5[A,B]));
-    label.top(btex $z$ etex,Projette(1.5[A,F]));
-    label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
-    label.bot(btex 1 etex,Projette((1/#4)[A,B]));
-    label.lft(btex 1 etex,Projette((1/#6)[A,F]));
-    for k=1 upto (#2):
-    pointe((k/#2)[A,D]);
-    endfor;
-    for k=1 upto (#4):
-    pointe((k/#4)[A,B]);
-    endfor;
-    for k=1 upto (#6):
-    pointe((k/#6)[A,F]);
-    endfor;
-    fi;
-    vardef tata(text t)=
-    n:=1;%pour compter combien de points
-    k:=0;%pour garder l'abscisse
-    l:=0;%pour garder l'ordonn\'ee
-    m:=0;%pour garder l'altitude
-    if #8>0:
-    for p_=t:
-    if (n mod 4)=1:
-    k:=p_;
-    fi;
-    if (n mod 4)=2:
-    l:=p_;
-    fi;
-    if (n mod 4)=3:
-    m:=p_;
-    fi;
-    if (n mod 4)=0:
-    M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
-    N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
-    if (#8>1):
-    label.top(TEX(p_),Projette(M[n]));
-    pointe(M[n]);
-    fi;
-    if (#8=1) or (#8=3) :
-    drawoptions(dashed evenly withcolor gris);
-    draw segment(M[n],(0,0,bluepart(M[n])));
-    draw segment(M[n],N[n]);
-    draw segment(N[n],(redpart(M[n]),0,0));
-    draw segment(N[n],(0,greenpart(M[n]),0));
-    drawoptions();
-    fi;
-    fi;
-    n:=n+1;
-    endfor;
-    fi;
-    enddef;
-    vardef toto(text t)=
-    n:=1;%pour compter combien de points
-    k:=0;%pour garder l'abscisse
-    l:=0;%pour garder l'ordonn\'ee
-    m:=0;%pour garder l'altitude
-    if #8>0:
-    for p_=t:
-    if (n mod 4)=1:
-    k:=p_;
-    fi;
-    if (n mod 4)=2:
-    l:=p_;
-    fi;
-    if (n mod 4)=3:
-    m:=p_;
-    fi;
-    if (n mod 4)=0:
-    % message("je suis ici : "&p_);
-    M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
-    N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
-    if (#8>1):
-    label.top(TEX(p_),Projette(M[n]));
-    pointe(M[n]);
-    fi;
-    if (#8=1) or (#8=3) :
-    drawoptions(dashed evenly withcolor gris);
-    draw segment(M[n],A+(0,0,bluepart(M[n])));
-    draw segment(M[n],N[n]);
-    draw segment(N[n],A+(l/#4)*(B-A));
-    draw segment(N[n],A+(k/#2)*(D-A));
-    drawoptions();
-    fi;
-    fi;
-    n:=n+1;
-    endfor;
-    fi;
-    enddef;
-    if #9>0:
-    tata(#7);
-    else:
-    toto(#7);
-    fi;
-    draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
-    if \useKV[ClesReperage]{Code}:
-    \useKV[ClesReperage]{Traces}
-    fi;
+    \begin{mplibcode}
+      defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
+      if defaultcolormodel=7:
+      cmykcolor CoulTrace,gris;
+      CoulTrace=(0,0,0,1);
+      gris=0.1(0,0,0,1);
+      fi;
+      typetrace:="3D";
+      typerepre:="persp";
+      Figure(-20u,-20u,20u,20u);
+      Initialisation(1500,30,20,abs(#9));
+      % marque_r:=marque_r/2;
+      marque_p:="plein";
+      color A,B,C,D,E,F,G,H,M[],N[];
+      draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+      if #9>0:
+      drawarrow Projette(A)--Projette(1.5[D,A]);
+      drawarrow Projette(C)--Projette(1.5[D,C]);
+      drawarrow Projette(E)--Projette(1.5[D,E]);
+      label.top(btex $x$ etex,Projette(1.5[D,A]));
+      label.top(btex $y$ etex,Projette(1.5[D,C]));
+      label.top(btex $z$ etex,Projette(1.5[D,E]));
+      label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+      label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+      label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+      for k=1 upto (#2):
+      pointe((k/#2)[D,A]);
+      endfor;
+      for k=1 upto (#4):
+      pointe((k/#4)[D,C]);
+      endfor;
+      for k=1 upto (#6):
+      pointe((k/#6)[D,E]);
+      endfor;
+      else:
+      drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+      drawarrow Projette(B)--Projette(1.5[A,B]);
+      drawarrow Projette(F)--Projette(1.5[A,F]);
+      label.lrt(btex $x$ etex,Projette(1.5[A,D]));
+      label.top(btex $y$ etex,Projette(1.5[A,B]));
+      label.top(btex $z$ etex,Projette(1.5[A,F]));
+      label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+      label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+      label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+      for k=1 upto (#2):
+      pointe((k/#2)[A,D]);
+      endfor;
+      for k=1 upto (#4):
+      pointe((k/#4)[A,B]);
+      endfor;
+      for k=1 upto (#6):
+      pointe((k/#6)[A,F]);
+      endfor;
+      fi;
+      vardef tata(text t)=
+      n:=1;%pour compter combien de points
+      k:=0;%pour garder l'abscisse
+      l:=0;%pour garder l'ordonn\'ee
+      m:=0;%pour garder l'altitude
+      if #8>0:
+      for p_=t:
+      if (n mod 4)=1:
+      k:=p_;
+      fi;
+      if (n mod 4)=2:
+      l:=p_;
+      fi;
+      if (n mod 4)=3:
+      m:=p_;
+      fi;
+      if (n mod 4)=0:
+      M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+      N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+      if (#8>1):
+      label.top(TEX(p_),Projette(M[n]));
+      pointe(M[n]);
+      fi;
+      if (#8=1) or (#8=3) :
+      drawoptions(dashed evenly withcolor gris);
+      draw segment(M[n],(0,0,bluepart(M[n])));
+      draw segment(M[n],N[n]);
+      draw segment(N[n],(redpart(M[n]),0,0));
+      draw segment(N[n],(0,greenpart(M[n]),0));
+      drawoptions();
+      fi;
+      fi;
+      n:=n+1;
+      endfor;
+      fi;
+      enddef;
+      vardef toto(text t)=
+      n:=1;%pour compter combien de points
+      k:=0;%pour garder l'abscisse
+      l:=0;%pour garder l'ordonn\'ee
+      m:=0;%pour garder l'altitude
+      if #8>0:
+      for p_=t:
+      if (n mod 4)=1:
+      k:=p_;
+      fi;
+      if (n mod 4)=2:
+      l:=p_;
+      fi;
+      if (n mod 4)=3:
+      m:=p_;
+      fi;
+      if (n mod 4)=0:
+      % message("je suis ici : "&p_);
+      M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+      N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+      if (#8>1):
+      label.top(TEX(p_),Projette(M[n]));
+      pointe(M[n]);
+      fi;
+      if (#8=1) or (#8=3) :
+      drawoptions(dashed evenly withcolor gris);
+      draw segment(M[n],A+(0,0,bluepart(M[n])));
+      draw segment(M[n],N[n]);
+      draw segment(N[n],A+(l/#4)*(B-A));
+      draw segment(N[n],A+(k/#2)*(D-A));
+      drawoptions();
+      fi;
+      fi;
+      n:=n+1;
+      endfor;
+      fi;
+      enddef;
+      if #9>0:
+      tata(#7);
+      else:
+      toto(#7);
+      fi;
+      draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+      if \useKV[ClesReperage]{Code}:
+      \useKV[ClesReperage]{Traces}
+      fi;
   \end{mplibcode}
   \else
   \begin{mpost}[mpsettings={input PfCGeometrie;}]
@@ -719,6 +738,7 @@
   % #5 : liste des points pour les string
   \ifluatex
     \begin{mplibcode}
+      defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
       boolean Tiret,Code,AffichageGrad,Cadre;
       Tiret=\useKV[ClesReperage]{Tiret};
       Code=\useKV[ClesReperage]{Code};
@@ -1236,6 +1256,7 @@
   \ifluatex
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
     maxx:=0;
     minx:=4000;
     unitex:=\useKV[ClesReperage]{Unitex}*cm;
@@ -1251,6 +1272,13 @@
     AffichageUnites=\useKV[ClesReperage]{AffichageUnites};
     MarquePrimaire=\useKV[ClesReperage]{MarquePrimaire};
     Decale=\useKV[ClesReperage]{Decale};
+    if defaultcolormodel=7:
+    cmykcolor CouleurCroix;
+    else:
+    color CouleurCroix;
+    fi;
+    CouleurCroix=\useKV[ClesReperage]{CouleurCroix};
+    EchelleCroix=\useKV[ClesReperage]{EchelleCroix};
     numeric valeur[];
     vardef titi(text t)=
     n:=0;
@@ -1321,7 +1349,7 @@
     endfor;
     fi;
     % marquage des points
-    m_c:=m_c*3;
+    m_c:=m_c*3/EchelleCroix;
     marque_p:="croix";
     labeloffset:=labeloffset*3;
     if AffichageUnites:
@@ -1346,7 +1374,9 @@
     label.top(TEX(p_),unitp*(valeur[n],0));
     fi;
     if p_<>"":
+    drawoptions(withcolor CouleurCroix);
     pointe(unitp*(valeur[n],0));
+    drawoptions();
     fi;
     endfor;
     fi;
@@ -1358,7 +1388,9 @@
     if substring(1,2) of p_="*":
     ACoord:=scantokens(substring(0,1) of p_);
     if ACoord=4:
+    drawoptions(withcolor CouleurCroix);
     pointe(unitp*(valeur[n],0));
+    drawoptions();
     elseif ACoord=3:
     if Decale:
     drawarrow (unitp*valeur[n],-7mm if (n mod 2)=0:-5mm fi)--(unitp*valeur[n],-3mm);
@@ -1379,7 +1411,9 @@
     fi;
     fi;
     labeloffset:=Labeloffset;
+    drawoptions(withcolor CouleurCroix);
     pointe(unitp*(valeur[n],0));
+    drawoptions();
     elseif ACoord=2:
     if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
     label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurOrigine*pasx)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
@@ -1386,10 +1420,14 @@
     else:
     label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
     fi;
+    drawoptions(withcolor CouleurCroix);
     pointe(unitp*(valeur[n],0));
+    drawoptions();
     elseif ACoord=1:
     label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    drawoptions(withcolor CouleurCroix);
     pointe(unitp*(valeur[n],0));
+    drawoptions();
     fi;
     else:
     if AffichageCoord=4:
@@ -1415,7 +1453,9 @@
     fi;
     fi;
     labeloffset:=Labeloffset;
+    drawoptions(withcolor CouleurCroix);
     pointe(unitp*(valeur[n],0));
+    drawoptions();
     fi;
     elseif AffichageCoord=2:
     if p_<>"":
@@ -1424,12 +1464,16 @@
     else:
     label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
     fi;
-    pointe(unitp*(valeur[n],0));
+        drawoptions(withcolor CouleurCroix);
+        pointe(unitp*(valeur[n],0));
+        drawoptions();
     fi;
     elseif AffichageCoord=1:
     if p_<>"":
     label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
-    pointe(unitp*(valeur[n],0));
+        drawoptions(withcolor CouleurCroix);
+        pointe(unitp*(valeur[n],0));
+        drawoptions();
     fi;
     fi;
     fi;
@@ -1599,6 +1643,7 @@
   \ifluatex
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
     maxx:=0;
     minx:=4000;
     unitex:=\useKV[ClesReperage]{Unitex}*cm;
@@ -1973,6 +2018,7 @@
   \ifluatex
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
     maxx:=0;
     minx:=4000;
     unitex:=\useKV[ClesReperage]{Unitex}*cm;
@@ -2159,6 +2205,11 @@
   \ifluatex
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
+    if defaultcolormodel=7:
+    cmykcolor white;
+    white=(0,0,0,1);
+    fi;
     unitex:=\useKV[ClesReperage]{Unitex}*cm;
     pasx:=10;
     unitp:=unitex/pasx;

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Tableur
 %%%
-\setKVdefault[Tableur]{Colonnes=4,Largeur=30pt,LargeurUn=30pt,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false}%
+\setKVdefault[Tableur]{Colonnes=4,Largeur=30pt,LargeurUn=30pt,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false,DebutColonnes=0,DebutLignes=0}%
 %Idee de P. Nuns
 \defKV[Tableur]{Couleur=\setKV[Tableur]{Selection}}%
 %
@@ -9,7 +9,8 @@
 %Bas\'e sur un code de Christian T\'ell\'ech\'ea.
 \newcount\cntlin%
 \newcount\cntcol%
-
+\newcount\Affichecntcol%
+\newcount\Affichecntlin%
 \makeatletter%
 \newtoks\t at b%
 \long\def\ifremain at lines#1\\#2\@nil{%
@@ -28,13 +29,21 @@
 \newlength\PfCTableurLargeurUn%
 \newlength\PfCTableurLargeur%
 
-%\RequirePackage{printlen}
-
 \newenvironment{Tableur}[1][]{%
   \useKVdefault[Tableur]%
   \setKV[Tableur]{#1}%
   \setlength{\PfCTableurLargeurUn}{\fpeval{\useKV[Tableur]{LargeurUn}}pt}%
   \setlength{\PfCTableurLargeur}{\fpeval{\useKV[Tableur]{Largeur}}pt}%
+  \ifnum\useKV[Tableur]{DebutColonnes}=0\relax
+    \Affichecntcol\z@%
+  \else
+    \Affichecntcol=\number\numexpr\useKV[Tableur]{DebutColonnes}-1%
+  \fi
+  \ifnum\useKV[Tableur]{DebutLignes}=0\relax
+    \Affichecntlin\z@%
+  \else
+    \Affichecntlin=\number\numexpr\useKV[Tableur]{DebutLignes}-1%
+  \fi
   \ttfamily%
   \newcolumntype{A}{>{\centering\arraybackslash}m{\PfCTableurLargeurUn}}%
   \newcolumntype{B}{>{\centering\arraybackslash}m{\PfCTableurLargeur}}%
@@ -50,12 +59,13 @@
   \t at b{%
     \begin{NiceTabular}{%
         >{%
-          \global\cntcol\z@\global\advance\cntlin\@ne%
+          \global\cntcol\z@
+          \global\advance\cntlin\@ne%
           \centering\arraybackslash%
           \ifnum\cntlin>\@ne%
           \ifboolKV[Tableur]{Selection}{%
-            \xintifboolexpr{\cntlin>\useKV[Tableur]{Ligne} && \cntlin<\fpeval{\useKV[Tableur]{Ligne}+\useKV[Tableur]{PasL}+1}}{\textcolor{white}{\number\numexpr\cntlin-1\relax}}{\number\numexpr\cntlin-1\relax}%
-          }{\number\numexpr\cntlin-1\relax}\fi}%
+            \xintifboolexpr{\cntlin>\useKV[Tableur]{Ligne} && \cntlin<\fpeval{\useKV[Tableur]{Ligne}+\useKV[Tableur]{PasL}+1}}{\textcolor{white}{\fpeval{\cntlin+\Affichecntlin-1}}}{\fpeval{\cntlin+\Affichecntlin-1}}%
+          }{\fpeval{\cntlin+\Affichecntlin-1}}\fi}%
         wc{20pt}A*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{B}}[hvlines,color-inside]%
       \CodeBefore
       % on colorie en gris toute la première ligne
@@ -80,23 +90,24 @@
       }%
       \Body
     %
-  }%
+    }%
   \loop%
   \ifnum\cntcol<\useKV[Tableur]{Colonnes}%
-  \advance\cntcol\@ne%
+    \advance\cntcol\@ne%
+    \advance\Affichecntcol\@ne%
   \addtot at b{&}%
   % modif by Pascal Nuns
   \ifboolKV[Tableur]{Selection}{%
     \ifnum\cntcol>\fpeval{\useKV[Tableur]{Colonne}-1}%
     \ifnum\cntcol<\fpeval{\useKV[Tableur]{Colonne}+\useKV[Tableur]{PasC}}%
-    \edftot at b{{\noexpand\textcolor{white}{\noexpand\bfseries\@Alph{\the\cntcol}}}}%
+    \edftot at b{{\noexpand\textcolor{white}{\noexpand\bfseries\@Alph{\the\Affichecntcol}}}}%
     \else%
-    \edftot at b{\@Alph{\the\cntcol}}%
+    \edftot at b{\@Alph{\the\Affichecntcol}}%
     \fi%
     \else%
-    \edftot at b{\@Alph{\the\cntcol}}%
+    \edftot at b{\@Alph{\the\Affichecntcol}}%
     \fi%
-  }{\edftot at b{\@Alph{\the\cntcol}}}%
+  }{\edftot at b{\@Alph{\the\Affichecntcol}}}%
   % fin de modif
   \repeat%
   \addtot at b{\\&}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 %%%
 % Equations
 %%%
-\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Decimal=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false}
+\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,ModeleBarre=false,Decimal=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false}
 
 \newcommand\rightcomment[4]{%
   \begin{tikzpicture}[remember picture,overlay]
@@ -148,7 +148,8 @@
 \input{PfCEquationComposition2}%
 \input{PfCEquationPose1}%
 \input{PfCEquationSymbole1}%
-\input{PfCEquationLaurent1}
+\input{PfCEquationLaurent1}%
+\input{PfCEquationModeleBarre}%
 
 \newcommand\ResolEquation[5][]{%
   \useKVdefault[ClesEquation]%
@@ -166,20 +167,24 @@
       \ifboolKV[ClesEquation]{Verification}{%
         \Verification[#1]{#2}{#3}{#4}{#5}%
       }{%
-        \ifboolKV[ClesEquation]{Symbole}{%
-          \ResolEquationSymbole[#1]{#2}{#3}{#4}{#5}%
+        \ifboolKV[ClesEquation]{ModeleBarre}{%
+          \ResolEquationMBarre[#1]{#2}{#3}{#4}{#5}%
         }{%
-          \ifboolKV[ClesEquation]{Laurent}{%
-            \ResolEquationLaurent[#1]{#2}{#3}{#4}{#5}%
+          \ifboolKV[ClesEquation]{Symbole}{%
+            \ResolEquationSymbole[#1]{#2}{#3}{#4}{#5}%
           }{%
-            \ifboolKV[ClesEquation]{Terme}{%
-              \ResolEquationTerme[#1]{#2}{#3}{#4}{#5}%
-            }{\ifboolKV[ClesEquation]{Composition}{%
-                \ResolEquationComposition[#1]{#2}{#3}{#4}{#5}%
-              }{\ifboolKV[ClesEquation]{Pose}{%
-                  \ResolEquationL[#1]{#2}{#3}{#4}{#5}%
-                }{%
-                  \ResolEquationSoustraction[#1]{#2}{#3}{#4}{#5}%
+            \ifboolKV[ClesEquation]{Laurent}{%
+              \ResolEquationLaurent[#1]{#2}{#3}{#4}{#5}%
+            }{%
+              \ifboolKV[ClesEquation]{Terme}{%
+                \ResolEquationTerme[#1]{#2}{#3}{#4}{#5}%
+              }{\ifboolKV[ClesEquation]{Composition}{%
+                  \ResolEquationComposition[#1]{#2}{#3}{#4}{#5}%
+                }{\ifboolKV[ClesEquation]{Pose}{%
+                    \ResolEquationL[#1]{#2}{#3}{#4}{#5}%
+                  }{%
+                    \ResolEquationSoustraction[#1]{#2}{#3}{#4}{#5}%
+                  }%
                 }%
               }%
             }%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -11,7 +11,7 @@
 \def\barre{\vrule height2.1ex depth.9ex width0pt}%
 \def\demibarre{\vrule height1.4ex depth.6ex width0pt}%
 
-\setKVdefault[Scratch]{Impression=false,Numerotation=false,Echelle=1,Naturel=false}%
+\setKVdefault[Scratch]{ModeleCouleur=5,Impression=false,Numerotation=false,Echelle=1,Naturel=false}%
 
 \ifluatex
 \NewDocumentEnvironment{Scratch}{o +b}{%
@@ -19,17 +19,25 @@
   \setKV[Scratch]{#1}%
   \mplibforcehmode%
   \ifboolKV[Scratch]{Naturel}{}{\myfontScratch}%
-  \begin{mplibcode}%
-    boolean Naturel;
-    Naturel=\useKV[Scratch]{Naturel};
-    if Naturel: input PfCPseudo; print:=true; else: input PfCScratch; print:=\useKV[Scratch]{Impression}; fi;
-    NumeroteLignes:=\useKV[Scratch]{Numerotation};%
-    #2%
-    picture recap;%
-    recap:=currentpicture scaled \useKV[Scratch]{Echelle};%
-    currentpicture:=nullpicture;%
-    draw recap;%
-  \end{mplibcode}%
+    \begin{mplibcode}%
+      defaultcolormodel:=\useKV[Scratch]{ModeleCouleur};
+      boolean Naturel;
+      Naturel=\useKV[Scratch]{Naturel};
+      if Naturel: input PfCPseudo; print:=true; else: input PfCScratch; print:=\useKV[Scratch]{Impression}; fi;
+      NumeroteLignes:=\useKV[Scratch]{Numerotation};%
+      if defaultcolormodel=7:
+      cmykcolor white,White,CoulLignes;
+      coefprint:=1-coefprint;
+      White=(0,0,0,1);
+      white=(0,0,0,0);
+      CoulLignes=(0,0,0,1);
+      fi;
+      #2%
+      picture recap;%
+      recap:=currentpicture scaled \useKV[Scratch]{Echelle};%
+      currentpicture:=nullpicture;%
+      draw recap;%
+    \end{mplibcode}%
   }{}
 \else%
 \NewDocumentEnvironment{Scratch}{o +b}{%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -316,4 +316,17 @@
       \tofrac{#1/#2}
     \fi
   }%
+}%
+
+\NewDocumentCommand\LesDiviseursCommuns{mm}{%
+  \xdef\PfCListeDivComAvant{1}%
+  \xintFor* ##2 in {\xintSeq{2}{#1}}\do{%
+    \modulo{#1}{##2}\relax
+    \ifnum\remainder=0\relax%
+      \modulo{#2}{##2}\relax
+      \ifnum\remainder=0\relax%
+        \xdef\PfCListeDivComAvant{\PfCListeDivComAvant,##2}%
+      \fi%
+    \fi%
+  }%
 }%
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -844,6 +844,74 @@
   \fi
 }
 
+%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand\MPSolideDemiSphere[3]{%
+  \ifluatex
+    \mplibnumbersystem{double}
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean NommeSommets,Code,Sections,Axes,RemplisSection;
+    NommeSommets=\useKV[ClesSolides]{Sommets};
+    Code=\useKV[ClesSolides]{Code};
+    Axes:=\useKV[ClesSolides]{Axes};
+    %Initialisation
+    PfCRho=\useKV[ClesSolides]{Rho};
+    PfCPhi=0;%\useKV[ClesSolides]{Phi};
+    PfCTheta=10;%\useKV[ClesSolides]{Theta};
+    PfCDistance=\useKV[ClesSolides]{Distance};
+    anglerotationx=\useKV[ClesSolides]{Anglex};
+    rayonsphere=\useKV[ClesSolides]{RayonSphere};
+    
+    color PfCOutColor;
+    PfCOutColor=\useKV[ClesSolides]{Couleur};
+    input PfCSolid;
+
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance);
+    typetrace:="3D";
+    typerepre:="persp";
+    eclairage:=false;
+    nb:=24;%36
+    subh:=36;%
+    incolor:=white;
+    outcolor:=white;%PfCOutColor;
+    % Ferme1:=false;
+    creux:=true;
+    angx:=anglerotationx;
+    Objetdemispherebasse1("R="&decimal(rayonsphere));
+    % traits:=false;
+    AffichageObjet1;
+    color Sommet[],SommetN,SommetS,SommetB;
+    Sommet1=(0,0,0);
+    Sommet2=(0,rayonsphere,0);
+    Sommet3=(-rayonsphere,0,0);
+    Sommet4=(0,0,rayonsphere);
+    SommetN=Sommet4;
+    SommetS=(0,0,-rayonsphere);
+    SommetB=(rayonsphere,0,0);
+    Sommet2:=RotXYZ(Sommet2);
+    Sommet3:=RotXYZ(Sommet3);
+    Sommet4:=RotXYZ(Sommet4);
+    SommetN:=RotXYZ(SommetN);
+    SommetS:=RotXYZ(SommetS);
+    SommetB:=RotXYZ(SommetB);
+
+    fill Cercles((0,0,0),(0,1,0),(0,0,0),(0,1,0),(-1,0,0)) withcolor white;
+    trace Cercles((0,0,0),(0,1,0),(0,0,0),(0,1,0),(-1,0,0));
+
+    DefinirSommets(#1);
+
+    if Code:
+    \useKV[ClesSolides]{Traces};
+    fi;
+
+  \end{mplibcode}
+  \mplibnumbersystem{scaled}
+  \fi
+}
+%%%
+
+
 \def\UpdatetoksSolide#1\nil{\addtotok\toksolidelistesommets{"#1",}}
 \newtoks\toksolidelistesommets%
 \newtoks\toksolidelistepointssections%
@@ -876,6 +944,9 @@
     {sphere}{%
       \MPSolideSphere{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}%
     }%
+    {demisphere}{%
+      \MPSolideDemiSphere{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}%
+    }%
     {boule}{%
       \MPSolideSphere{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}%
     }%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -26,7 +26,9 @@
 %Pour les barres horizontales
 Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0,%Grille est dispo
 % Pour les histogrammes
-Histogramme=false,UniteAire=1,MemeAmpli,DepartHisto=1%
+Histogramme=false,UniteAire=1,MemeAmpli,DepartHisto=1,%
+% Pour la quadri...
+ModeleCouleur=5%
 }%
 % compl\'ements
 %\defKV[ClesStat]{ListeHachures=\setKV[ClesStat]{Hachures}}%
@@ -305,6 +307,7 @@
   \ifluatex%
   \mplibforcehmode%
   \begin{mplibcode}%
+    defaultcolormodel := \useKV[ClesStat]{ModeleCouleur};
     \NewMPDiagBarreHorCode%
     vardef TraceDiag=
     if Grille:
@@ -536,6 +539,8 @@
   \ifluatex
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesStat]{ModeleCouleur};
+    
     \MPStatNewCode
       %
     vardef Test(expr nb)=
@@ -935,6 +940,8 @@
   \ifluatex
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesStat]{ModeleCouleur};
+    
     \NewMPStatCirculaireCodeQ
 %    DebutAngle=\useKV[ClesStat]{DebutAngle};
     if Inverse=false:
@@ -1358,6 +1365,8 @@
 %    \mplibnumbersystem{double}
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesStat]{ModeleCouleur};
+    
     maxx:=-infinity;
     minx:=infinity;
     maxy:=-infinity;
@@ -1815,13 +1824,13 @@
               \[
                 \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
                   +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
-                }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
+                }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}.%
               \]}{%
               \[
                 \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{3}}\do{%
                   +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
                   +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
-                }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
+                }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}.%
               \]%
             }%
             }{}%
@@ -2001,7 +2010,7 @@
             \[
               \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
                 +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
-              }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+              }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}.
             \]
           }{%
             \[
@@ -2009,7 +2018,7 @@
                 +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
               }+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
                 +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
-              }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+              }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}.
             \]
           }%
           }{}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -8,7 +8,7 @@
   \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,CouleursNum=false,CouleursDen=false}
+\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,ModeleCouleur=5}
 \defKV[ClesThales]{CouleurNum=\setKV[ClesThales]{CouleursNum}}
 \defKV[ClesThales]{CouleurDen=\setKV[ClesThales]{CouleursDen}}
 
@@ -26,6 +26,7 @@
 %  \mplibcodeinherit{enable}
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesThales]{ModeleCouleur};
     u:=\useKV[ClesThales]{Echelle};
     boolean CouleursNum,CouleursDen;
     CouleursNum=\useKV[ClesThales]{CouleursNum};
@@ -177,6 +178,7 @@
   \mplibcodeinherit{enable}
   \mplibforcehmode
   \begin{mplibcode}
+        defaultcolormodel := \useKV[ClesThales]{ModeleCouleur};
     u:=\useKV[ClesThales]{Echelle};
     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
@@ -261,6 +263,7 @@
   \mplibforcehmode
   \mplibcodeinherit{enable}
   \begin{mplibcode}
+        defaultcolormodel := \useKV[ClesThales]{ModeleCouleur};
     u:=\useKV[ClesThales]{Echelle};
     boolean CouleursNum,CouleursDen;
     CouleursNum=\useKV[ClesThales]{CouleursNum};
@@ -434,6 +437,7 @@
   \mplibforcehmode
   \mplibcodeinherit{enable}
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesThales]{ModeleCouleur};
     u:=\useKV[ClesThales]{Echelle};
     pair A,B,C,M,N,O;%
     O=(2.5u,2.5u);

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -6,6 +6,7 @@
 %  \mplibcodeinherit{enable}
   \mplibforcehmode
   \begin{mplibcode}
+    defaultcolormodel := \useKV[ClesTrigo]{ModeleCouleur};
     u:=\useKV[ClesTrigo]{Echelle};
     pair A,B,C,O,I,D,E,F;%
     % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
@@ -210,7 +211,8 @@
   \ifluatex
   \mplibcodeinherit{enable}
    \mplibforcehmode
-  \begin{mplibcode}
+   \begin{mplibcode}
+     defaultcolormodel := \useKV[ClesTrigo]{ModeleCouleur};
     u:=\useKV[ClesTrigo]{Echelle};
   pair A,B,C,O,I,D,E,F;%
   % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
@@ -347,7 +349,7 @@
 \fi
 }
 
-\setKVdefault[ClesTrigo]{Angle=0,Propor=false,Figure=false,FigureSeule=false,ValeurExacte=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false,Perso=false,Echelle=1cm}%
+\setKVdefault[ClesTrigo]{Angle=0,Propor=false,Figure=false,FigureSeule=false,ValeurExacte=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false,Perso=false,Echelle=1cm,ModeleCouleur=5}%
 
 \newcommand\RedactionTrigo{}%
 

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrio.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrio.tex	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrio.tex	2024-01-07 21:27:13 UTC (rev 69336)
@@ -1,7 +1,7 @@
 \newlength\PfCTrioHauteur%
 \newcounter{PfCTrioLettre}%
 
-\setKVdefault[Trio]{Largeur=15pt,Graines=false,Repere=false,Cibles=false,Ligne=1,Colonne=1,Vide=false,VideRepere=false}%
+\setKVdefault[Trio]{Largeur=15pt,Graines=false,Repere=false,Cibles=false,Ligne=1,Colonne=1,Vide=false,VideRepere=false,Relatifs=false,Ecole=false}%
 \defKV[Trio]{Graine=\setKV[Trio]{Graines}}%
 \defKV[Trio]{Cible=\setKV[Trio]{Cibles}}%
 
@@ -22,10 +22,19 @@
   \useKVdefault[Trio]%
   \setKV[Trio]{#1}%
   \ifboolKV[Trio]{Graines}{\PfCGraineAlea{\useKV[Trio]{Graine}}}{}%
-  \ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{8}}{\xdef\PfCTrioNbCases{7}}%
+  \ifboolKV[Trio]{Ecole}{\xdef\PfCTrioMaxA{5}\xdef\PfCTrioMaxB{3}}{\xdef\PfCTrioMaxA{7}\xdef\PfCTrioMaxB{5}}
+  \ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{\fpeval{\PfCTrioMaxA+1}}}{\xdef\PfCTrioNbCases{\PfCTrioMaxA}}%      
   % On définit la liste de nombres
-  \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9}%
-  \MelangeListe{\PfCTrioFoo}{49}%
+  \ifboolKV[Trio]{Relatifs}{%
+    \xdef\PfCTrioFoo{-4,-4,-4,-4,-4,-3,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4}%
+  }{%
+    \ifboolKV[Trio]{Ecole}{%
+      \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5}%
+    }{%
+      \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9}%
+    }%
+  }%
+  \ifboolKV[Trio]{Ecole}{\MelangeListe{\PfCTrioFoo}{25}}{\MelangeListe{\PfCTrioFoo}{49}}%
   \setsepchar{,}\ignoreemptyitems%
   \readlist*\PfCTrioMelange{\faa}%
   \reademptyitems%
@@ -39,11 +48,11 @@
         \xdef\PfCTrioAjout{0}
       }%
       % Calculs des horizontaux
-      \xintFor* ##2 in{\xintSeq{1}{7}}\do{%
-        \xintFor* ##1 in{\xintSeq{1}{5}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+1}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+2}]}%
+      \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
+        \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -60,11 +69,11 @@
           \xintBreakFor}{}%
       }%
       % Calculs des verticaux
-      \xintFor* ##2 in{\xintSeq{1}{7}}\do{%
-        \xintFor* ##1 in{\xintSeq{1}{5}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1)+##2}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1+1)+##2}]}%
+      \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
+        \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -81,11 +90,11 @@
           \xintBreakFor}{}%
       }%
       % Calculs des diag positives (descendantes)
-      \xintFor* ##2 in{\xintSeq{1}{5}}\do{%
-        \xintFor* ##1 in{\xintSeq{1}{5}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2)+##1+1}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2+1)+##1+2}]}%
+      \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+        \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -106,11 +115,11 @@
           \xintBreakFor}{}%
       }%
       % Calculs des diagonale négatives (montantes)
-      \xintFor* ##2 in{\xintSeq{1}{5}}\do{%
-        \xintFor* ##1 in{\xintSeq{2}{6}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1)+##2}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1-1)+##2+1}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1-2)+##2+2}]}%
+      \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+        \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCTrioMaxB+1}}}\do{%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+1}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-2)+##2+2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -134,15 +143,15 @@
     }{}%
     \Body
     \ifboolKV[Trio]{Repere}{%
-      \rule{0pt}{\PfCTrioHauteur}\Block[fill=gray!15]{}{}\xintFor* ##1in{\xintSeq{1}{7}}\do{%
+      \rule{0pt}{\PfCTrioHauteur}\Block[fill=gray!15]{}{}\xintFor* ##1in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
         &\Block[fill=gray!15]{}{\stepcounter{PfCTrioLettre}\Alph{PfCTrioLettre}}%
         }\\
     }{}%
-    \xintFor* ##1 in{\xintSeq{1}{7}}\do{%
+    \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
       \rule{0pt}{\PfCTrioHauteur}%
       \ifboolKV[Trio]{Repere}{\Block[fill=gray!15]{}{##1}}{}%
-      \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{1}{7}}\do{%
-        \xintifForFirst{}{&}\Block{}{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}%
+      \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
+        \xintifForFirst{}{&}\Block{}{\num{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}}%
       }\\
     }%
   \end{NiceTabular}%
@@ -165,9 +174,9 @@
       % Calculs des horizontaux
       \xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}+2}}}\do{%
         \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}}}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+1}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+2}]}%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -186,9 +195,9 @@
       % Calculs des verticaux
       \xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}+2}}}\do{%
         \xintFor* ##1 in{\xintSeq{\useKV[Trio]{Ligne}}{\useKV[Trio]{Ligne}}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1)+##2}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1+1)+##2}]}%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -207,9 +216,9 @@
       % Calculs des diag positives (descendantes)
       \xintFor* ##2 in{\xintSeq{\useKV[Trio]{Ligne}}{\useKV[Trio]{Ligne}}}\do{%
         \xintFor* ##1 in{\xintSeq{\useKV[Trio]{Colonne}}{\useKV[Trio]{Colonne}}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2)+##1+1}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2+1)+##1+2}]}%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -232,9 +241,9 @@
       % Calculs des diagonale négatives (montantes)
       \xintFor* ##2 in{\xintSeq{\useKV[Trio]{Colonne}}{\useKV[Trio]{Colonne}}}\do{%
         \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}}}}\do{%
-          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1+1)+##2}]}%
-          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1)+##2+1}]}%
-          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1-1)+##2+2}]}%
+          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
+          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2+1}]}%
+          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+2}]}%
           \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
             ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
@@ -266,7 +275,7 @@
       \rule{0pt}{\PfCTrioHauteur}%
       \ifboolKV[Trio]{Repere}{\Block[fill=gray!15]{}{\ifboolKV[Trio]{VideRepere}{}{##1}}}{}%
       \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}+2}}}\do{%
-        \xintifForFirst{}{&}\Block{}{\ifboolKV[Trio]{Vide}{}{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}}%
+        \xintifForFirst{}{&}\Block{}{\ifboolKV[Trio]{Vide}{}{\num{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}}}%
       }\\
     }%
   \end{NiceTabular}%

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2024-01-07 21:26:42 UTC (rev 69335)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2024-01-07 21:27:13 UTC (rev 69336)
@@ -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{2023/11/14}%
+\def\filedate{2023/12/01}%
 \let\PfCfiledate\filedate%
-\def\fileversion{0.99-z-w}%
+\def\fileversion{0.99-z-y}%
 \let\PfCfileversion\fileversion%
 \ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
 
@@ -68,16 +68,10 @@
 \else%
 \if at shellescape%
 \RequirePackage[shellescape,latex]{gmp}%inclusion de figures metapost "à la volée"%
-\gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}}%
-\usempxclass{article}%
-\usempxpackage{ProfCollege}%
-\usempxpackage[utf8]{inputenc}%
-\usempxpackage[T1]{fontenc}%
-\usempxpackage{fourier}%
-\usempxpackage[french]{babel}%
-\usempxpackage{pifont}%
 \else%
+%
 \RequirePackage[latex]{gmp}%inclusion de figures metapost "à la volée"%
+\fi%
 \gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}}%
 \usempxclass{article}%
 \usempxpackage{ProfCollege}%
@@ -87,7 +81,6 @@
 \usempxpackage[french]{babel}%
 \usempxpackage{pifont}%
 \fi%
-\fi%
 
 \RequirePackage{xintexpr}%
 \RequirePackage{listofitems}%
@@ -176,6 +169,10 @@
   }%
 }%
 
+\NewDocumentCommand\NumS{m}{%
+  \xintifboolexpr{#1==0}{}{\xintifboolexpr{#1>0}{+\num{#1}}{\num{#1}}}
+}%
+
 \newcounter{Marque}
 
 \NewDocumentCommand\AffichageTab{O{x}mmm}{%
@@ -225,7 +222,7 @@
   \fi%
 }%
 %encadrer avec des "sommets arrondis"
-\newsavebox{\logobox}%
+%\newsavebox{\logobox}%
 
 \newcommand\Logo[2]{%
 \setbox1=\hbox{\includegraphics[scale=#2]{#1}}%
@@ -248,6 +245,59 @@
 \end{tikzpicture}%
 }%
 
+\makeatletter
+\def\Suspensionfill{%
+\leavevmode
+\cleaders \hb at xt@\LongBoitePoint{\ldotp}\hfill
+\kern\z@}
+\makeatother
+
+\newlength{\LongBoitePoint}
+
+\NewDocumentCommand\PointsSuspensionold{sm}{%
+  \setbox2=\hbox{\ldotp}%
+  \setlength{\LongBoitePoint}{\wd2}%
+  \IfBooleanTF{#1}{%
+    \Suspensionfill%
+  }{%
+    \setbox1=\hbox{#2}%
+    \StrLen{#2}[\LongueurPoints]%
+    \ifmmode%
+      \mathinner{%
+        \xintFor* ##1 in {\xintSeq{1}{\LongueurPoints}}\do{%
+          \ldotp%
+        }%
+      }%
+    \else%
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{round(\wd1/\wd2)}}}\do{%
+        \ldotp%
+      }%
+    \fi%
+  }%
+}%
+
+\NewDocumentCommand\PointsSuspension{m}{%
+  \setbox2=\hbox{\ldotp}%
+  \setlength{\LongBoitePoint}{\wd2}%
+  \ifx\bla#1\bla%
+    \Suspensionfill%
+  \else%
+    \setbox1=\hbox{#1}%
+    \StrLen{#1}[\LongueurPoints]%
+    \ifmmode%
+      \mathinner{%
+        \xintFor* ##1 in {\xintSeq{1}{\LongueurPoints}}\do{%
+          \ldotp%
+        }%
+      }%
+    \else%
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{round(\wd1/\wd2)}}}\do{%
+        \ldotp%
+      }%
+    \fi%
+  \fi%
+}%
+
 \makeatletter%
 \NewDocumentCommand\Dotfill{}{%
 \leavevmode%
@@ -263,8 +313,8 @@
 }%
 
 \NewDocumentCommand\Lignespointilles{m}{%
-  \xintifboolexpr{#1>1}{%
-    \xintFor* ##1 in {\xintSeq {1}{#1}}\do{%
+  \xintifboolexpr{\fpeval{#1}>1}{%
+    \xintFor* ##1 in {\xintSeq {1}{\fpeval{#1}}}\do{%
       \pointilles\par%
     }%
   }{}%
@@ -660,6 +710,7 @@
 \readlist*\ListeMateriaux{aluminium/'/2.7,chêne/e~/0.69,bouleau/e~/0.65,sapin/e~/0.45,polystyrène/e~/1.04,porcelaine/la/2.5,acier/'/7.85,cuivre/e~/8.92,fer/e~/7.86,or/'/19.3,argent/'/10.5,bronze/e~/8.4,plomb/e~/11.35,marbre/e~/2.75,laiton/e~/7.3,titane/e~/4.5,PVC/e~/1.38}
 \setsepchar{,}
 
+\input{PfCConversion}
 \input{PfCCritere}
 \input{PfCLego}
 \input{PfCJeton}



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