texlive[59217] Master: profcollege (15may21)

commits+karl at tug.org commits+karl at tug.org
Sat May 15 22:46:19 CEST 2021


Revision: 59217
          http://tug.org/svn/texlive?view=revision&revision=59217
Author:   karl
Date:     2021-05-15 22:46:18 +0200 (Sat, 15 May 2021)
Log Message:
-----------
profcollege (15may21)

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/PfCGeometrie.mp
    trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
    trunk/Master/tlpkg/libexec/ctan2tds

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/PfCGeometrie.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp	2021-05-15 20:42:21 UTC (rev 59216)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp	2021-05-15 20:46:18 UTC (rev 59217)
@@ -607,11 +607,19 @@
   aaa[j+1]:=aaa[1];
   save $;
   path $;
-  $=aaa1--
-    for k=2 upto j:
-    aaa[k]--
-  endfor
-  cycle;
+  if typetrace="mainlevee":
+    $=segment(aaa[1],aaa[2])--
+      for k=2 upto (j-1):
+      segment(aaa[k],aaa[k+1])--
+    endfor
+    segment(aaa[j],aaa[1])--cycle;
+  else:
+    $=aaa1--
+      for k=2 upto j:
+      aaa[k]--
+    endfor
+    cycle;
+  fi;
   $
 enddef;
 

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2021-05-15 20:42:21 UTC (rev 59216)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2021-05-15 20:46:18 UTC (rev 59217)
@@ -3,7 +3,7 @@
 % or later, see http://www.latex-project.org/lppl.txtf
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfCollege}[2021/04/09 v0.99-a Aide pour l'utilisation de LaTeX au collège]
+\ProvidesPackage{ProfCollege}[2021/05/15 v0.99-b Aide pour l'utilisation de LaTeX au collège]
 
 \RequirePackage{verbatim}
 
@@ -740,7 +740,7 @@
   \end{mplibcode}
   \else
   \begin{mpost}[mpsettings={input PfCCalculatrice;}]
-    LCD(#1)(#2);    
+    LCD(#1)(#2)(#3);    
   \end{mpost}
   \fi
 }
@@ -1399,7 +1399,7 @@
 %%%
 \setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1}
 
-\def\MPFractionTriangle#1#2#3#4#5{
+\def\MPFractionTriangle#1#2#3#4#5{%
   % #1 longueur du c\^ot\'e
   % #2 partage sur le c\^ot\'e
   % #3 num
@@ -1437,20 +1437,32 @@
      for k=nbparts downto 1:
      Ligne(k);
      endfor;
+     
+     m:=#3 div #4;
 
-     for k=1 upto #3:
-     fill M[k] withcolor #5;
+     drawoptions(shifted(m*(#1+1cm,0)));
+     for l=1 upto (#3 mod #4):
+     fill M[l] withcolor #5;
+     for k=1 upto nbparts:
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
      endfor;
+     endfor;
      
+     for l=0 upto (m-1):
+     drawoptions(shifted(l*(#1+1cm,0)));
+     remplis polygone(A,B,C) withcolor #5;
      for k=1 upto nbparts:
      trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
      trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
      trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
      endfor;
+     endfor;
    \end{mplibcode}
      \else
      \begin{mpost}
-       nbtriangle=0;
+            nbtriangle=0;
 
      vardef Ligne(expr longueur)=
      for k=0 upto 2*(longueur-1):
@@ -1479,16 +1491,28 @@
      for k=nbparts downto 1:
      Ligne(k);
      endfor;
+     
+     m:=#3 div #4;
 
-     for k=1 upto #3:
-     fill M[k] withcolor #5;
+     drawoptions(shifted(m*(#1+1cm,0)));
+     for l=1 upto (#3 mod #4):
+     fill M[l] withcolor #5;
+     for k=1 upto nbparts:
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
      endfor;
+     endfor;
      
+     for l=0 upto (m-1):
+     drawoptions(shifted(l*(#1+1cm,0)));
+     remplis polygone(A,B,C) withcolor #5;
      for k=1 upto nbparts:
      trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
      trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
      trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
      endfor;
+     endfor;
      \end{mpost}
    \fi
  }
@@ -1503,7 +1527,7 @@
   \ifluatex
    \mplibforcehmode
    \begin{mplibcode}
-     nbtriangle=0;
+          nbtriangle=0;
 
      vardef Ligne(expr longueur)=
      for k=0 upto 2*(longueur-1):
@@ -1532,19 +1556,30 @@
      for k=nbparts downto 1:
      Ligne(k);
      endfor;
+     
+     m:=#3 div #4;
 
-     diversite=floor(uniformdeviate(#2**2-#3-1));
-     
-     for k=(1+diversite) upto (#3+diversite):
+     for l=1 upto (#3 mod #4):
      drawoptions(withpen pencircle scaled #6);
-     trace hachurage(M[k],90,0.2,0) withcolor #5;
+     trace hachurage(M[l] shifted(m*(#1+1cm,0)),90,0.2,0) withcolor #5;%M[l] withcolor #5;
+     for k=1 upto nbparts:
+     drawoptions(withpen pencircle scaled #6);
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(#1+1cm,0));
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(#1+1cm,0));
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(#1+1cm,0));
      endfor;
-     drawoptions(withpen pencircle scaled #6);
+     endfor;
+     
+     for l=0 upto (m-1):
+     drawoptions(shifted(l*(#1+1cm,0)) withpen pencircle scaled #6);
+     trace hachurage(polygone(A,B,C),90,0.2,0) withcolor #5;%polygone(A,B,C) withcolor #5;
+          drawoptions(shifted(l*(#1+1cm,0)) withpen pencircle scaled #6);
      for k=1 upto nbparts:
      trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
      trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
      trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
      endfor;
+     endfor;
    \end{mplibcode}
      \else
      \begin{mpost}
@@ -1594,7 +1629,6 @@
      \end{mpost}
    \fi
  }
- 
 
 \def\MPFractionRegulier#1#2#3#4#5{%
   % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur
@@ -1612,19 +1646,40 @@
     for k=0 upto #4-1:
     B[k]=point(k*(#2/#4)) of cd;
     endfor;
-    remplis O--arccercle(B[0],B[#3],O)--cycle withcolor #5;
-    %fi;
+    picture fondcolore;
+    fondcolore=image(
+    remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5;
     clip currentpicture to cd;
-    draw polygone(A0 for k=1 upto #2:,A[k] endfor);
-    if #4>1:
     for k=0 upto #4-1:
     draw segment(O,B[k]) cutafter cd;
     endfor;
+    trace cd;
+    );
+    currentpicture:=nullpicture;
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
+    fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5;
+    trace cd shifted(l*(#1*2+0.5cm,0));
+    if #4>1:
+    for k=0 upto #4-1:
+    draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+    endfor;
     fi;
+    endfor;
+    fi;
+    draw fondcolore shifted(m*(#1*2+0.5cm,0));
+    draw cd shifted(m*(#1*2+0.5cm,0));
+    if #4>1:
+    for k=0 upto #4-1:
+    draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+    endfor;
+    fi;
   \end{mplibcode}
   \else
-\begin{mpost}
-    pair O,A[],B[];
+  \begin{mpost}
+        pair O,A[],B[];
     O=u*(0,0);
     path cc,cd;
     cc=cercles(O,#1);
@@ -1635,21 +1690,42 @@
     for k=0 upto #4-1:
     B[k]=point(k*(#2/#4)) of cd;
     endfor;
-    remplis O--arccercle(B[0],B[#3],O)--cycle withcolor #5;
-    %fi;
+    picture fondcolore;
+    fondcolore=image(
+    remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5;
     clip currentpicture to cd;
-    draw polygone(A0 for k=1 upto #2:,A[k] endfor);
-    if #4>1:
     for k=0 upto #4-1:
     draw segment(O,B[k]) cutafter cd;
     endfor;
+    trace cd;
+    );
+    currentpicture:=nullpicture;
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
+    fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5;
+    trace cd shifted(l*(#1*2+0.5cm,0));
+    if #4>1:
+    for k=0 upto #4-1:
+    draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+    endfor;
     fi;
+    endfor;
+    fi;
+    draw fondcolore shifted(m*(#1*2+0.5cm,0));
+    draw cd shifted(m*(#1*2+0.5cm,0));
+    if #4>1:
+    for k=0 upto #4-1:
+    draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+    endfor;
+    fi;
   \end{mpost}
   \fi
 }
 
 \def\MPFractionRegulierH#1#2#3#4#5#6{%
-  % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur
+  % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur, #6 épaisseur
   \ifluatex
    \mplibforcehmode
   \begin{mplibcode}
@@ -1664,17 +1740,43 @@
     for k=0 upto #4-1:
     B[k]=point(k*(#2/#4)) of cd;
     endfor;
-    drawoptions(withpen pencircle scaled#6);
-    draw hachurage(O--arccercle(B[0],B[#3],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
+    picture fondcolore;
+    fondcolore=image(%
+    drawoptions(withpen pencircle scaled #6);
+    trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
     clip currentpicture to cd;
-    drawoptions(withpen pencircle scaled#6);
-    draw polygone(A0 for k=1 upto #2:,A[k] endfor);
-    if #4>1:
+    drawoptions(withpen pencircle scaled #6);
     for k=0 upto #4-1:
     draw segment(O,B[k]) cutafter cd;
     endfor;
-    drawoptions();
+    trace cd;
+    );
+    currentpicture:=nullpicture;
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
+    drawoptions(withpen pencircle scaled #6);
+    trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5;
+    drawoptions(withpen pencircle scaled #6);
+    trace cd shifted(l*(#1*2+0.5cm,0));
+    if #4>1:
+    for k=0 upto #4-1:
+    drawoptions(withpen pencircle scaled #6);
+    draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+    endfor;
     fi;
+    endfor;
+    fi;
+    draw fondcolore shifted(m*(#1*2+0.5cm,0));
+    drawoptions(withpen pencircle scaled #6);
+    draw cd shifted(m*(#1*2+0.5cm,0));
+    if #4>1:
+    drawoptions(withpen pencircle scaled #6);
+    for k=0 upto #4-1:
+    draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+    endfor;
+    fi;
   \end{mplibcode}
   \else
 \begin{mpost}
@@ -1689,17 +1791,43 @@
     for k=0 upto #4-1:
     B[k]=point(k*(#2/#4)) of cd;
     endfor;
-    drawoptions(withpen pencircle scaled#6);
-    draw hachurage(O--arccercle(B[0],B[#3],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
+    picture fondcolore;
+    fondcolore=image(%
+    drawoptions(withpen pencircle scaled #6);
+    trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
     clip currentpicture to cd;
-    drawoptions(withpen pencircle scaled#6);
-    draw polygone(A0 for k=1 upto #2:,A[k] endfor);
-    if #4>1:
+    drawoptions(withpen pencircle scaled #6);
     for k=0 upto #4-1:
     draw segment(O,B[k]) cutafter cd;
     endfor;
-    drawoptions();
+    trace cd;
+    );
+    currentpicture:=nullpicture;
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
+    drawoptions(withpen pencircle scaled #6);
+    trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5;
+    drawoptions(withpen pencircle scaled #6);
+    trace cd shifted(l*(#1*2+0.5cm,0));
+    if #4>1:
+    for k=0 upto #4-1:
+    drawoptions(withpen pencircle scaled #6);
+    draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+    endfor;
     fi;
+    endfor;
+    fi;
+    draw fondcolore shifted(m*(#1*2+0.5cm,0));
+    drawoptions(withpen pencircle scaled #6);
+    draw cd shifted(m*(#1*2+0.5cm,0));
+    if #4>1:
+    drawoptions(withpen pencircle scaled #6);
+    for k=0 upto #4-1:
+    draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+    endfor;
+    fi;
   \end{mpost}
   \fi
 }
@@ -1726,15 +1854,8 @@
     S[k]=(k/#6)[B,C];
     endfor;
     fi;
-    if #6=1:
-    remplis polygone(A,M[#3],N[#3],D) withcolor #5;
-    else:
-    DDiv=#3 div parts;
-    MMod=#3 mod parts;
-    remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
-    remplis
-    polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
-    fi;
+    picture FondRectangle;
+    FondRectangle=image(%
     draw polygone(A,B,C,D);
     for k=1 upto (parts-1):
     draw segment(M[k],N[k]);
@@ -1744,10 +1865,36 @@
     draw segment(R[k],S[k]);
     endfor;
     fi;
+    );
+    picture FondRectangleColorie;
+    FondRectangleColorie=image(%
+    if #6=1:
+    remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5;
+    else:
+    DDiv=(#3 mod #4) div parts;
+    MMod=(#3 mod #4) mod parts;
+    remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
+    remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
+    fi;
+    );    
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto m-1:
+    remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5;
+    trace FondRectangle shifted(l*(#1+1cm,0));
+    endfor;
+    fi;
+    if (#3 mod #4)<>0:
+    trace FondRectangleColorie shifted(m*(#1+1cm,0));
+    else:
+    remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5;
+    fi;
+    trace FondRectangle shifted(m*(#1+1cm,0));
   \end{mplibcode}
   \else
 \begin{mpost}
-    pair A,B,C,D,M[],N[],R[],S[];
+      pair A,B,C,D,M[],N[],R[],S[];
     A=(1,1);
     B-A=(#1,0);
     C-B=(0,#2);
@@ -1764,15 +1911,8 @@
     S[k]=(k/#6)[B,C];
     endfor;
     fi;
-    if #6=1:
-    remplis polygone(A,M[#3],N[#3],D) withcolor #5;
-    else:
-    DDiv=#3 div parts;
-    MMod=#3 mod parts;
-    remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
-    remplis
-    polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
-    fi;
+    picture FondRectangle;
+    FondRectangle=image(%
     draw polygone(A,B,C,D);
     for k=1 upto (parts-1):
     draw segment(M[k],N[k]);
@@ -1782,6 +1922,32 @@
     draw segment(R[k],S[k]);
     endfor;
     fi;
+    );
+    picture FondRectangleColorie;
+    FondRectangleColorie=image(%
+    if #6=1:
+    remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5;
+    else:
+    DDiv=(#3 mod #4) div parts;
+    MMod=(#3 mod #4) mod parts;
+    remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
+    remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
+    fi;
+    );    
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto m-1:
+    remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5;
+    trace FondRectangle shifted(l*(#1+1cm,0));
+    endfor;
+    fi;
+    if (#3 mod #4)<>0:
+    trace FondRectangleColorie shifted(m*(#1+1cm,0));
+    else:
+    remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5;
+    fi;
+    trace FondRectangle shifted(m*(#1+1cm,0));
   \end{mpost}
   \fi
 }
@@ -1808,18 +1974,8 @@
     S[k]=(k/#6)[B,C];
     endfor;
     fi;
-    if #6=1:
-    drawoptions(withpen pencircle scaled#7);
-    draw hachurage(polygone(A,M[#3],N[#3],D),45,0.25,0) withcolor #5;
-    else:
-    DDiv=#3 div parts;
-    MMod=#3 mod parts;
-    drawoptions(withpen pencircle scaled#7);
-    draw hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5;
-    drawoptions(withpen pencircle scaled#7);
-    draw hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5;
-    fi;
-    drawoptions(withpen pencircle scaled#7);
+    picture FondRectangle;
+    FondRectangle=image(%
     draw polygone(A,B,C,D);
     for k=1 upto (parts-1):
     draw segment(M[k],N[k]);
@@ -1828,8 +1984,41 @@
     for k=1 upto (#6-1):
     draw segment(R[k],S[k]);
     endfor;
-    drawoptions();
     fi;
+    );
+    picture FondRectangleColorie;
+    FondRectangleColorie=image(%
+    if #6=1:
+    drawoptions(withpen pencircle scaled#7);
+    trace hachurage(polygone(A,M[#3 mod #4],N[#3 mod #4],D),45,0.25,0) withcolor #5;
+    else:
+    DDiv=(#3 mod #4) div parts;
+    MMod=(#3 mod #4) mod parts;
+    drawoptions(withpen pencircle scaled#7);
+    trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5;
+        drawoptions(withpen pencircle scaled#7);
+    trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5;
+    fi;
+    );    
+    m=#3 div #4;
+    if (#3 mod #4)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto m-1:
+        drawoptions(withpen pencircle scaled#7);
+        trace hachurage(polygone(A,B,C,D) shifted(l*(#1+1cm,0)),45,0.25,0) withcolor #5;
+            drawoptions(withpen pencircle scaled#7);
+    trace FondRectangle shifted(l*(#1+1cm,0));
+    endfor;
+    fi;
+    if (#3 mod #4)<>0:
+        drawoptions(withpen pencircle scaled#7);
+    trace FondRectangleColorie shifted(m*(#1+1cm,0));
+    else:
+        drawoptions(withpen pencircle scaled#7);
+    trace hachurage(polygone(A,B,C,D) shifted(m*(#1+1cm,0)),45,0.25,0) withcolor #5;
+    fi;
+        drawoptions(withpen pencircle scaled#7);
+    trace FondRectangle shifted(m*(#1+1cm,0));
   \end{mplibcode}
   \else
 \begin{mpost}
@@ -1884,14 +2073,23 @@
     A=(0,0);
     path cc;
     cc=cercles(A,#1);
-    for k=0 upto (#3-1):
+    for k=0 upto #3:
     B[k]=pointarc(cc,(360/#3)*k);
     endfor;
-    fill (A--B0--arccercle(B[0],B[#2],A)--cycle) withcolor #4;
-    draw cc;
+    m=(#2 div #3);
+    if (#2 mod #3)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
+    fill cc shifted(l*(2*#1+1cm,0)) withcolor #4;
+    endfor;
+    fi;
+    fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4;
+    for l=0 upto m:
+    draw cc shifted(l*(2*#1+1cm,0));
     for k=0 upto (#3-1):
-    draw segment(A,B[k]);
+    draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
     endfor;
+    endfor;
   \end{mplibcode}
   \else
   \begin{mpost}
@@ -1899,14 +2097,23 @@
     A=(0,0);
     path cc;
     cc=cercles(A,#1);
-    for k=0 upto (#3-1):
+    for k=0 upto #3:
     B[k]=pointarc(cc,(360/#3)*k);
     endfor;
-    fill (A--B0--arccercle(B[0],B[#2],A)--cycle) withcolor #4;
-    draw cc;
+    m=#2 div #3;
+    if (#2 mod #3)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
+    fill cc shifted(l*(2*#1+1cm,0)) withcolor #4;
+    endfor;
+    fi;
+    fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4;
+    for l=0 upto m:
+    draw cc shifted(l*(2*#1+1cm,0));
     for k=0 upto (#3-1):
-    draw segment(A,B[k]);
+    draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
     endfor;
+    endfor;
   \end{mpost}
   \fi
 }
@@ -1919,17 +2126,26 @@
     A=(0,0);
     path cc;
     cc=cercles(A,#1);
-    for k=0 upto (#3-1):
+    for k=0 upto #3:
     B[k]=pointarc(cc,(360/#3)*k);
     endfor;
+    m=#2 div #3;
+    if (#2 mod #3)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
     drawoptions(withpen pencircle scaled#5);
-    draw hachurage(A--B0--arccercle(B[0],B[#2],A)--cycle,1.5*360/#3,0.25,0) withcolor #4;
+    draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+    endfor;
+    fi;
     drawoptions(withpen pencircle scaled#5);
-    draw cc;
+    draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+    drawoptions(withpen pencircle scaled#5);
+    for l=0 upto m:
+    draw cc shifted(l*(2*#1+1cm,0));
     for k=0 upto (#3-1):
-    draw segment(A,B[k]);
+    draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
     endfor;
-    drawoptions();
+    endfor;
   \end{mplibcode}
   \else
   \begin{mpost}
@@ -1937,17 +2153,26 @@
     A=(0,0);
     path cc;
     cc=cercles(A,#1);
-    for k=0 upto (#3-1):
+    for k=0 upto #3:
     B[k]=pointarc(cc,(360/#3)*k);
     endfor;
+    m=#2 div #3;
+    if (#2 mod #3)=0:m:=m-1; fi;
+    if m>0:
+    for l=0 upto (m-1):
     drawoptions(withpen pencircle scaled#5);
-    draw hachurage(A--B0--arccercle(B[0],B[#2],A)--cycle,1.5*360/#3,0.25,0) withcolor #4;
+    draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+    endfor;
+    fi;
     drawoptions(withpen pencircle scaled#5);
-    draw cc;
+    draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+    drawoptions(withpen pencircle scaled#5);
+    for l=0 upto m:
+    draw cc shifted(l*(2*#1+1cm,0));
     for k=0 upto (#3-1):
-    draw segment(A,B[k]);
+    draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
     endfor;
-    drawoptions();
+    endfor;
   \end{mpost}
   \fi
 }
@@ -1962,32 +2187,62 @@
     for k=0 upto #3:
     B[k]=(k/#3)[A,C];
     endfor;
-    draw segment(B[0],B[#2]) withpen pencircle scaled 2 withcolor #4;
-    draw segment(A,C);
+    m=#2 div #3;
+    if m>0:
+    for l=0 upto (m-1):
+    draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+    endfor;
+    fi;
+    if (#2 mod #3)<>0:
+    draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+    draw segment(A,C) shifted(m*(#1+1cm,0));
+    fi;
     marque_p:="tiretv";
+    for l=0 upto m-1:
     for k=0 upto #3:
-    pointe(B[k]);
+    pointe(B[k] shifted(l*(#1+1cm,0)));
     endfor;
+    endfor;
+    if (#2 mod #3)<>0:
+    for k=0 upto #3:
+    pointe(B[k] shifted(m*(#1+1cm,0)));
+    endfor;
+    fi;
   \end{mplibcode}
   \else
   \begin{mpost}
-    pair A,C,B[];
+        pair A,C,B[];
     A=(0,0);
     C-A=(#1,0);
     for k=0 upto #3:
     B[k]=(k/#3)[A,C];
     endfor;
-    draw segment(B[0],B[#2]) withpen pencircle scaled 2 withcolor #4;
-    draw segment(A,C);
+    m=#2 div #3;
+    if m>0:
+    for l=0 upto (m-1):
+    draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+    endfor;
+    fi;
+    if (#2 mod #3)<>0:
+    draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+    draw segment(A,C) shifted(m*(#1+1cm,0));
+    fi;
     marque_p:="tiretv";
+    for l=0 upto m-1:
     for k=0 upto #3:
-    pointe(B[k]);
+    pointe(B[k] shifted(l*(#1+1cm,0)));
     endfor;
+    endfor;
+    if (#2 mod #3)<>0:
+    for k=0 upto #3:
+    pointe(B[k] shifted(m*(#1+1cm,0)));
+    endfor;
+    fi;
   \end{mpost}
   \fi
 }
 
-\def\MPFractionSegmentH#1#2#3#4#5{
+\def\MPFractionSegmentH#1#2#3#4#5{%
   \ifluatex
    \mplibforcehmode
   \begin{mplibcode}
@@ -1997,33 +2252,67 @@
     for k=0 upto #3:
     B[k]=(k/#3)[A,C];
     endfor;
+    m=#2 div #3;
+    if m>0:
+    for l=0 upto (m-1):
     drawoptions(withpen pencircle scaled#5);
-    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2]+u*(0,-0.15),B[#2]+u*(0,0.15),B[0]+u*(0,0.15)),120,0.2,0)
-    withcolor #4;
+    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4;
     drawoptions(withpen pencircle scaled#5);
-    draw segment(A,C);
+    draw segment(A,C) shifted(l*(#1+1cm,0));
+    endfor;
+    fi;
+    if (#2 mod #3)<>0:
+    drawoptions(withpen pencircle scaled#5);
+    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4;
+            drawoptions(withpen pencircle scaled#5);
+    draw segment(A,C) shifted(m*(#1+1cm,0));
+    fi;
     marque_p:="tiretv";
+    for l=0 upto m-1:
     for k=0 upto #3:
-    pointe(B[k]);
+    pointe(B[k] shifted(l*(#1+1cm,0)));
     endfor;
+    endfor;
+    if (#2 mod #3)<>0:
+    for k=0 upto #3:
+    pointe(B[k] shifted(m*(#1+1cm,0)));
+    endfor;
+    fi;
   \end{mplibcode}
   \else
   \begin{mpost}
-    pair A,C,B[];
+        pair A,C,B[];
     A=(0,0);
     C-A=(#1,0);
     for k=0 upto #3:
     B[k]=(k/#3)[A,C];
     endfor;
+    m=#2 div #3;
+    if m>0:
+    for l=0 upto (m-1):
     drawoptions(withpen pencircle scaled#5);
-    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2]+u*(0,-0.15),B[#2]+u*(0,0.15),B[0]+u*(0,0.15)),120,0.2,0)
-    withcolor #4;
+    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4;
     drawoptions(withpen pencircle scaled#5);
-    draw segment(A,C);
+    draw segment(A,C) shifted(l*(#1+1cm,0));
+    endfor;
+    fi;
+    if (#2 mod #3)<>0:
+    drawoptions(withpen pencircle scaled#5);
+    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4;
+            drawoptions(withpen pencircle scaled#5);
+    draw segment(A,C) shifted(m*(#1+1cm,0));
+    fi;
     marque_p:="tiretv";
+    for l=0 upto m-1:
     for k=0 upto #3:
-    pointe(B[k]);
+    pointe(B[k] shifted(l*(#1+1cm,0)));
     endfor;
+    endfor;
+    if (#2 mod #3)<>0:
+    for k=0 upto #3:
+    pointe(B[k] shifted(m*(#1+1cm,0)));
+    endfor;
+    fi;
   \end{mpost}
   \fi
 }
@@ -2209,10 +2498,75 @@
   }%
 }
 
+\newcommand\QCMVar[2][]{%
+  \useKVdefault[ClesQCM]%
+  \setKV[ClesQCM]{#1}%
+  \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
+  \setcounter{TitreQCM}{0}
+  \setsepchar[*]{§*&}\ignoreemptyitems%
+  \readlist*\ListeQCM{#2}%
+  \ifboolKV[ClesQCM]{Multiple}{%
+    \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+    \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+    \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+    \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
+    \setsepchar[*]{/}%
+    \readlist*\ListeNomsMul{\ListeNom}%
+    \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+      \cline{2-\NBcases}%
+      \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+      &\ListeNomsMul[##2]}%
+      \\
+      \hline%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+      \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+      &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]=1}{$\boxtimes$}{$\square$}}{$\square$}%
+        }\\
+      }%
+      \hline%
+    \end{tabular}%
+  }{%
+    \ifboolKV[ClesQCM]{VF}{%
+      \setKV[ClesQCM]{Reponses=2}
+      \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+      \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+      \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+      \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+        \cline{2-\NBcases}%
+        \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
+        \hline%
+        \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+        \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+                             &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+                               }\\
+        }%
+        \hline%
+      \end{tabular}
+    }{%
+      \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+      \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+      \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+      \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+        \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
+        \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+        &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+        \\
+        }{}
+        \hline%
+        \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+        \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+        &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+          }\\
+        }%
+        \hline%
+      \end{tabular}%
+    }%
+  }%
+}
+
 %%%
 % Somme des angles
 %%%
-
 \setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Figure=false,FigureSeule=false,Angle=0,Perso=false}%
 
 \def\MPFigureSommeAngle#1#2#3#4#5#6#7{
@@ -2868,8 +3222,327 @@
 % y a dans un "seul calcul".
 \setcounter{NbCalculDistri}{0}
 
-\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0}%,AideAdd=false:inutile ?
+\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,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}%,AideAdd=false:inutile ?
 
+\newcommand\Tuile[4]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Vide;
+    Vide=\useKV[ClesDistributivite]{Vide};
+    pair _CoinTuilev;
+    _CoinTuilev=(0,0);
+    numeric largeur,longueur,ecart;
+    largeur=0.75;
+    longueur=sqrt(3);
+    ecart=0.6;
+    pair _CoinTuileh;
+    _CoinTuileh=u*(largeur+ecart,ecart);
+    vardef tuilev(expr LL,ll,nb,col)(text t)=
+    save $; picture $;
+    save TT; picture TT;
+    TT=image(
+    path cc;
+    cc=polygone((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll));
+    fill cc withcolor col;
+    trace cc;
+    label(TEX(t),iso((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll)));
+    );
+    $=image(
+    for k=0 upto nb-1:
+    trace TT shifted(_CoinTuilev+k*u*(0,-ll));
+    endfor;
+    _CoinTuilev:=_CoinTuilev shifted(nb*u*(0,-ll));
+    );
+    $
+    enddef;
+    vardef tuileh(expr LL,ll,nb,col)(text t)=
+    save $; picture $;
+    picture TT;
+    TT=image(
+    path cc;
+    cc=polygone((0,0),u*(LL,0),u*(LL,ll),u*(0,ll));
+    fill cc withcolor col;
+    trace cc;
+    label(TEX(t),iso((0,0),u*(LL,0),u*(LL,ll),u*(0,ll)));
+    );
+    $=image(
+    for k=0 upto nb-1:
+    trace TT shifted(_CoinTuileh+k*u*(LL,0));
+    endfor;
+    _CoinTuileh:=_CoinTuileh shifted(nb*u*(LL,0));
+    );
+    $
+    enddef;
+    color ColorLetter,ColorLetterPos,ColorLetterNeg,ColorNum,ColorNumPos,ColorNumNeg,ColorCarrePos,ColorCarreNeg;
+    ColorLetter=LightGreen;
+    ColorLetterPos=ColorLetter;
+    ColorLetterNeg=Tomato;
+    ColorNum=Orange;
+    ColorNumPos=ColorNum;
+    ColorNumNeg=Tomato;
+    ColorCarrePos:=LightBlue;
+    ColorCarreNeg:=Tomato;
+    if #1<0:
+    ColorLetter:=Tomato;
+    trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$-x$");
+    else:
+    ColorLetter:=LightGreen;
+    trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$x$");
+    fi;
+    if #2<0:
+    ColorNum:=Tomato;
+    trace tuilev(largeur,largeur,abs(#2),ColorNum)("$-1$");
+    else:
+    ColorNum:=Orange;
+    trace tuilev(largeur,largeur,abs(#2),ColorNum)("$1$");
+    fi;
+    if #3<0:
+    ColorLetter:=Tomato;
+    trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$-x$");
+    else:
+    ColorLetter:=LightGreen;
+    trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$x$");
+    fi;
+    if #4<0:
+    ColorNum:=Tomato;
+    trace tuileh(largeur,largeur,abs(#4),ColorNum)("$-1$");
+    else:
+    ColorNum:=Orange;
+    trace tuileh(largeur,largeur,abs(#4),ColorNum)("$1$");
+    fi;
+    trace u*(largeur+ecart/2,largeur+ecart)--((largeur+ecart/2)*u,ypart(_CoinTuilev)) withpen pencircle scaled2;
+    trace u*(0,ecart/2)--(xpart(_CoinTuileh),u*(ecart/2)) withpen pencircle scaled2;
+    drawarrow u*(largeur/2,ecart/2){dir90}..{dir0}u*(largeur+ecart/2,largeur/2+ecart) withpen pencircle scaled2;
+    labeloffset:=labeloffset*2;
+    label.ulft(TEX("$\times$"),iso(u*(largeur/2,ecart/2),u*(largeur+ecart/2,largeur/2+ecart)));
+    labeloffset:=labeloffset/2;
+    if Vide=false:
+    %% tuile a*c
+    if #1*#3<>0:
+    for k=0 upto (abs(#3)-1):
+    for l=0 upto (abs(#1)-1):
+    path titi;
+    titi=polygone((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur)));
+    fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi;
+    trace titi;
+    if #1*#3>0:
+    label(TEX("$x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+    else:
+    label(TEX("$-x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    %tuile a*d
+    if #1*#4<>0:
+    for k=0 upto (abs(#4)-1):
+    for l=0 upto (abs(#1)-1):
+    path titi;
+    titi=polygone((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur)));
+    fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi;
+    trace titi;
+    if #1*#4>0:
+    label(TEX("$x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+    else:
+    label(TEX("$-x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    %tuile b*c
+    if #2*#3<>0:
+    for k=0 upto (abs(#3)-1):
+    for l=0 upto (abs(#2)-1):
+    path titi;
+    titi=polygone((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur)));
+    fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi;
+    trace titi;
+    if #2*#3>0:
+    label(TEX("$x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+    else:
+    label(TEX("$-x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    %tuile b*d
+    if #2*#4<>0:
+    for k=0 upto (abs(#4)-1):
+    for l=0 upto (abs(#2)-1):
+    path titi;
+    titi=polygone((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur)));
+    fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi;
+    trace titi;
+    if #2*#4>0:
+    label(TEX("$1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+    else:
+    label(TEX("$-1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={boolean Vide; Vide=\useKV[ClesDistributivite]{Vide};}]
+    pair _CoinTuilev;
+    _CoinTuilev=(0,0);
+    numeric largeur,longueur,ecart;
+    largeur=0.75;
+    longueur=sqrt(3);
+    ecart=0.6;
+    pair _CoinTuileh;
+    _CoinTuileh=u*(largeur+ecart,ecart);
+    vardef tuilev(expr LL,ll,nb,col)(text t)=
+    save $; picture $;
+    save TT; picture TT;
+    TT=image(
+    path cc;
+    cc=polygone((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll));
+    fill cc withcolor col;
+    trace cc;
+    label(LATEX(t),iso((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll)));
+    );
+    $=image(
+    for k=0 upto nb-1:
+    trace TT shifted(_CoinTuilev+k*u*(0,-ll));
+    endfor;
+    _CoinTuilev:=_CoinTuilev shifted(nb*u*(0,-ll));
+    );
+    $
+    enddef;
+    vardef tuileh(expr LL,ll,nb,col)(text t)=
+    save $; picture $;
+    picture TT;
+    TT=image(
+    path cc;
+    cc=polygone((0,0),u*(LL,0),u*(LL,ll),u*(0,ll));
+    fill cc withcolor col;
+    trace cc;
+    label(LATEX(t),iso((0,0),u*(LL,0),u*(LL,ll),u*(0,ll)));
+    );
+    $=image(
+    for k=0 upto nb-1:
+    trace TT shifted(_CoinTuileh+k*u*(LL,0));
+    endfor;
+    _CoinTuileh:=_CoinTuileh shifted(nb*u*(LL,0));
+    );
+    $
+    enddef;
+    color ColorLetter,ColorLetterPos,ColorLetterNeg,ColorNum,ColorNumPos,ColorNumNeg,ColorCarrePos,ColorCarreNeg;
+    ColorLetter=LightGreen;
+    ColorLetterPos=ColorLetter;
+    ColorLetterNeg=Tomato;
+    ColorNum=Orange;
+    ColorNumPos=ColorNum;
+    ColorNumNeg=Tomato;
+    ColorCarrePos:=LightBlue;
+    ColorCarreNeg:=Tomato;
+    if #1<0:
+    ColorLetter:=Tomato;
+    trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$-x$");
+    else:
+    ColorLetter:=LightGreen;
+    trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$x$");
+    fi;
+    if #2<0:
+    ColorNum:=Tomato;
+    trace tuilev(largeur,largeur,abs(#2),ColorNum)("$-1$");
+    else:
+    ColorNum:=Orange;
+    trace tuilev(largeur,largeur,abs(#2),ColorNum)("$1$");
+    fi;
+    if #3<0:
+    ColorLetter:=Tomato;
+    trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$-x$");
+    else:
+    ColorLetter:=LightGreen;
+    trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$x$");
+    fi;
+    if #4<0:
+    ColorNum:=Tomato;
+    trace tuileh(largeur,largeur,abs(#4),ColorNum)("$-1$");
+    else:
+    ColorNum:=Orange;
+    trace tuileh(largeur,largeur,abs(#4),ColorNum)("$1$");
+    fi;
+    trace u*(largeur+ecart/2,largeur+ecart)--((largeur+ecart/2)*u,ypart(_CoinTuilev)) withpen pencircle scaled2;
+    trace u*(0,ecart/2)--(xpart(_CoinTuileh),u*(ecart/2)) withpen pencircle scaled2;
+    drawarrow u*(largeur/2,ecart/2){dir90}..{dir0}u*(largeur+ecart/2,largeur/2+ecart) withpen pencircle scaled2;
+    labeloffset:=labeloffset*2;
+    label.ulft(LATEX("$\times$"),iso(u*(largeur/2,ecart/2),u*(largeur+ecart/2,largeur/2+ecart)));
+    labeloffset:=labeloffset/2;
+    if Vide=false:
+    %% tuile a*c
+    if #1*#3<>0:
+    for k=0 upto (abs(#3)-1):
+    for l=0 upto (abs(#1)-1):
+    path titi;
+    titi=polygone((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur)));
+    fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi;
+    trace titi;
+    if #1*#3>0:
+    label(LATEX("$x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+    else:
+    label(LATEX("$-x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    %tuile a*d
+    if #1*#4<>0:
+    for k=0 upto (abs(#4)-1):
+    for l=0 upto (abs(#1)-1):
+    path titi;
+    titi=polygone((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur)));
+    fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi;
+    trace titi;
+    if #1*#4>0:
+    label(LATEX("$x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+    else:
+    label(LATEX("$-x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    %tuile b*c
+    if #2*#3<>0:
+    for k=0 upto (abs(#3)-1):
+    for l=0 upto (abs(#2)-1):
+    path titi;
+    titi=polygone((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur)));
+    fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi;
+    trace titi;
+    if #2*#3>0:
+    label(LATEX("$x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+    else:
+    label(LATEX("$-x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    %tuile b*d
+    if #2*#4<>0:
+    for k=0 upto (abs(#4)-1):
+    for l=0 upto (abs(#2)-1):
+    path titi;
+    titi=polygone((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur)));
+    fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi;
+    trace titi;
+    if #2*#4>0:
+    label(LATEX("$1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+    else:
+    label(LATEX("$-1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+    fi;
+    endfor;
+    endfor;
+    fi;
+    fi;
+  \end{mpost}
+  \fi
+}
+
 \newcommand\Affichage[4][]{%
   \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
   \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
@@ -2892,191 +3565,195 @@
 \xdef\SommeC{0}%
 
 \newcommand{\Distri}[5][]{%
-  \ensuremath{%
-    \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
-    \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
-    \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
-      \setcounter{NbCalculDistri}{0}%
-    }{}%
-    \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
-    \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
-    \colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
-    \colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
-    \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
-      \DistriEchange[#1]{#2}{#3}{#4}{#5}%
-    }{%
-      \ifboolKV[ClesDistributivite]{Remarquable}{%
-        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
-          \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
-        }{}
-        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
-        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
-          \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
-          \stepcounter{NbCalculDistri}%
-          \ifx\bla#4\bla%
-          \xdef\Multi{\fpeval{#2*#2}}%
-          \xdef\Multij{\fpeval{#2*#3}}%
-          \xdef\Multik{\fpeval{#3*#2}}%
-          \xdef\Multil{\fpeval{#3*#3}}%
-          %% ils sont red\'efinis pour pouvoir envisager la somme de deux
-          %% expressions \`a d\'evelopper
-          \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
-          \ifboolKV[ClesDistributivite]{Oppose}{%
-            \xdef\Multi{\fpeval{-\Multi}}%
-            \xdef\Multim{\fpeval{-\Multim}}%
-            \xdef\Multil{\fpeval{-\Multil}}%
-            \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
-            \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
-            \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
-          }{%
-            \Affichage{\Multi}{\Multim}{\Multil}%
-          }
-          \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
-          \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
-          \else%
-          \xdef\Multi{\fpeval{#2*#4}}%
-          \xdef\Multij{\fpeval{#2*#5}}%
-          \xdef\Multik{\fpeval{#3*#4}}%
-          \xdef\Multil{\fpeval{#3*#5}}%
-          %% ils sont red\'efinis pour pouvoir envisager la somme de deux
-          %% expressions \`a d\'evelopper
-          \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
-          \ifboolKV[ClesDistributivite]{Oppose}{%
-            \xdef\Multi{\fpeval{-\Multi}}%
-            \xdef\Multim{\fpeval{-\Multim}}%
-            \xdef\Multil{\fpeval{-\Multil}}%
-            \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
-            \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
-            \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
-          }{%
-            \Affichage{\Multi}{\Multim}{\Multil}%
-          }
-          \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}}}{}%
-          \fi%
-        }{}%
+  \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
+  \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+  \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
+    \setcounter{NbCalculDistri}{0}%
+  }{}%
+  \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
+  \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
+  \colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
+  \colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
+  \ifboolKV[ClesDistributivite]{Tuile}{%
+    \Tuile{#2}{#3}{#4}{#5}%
+  }{%
+    \ensuremath{%
+      \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
+        \DistriEchange[#1]{#2}{#3}{#4}{#5}%
       }{%
-        \ifboolKV[ClesDistributivite]{Numerique}{%
-          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
-            \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
-          }{%
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
-              \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+        \ifboolKV[ClesDistributivite]{Remarquable}{%
+          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+            \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
+          }{}
+          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
+          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+            \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+            \stepcounter{NbCalculDistri}%
+            \ifx\bla#4\bla%
+            \xdef\Multi{\fpeval{#2*#2}}%
+            \xdef\Multij{\fpeval{#2*#3}}%
+            \xdef\Multik{\fpeval{#3*#2}}%
+            \xdef\Multil{\fpeval{#3*#3}}%
+            %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+            %% expressions \`a d\'evelopper
+            \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
+            \ifboolKV[ClesDistributivite]{Oppose}{%
+              \xdef\Multi{\fpeval{-\Multi}}%
+              \xdef\Multim{\fpeval{-\Multim}}%
+              \xdef\Multil{\fpeval{-\Multil}}%
+              \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+              \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+              \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
             }{%
-              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
-              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
-              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
-              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
-              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+              \Affichage{\Multi}{\Multim}{\Multil}%
+            }
+            \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
+            \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
+            \else%
+            \xdef\Multi{\fpeval{#2*#4}}%
+            \xdef\Multij{\fpeval{#2*#5}}%
+            \xdef\Multik{\fpeval{#3*#4}}%
+            \xdef\Multil{\fpeval{#3*#5}}%
+            %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+            %% expressions \`a d\'evelopper
+            \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+            \ifboolKV[ClesDistributivite]{Oppose}{%
+              \xdef\Multi{\fpeval{-\Multi}}%
+              \xdef\Multim{\fpeval{-\Multim}}%
+              \xdef\Multil{\fpeval{-\Multil}}%
+              \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+              \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+              \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+            }{%
+              \Affichage{\Multi}{\Multim}{\Multil}%
+            }
+            \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}}}{}%
+            \fi%
+          }{}%
+        }{%
+          \ifboolKV[ClesDistributivite]{Numerique}{%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
+              \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+            }{%
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
+                \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+              }{%
+                \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
+                \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
+                \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
+                \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
+                \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+              }%
             }%
-          }%
-        }{%
-          \ifboolKV[ClesDistributivite]{All}{%
-            \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
-            \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
-            \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
-            {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
-            \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
           }{%
-            % Etape 1
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
-              \xintifboolexpr{#2=0}{%
-              }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
-              \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
-              \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
-              \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
-              \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
-              % 
-              \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
-              \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
-              % 
-              \xintifboolexpr{\Multi=0}{\times%
-                \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
-              \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
-              \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
-              \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
-              \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
-              \xintifboolexpr{\Multi=0}{%
-                \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
-              \ifboolKV[ClesDistributivite]{Fleches}{%
-                \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+            \ifboolKV[ClesDistributivite]{All}{%
+              \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
+              \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
+              \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+              {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
+              \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
+            }{%
+              % Etape 1
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+                \xintifboolexpr{#2=0}{%
+                }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+                \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+                \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+                \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+                \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
+                % 
+                \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
+                \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
+                % 
+                \xintifboolexpr{\Multi=0}{\times%
+                  \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+                \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
+                \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+                \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+                \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
                 \xintifboolexpr{\Multi=0}{%
-                  \xdef\Multij{\fpeval{#2*#3}}%\relax
-                  \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
-                }{%
-                  \DrawArrow%
+                  \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+                \ifboolKV[ClesDistributivite]{Fleches}{%
+                  \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+                  \xintifboolexpr{\Multi=0}{%
+                    \xdef\Multij{\fpeval{#2*#3}}%\relax
+                    \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
+                  }{%
+                    \DrawArrow%
+                  }%
+                }{}\setcounter{NbDistri}{0}%
+              }{}
+              % Etape 2
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+                \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}{)}{}%
+                }
+                \xdef\Multij{\fpeval{#2*#5}}%
+                \xintifboolexpr{\Multij=0}{}{%
+                  \xintifboolexpr{\Multi=0}{}{+}%
+                  \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
                 }%
-              }{}\setcounter{NbDistri}{0}%
-            }{}
-            % Etape 2
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
-              \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}{)}{}%
-              }
-              \xdef\Multij{\fpeval{#2*#5}}%
-              \xintifboolexpr{\Multij=0}{}{%
-                \xintifboolexpr{\Multi=0}{}{+}%
-                \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
-              }%
-              \xdef\Multik{\fpeval{#3*#4}}%
-              \xintifboolexpr{\Multik=0}{}{%
-                \xintifboolexpr{\Multi=0}{}{+}%
-                \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
-              }%
-              \xdef\Multil{\fpeval{#3*#5}}%
-              \xintifboolexpr{\Multil=0}{}{+%
-                \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
-              }%
-            }{}%
-            % Etape 3
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
-              \stepcounter{NbCalculDistri}%
-              \xdef\Multi{\fpeval{#2*#4}}%
-              \xdef\Multij{\fpeval{#2*#5}}%
-              \xdef\Multik{\fpeval{#3*#4}}%
-              \xdef\Multil{\fpeval{#3*#5}}%
-              %% ils sont red\'efinis pour pouvoir envisager la somme de deux
-              %% expressions \`a d\'evelopper
-              \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
-              \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
-                  \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
-                  \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+                \xdef\Multik{\fpeval{#3*#4}}%
+                \xintifboolexpr{\Multik=0}{}{%
+                  \xintifboolexpr{\Multi=0}{}{+}%
+                  \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
                 }%
-              }{%
-                \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
-                \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}{)}{}%
-            }{}%
-            % Etape 4
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
-              \xdef\Multi{\fpeval{#2*#4}}%
-              \xdef\Multij{\fpeval{#2*#5}}%
-              \xdef\Multik{\fpeval{#3*#4}}%
-              \xdef\Multil{\fpeval{#3*#5}}%
-              %% ils sont red\'efinis pour pouvoir envisager la somme de deux
-              %% expressions \`a d\'evelopper
-              \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
-              \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
-              \stepcounter{NbCalculDistri}%
-              \ifboolKV[ClesDistributivite]{Oppose}{%
-                \xdef\Multi{\fpeval{-\Multi}}%
-                \xdef\Multim{\fpeval{-\Multim}}%
-                \xdef\Multil{\fpeval{-\Multil}}%
-                \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
-                \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
-                \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
-              }{%
+                \xdef\Multil{\fpeval{#3*#5}}%
+                \xintifboolexpr{\Multil=0}{}{+%
+                  \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+                }%
+              }{}%
+              % Etape 3
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+                \stepcounter{NbCalculDistri}%
+                \xdef\Multi{\fpeval{#2*#4}}%
+                \xdef\Multij{\fpeval{#2*#5}}%
+                \xdef\Multik{\fpeval{#3*#4}}%
+                \xdef\Multil{\fpeval{#3*#5}}%
+                %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+                %% expressions \`a d\'evelopper
                 \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
-                \xintifboolexpr{\Multim=0}{}{%
-                  \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+                \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
+                    \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+                    \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+                  }%
+                }{%
+                  \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+                  \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}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
-              }
-              \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}}}{}%
-            }{}%
+                \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+              }{}%
+              % Etape 4
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+                \xdef\Multi{\fpeval{#2*#4}}%
+                \xdef\Multij{\fpeval{#2*#5}}%
+                \xdef\Multik{\fpeval{#3*#4}}%
+                \xdef\Multil{\fpeval{#3*#5}}%
+                %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+                %% expressions \`a d\'evelopper
+                \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+                \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+                \stepcounter{NbCalculDistri}%
+                \ifboolKV[ClesDistributivite]{Oppose}{%
+                  \xdef\Multi{\fpeval{-\Multi}}%
+                  \xdef\Multim{\fpeval{-\Multim}}%
+                  \xdef\Multil{\fpeval{-\Multil}}%
+                  \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+                  \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+                  \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+                }{%
+                  \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
+                  \xintifboolexpr{\Multim=0}{}{%
+                    \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+                  }%
+                  \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
+                }
+                \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}}}{}%
+              }{}%
+            }%
           }%
         }%
       }%
@@ -5948,12 +6625,12 @@
   }%
   \ifboolKV[ClesTrigo]{Cosinus}{%
     \ifx\bla#3\bla%on calcule le c\^ot\'e adjacent
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+    \xdef\ResultatTrigo{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}%
    \ifboolKV[ClesTrigo]{Propor}{%
      \begin{align*}
        \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
        \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
-        \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB%
+        \num{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB%
       \end{align*}%
     }{%
       \begin{align*}
@@ -5960,18 +6637,18 @@
         \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
         \cos(\ang{#5})&=\frac{\NomA\NomB}{\num{#4}}\\
         \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
-        \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB
+        \num{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB
       \end{align*}
     }%
     \else%
     \ifx\bla#4\bla%on calcule l'hypoth\'enuse
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+    \xdef\ResultatTrigo{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
         \NomA\NomC\times\cos(\ang{#5})&=\num{#3}\\
         \NomA\NomC&=\frac{\num{#3}}{\cos(\ang{#5})}\\
-        \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}
     }{%
       \begin{align*}
@@ -5978,23 +6655,25 @@
         \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
         \cos(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
         \NomA\NomC&=\frac{\num{#3}}{\cos(\ang{#5})}\\
-        \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}%
     }%
     \else%on calcule l'angle
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+    \xdef\ResultatTrigo{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+    \setKV[ClesTrigo]{Precision=0}%
+    \setKV[ClesTrigo]{#1}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
         \num{#4}\times\cos(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
         \cos(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
-        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(acosd(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
       \end{align*}%
     }{%
       \begin{align*}
         \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
         \cos(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
-        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(acosd(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
       \end{align*}%
     }%
     \fi%
@@ -6002,12 +6681,12 @@
   }{}%
   \ifboolKV[ClesTrigo]{Sinus}{%
     \ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}%
+    \xdef\ResultatTrigo{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
         \num{#4}\times\sin(\ang{#5})&=\NomB\NomC\\
-        \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
+        \num{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC%
       \end{align*}%
     }{%
       \begin{align*}
@@ -6014,18 +6693,18 @@
         \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
         \sin(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
         \num{#4}\times\sin(\ang{#5})&=\NomB\NomC\\
-        \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
+        \num{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC%
       \end{align*}%
     }%
     \else
     \ifx\bla#4\bla%on calcule l'hypoth\'enuse
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}%
+    \xdef\ResultatTrigo{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
         \NomA\NomC\times\sin(\ang{#5})&=\num{#3}\\
         \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
-        \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}%
     }{%
       \begin{align*}
@@ -6032,23 +6711,25 @@
         \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
         \sin(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
         \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
-        \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}%
     }%
     \else%on calcule l'angle
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+    \xdef\ResultatTrigo{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+    \setKV[ClesTrigo]{Precision=0}%
+    \setKV[ClesTrigo]{#1}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
         \num{#4}\times\sin(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
         \sin(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
-        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(asind(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
       \end{align*}%
     }{%
       \begin{align*}
         \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
         \sin(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
-        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(asind(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
       \end{align*}%
     }%
     \fi%
@@ -6056,12 +6737,12 @@
   }{}%
   \ifboolKV[ClesTrigo]{Tangente}{%
     \ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+    \xdef\ResultatTrigo{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\%
         \num{#4}\times\tan(\ang{#5})&=\NomB\NomC\\%
-        \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
+        \num{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC%
       \end{align*}%
     }{%
       \begin{align*}
@@ -6068,18 +6749,18 @@
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
         \tan(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
         \num{#4}\times\tan(\ang{#5})&=\NomB\NomC\\
-        \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
+        \num{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC%
       \end{align*}%
     }%
     \else
     \ifx\bla#4\bla%on calcule l'adjacent
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+    \xdef\ResultatTrigo{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
         \NomA\NomB\times\tan(\ang{#5})&=\num{#3}\\
         \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
-        \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+        \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}%
     }{%
       \begin{align*}
@@ -6086,23 +6767,25 @@
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
         \tan(\ang{#5})&=\frac{\num{#3}}{\NomA\NomB}\\
         \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
-        \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+        \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}%
     }%
     \else%on calcule l'angle
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+    \setKV[ClesTrigo]{Precision=0}%
+    \setKV[ClesTrigo]{#1}%
+    \xdef\ResultatTrigo{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
         \num{#4}\times\tan(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
-        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(atand(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
       \end{align*}%
     }{%
       \begin{align*}
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
-        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+        \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(atand(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
       \end{align*}%
     }%
     \fi%
@@ -6883,7 +7566,7 @@
 
 \DTLgnewdb{mtdbEE}%
 \DTLgnewdb{mtdbEEqual}%
-%
+% 
 \newcommand\Stat[2][]{%
   \useKVdefault[ClesStat]%
   \setKV[ClesStat]{#1}%
@@ -6897,89 +7580,89 @@
     }%
     \readlist*\ListeComplete{\foo}%
     \setKV[ClesStat]{Qualitatif}%
-  }{
-  \ifboolKV[ClesStat]{Sondage}{%
-    \setsepchar{,}\ignoreemptyitems%
-    \readlist*\Liste{#2}%
-    % "liste vide"
-	\newtoks\tabtoksEEa%
-	\tabtoksEEa{}%
-	%
-	% "liste vide"
-	\newtoks\tabtoksEEb%
-	\tabtoksEEb{}%
-    %
-	\readlist*\ListeSansDoublonsEE{999}%   %% Pour ne pas avoir une liste vide
-	%
-	\newcount\cmptEE%
-	\newcount\PasNumEE%    %% Permettra de savoir si ce sondage est qualitatif ou quantitatif
-	\PasNumEE=0\relax%
-	\DTLcleardb{mtdbEE}%
-  % on range les resultats du sondage par ordre croissant.
-  \foreachitem\x\in\Liste{%
-    \DTLnewrow{mtdbEE}%
-    \DTLnewdbentry{mtdbEE}{Numeric}{\x}%
-  }%
-  \dtlsort{Numeric}{mtdbEE}{\dtlicompare}%
-	\DTLforeach{mtdbEE}{\nba=Numeric}{%
-		\IfDecimal{\nba}{}{\PasNumEE=\numexpr\PasNumEE+1\relax}%
-		\cmptEE=0\relax%
-		\foreachitem\nbb\in\ListeSansDoublonsEE{%
-			\ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
-		}%
-		\ifthenelse{\equal{\the\cmptEE}{0}}{%
-			\expandafter\AjoutListEEb\nba\nil%
-			\xdef\listEEa{\the\tabtoksEEb}%
-			\ignoreemptyitems%
-			\setsepchar{,}%
-			\readlist*\ListeSansDoublonsEE\listEEa%    	%%% Enl\`eve tous les \'elements
-														%%% identiques de Liste
-		}{}%  
-	}%	
-	\foreachitem\nba\in\ListeSansDoublonsEE{%
-		\cmptEE=0\relax%
-		\DTLforeach{mtdbEE}{\nbb=Numeric}{%
-			\ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
-		}%
-		\expandafter\AjoutListEEab\nba\nil%
-		\expandafter\AjoutListEEaa\the\cmptEE\nil% 	%%% Compte tous les \'elements
-													%%% identiques de Liste
-	}%
-	\xdef\listEEb{\the\tabtoksEEa}
-	\ignoreemptyitems%
-	\setsepchar[*]{,*/}
-	\readlist*\ListeComplete\listEEb%
-    %
-    \ifthenelse{\equal{\the\PasNumEE}{0}}{\setKV[ClesStat]{Quantitatif}}{\setKV[ClesStat]{Qualitatif}}%
   }{%
-  \ifboolKV[ClesStat]{Qualitatif}{%
-    %  % on lit la liste \'ecrite sous la forme valeur/effectif
-    \setsepchar[*]{,*/}\ignoreemptyitems%
-    \readlist*\ListeComplete{#2}%
-    }{% Dans le qualitatif, on trie d'abord les valeurs.
-    \setsepchar[*]{,*/}\ignoreemptyitems%
-    \readlist*\ListeInitiale{#2}%
-% "liste vide"
+    \ifboolKV[ClesStat]{Sondage}{%
+      \setsepchar{,}\ignoreemptyitems%
+      \readlist*\Liste{#2}%
+      % "liste vide"
+      \newtoks\tabtoksEEa%
+      \tabtoksEEa{}%
+      % 
+      % "liste vide"
+      \newtoks\tabtoksEEb%
+      \tabtoksEEb{}%
+      % 
+      \readlist*\ListeSansDoublonsEE{999}%   %% Pour ne pas avoir une liste vide
+      % 
+      \newcount\cmptEE%
+      \newcount\PasNumEE%    %% Permettra de savoir si ce sondage est qualitatif ou quantitatif
+      \PasNumEE=0\relax%
+      \DTLcleardb{mtdbEE}%
+      % on range les resultats du sondage par ordre croissant.
+      \foreachitem\x\in\Liste{%
+        \DTLnewrow{mtdbEE}%
+        \DTLnewdbentry{mtdbEE}{Numeric}{\x}%
+      }%
+      \dtlsort{Numeric}{mtdbEE}{\dtlicompare}%
+      \DTLforeach{mtdbEE}{\nba=Numeric}{%
+        \IfDecimal{\nba}{}{\PasNumEE=\numexpr\PasNumEE+1\relax}%
+        \cmptEE=0\relax%
+        \foreachitem\nbb\in\ListeSansDoublonsEE{%
+          \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
+        }%
+        \ifthenelse{\equal{\the\cmptEE}{0}}{%
+          \expandafter\AjoutListEEb\nba\nil%
+          \xdef\listEEa{\the\tabtoksEEb}%
+          \ignoreemptyitems%
+          \setsepchar{,}%
+          \readlist*\ListeSansDoublonsEE\listEEa%    	%%% Enl\`eve tous les \'elements
+          %%% identiques de Liste
+        }{}%  
+      }%	
+      \foreachitem\nba\in\ListeSansDoublonsEE{%
+        \cmptEE=0\relax%
+        \DTLforeach{mtdbEE}{\nbb=Numeric}{%
+          \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
+        }%
+        \expandafter\AjoutListEEab\nba\nil%
+        \expandafter\AjoutListEEaa\the\cmptEE\nil% 	%%% Compte tous les \'elements
+        %%% identiques de Liste
+      }%
+      \xdef\listEEb{\the\tabtoksEEa}
+      \ignoreemptyitems%
+      \setsepchar[*]{,*/}%
+      \readlist*\ListeComplete\listEEb%
+      % 
+      \ifthenelse{\equal{\the\PasNumEE}{0}}{\setKV[ClesStat]{Quantitatif}}{\setKV[ClesStat]{Qualitatif}}%
+    }{%
+      \ifboolKV[ClesStat]{Qualitatif}{%
+        %  % on lit la liste \'ecrite sous la forme valeur/effectif
+        \setsepchar[*]{,*/}\ignoreemptyitems%
+        \readlist*\ListeComplete{#2}%
+      }{% Dans le qualitatif, on trie d'abord les valeurs.
+        \setsepchar[*]{,*/}\ignoreemptyitems%
+        \readlist*\ListeInitiale{#2}%
+        % "liste vide"
 	\newtoks\tabtoksEE%
 	\tabtoksEE{}%
 	\DTLcleardb{mtdbEEqual}%
   	\foreachitem\x\in\ListeInitiale{%
-    	\DTLnewrow{mtdbEEqual}%
-    	\itemtomacro\ListeInitiale[\xcnt,1]\x%
-    	\DTLnewdbentry{mtdbEEqual}{Val}{\x}%
-    	\itemtomacro\ListeInitiale[\xcnt,2]\y%
-    	\DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
+          \DTLnewrow{mtdbEEqual}%
+          \itemtomacro\ListeInitiale[\xcnt,1]\x%
+          \DTLnewdbentry{mtdbEEqual}{Val}{\x}%
+          \itemtomacro\ListeInitiale[\xcnt,2]\y%
+          \DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
   	}%
   	\dtlsort{Val}{mtdbEEqual}{\dtlicompare}%
 	\DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%  
-		\expandafter\AjoutListEEy\Val\nil%
-		\expandafter\AjoutListEEx\Eff\nil%
-	}
+          \expandafter\AjoutListEEy\Val\nil%
+          \expandafter\AjoutListEEx\Eff\nil%
+	}%
 	\xdef\listEE{\the\tabtoksEE}
 	\ignoreemptyitems%
-	\setsepchar[*]{,*/}
+	\setsepchar[*]{,*/}%
 	\readlist*\ListeComplete\listEE%
-  }}}
+      }}}%
   % on cr\'ee la base de donn\'ees des valeurs dans le cas qualitatif
   \DTLcleardb{mtdb}%
   % on les trie pour la m\'ediane dans le cas qualitatif % Touhami / Texnique.fr
@@ -6991,7 +7674,7 @@
   \dtlsort{Numeric}{mtdb}{\dtlicompare}%
   %  % on r\'einitialise les valeurs des crit\`eres de position et de
   % dispersion
-  \renewcommand\NbDonnees{}
+  \renewcommand\NbDonnees{}%
   \renewcommand\SommeDonnees{}%
   \renewcommand\EffectifTotal{}%
   \renewcommand\Moyenne{}%
@@ -7007,7 +7690,7 @@
     %  %% celui de l'effectif total
     \ifboolKV[ClesStat]{EffectifTotal}{%
       \ifboolKV[ClesStat]{Liste}{L'effectif total de la s\'erie est
-        \num{\ListeCompletelen}.\par}{
+        \num{\ListeCompletelen}.\par}{%
         \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
         L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
           {\xintSeq {2}{\ListeCompletelen}}\do{%
@@ -7017,30 +7700,30 @@
     %  %% celui de la moyenne
     \xdef\Moyenne{\fpeval{\SommeDonnees/\ListeCompletelen}}%	
     \ifboolKV[ClesStat]{Moyenne}{%
-    \ifboolKV[ClesStat]{Liste}{%    
-      La somme des donn\'ees de la s\'erie est :%
-      \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
-        \[
-          \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{\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}}}{}%
-      \]%
-    }%
-      \ifboolKV[ClesStat]{SET}{}{Le nombre de donn\'ees de la s\'erie est \num{\ListeCompletelen}.\\}%
-      Donc la moyenne de la s\'erie est \'egale \`a :%
-      \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
-        \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
-        \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
-              \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
-        \num{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
-      \]%
-    }{Pas de moyenne possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
+      \ifboolKV[ClesStat]{Liste}{%    
+        La somme des donn\'ees de la s\'erie est :%
+        \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+          \[
+            \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{\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}}}{}%
+          \]%
+        }%
+        \ifboolKV[ClesStat]{SET}{}{Le nombre de donn\'ees de la s\'erie est \num{\ListeCompletelen}.\\}%
+        Donc la moyenne de la s\'erie est \'egale \`a :%
+        \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
+          \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
+          \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
+          \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
+          \num{\fpeval{round(\SommeDonnees/\ListeCompletelen,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
+        \]%
+      }{Pas de moyenne possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
     %    %  %% celui de l'\'etendue
     \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
       \xintifboolexpr{\ListeComplete[##1,2]>\DonneeMax}{%
@@ -7053,161 +7736,160 @@
     \xdef\EffectifMax{\DonneeMax}%
     \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%
     \ifboolKV[ClesStat]{Etendue}{%
-    \ifboolKV[ClesStat]{Liste}{%
-    L'\'etendue de la s\'erie est \'egale \`a $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
-    }{Pas d'\'etendue possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
+      \ifboolKV[ClesStat]{Liste}{%
+        L'\'etendue de la s\'erie est \'egale \`a $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+      }{Pas d'\'etendue possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
     \ifboolKV[ClesStat]{Mediane}{%
-    \ifboolKV[ClesStat]{Liste}{%    
-      On range les donn\'ees par ordre croissant :%
-      \nbdonnees=0%
-      \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
-        \[\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;}}\]%
-      }{%
-      \medskip%
-      \begin{center}
-        \begin{minipage}{0.9\linewidth}
-          \DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
-          }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder=0}{\\}{}}
-        \end{minipage}
-      \end{center}%
-      \medskip%
+      \ifboolKV[ClesStat]{Liste}{%    
+        On range les donn\'ees par ordre croissant :%
+        \nbdonnees=0%
+        \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+          \[\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;}}\]%
+        }{%
+          \medskip%
+          \begin{center}
+            \begin{minipage}{0.9\linewidth}
+              \DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
+                }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder=0}{\\}{}}
+            \end{minipage}
+          \end{center}%
+          \medskip%
+        }%
+        \newcount\med%
+        \newcount\meda%
+        \ifodd\number\ListeCompletelen%odd impair
+        \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
+        L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
+        \else% pair
+        \med=\fpeval{\ListeCompletelen/2}\relax%
+        \meda=\numexpr\med+1\relax%
+        L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
+        \fi%
+        \newcount\k%
+        \k=0%
+        \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
+          \ifnum\k=\med %La m\'ediane vaut \numeroDonnee\fi
+          \ifodd\number\ListeCompletelen%
+          La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee.\\Donc la m\'ediane de la s\'erie est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+          \else%
+          La \the\med\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\xdef\Mediane{\numeroDonnee}%
+          \fi%
+          \fi%
+          \ifnum\k=\meda
+          La \the\meda\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+        \fi%
       }%
-      \newcount\med%
-      \newcount\meda%
-      \ifodd\number\ListeCompletelen%odd impair
-      \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
-      L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
-      \else% pair
-      \med=\fpeval{\ListeCompletelen/2}\relax
-      \meda=\numexpr\med+1\relax
-      L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
-      \fi%
-      \newcount\k%
-      \k=0%
-      \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
-        \ifnum\k=\med %La m\'ediane vaut \numeroDonnee\fi
-        \ifodd\number\ListeCompletelen%
-        La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee.\\Donc la m\'ediane de la s\'erie est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
-        \else%
-        La \the\med\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\xdef\Mediane{\numeroDonnee} %
-        \fi
-        \fi
-        \ifnum\k=\meda
-        La \the\meda\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}
-        \fi
-      }
       %%%%%%%%%%%%%%%%%%%%%%%% 
-    }{Pas de m\'ediane possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}
-    % Construction du tableau
-    \ifboolKV[ClesStat]{Tableau}{%
+    }{Pas de m\'ediane possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
+  % Construction du tableau
+  \ifboolKV[ClesStat]{Tableau}{%
     \ifboolKV[ClesStat]{Liste}{Pas de tableau possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un tableau avec cette liste.}{%
-    \ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}}%
-    {}%
-    % Construction du graphique
-    \ifboolKV[ClesStat]{Graphique}{%
+      \ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}}%
+  {}%
+  % Construction du graphique
+  \ifboolKV[ClesStat]{Graphique}{%
     \ifboolKV[ClesStat]{Liste}{Pas de graphique possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un graphique avec cette liste.}{%
       \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraphq[#1]}}%
-    }}{}
-  }{%%%%%%%%%%%%%%%%%%%%%D\'ebut quantitatif
-   %  % on effectue les calculs
-   %  %% celui de la somme des donn\'ees
-   \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,1]*\ListeComplete[\doncnt,2]}}}%
-    %  %% celui de l'effectif total
-    \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
-    %  %% celui de l'\'etendue
-    \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
-      \xintifboolexpr{\ListeComplete[##1,1]>\DonneeMax}{%
-        \xdef\DonneeMax{\ListeComplete[##1,1]}%
-      }{}%
-      \xintifboolexpr{\ListeComplete[##1,1]<\DonneeMin}{%
-        \xdef\DonneeMin{\ListeComplete[##1,1]}%
-      }{}%
-    }%
-%    \xdef\EffectifMax{\DonneeMax}%
-    \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%%
-    %  %% celui de la moyenne
-    \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
-    \ifboolKV[ClesStat]{EffectifTotal}{%
-      L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
+    }}{}%
+}{%%%%%%%%%%%%%%%%%%%%%D\'ebut quantitatif
+  %  % on effectue les calculs
+  %  %% celui de la somme des donn\'ees
+  \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,1]*\ListeComplete[\doncnt,2]}}}%
+  %  %% celui de l'effectif total
+  \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
+  %  %% celui de l'\'etendue
+  \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+    \xintifboolexpr{\ListeComplete[##1,1]>\DonneeMax}{%
+      \xdef\DonneeMax{\ListeComplete[##1,1]}%
+    }{}%
+    \xintifboolexpr{\ListeComplete[##1,1]<\DonneeMin}{%
+      \xdef\DonneeMin{\ListeComplete[##1,1]}%
+    }{}%
+  }%
+  % \xdef\EffectifMax{\DonneeMax}%
+  \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%%
+  %  %% celui de la moyenne
+  \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
+  \ifboolKV[ClesStat]{EffectifTotal}{%
+    L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
       {\xintSeq {2}{\ListeCompletelen}}\do{%
         +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]
-    }{}%
-    \ifboolKV[ClesStat]{Moyenne}{%
-      La somme des donn\'ees de la s\'erie est :%
-      \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
-        \[
-          \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}}}{}
-        \]
-      }{%
-        \[
-          \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}{2}}\do{%
-            +\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}}}{}
-        \]
-      }
-      \ifboolKV[ClesStat]{SET}{}{L'effectif total de la s\'erie est :%
-        \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
-          \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
-              +\num{\ListeComplete[##1,2]}
-            }=\num{\EffectifTotal}
-          \]%
-        }%
-      }
-      Donc la moyenne de la s\'erie est \'egale \`a :%
-      \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
-        \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
-        \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
-        % Moy=\opprint{resultatmoy}--Moy1=\opprint{resultatmoy1}
-        \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
-        \num{\fpeval{round(\SommeDonnees/\EffectifTotal,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}
-      \]%
-    }{}%
-    %  % Affichage des r\'eponses.
-    %  %% pour l'\'etendue
-    \ifboolKV[ClesStat]{Etendue}{L'\'etendue de la s\'erie est \'egale \`a $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
-    %  %% pour la m\'ediane
-    \ifboolKV[ClesStat]{Mediane}{%
-      
-      \newcount\med%
-      \newcount\meda%
-      \ifodd\number\EffectifTotal%odd impair
-      \med=\fpeval{(\EffectifTotal+1)/2}\relax%
-      L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
-      \else% pair
-      \med=\fpeval{\EffectifTotal/2}\relax%
-      \meda=\numexpr\med+1\relax%
-      L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
-      \fi%
-      \newcount\k%
-      \k=0%
-      \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
-        \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
-          \k=\numexpr\k+1\relax%
-          \ifnum\k=\med%
-          \ifodd\number\EffectifTotal%
-          La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee. Donc la m\'ediane de la s\'erie est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
-          \else%
-          La \the\med\ieme{} donn\'ee est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
-          \fi%
-          \fi%
-          \ifnum\k=\meda%
-          La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
-          \fi%
-        }%
+  }{}%
+  \ifboolKV[ClesStat]{Moyenne}{%
+    La somme des donn\'ees de la s\'erie est :%
+    \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+      \[
+        \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}}}{}
+      \]
+    }{%
+      \[
+        \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}{2}}\do{%
+          +\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}}}{}
+      \]
+    }
+    \ifboolKV[ClesStat]{SET}{}{L'effectif total de la s\'erie est :%
+      \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
+        \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+            +\num{\ListeComplete[##1,2]}
+          }=\num{\EffectifTotal}
+        \]%
       }%
-    }{}%
-    % Construction de tableau
-    \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}{}%
-    % Construction du graphique ??
-    \ifboolKV[ClesStat]{Graphique}{%
-      \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraph[#1]}}
-    }{}%
-  }%
+    }%
+    Donc la moyenne de la s\'erie est \'egale \`a :%
+    \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
+      \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
+      \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
+      \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
+      \num{\fpeval{round(\SommeDonnees/\EffectifTotal,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
+    \]%
+  }{}%
+  %  % Affichage des r\'eponses.
+  %  %% pour l'\'etendue
+  \ifboolKV[ClesStat]{Etendue}{L'\'etendue de la s\'erie est \'egale \`a $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
+  %  %% pour la m\'ediane
+  \ifboolKV[ClesStat]{Mediane}{%
+    
+    \newcount\med%
+    \newcount\meda%
+    \ifodd\number\EffectifTotal%odd impair
+    \med=\fpeval{(\EffectifTotal+1)/2}\relax%
+    L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
+    \else% pair
+    \med=\fpeval{\EffectifTotal/2}\relax%
+    \meda=\numexpr\med+1\relax%
+    L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
+    \fi%
+    \newcount\k%
+    \k=0%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+      \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
+        \k=\numexpr\k+1\relax%
+        \ifnum\k=\med%
+        \ifodd\number\EffectifTotal%
+        La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee. Donc la m\'ediane de la s\'erie est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+        \else%
+        La \the\med\ieme{} donn\'ee est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
+        \fi%
+        \fi%
+        \ifnum\k=\meda%
+        La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+        \fi%
+      }%
+    }%
+  }{}%
+  % Construction de tableau
+  \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}{}%
+  % Construction du graphique ??
+  \ifboolKV[ClesStat]{Graphique}{%
+    \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraph[#1]}}
+  }{}%
 }%
+}%
 
 %%%
 % Radar
@@ -7850,7 +8532,7 @@
 %%%
 % Application : pourcentage
 %%%
-\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15}
+\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,Largeur=1cm,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15}
   
 \newcommand\Pourcentage[3][]{%
   \useKVdefault[ClesPourcentage]%
@@ -7865,8 +8547,9 @@
           \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
           \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
           \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+          \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
           \begin{center}
-            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{/#3,#2/100}
+            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/#3,#2/100}
           \end{center}
           \FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
           On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}. Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -7885,8 +8568,9 @@
           \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
           \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
           \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+          \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
           \begin{center}%
-            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{/#3,#2/100}%
+            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/#3,#2/100}%
           \end{center}%
           \FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
           On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -7899,7 +8583,8 @@
         \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
         \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
         \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
-        \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{#2/#3,/100}%
+        \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
+        \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{#2/#3,/100}%
         \xdef\colorfill{\useKV[ClesPourcentage]{ColorFill}}%
         \FlechesPB{2}{1}{\scriptsize$\times\num{\fpeval{#3/100}}$}%
         \FlechesPH{1}{2}{\scriptsize$\div\num{\fpeval{#3/100}}$}%
@@ -7915,7 +8600,7 @@
 %%%
 % Lien : ratio
 %%%
-\setKVdefault[ClesRatio]{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}
 
 \newcommand\MPTest[9][]{%
   % #2 : Longueur de la barre unit\'e
@@ -7922,7 +8607,7 @@
   % #3 : premier nombre
   % #4 : deuxi\`eme nombre
   % #5 : troisi\`eme nombre
-  % #6 : Valeurs du ratio
+  % #6 : ne sert à rien. Laissé en attente.
   % #7 \`a #9: Couleurs de remplissage
   \ifluatex
    \mplibforcehmode
@@ -7942,7 +8627,7 @@
     % on fait la somme totale "du ratio"
     somme=0;
     somme:=somme for k=1 upto n:+N[k] endfor;
-    Figure(0,0,long+2u,3u);
+    %Figure(0,0,long+2u,3u);
     remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
     withcolor #7;
     remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
@@ -7975,7 +8660,7 @@
       to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
     fi;
     enddef;
-    RatioTrois(#2)(#6);
+    RatioTrois(#2)(#3,#4,#5);
     %etiquettage
     labeloffset:=labeloffset*3;
     label.top(btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
@@ -8051,7 +8736,7 @@
       to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
     fi;
     enddef;
-    RatioTrois(#2)(#6);
+    RatioTrois(#2)(#3,#4,#5);
     %etiquettage
     labeloffset:=labeloffset*3;
     label.top(\btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
@@ -8078,6 +8763,127 @@
   \fi
 }
 
+\newcommand\MPTestCours[9][]{%
+  % #2 : Longueur de la barre unit\'e
+  % #3 : premier nombre
+  % #4 : deuxi\`eme nombre
+  % #5 : troisi\`eme nombre
+  % #6 : Valeurs du ratio
+  % #7 \`a #9: Couleurs de remplissage
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    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);
+    B-A=(long,0);
+    C-B=u*(0,0.5);
+    D-C=A-B;
+    n:=0;%n pour savoir si le ratio est a:b ou a:b:c
+    numeric N[];%Pour sauvegarder les \'el\'ements du ratio
+    for p_=t:
+    n:=n+1;
+    N[n]=p_;
+    endfor;
+    % on fait la somme totale "du ratio"
+    somme=0;
+    somme:=somme for k=1 upto n:+N[k] endfor;
+    %%Figure(0,0,long+2u,3u);
+    remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
+    withcolor #7;
+    remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
+    withcolor #8;
+    if n>2:
+    remplis
+    polygone((N[1]/somme)[A,B],((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],(N[1]/somme)[D,C])
+    withcolor #8;
+    remplis
+    polygone(B,((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],C)
+    withcolor #9;
+    fi;
+    drawoptions(withpen pencircle scaled1.5bp);
+    draw polygone(A,B,C,D);
+    for k=1 upto somme-1:
+    draw segment((k/somme)[A,B],(k/somme)[D,C]);
+    endfor;
+    drawoptions();
+    % accolades
+    label.bot(TEX("\footnotesize$\underbrace{\hbox
+      to"&decimal(abs((N[1]/somme)[A,B]-A))&"pt{}}$"),iso(A,(N[1]/somme)[A,B]));
+    label.bot(TEX("\footnotesize$\underbrace{\hbox
+      to"&decimal(abs((N[1]/somme)[A,B]-((N[1]+N[2])/somme)[A,B]))&"pt{}}$"),iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    if n>2:
+    label.bot(TEX("\footnotesize$\underbrace{\hbox
+      to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
+    fi;
+    enddef;
+    RatioTrois(#2)(#3,#4,#5);
+    %etiquettage
+    labeloffset:=labeloffset*3;
+    label.bot(btex $a$ etex,iso(A,(N[1]/somme)[A,B]));
+    label.bot(btex $b$ etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    if n>2:
+    label.bot(btex $c$ etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    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);
+    B-A=(long,0);
+    C-B=u*(0,0.5);
+    D-C=A-B;
+    n:=0;%n pour savoir si le ratio est a:b ou a:b:c
+    numeric N[];%Pour sauvegarder les \'el\'ements du ratio
+    for p_=t:
+    n:=n+1;
+    N[n]=p_;
+    endfor;
+    % on fait la somme totale "du ratio"
+    somme=0;
+    somme:=somme for k=1 upto n:+N[k] endfor;
+    %Figure(0,0,long+2u,3u);
+    remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
+    withcolor #7;
+    remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
+    withcolor #8;
+    if n>2:
+    remplis
+    polygone((N[1]/somme)[A,B],((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],(N[1]/somme)[D,C])
+    withcolor #8;
+    remplis
+    polygone(B,((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],C)
+    withcolor #9;
+    fi;
+    drawoptions(withpen pencircle scaled1.5bp);
+    draw polygone(A,B,C,D);
+    for k=1 upto somme-1:
+    draw segment((k/somme)[A,B],(k/somme)[D,C]);
+    endfor;
+    drawoptions();
+    % accolades
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+      to"&decimal(abs((N[1]/somme)[A,B]-A))&"pt{}}$"),iso(A,(N[1]/somme)[A,B]));
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+      to"&decimal(abs((N[1]/somme)[A,B]-((N[1]+N[2])/somme)[A,B]))&"pt{}}$"),iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    if n>2:
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+      to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
+    fi;
+    enddef;
+    RatioTrois(#2)(#3,#4,#5);
+    %etiquettage
+    labeloffset:=labeloffset*3;
+    label.bot(btex $a$ etex,iso(A,(N[1]/somme)[A,B]));
+    label.bot(btex $b$ etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    if n>2:
+    label.bot(btex $c$ etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+    fi;
+  \end{mpost}
+  \fi
+}
+
 \newtoks\toklisteratio
 \def\UpdateRatio#1\nil{\addtotok\toklisteratio{#1,}}
 
@@ -8139,25 +8945,35 @@
   \useKVdefault[ClesRatio]%
   \setKV[ClesRatio]{#1}%
   \xdef\EcartLargeur{\useKV[ClesRatio]{Largeur}}%
-  \ifboolKV[ClesRatio]{Figure}{%
+  \ifboolKV[ClesRatio]{FigureCours}{%
     \ignoreemptyitems%
     \readlist*\ListeRatio{#2}%
     \toklisteratio{}%
     \foreachitem\compteur\in\ListeRatio{\expandafter\UpdateRatio\compteur\nil}%
-    \itemtomacro\ListeRatio[1]\NbUn
-    \itemtomacro\ListeRatio[2]\NbDeux
-    \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}
-    \MPTest[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
+    \itemtomacro\ListeRatio[1]\NbUn%
+    \itemtomacro\ListeRatio[2]\NbDeux%
+    \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}%
+    \MPTestCours[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
   }{%
-    \ifboolKV[ClesRatio]{Tableau}{%
-      \setsepchar[*]{,*/}\ignoreemptyitems%
+    \ifboolKV[ClesRatio]{Figure}{%
+      \ignoreemptyitems%
       \readlist*\ListeRatio{#2}%
-      \buildtabratio%
-    }{}%
+      \toklisteratio{}%
+      \foreachitem\compteur\in\ListeRatio{\expandafter\UpdateRatio\compteur\nil}%
+      \itemtomacro\ListeRatio[1]\NbUn%
+      \itemtomacro\ListeRatio[2]\NbDeux%
+      \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}%
+      \MPTest[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
+    }{%
+      \ifboolKV[ClesRatio]{Tableau}{%
+        \setsepchar[*]{,*/}\ignoreemptyitems%
+        \readlist*\ListeRatio{#2}%
+        \buildtabratio%
+      }{}%
+    }%
   }%
 }%
-
-%%%
+%%% 
 % Cartes Mentales
 %%%
 \setKVdefault[ClesMentales]{Nom={Bulle}, Largeur=5cm, Ancre={0,0},Pointilles=false,CTrace=black,CFond=white,Epaisseur=1pt,Rayon=1}%
@@ -11802,7 +12618,7 @@
   % #4 : on affiche le nom des points ou pas
   % #5 : quelle est la valeur de la longueur unit\'e ?
   % #6 : la valeur de l'unit\'e
-  % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction
+  % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction, 3 Fleche dots
   % #8 : on affiche tous les multiples de la graduation "principale"
   \ifluatex
   \mplibforcehmode
@@ -11833,7 +12649,7 @@
     fi;
     enddef;
     toto(#3);
-    Figure((minx-1)*unitp,-u,(maxx+1)*unitp,u);
+    Figure((minx-1)*unitp,-2u,(maxx+1)*unitp,u);
     pair A,B,C;
     A=(0,0);
     B=unitp*(maxx,0);
@@ -11888,7 +12704,7 @@
     fi;
     endfor;
     fi;
-    if #7=2:
+    if #7=3:
     for p_=t:
     if numeric p_:
     k:=p_;
@@ -11895,6 +12711,19 @@
     fi;
     if string p_:
     if p_<>"":
+    drawarrow (unitp*(k,-1))--(unitp*(k,-0.3));
+    label.bot(btex \hbox to2em{\dotfill} etex,(unitp*(k,-1)));
+    pointe(unitp*(k-#6,0));
+    fi;
+    fi;
+    endfor;
+    elseif #7=2:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
     if ((#5*k) mod pasx)<>0:
     label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(k,0));
     else:
@@ -11948,7 +12777,7 @@
     fi;
     enddef;
     toto(#3);
-    Figure((minx-1)*unitp,-u,(maxx+1)*unitp,u);
+    Figure((minx-1)*unitp,-2u,(maxx+1)*unitp,u);
     pair A,B,C;
     A=(0,0);
     B=unitp*(maxx,0);
@@ -12003,7 +12832,7 @@
     fi;
     endfor;
     fi;
-    if #7=2:
+        if #7=3:
     for p_=t:
     if numeric p_:
     k:=p_;
@@ -12010,6 +12839,19 @@
     fi;
     if string p_:
     if p_<>"":
+    drawarrow (unitp*(k,-1))--(unitp*(k,-0.3));
+    label.bot(\btex \hbox to2em{\dotfill} etex,(unitp*(k,-1)));
+    pointe(unitp*(k-#6,0));
+    fi;
+    fi;
+    endfor;
+    elseif #7=2:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
     if ((#5*k) mod pasx)<>0:
     label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(k,0));
     else:
@@ -13320,7 +14162,7 @@
     \ifnum\cntcol<\useKV[Tableur]{Colonnes}
     \advance\cntcol\@ne
     \addtot at b{&}%
-    \edftot at b{{\noexpand\@Alph\the\cntcol}}%
+    \edftot at b{{\noexpand\@Alph{\the\cntcol}}}%
     \repeat
     \addtot at b{\\&}%
     \collectcp at body}{\the\t at b}

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2021-05-15 20:42:21 UTC (rev 59216)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2021-05-15 20:46:18 UTC (rev 59217)
@@ -939,7 +939,6 @@
  'noindentafter',	"&MAKEflatten",
  'norasi-c90',  "&MAKEnorasi_c90",
  'notes',       "&MAKEnotes",
- 'notestex',    
  'notocjksc',	"die 'skipping, 300mb is just too big'",
  'notomath',	"&MAKEflatten",
  'ntabbing',    "die 'skipping, noinfo license, author email bad'",



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