texlive[66660] Master/texmf-dist: profcollege (24mar23)

commits+karl at tug.org commits+karl at tug.org
Fri Mar 24 22:18:33 CET 2023


Revision: 66660
          http://tug.org/svn/texlive?view=revision&revision=66660
Author:   karl
Date:     2023-03-24 22:18:33 +0100 (Fri, 24 Mar 2023)
Log Message:
-----------
profcollege (24mar23)

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/tex/latex/profcollege/ProfCollege.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarreNiveaux.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarresCalculs.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCBillard.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCBonSortie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsCroises.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesJeux.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesMentales.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCColorilude.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCCompteBon.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecDeci.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecompFracDeci.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecomposerNombrePremier.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinGradue.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDiagrammeRadar.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCDomino.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureLettres.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnigmeAire.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnquete.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCFicheMemo.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCFonctionAffine.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCFrise.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCFutoshiki.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCGaram.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCGrades.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCHiddenMessage.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakurasu.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheJeu.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheNombre.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMentalo.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMidpoint.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMosaique.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCroises.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsEmpiles.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCNombreAstral.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCOperationsTrou.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPapiers.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPixelArt.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCProbabilites.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCProgrammeCalcul.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCProprietesDroites.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuissanceQuatre.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuzzleSommePyramide.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPyramideCalculs.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsFlash.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuiSuisJe.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRLE.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRangementNombres.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRapido.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRappelsFormules.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresentationGraphique.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterEntier.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCReseauxSociaux.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRondeInfernale.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCRose.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCShikaku.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCSommeAngles.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCSquaro.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTableauxUnites.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTablesOperations.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTectonic.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCTriominos.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex
    trunk/Master/texmf-dist/tex/latex/profcollege/PfCYohaku.tex

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

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

Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,234 @@
+%%% Autonomie %%%
+\setKVdefault[Autonomie]{AfficheMarge=false,TitreEnigme=Enigme,TitreAtoi=\`A toi,Enigme=false,TexteCorrection=\bfseries Correction,ARemplir=false,Deux=false,Landscape=false}%
+
+\newcommand\Autonomie[3][]{%
+  \useKVdefault[Autonomie]%
+  \setKV[Autonomie]{#1}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeAutoQ{#2}%
+  % \setsepchar{§}
+  % \readlist*\ListeAutoR{#3}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeAutoEn{#3}%
+  \clearpage
+  \begin{tikzpicture}[remember picture,overlay]%
+    \ifboolKV[Autonomie]{AfficheMarge}{%
+      \node[xshift=5mm,yshift=-5mm,circle] (PfCA) at (current page.north west) {};%
+      \node[xshift=-5mm,yshift=5mm] (PfCB) at (current page.south east) {};%
+      \draw[blue,dashed] (PfCA) rectangle (PfCB);%
+    }{}%
+    \foreach \i in {1,...,3}{%
+      \coordinate[xshift=\i*0.25*\paperwidth] (A\i) at (current page.north west);%
+      \coordinate[xshift=\i*0.25*\paperwidth] (B\i) at (current page.south west);%
+    }%
+    \foreach \i in{1,...,4}{%
+      \coordinate[yshift=-\i*0.25*\paperheight] (C\i) at (current page.north west);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (F\i) at (current page.north east);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (D\i) at (A1);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (E\i) at (A3);%
+    }%
+    \ifboolKV[Autonomie]{Deux}{%
+      \draw (C2) to (D2);%
+      \draw (E2) to (F2);%
+    }{%
+      \foreach\i in{1,...,4}{%
+        \draw (C\i) to (D\i);%
+        \draw (E\i) to (F\i);%
+      }%
+    }%
+    \coordinate (O1) at ($(D1)!0.5!(D2)$);
+    \coordinate (O2) at ($(D3)!0.5!(D4)$);
+    \coordinate (O3) at ($(E1)!0.5!(E2)$);
+    \coordinate (O4) at ($(E3)!0.5!(E4)$);
+    \coordinate (Q1) at ($(F1)!0.5!(A3)$);%
+    \coordinate (Q2) at ($(F2)!0.5!(E1)$);%
+    \coordinate (Q3) at ($(F3)!0.5!(E2)$);%
+    \coordinate (Q4) at ($(F4)!0.5!(E3)$);%
+    \coordinate (Q5) at ($(C1)!0.5!(A1)$);%
+    \coordinate (Q6) at ($(C2)!0.5!(D1)$);%
+    \coordinate (Q7) at ($(C3)!0.5!(D2)$);%
+    \coordinate (Q8) at ($(C4)!0.5!(D3)$);%
+    \ifboolKV[Autonomie]{Landscape}{%
+      \draw[dashed] (C1) to (F1);
+      \draw[dashed] (C3) to (F3);
+      \draw (A2) to (B2);%
+    }{%
+      \ifboolKV[Autonomie]{Deux}{%
+        \draw (C2) to (D2);
+        \draw (E2) to (F2);
+      }{%
+        \foreach\i in{1,...,4}{%
+          \draw (C\i) to (D\i);
+          \draw (E\i) to (F\i);
+        }%
+      }%
+      \draw[dashed] (A1) to (B1);%
+      \draw[dashed] (A3) to (B3);%
+    }%
+    %\draw[dashed] (A1) to (B1);%
+    %\draw[dashed] (A3) to (B3);%
+    \ifboolKV[Autonomie]{ARemplir}{%
+      \ifboolKV[Autonomie]{Landscape}{%
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O1) {\ListeAutoQ[1,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O2) {\ListeAutoQ[2,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O3) {\ListeAutoQ[3,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (O4) {\ListeAutoQ[4,1]};
+      }{%
+        \ifboolKV[Autonomie]{Deux}{%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test1) at ($(Q1)!0.5!(Q2)$) {\ListeAutoQ[1,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test2) at ($(Q3)!0.5!(Q4)$) {\ListeAutoQ[2,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test3) at ($(Q5)!0.5!(Q6)$) {\ListeAutoQ[3,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test4) at ($(Q7)!0.5!(Q8)$) {\ListeAutoQ[4,1]};%
+        }{%
+          \foreach \i in {1,...,4}{%
+            \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test\i) at (Q\i) {\ListeAutoQ[\i,1]};%
+          }%
+          \foreach \i in {5,...,8}{%
+            \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] (Test\i) at (Q\i) {\ListeAutoQ[\i,1]};%
+          }%
+        }%
+      }%
+    }{%
+      \foreach \i in {1,...,4}{%
+        \node[xshift=-5mm,align=justify,anchor=center,text width=0.8*0.25\textwidth] (Test\i) at (Q\i) {\ding{\fpeval{171+\i}}~\ListeAutoQ[\i,1]};%
+      }%
+      \foreach \i in {5,...,8}{%
+        \node[align=justify,anchor=center,text width=0.8*0.25\textwidth] (Test\i) at (Q\i) {\ding{\fpeval{171+\i}}~\ListeAutoQ[\i,1]};%
+      }%
+    }%
+  \end{tikzpicture}%
+  \clearpage%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \ifboolKV[Autonomie]{AfficheMarge}{%
+      \node[xshift=5mm,yshift=-5mm,circle] (PfCA) at (current page.north west) {};%
+      \node[xshift=-5mm,yshift=5mm] (PfCB) at (current page.south east) {};%
+      \draw[blue,dashed] (PfCA) rectangle (PfCB);%
+    }{}%
+    \foreach \i in {1,...,3}{%
+      \coordinate[xshift=\i*0.25*\paperwidth] (A\i) at (current page.north west);%
+      \coordinate[xshift=\i*0.25*\paperwidth] (B\i) at (current page.south west);%
+    }%
+    \foreach \i in{1,...,4}{%
+      \coordinate[yshift=-\i*0.25*\paperheight] (C\i) at (current page.north west);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (F\i) at (current page.north east);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (D\i) at (A1);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (G\i) at (A2);%
+      \coordinate[yshift=-\i*0.25*\paperheight] (E\i) at (A3);%
+    }%
+    \ifboolKV[Autonomie]{Deux}{%
+      \draw (C2) to (F2);%
+    }{%
+      \foreach \i in{1,...,4}{%
+        \draw (C\i) to (F\i);%
+      }%
+    }%
+    \coordinate (T1) at ($(current page.north west)!0.5!(A1)$);%
+    \coordinate (T2) at ($(C1)!0.5!(D1)$);%
+    \coordinate (T3) at ($(C2)!0.5!(D2)$);%
+    \coordinate (T4) at ($(C3)!0.5!(D3)$);%
+    \coordinate (T5) at ($(current page.north east)!0.5!(A3)$);%
+    \coordinate (T6) at ($(E1)!0.5!(F1)$);%
+    \coordinate (T7) at ($(E2)!0.5!(F2)$);%
+    \coordinate (T8) at ($(E3)!0.5!(F3)$);%
+    \coordinate (U1) at ($(C1)!0.5!(D1)$);%
+    \coordinate (U2) at ($(C2)!0.5!(D2)$);%
+    \coordinate (U3) at ($(C3)!0.5!(D3)$);%
+    \coordinate (U4) at ($(current page.south west)!0.5!(B1)$);%
+    \coordinate (U5) at ($(E1)!0.5!(F1)$);%
+    \coordinate (U6) at ($(E2)!0.5!(F2)$);%
+    \coordinate (U7) at ($(E3)!0.5!(F3)$);%
+    \coordinate (U8) at ($(B3)!0.5!(current page.south east)$);%
+    \coordinate (R1) at ($(D1)!0.5!(A2)$);%
+    \coordinate (R2) at ($(D2)!0.5!(G1)$);%
+    \coordinate (R3) at ($(D3)!0.5!(G2)$);%
+    \coordinate (R4) at ($(D4)!0.5!(G3)$);%
+    \coordinate (R5) at ($(E1)!0.5!(A2)$);%
+    \coordinate (R6) at ($(E2)!0.5!(G1)$);%
+    \coordinate (R7) at ($(E3)!0.5!(G2)$);%
+    \coordinate (R8) at ($(E4)!0.5!(G3)$);%
+    \coordinate (S1) at ($(A1)!0.5!(D1)$);%
+    \coordinate (S2) at ($(D1)!0.5!(D2)$);%
+    \coordinate (S3) at ($(D2)!0.5!(D3)$);%
+    \coordinate (S4) at ($(D3)!0.5!(B1)$);%
+    \coordinate (S5) at ($(R1)!0.5!(R5)$);%
+    \coordinate (S6) at ($(R2)!0.5!(R6)$);%
+    \coordinate (S7) at ($(R3)!0.5!(R7)$);%
+    \coordinate (S8) at ($(R4)!0.5!(R8)$);%
+    \coordinate (V1) at ($(T1)!0.5!(U1)$);%
+    \coordinate (V2) at ($(T2)!0.5!(U2)$);%
+    \coordinate (V3) at ($(T3)!0.5!(U3)$);%
+    \coordinate (V4) at ($(T4)!0.5!(U4)$);%
+    \coordinate (V5) at ($(T5)!0.5!(U5)$);%
+    \coordinate (V6) at ($(T6)!0.5!(U6)$);%
+    \coordinate (V7) at ($(T7)!0.5!(U7)$);%
+    \coordinate (V8) at ($(T8)!0.5!(U8)$);%
+    \coordinate (W1) at ($(A3)!0.5!(E1)$);
+    \coordinate (W2) at ($(E1)!0.5!(E2)$);
+    \coordinate (W3) at ($(E2)!0.5!(E3)$);
+    \coordinate (W4) at ($(E3)!0.5!(E4)$);
+    \coordinate (W5) at ($(A1)!0.5!(D1)$);
+    \coordinate (W6) at ($(D1)!0.5!(D2)$);
+    \coordinate (W7) at ($(D2)!0.5!(D3)$);
+    \coordinate (W8) at ($(D3)!0.5!(D4)$);
+    \ifboolKV[Autonomie]{Landscape}{%
+      \draw[dashed] (C1) to (F1);%
+      \draw[dashed] (C3) to (F3);
+      \draw (A2) to (B2);%
+    }{%
+      \draw[dashed] (A1) to (B1);%
+      \draw[dashed] (A2) to (B2);
+      \draw[dashed] (A3) to (B3);%
+    }%
+    %\draw[dashed] (A1) to (B1);%
+    %\draw[dashed] (A2) to (B2);%
+    %\draw[dashed] (A3) to (B3);%
+    \ifboolKV[Autonomie]{ARemplir}{%
+      \ifboolKV[Autonomie]{Landscape}{%
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W2) {\ListeAutoEn[4,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W4) {\ListeAutoEn[3,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W6) {\ListeAutoEn[2,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W8) {\ListeAutoEn[1,1]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W1) {\ListeAutoQ[4,2]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W3) {\ListeAutoQ[3,2]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W5) {\ListeAutoQ[2,2]};
+        \node[align=justify,anchor=center,text width=0.9*0.5\textwidth] at (W7) {\ListeAutoQ[1,2]};
+      }{%
+        \ifboolKV[Autonomie]{Deux}{%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V1)!0.5!(V2)$) {\ListeAutoEn[1,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V3)!0.5!(V4)$) {\ListeAutoEn[2,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V5)!0.5!(V6)$) {\ListeAutoEn[3,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(V7)!0.5!(V8)$) {\ListeAutoEn[4,1]};%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R1)!0.5!(R2)$) {\ListeAutoQ[1,2]};%%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R3)!0.5!(R4)$) {\ListeAutoQ[2,2]};%%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R5)!0.5!(R6)$) {\ListeAutoQ[3,2]};%%
+          \node[align=justify,anchor=center,text width=0.9*0.25\textwidth] at ($(R7)!0.5!(R8)$) {\ListeAutoQ[4,2]};%%
+        }{%
+          \foreach \i in {1,...,8}{%
+            \node[text width=0.9*0.25\paperwidth] at (V\i) {\ListeAutoQ[\i,2]};%
+            \node[text width=0.9*0.25\paperwidth] at (R\i) {\ListeAutoEn[\i,1]};%
+          }%
+        }%
+      }%
+    }{%
+      \foreach \i in {1,...,8}{%
+        \node[rotate=90,anchor=north] (Cor\i) at (S\i) {\useKV[Autonomie]{TexteCorrection}};%
+        \node[anchor=west,xshift=2em,text width=0.8*0.25\paperwidth] (Test\i)
+        at (S\i) {\ListeAutoQ[\i,2]};%
+        \node[anchor=north,yshift=-1em,text width=0.85*0.25\paperwidth] (TestEn\i)
+        at (T\i) {\textbf{\useKV[Autonomie]{TitreAtoi}} \ListeAutoEn[\i,1]};%
+        \ifboolKV[Autonomie]{Enigme}{%
+          \node[anchor=south,yshift=1em,text width=0.85*0.25\paperwidth] (TestREn\i)
+          at (U\i) {%
+            \ListeAutoEn[\i,2] : \pointilles\\%
+            Lettre \ding{\fpeval{171+\i}} : \pointilles%
+          };%
+        }{%
+          \node[anchor=south,yshift=1em,text width=0.85*0.25\paperwidth] (TestREn\i)
+          at (U\i) {%
+            \ListeAutoEn[\i,2]%
+          };%
+        }%
+      }%
+    }%
+  \end{tikzpicture}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCAutonomie.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarreNiveaux.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarreNiveaux.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarreNiveaux.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,62 @@
+%%%
+% Barres de niveaux
+%%%
+\setKVdefault[ClesBarre]{Niveau=false,LimiteI=25,LimiteF=50,LimiteS=75,TexteOrigine=0,TexteReference=100,CouleurGraduation=white,CouleurFond=gray!50,CouleurBarre=black,Graduation=false,Nom=D\'efaut,Pas=10,CouleurI=red,CouleurF=orange,CouleurS=yellow,CouleurM=green}
+
+\newlength{\barrewidth}
+
+\newcommand\Jauge[2][]{%
+  \setlength{\barrewidth}{\linewidth-2\fboxsep}%
+  \useKVdefault[ClesBarre]%
+  \setKV[ClesBarre]{#1}%
+  \xdef\NomComp{\useKV[ClesBarre]{Nom}}%
+  \def\TexteOrigine{\useKV[ClesBarre]{TexteOrigine}}%
+  \def\TexteReference{\useKV[ClesBarre]{TexteReference}}%
+  \xdef\CouleurFond{\useKV[ClesBarre]{CouleurFond}}%
+  \xdef\CouleurGrad{\useKV[ClesBarre]{CouleurGraduation}}%
+  \xdef\CouleurBarre{\useKV[ClesBarre]{CouleurBarre}}%
+  \xdef\CouleurI{\useKV[ClesBarre]{CouleurI}}%
+  \xdef\CouleurF{\useKV[ClesBarre]{CouleurF}}%
+  \xdef\CouleurS{\useKV[ClesBarre]{CouleurS}}%
+  \xdef\CouleurM{\useKV[ClesBarre]{CouleurM}}%
+  \ifboolKV[ClesBarre]{Niveau}{%
+    \begin{tikzpicture}[rounded corners=2pt,very thin]
+      \fill [gray!50] (0,0) rectangle (\barrewidth, 0.15);
+      \xintifboolexpr{#2<\useKV[ClesBarre]{LimiteI}}{%
+        \fill [\CouleurI] (0,0) rectangle (#2/100*\barrewidth, 0.15);
+      }{\xintifboolexpr{#2<\useKV[ClesBarre]{LimiteF}}{%
+          \fill [\CouleurF] (0,0) rectangle (#2/100*\barrewidth, 0.15);
+        }{\xintifboolexpr{#2<\useKV[ClesBarre]{LimiteS}}{%
+            \fill [\CouleurS] (0,0) rectangle (#2/100*\barrewidth, 0.15);
+          }{\fill [\CouleurM] (0,0) rectangle (#2/100*\barrewidth, 0.15);}
+        }%
+      }%
+      \node[anchor=south west] at (0,0.5em) {\NomComp};%
+      \node[anchor=north] at (0,-0.25em) {\TexteOrigine};
+      \node[anchor=north] at (\barrewidth,-0.25em) {\TexteReference};
+      \ifboolKV[ClesBarre]{Graduation}{%
+        \foreach \s in {1,...,\fpeval{\useKV[ClesBarre]{Pas}-1}}%
+        {
+          \draw[\CouleurGrad] (\s/\useKV[ClesBarre]{Pas}*\barrewidth,0)--(\s/\useKV[ClesBarre]{Pas}*\barrewidth,0.15);
+        }
+      }{}
+      \foreach \s in {\useKV[ClesBarre]{LimiteI},\useKV[ClesBarre]{LimiteF},\useKV[ClesBarre]{LimiteS}}%
+      {
+        \draw[black] (\s/100*\barrewidth,-0.1)--(\s/100*\barrewidth,0.2);%
+      }
+    \end{tikzpicture}%
+  }{%
+    \begin{tikzpicture}[rounded corners=2pt,very thin]
+      \fill [\CouleurFond] (0,0) rectangle (\barrewidth, 0.15);%
+      \fill [\CouleurBarre] (0,0) rectangle (#2/100*\barrewidth, 0.15);%
+      \node[anchor=south west] at (0,0.5em) {\NomComp};%
+      \node[anchor=north] at (0,-0.25em) {\useKV[ClesBarre]{TexteOrigine}};%
+      \node[anchor=north] at (\barrewidth,-0.25em) {\useKV[ClesBarre]{TexteReference}};%
+      \ifboolKV[ClesBarre]{Graduation}{%
+      \foreach \s in {1,...,\fpeval{\useKV[ClesBarre]{Pas}-1}}%
+      {%
+        \draw[\CouleurGrad] (\s/\useKV[ClesBarre]{Pas}*\barrewidth,0)--(\s/\useKV[ClesBarre]{Pas}*\barrewidth,0.15);
+      }}{}%
+    \end{tikzpicture}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarreNiveaux.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarresCalculs.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarresCalculs.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarresCalculs.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,80 @@
+%%%
+% Barres de calculs
+%%%
+\setKVdefault[SuiteBarre]{Litteral=false,Perso=false,Decimaux=false}
+
+\NewDocumentCommand\BarresCalculs{o m m}{%
+  \useKVdefault[SuiteBarre]%
+  \setKV[SuiteBarre]{#1}%
+  \xdef\PfCListeCalculsBarre{}%
+  \xdef\PfCListeResultatsBarre{}%
+  \ignoreemptyitems%
+  \ifboolKV[SuiteBarre]{Perso}{%
+    \setsepchar[*]{,*§}%
+    \readlist*\PfCListeBarresCalculs{#2}%
+    \foreachitem\compteur\in\PfCListeBarresCalculs{%
+      \StrChar{#3}{\compteurcnt}[\PfCLettreB]%
+      \StrSubstitute[0]{\PfCLettreB}{*}{Départ}[\PfCLettreC]%
+      \xdef\PfCListeResultatsBarre{\PfCListeResultatsBarre \PfCLettreC,}%
+    }%
+    \setsepchar{,}%
+    \readlist*\PfCListeResultats{\PfCListeResultatsBarre}%
+    \begin{NiceTabular}{ccc}[hvlines]
+      \xintFor* ##1 in{\xintSeq{1}{\PfCListeResultatslen}}\do{%
+        \xintifForFirst{\Block{2-1}{}}{\Block{2-1}{\ifboolKV[SuiteBarre]{Decimaux}{%
+              \num{\fpeval{\PfCListeBarresCalculs[\fpeval{##1-1},1]}}%
+              }{%
+                \begin{CAS}
+              c = \PfCListeBarresCalculs[\fpeval{##1-1},1]
+            \end{CAS}$\print{c:autosimplify()}$}%
+        }}&\Block{2-1}{\PfCListeResultats[##1]}&\Block{2-1}{$\PfCListeBarresCalculs[##1,2]$}\\
+        &&\\
+      }%
+    \end{NiceTabular}
+  }{%
+    \setsepchar{,}%\ignoreemptyitems%
+    \readlist*\PfCListeBarresCalculs{#2}%
+    \ifboolKV[SuiteBarre]{Litteral}{%
+      \foreachitem\compteur\in\PfCListeBarresCalculs{%
+        \StrChar{#3}{\compteurcnt}[\PfCLettreB]%
+        \StrSubstitute[0]{\PfCLettreB}{*}{Départ}[\PfCLettreC]%
+        \xdef\PfCListeResultatsBarre{\PfCListeResultatsBarre \PfCLettreC,}%
+      }%
+      \setsepchar[*]{,*/}%
+      \readlist*\PfCListeResultats{\PfCListeResultatsBarre}%
+      \setsepchar{,}%
+      \readlist*\PfCListeCalculs{#2}%
+      \begin{NiceTabular}{ccc}[hvlines]
+        \xintFor* ##1 in{\xintSeq{1}{\PfCListeResultatslen}}\do{%
+          \xintifForFirst{\Block{2-1}{}}{\Block{2-1}{$\print{c:expand():topolynomial()}$}}&\Block{2-1}{\PfCListeResultats[##1,1]}&\Block{2-1}{\begin{CAS}
+              vars('x')
+              c = \PfCListeCalculs[##1]
+            \end{CAS}$\print{c}$}\\
+          &&\\
+        }%
+      \end{NiceTabular}
+    }{%
+      \foreachitem\compteur\in\PfCListeBarresCalculs{%
+        \StrChar{#3}{\compteurcnt}[\PfCLettreB]%
+        \StrSubstitute[0]{\PfCLettreB}{*}{Départ}[\PfCLettreC]%
+        \xdef\PfCListeResultatsBarre{\PfCListeResultatsBarre \num{\fpeval{\compteur}}/\PfCLettreC,}%
+        \StrSubstitute[0]{\compteur}{*}{\times}[\PfCListeResultatEtapeA]%
+        \StrSubstitute[0]{\PfCListeResultatEtapeA}{/}{\div}[\PfCListeResultatEtapeB]%
+        \StrSubstitute[0]{\PfCListeResultatEtapeB}{(}{\left(}[\PfCListeResultatEtapeC]%
+          \StrSubstitute[0]{\PfCListeResultatEtapeC}{)}{\right)}[\PfCListeResultatEtapeD]%
+        \xdef\PfCListeCalculsBarre{\PfCListeCalculsBarre $\PfCListeResultatEtapeD$,}%
+      }%
+      \setsepchar[*]{,*/}%
+      \readlist*\PfCListeResultats{\PfCListeResultatsBarre}%
+      \setsepchar{,}%
+      \readlist*\PfCListeCalculs{\PfCListeCalculsBarre}%
+      \begin{NiceTabular}{ccc}[hvlines]
+        \xintFor* ##1 in{\xintSeq{1}{\PfCListeResultatslen}}\do{%
+          \xintifForFirst{\Block{2-1}{}}{\Block{2-1}{\PfCListeResultats[\fpeval{##1-1},1]}}&\Block{2-1}{\PfCListeResultats[##1,2]}&\Block{2-1}{\PfCListeCalculs[##1]}\\
+          &&\\
+        }%
+      \end{NiceTabular}
+    }%
+  }%
+  \reademptyitems%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBarresCalculs.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBillard.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBillard.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBillard.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,259 @@
+%%%
+% Billard
+%%%
+\setKVdefault[ClesBillard]{Longueur=8cm,Largeur=5cm,Solution=false,Angle=70,Depart=0.5,Vrai=false}
+
+\NewDocumentCommand\Billard{o m}{%
+  \useKVdefault[ClesBillard]%
+  \setKV[ClesBillard]{#1}%
+  \ifboolKV[ClesBillard]{Solution}{%
+    \MPBillardSolution{#2}{\useKV[ClesBillard]{Depart}}{\useKV[ClesBillard]{Angle}}%
+    }{%
+      \MPBillard{#2}{\useKV[ClesBillard]{Depart}}{\useKV[ClesBillard]{Angle}}%
+    }%
+}%
+
+\def\MPBillard#1#2#3{%
+  \mplibcodeinherit{disable}%
+  \begin{Geometrie}[CoinHD={(\useKV[ClesBillard]{Longueur}+2cm,\useKV[ClesBillard]{Largeur}+3cm)}]
+    boolean Vrai;
+    Vrai:=\useKV[ClesBillard]{Vrai};
+    % On définit la liste des 25 lettres alphabétiques dans laquelle on choisit autant de lettres que la longueur du mot
+    % On a retiré la lettre Q pour des questions d'alignements esthétiques.
+    vardef ChoixLettre=
+    save Lettre,choixalea;
+    string Lettre;
+    choixalea=floor(uniformdeviate(26)+1);
+    if choixalea=1:
+    Lettre="A";
+    elseif choixalea=2:
+    Lettre="B";
+    elseif choixalea=3:
+    Lettre="C";
+    elseif choixalea=4:
+    Lettre="D";
+    elseif choixalea=5:
+    Lettre="E";
+    elseif choixalea=6:
+    Lettre="F";
+    elseif choixalea=7:
+    Lettre="G";
+    elseif choixalea=8:
+    Lettre="H";
+    elseif choixalea=9:
+    Lettre="I";
+    elseif choixalea=10:
+    Lettre="J";
+    elseif choixalea=11:
+    Lettre="K";
+    elseif choixalea=12:
+    Lettre="L";
+    elseif choixalea=13:
+    Lettre="M";
+    elseif choixalea=14:
+    Lettre="N";
+    elseif choixalea=15:
+    Lettre="O";
+    elseif choixalea=16:
+    Lettre="P";
+    elseif choixalea=17:
+    Lettre="O";
+    elseif choixalea=18:
+    Lettre="R";
+    elseif choixalea=19:
+    Lettre="S";
+    elseif choixalea=20:
+    Lettre="T";
+    elseif choixalea=21:
+    Lettre="U";
+    elseif choixalea=22:
+    Lettre="V";
+    elseif choixalea=23:
+    Lettre="W";
+    elseif choixalea=24:
+    Lettre="X";
+    elseif choixalea=25:
+    Lettre="Y";
+    elseif choixalea=26:
+    Lettre="Z";
+    fi;
+    Lettre
+    enddef;
+    % On crée un Quick Sort
+    def QS(expr ndeb,nfin)=
+    begingroup
+    save v,m,x;
+    if ndeb<nfin:
+      v:=l[cpt[ndeb]];
+      m:=ndeb;
+      for i=(ndeb+1) upto nfin:
+	if l[cpt[i]]<v:
+	  m:=m+1;
+	  x:=cpt[m];cpt[m]:=cpt[i];cpt[i]:=x;
+	fi
+      endfor;
+      x:=cpt[m];cpt[m]:=cpt[ndeb];cpt[ndeb]:=x;
+      QS(ndeb,m-1);
+      QS(m+1,nfin);
+    fi
+    endgroup
+    enddef;
+    % On définit le rectangle
+    pair M[],Co,Intermed;
+    M1=u*(1,2);
+    M2-M1=(\useKV[ClesBillard]{Longueur},0);
+    M3-M2=(0,\useKV[ClesBillard]{Largeur});
+    M4-M3=M1-M2;
+    Co=iso(M1,M3);
+    path rec,cote[];
+    rec=polygone(M1,M2,M3,M4);
+    cote1=segment(M1,M2);
+    cote2=segment(M2,M3);
+    cote3=segment(M3,M4);
+    cote4=segment(M4,M1);
+    trace rec;
+    pair Pt[],FauxPt[];
+    nbfaux=0;
+    l1=#2;
+    Pt[1]=point(l1) of rec;
+    angleref=#3;
+    if l1>3:
+    angledepart=90+angleref;
+    Pt[2]=demidroite(Pt[1],rotation(M1,Pt1,angledepart)) intersectionpoint (subpath(0,3) of rec);
+    dotlabel.lft(TEX(substring(0,1) of #1),Pt[1]);
+    elseif l1>2:
+    angledepart=180+angleref;
+    Pt[2]=demidroite(Pt[1],rotation(M4,Pt1,angledepart)) intersectionpoint ((subpath(3,4) of rec)--(subpath(0,2) of rec));
+    dotlabel.top(TEX(substring(0,1) of #1),Pt[1]);
+    elseif l1>1:
+    angledepart=angleref-90;
+    Pt[2]=demidroite(Pt[1],rotation(M3,Pt1,angledepart)) intersectionpoint ((subpath(2,4) of rec)--(subpath(0,1) of rec));
+    dotlabel.rt(TEX(substring(0,1) of #1),Pt[1]);
+    else:
+    angledepart=angleref;
+    Pt[2]=demidroite(Pt[1],rotation(M2,Pt1,angledepart)) intersectionpoint (subpath(1,4) of rec);
+    dotlabel.bot(TEX(substring(0,1) of #1),Pt[1]);
+    fi;
+    tourne=90;
+    numeric Blong;
+    BLong:=length #1;
+    % Détermination des points.
+    if Vrai:
+    for k=3 upto BLong:
+    Intermed:=symetrie(Pt[k-2],Pt[k-1],Pt[k-1]+M2-M3);
+    if (demidroite(1/1000[Pt[k-1],Intermed],Intermed) intersectiontimes rec)<>(-1,-1):
+    Pt[k]:=demidroite(1/1000[Pt[k-1],Intermed],Intermed) intersectionpoint rec;
+    else:
+    Intermed:=symetrie(Pt[k-2],Pt[k-1],Pt[k-1]+M1-M2);
+    Pt[k]:=demidroite(1/1000[Pt[k-1],Intermed],Intermed) intersectionpoint rec;
+    fi;
+    endfor;
+    else:
+    for k=3 upto BLong:
+    Intermed:=rotation(Pt[k-2],Pt[k-1],tourne);
+    if (demidroite(1/1000[Pt[k-1],Intermed],Intermed) intersectiontimes rec)<>(-1,-1):
+    Pt[k]:=demidroite(1/1000[Pt[k-1],Intermed],Intermed) intersectionpoint rec;
+    else:
+    Intermed:=rotation(Pt[k-2],Pt[k-1],-tourne);
+    Pt[k]:=demidroite(1/1000[Pt[k-1],Intermed],Intermed) intersectionpoint rec;
+    fi;
+    endfor;
+    fi;
+    % Ajout des faux points
+    path SPath[];
+    cpt[1]:=1;
+    cpt[BLong+1]:=BLong+1;
+    l[BLong+1]:=4;
+    for k=2 upto BLong:
+    SPath[k]=rec cutafter demidroite(Co,Pt[k]);
+    l[k]=arclength SPath[k];
+    l[k]:=arctime l[k] of rec;
+    cpt[k]:=k;
+    endfor;
+    QS(1,BLong+1);
+    for k=2 upto BLong+1:
+    if l[cpt[k]]-l[cpt[k-1]]>0.3:
+    nbfaux:=nbfaux+1;
+    FauxPt[nbfaux]=point(l[cpt[k-1]]+0.1) of rec;
+    nbfaux:=nbfaux+1;
+    FauxPt[nbfaux]=point(l[cpt[k]]-0.1) of rec;
+    fi;
+    endfor;
+    drawoptions();
+    % Tracés
+    drawarrow Pt[1]--(Pt[1]+1.5cm*unitvector(Pt[2]-Pt[1])) withpen pencircle scaled 1.25;
+    % Labelisation
+    for k=2 upto BLong:
+    if (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[1])<>(-1,-1):
+    dotlabel.bot(TEX(substring(k-1,k) of #1),Pt[k]);
+    elseif (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[2])<>(-1,-1):
+    dotlabel.rt(TEX(substring(k-1,k) of #1),Pt[k]);
+    elseif (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[3])<>(-1,-1):
+    dotlabel.top(TEX(substring(k-1,k) of #1),Pt[k]);
+    elseif (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[4])<>(-1,-1):
+    dotlabel.lft(TEX(substring(k-1,k) of #1),Pt[k]);
+    fi;
+    endfor;
+    for k=1 upto nbfaux:
+    if (demidroite(Co,FauxPt[k]) intersectiontimes cote[1])<>(-1,-1):
+    dotlabel.bot(TEX(ChoixLettre),FauxPt[k]);
+    elseif (demidroite(Co,FauxPt[k]) intersectiontimes cote[2])<>(-1,-1):
+    dotlabel.rt(TEX(ChoixLettre),FauxPt[k]);
+    elseif (demidroite(Co,FauxPt[k]) intersectiontimes cote[3])<>(-1,-1):
+    dotlabel.top(TEX(ChoixLettre),FauxPt[k]);
+    elseif (demidroite(Co,FauxPt[k]) intersectiontimes cote[4])<>(-1,-1):
+    dotlabel.lft(TEX(ChoixLettre),FauxPt[k]);
+    fi;
+    endfor;
+    picture Reponse;
+    Reponse=image(
+    trace segment((0,0),(7*BLong*mm-2mm,0)) dashed dashpattern(on5mm off2mm);
+    );
+    trace Reponse shifted((xpart(Co),5mm)-center Reponse);    
+  \end{Geometrie}%
+}%
+
+\def\MPBillardSolution#1#2#3{%
+  \mplibcodeinherit{enable}%
+  \begin{mplibcode}%
+    Figure(0,0,\useKV[ClesBillard]{Longueur}+2cm,\useKV[ClesBillard]{Largeur}+3cm);
+    trace rec;
+    % Tracés
+    drawarrow Pt[1]--(Pt[1]+1.5cm*unitvector(Pt[2]-Pt[1])) withpen pencircle scaled 1.25;
+    for k=1 upto BLong-1:
+    trace segment(Pt[k],Pt[k+1]);
+    endfor;
+    if Vrai=false:
+    for k=2 upto BLong-1:
+    trace codeperp(Pt[k-1],Pt[k],Pt[k+1],5);
+    endfor;
+    fi;
+    % Labelisation
+    if l1>3:
+    dotlabel.lft(TEX(substring(0,1) of #1),Pt[1]);
+    elseif l1>2:
+    dotlabel.top(TEX(substring(0,1) of #1),Pt[1]);
+    elseif l1>1:
+    dotlabel.rt(TEX(substring(0,1) of #1),Pt[1]);
+    else:
+    dotlabel.bot(TEX(substring(0,1) of #1),Pt[1]);
+    fi;
+    for k=2 upto BLong:
+    if (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[1])<>(-1,-1):
+    dotlabel.bot(TEX(substring(k-1,k) of #1),Pt[k]);
+    elseif (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[2])<>(-1,-1):
+    dotlabel.rt(TEX(substring(k-1,k) of #1),Pt[k]);
+    elseif (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[3])<>(-1,-1):
+    dotlabel.top(TEX(substring(k-1,k) of #1),Pt[k]);
+    elseif (demidroite(1/1000[Pt[k-1],Pt[k]],Pt[k]) intersectiontimes cote[4])<>(-1,-1):
+    dotlabel.lft(TEX(substring(k-1,k) of #1),Pt[k]);
+    fi;
+    endfor;
+    trace Reponse shifted((xpart(Co),5mm)-center Reponse);
+    % On affiche les lettres de la réponse.
+    for k=1 upto BLong:
+    label.top(TEX(substring(k-1,k) of #1),((xpart(Co),5mm)-center Reponse)+(k-1)*(7mm,0)+(2.5mm,0));
+    endfor;
+  \end{mplibcode}%
+  \mplibcodeinherit{disable}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBillard.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBonSortie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCBonSortie.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCBonSortie.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,95 @@
+%%%
+% Bon de sortie
+%%%
+\newcommand\BonSortieBandeau{%
+  Nom : \hfill Date : \hspace*{3cm}
+}
+
+\newtcolorbox{Sortie}{%
+  %Titre
+  colbacktitle=white,
+  fonttitle=\color{black}\Large\bfseries,
+  toptitle=2mm,
+  bottomtitle=2mm,
+  title={\BonSortieBandeau},
+  %%Cadre principal
+  enhanced,
+  nobeforeafter,
+  width=13.15cm,
+  height=8.8cm,
+  colback=white,
+  valign=top,
+  %Cadre bas
+  sidebyside,
+  righthand width=0.05\linewidth,
+}
+
+\setKVdefault[ClesSortie]{MemeEnonce=false}%
+
+\newcommand\BonSortieSmiley{%
+  \Huge
+  \begin{center}
+    \RKangry
+
+    \vspace{1em}
+    
+    \RKsad
+
+    \vspace{1em}
+    
+    \RKsmallsmile
+    
+    \vspace{1em}
+
+    \RKbigsmile
+  \end{center}
+}
+
+\NewDocumentCommand\BonSortie{o m m m m}{%
+  \clearpage%
+  \useKVdefault[ClesSortie]%
+  \setKV[ClesSortie]{#1}%
+  \begin{tikzpicture}[remember picture, overlay]
+    \draw[dashed] (current page.north) to (current page.south);
+    \draw[dashed] (current page.west) to (current page.east);
+    \coordinate[xshift=7.425cm,yshift=-5.25cm] (A) at (current page.north west);
+    \coordinate[xshift=-7.425cm,yshift=-5.25cm] (B) at (current page.north east);
+    \coordinate[xshift=7.425cm,yshift=5.25cm] (C) at (current page.south west);
+    \coordinate[xshift=-7.425cm,yshift=5.25cm] (D) at (current page.south east);
+    \ifboolKV[ClesSortie]{MemeEnonce}{%
+      \foreach\i\in in {A,B,C,D}{%
+        \node (\i1) at (\i) {\begin{Sortie}
+            #2
+            \tcblower
+            \BonSortieSmiley
+          \end{Sortie}
+        };
+      }
+    }{%
+      \node (A1) at (A) {\begin{Sortie}
+          #2
+          \tcblower
+          \BonSortieSmiley
+        \end{Sortie}
+      };
+      \node (B1) at (B) {\begin{Sortie}
+          #3
+          \tcblower
+          \BonSortieSmiley
+        \end{Sortie}
+      };
+      \node (C1) at (C) {\begin{Sortie}
+          #4
+          \tcblower
+          \BonSortieSmiley
+        \end{Sortie}
+      };
+      \node (D1) at (D) {\begin{Sortie}
+          #5
+          \tcblower
+          \BonSortieSmiley
+        \end{Sortie}
+      };
+    }
+  \end{tikzpicture}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCBonSortie.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,347 @@
+% Gestion de l'aléatoire (pour la CAN)
+\newcommand\ChoixAlea[4][]{%
+  \ifx\bla#1\bla%
+  \xdef#4{\fpeval{randint(#2,#3)}}%
+  \else%
+  \xdef#4{\fpeval{round(randint(#2,#3)+rand(),#1)}}%
+  \fi%
+}%
+
+\def\VariableAlea#1#2{%
+  \xdef#1{\fpeval{#2}}%
+}%
+
+% On bloque la graine de fabrication des nombres aléatoires.
+\ExplSyntaxOn
+\cs_new_eq:NN \PfCGraineAlea \sys_gset_rand_seed:n
+\ExplSyntaxOff
+
+%%%
+% Course aux nombres
+%%%
+
+% https://tex.stackexchange.com/questions/642775/when-displaying-a-datatool-database-with-dtldisplaylongdb-how-to-obtain-a-hor
+% Patch éventuel à ajouter
+%\makeatletter
+%\expandafter\patchcmd\expandafter{\csname\string\DTLdisplaylongdb\endcsname}%
+%         {\@dtl at resetdoamp\dtldisplaystarttab}%
+%         {\dtldisplaystarttab\@dtl at resetdoamp}%
+%         {\message{Patching succeeded.}}%
+%         {\message{Patching failed.}}%
+%\makeatother
+
+\setKVdefault[ClesMathAlea]{NbQ=5,ChoixTables=2-9,ValeurMax=20,Classique,Trou=false,Melange=false,Multiple=2,Theme=false}%
+\defKV[ClesMathAlea]{Trous=\setKV[ClesMathAlea]{Classique=false}\setKV[ClesMathAlea]{Trou}}%
+\defKV[ClesMathAlea]{Melanges=\setKV[ClesMathAlea]{Classique=false}\setKV[ClesMathAlea]{Melange}}%
+
+\newcommand\MathAlea[2][]{%
+  \useKVdefault[ClesMathAlea]%
+  \setKV[ClesMathAlea]{#1}%
+  \input{#2}%
+}%
+
+\newcommand\CourseNombreTotalQuestions[1]{%
+  \setKV[ClesCN]{TotalQ=#1}%
+  \xdef\CNfoo{}%
+  \xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
+    \xdef\CNfoo{\CNfoo ##1,}%
+  }%
+}%
+
+\setKVdefault[ClesCN]{%
+  Stretch=2.5,%Elasticité du tableau
+  NbQ=5,%Nb de questions à poser
+  RAZ=false,%Pour remettre à zéro le compteur des questions
+  Ordre=false,%Pour mettre toutes les questions dans l'ordre des numéros
+  Exercice=false,%Pour utiliser l'aléatoire des questions mais sans habillage particulier, autre que des \item
+  Perso=false,%Pour utiliser un choix personnel des questions
+  Lecture=false,%Pour différencier avec une lecture automatisée sur les numéros de fichiers
+  Maitre=false,%Pour indiquer qu'on prend en compte ou pas les sous-dossiers
+  Nom=false,%Pour afficher le nom des fichiers utilisés.
+  Theme=false,%Pour afficher le theme travaillé dans les fichiers utilisés (à retravailler).
+  AMC=false,%
+  Multi=false,%
+  CAN=false,%Pour compléter la case réponse.
+  CoefQ=0.4,%Coefficient multiplication de \linewidth pour la colonne question
+  CoefR=0.35,%Coefficient multiplication de \linewidth pour la colonne réponse
+  CoefJ=0.15,%Coefficient multiplication de \linewidth pour la colonne jury
+}%
+\defKV[ClesCN]{Liste=\setKV[ClesCN]{Perso=true}\setKV[ClesCN]{Lecture}}%
+\defKV[ClesCN]{Dossier=\setKV[ClesCN]{Lecture}}%
+\defKV[ClesCN]{Debut=\setKV[ClesCN]{RAZ}}%
+\setsepchar[*]{,*/}%
+\readlist*\ListeMotsCAN{La moitié de /2,Le double de /1,Le triple de /1, Le tiers de /3,Le nombre dix fois plus grand que /1,Le nombre cent fois plus grand que /1,Le nombre mille fois plus grand que /1,Le nombre dix fois plus petit que /10,Le nombre cent fois plus petit que /100,Le nombre mille fois plus petit que /1000}%
+\readlist*\ListeMulAstucieuxCAN{50/2,25/4,20/5}%
+\readlist*\ListeLieuxObjetsCAN{boulangerie/pains au chocolat/un pain au chocolat,boulangerie/cookies/un cookie,boulangerie/brioches/une brioche,piscine/entrées/une entrée,boucherie/saucisses/une saucisse,boucherie/cuisses de poulet/une cuisse de poulet}%
+\readlist*\ListeNomsCAN{Aude/Elle/d'Aude,Bernard/Il/de Bernard,Céline/Elle/de Céline,Daniel/Il/de Daniel,\'Elise/Elle/d'\'Elise,Fabien/Il/de Fabien,Gérard/Il/de Gérard,Hélène/Elle/d'Hélène,Ilies/Il/d'Ilies,Jasmine/Elle/de Jasmine,Kylian/Il/de Kylian,Laurent/Il/de Laurent,Mathilde/Elle/de Mathilde,Nina/Elle/de Nina,Octave/Il/d'Octave,Philippe/Il/de Philippe,Joachim/Il/de Joachim,Thérèse/Elle/de Thérèse,Nawel/Elle/de Nawel,Alexandre/Il/d'Alexandre,Maxence/Il/de Maxence,Sophie/Elle/de Sophie,Christophe/Il/de Christophe,Myriam/Elle/de Myriam,Nathalie/Elle/de Nathalie}%
+\readlist*\ListeComposantStatCAN{voitures/un garage/Cross-over/Utilitaires/Berlines,fruits/une corbeille/Pommes/Oranges/Bananes,vêtements/une armoire/Pulls/T-shirts/Chemises,couverts/un tiroir/Fourchettes/Couteaux/Cuillères}%
+\readlist*\ListeObjetsSymbolesCAN{fleurs/96,ciseaux/36,crayons/47,enveloppes/41}%uniquement avec pifont
+\setsepchar{,}%
+\readlist*\ListeObjetsCAN{bonbons,billes,jouets,fruits,biscuits,gâteaux,pommes,poires,pains au chocolat,cookies,croissants,muffins,brioches,saucisses,cuisses de poulet}%
+\readlist*\ListePetitsObjetsCAN{bonbons,billes,biscuits,gommes,clous,vis}
+\readlist*\ListeFruitsCAN{pommes,poires,abricots,cerises,fraises,framboises,noix,pêches,nectarines,myrtilles}
+\readlist*\ListeSommetsCAN{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
+
+\newcommand\ExtraitPetitsObjets[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListePetitsObjetsCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListePetitsObjetsCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \readlist*\PetitsObjetsMelanges{\faa}%
+}%
+
+\newcommand\ExtraitObjets[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListeObjetsCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListeObjetsCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \readlist*\ObjetsMelanges{\faa}%
+}%
+
+\newcommand\ExtraitSymboles[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListeObjetsSymbolesCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListeObjetsSymbolesCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\SymbolesMelanges{\faa}%
+  \setsepchar{,}%
+}%
+
+\newcommand\ExtraitSommet[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListeSommetsCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListeSommetsCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \readlist*\SommetsMelanges{\faa}%
+  \readlist*\PtAlea{\faa}%
+}%
+
+\newcommand\ExtraitFruit[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListeFruitsCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListeFruitsCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \readlist*\FruitsMelanges{\faa}%
+}%
+
+\newcommand\ExtraitNom[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListeNomsCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListeNomsCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\NomsMelanges{\faa}%
+  \setsepchar{,}%
+}%
+
+\newcommand\ExtraitElements[1]{%
+  \xdef\CANSGFoo{}%
+  \foreachitem\compteur\in\ListeComposantStatCAN{%
+    \xdef\CANSGFoo{\CANSGFoo \ListeComposantStatCAN[\compteurcnt],}%
+  }%
+  \MelangeListe{\CANSGFoo}{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ElementsMelanges{\faa}%
+  \setsepchar{,}%
+}%
+
+\newcounter{CNNumQ}%
+\setcounter{CNNumQ}{1}%
+
+\newcommand\CANNew{%
+  \textcolor{Crimson}{\faCopy}%
+}%
+
+\newread\RecupNbFichiers
+\newread\RecupSSDossiers
+\newread\zzz
+\def\zzpar{\par}%
+
+\makeatletter
+\def\app at exe{\write18}
+% Recuperer les sous-dossiers
+\def\RecupererSousDossiers#1{%#1 est le dossier contenant les fichiers can classés en sous-dossier
+  \app at exe{rm -f RecapSSDossier.tmp ; ls -1 -I "*.tex" #1 > RecapSSDossier.tmp}%
+  \immediate\openin\zzz=RecapSSDossier.tmp
+  \loop%
+  \read\zzz to \tmp%
+  \ifx\tmp\zzpar\else%
+  \xdef\CNFOOSSDossiers{\CNFOOSSDossiers \expandafter\detokenize\expandafter{\tmp},}%
+  \fi%
+  \ifeof\zzz\else%
+  \repeat%
+  \setsepchar{,}\ignoreemptyitems
+  \readlist*\ListeSSDossiers{\CNFOOSSDossiers}
+}
+
+\def\RecupererFichierTeXSSDossier#1#2{%
+  \openin\zzz="|ls #1/#2/*.tex"%
+  \loop%
+  \read\zzz to \tmp%
+  \ifx\tmp\zzpar\else%
+  \xdef\CNFOO{\CNFOO \expandafter\detokenize\expandafter{\tmp},}%
+  \fi%
+  \ifeof\zzz\else%
+  \repeat%
+}
+
+\def\RecupererFichierTeXDossier#1{%
+  \xdef\CNFOO{}%
+  \openin\zzz="|ls #1/*.tex"
+  \loop%
+  \read\zzz to \tmp%
+  \ifx\tmp\zzpar\else%
+  \xdef\CNFOO{\CNFOO \expandafter\detokenize\expandafter{\tmp},}%
+  \fi%
+  \ifeof\zzz\else%
+  \repeat%
+}
+
+\def\DefinirListeFichiers{%
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\ListeFichiers{\CNFOO}%
+}
+
+\def\RecupererFichierTeXAllSSDossier#1{%
+  \RecupererSousDossiers{#1}%
+  \foreachitem\compteur\in\ListeSSDossiers{\RecupererFichierTeXSSDossier{#1}{\ListeSSDossiers[\compteurcnt]}}%
+  \DefinirListeFichiers%
+}
+
+\def\RecupererFichierTeXAllDossier#1{%
+  \RecupererFichierTeXDossier{#1}%
+  \DefinirListeFichiers%
+}
+
+\def\RecupererFichierTeXComplet#1{%
+  \RecupererFichierTeXDossier{#1}%
+  \RecupererSousDossiers{#1}%
+  \foreachitem\compteur\in\ListeSSDossiers{\RecupererFichierTeXSSDossier{#1}{\ListeSSDossiers[\compteurcnt]}}%
+  \DefinirListeFichiers%
+}
+
+\def\RecupererFichierTeXSSDossierPerso#1{%
+  \openin\zzz="|ls #1/*.tex"
+  \loop%
+  \read\zzz to \tmp%
+  \ifx\tmp\zzpar\else%
+  \xdef\CNFOO{\CNFOO \expandafter\detokenize\expandafter{\tmp},}%
+  \fi%
+  \ifeof\zzz\else%
+  \repeat%
+}
+
+\makeatother
+
+\newcommand\CNTheme[1]{}%
+\newcommand\CNReponse{}%
+
+\newlength{\PfCLargeurQuestion}%
+\newlength{\PfCLargeurReponse}%
+\newlength{\PfCLargeurJury}%
+
+\NewDocumentCommand\CourseNombre{o m}{%
+  \useKVdefault[ClesCN]%
+  \setKV[ClesCN]{#1}%
+  \ifboolKV[ClesCN]{Theme}{\renewcommand\CNTheme[1]{{\ttfamily Thème : ##1}\par}}{}%
+  \ifboolKV[ClesCN]{RAZ}{%
+    \setcounter{CNNumQ}{\useKV[ClesCN]{Debut}}%
+  }{}%
+  \setKV[ClesMathAlea]{NbQ=1}%
+  \xdef\CNFOOSSDossiers{}%
+  \xdef\CNFOO{}%
+  \ifboolKV[ClesCN]{Lecture}{%
+    \ifboolKV[ClesCN]{Perso}{%
+      %      % Ici \useKV[ClesCN]{Liste}
+      \xdef\CNFOOListePerso{\useKV[ClesCN]{Liste}}%
+      %      % OK -> Là, normalement, c'est la liste des dossiers choisis par l'utilisateur : \CNFOOListePerso
+      \setsepchar{,}%
+      \readlist*\ListeDesSSDossiersPerso{\CNFOOListePerso}%
+      %      % \par OK -> Là, normalement, c'est la liste des dossiers perso sous forme de liste : \showitems\ListeDesSSDossiersPerso[]%
+      \foreachitem\compteur\in\ListeDesSSDossiersPerso{\RecupererFichierTeXSSDossierPerso{\ListeDesSSDossiersPerso[\compteurcnt]}}%
+      \DefinirListeFichiers%
+      %      % \par OK -> Là, enfin, normalement, c'est la liste des fichiers contenus dans les dossiers perso :
+      %      % \showitems\ListeFichiers[]
+    }{%
+      \ifboolKV[ClesCN]{Maitre}{%
+        %        % On récupère tous les fichiers can dans les sous-dossiers
+        %        % et on construit une liste \ListeFichiers contenant les chemins des fichiers considérés.
+        \RecupererFichierTeXComplet{\useKV[ClesCN]{Dossier}}%
+      }{%
+        %        % Là
+        %        % On récupère seulement les fichiers can de ce dossier
+        %        % et on consruit une liste \ListeFichiers contenant les chemins des fichiers considérés.
+        \RecupererFichierTeXAllDossier{\useKV[ClesCN]{Dossier}}%
+      }%
+    }%
+    %    % On crée la liste du nombre total de questions
+    \xdef\CNfooListe{}%
+    \xintFor* ##1 in{\xintSeq{1}{\ListeFichierslen}}\do{%
+      \xdef\CNfooListe{\CNfooListe ##1,}%
+    }%
+    %    % \par OK -> normalement, on a la liste du nombre de questions : \CNfooListe
+    % On règle maintenant les dimensions nécessaires.
+    % \ifboolKV[ClesCN]{CAN}{
+    \setlength{\PfCLargeurQuestion}{\useKV[ClesCN]{CoefQ}\linewidth}\setlength{\PfCLargeurReponse}{\useKV[ClesCN]{CoefR}\linewidth}\setlength{\PfCLargeurJury}{\useKV[ClesCN]{CoefJ}\linewidth}%
+    %    % On affiche les questions :
+    \ifboolKV[ClesCN]{Ordre}{%
+      %        % soit dans un exercice
+      \ifboolKV[ClesCN]{Exercice}{%
+        %          % Attention le style de l'environnement est à choisir par l'utilisateur
+        \xintFor* ##1 in {\xintSeq{1}{\ListeFichierslen}}\do{%
+        \item\input{\ListeFichiers[##1]}%
+        }%
+      }{% Soit toutes les questions au format course
+        \renewcommand{\arraystretch}{\useKV[ClesCN]{Stretch}}%
+        \begin{longtable}{|c|p{\PfCLargeurQuestion}|>{\centering\arraybackslash}p{\PfCLargeurReponse}|p{\PfCLargeurJury}|}%
+          \hhline{~---}%
+          \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering\'Enoncé&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+          \hline%
+          \endhead%
+          \xintFor* ##1 in {\xintSeq{1}{\ListeFichierslen}}\do{%
+            \ttfamily{\theCNNumQ}\stepcounter{CNNumQ}&\xdef\CNReponse{}\input{\ListeFichiers[##1]}\ifboolKV[ClesCN]{Nom}{\par\hfill\footnotesize\ttfamily\ListeFichiers[##1]}{}&\ifboolKV[ClesCN]{CAN}{\ifboolKV[ClesCN]{Nom}{\multirow{2}{*}{\CNReponse}}{\multirow{1}{*}{\CNReponse}}}{}&\\%
+            \hline%
+          }%
+        \end{longtable}%
+        \renewcommand{\arraystretch}{1}%
+      }%
+    }{%
+      % On prévient l'utilisateur si le nb de questions est inférieur à NbQ
+      \xintifboolexpr{\ListeFichierslen<\useKV[ClesCN]{NbQ}}{%
+        \faExclamationCircle~Le nombre maximal de questions disponibles est inférieur au nombre de questions à afficher. Modifier la clé {\ttfamily NbQ} ou ajouter des questions dans le(s) répertoire(s).%
+      }{%%On choisit NbQ questions parmi la liste de fichiers
+        \MelangeListe{\CNfooListe}{\useKV[ClesCN]{NbQ}}%
+        \setsepchar{,}\ignoreemptyitems%
+        \readlist*\ListeCNQuestions{\faa}
+        \ifboolKV[ClesCN]{Exercice}{%
+          \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesCN]{NbQ}}}\do{%
+          \item\xdef\Numerodelaquestionaposer{\ListeCNQuestions[##1]}\input{\ListeFichiers[\Numerodelaquestionaposer]}%
+          }%
+        }{% On les affiche
+          \renewcommand{\arraystretch}{\useKV[ClesCN]{Stretch}}%
+          \begin{longtable}{|c|p{\PfCLargeurQuestion}|>{\centering\arraybackslash}p{\PfCLargeurReponse}|p{\PfCLargeurJury}|}%
+            \hhline{~---}%
+            \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering\'Enoncé&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+            \hline%
+            \endhead%
+            \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesCN]{NbQ}}}\do{%
+              \ttfamily{\theCNNumQ}\stepcounter{CNNumQ}&\xdef\CNReponse{}\xdef\Numerodelaquestionaposer{\ListeCNQuestions[##1]}\input{\ListeFichiers[\Numerodelaquestionaposer]}\ifboolKV[ClesCN]{Nom}{\par\hfill\footnotesize\ttfamily\ListeFichiers[\Numerodelaquestionaposer]}{}&\ifboolKV[ClesCN]{CAN}{\CNReponse}{}&\\
+              \hline
+            }%
+          \end{longtable}%
+          \renewcommand{\arraystretch}{1}%
+        }%
+      }%
+    }%
+  }{%
+    \input{#2}
+  }%
+}%
+% fin course aux nombres
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCAN.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,143 @@
+%%%
+% Calculatrice
+%%%
+%https://tex.stackexchange.com/questions/290321/mimicking-a-calculator-inputs-and-screen
+\definecolor{lightorange}{rgb}{0.9,0.4,0}%
+\definecolor{lightestorange}{rgb}{1,0.8,0.5}%
+\definecolor{darkorange}{rgb}{0.2,0.1,0}%
+
+\colorlet{blackened}{black!90!white}%
+\colorlet{blackish}{black!70!white}%
+\colorlet{greyish}{black!60!white}%
+\colorlet{whiteish}{white}%
+\colorlet{orangeish}{yellow!90!red}%
+\colorlet{greenish}{green!16!gray}%
+\colorlet{redish}{red!80!black}%
+
+\tcbset{calbackground/.style={
+    enhanced,
+    leftright skip=0.25cm,beforeafter skip=0pt,
+    toptitle=0mm,bottomtitle=0mm,
+    right=2mm,left=2mm,
+    top=1pt,
+    bottom=0.25cm,
+    boxsep=0pt,
+    boxrule=0mm,
+    sharp corners,
+    sidebyside,
+    sidebyside gap=2mm,
+    lefthand ratio=0.6,
+    bicolor,
+    colback=black!10!white,
+    colbacklower=greenish,
+    colframe=white,
+    autoparskip,
+  }}%
+
+\newtcbox{\KY}[1][]{
+  enhanced,
+  on line,
+  arc=2pt,outer arc=2pt,
+  boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
+  boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
+  interior style={top color=blackish,bottom color=blackened},
+  colframe=greyish,
+  width=2.5em,
+  tcbox width=forced center,
+  equal height group=K,
+  valign=center,
+  fontupper=\footnotesize\sffamily,
+  coltext=orangeish,
+  before upper=\vrule width 0pt height 2ex depth 1ex\relax,
+}%
+
+\newtcbox{\KYm}[1][]{
+  enhanced,
+  on line,
+  arc=2pt,outer arc=2pt,
+  boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
+  boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
+  interior style={top color=blackish,bottom color=blackened},
+  colframe=greyish,
+  width=2.5em,
+  tcbox width=forced center,
+  equal height group=K,
+  valign=center,
+  fontupper=\footnotesize\sffamily,
+  coltext=orangeish,
+  before upper=\vrule width 0pt height 2ex depth 1ex\relax$,
+  after upper=$,
+}%
+
+\newtcbox{\KN}{
+  enhanced,
+  on line,
+  arc=2pt,outer arc=2pt,
+  boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
+  boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
+  interior style={top color=blackish,bottom color=blackened},
+  colframe=greyish,
+  width=1.5em,
+  tcbox width=forced center,
+  equal height group=K,
+  valign=center,
+  fontupper=\footnotesize\sffamily,
+  coltext=whiteish,
+  before upper=\vrule width 0pt height 2ex depth 1ex\relax,
+}%
+
+\newtcolorbox{calc}[1][]{%
+  enhanced,bicolor,
+  boxsep=0pt,
+  boxrule=0pt,
+  top=6pt,bottom=0pt,left=6pt,right=0pt,
+  sharp corners,
+  frame empty,
+  colback=black!10,
+  colbacklower=greenish,
+  sidebyside,
+  sidebyside align=top seam,
+  sidebyside gap=0pt,
+  righthand width=50.7mm,
+  before lower=\begin{tabular}{@{}l@{}},
+  after lower=\end{tabular},
+  overlay={\node[inner sep=0pt, outer sep=0pt, text height=5pt, text
+    depth=1pt, text width=50.7mm, fill=greenish, anchor=north
+    east, font=\sffamily\tiny\bfseries, align=flush right]
+    at (frame.north east) {#1};}
+}
+
+\def\MPCalculatrice#1#2#3{
+  % #1 Calcul %2 r\'eponse
+  \ifluatex
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    input PfCCalculatrice;
+    LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};
+    LCD(#1)(#2)(#3);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={input PfCCalculatrice;LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};}]
+    LCD(#1)(#2)(#3);    
+  \end{mpost}
+  \fi
+}
+
+\setKVdefault[ClesCalculatrice]{Ecran=false,NbLignes=0,BL=0.775,Largeur=120}
+
+\newcommand\Calculatrice[2][]{%
+  \setstackgap{L}{\useKV[ClesCalculatrice]{BL}\baselineskip}%
+  \useKVdefault[ClesCalculatrice]%
+  \setKV[ClesCalculatrice]{#1}%
+  \ifboolKV[ClesCalculatrice]{Ecran}{%
+    \setsepchar[*]{,*/}%
+    \readlist\ListeCalc{#2}%
+    \MPCalculatrice{\ListeCalc[1,1]}{\ListeCalc[1,2]}{\useKV[ClesCalculatrice]{NbLignes}}%
+  }{%
+    \setsepchar[*]{,*/}%
+    \readlist\ListeCalc{#2}%
+    \foreachitem\compteur\in\ListeCalc{\xintifboolexpr{\listlen\ListeCalc[\compteurcnt]==2}{\Longstack{{\tiny\ListeCalc[\compteurcnt,1]} \KN{\ListeCalc[\compteurcnt,2]}}}{\Longstack{{\tiny\ListeCalc[\compteurcnt,2]} \KY{\ListeCalc[\compteurcnt,3]}}}%
+    }%
+  }%
+  \setstackgap{L}{\baselineskip}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculatrice.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsCroises.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsCroises.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsCroises.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,186 @@
+%%%
+% Calculs Croises
+%%%
+\setKVdefault[CalculsCroises]{Largeur=20pt,Solution=false,Inverse=false,Creation=false,Graines=false,Vide=false,Couleur=LightGray,Negatifs=false,Aide=false}
+\defKV[CalculsCroises]{Graine=\setKV[CalculsCroises]{Graines}}%
+\defKV[CalculsCroises]{ListeNombres=\setKV[CalculsCroises]{Aide}}%
+
+\newlength\PfCCalculsCroises%
+\NewDocumentCommand\CalculsCroises{o m}{%
+  \useKVdefault[CalculsCroises]%
+  \savecomparemode%
+  \comparestrict%
+  \setKV[CalculsCroises]{#1}%
+  \colorlet{PfCCouleurCC}{\useKV[CalculsCroises]{Couleur}}%
+  \setlength{\PfCCalculsCroises}{\useKV[CalculsCroises]{Largeur}+\tabcolsep}%
+  \ifboolKV[CalculsCroises]{Inverse}{\setKV[CalculsCroises]{Solution}}{}%
+  \ifboolKV[CalculsCroises]{Creation}{%
+    \ifboolKV[CalculsCroises]{Graines}{\PfCGraineAlea{\useKV[CalculsCroises]{Graine}}}{}%
+    \ifboolKV[CalculsCroises]{Negatifs}{%
+      \xdef\PfCCCFoo{-1,-2,-3,-4,-5,-6,-7,-8,-9}%
+    }{%
+      \xdef\PfCCCFoo{1,2,3,4,5,6,7,8,9}%
+    }%
+    \MelangeListe{\PfCCCFoo}{9}%
+    \setsepchar{,}%
+    \readlist*\PfCListeCCNb{\faa}%
+    \readlist*\PfCListeCCOp{#2}%
+    \xdef\PfCCCfoo{\useKV[CalculsCroises]{ListeNombres}}%
+    \readlist*\PfCListeCCAide{\PfCCCfoo}%
+    \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
+      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[1]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[1]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[1]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[1]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[1]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[2]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[2]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[2]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[3]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[3]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[3]}}{}%
+            }%
+          }{}%
+        }}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[1]\PfCListeCCNb[2]\PfCListeCCOp[2]\PfCListeCCNb[3]}}}}\\
+      \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[3]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[3]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[5]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[5]$}}\\
+      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[4]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[4]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[4]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[5]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[5]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[5]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[6]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[6]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[6]}}{}%
+            }%
+          }{}%
+        }}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[4]\PfCListeCCOp[6]\PfCListeCCNb[5]\PfCListeCCOp[7]\PfCListeCCNb[6]}}}}\\
+      \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[8]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[8]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[9]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[9]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}\\
+      \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[7]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[7]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[7]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[11]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[11]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[8]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[8]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[8]}}{}%
+            }%
+          }{}%
+        }}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[9]}}{%
+          \ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCNb[9]==\PfCListeCCAide[##1]}{\num{\PfCListeCCNb[9]}}{}%
+            }%
+          }{}%
+        }}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[7]\PfCListeCCOp[11]\PfCListeCCNb[8]\PfCListeCCOp[12]\PfCListeCCNb[9]}}}}\\
+      \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[3]\PfCListeCCNb[4]\PfCListeCCOp[8]\PfCListeCCNb[7]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[2]\PfCListeCCOp[4]\PfCListeCCNb[5]\PfCListeCCOp[9]\PfCListeCCNb[8]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[3]\PfCListeCCOp[5]\PfCListeCCNb[6]\PfCListeCCOp[10]\PfCListeCCNb[9]}}}}\\
+      \CodeAfter
+      \tikz\draw (1-|1) rectangle (6-|6);
+      \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+        \tikz\draw (1-|##1) -- (6-|##1);
+      }%
+      \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+        \tikz\draw (##1-|1) -- (##1-|6);
+      }%
+    \end{NiceTabular}
+  }{%
+    \ifboolKV[CalculsCroises]{Vide}{%
+      \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block[fill=black]{}{}&\Block{}{}&\Block[fill=black]{}{}&\Block{}{}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block[fill=black]{}{}&\Block{}{}&\Block[fill=black]{}{}&\Block{}{}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{}\\
+        \CodeAfter
+        \tikz\draw (1-|1) rectangle (6-|6);
+        \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+          \tikz\draw (1-|##1) -- (6-|##1);
+        }%
+        \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+          \tikz\draw (##1-|1) -- (##1-|6);
+        }%
+      \end{NiceTabular}        
+    }{%
+      \readlist*\PfCListeCCOp{#2}%
+      \xdef\PfCCCfoo{\useKV[CalculsCroises]{ListeNombres}}%
+      \readlist*\PfCListeCCAide{\PfCCCfoo}%
+      \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[1]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[1]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[1]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[3]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[3]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[3]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[5]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[5]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[5]}}{}%
+            }%
+          }{}%
+}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[2]\PfCListeCCOp[3]\PfCListeCCOp[4]\PfCListeCCOp[5]}}}}\\
+        \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[8]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[8]$}}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[9]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[9]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[9]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[11]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[11]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[11]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[13]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[13]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[13]}}{}%
+            }%
+          }{}%
+}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[9]\PfCListeCCOp[10]\PfCListeCCOp[11]\PfCListeCCOp[12]\PfCListeCCOp[13]}}}}\\
+        \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[14]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[14]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[15]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[15]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[16]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[16]$}}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[17]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[17]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[17]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[18]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[18]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[19]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[19]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[19]}}{}%
+            }%
+          }{}%
+}}&\StrCompare{\PfCListeCCOp[20]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[20]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[21]}}{\ifboolKV[CalculsCroises]{Aide}{%
+            \xintFor* ##1 in{\xintSeq{1}{\PfCListeCCAidelen}}\do{%
+              \xintifboolexpr{\PfCListeCCOp[21]==\PfCListeCCAide[##1]}{\num{\PfCListeCCOp[21]}}{}%
+            }%
+          }{}%
+}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[17]\PfCListeCCOp[18]\PfCListeCCOp[19]\PfCListeCCOp[20]\PfCListeCCOp[21]}}}}\\
+        \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[6]\PfCListeCCOp[9]\PfCListeCCOp[14]\PfCListeCCOp[17]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[3]\PfCListeCCOp[7]\PfCListeCCOp[11]\PfCListeCCOp[15]\PfCListeCCOp[19]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[5]\PfCListeCCOp[8]\PfCListeCCOp[13]\PfCListeCCOp[16]\PfCListeCCOp[21]}}}}\\
+        \CodeAfter
+        \tikz\draw (1-|1) rectangle (6-|6);
+        \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+          \tikz\draw (1-|##1) -- (6-|##1);
+        }%
+        \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+          \tikz\draw (##1-|1) -- (##1-|6);
+        }%
+      \end{NiceTabular}
+    }%
+  }%
+  \restorecomparemode%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalculsCroises.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,361 @@
+%%%
+% Calisson
+%%%
+\setKVdefault[Calisson]{Taille=3,Solution=false,Rayon=5cm,Couleur=red}%
+
+\def\UpdatetoksCalissong#1\nil{\addtotok\tokcalissonlistetracesg{,"#1"}}%
+\def\UpdatetoksCalissongDepart#1\nil{\addtotok\tokcalissonlistetracesg{"#1"}}%
+\def\UpdatetoksCalissond#1\nil{\addtotok\tokcalissonlistetracesd{,"#1"}}%
+\def\UpdatetoksCalissondDepart#1\nil{\addtotok\tokcalissonlistetracesd{"#1"}}%
+
+\newtoks\tokcalissonlistetracesg
+\newtoks\tokcalissonlistetracesd
+
+\NewDocumentCommand\Calisson{o m}{%
+  \useKVdefault[Calisson]%
+  \setKV[Calisson]{#1}%
+  % Essai de cassage du code
+  \tokcalissonlistetracesg{}%
+  \tokcalissonlistetracesd{}%
+  %Partie Gauche -> ok
+  \StrLeft{0#2}{2}[\Depart]%
+  \StrGobbleLeft{0#2}{2}[\Reste]%
+  \expandafter\UpdatetoksCalissongDepart\Depart0\nil%
+  \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}-1}}}\do{%
+    \StrLeft{0\Reste}{3}[\Depart]%
+    \expandafter\UpdatetoksCalissong\Depart\nil%
+    \StrGobbleLeft{0\Reste}{3}[\Reste]%
+  }%
+  \StrLeft{00\Reste}{3}[\Depart]%
+  \StrGobbleLeft{00\Reste}{3}[\Reste]%
+  \expandafter\UpdatetoksCalissong\Depart\nil%
+  % fin premiere ligne
+  \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}-1}}}\do{%
+    \StrLeft{\Reste}{2}[\Depart]%
+    \expandafter\UpdatetoksCalissong\Depart0\nil%
+    \StrGobbleLeft{\Reste}{2}[\Reste]%
+    \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}-1}}}\do{%
+      \StrLeft{\Reste}{3}[\Depart]%
+      \expandafter\UpdatetoksCalissong\Depart\nil%
+      \StrGobbleLeft{\Reste}{3}[\Reste]%
+    }%
+    \StrLeft{00\Reste}{3}[\Depart]%
+    \expandafter\UpdatetoksCalissong\Depart\nil%
+    \StrGobbleLeft{00\Reste}{3}[\Reste]%
+  }%
+  % fin des lignes intermédiaires
+  \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}}}}\do{%
+    \StrLeft{\Reste}{2}[\Depart]%
+    \expandafter\UpdatetoksCalissong\Depart0\nil%
+    \StrGobbleLeft{\Reste}{2}[\Reste]
+    \xintifboolexpr{##1>\fpeval{\useKV[Calisson]{Taille}-1}}{}{%
+      \xintFor* ##2 in {\xintSeq{\fpeval{\useKV[Calisson]{Taille}-##1}}{1}}\do{%
+        \StrLeft{\Reste}{3}[\Depart]%
+        \expandafter\UpdatetoksCalissong\Depart\nil%
+        \StrGobbleLeft{\Reste}{3}[\Reste]%
+      }%
+    }%
+  }%
+  %Liste gauche : \the\tokcalissonlistetracesg%
+  % Partie droite
+  \StrLeft{0\Reste}{3}[\Depart]%
+  \expandafter\UpdatetoksCalissondDepart\Depart\nil%
+  \StrGobbleLeft{0\Reste}{3}[\Reste]%
+  \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}-2}}}\do{%
+    \StrLeft{0\Reste}{3}[\Depart]%
+    \expandafter\UpdatetoksCalissond\Depart\nil%
+    \StrGobbleLeft{0\Reste}{3}[\Reste]%
+  }%
+  \StrLeft{00\Reste}{3}[\Depart]%
+  \StrGobbleLeft{00\Reste}{3}[\Reste]%
+  \expandafter\UpdatetoksCalissond\Depart\nil%
+% fin premiere ligne
+  \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}-1}}}\do{%
+    \StrLeft{\Reste}{1}[\Depart]%
+    \expandafter\UpdatetoksCalissond\Depart00\nil%
+    \StrGobbleLeft{\Reste}{1}[\Reste]%
+    \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}-1}}}\do{%
+      \StrLeft{\Reste}{3}[\Depart]%
+      \expandafter\UpdatetoksCalissond\Depart\nil%
+      \StrGobbleLeft{\Reste}{3}[\Reste]%
+    }%
+    \StrLeft{00\Reste}{3}[\Depart]%
+    \expandafter\UpdatetoksCalissond\Depart\nil%
+    \StrGobbleLeft{00\Reste}{3}[\Reste]%
+  }%
+  %% fin des lignes intermédiaires
+  \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Calisson]{Taille}}}}\do{%
+    \StrLeft{\Reste}{1}[\Depart]%
+    \expandafter\UpdatetoksCalissond\Depart00\nil%
+    \StrGobbleLeft{\Reste}{1}[\Reste]%
+    \xintifboolexpr{##1>\fpeval{\useKV[Calisson]{Taille}-1}}{}{%
+      \xintFor* ##2 in {\xintSeq{\fpeval{\useKV[Calisson]{Taille}-##1}}{1}}\do{%
+        \StrLeft{\Reste}{3}[\Depart]%
+        \expandafter\UpdatetoksCalissond\Depart\nil%
+        \StrGobbleLeft{\Reste}{3}[\Reste]%
+      }%
+    }%
+  }%
+%  \par Liste droite :\the\tokcalissonlistetracesd
+  \BuildCalisson{\the\tokcalissonlistetracesg}{\the\tokcalissonlistetracesd}%
+}%
+
+\NewDocumentCommand\BuildCalisson{m m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Solution;
+    Solution:=\useKV[Calisson]{Solution};
+
+    color CouleurSolution;
+    CouleurSolution:=\useKV[Calisson]{Couleur};
+    
+    Rayon=\useKV[Calisson]{Rayon};
+    Taille=\useKV[Calisson]{Taille};
+    
+    pair A,B,C,D,E,F,O;
+    O=(0,0);
+    path cc;
+    cc=cercles(O,Rayon);
+    D=pointarc(cc,30);
+    E=pointarc(cc,90);
+    F=pointarc(cc,150);
+    A=pointarc(cc,210);
+    B=pointarc(cc,270);
+    C=pointarc(cc,330);
+    trace polygone(A,B,C,D,E,F) withpen pencircle scaled 2;
+    path Gauche,Droit,Haut,Bas,TopGauche,BasDroit;
+    Gauche=F--A--B;
+    Droit=E--D--C;
+    Haut=F--E--D;
+    Bas=A--B--C;
+    TopGauche=E--F--A;
+    BasDroit=D--C--B;
+    for k=1 upto 2*Taille-1:
+    trace (point(k*length Gauche/(2*Taille)) of Gauche)--(point(k*length Droit/(2*Taille)) of Droit) dashed evenly;
+    trace (point(k*length Haut/(2*Taille)) of Haut)--(point(k*length Bas/(2*Taille)) of Bas) dashed evenly;
+    trace (point(k*length TopGauche/(2*Taille)) of TopGauche)--(point(k*length BasDroit/(2*Taille)) of BasDroit) dashed evenly;
+    endfor;
+    
+    pair Hor,Ver,Horn;
+    Hor=(1/Taille)[E,F];
+    Ver=rotation(Hor,E,60);
+    Horn=rotation(Hor,E,120);
+
+    % On positionne les points
+    pair M[];
+    n=0;
+    %Partie Gauche -> ok
+    for k=0 upto Taille-1:
+    for l=0 upto Taille:
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Hor-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    for k=Taille upto 2*Taille-1:
+    for l=0 upto (2*Taille-1-k):
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Hor-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    % Partie Droite -> ok
+    for k=1 upto Taille:
+    n:=n+1;
+    M[n]=E+k*(Horn-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    for k=1 upto Taille-1:
+    for l=0 upto Taille:
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Horn-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    for k=Taille upto 2*Taille-1:
+    for l=0 upto (2*Taille-1-k):
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Horn-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    %
+    
+    string Retiens;
+    Retiens="";
+
+    pair Depla;
+    Depla:=Hor;
+    
+    vardef LesTracesg(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    for d=1 upto 3:
+    Retiens:=substring(d-1,d) of p_;
+    if d=1:Depla:=Hor
+    elseif d=2:Depla:=Ver
+    else : Depla:=Horn
+    fi;
+    if (Retiens="0") or (Retiens="f"):
+    elseif Retiens="t":
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2;
+    elseif Retiens="s":
+    if Solution:
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution;
+    fi;
+    fi;
+    endfor;
+    endfor;
+    enddef;
+
+    vardef LesTracesd(text t)=
+    for p_=t:
+    n:=n+1;
+    for d=1 upto 3:
+    Retiens:=substring(d-1,d) of p_;
+    if d=1:Depla:=Horn
+    elseif d=2:Depla:=Ver
+    else : Depla:=Hor
+    fi;
+    if (Retiens="0") or (Retiens="f"):
+    elseif Retiens="t":
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2;
+    elseif Retiens="s":
+    if Solution:
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution;
+    fi;
+    fi;
+    endfor;
+    endfor;
+    enddef;
+    
+    LesTracesg(#1);
+    LesTracesd(#2);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={boolean Solution; Solution:=\useKV[Calisson]{Solution}; Rayon=\useKV[Calisson]{Rayon};Taille=\useKV[Calisson]{Taille};color CouleurSolution; CouleurSolution:=\useKV[Calisson]{Couleur};}]
+    pair A,B,C,D,E,F,O;
+    O=(0,0);
+    path cc;
+    cc=cercles(O,Rayon);
+    D=pointarc(cc,30);
+    E=pointarc(cc,90);
+    F=pointarc(cc,150);
+    A=pointarc(cc,210);
+    B=pointarc(cc,270);
+    C=pointarc(cc,330);
+    trace polygone(A,B,C,D,E,F) withpen pencircle scaled 2;
+    path Gauche,Droit,Haut,Bas,TopGauche,BasDroit;
+    Gauche=F--A--B;
+    Droit=E--D--C;
+    Haut=F--E--D;
+    Bas=A--B--C;
+    TopGauche=E--F--A;
+    BasDroit=D--C--B;
+    for k=1 upto 2*Taille-1:
+    trace (point(k*length Gauche/(2*Taille)) of Gauche)--(point(k*length Droit/(2*Taille)) of Droit) dashed evenly;
+    trace (point(k*length Haut/(2*Taille)) of Haut)--(point(k*length Bas/(2*Taille)) of Bas) dashed evenly;
+    trace (point(k*length TopGauche/(2*Taille)) of TopGauche)--(point(k*length BasDroit/(2*Taille)) of BasDroit) dashed evenly;
+    endfor;
+    
+    pair Hor,Ver,Horn;
+    Hor=(1/Taille)[E,F];
+    Ver=rotation(Hor,E,60);
+    Horn=rotation(Hor,E,120);
+
+    % On positionne les points
+    pair M[];
+    n=0;
+    %Partie Gauche -> ok
+    for k=0 upto Taille-1:
+    for l=0 upto Taille:
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Hor-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    for k=Taille upto 2*Taille-1:
+    for l=0 upto (2*Taille-1-k):
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Hor-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    % Partie Droite -> ok
+    for k=1 upto Taille:
+    n:=n+1;
+    M[n]=E+k*(Horn-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    for k=1 upto Taille-1:
+    for l=0 upto Taille:
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Horn-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    for k=Taille upto 2*Taille-1:
+    for l=0 upto (2*Taille-1-k):
+    n:=n+1;
+    M[n]=E+k*(Ver-E)+l*(Horn-E);
+    %dotlabel.top(decimal(n),M[n]);
+    endfor;
+    endfor;
+    %
+    
+    string Retiens;
+    Retiens="";
+
+    pair Depla;
+    Depla:=Hor;
+    
+    vardef LesTracesg(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    for d=1 upto 3:
+    Retiens:=substring(d-1,d) of p_;
+    if d=1:Depla:=Hor
+    elseif d=2:Depla:=Ver
+    else : Depla:=Horn
+    fi;
+    if (Retiens="0") or (Retiens="f"):
+    elseif Retiens="t":
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2;
+    elseif Retiens="s":
+    if Solution:
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution;
+    fi;
+    fi;
+    endfor;
+    endfor;
+    enddef;
+
+    vardef LesTracesd(text t)=
+    for p_=t:
+    n:=n+1;
+    for d=1 upto 3:
+    Retiens:=substring(d-1,d) of p_;
+    if d=1:Depla:=Horn
+    elseif d=2:Depla:=Ver
+    else : Depla:=Hor
+    fi;
+    if (Retiens="0") or (Retiens="f"):
+    elseif Retiens="t":
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2;
+    elseif Retiens="s":
+    if Solution:
+    trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution;
+    fi;
+    fi;
+    endfor;
+    endfor;
+    enddef;
+    
+    LesTracesg(#1);
+    LesTracesd(#2);
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCalisson.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesJeux.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesJeux.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesJeux.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,555 @@
+%%%
+% Cards
+%%%
+\newtcolorbox{Mybox}[3]{%
+  enhanced,%
+  nobeforeafter,%
+  left=0pt,right=0pt,top=0pt,%
+  text fill,%
+  width=\largeurcarte,%
+  height=\hauteurcarte,%
+  arc=5pt,%
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west);%
+    \coordinate[yshift=-0.5\hauteurtitre] (B1) at (frame.north east);%   
+    \coordinate[yshift=-\hauteurtitre] (A) at (frame.north west);%
+    \coordinate[yshift=-\hauteurtitre] (B) at (frame.north east);%
+    \coordinate[xshift=1.5pt,yshift=8mm] (S1) at (frame.south west);%
+    \coordinate[xshift=-1.5pt,yshift=8mm] (S2) at (frame.south east);%
+    \coordinate[xshift=3mm+(\largeurtitre/2)] (A2) at (A1);%
+    \coordinate[xshift=-3mm-(\largeurtitre/2)] (B2) at (B1);%
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurtitre,fill=TrameCouleur] (T1) at (A2){};%
+    \node[TexteCouleur] (T1a) at (T1){\Large #1};%
+    \node[yshift=-0.65cm] (T1b) at (T1){\tiny r\'eponse pr\'ec\'edente};%
+    \node[inner sep=0pt,rounded corners, rectangle, draw=black,minimum height=1cm,text width=\largeurtitre,fill=TrameCouleur] (T2) at (B2){};%
+    \node[inner sep=0pt,TexteCouleur] (T2a) at (T2){%
+      \begin{minipage}{\largeurtitre}%
+        \begin{center}%
+          #2%
+        \end{center}%
+      \end{minipage}%
+    };%
+    \node[yshift=-0.65cm] (T2b) at (T2){};%
+    \ifboolKV[Cards]{Titre}{\node[] at (T2b) {\tiny\useKV[Cards]{NomTitre}};}{}%
+    \node[rectangle,xshift=5pt,yshift=4.25mm,minimum width=2em,rounded corners,fill=TrameCouleur,draw=black,anchor=west] (R) at (frame.south west) {\color{black}\Large\bfseries #3};%
+    \draw[dashed] (S1) -- (S2);%
+  },%
+  colback=white,%
+  colbacktitle=TrameCouleur,%
+}%
+
+\makeatletter
+\newtcolorbox{MyboxJQ}[2]{%
+  enhanced,%
+  nobeforeafter,%
+  left=0pt,right=0pt,top=0pt,%
+  text fill,%
+  width=\largeurcarte,%
+  height=\hauteurcarte,%
+  arc=5pt,%
+  underlay={%
+    \ifboolKV[Cards]{BackgroundAv}{%
+      \begin{tcbclipinterior}
+        \node[anchor=center,opacity=1]
+        at (interior.center) {%
+          \includegraphics[%
+          height=\tcb at height,
+          width=\tcb at width,
+          ]{\useKV[Cards]{ImageAv}}};%
+      \end{tcbclipinterior}%
+    }{}%
+  },%
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west);
+    \coordinate[yshift=0\hauteurtitre] (S3) at (frame.center);
+    \coordinate[yshift=3mm] (C3) at (frame.south);
+    \coordinate[xshift=\largeurcarte/2] (A3) at (A1);
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A3){};
+    \node[TexteCouleur] (T1a) at (T1){\Large J'ai};
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T2) at (S3){};
+    \node[TexteCouleur] (T2a) at (T2){\Large Qui a ?};
+    \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte1) at ($(A3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}%
+        \begin{center}%
+          #1%
+        \end{center}%
+      \end{minipage}};
+    \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte2) at ($(C3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}%
+        \begin{center}%
+          #2%
+        \end{center}%
+      \end{minipage}};
+  },
+  colback=white
+}%
+%
+\newtcolorbox{MyboxJQAr}{%
+  enhanced,%
+  nobeforeafter,%
+  left=0pt,right=0pt,top=0pt,%
+  text fill,%
+  width=\largeurcarte,%
+  height=\hauteurcarte,%
+  arc=5pt,%
+  underlay={%
+    \ifboolKV[Cards]{BackgroundAv}{%
+      \begin{tcbclipinterior}
+        \node[anchor=center,opacity=1]
+        at (interior.center) {%
+          \includegraphics[%
+          height=\tcb at height,
+          width=\tcb at width,
+          ]{\useKV[Cards]{ImageAr}}};%
+      \end{tcbclipinterior}%
+    }{}%
+  },%
+  colback=white
+}%
+\makeatother
+
+\makeatletter
+%https://tex.stackexchange.com/questions/347434/clip-background-image-inside-tcolorbox
+\newtcolorbox{MyboxSimpleAv}[1]{%
+  enhanced,%
+  nobeforeafter,%
+  left=0pt,right=0pt,top=\hauteurtitre,bottom=0pt,%
+  text fill,%
+  width=\largeurcarte,%
+  height=\hauteurcarte,%
+  arc=5pt,%
+  colback=white,%
+  underlay={%
+    \ifboolKV[Cards]{BackgroundAv}{%
+      \begin{tcbclipinterior}
+        \node[anchor=center,opacity=1]
+        at (interior.center) {%
+          \includegraphics[%
+          height=\tcb at height,
+          width=\tcb at width,
+          ]{\useKV[Cards]{ImageAv}}};%
+      \end{tcbclipinterior}%
+    }{}%
+  },%
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);%
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A){\begin{minipage}{\largeurcarte-6mm}%
+        \begin{center}%
+          #1%
+        \end{center}%
+      \end{minipage}};%
+    \node[yshift=-0.5em-0.5\hauteurtitre] (B) at (A){};%
+    \ifboolKV[Cards]{Titre}{\node[fill=white] at (B) {\useKV[Cards]{NomTitre}};}{}%
+  }%
+}%
+
+\newtcolorbox{MyboxSimpleAr}[1]{%
+  enhanced,%
+  nobeforeafter,%
+  left=0pt,right=0pt,top=\hauteurtitre,bottom=0pt,%
+  text fill,%
+  width=\largeurcarte,%
+  height=\hauteurcarte,%
+  arc=5pt,%
+  colback=white,%
+  underlay={%
+    \ifboolKV[Cards]{BackgroundAr}{%
+      \begin{tcbclipinterior}
+        \node[anchor=center,opacity=1]
+        at (interior.center) {%
+          \includegraphics[%
+          height=\tcb at height,
+          width=\tcb at width,
+          ]{\useKV[Cards]{ImageAr}}};
+      \end{tcbclipinterior}%,%
+    }{}%
+  },%
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);%
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A){\begin{minipage}{\largeurcarte-6mm}%
+        \begin{center}%
+          #1%
+        \end{center}%
+      \end{minipage}};%
+  }%
+}%
+\makeatother
+
+\newtcolorbox{MyboxTrivial}[1][]{%
+  enhanced,%
+  nobeforeafter,%
+  left=0pt,right=0pt,top=0pt,bottom=0pt,%
+  text fill,%
+  width=\largeurcarte,%
+  height=\hauteurcarte,%
+  arc=5pt,%
+  colback=white,%
+  #1
+}%
+
+\newlength{\largeurcards}%
+\newlength{\hauteurcards}%
+\newlength{\largeurcarte}%
+\newlength{\hauteurcarte}%
+\newlength{\hauteurtitre}%
+\newlength{\largeurtitre}%
+
+\newlength{\margeh}%
+\newlength{\margev}%
+
+\newlength{\PfCCardsH}%pour retenir en cas de décalage sur une page paire
+\newlength{\PfCCardsEcartH}%Pour décaler sur une page paire
+\newlength{\PfCCardsV}%pour retenir en cas de décalage sur une page paire
+\newlength{\PfCCardsEcartV}%Pour décaler sur une page paire
+\setlength{\PfCCardsEcartH}{0pt}
+\setlength{\PfCCardsEcartV}{0pt}
+
+\NewDocumentEnvironment{Trame}{+b}{%
+  \ifodd\thepage%
+  \setlength{\PfCCardsH}{\largeurcards}%
+  \setlength{\PfCCardsV}{\hauteurcards}%
+  \else%
+  \setlength{\PfCCardsH}{\largeurcards+\PfCCardsEcartH}%
+  \setlength{\PfCCardsV}{\hauteurcards+\PfCCardsEcartV}%
+  \fi%
+  \begin{tikzpicture}[remember picture,overlay]
+    % quadrillages horizontal et vertical
+    \coordinate[yshift=-\margev] (A) at (current page.north west);%
+    \coordinate[yshift=-\margev] (B) at (current page.north east);%
+    \coordinate[yshift=-\hauteurcards] (A1) at (A);%
+    \coordinate[yshift=-\hauteurcards] (B1) at (B);%
+    \coordinate[yshift=-\hauteurcards] (A2) at (A1);%
+    \coordinate[yshift=-\hauteurcards] (B2) at (B1);%
+    \coordinate[yshift=-\hauteurcards] (A3) at (A2);%
+    \coordinate[yshift=-\hauteurcards] (B3) at (B2);%
+    \coordinate[yshift=-\hauteurcards] (A4) at (A3);%
+    \coordinate[yshift=-\hauteurcards] (B4) at (B3);%
+    \coordinate[xshift=\margeh] (C) at (current page.north west);%
+    \coordinate[xshift=\margeh] (D) at (current page.south west);%
+    \coordinate[xshift=\largeurcards] (C1) at (C);%
+    \coordinate[xshift=\largeurcards] (D1) at (D);%
+    \coordinate[xshift=\largeurcards] (C2) at (C1);%
+    \coordinate[xshift=\largeurcards] (D2) at (D1);%
+    \coordinate[xshift=\largeurcards] (C3) at (C2);%
+    \coordinate[xshift=\largeurcards] (D3) at (D2);%
+    \draw (A)--(B);%
+    \draw (A1)--(B1);%
+    \draw (A2)--(B2);%
+    \draw (A3)--(B3);%
+    \draw (A4)--(B4);%
+    \draw (C)--(D);%
+    \draw (C1)--(D1);%
+    \draw (C2)--(D2);%
+    \draw (C3)--(D3);%
+    % point pour placer les cartes
+    \coordinate[xshift=\margeh+0.5\PfCCardsH,yshift=-0.5\PfCCardsV] (Carte1) at (A);%
+    \coordinate[xshift=\largeurcards,yshift=0mm] (Carte2) at (Carte1);%
+    \coordinate[xshift=2\largeurcards,yshift=0mm] (Carte3) at (Carte1);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte4) at (Carte1);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte5) at (Carte2);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte6) at (Carte3);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte7) at (Carte4);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte8) at (Carte5);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte9) at (Carte6);%
+    #1%
+  \end{tikzpicture}%
+}{}%
+
+\NewDocumentEnvironment{Trameold}{+b}{%
+  \begin{tikzpicture}[remember picture,overlay]
+    % quadrillages horizontal et vertical
+    \coordinate[yshift=-\margev] (A) at (current page.north west);%
+    \coordinate[yshift=-\margev] (B) at (current page.north east);%
+    \coordinate[yshift=-\hauteurcards] (A1) at (A);%
+    \coordinate[yshift=-\hauteurcards] (B1) at (B);%
+    \coordinate[yshift=-\hauteurcards] (A2) at (A1);%
+    \coordinate[yshift=-\hauteurcards] (B2) at (B1);%
+    \coordinate[yshift=-\hauteurcards] (A3) at (A2);%
+    \coordinate[yshift=-\hauteurcards] (B3) at (B2);%
+    \coordinate[yshift=-\hauteurcards] (A4) at (A3);%
+    \coordinate[yshift=-\hauteurcards] (B4) at (B3);%
+    \coordinate[xshift=\margeh] (C) at (current page.north west);%
+    \coordinate[xshift=\margeh] (D) at (current page.south west);%
+    \coordinate[xshift=\largeurcards] (C1) at (C);%
+    \coordinate[xshift=\largeurcards] (D1) at (D);%
+    \coordinate[xshift=\largeurcards] (C2) at (C1);%
+    \coordinate[xshift=\largeurcards] (D2) at (D1);%
+    \coordinate[xshift=\largeurcards] (C3) at (C2);%
+    \coordinate[xshift=\largeurcards] (D3) at (D2);%
+    \draw (A)--(B);%
+    \draw (A1)--(B1);%
+    \draw (A2)--(B2);%
+    \draw (A3)--(B3);%
+    \draw (A4)--(B4);%
+    \draw (C)--(D);%
+    \draw (C1)--(D1);%
+    \draw (C2)--(D2);%
+    \draw (C3)--(D3);%
+    % point pour placer les cartes
+    \coordinate[xshift=\margeh+0.5\largeurcards,yshift=-0.5\hauteurcards] (Carte1) at (A);%
+    \coordinate[xshift=\largeurcards,yshift=0mm] (Carte2) at (Carte1);%
+    \coordinate[xshift=2\largeurcards,yshift=0mm] (Carte3) at (Carte1);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte4) at (Carte1);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte5) at (Carte2);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte6) at (Carte3);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte7) at (Carte4);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte8) at (Carte5);%
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte9) at (Carte6);%
+    #1%
+  \end{tikzpicture}%
+}{}%
+
+\setKVdefault[Cards]{Largeur=59,Hauteur=89,HauteurTheme=15,Marge=4,Landscape=false,Couleur=Cornsilk,Theme=Th\'eor\`eme\\de
+  Pythagore,ThemeSol=Solution,Trame=false,Titre=false,NomTitre=Jeu 1,Loop,JaiQuia=false,BackgroundAv=false,BackgroundAr=false,ImageAv=4813762.jpg,ImageAr=4813762.jpg,AffichageSolution=true,SolutionSeule=false,%
+  % Pour le trivial
+  Trivial=false,Symboles={\faInfinity,\faSignal,\faProjectDiagram,\faHiking,\faRuler,\faLockOpen}
+}%
+
+\NewDocumentCommand\Cartes{o +m}{%[2][]{%
+  \useKVdefault[Cards]%
+  \setKV[Cards]{#1}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeCards{#2}%
+  \setsepchar{,}%
+  \ifboolKV[Cards]{Landscape}{%
+    \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcards}{95mm}%
+    \setlength{\hauteurcards}{65mm}%
+    \setlength{\margeh}{(297mm-3\largeurcards)/2}%
+    \setlength{\margev}{(210mm-3\hauteurcards)/2}%
+  }{%
+    \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcards}{65mm}%
+    \setlength{\hauteurcards}{95mm}%
+    \setlength{\margeh}{(210mm-3\largeurcards)/2}%
+    \setlength{\margev}{(297mm-3\hauteurcards)/2}%
+  }%
+  \setlength{\hauteurtitre}{\fpeval{\useKV[Cards]{HauteurTheme}}mm}%
+  \setlength{\largeurtitre}{\fpeval{(\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}-9)/2}mm}%
+  \colorlet{TexteCouleur}{black}%
+  \colorlet{TrameCouleur}{\useKV[Cards]{Couleur}}%
+  \ifboolKV[Cards]{Trivial}{%
+    \xdef\PfCListeSymbolTrivial{\useKV[Cards]{Symboles}}%
+    \setsepchar{,}\readlist*\ListeSymbolesTrivial{\PfCListeSymbolTrivial}%
+    \setlength{\tabcolsep}{0.25\tabcolsep}
+    \ifboolKV[Cards]{Trame}{%
+      \clearpage%
+      \thispagestyle{empty}%
+      \begin{Trame}%
+        \multido{\i=1+1}{9}{%
+          \node[] at (Carte\i) {%
+            \begin{MyboxTrivial}%
+              \begin{center}
+                \begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[9,m]}[hvlines]%
+                  \xintFor* ##1 in{\xintSeq{1}{6}}\do{%
+                    \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[\i,\fpeval{1+2*(##1-1)}]\\
+                  }%
+                \end{NiceTabular}%
+              \end{center}%
+            \end{MyboxTrivial}%
+          };%
+        }%
+      \end{Trame}%
+      \ifboolKV[Cards]{AffichageSolution}{%
+        \clearpage%
+        \thispagestyle{empty}%
+        \begin{Trame}%
+          \multido{\i=1+1}{3}{%
+            \node at (Carte\i) {%
+              \begin{MyboxTrivial}%
+                \begin{center}%
+                  \begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[10,m]}[hvlines]%
+                    \xintFor* ##1 in{\xintSeq{1}{6}}\do{%
+                      \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[\fpeval{4-\i},\fpeval{2*##1}]\\
+                    }%
+                  \end{NiceTabular}%
+                \end{center}%
+              \end{MyboxTrivial}%
+            };%
+          }%
+          \multido{\i=4+1}{3}{%
+            \node at (Carte\i) {%
+              \begin{MyboxTrivial}%
+                \begin{center}%
+                  \begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[10,m]}[hvlines]%
+                    \xintFor* ##1 in{\xintSeq{1}{6}}\do{%
+                      \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[\fpeval{10-\i},\fpeval{2*##1}]\\
+                    }%
+                  \end{NiceTabular}%
+                \end{center}%
+              \end{MyboxTrivial}%
+            };%
+          }%
+          \multido{\i=7+1}{3}{%
+            \node at (Carte\i) {%
+              \begin{MyboxTrivial}%
+                \begin{center}%
+                  \begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[10,m]}[hvlines]%
+                    \xintFor* ##1 in{\xintSeq{1}{6}}\do{%
+                      \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[\fpeval{16-\i},\fpeval{2*##1}]\\
+                    }%
+                  \end{NiceTabular}%
+                \end{center}%
+              \end{MyboxTrivial}%
+            };%
+          }%
+        \end{Trame}%
+        \clearpage%
+      }{}%
+    }{%
+      \begin{MyboxTrivial}%
+        \begin{center}%
+          \begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[10,m]}[hvlines]%
+            \xintFor* ##1 in{\xintSeq{1}{6}}\do{%
+              \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[1,\fpeval{1+2*(##1-1)}]\\
+            }%
+          \end{NiceTabular}%
+        \end{center}%
+      \end{MyboxTrivial}%
+      \ifboolKV[Cards]{AffichageSolution}{%
+        \begin{MyboxTrivial}%
+          \begin{center}%
+            \begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[10,m]}[hvlines]%
+              \xintFor* ##1 in{\xintSeq{1}{6}}\do{%
+                \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[1,\fpeval{2*##1}]\\
+              }%
+            \end{NiceTabular}%
+          \end{center}%
+        \end{MyboxTrivial}%
+      }{}%
+    }%
+    \setlength{\tabcolsep}{4\tabcolsep}%
+  }{%
+    \ifboolKV[Cards]{JaiQuia}{%
+      \ifboolKV[Cards]{Trame}{%
+        \clearpage%
+        \thispagestyle{empty}%
+        \begin{Trame}%
+          \multido{\i=1+1}{9}{%
+            \node at (Carte\i) {%
+              \begin{MyboxJQ}{\ListeCards[\i,1]}{\ListeCards[\i,2]}%
+                %% 
+              \end{MyboxJQ}%
+            };%
+          }%
+        \end{Trame}%
+        \clearpage%
+        \ifboolKV[Cards]{AffichageSolution}{%
+          \thispagestyle{empty}%
+          \begin{Trame}
+            \multido{\i=1+1}{3}{%
+              \node at (Carte\i) {%
+                \begin{MyboxJQAr}%
+                \end{MyboxJQAr}%
+              };%
+            }%
+            \multido{\i=4+1}{3}{%
+              \node at (Carte\i) {%
+                \begin{MyboxJQAr}%
+                \end{MyboxJQAr}%
+              };%
+            }%
+            \multido{\i=7+1}{3}{%
+              \node at (Carte\i) {%
+                \begin{MyboxJQAr}%
+                \end{MyboxJQAr}%
+              };%
+            }%
+          \end{Trame}%
+          \clearpage%
+        }{}%
+      }{%
+        \begin{MyboxJQ}{\ListeCards[1,1]}{\ListeCards[1,2]}%
+          %%
+        \end{MyboxJQ}%
+        \ifboolKV[Cards]{AffichageSolution}{%
+          \begin{MyboxJQAr}%
+            %% 
+          \end{MyboxJQAr}%
+        }{}%
+      }%
+    }{%
+      \ifboolKV[Cards]{Loop}{%
+        \ifboolKV[Cards]{Trame}{%
+          \clearpage%
+          \thispagestyle{empty}%
+          \begin{Trame}
+            \multido{\i=1+1}{9}{%
+              \node at (Carte\i) {%
+                \begin{Mybox}{\ListeCards[\i,1]}{\useKV[Cards]{Theme}}{\ListeCards[\i,2]}%
+                  \ListeCards[\i,3]%
+                \end{Mybox}%
+              };%
+            }%
+          \end{Trame}%
+          \clearpage%
+        }{%
+          \begin{Mybox}{\ListeCards[1,1]}{\useKV[Cards]{Theme}}{\ListeCards[1,2]}%
+            \ListeCards[1,3]%
+          \end{Mybox}%
+        }%
+      }{%
+        \ifboolKV[Cards]{Trame}{%
+          \clearpage%
+          \thispagestyle{empty}%
+          \begin{Trame}
+            \multido{\i=1+1}{9}{%
+              \node[] at (Carte\i) {%
+                \begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}%
+                  \ListeCards[\i,1]%
+                \end{MyboxSimpleAv}%
+              };%
+            }%
+          \end{Trame}%
+          \ifboolKV[Cards]{AffichageSolution}{%
+            \clearpage%
+            \thispagestyle{empty}%
+            \begin{Trame}
+              \multido{\i=1+1}{3}{%
+                \node at (Carte\i) {%
+                  \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+                    \ListeCards[\fpeval{4-\i},2]%
+                  \end{MyboxSimpleAr}%
+                };%
+              }%
+              \multido{\i=4+1}{3}{%
+                \node at (Carte\i) {%
+                  \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+                    \ListeCards[\fpeval{10-\i},2]%
+                  \end{MyboxSimpleAr}%
+                };%
+              }%
+              \multido{\i=7+1}{3}{%
+                \node at (Carte\i) {%
+                  \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+                    \ListeCards[\fpeval{16-\i},2]%
+                  \end{MyboxSimpleAr}%
+                };%
+              }%
+            \end{Trame}%
+            \clearpage%
+          }{}%
+        }{%
+          \ifboolKV[Cards]{SolutionSeule}{}{%
+            \begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}%
+              \ListeCards[1,1]%
+            \end{MyboxSimpleAv}%
+          }%
+          \ifboolKV[Cards]{AffichageSolution}{%
+            \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+              \ListeCards[1,2]%
+            \end{MyboxSimpleAr}%
+          }{}%
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\SolutionCarte[2]{%
+  \begin{center}
+    \bfseries#1
+  \end{center}
+  
+  #2
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesJeux.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesMentales.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesMentales.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesMentales.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,25 @@
+%%%
+% Cartes Mentales
+%%%
+\setKVdefault[ClesMentales]{Nom={Bulle}, Largeur=5cm, Ancre={0,0},Pointilles=false,CTrace=black,CFond=white,Epaisseur=1pt,Rayon=1}%
+\newenvironment{Mind}{\begin{tikzpicture}}{\end{tikzpicture}}%
+
+\newlength{\RoundedBoxWidth}%
+
+\NewEnviron{Bulle}[1][]{%
+  \setKV[ClesMentales]{#1}%
+  \setlength{\RoundedBoxWidth}{\useKV[ClesMentales]{Largeur}}%
+  \xdef\Pointilles{\ifboolKV[ClesMentales]{Pointilles}{dashed}{}}%
+  \xdef\CouleurTrace{\useKV[ClesMentales]{CTrace}}%
+  \xdef\CouleurFond{\useKV[ClesMentales]{CFond}}%
+  \xdef\EpaisseurLigne{\useKV[ClesMentales]{Epaisseur}}%
+  \xdef\RayonCoin{\useKV[ClesMentales]{Rayon}}%
+  \node(\useKV[ClesMentales]{Nom}) [align=justify,draw=\CouleurTrace,line width=\EpaisseurLigne,\Pointilles,fill=\CouleurFond,rounded corners=\RayonCoin,text width=\RoundedBoxWidth] at (\useKV[ClesMentales]{Ancre}) {\begin{minipage}{\RoundedBoxWidth}\BODY\end{minipage}};%
+  \multido{\i=1+1}{9}{%
+    \xdef\x{\fpeval{\i/10}}
+    \coordinate (\useKV[ClesMentales]{Nom}-H-\i) at ($(\useKV[ClesMentales]{Nom}.north west)!\x!(\useKV[ClesMentales]{Nom}.north east)$);
+    \coordinate (\useKV[ClesMentales]{Nom}-D-\i) at ($(\useKV[ClesMentales]{Nom}.north east)!\x!(\useKV[ClesMentales]{Nom}.south east)$);
+    \coordinate (\useKV[ClesMentales]{Nom}-B-\i) at ($(\useKV[ClesMentales]{Nom}.south east)!\x!(\useKV[ClesMentales]{Nom}.south west)$);
+    \coordinate (\useKV[ClesMentales]{Nom}-G-\i) at ($(\useKV[ClesMentales]{Nom}.south west)!\x!(\useKV[ClesMentales]{Nom}.north west)$);
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartesMentales.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,211 @@
+%%%
+% Cartographie
+%%%
+\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2022/texmf-dist/metapost/profcollege/datastest/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2}
+\defKV[Cartographie]{EchelleCarte=\setKV[Cartographie]{Carte}}
+\defKV[Cartographie]{Pays=\setKV[Cartographie]{PaysSeul}}
+\defKV[Cartographie]{Villes=\setKV[Cartographie]{VillesSup}}
+
+\newcommand\Cartographie[3][]{%
+  \ifluatex
+  \useKVdefault[Cartographie]
+  \setKV[Cartographie]{#1}
+  \ifboolKV[Cartographie]{Projection}{%
+    \mplibforcehmode
+    \begin{mplibcode}
+      input PfCMonde;
+      string arborescence;
+      arborescence:=\useKV[Cartographie]{Arborescence};
+      boolean Impression,VillesSup;
+      VillesSup=\useKV[Cartographie]{VillesSup};
+      Impression=\useKV[Cartographie]{Impression};
+      
+      maillage:=true;
+      fleuves:=false;
+      lacs:=false;
+      capitales:=false;
+
+      if Impression:
+      noncolore:=true;
+      payscolor:=white;
+      else:
+      noncolore:=true;
+      payscolor:=\useKV[Cartographie]{CouleurPays};
+      fi;
+
+      projection:=\useKV[Cartographie]{TypeProjection};
+      feuillet:=u*(-20,-20)--u*(20,-20)--u*(20,20)--u*(-20,20)--cycle;
+      drawoptions(withpen pencircle scaled 0.5 withcolor 0.5white);
+      Projection(3,48,\useKV[Cartographie]{Echelle});
+      drawoptions();
+
+      if projection="mercator":
+      clip currentpicture to (mercatorc(-85,-180)--mercatorc(-85,180)--mercatorc(85,180)--mercatorc(85,-180)--cycle);
+      draw mercatorc(0,-180)--mercatorc(0,180);
+      draw mercatorc(-85,0)--mercatorc(85,0);
+      label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),mercatorc(0,0));
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),mercatorc(-k*10,0));
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),mercatorc(k*10,0));
+      endfor;
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),mercatorc(0,-k*10));
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),mercatorc(0,k*10));
+      endfor;
+      elseif projection="cylindrique":
+      clip currentpicture to (cylindriquec(-85,-180)--cylindriquec(-85,180)--cylindriquec(85,180)--cylindriquec(85,-180)--cycle);
+      draw cylindriquec(0,-180)--cylindriquec(0,180);
+      draw cylindriquec(-85,0)--cylindriquec(85,0);
+      label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),cylindriquec(0,0));
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(-k*10,0));
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(k*10,0));
+      endfor;
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,-k*10));
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,k*10));
+      endfor;
+      elseif projection="winkel":
+      clip currentpicture to (winkelc(-85,-180)--winkelc(-85,180) for k=-80 step 5 until 85:--winkelc(k,180) endfor --winkelc(85,-180) for k=80 step -5 until -85:--winkelc(k,-180) endfor --cycle);
+      draw winkelc(0,-180)--winkelc(0,180);
+      draw winkelc(-85,0)--winkelc(85,0);
+      label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),winkelc(0,0));
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(-k*10,0));
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(k*10,0));
+      endfor;
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(0,-k*10));
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(0,k*10));
+      endfor;
+      elseif projection="cylindrique":
+      clip currentpicture to (cylindriquec(-85,-180)--cylindriquec(-85,180)--cylindriquec(85,180)--cylindriquec(85,-180)--cycle);
+      draw cylindriquec(0,-180)--cylindriquec(0,180);
+      draw cylindriquec(-85,0)--cylindriquec(85,0);
+      label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),cylindriquec(0,0));
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(-k*10,0));
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(k*10,0));
+      endfor;
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,-k*10));
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,k*10));
+      endfor;
+      elseif projection="simple":
+      clip currentpicture to (simplec(-85,-180)--simplec(-85,180)--simplec(85,180)--simplec(85,-180)--cycle);
+      draw simplec(0,-180)--simplec(0,180);
+      draw simplec(-85,0)--simplec(85,0);
+      label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),simplec(0,0));
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),simplec(-k*10,0));
+      label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),simplec(k*10,0));
+      endfor;
+      for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),simplec(0,-k*10));
+      label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),simplec(0,k*10));
+      endfor;
+      fi;
+      if VillesSup:
+      nomfichiermul:=\useKV[Cartographie]{Villes};
+      nblec:=scantokens readfrom nomfichiermul;
+      drawoptions(withcolor (0.15,0.15,0.15));
+      for p=1 upto nblec:
+      pair Coord[],latlon;string p_;
+      latlon=scantokens readfrom nomfichiermul;
+      p_=scantokens readfrom nomfichiermul;
+      if projection="mercator":
+      Coord[p]=mercatorc(ypart(latlon),xpart(latlon));
+      elseif projection="winkel":
+      Coord[p]=winkelc(ypart(latlon),xpart(latlon));
+      elseif projection="cylindrique":
+      Coord[p]=cylindriquec(ypart(latlon),xpart(latlon));
+      elseif projection="simple":
+      Coord[p]=simplec(ypart(latlon),xpart(latlon));
+      fi;
+      marque_p:="croix";
+      pointe(Coord[p]);
+      label.scantokens readfrom nomfichiermul(TEX(""&p_&""),Coord[p]);
+      endfor;
+      drawoptions();
+      closefrom nomfichiermul;
+      fi;
+    \end{mplibcode}
+  }{%    
+    \mplibforcehmode
+    \begin{mplibcode}
+      input PfCMonde;
+      string arborescence;
+      arborescence:=\useKV[Cartographie]{Arborescence};
+      LargeurCadre=\useKV[Cartographie]{Largeur};
+      HauteurCadre=\useKV[Cartographie]{Hauteur};
+      distanceecran=100*\useKV[Cartographie]{Echelle};
+      fleuves:=\useKV[Cartographie]{Fleuves};
+      boolean Carte,Impression,VillesSup;
+      Carte=\useKV[Cartographie]{Carte};
+      Impression=\useKV[Cartographie]{Impression};
+      VillesSup=\useKV[Cartographie]{VillesSup};
+      couleurfond:=\useKV[Cartographie]{CouleurFond};
+      if Impression:
+      noncolore:=true;
+      payscolor:=0.85white;
+      couleurfond:=white;
+      couleurfleuve:=couleurfond;
+      fi;
+      capitales:=\useKV[Cartographie]{Capitales};
+      All:=\useKV[Cartographie]{All};
+      Europe:=\useKV[Cartographie]{Europe};
+      Asie:=\useKV[Cartographie]{Asie};
+      Amsud:=\useKV[Cartographie]{Amsud};
+      Amnord:=\useKV[Cartographie]{Amnord};
+      Amcentrale:=\useKV[Cartographie]{Amcentre};
+      Caraibes:=\useKV[Cartographie]{Caraibes};
+      Afrique:=\useKV[Cartographie]{Afrique};
+      if Carte:
+      Echelle:=\useKV[Cartographie]{AfficheEchelle};
+      figure(-0.5u*LargeurCadre,-0.5u*HauteurCadre,0.5u*LargeurCadre,0.5u*HauteurCadre);
+      if \useKV[Cartographie]{PaysSeul}:
+      projection:="bonne";
+      theta:=#2;
+      phi:=#3;
+      zoom(echelle(#2,#3,\useKV[Cartographie]{EchelleCarte}));
+      fill (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle withcolor couleurfond;
+      lecturep(arborescence&\useKV[Cartographie]{Pays}&".dat",couleurfond);%
+      trace feuillet withpen pencircle scaled 2;
+      if Echelle=true:
+      draw ((Xa,Ya)+u*(1,1))--((Xa,Ya)+u*(2,1));
+      labeloffset:=labeloffset*1.5;
+      label.top(btex 0 etex,(Xa,Ya)+u*(1,1));
+      label.top(TEX(""&decimal(Long)&"~km"),(Xa,Ya)+u*(2,1));
+      labeloffset:=labeloffset/1.5;
+      draw ((Xa,Ya)+u*(1,1.1))--((Xa,Ya)+u*(1,0.9));
+      draw (((Xa,Ya)+u*(1,1.1))--((Xa,Ya)+u*(1,0.9))) shifted(u*(1,0));
+      fi;
+      else:
+      projection:="bonne";
+      Projection(#2,#3,echelle(#2,#3,\useKV[Cartographie]{EchelleCarte}));
+      trace feuillet withpen pencircle scaled 2;
+      fi;
+      if VillesSup:
+      nomfichiermul:=\useKV[Cartographie]{Villes};
+      nblec:=scantokens readfrom nomfichiermul;
+      drawoptions(withcolor (0.15,0.15,0.15));
+      projection:="bonne";
+      for p=1 upto nblec:
+      pair Coord[],latlon;string p_;
+      latlon=scantokens readfrom nomfichiermul;
+      p_=scantokens readfrom nomfichiermul;
+      Coord[p]=bonnec(ypart(latlon),xpart(latlon));
+      dotlabel.scantokens readfrom nomfichiermul(TEX(""&p_&""),Coord[p]);
+      endfor;
+      drawoptions();
+      closefrom nomfichiermul;
+      fi;
+      else:
+      mappemonde(#2,#3);
+      fi;
+    \end{mplibcode}
+  }
+  \else
+  \PackageWarning{ProfCollege}{"La commande Cartographie n'est compatible qu'avec LuaLaTeX."}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCartographie.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCColorilude.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCColorilude.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCColorilude.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,210 @@
+%%% Colorilude %%%
+\setKVdefault[Colorilude]{Largeur=10,Lignes=10,Legende=false,Coef=0.6,Solution=false,CartonReponse=false,Resultats=false}
+
+\newcommand\dispogpfc[3][]{%
+  \setbox1=\hbox{#2}%
+  \setbox2=\hbox{#3}%
+  \begin{minipage}{\wd2}%
+    #3%
+  \end{minipage}%
+  \quad%
+  \begin{minipage}{\wd1}%
+    #2%
+  \end{minipage}%
+}%
+
+\newcommand\TraceEchiquierColorilude{%
+  \ifluatex
+  \begin{mplibcode}
+    pair A,B,C,D;%pour la grille
+    A=(0,0);
+    B-A=u*\useKV[Colorilude]{Coef}*(\useKV[Colorilude]{Largeur},0);
+    C-B=u*\useKV[Colorilude]{Coef}*(0,-\useKV[Colorilude]{Lignes});
+    D-C=A-B;
+    nblargeur=\useKV[Colorilude]{Largeur};
+    nblignes=\useKV[Colorilude]{Lignes};
+    for k=1 upto nblargeur-1:
+    draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C];
+    endfor;
+    for k=1 upto nblignes-1:
+    draw (k/nblignes)[A,D]--(k/nblignes)[B,C];
+    endfor;
+    draw polygone(A,B,C,D) withpen pensquare scaled 1.5;
+    if \useKV[Colorilude]{Legende}:
+    label.lrt(btex \tiny d'après APMEP etex rotated 90,B);
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={boolean Legende;
+      Legende=\useKV[Colorilude]{Legende};
+      nblargeur:=\useKV[Colorilude]{Largeur};
+      nblignes:=\useKV[Colorilude]{Lignes};
+      coef:=\useKV[Colorilude]{Coef};}]
+    pair A,B,C,D;%pour la grille
+    A=(0,0);
+    B-A=u*coef*(nblargeur,0);
+    C-B=u*coef*(0,-nblignes);
+    D-C=A-B;
+    for k=1 upto nblargeur-1:
+    draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C];
+    endfor;
+    for k=1 upto nblignes-1:
+    draw (k/nblignes)[A,D]--(k/nblignes)[B,C];
+    endfor;
+    draw polygone(A,B,C,D) withpen pensquare scaled 1.5;
+    if Legende:
+    label.lrt(\btex \tiny d'après APMEP etex rotated 90,B);
+    fi;
+  \end{mpost}
+  \fi
+}%
+
+\newcommand\TraceEchiquierColoreColorilude{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}
+    pair A,B,C,D;%pour la grille
+    A=(0,0);
+    B-A=u*\useKV[Colorilude]{Coef}*(\useKV[Colorilude]{Largeur},0);
+    C-B=u*\useKV[Colorilude]{Coef}*(0,-\useKV[Colorilude]{Lignes});
+    D-C=A-B;
+    numeric nblargeur,nblignes;
+    nblargeur:=\useKV[Colorilude]{Largeur};
+    nblignes:=\useKV[Colorilude]{Lignes};
+    % on récupère les données de coloriage
+    numeric n;
+    n:=0;
+    numeric nbCases[];
+    color ColorSucc[];
+    for p_=\the\toklisteremplissage:
+    n:=n+1;
+    if (n mod 2)=0:
+    nbCases[n div 2]:=p_;
+    else:
+    ColorSucc[n div 2]:=p_;
+    fi;
+    endfor;
+    % on colorie :)
+    numeric NBCASES;
+    NBCASES:=0;
+    for l=1 upto (n div 2):
+    fill ((unitsquare xscaled (\useKV[Colorilude]{Coef}*u*nbCases[l]) yscaled (\useKV[Colorilude]{Coef}*u)) shifted(\useKV[Colorilude]{Coef}*u*(NBCASES mod nblargeur,-1-(NBCASES div nblargeur)))) withcolor ColorSucc[l-1];
+    NBCASES:=NBCASES+nbCases[l];
+    endfor;
+    % on trace le quadrillage
+    for k=1 upto nblargeur-1:
+    draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C];
+    endfor;
+    for k=1 upto nblignes-1:
+    draw (k/nblignes)[A,D]--(k/nblignes)[B,C];
+    endfor;
+    draw polygone(A,B,C,D) withpen pensquare scaled 1.5;
+    if \useKV[Colorilude]{Legende}:
+    label.lrt(btex \tiny d'après APMEP etex rotated 90,B);
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={boolean Legende;
+      Legende=\useKV[Colorilude]{Legende};
+      nblargeur:=\useKV[Colorilude]{Largeur};
+      nblignes:=\useKV[Colorilude]{Lignes};
+      coef:=\useKV[Colorilude]{Coef};
+      numeric n;
+      n:=0;
+      numeric nbCases[];
+      color ColorSucc[];
+      for p_=\the\toklisteremplissage:
+      n:=n+1;
+      if (n mod 2)=0:
+      nbCases[n div 2]:=p_;
+      else:
+      ColorSucc[n div 2]:=p_;
+      fi;
+      endfor;
+    }]
+    pair A,B,C,D;%pour la grille
+    A=(0,0);
+    B-A=u*coef*(nblargeur,0);
+    C-B=u*coef*(0,-nblignes);
+    D-C=A-B;
+    % on colorie :)
+    numeric NBCASES;
+    NBCASES:=0;
+    for l=1 upto (n div 2):
+    fill ((unitsquare xscaled (coef*u*nbCases[l]) yscaled (coef*u)) shifted(coef*u*(NBCASES mod nblargeur,-1-(NBCASES div nblargeur)))) withcolor ColorSucc[l-1];
+    NBCASES:=NBCASES+nbCases[l];
+    endfor;
+    % on trace le quadrillage
+    for k=1 upto nblargeur-1:
+    draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C];
+    endfor;
+    for k=1 upto nblignes-1:
+    draw (k/nblignes)[A,D]--(k/nblignes)[B,C];
+    endfor;
+    draw polygone(A,B,C,D) withpen pensquare scaled 1.5;
+    if Legende:
+    label.lrt(\btex \tiny d'après APMEP etex rotated 90,B);
+    fi;
+  \end{mpost}
+  \fi
+}%
+
+\newtoks\toklisteremplissage%
+\toklisteremplissage{}%
+\def\UpdateRemplissage#1\nil{\addtotok\toklisteremplissage{#1,}}%
+
+\newcommand\ColoriludeEnonce{%
+Pour chaque ligne de la grille, colorie de gauche à droite, de la
+couleur indiquée, le nombre de cases donné par le résultat du calcul.
+}%
+
+\newcommand\ColoriludeListeCouleur[1]{%
+  \setsepchar{ }%
+  \readlist\ListeColoriludeCouleurs{#1}%
+  \foreachitem\compteur\in\ListeColoriludeCouleurs{%
+     \ifodd\compteurcnt\fbox{\begin{minipage}{1em}\centering\text{\ttfamily\bfseries\compteur}\end{minipage}}~\else\compteur\quad\fi%
+  }%
+}%
+
+\newcommand\Colorilude[2][]{%
+  \useKVdefault[Colorilude]%
+  \setKV[Colorilude]{#1}%
+  \setsepchar{\\/ }%
+  \readlist\ListeColorilude{#2}%
+  \ifboolKV[Colorilude]{Solution}{%
+    \toklisteremplissage{}%
+    \foreachitem\compteur\in\ListeColorilude{%
+      \foreachitem\couleur\in\ListeColorilude[\compteurcnt]{%
+        \expandafter\UpdateRemplissage\couleur\nil}%
+    }%
+    \TraceEchiquierColoreColorilude%
+  }{%
+    \dispogpfc{%
+      \TraceEchiquierColorilude%
+    }{%
+      % On cherche le nombre max de colonnes
+      \xdef\ListeColoriludeMax{0}%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeColoriludelen}}\do{%
+        \xintifboolexpr{\listlen\ListeColorilude[##1]>\ListeColoriludeMax}{%
+          \xdef\ListeColoriludeMax{\listlen\ListeColorilude[##1]}%
+        }{}%
+      }%
+      \setlength{\tabcolsep}{0.2\tabcolsep}%
+      \begin{NiceTabular}{*{\fpeval{\ListeColoriludeMax/2}}{rl}}%
+        \xintFor* ##1 in {\xintSeq {1}{\ListeColoriludelen}}\do{%
+          \xintifboolexpr{\listlen\ListeColorilude[##1]==\ListeColoriludeMax}{%
+            \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeColorilude[##1]}}\do{%
+              \xintifForFirst{}{&~}\ifodd##2\fbox{\begin{minipage}{1em}\centering\text{\ttfamily\bfseries\ListeColorilude[##1,##2]}\end{minipage}}\ifboolKV[Colorilude]{Resultats}{\fbox{\begin{minipage}{1em}\centering\ttfamily\bfseries \phantom{R}\end{minipage}}}{}~\else\ifboolKV[Colorilude]{CartonReponse}{\pointilles[25pt]}{$\ListeColorilude[##1,##2]$}\fi%
+            }%
+          }{%
+            \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeColorilude[##1]}}\do{%
+              \xintifForFirst{}{&~}\ifodd##2\fbox{\begin{minipage}{1em}\centering\text{\ttfamily\bfseries\ListeColorilude[##1,##2]}\end{minipage}}\ifboolKV[Colorilude]{Resultats}{\fbox{\begin{minipage}{1em}\centering\ttfamily\bfseries \phantom{R}\end{minipage}}}{}~\else\ifboolKV[Colorilude]{CartonReponse}{\pointilles[25pt]}{$\ListeColorilude[##1,##2]$}\fi%
+            }%
+            &\hbox to5pt{}&\Cdots%
+          }%
+          \\[0.5em]%
+        }%
+      \end{NiceTabular}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCColorilude.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCompteBon.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCCompteBon.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCCompteBon.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,238 @@
+%%%
+% Le compte est bon
+%%%
+\setKVdefault[CompteBon]{NombreCalculs=5,NombrePlaques=4,Solution=false,Relatifs=false,Original=false,Graines=false,Plaques=6}
+\defKV[CompteBon]{Graine=\setKV[CompteBon]{Graines}}%
+
+\makeatletter
+
+\newcommand\PfC at CreerListeCalculs[4]{%
+  \xdef\PfC at ListeCalculs{%
+    #1+#2+#3+#4,%
+    #1+#2+#3*#4/#1+#3*#4+#2/#3*#4+#1+#2,%
+    #1+#3+#2*#4/#1+#2*#4+#3/#2*#4+#1+#3,%
+    #1+#4+#2*#3/#1+#2*#3+#4/#2*#3+#1+#4,%
+    #2+#3+#1*#4/#2+#1*#4+#3/#1*#4+#2+#3,%
+    #2+#4+#1*#3/#2+#1*#3+#4/#2+#4+#1*#3,%
+    #3+#4+#1*#2/#3+#1*#2+#4/#3+#4+#1*#2,%
+    #1*#2+#3*#4/#3*#4+#1*#2,%
+    #1*#3+#2*#4/#2*#4+#1*#3,%
+    #1*#4+#2*#3/#2*#3+#1*#4,%
+    #1*#2*#3+#4/#4+#1*#2*#3,
+    #1*#2*#4+#3/#3+#1*#2*#4,%
+    #1*#3*#4+#2/#2+#1*#3*#4,%
+    #2*#3*#4+#1/#1+#2*#3*#4,%
+    #1*#2*#3*#4,%
+    #1+(#2+#3)*#4/(#2+#3)*#4+#1/#1+#4*(#2+#3)/#4*(#2+#3)+#1,%
+    #1+(#2+#4)*#3/(#2+#4)*#3+#1/#1+#3*(#2+#4)/#3*(#2+#4)+#1,%
+    #1+(#3+#4)*#2/(#3+#4)*#2+#1/#1+#2*(#3+#4)/#2*(#3+#4)+#1,%
+    #2+(#1+#3)*#4,%
+    #2+(#1+#4)*#3,%
+    #2+(#3+#4)*#1,%
+    #3+(#1+#2)*#4,%
+    #3+(#1+#4)*#2,%
+    #3+(#2+#4)*#1,%
+    #4+(#1+#2)*#3,%
+    #4+(#1+#3)*#2,%
+    #4+(#2+#3)*#1,%
+    (#1+#2+#3)*#4,%
+    (#1+#2+#4)*#3,%
+    (#1+#3+#4)*#2,%
+    (#2+#3+#4)*#1,%
+    (#1+#2)*(#3+#4),%
+    (#1+#3)*(#2+#4),%
+    (#1+#4)*(#2+#3)%
+  }%
+  \ifboolKV[CompteBon]{Relatifs}{%
+    \xdef\PfC at ListeCalculs{%
+      \PfC at ListeCalculs,%
+      #1-#2-#3-#4,%
+      #1-#2-#3*#4/#1-#3*#4-#2/#3*#4-#1-#2,%
+      #1-#3-#2*#4/#1-#2*#4-#3/#2*#4-#1-#3,%
+      #1-#4-#2*#3/#1-#2*#3-#4/#2*#3-#1-#4,%
+      #2-#3-#1*#4/#2-#1*#4-#3/#1*#4-#2-#3,%
+      #2-#4-#1*#3/#2-#1*#3-#4/#2-#4-#1*#3,%
+      #3-#4-#1*#2/#3-#1*#2-#4/#3-#4-#1*#2,%
+      #1*#2-#3*#4/#3*#4-#1*#2,%
+      #1*#3-#2*#4/#2*#4-#1*#3,%
+      #1*#4-#2*#3/#2*#3-#1*#4,%
+      #1*#2*#3-#4/#4-#1*#2*#3,
+      #1*#2*#4-#3/#3-#1*#2*#4,%
+      #1*#3*#4-#2/#2-#1*#3*#4,%
+      #2*#3*#4-#1/#1-#2*#3*#4,%
+      #1*#2*#3*#4,%
+      #1-(#2-#3)*#4/(#2-#3)*#4-#1/#1-#4*(#2-#3)/#4*(#2-#3)-#1,%
+      #1-(#2-#4)*#3/(#2-#4)*#3-#1/#1-#3*(#2-#4)/#3*(#2-#4)-#1,%
+      #1-(#3-#4)*#2/(#3-#4)*#2-#1/#1-#2*(#3-#4)/#2*(#3-#4)-#1,%
+      #2-(#1-#3)*#4,%
+      #2-(#1-#4)*#3,%
+      #2-(#3-#4)*#1,%
+      #3-(#1-#2)*#4,%
+      #3-(#1-#4)*#2,%
+      #3-(#2-#4)*#1,%
+      #4-(#1-#2)*#3,%
+      #4-(#1-#3)*#2,%
+      #4-(#2-#3)*#1,%
+      (#1-#2-#3)*#4,%
+      (#1-#2-#4)*#3,%
+      (#1-#3-#4)*#2,%
+      (#2-#3-#4)*#1,%
+      (#1-#2)*(#3-#4),%
+      (#1-#3)*(#2-#4),%
+      (#1-#4)*(#2-#3)%
+    }%
+  }{}%
+}%
+
+\newtoks\tokPfCCBRappels
+\def\UpdatetoksCB#1\nil{\addtotok\tokPfCCBRappels{#1,}}%
+
+\NewDocumentCommand\PfCCompteBonOriginal{o}{%
+  \useKVdefault[CompteBon]
+  \setKV[CompteBon]{#1}%
+  %On définit la liste des cartes
+  \xdef\PfCCBListeCartes{1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,25,50,75,100}%
+  \MelangeListe{\PfCCBListeCartes}{\useKV[CompteBon]{Plaques}}
+  \readlist*\PfCCBListeTirage{\faa}
+  \MelangeListe{\faa}{\useKV[CompteBon]{Plaques}}
+  \readlist*\PfCCBListeTirageAffiche{\faa}
+  %%Tirage ok
+  \xdef\PfCCBResultatFinal{1001}%
+  \whiledo{\PfCCBResultatFinal>1000}{%
+    \xdef\PfCListeATrier{\PfCCBListeTirage[1]}%
+    \xintFor* ##1 in{\xintSeq{2}{\useKV[CompteBon]{Plaques}}}\do{%
+      \xdef\PfCListeATrier{\PfCListeATrier,\PfCCBListeTirage[##1]}%
+    }%
+    % 
+    \tokPfCCBRappels{}%
+    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[CompteBon]{Plaques}-1}}}\do{%
+      \MelangeListe{\PfCListeATrier}{2}
+      \readlist*\PfCCBListeTirageIntermediaire{\faa}
+      \xintifboolexpr{\PfCCBListeTirageIntermediaire[1]==1 || \PfCCBListeTirageIntermediaire[2]==1}{%
+        % On ne fait pas de multiplication par 1
+        \xdef\PfCCBAlea{\fpeval{randint(1,2)}}%
+        \xintifboolexpr{\PfCCBAlea==1}{%
+          \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+          \expandafter\UpdatetoksCB\PfCCBTest\nil%
+          \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+          \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+        }{%
+          \xintifboolexpr{\PfCCBListeTirageIntermediaire[1]==\PfCCBListeTirageIntermediaire[2]}{%
+            \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+            \expandafter\UpdatetoksCB\PfCCBTest\nil%
+            \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+          }{%
+            \xdef\PfCCBTest{\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}-\fpeval{min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}=\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])-min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}}
+            \expandafter\UpdatetoksCB\PfCCBTest\nil%
+            \xdef\PfCCBResultat{\fpeval{abs(\PfCCBListeTirageIntermediaire[1]-\PfCCBListeTirageIntermediaire[2])}}
+          }%
+          \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+        }%
+        \xdef\PfCListeATrier{\fii,\PfCCBResultat}%
+      }{%
+        \xdef\PfCCBAlea{\fpeval{randint(1,3)}}%
+        \xintifboolexpr{\PfCCBAlea==1}{%
+          \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+          \expandafter\UpdatetoksCB\PfCCBTest\nil%
+          \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+          \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+        }{%
+          \xintifboolexpr{\PfCCBAlea==2}{%
+            \xintifboolexpr{\PfCCBListeTirageIntermediaire[1]==\PfCCBListeTirageIntermediaire[2]}{%
+              \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}%
+              \expandafter\UpdatetoksCB\PfCCBTest\nil%
+              \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]+\PfCCBListeTirageIntermediaire[2]}}
+            }{%
+              \xdef\PfCCBTest{\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}-\fpeval{min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}=\fpeval{max(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])-min(\PfCCBListeTirageIntermediaire[1],\PfCCBListeTirageIntermediaire[2])}}
+              \expandafter\UpdatetoksCB\PfCCBTest\nil%
+              \xdef\PfCCBResultat{\fpeval{abs(\PfCCBListeTirageIntermediaire[1]-\PfCCBListeTirageIntermediaire[2])}}
+            }%
+            \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+          }{%
+            \xdef\PfCCBTest{\PfCCBListeTirageIntermediaire[1]*\PfCCBListeTirageIntermediaire[2]=\fpeval{\PfCCBListeTirageIntermediaire[1]*\PfCCBListeTirageIntermediaire[2]}}
+            \expandafter\UpdatetoksCB\PfCCBTest\nil%
+            \xdef\PfCCBResultat{\fpeval{\PfCCBListeTirageIntermediaire[1]*\PfCCBListeTirageIntermediaire[2]}}
+            \xintifboolexpr{\PfCCBResultat>10000}{\xintBreakFor\xdef\PfCCBResultat{10000}}{}%
+          }
+        }%
+        \xdef\PfCListeATrier{\fii,\PfCCBResultat}%
+      }%
+    }%
+    \xintifboolexpr{\useKV[CompteBon]{Plaques}>5}{\xintifboolexpr{\PfCCBResultat<100}{\xdef\PfCCBResultat{1001}}{}}{}%
+    \xdef\PfCCBResultatFinal{\PfCCBResultat}%
+  }%
+  \begin{center}
+    \textbf{\PfCCBResultatFinal}
+    
+    \fbox{\PfCCBListeTirage[1]} \xintFor* ##1 in{\xintSeq{2}{\useKV[CompteBon]{Plaques}}}\do{\qquad \fbox{\PfCCBListeTirage[##1]}}%
+  \end{center}
+  \xdef\PfCCBListeRappels{\the\tokPfCCBRappels}
+  \setsepchar[*]{,*=}\ignoreemptyitems
+  \readlist*\PfCCBDecompositionEtapes{\PfCCBListeRappels}
+  \reademptyitems
+  \ifboolKV[CompteBon]{Solution}{%
+    \begin{align*}
+      \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[CompteBon]{Plaques}-1}}}\do{
+      \StrSubstitute{\PfCCBDecompositionEtapes[##1,1]}{*}{\times}[\PfCCBAffiche]\PfCCBAffiche&=\PfCCBDecompositionEtapes[##1,2]\xintifForLast{\\}{}
+      }
+    \end{align*}
+  }{}%
+}%
+
+\NewDocumentCommand\CompteBon{o}{%
+  \useKVdefault[CompteBon]%
+  \setKV[CompteBon]{#1}%
+  \ifboolKV[CompteBon]{Graines}{\PfCGraineAlea{\useKV[CompteBon]{Graine}}}{}%
+  \ifboolKV[CompteBon]{Original}{%
+    \PfCCompteBonOriginal[#1]%
+  }{%
+    % on choisit NombrePlaques parmi la liste des nombres 1 à 9, 10/25/50/75/100, La moitié +1 devant appartenir à 1..9
+    \xdef\PfCCBListeEntiers{2,3,4,5,6,7,8,9}%
+    \xdef\PfCCBListeMultiples{10,25,50,75,100}%
+    \xdef\PfCCBNbPlaqueEntiers{\fpeval{floor(\useKV[CompteBon]{NombrePlaques}/2)+1}}%
+    \xdef\PfCCBNbPlaqueMultiples{\useKV[CompteBon]{NombrePlaques}-\PfCCBNbPlaqueEntiers}%
+    \MelangeListe{\PfCCBListeEntiers}{\PfCCBNbPlaqueEntiers}%
+    \setsepchar{,}%
+    \ignoreemptyitems%
+    \readlist*\PfCCBListeEntiersChoisis{\faa}%
+    \MelangeListe{\PfCCBListeMultiples}{\PfCCBNbPlaqueMultiples}%
+    \ignoreemptyitems%
+    \readlist*\PfCCBListeMultiplesChoisis{\faa}%
+    \reademptyitems%
+    \xdef\PfCCBListeToutesCartes{}%
+    \foreachitem\compteur\in\PfCCBListeEntiersChoisis{%
+      \xdef\PfCCBListeToutesCartes{\PfCCBListeToutesCartes{},\PfCCBListeEntiersChoisis[\compteurcnt]}%
+    }%
+    \foreachitem\compteur\in\PfCCBListeMultiplesChoisis{%
+      \xdef\PfCCBListeToutesCartes{\PfCCBListeToutesCartes{},\PfCCBListeMultiplesChoisis[\compteurcnt]}%
+    }%
+    \MelangeListe{\PfCCBListeToutesCartes}{4}%
+    \readlist*\PfCCBListeFinaleCartes{\faa}%
+    % Choix des calculs
+    \xdef\PfC at CalculUn{\PfCCBListeFinaleCartes[1]}%
+    \xdef\PfC at CalculDeux{\PfCCBListeFinaleCartes[2]}%
+    \xdef\PfC at CalculTrois{\PfCCBListeFinaleCartes[3]}%
+    \xdef\PfC at CalculQuatre{\PfCCBListeFinaleCartes[4]}%
+    \PfC at CreerListeCalculs{\PfC at CalculUn}{\PfC at CalculDeux}{\PfC at CalculTrois}{\PfC at CalculQuatre}
+    \MelangeListe{\PfC at ListeCalculs}{\useKV[CompteBon]{NombreCalculs}}%
+    \setsepchar[*]{,*/}%
+    \readlist*\PfC at ListeCalculsChoisis{\faa}%
+    \begin{center}
+      \setlength{\tabcolsep}{0.5\tabcolsep}
+      % Le tableau des nombres
+      \begin{NiceTabular}{m{20pt}m{10pt}m{20pt}m{10pt}m{20pt}m{10pt}m{20pt}}
+        \Block[draw]{}{\PfCCBListeFinaleCartes[1]}&&\Block[draw]{}{\PfCCBListeFinaleCartes[2]}&&\Block[draw]{}{\PfCCBListeFinaleCartes[3]}&&\Block[draw]{}{\PfCCBListeFinaleCartes[4]}
+      \end{NiceTabular}
+      
+      \bigskip
+      
+      % Le tableau des calculs%
+      \begin{NiceTabular}{m{30pt}cccm{20pt}m{10pt}m{20pt}m{10pt}m{20pt}m{10pt}m{20pt}}
+        \xintFor* ##1 in{\xintSeq{1}{\useKV[CompteBon]{NombreCalculs}}}\do{%
+          \Block[draw]{}{\num{\fpeval{\PfC at ListeCalculsChoisis[##1,1]}}}&&$=$&&\Block[draw]{}{~}&\Block{}{~}&\Block[draw]{}{~}&\Block{}{~}&\Block[draw]{}{~}&\Block{}{~}&\Block[draw]{}{~}\\
+          \ifboolKV[CompteBon]{Solution}{\Block{1-11}{\footnotesize Une solution : \StrSubstitute[0]{\PfC at ListeCalculsChoisis[##1,1]}{*}{\times}[\PfCEcritureCalcul]$\PfCEcritureCalcul$}}{}\\
+        }%
+      \end{NiceTabular}
+    \end{center}
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCCompteBon.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecDeci.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecDeci.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecDeci.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,177 @@
+%%%
+% Décomposition décimale
+%%
+\setKVdefault[DecompDeci]{Parentheses,Colore=false,CouleurU=Blue,CouleurD=Red,CouleurC=Green,Fleches=false,Details=false}
+
+\newcounter{PfCNbDecDeci}
+\setcounter{PfCNbDecDeci}{0}
+
+\NewDocumentCommand\DecompositionDecimale{o m}{%
+  \stepcounter{PfCNbDecDeci}%
+  \useKVdefault[DecompDeci]%
+  \setKV[DecompDeci]{#1}%
+  % On cherche si le nombre est décimal ou entier
+  \StrCount{#2}{.}[\PfCNombrePoint]%
+  \xintifboolexpr{\PfCNombrePoint==0}{%
+    % on compte la longueur.
+    \StrLen{#2}[\PfCNombrePuisMax]%
+    \xdef\PfCRetiensPuis{0}%
+    % On cherche le nombre de 0 terminaux.
+    \xintFor* ##1 in{\xintSeq{1}{\PfCNombrePuisMax}}\do{%
+      \xintifboolexpr{\fpeval{#2/(10^##1)}==\fpeval{round(#2/(10^##1))}}{%
+        \xdef\PfCRetiensPuis{\fpeval{\PfCRetiensPuis+1}}%
+      }{}%
+    }%
+    % On cherche un affichage du style \num de \siunitx
+    \modulo{\fpeval{\PfCNombrePuisMax}}{3}%
+    \xintifboolexpr{\remainder==0}{%
+      \xdef\PfCDecDeciEcart{0}
+    }{\xintifboolexpr{\remainder==1}{\xdef\PfCDecDeciEcart{1}}{\xdef\PfCDecDeciEcart{2}}}
+    \ifboolKV[DecompDeci]{Fleches}{%
+      \colorlet{oldcolor}{black}%
+      % On affiche
+      \begin{center}
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax}}}\do{%
+          \StrChar{#2}{##1}[\PfCNombreChiffre]%
+          \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}%
+          \xintifboolexpr{\remainder==0}{%
+            \color{\useKV[DecompDeci]{CouleurU}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}\xintifForLast{}{\,\color{oldcolor}}}{%
+            \xintifboolexpr{\remainder==1}{%
+              \color{\useKV[DecompDeci]{CouleurC}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}}{%
+              \color{\useKV[DecompDeci]{CouleurD}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}%
+            }%
+          }%
+        }\color{oldcolor}%
+        
+        \vspace*{3em}
+        
+        \ifboolKV[DecompDeci]{Details}{%
+          \ensuremath{%
+            \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{%
+              \StrChar{#2}{##1}[\PfCNombreChiffre]
+              \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}%
+              \colorlet{oldcolor}{.}
+              \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{%
+                \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{%
+                  \color{\useKV[DecompDeci]{CouleurD}}%
+                }%
+              }%
+              \xintifboolexpr{\PfCNombreChiffre==0}{}{%
+                \tikzmarknode[anchor=north,inner ysep=2pt]{DDC-\thePfCNbDecDeci-##1}{\boxed{\num{\fpeval{\PfCNombreChiffre*10^(\PfCNombrePuisMax-##1)}}}}\color{oldcolor}%
+                \xintifForLast{}{+}%
+              }%
+            }%
+          }%
+
+          \vspace*{3em}
+          
+        }{}%
+        
+        \ensuremath{%
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{%
+            \StrChar{#2}{##1}[\PfCNombreChiffre]
+            \xintifboolexpr{\PfCNombreChiffre==0}{}{%
+              \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}%
+              \colorlet{oldcolor}{.}
+              \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{%
+                \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{%
+                  \color{\useKV[DecompDeci]{CouleurD}}%
+                }%
+              }%
+              \tikzmarknode[anchor=north,inner ysep=2pt]{DDB-\thePfCNbDecDeci-##1}{\boxed{\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}}}{}\color{oldcolor}%
+              \xintifForLast{}{+}%
+            }%
+          }%
+        }%
+      \end{center}
+      \begin{tikzpicture}[remember picture,overlay]
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{%
+          \StrChar{#2}{##1}[\PfCNombreChiffre]%
+          \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}%
+          \xintifboolexpr{\remainder==0}{%
+            \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurU}}}{%
+            \xintifboolexpr{\remainder==1}{%
+              \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurC}}}{%
+              \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurD}}%
+            }%
+          }%
+          \ifboolKV[DecompDeci]{Details}{%
+            \xintifboolexpr{\PfCNombreChiffre>0}{%
+              \draw[-stealth,PfCDecDeciColor] (pic cs:DDA-\thePfCNbDecDeci-##1) to (pic cs:DDC-\thePfCNbDecDeci-##1);
+              \node (DDD-\thePfCNbDecDeci-##1) at ($(pic cs:DDC-\thePfCNbDecDeci-##1)!0.35!(pic cs:DDB-\thePfCNbDecDeci-##1)$) {};
+              \draw[-stealth,PfCDecDeciColor] (DDD-\thePfCNbDecDeci-##1) to (pic cs:DDB-\thePfCNbDecDeci-##1);
+            }{}%
+          }{%
+            \xintifboolexpr{\PfCNombreChiffre>0}{%
+              \draw[-stealth,PfCDecDeciColor] (pic cs:DDA-\thePfCNbDecDeci-##1) to (pic cs:DDB-\thePfCNbDecDeci-##1);
+            }{}%
+          }%
+        }%
+      \end{tikzpicture}
+    }{%
+      \ifboolKV[DecompDeci]{Colore}{%
+        \colorlet{oldcolor}{black}%
+        \ensuremath{%
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax}}}\do{%
+            \StrChar{#2}{##1}[\PfCNombreChiffre]%
+            \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}%
+            \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}\PfCNombreChiffre\xintifForLast{}{\,\color{oldcolor}}}{%
+              \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}\PfCNombreChiffre}{%
+                \color{\useKV[DecompDeci]{CouleurD}}\PfCNombreChiffre%
+              }%
+            }%
+          }\color{oldcolor}%
+          =        
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{%
+            \StrChar{#2}{##1}[\PfCNombreChiffre]
+            \xintifboolexpr{\PfCNombreChiffre==0}{}{%
+              \modulo{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis-##1}}{3}
+              \colorlet{oldcolor}{.}
+              \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{%
+                \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurD}}}{%
+                  \color{\useKV[DecompDeci]{CouleurC}}%
+                }%
+              }%
+              \boxed{\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}}\color{oldcolor}%
+              \xintifForLast{}{+}%
+            }%
+          }%
+        }
+      }{%
+        \ensuremath{%
+          \num{#2}=
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{%
+            \StrChar{#2}{##1}[\PfCNombreChiffre]
+            \xintifboolexpr{\PfCNombreChiffre==0}{}{%
+              \ifboolKV[DecompDeci]{Parentheses}{\left(}{}\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}\ifboolKV[DecompDeci]{Parentheses}{\right)}{}%
+              \xintifForLast{}{+}%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }{%partie avec les nombres décimaux
+    \StrDel{#2}{.}[\PfCRetiensNombreEntier]%
+    \StrLen{#2}[\PfCNombrePuisMax]%
+    \xdef\PfCNombrePuisMax{\fpeval{\PfCNombrePuisMax-1}}%
+    \StrPosition{#2}{.}[\PfCPositionPoint]%
+    \xdef\PfCPuisDeci{\fpeval{\PfCNombrePuisMax-\PfCPositionPoint}}%
+    \xdef\PfCRetiensPuis{0}%
+    % On cherche le nombre de 0 terminaux.
+    \xintFor* ##1 in{\xintSeq{1}{\PfCNombrePuisMax}}\do{%
+      \xintifboolexpr{\fpeval{(#2*10^(\PfCPuisDeci+1))/(10^##1)}==\fpeval{round((#2*10^(\PfCPuisDeci+1))/(10^##1))}}{%
+        \xdef\PfCRetiensPuis{\fpeval{\PfCRetiensPuis+1}}%
+      }{}%
+    }%
+    \ensuremath{%
+      \num{#2}=
+      \xintFor* ##1 in {\xintSeq{1}{\PfCNombrePuisMax-\PfCRetiensPuis}}\do{%
+        \StrChar{\PfCRetiensNombreEntier}{##1}[\PfCNombreChiffre]
+        \xintifboolexpr{\PfCNombreChiffre==0}{}{%
+          \ifboolKV[DecompDeci]{Parentheses}{\left(}{}\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1-\PfCPuisDeci-1)}}\ifboolKV[DecompDeci]{Parentheses}{\right)}{}%
+          \xintifForLast{}{+}%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecDeci.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecompFracDeci.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecompFracDeci.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecompFracDeci.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,59 @@
+%%%
+% D\'ecomposition de fractions d\'ecimales
+%%%
+\setKVdefault[ClesFracDeci]{Complete=false,SansZero=false,Remediation=false,Longueur=1cm}
+\newlength{\PfCLongueurP}%
+
+\newcommand\FractionDecimale[2][]{%
+  \useKVdefault[ClesFracDeci]%
+  \setKV[ClesFracDeci]{#1}%
+  \setlength{\PfCLongueurP}{\useKV[ClesFracDeci]{Longueur}}%
+  \setsepchar[*]{/}%
+  \readlist*\ListeFractionDecimale{#2}%
+  \xdef\FractionDeciNum{\ListeFractionDecimale[1]}%
+  \xdef\FractionDeciDeno{\ListeFractionDecimale[2]}%
+  \xdef\PartieEntiereFractionDeci{\fpeval{floor(\FractionDeciNum/\FractionDeciDeno)}}%
+  \xdef\PartieDecimaleFractionDeci{\fpeval{\FractionDeciNum-floor(\FractionDeciNum/\FractionDeciDeno)*\FractionDeciDeno}}%
+  \StrLen{\PartieDecimaleFractionDeci}[\LongueurPartieDecimale]%
+  \StrLen{\fpeval{\FractionDeciDeno}}[\LongueurFracDeciDeno]%
+  \StrLen{\fpeval{\FractionDeciNum}}[\LongueurFracDeciNum]%
+  \xintifboolexpr{\PartieEntiereFractionDeci == 0}{\xdef\LongueurPartieEntiere{0}}{\StrLen{\PartieEntiereFractionDeci}[\LongueurPartieEntiere]}%
+  \xintifboolexpr{\PartieEntiereFractionDeci == \fpeval{\FractionDeciNum/\FractionDeciDeno}}{%
+    \ensuremath{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\PartieEntiereFractionDeci}}}%
+  }{%
+    \ifboolKV[ClesFracDeci]{SansZero}{%
+      \ensuremath{%
+        \xintifboolexpr{\PartieEntiereFractionDeci == 0}{}{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\PartieEntiereFractionDeci}}+}%
+        \xintFor* ##1 in {\xintSeq{1}{\LongueurPartieDecimale}}\do{%
+          \StrMid{\PartieDecimaleFractionDeci}{##1}{##1}[\ChiffrePartieDecimale]%
+          \xintifForFirst{}{\xintifboolexpr{\ChiffrePartieDecimale == 0}{}{+}}\xintifboolexpr{\ChiffrePartieDecimale == 0}{}{\frac{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\ChiffrePartieDecimale}}}{\num{\fpeval{10**(\LongueurFracDeciDeno-1-\LongueurPartieDecimale+##1)}}}}%
+        }%
+      }%
+    }{%
+      \ifboolKV[ClesFracDeci]{Complete}{%
+        \xintifboolexpr{\FractionDeciNum>\FractionDeciDeno}{%
+          \ensuremath{%
+            % on affiche la partie entière.
+            \xintifboolexpr{\PartieEntiereFractionDeci == 0}{}{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\PartieEntiereFractionDeci}}+}%
+            \StrGobbleLeft{\FractionDeciNum}{\fpeval{\LongueurPartieEntiere}}[\DecompositionFracDeciComplete]%
+            % on affiche la partie décimale.
+            \xintFor* ##1 in {\xintSeq{1}{\fpeval{\LongueurFracDeciNum-\LongueurPartieEntiere}}}\do{%
+              \xintifForFirst{}{+}\StrMid{\DecompositionFracDeciComplete}{##1}{##1}[\ChiffrePartieDecimale]\frac{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\ChiffrePartieDecimale}}}{\num{\fpeval{10**##1}}}%
+            }%
+          }%
+        }{%
+          \ensuremath{%
+            \xintFor* ##1 in {\xintSeq{1}{\LongueurPartieDecimale}}\do{%
+              \StrMid{\PartieDecimaleFractionDeci}{##1}{##1}[\ChiffrePartieDecimale]%
+              \xintifForFirst{}{+}\frac{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\ChiffrePartieDecimale}}}{\num{\fpeval{10**(\LongueurFracDeciDeno-1-\LongueurPartieDecimale+##1)}}}%
+            }%
+          }%
+        }%
+      }{%
+        \ensuremath{%
+          \xintifboolexpr{\PartieEntiereFractionDeci == 0}{}{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\PartieEntiereFractionDeci}}+}\frac{\ifboolKV[ClesFracDeci]{Remediation}{\pointilles[\PfCLongueurP]}{\num{\PartieDecimaleFractionDeci}}}{\num{\FractionDeciDeno}}%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecompFracDeci.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecomposerNombrePremier.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecomposerNombrePremier.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecomposerNombrePremier.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,763 @@
+%%%
+% Nombre Premier
+%%%
+\setKVdefault[ClesNombrePremier]{Tableau=false,TableauVide=false,TableauVertical=false,TableauVerticalVide=false,Exposant=false,Longue=false,All=false,Arbre=false,ArbreVide=false,ArbreComplet=false,ArbreDessine=false,ArbreDessineVide=false,Entoure=false,Entourefin=false,Diviseurs=false,DiviseursT=false,Dot=\dotfill,Impose=false,ImposeAll=false,Potence=false,Decalage=10,Vide=false,CouleurFeuillage=ForestGreen,CouleurTronc=BurlyWood,CouleurFruits=Red,CouleurTexte=white}%
+\defKV[ClesNombrePremier]{Nombre=\ifboolKV[ClesNombrePremier]{ArbreDessine}{}{\ifboolKV[ClesNombrePremier]{ArbreDessineVide}{}{\setKV[ClesNombrePremier]{Impose}}}}%
+\defKV[ClesNombrePremier]{AllNombre=\setKV[ClesNombrePremier]{ImposeAll}}%
+\defKV[ClesNombrePremier]{Impression=\setKV[ClesNombrePremier]{CouleurFeuillage=white,CouleurTronc=white,CouleurFruits=gris,CouleurTexte=black}}
+
+\newcommand\Decomposition[2][]{%
+  \useKVdefault[ClesNombrePremier]%
+  \setKV[ClesNombrePremier]{#1}%
+  \ifboolKV[ClesNombrePremier]{Impose}{\NombrePremierImpose{#2}{\useKV[ClesNombrePremier]{Nombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{Nombre}}}}{}%
+  \ifboolKV[ClesNombrePremier]{ImposeAll}{\NombrePremierImpose{#2}{\useKV[ClesNombrePremier]{AllNombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{AllNombre}}}}{}%
+  \ifboolKV[ClesNombrePremier]{Tableau}{\NombrePremier{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{TableauVide}{\NombrePremier{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{Potence}{\NombrePremierPotence{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{TableauVertical}{\NombrePremierVertical{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{TableauVerticalVide}{\NombrePremierVerticalVide{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{Exposant}{\PremierExposant{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{Longue}{\PremierLong{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{All}{\NombrePremierExposant{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{Arbre}{\MPArbre{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{ArbreComplet}{\MPArbreComplet{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{ArbreVide}{\MPArbreVide{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{ArbreDessine}{\MPArbreDessine{#2}{\useKV[ClesNombrePremier]{Nombre}}}{}%
+  \ifboolKV[ClesNombrePremier]{ArbreDessineVide}{\setKV[ClesNombrePremier]{Vide=true}\MPArbreDessine{#2}{\useKV[ClesNombrePremier]{Nombre}}}{}%
+  \ifboolKV[ClesNombrePremier]{Diviseurs}{\ListeDiviseur{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{DiviseursT}{\ListeDiviseurT{#2}}{}%
+}%
+
+\def\MPArbre#1{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+    numeric decalage;
+    decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;
+
+    k:=0;
+    Ancre0:=(0,0);
+    racine:=#1;
+
+    label(btex \num{#1} etex,(0,0));
+    forever:
+    PremierSimple(racine);
+    exitif racine=1;
+    endfor;
+
+    if \useKV[ClesNombrePremier]{Entoure}:
+    for l=1 upto k:
+    if Estcepremier(retenirnb[l]):
+    draw cercles(Ancre[l],0.25*decalage);
+    fi;
+    endfor;
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={numeric decalage;decalage=\useKV[ClesNombrePremier]{Decalage}*1mm; boolean Entoure; Entoure=\useKV[ClesNombrePremier]{Entoure};}]
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+    
+    k:=0;
+    Ancre0:=(0,0);
+    racine:=#1;
+    label(LATEX("\num{"&decimal(racine)&"}"),(0,0));
+    forever:
+    PremierSimplePdf(racine);
+    exitif racine=1;
+    endfor;
+
+    if \useKV[ClesNombrePremier]{Entoure}:
+    for l=1 upto k:
+    if Estcepremier(retenirnb[l]):
+    draw cercles(Ancre[l],0.25*decalage);
+    fi;
+    endfor;
+    fi;
+\end{mpost}
+\fi
+}
+
+\def\MPArbreComplet#1{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+    numeric decalage;
+    decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;
+    
+    dx:=1cm;
+    dy:=1cm;
+    
+    pair N[][];
+    nbe:=NbEtape(#1);
+    Positions(nbe);
+    if \useKV[ClesNombrePremier]{Entoure}:
+    draw polygone(N[nbe-1][0]+(-0.25*dx,0.25*decalage),N[nbe-1][nbe-1]+(0.25*dx,0.25*decalage),N[nbe-1][nbe-1]+(0.25*dx,-0.25*decalage),N[nbe-1][0]+(-0.25*dx,-0.25*decalage)) dashed evenly;
+  fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={numeric decalage;decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;}]
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+
+    dx:=1cm;
+    dy:=1cm;
+
+    pair N[][];
+
+    PositionsPdf(NbEtape(#1));
+  \end{mpost}
+  \fi
+}
+
+\def\MPArbreVide#1{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+    numeric decalage;
+    decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;
+    
+    dx:=1cm;
+    dy:=1cm;
+    
+    pair N[][];
+    
+    PositionsVide(NbEtape(#1));
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={numeric decalage; decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;}]
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+    
+    dx:=1cm;
+    dy:=1cm;
+
+    pair N[][];
+
+    PositionsVidePdf(NbEtape(#1));
+  \end{mpost}
+  \fi
+}
+
+\def\MPArbreDessine#1#2{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}
+    input PfCArithmetique;
+    numeric depart;
+    pair Ancre[];
+    numeric decalage;
+    decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;
+    rayonfruits:=3mm;
+
+    color CouleurTronc,CouleurFeuillage,CouleurFruits,CouleurTexte;
+    CouleurTronc=\useKV[ClesNombrePremier]{CouleurTronc};
+    CouleurFeuillage=\useKV[ClesNombrePremier]{CouleurFeuillage};
+    CouleurFruits=\useKV[ClesNombrePremier]{CouleurFruits};
+    CouleurTexte=\useKV[ClesNombrePremier]{CouleurTexte};
+    
+    k:=0;
+    Ancre0:=(0,0);
+    racine:=#1;
+    k:=1;
+    Ancre1:=(-decalage,-decalage);
+    draw Branche(Ancre0,Ancre1);
+    retenirnb[1]:=#2;
+    racine:=#2;
+    forever:
+    PremierSimpleArbre(racine);
+    exitif racine=1;
+    endfor;
+    k:=k+1;
+    Ancre[k]:=(decalage,-decalage);
+    draw Branche(Ancre0,Ancre[k]);
+    retenirnb[k]:=#1 div #2;
+    racine:=retenirnb[k];
+    forever:
+    PremierSimpleArbre(racine);
+    exitif racine=1;
+    endfor;
+
+    fill cercles(Ancre[0],rayonfruits) withcolor white;
+    label(btex \num{#1} etex,(0,0));
+    for l=1 upto k:
+    if \useKV[ClesNombrePremier]{Vide}:
+    fill cercles(Ancre[l],rayonfruits) withcolor white;
+    else:
+    if Estcepremier(retenirnb[l]):
+    fill cercles(Ancre[l],rayonfruits) withcolor CouleurFruits;
+    drawoptions(withcolor CouleurTexte);
+    label(TEX("\num{"&decimal(retenirnb[l])&"}"),Ancre[l]);
+    drawoptions();
+    else:
+    fill cercles(Ancre[l],rayonfruits) withcolor white;
+    label(TEX("\num{"&decimal(retenirnb[l])&"}"),Ancre[l]);
+    fi;
+    fi;
+    endfor;
+    for l=0 upto k:
+    draw cercles(Ancre[l],rayonfruits);
+    endfor;
+    picture Bilan;
+    Bilan=currentpicture;
+    currentpicture:=nullpicture;
+    % Habillage
+    % On récupère le min des ordonnées des Ancre pour le feuillage
+    minord=1000;
+    nbancrearetenir=0;
+    for l=0 upto k:
+    if ypart(Ancre[l])<minord:
+    minord:=ypart(Ancre[l]);
+    nbancrearetenir:=l;
+    fi;
+    endfor;
+    pair D[];
+    D0=0.5[Ancre0,(0,ypart(Ancre[nbancrearetenir]))];
+    dotlabel("",D0);
+    % Herbe du sol
+    pair A[];
+    A0=(xpart(Ancre0)-1cm,ypart(Ancre[nbancrearetenir])-2cm);
+    A10=(xpart(Ancre0)+1cm,ypart(Ancre[nbancrearetenir])-2cm);
+    for l=1 upto 9:
+    A[l]=(l/10)[A0,A10]+uniformdeviate(5)*(unitvector(A10-A0) rotated 90);
+    endfor;
+    %Pour le tronc
+    pair B[];
+    B1=D0+(10+uniformdeviate(10))*(unitvector(D0-A0) rotated 90);
+    B2=symetrie(B1,Ancre0,1/2[A0,A10]);%=(-2mm,0);
+    B3=1/2[Ancre0,(xpart(1/2[A0,A10]),ypart(Ancre[k]))];
+    path tronc;
+    tronc=A0{dir angle(A1-A0)}..{dir90}B1--B2{dir-90}..{dir angle(A10-A9)}A10--reverse(A0 for l=1 upto 10:--A[l] endfor)--cycle;%
+    fill tronc withcolor CouleurTronc;
+    trace tronc;
+    % Pour le feuillage
+    path feuillage;
+    feuillage=cercles((0,0),abs(Ancre[nbancrearetenir]-D0));%
+    pair C[];
+    for l=0 upto 7:
+    C[l]=(pointarc(feuillage,l*45+(-5+uniformdeviate(10))) xscaled 1.25 yscaled 1) shifted D0;
+    endfor;
+    feuillage:=C[0] for l=1 upto 7:..(C[l] if (l mod 2)=0:+(0,2mm) else: +(0,-2mm) fi) endfor ..cycle;
+    fill feuillage withcolor CouleurFeuillage;
+    trace feuillage;
+    draw Bilan;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={numeric decalage;decalage=\useKV[ClesNombrePremier]{Decalage}*1mm;color CouleurTronc,CouleurFeuillage,CouleurFruits,CouleurTexte;CouleurTronc=\useKV[ClesNombrePremier]{CouleurTronc};CouleurFeuillage=\useKV[ClesNombrePremier]{CouleurFeuillage};CouleurFruits=\useKV[ClesNombrePremier]{CouleurFruits}; CouleurTexte=\useKV[ClesNombrePremier]{CouleurTexte}; boolean Vide; Vide=\useKV[ClesNombrePremier]{Vide};}]
+    input PfCArithmetiquePDF;
+    numeric depart;
+    pair Ancre[];
+    rayonfruits:=3mm;
+    
+    k:=0;
+    Ancre0:=(0,0);
+    racine:=#1;
+    k:=1;
+    Ancre1:=(-decalage,-decalage);
+    draw Branche(Ancre0,Ancre1);
+    retenirnb[1]:=#2;
+    racine:=#2;
+    forever:
+    PremierSimpleArbre(racine);
+    exitif racine=1;
+    endfor;
+    k:=k+1;
+    Ancre[k]:=(decalage,-decalage);
+    draw Branche(Ancre0,Ancre[k]);
+    retenirnb[k]:=#1 div #2;
+    racine:=retenirnb[k];
+    forever:
+    PremierSimpleArbre(racine);
+    exitif racine=1;
+    endfor;
+
+    fill cercles(Ancre[0],rayonfruits) withcolor white;
+    label(btex \num{#1} etex,(0,0));
+    for l=1 upto k:
+    if Vide:
+    fill cercles(Ancre[l],rayonfruits) withcolor white;
+    else:
+    if Estcepremier(retenirnb[l]):
+    fill cercles(Ancre[l],rayonfruits) withcolor CouleurFruits;
+    drawoptions(withcolor CouleurTexte);
+    label(LATEX("\num{"&decimal(retenirnb[l])&"}"),Ancre[l]);
+    drawoptions();
+    else:
+    fill cercles(Ancre[l],rayonfruits) withcolor white;
+    label(LATEX("\num{"&decimal(retenirnb[l])&"}"),Ancre[l]);
+    fi;
+    fi;
+    endfor;
+    for l=0 upto k:
+    draw cercles(Ancre[l],rayonfruits);
+    endfor;
+    picture Bilan;
+    Bilan=currentpicture;
+    currentpicture:=nullpicture;
+    % Habillage
+    minord=1000;
+    nbancrearetenir=0;
+    for l=0 upto k:
+    if ypart(Ancre[l])<minord:
+    minord:=ypart(Ancre[l]);
+    nbancrearetenir:=l;
+    fi;
+    endfor;
+    pair D[];
+    D0=0.5[Ancre0,(0,ypart(Ancre[nbancrearetenir]))];
+    pair A[];
+    A0=(xpart(Ancre0)-1cm,ypart(Ancre[nbancrearetenir])-2cm);
+    A10=(xpart(Ancre0)+1cm,ypart(Ancre[nbancrearetenir])-2cm);
+    for l=1 upto 9:
+    A[l]=(l/10)[A0,A10]+uniformdeviate(5)*(unitvector(A10-A0) rotated 90);
+    endfor;
+    pair B[];
+    B1=D0+(10+uniformdeviate(10))*(unitvector(D0-A0) rotated 90);
+    B2=symetrie(B1,Ancre0,1/2[A0,A10]);%
+    B3=1/2[Ancre0,(xpart(1/2[A0,A10]),ypart(Ancre[k]))];
+    path tronc;
+    tronc=A0{dir angle(A1-A0)}..{dir90}B1--B2{dir-90}..{dir angle(A10-A9)}A10--reverse(A0 for l=1 upto 10:--A[l] endfor)--cycle;%
+    fill tronc withcolor CouleurTronc;
+    trace tronc;
+    path feuillage;
+    feuillage=cercles((0,0),abs(Ancre[nbancrearetenir]-D0));%
+    pair C[];
+    for l=0 upto 7:
+    C[l]=(pointarc(feuillage,l*45+(-5+uniformdeviate(10))) xscaled 1.25 yscaled 1) shifted D0;
+    endfor;
+    feuillage:=C[0] for l=1 upto 7:..(C[l] if (l mod 2)=0:+(0,2mm) else: +(0,-2mm) fi) endfor ..cycle;
+    fill feuillage withcolor CouleurFeuillage;
+    trace feuillage;
+    draw Bilan;
+  \end{mpost}
+\fi
+}
+
+\newcount\premier%
+
+\newcommand\NombrePremier[1]{%\'ecrire la d\'ecomposition compl\`ete
+  % #1 le nombre premier \`a tester
+  \newcount\anp\newcount\bnp\newcount\cnp%
+  \anp=#1\relax
+  \bnp=2\relax
+  \premier=-1\relax
+  % Pour d\'eterminer le nombre d'\'etapes
+  \whiledo{\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax
+      \global\premier=\numexpr\premier+1\relax
+      \cnp=\numexpr\anp/\bnp\relax
+      \anp=\cnp\relax
+    \else%
+      \bnp=\numexpr\bnp+1\relax%
+    \fi%
+  }
+  \ifnum\premier=0
+    Le nombre \num{#1} est un nombre premier.
+  \else
+    \begin{align*}
+      \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\ifboolKV[ClesNombrePremier]{TableauVide}{\phantom{\PremierEtape{#1}{##1}}}{\PremierEtape{#1}{##1}}\xintifboolexpr{##1<\premier}{\\}{}}%
+    \end{align*}
+  \fi
+}
+
+\newcount\premierun
+\newcount\premierdeux
+
+\newcommand\NombrePremierImpose[3]{%
+  % #1 le nombre premier \`a tester
+  % #2 est le premier facteur imposé
+  % #3 est le deuxième facteur imposé
+  \newcount\anp\newcount\bnp\newcount\cnp%
+  % Pour d\'eterminer le nombre d'\'etapes pour #1
+  \anp=#1\relax
+  \bnp=2\relax
+  \premier=-1\relax
+  \whiledo{\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax
+      \global\premier=\numexpr\premier+1\relax
+      \cnp=\numexpr\anp/\bnp\relax
+      \anp=\cnp\relax
+    \else%
+      \bnp=\numexpr\bnp+1\relax%
+    \fi%
+  }%
+  % Pour d\'eterminer le nombre d'\'etapes pour #2
+  \anp=#2\relax
+  \bnp=2\relax
+  \premierun=-1\relax
+  \whiledo{\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax
+      \global\premierun=\numexpr\premierun+1\relax
+      \cnp=\numexpr\anp/\bnp\relax
+      \anp=\cnp\relax
+    \else%
+      \bnp=\numexpr\bnp+1\relax%
+    \fi%
+  }%
+  % Pour d\'eterminer le nombre d'\'etapes pour #3
+  \anp=#3\relax
+  \bnp=2\relax
+  \premierdeux=-1\relax
+  \whiledo{\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax
+      \global\premierdeux=\numexpr\premierdeux+1\relax
+      \cnp=\numexpr\anp/\bnp\relax
+      \anp=\cnp\relax
+    \else%
+      \bnp=\numexpr\bnp+1\relax%
+    \fi%
+  }%
+  \ifboolKV[ClesNombrePremier]{ImposeAll}{\xdef\PfCRappelImposeAll{1}}{\xdef\PfCRappelImposeAll{0}}%
+  \ifnum\premier=0
+  Le nombre \num{#1} est un nombre premier.
+  \else
+  \xintifboolexpr{\premierun>\premierdeux}{\premier=\premierun}{\premier=\premierdeux}
+  \begin{align*}
+    \num{#1}&=\num{#2}\times\num{#3}%\\
+    \xintifboolexpr{\premier>0}{\\%
+    \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\xintifboolexpr{##1<\premierun}{\PremierEtape{#2}{##1}}{\Decomposition[Longue]{#2}}\mathrel{\times}\xintifboolexpr{##1<\premierdeux}{\PremierEtape{#3}{##1}}{\Decomposition[Longue]{#3}}\xintifboolexpr{##1<\premier}{\\}{}}%
+    }{}%
+    \xintifboolexpr{\PfCRappelImposeAll==1}{\\\num{#1}&=\PremierExposant{#1}}{}%
+  \end{align*}
+  \fi
+}%
+
+\newcommand\NombrePremierVertical[1]{%\'ecrire la d\'ecomposition compl\`ete
+  % #1 le nombre premier \`a tester
+  \newcount\anpv\newcount\bnpv\newcount\cnpv%
+  \anpv=#1\relax
+  \bnpv=2\relax
+  \premier=-1\relax
+  % Pour d\'eterminer le nombre d'\'etapes
+  \whiledo{\anpv > 1}{%
+    \modulo{\the\anpv}{\the\bnpv}
+    \ifnum\remainder=0\relax
+      \global\premier=\numexpr\premier+1\relax
+      \cnpv=\numexpr\anpv/\bnpv\relax
+      \anpv=\cnpv\relax
+    \else%
+      \bnpv=\numexpr\bnpv+1\relax%
+    \fi%
+  }
+  \ifnum\premier=0
+    Le nombre \num{#1} est un nombre premier.
+    \else
+    \begin{tabular}{c|c}
+      \xintFor* ##1 in {\xintSeq {0}{\premier}}\do
+      {\PremierMultipleVide{#1}{##1}&\xdef\Etape{\fpeval{##1+1}}\PremierDiviseurVide{#1}{\Etape}
+                                      \xintifboolexpr{##1<\premier}{\\}{\\1\\}}%
+    \end{tabular}
+  \fi
+}
+
+\newcommand\NombrePremierPotence[1]{%
+  % #1 le nombre premier \`a tester
+  \newcount\anpv\newcount\bnpv\newcount\cnpv%
+  \anpv=#1\relax
+  \bnpv=2\relax
+  \premier=-1\relax
+  % Pour d\'eterminer le nombre d'\'etapes
+  \whiledo{\anpv > 1}{%
+    \modulo{\the\anpv}{\the\bnpv}
+    \ifnum\remainder=0\relax
+      \global\premier=\numexpr\premier+1\relax
+      \cnpv=\numexpr\anpv/\bnpv\relax
+      \anpv=\cnpv\relax
+    \else%
+      \bnpv=\numexpr\bnpv+1\relax%
+    \fi%
+  }
+  \ifnum\premier=0%
+    Le nombre \num{#1} est un nombre premier.%
+  \else%
+  \xdef\PotenceCases{\fpeval{\premier+2}}%
+    \begin{NiceTabular}{*{\PotenceCases}{c}}
+      %\Body
+      \PremierMultipleVide{#1}{0}&\multicolumn{1}{|c}{\PremierDiviseurVide{#1}{1}}\\
+      \hhline{~-}
+      \xintFor* ##1 in {\xintSeq {1}{\premier}}\do{%
+        \xintifboolexpr{##1 == 0}{}{\xintFor* ##2 in {\xintSeq {1}{##1}}\do{%
+            &}%
+        }%
+        \multicolumn{1}{|c}{\PremierMultipleVide{#1}{##1}}&\multicolumn{1}{|c}{\xdef\Etape{\fpeval{##1+1}}\PremierDiviseurVide{#1}{\Etape}}\\
+        \hhline{*{\fpeval{##1+1}}{~}-}
+      }%
+      \xintFor* ##1 in {\xintSeq {1}{\fpeval{\PotenceCases-2}}}\do{%
+        &}&\multicolumn{1}{|c}{1}\\
+      \CodeAfter
+      \tikz \draw [white,fill=white] (1 -|2) circle (0.5mm);
+      \xintFor* ##1 in {\xintseq{2}{\PotenceCases}}\do{%
+        \tikz \draw [white,fill=white,transform canvas={xshift=0mm}] (\fpeval{##1-1} -|##1) circle (0.5mm);
+      }%
+    \end{NiceTabular}%
+  \fi%
+}
+
+\newcommand\PremierDiviseurVide[2]{%
+  %#1 : le nombre entier \`a tester
+  %#2 : le nombre d'\'etapes \`a effectuer
+  \newcount\anpvv\newcount\bnpvv\newcount\cnpvv\newcount\dnpvv%
+  \ensuremath{%
+    \anpvv=#1\relax
+    \bnpvv=2\relax
+    \dnpvv=0\relax%
+    \whiledo{\anpvv > 1}{%
+      \whiledo{\dnpvv < \number#2}{%
+        \modulo{\the\anpvv}{\the\bnpvv}
+        \ifnum\remainder=0\relax
+          \dnpvv=\numexpr\dnpvv+1\relax
+          \cnpvv=\numexpr\anpvv/\bnpvv\relax
+          \anpvv=\cnpvv\relax
+        \else%
+          \bnpvv=\numexpr\bnpvv+1\relax%
+        \fi%
+      }
+      \num{\the\bnpvv}%
+      \anpvv=1%
+    }
+  }
+}
+
+\newcommand\PremierMultipleVide[2]{%
+  %#1 : le nombre entier \`a tester
+  %#2 : le nombre d'\'etapes \`a effectuer
+  \newcount\anpmv\newcount\bnpmv\newcount\cnpmv\newcount\dnpmv%
+  \ensuremath{%
+    \anpmv=#1\relax
+    \bnpmv=2\relax
+    \dnpmv=0\relax%
+    \whiledo{\anpmv > 1}{%
+      \whiledo{\dnpmv < \number#2}{%
+        \modulo{\the\anpmv}{\the\bnpmv}
+        \ifnum\remainder=0\relax
+          \dnpmv=\numexpr\dnpmv+1\relax
+          \cnpmv=\numexpr\anpmv/\bnpmv\relax
+          \anpmv=\cnpmv\relax
+        \else%
+          \bnpmv=\numexpr\bnpmv+1\relax%
+        \fi%
+      }
+      \num{\the\anpmv}%
+      \anpmv=1%
+    }
+  }
+}
+
+\newcommand\NombrePremierVerticalVide[1]{%
+  % #1 le nombre premier \`a tester
+  \newcount\anpv\newcount\bnpv\newcount\cnpv%
+  \anpv=#1\relax
+  \bnpv=2\relax
+  \premier=-1\relax
+  % Pour d\'eterminer le nombre d'\'etapes
+  \whiledo{\anpv > 1}{%
+    \modulo{\the\anpv}{\the\bnpv}
+    \ifnum\remainder=0\relax
+      \global\premier=\numexpr\premier+1\relax
+      \cnpv=\numexpr\anpv/\bnpv\relax
+      \anpv=\cnpv\relax
+    \else%
+      \bnpv=\numexpr\bnpv+1\relax%
+    \fi%
+  }
+  \ifnum\premier=0
+    Le nombre \num{#1} est un nombre premier.%
+    \else
+    \renewcommand{\arraystretch}{1.5}
+    \begin{tabular}{c|c}
+      \PremierMultipleVide{#1}{0}&\hbox to1cm{\useKV[ClesNombrePremier]{Dot}}\\
+      \xintFor* ##1 in {\xintSeq {1}{\premier}}\do
+      {\hbox to1cm{\useKV[ClesNombrePremier]{Dot}}&\hbox
+                              to1cm{\useKV[ClesNombrePremier]{Dot}}\xintifboolexpr{##1<\premier}{\\}{\\\hbox
+      to1cm{\useKV[ClesNombrePremier]{Dot}}\\}}%
+    \end{tabular}
+    \renewcommand{\arraystretch}{1}
+  \fi
+}
+
+\newcommand\NombrePremierExposant[1]{%
+  \newcount\anp\newcount\bnp\newcount\cnp%
+  % #1 le nombre premier \`a tester
+  \anp=#1\relax%
+  \bnp=2\relax%
+  \premier=-1\relax%
+  % Pour d\'eterminer le nombre d'\'etapes
+  \whiledo{\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax%
+      \global\premier=\numexpr\premier+1\relax%
+      \cnp=\numexpr\anp/\bnp\relax%
+      \anp=\cnp\relax%
+    \else%
+      \bnp=\numexpr\bnp+1\relax%
+      \fi%
+  }%
+  \ifnum\premier=0%
+    Le nombre \num{#1} est un nombre premier.%
+  \else%
+  \begin{align*}
+      \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\\}%
+      \num{#1}&=\PremierExposant{#1}%
+    \end{align*}%
+  \fi%
+}%
+  
+\newcommand\PremierEtape[2]{%
+  %#1 : le nombre entier \`a tester
+  %#2 : le nombre d'\'etapes \`a effectuer
+  \newcount\anp\newcount\bnp\newcount\cnp\newcount\dnp%
+  \ensuremath{%
+    \anp=#1\relax
+    \bnp=2\relax
+    \dnp=0\relax%
+    \whiledo{\anp > 1}{%
+      \whiledo{\dnp < \number#2}{%
+        \modulo{\the\anp}{\the\bnp}
+        \ifnum\remainder=0\relax
+          \dnp=\numexpr\dnp+1\relax
+          \cnp=\numexpr\anp/\bnp\relax
+          \anp=\cnp\relax
+          \num{\the\bnp}\times%
+        \else%
+          \bnp=\numexpr\bnp+1\relax%
+        \fi%
+      }
+      \num{\the\anp}%
+      \anp=1%
+    }
+  }
+}
+
+\newcommand\PremierExposant[1]{%
+  %#1 : le nombre entier \`a tester
+  \ensuremath{%
+  \newcount\anp\newcount\bnp\newcount\cnp%
+  \newcount\pileb\newcount\exposant%
+  \exposant=0\relax%
+  \anp=#1\relax%
+  \bnp=2\relax%
+  \pileb=2\relax%
+  \whiledo{\the\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax
+      \cnp=\numexpr\anp/\bnp\relax
+      \ifnum\pileb=\bnp
+      \exposant=\numexpr\exposant+1\relax
+      \fi
+      \anp=\cnp\relax
+    \else%
+      \ifnum\exposant>0\relax
+        \num{\the\pileb}\ifnum\exposant>1 ^{\num{\the\exposant}}\fi\times%
+      \fi
+      \bnp=\numexpr\bnp+1\relax%
+      \pileb=\bnp\relax%
+      \exposant=0\relax%
+    \fi%
+  }%
+  \num{\the\pileb}\ifnum\exposant>1^{\num{\the\exposant}}\fi%
+  }%
+}%
+
+\newcommand\PremierLong[1]{%
+  %#1 : le nombre entier \`a tester
+  \ensuremath{%
+  \newcount\anpl\newcount\bnpl\newcount\cnpl%
+  \newcount\pilebl%
+  \anpl=#1\relax%
+  \bnpl=2\relax%
+  \pilebl=2\relax%
+  \whiledo{\the\anpl > 1}{%
+    \modulo{\the\anpl}{\the\bnpl}
+    \ifnum\remainder=0\relax
+      \cnpl=\numexpr\anpl/\bnpl\relax
+      \num{\the\bnpl}\ifnum\anpl>\bnpl\times\fi%
+      \anpl=\cnpl\relax
+    \else%
+      \bnpl=\numexpr\bnpl+1\relax%
+      \pilebl=\bnpl\relax%
+    \fi%
+    }
+  }
+}
+
+\newcommand\ListeDiviseur[1]{%#1 : le nombre entier \`a tester
+  \newcount\anp\newcount\bnp%
+  \anp=#1%
+  \bnp=2\relax%
+  1 %
+  \whiledo{\bnp<\anp}{%
+    \modulo{\the\anp}{\the\bnp}{}%
+    \ifnum\remainder=0%
+    ; $\num{\the\bnp}$ %
+    \fi%
+    \bnp=\numexpr\bnp+1%
+  }%
+  et \num{\the\anp}%
+}
+
+\newcount\anpT\newcount\bnpT\newcount\cnpT\newcount\dnpT%
+
+\newcommand\ListeDiviseurT[1]{%#1 : le nombre entier \`a tester
+  \anpT=#1%
+  \bnpT=2\relax%
+  %On compte les diviseurs propres.
+  \cnpT=0\relax%
+  \whiledo{\bnpT<\anpT}{%
+    \modulo{\the\anpT}{\the\bnpT}{}%
+    \ifnum\remainder=0%
+    \cnpT=\numexpr\cnpT+1%
+    \fi%
+    \bnpT=\numexpr\bnpT+1%
+  }%
+  \ifodd\cnpT%
+    \begin{tabular}{c|c}%
+    1&\num{#1}\\
+    \xintFor* ##1 in {\xintSeq {1}{\fpeval{(\cnpT+1)/2}}}\do{%
+    \DiviseurNumero{#1}{##1}\num{\fpeval{\dnpT}}\uppercase{&}\DiviseurNumero{#1}{##1}\xintifboolexpr{\dnpT=\fpeval{#1/\dnpT}}{}{\num{\fpeval{#1/\dnpT}}}\\
+    }
+  \end{tabular}%
+  \else%
+    \begin{tabular}{c|c}
+    1&\num{#1}\\
+    \xintFor* ##1 in {\xintSeq {1}{\fpeval{\cnpT/2}}}\do{%
+    \DiviseurNumero{#1}{##1}\num{\fpeval{\dnpT}}\uppercase{&}\DiviseurNumero{#1}{##1}\num{\fpeval{#1/\dnpT}}\\
+    }
+  \end{tabular}%
+  \fi%
+}%
+
+\newcommand\DiviseurNumero[2]{%
+  % #1 nb entier \`a tester
+  % #2 no du diviseur (\`a part 1 et #1)
+  \anpT=#1%
+  \bnpT=2\relax%
+  %On compte les diviseurs propres.
+  \cnpT=0\relax%
+  \whiledo{\bnpT<\anpT}{%
+    \modulo{\the\anpT}{\the\bnpT}{}%
+    \ifnum\remainder=0%
+    \cnpT=\numexpr\cnpT+1%
+    \ifnum\cnpT=\numexpr#2-1%
+    \dnpT=\bnpT%
+    \bnpT=\anpT%
+    \fi%
+    \fi%
+    \bnpT=\numexpr\bnpT+1%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDecomposerNombrePremier.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,211 @@
+%%%
+% Defi Table
+%%%
+
+\setKVdefault[DefiTable]{Solution=false,Math=false,LargeurT=5mm,Graines=false,Creation=false}
+\defKV[DefiTable]{Graine=\setKV[DefiTable]{Graines}}%
+
+\newcommand\MelangeListeNew[2]{%
+  % #1 Liste à mélanger
+  % #2 Nombre d'éléments à conserver
+  \setsepchar[*]{/}\ignoreemptyitems%
+  \readlist*\ListeInter{#1}%
+  \xdef\faa{}% Liste construite
+  \xdef\fii{}% Liste détruite
+  % on crée les #2 premieres solutions.
+  \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
+    \xintifboolexpr{\ListeInterlen>1}{%
+      \xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
+      \xdef\faa{\faa \ListeInter[\Alea]/}%
+      \xdef\fii{}%
+      \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
+        \xintifboolexpr{##2 == \Alea}{%
+        }{%
+          \xdef\fii{\fii \ListeInter[##2]/}%
+        }%
+      }%
+    }{%
+      \xdef\faa{\faa \ListeInter[1]}%
+    }%
+    \readlist*\ListeInter{\fii}%
+  }%
+  \reademptyitems%
+}%
+
+\newcommand\DefiTableNombreLettreduCode[1]{%
+  \xdef\ListeDesCaracteresFoo{a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/à/é/è/ê/ï/î/ô/ö/ù/ç/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/À/É/È/,/$?$/$;$/./$!$/$:$/-}
+  \savecomparemode%
+  \comparestrict%
+  \xdef\PfCFooDepart{}
+  \StrLen{#1}[\LongueurMot]%
+  \xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+    \StrChar{#1}{##1}[\LettreMot]
+    \xdef\PfCFooDepart{\PfCFooDepart \LettreMot/}
+  }%
+  \setsepchar[*]{/}\reademptyitems%
+  \readlist*\ListeDesLettres{\PfCFooDepart}%
+  \xdef\PfCFooArrivee{\ListeDesLettres[1]}%
+  \xintFor* ##1 in{\xintSeq{2}{\LongueurMot}}\do{%
+    \StrCompare{\ListeDesLettres[##1]}{\\}[\PfCRetiensEtoile]
+    \StrCompare{\ListeDesLettres[##1]}{ }[\PfCRetiensPara]
+    \xintifboolexpr{\PfCRetiensEtoile==0 || \PfCRetiensPara==0}{}{%
+      \xdef\PfCTotal{0}%
+      \xintFor* ##2 in{\xintSeq{1}{\fpeval{##1-1}}}\do{%
+        \StrCompare{\ListeDesLettres[##1]}{\ListeDesLettres[##2]}[\PfCRetiens]
+        \xdef\PfCTotal{\fpeval{\PfCTotal+\PfCRetiens}}%
+      }%
+      \xintifboolexpr{\PfCTotal==\fpeval{##1-1}}{\xdef\PfCFooArrivee{\PfCFooArrivee/\ListeDesLettres[##1]}}{}%
+    }%
+  }%
+  %Arrivee = \PfCFooArrivee\par
+  \setsepchar[*]{/}\ignoreemptyitems%
+  \readlist*\ListeDesLettresUniques{\PfCFooArrivee}%
+  %La liste des lettres uniques ainsi créée :\par
+  %\showitems\ListeDesLettresUniques[]%
+  % Il faut retirer les lettres uniques de la liste des caracteres
+  \readlist*\ListeTotaleDesCaracteres{\ListeDesCaracteresFoo}%
+  %\par
+  %La liste totale des caractères est :\par
+  %\showitems\ListeTotaleDesCaracteres[]
+  %\par
+  \xdef\ListeCaracteresUniques{}%
+  \xintFor* ##1 in{\xintSeq{1}{\ListeTotaleDesCaractereslen}}\do{%
+    %Le caractère testé est \ListeTotaleDesCaracteres[##1]. On le compare à :%
+    \xdef\PfCTotal{0}%
+    \xintFor* ##2 in{\xintSeq{1}{\ListeDesLettresUniqueslen}}\do{%
+      \StrCompare{\ListeTotaleDesCaracteres[##1]}{\ListeDesLettresUniques[##2]}[\PfCRetiens]
+      \xdef\PfCTotal{\fpeval{\PfCTotal+\PfCRetiens}}%
+    }%
+    \xintifboolexpr{\PfCTotal==\ListeDesLettresUniqueslen}{\xdef\ListeCaracteresUniques{\ListeCaracteresUniques\ListeTotaleDesCaracteres[##1]/}}{}%
+  }%
+  %La liste des caractères uniques à ajouter
+  \MelangeListeNew{\ListeCaracteresUniques}{\fpeval{42-\ListeDesLettresUniqueslen}}%
+  %\par La liste des éléments à mélanger est :\par
+  \xdef\ListeDesCaracteresAUtiliser{}
+  \xintFor* ##1 in{\xintSeq{1}{\ListeDesLettresUniqueslen}}\do{%
+    \xdef\ListeDesCaracteresAUtiliser{\ListeDesCaracteresAUtiliser \ListeDesLettresUniques[##1]/}%
+  }%
+  \xdef\ListeDesCaracteresAUtiliser{\ListeDesCaracteresAUtiliser \faa}
+  \MelangeListeNew{\ListeDesCaracteresAUtiliser}{42}
+  %Finalement, on utilise ces caractères :\par
+  \ignoreemptyitems%
+  \readlist*\ListeFinaleDesCaracteres{\faa}
+  \xdef\ListeDesProduitsFoo{1/2/3/4/5/6/7/8/9/10/12/14/16/18/20/15/21/24/27/30/28/32/36/40/25/35/45/50/42/48/54/60/49/56/63/70/64/72/80/81/90/100}
+  \MelangeListeNew{\ListeDesProduitsFoo}{42}
+  %Les produits mélangés sont :\par
+  \readlist*\ListeDesProduits{\faa}%
+  \restorecomparemode
+  \reademptyitems
+}
+
+\newcommand\DefiTable[2][]{%
+  % 1 les clés
+  % 2 la table de décodage
+  \useKVdefault[DefiTable]%
+  \setKV[DefiTable]{#1}%
+  \ifboolKV[DefiTable]{Creation}{
+    \ifboolKV[DefiTable]{Graines}{\PfCGraineAlea{\useKV[DefiTable]{Graine}}}{}%
+    \DefiTableNombreLettreduCode{#2}
+    \begin{center}
+      \begin{tabular}{|>{\columncolor{gray!15}}c|*{10}{c|}}
+        \hline
+        \rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
+                                    \xintifForFirst{}{&}##1%
+                                                        }\\\hline%
+        \xintFor* ##1 in{\xintSeq{1}{10}}\do{%
+        ##1\xintFor* ##2 in{\xintSeq{1}{10}}\do{%
+                                  &\xintFor* ##3 in{\xintSeq{1}{42}}\do{%
+                                    \xintifboolexpr{\fpeval{##1*##2}==\ListeDesProduits[##3]}{\ListeFinaleDesCaracteres[##3]}{}%
+                                    }%
+                                    }\\\hline%
+        }%
+      \end{tabular}%
+    \end{center}
+  }{%
+  \setsepchar[*]{§* }%
+  \readlist*\ListeDefiTableCode{#2}%
+  \begin{NiceTabular}{>{\columncolor{gray!15}}{c}*{10}{c}}[hvlines]
+    \rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
+      \xintifForFirst{}{&}##1}
+    \\
+    1\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
+      &\ListeDefiTableCode[1,##1]%
+    }\\
+    \xintFor* ##1 in {\xintSeq {2}{9}}\do{%
+      ##1\xintFor* ##2 in {\xintSeq {1}{##1}}\do{%
+        &\ListeDefiTableCode[##2,\fpeval{##1-##2+1}]%
+      }\xintFor* ##2 in {\xintSeq {1}{\fpeval{10-##1}}}\do{%
+        &\ListeDefiTableCode[##1,\fpeval{##2+1}]%
+        }%
+      \\
+    }%
+    10&\ListeDefiTableCode[1,10]&\ListeDefiTableCode[2,9]&\ListeDefiTableCode[3,8]&\ListeDefiTableCode[4,7]&\ListeDefiTableCode[5,6]&\ListeDefiTableCode[6,5]&\ListeDefiTableCode[7,4]&\ListeDefiTableCode[8,3]&\ListeDefiTableCode[9,2]&\ListeDefiTableCode[10,1]\\
+  \end{NiceTabular}%
+  }%
+}%
+
+\newcommand\DefiTableTexte[3][]{%
+  \useKVdefault[DefiTable]%
+  \setKV[DefiTable]{#1}%
+  \ifboolKV[DefiTable]{Creation}{%
+    \setsepchar[*]{\\* }%
+    \readlist*\ListeDefiTableTableau{#3}%
+    \xdef\ListeDefiTableMax{0}%
+    \xintFor* ##1 in{\xintSeq{1}{\ListeDefiTableTableaulen}}\do{%
+      \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+      \xintifboolexpr{\ListeDefiTableMax<\PfCDTLongueur}{\xdef\ListeDefiTableMax{\fpeval{\PfCDTLongueur}}}{}%%
+    }%
+    %\par Le max est \ListeDefiTableMax
+    \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}}
+      \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{%
+        \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+        \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{%
+          \xintifForFirst{}{&}%
+          \StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}[\DefiTableMaLettre]%
+          \IfStrEq{\DefiTableMaLettre}{ }{\Block[]{1-1}{}}{\Block[borders={bottom}]{1-1}{\ifboolKV[DefiTable]{Solution}{\StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}}{}}}%
+        }\\
+        \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+        \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{%
+          \xintifForFirst{}{&}%
+          \StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}[\DefiTableMaLettre]%
+          \IfStrEq{\DefiTableMaLettre}{*}{}{%
+            \xintFor* ##3 in{\xintSeq{1}{42}}\do{%
+              \IfStrEq{\DefiTableMaLettre}{\ListeFinaleDesCaracteres[##3]}{\Block{}{\footnotesize\ListeDesProduits[##3]}}{}%
+            }%
+          }%
+        }\\
+        \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+        \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{%
+          \xintifForFirst{}{&}
+        }\\
+      }%
+    \end{NiceTabular}%
+  }{%
+    \setsepchar[*]{§*/}%
+    \readlist*\ListeDefiTableTableau{#2}%
+    \xdef\ListeDefiTableMax{0}%
+    \setsepchar{§}%
+    \readlist*\ListeDefiTablePhrase{#3}%
+    \foreachitem\compteur\in\ListeDefiTableTableau{%
+      \xintifboolexpr{\ListeDefiTableMax<\listlen\ListeDefiTableTableau[\compteurcnt]}{\xdef\ListeDefiTableMax{\fpeval{\listlen\ListeDefiTableTableau[\compteurcnt]}}}{}%
+    }%
+    \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}}
+      \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{%
+        \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
+          \xintifForFirst{}{&}\ifboolKV[DefiTable]{Solution}{%
+            \StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}[\DefiTableMaLettre]%
+            \IfStrEq{\DefiTableMaLettre}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{\StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}}}%
+          }{%
+            \IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{}}%
+          }%%
+        }\\
+        \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
+          \xintifForFirst{}{&}
+        }\\
+        \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
+          \xintifForFirst{}{&}\IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{}{\footnotesize\ifboolKV[DefiTable]{Math}{\ListeDefiTableTableau[##1,##2]}{\num{\ListeDefiTableTableau[##1,##2]}}}%
+        }\\
+      }%
+    \end{NiceTabular}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDefiTables.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinGradue.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinGradue.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinGradue.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,316 @@
+%%%
+% Dessin Gradue
+%%%
+\setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1,Droites=false,DemiDroites=false,OrigineVariable=false,Code=false}
+\defKV[DessinGradue]{Traces=\setKV[DessinGradue]{Code}}%
+
+\def\TraceDessinGradueComplet#1#2#3{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    % Paramètres
+    LongueurLigne=\useKV[DessinGradue]{Longueur};
+    EcartVertical=\useKV[DessinGradue]{EcartVertical};
+    Pas:=\useKV[DessinGradue]{Pas};
+    NbLignes=\useKV[DessinGradue]{Lignes};
+    Echelle=\useKV[DessinGradue]{Echelle};
+    Debut:=\useKV[DessinGradue]{Debut};
+    Fin:=\useKV[DessinGradue]{Fin};
+    
+    boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code;
+    Solution=\useKV[DessinGradue]{Solution};
+    LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques};
+    OrigineVariable:=\useKV[DessinGradue]{OrigineVariable};
+    Droites=\useKV[DessinGradue]{Droites};
+    DemiDroites=\useKV[DessinGradue]{DemiDroites};
+    Code=\useKV[DessinGradue]{Code};
+
+    pair La,Lb,Lab[];
+    pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z'';
+    
+    La=(0,0);
+    Lb-La=u*(\useKV[DessinGradue]{Longueur},0);
+
+    % On définit une fonction pour tracer les lignes en fonction du pas "Partage"
+    vardef TraceLignes(expr Partage)=
+    save RecupLigne;
+    picture RecupLigne;
+    RecupLigne=image(
+    if \useKV[DessinGradue]{Droites}:
+    drawarrow 1.05[Lb,La]--1.05[La,Lb];
+    elseif \useKV[DessinGradue]{DemiDroites}:
+    drawarrow La--1.05[La,Lb];
+    else:
+    trace segment(La,Lb);
+    fi;
+    for kl=0 upto Partage:
+    Lab[kl]:=(kl/Partage)[La,Lb];
+    trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1));
+    endfor;
+    );
+    RecupLigne
+    enddef;
+
+    % On définit une fonction pour nommer les points nécessaires.
+    vardef DefinirPoints(text t)=
+    numeric nblignes,nbpas;
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if (n mod 3)=1:
+    nblignes:=p_;
+    elseif (n mod 3)=2:
+    nbpas:=p_;
+    elseif (n mod 3)=0:
+    p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical)));
+    fi;
+    endfor;
+    enddef;
+
+    % On détermine le nombre de lignes et les origines particulières
+    pair OrigA[],OrigB[];
+    if LignesIdentiques:
+    for k=1 upto NbLignes:
+    TotalPas[k]:=Pas;
+    OrigA[k]=(Debut,0);
+    OrigB[k]=(Fin,TotalPas[k]);
+    endfor;
+    else:
+    if OrigineVariable:
+    n:=0;
+    for p_=#1:
+    n:=n+1;
+    OrigA[n]:=p_;
+    TotalPas[n]:=Pas;
+    endfor;
+    NbLignes:=n/2;
+    else:
+    n:=0;
+    for p_=#1:
+    n:=n+1;
+    TotalPas[n]=bluepart(p_);
+    OrigA[n]=(redpart(p_),0);
+    OrigB[n]=(greenpart(p_),TotalPas[n]);
+    endfor;
+    NbLignes:=n;
+    fi;
+    fi;
+
+    picture EnsembleLignes;
+
+    DefinirPoints(#2);
+    
+    EnsembleLignes=image(
+    if Solution:
+    drawoptions(withcolor 0.5white);
+    fi;
+    % On trace les lignes et on labelise le numéro de la ligne.
+    for k=0 upto NbLignes-1:
+    trace TraceLignes(TotalPas[k+1]) shifted(k*u*(0,-EcartVertical));
+    if Droites:
+    label.lft(TEX("(\num{"&decimal(k+1)&"})"),1.05[Lb,La] shifted(k*u*(0,-EcartVertical)));
+    else:
+    label.lft(TEX("(\num{"&decimal(k+1)&"})"),La shifted(k*u*(0,-EcartVertical)));
+    fi;
+    endfor;
+    % On labelise les origines
+    labeloffset:=labeloffset*1.5;
+    for k=0 upto NbLignes-1:
+    if OrigineVariable:
+    label.top(TEX("\num{"&decimal(xpart(OrigA[2*k+1]))&"}"),(ypart(OrigA[2*k+1])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
+    label.top(TEX("\num{"&decimal(xpart(OrigA[2*(k+1)]))&"}"),(ypart(OrigA[2*(k+1)])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
+    else:
+    label.top(TEX("\num{"&decimal(xpart(OrigA[k+1]))&"}"),La+u*(0,-k*EcartVertical));
+    label.top(TEX("\num{"&decimal(xpart(OrigB[k+1]))&"}"),Lb+u*(0,-k*EcartVertical));
+    fi;
+    endfor;
+    drawoptions();
+    labeloffset:=labeloffset/1.5;
+
+    % On trace la solution
+    if Solution:
+    for p_=#3:
+    trace p_ withpen pencircle scaled 1.5;
+    endfor;
+    fi;
+    % On ajoute des tracés si nécessaire
+    if Code:
+    \useKV[DessinGradue]{Traces};
+    fi;
+    );
+    trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle};
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+    LongueurLigne=\useKV[DessinGradue]{Longueur};
+    EcartVertical=\useKV[DessinGradue]{EcartVertical};
+    Pas:=\useKV[DessinGradue]{Pas};
+    NbLignes=\useKV[DessinGradue]{Lignes};
+    Echelle=\useKV[DessinGradue]{Echelle};
+    Debut:=\useKV[DessinGradue]{Debut};
+    Fin:=\useKV[DessinGradue]{Fin};
+    boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code;
+    Solution=\useKV[DessinGradue]{Solution};
+    LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques};
+    OrigineVariable:=\useKV[DessinGradue]{OrigineVariable};
+    Droites=\useKV[DessinGradue]{Droites};
+    DemiDroites=\useKV[DessinGradue]{DemiDroites};
+    Code=\useKV[DessinGradue]{Code};
+    vardef EffectuerLesTraces=
+    if Code:
+    \useKV[DessinGradue]{Traces};
+    fi;
+    enddef;
+    }]
+    pair La,Lb,Lab[];
+    pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z'';
+    
+    La=(0,0);
+    Lb-La=u*(\useKV[DessinGradue]{Longueur},0);
+
+    % On définit une fonction pour tracer les lignes en fonction du pas "Partage"
+    vardef TraceLignes(expr Partage)=
+    save RecupLigne;
+    picture RecupLigne;
+    RecupLigne=image(
+    if \useKV[DessinGradue]{Droites}:
+    drawarrow 1.05[Lb,La]--1.05[La,Lb];
+    elseif \useKV[DessinGradue]{DemiDroites}:
+    drawarrow La--1.05[La,Lb];
+    else:
+    trace segment(La,Lb);
+    fi;
+    for kl=0 upto Partage:
+    Lab[kl]:=(kl/Partage)[La,Lb];
+    trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1));
+    endfor;
+    );
+    RecupLigne
+    enddef;
+
+    % On définit une fonction pour nommer les points nécessaires.
+    vardef DefinirPoints(text t)=
+    numeric nblignes,nbpas;
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if (n mod 3)=1:
+    nblignes:=p_;
+    elseif (n mod 3)=2:
+    nbpas:=p_;
+    elseif (n mod 3)=0:
+    p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical)));
+    fi;
+    endfor;
+    enddef;
+
+    % On détermine le nombre de lignes et les origines particulières
+    pair OrigA[],OrigB[];
+    if LignesIdentiques:
+    for k=1 upto NbLignes:
+    TotalPas[k]:=Pas;
+    OrigA[k]=(Debut,0);
+    OrigB[k]=(Fin,TotalPas[k]);
+    endfor;
+    else:
+    if OrigineVariable:
+    n:=0;
+    for p_=#1:
+    n:=n+1;
+    OrigA[n]:=p_;
+    TotalPas[n]:=Pas;
+    endfor;
+    NbLignes:=n/2;
+    else:
+    n:=0;
+    for p_=#1:
+    n:=n+1;
+    TotalPas[n]=bluepart(p_);
+    OrigA[n]=(redpart(p_),0);
+    OrigB[n]=(greenpart(p_),TotalPas[n]);
+    endfor;
+    NbLignes:=n;
+    fi;
+    fi;
+
+    picture EnsembleLignes;
+
+    DefinirPoints(#2);
+    
+    EnsembleLignes=image(
+    if Solution:
+    drawoptions(withcolor 0.5white);
+    fi;
+    % On trace les lignes et on labelise le numéro de la ligne.
+    for k=0 upto NbLignes-1:
+    trace TraceLignes(TotalPas[k+1]) shifted(k*u*(0,-EcartVertical));
+    if Droites:
+    label.lft(LATEX("(\num{"&decimal(k+1)&"})"),1.05[Lb,La] shifted(k*u*(0,-EcartVertical)));
+    else:
+    label.lft(LATEX("(\num{"&decimal(k+1)&"})"),La shifted(k*u*(0,-EcartVertical)));
+    fi;
+    endfor;
+    % On labelise les origines
+    labeloffset:=labeloffset*1.5;
+    for k=0 upto NbLignes-1:
+    if OrigineVariable:
+    label.top(LATEX("\num{"&decimal(xpart(OrigA[2*k+1]))&"}"),(ypart(OrigA[2*k+1])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
+    label.top(LATEX("\num{"&decimal(xpart(OrigA[2*(k+1)]))&"}"),(ypart(OrigA[2*(k+1)])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
+    else:
+    label.top(LATEX("\num{"&decimal(xpart(OrigA[k+1]))&"}"),La+u*(0,-k*EcartVertical));
+    label.top(LATEX("\num{"&decimal(xpart(OrigB[k+1]))&"}"),Lb+u*(0,-k*EcartVertical));
+    fi;
+    endfor;
+    drawoptions();
+    labeloffset:=labeloffset/1.5;
+    
+    % On trace la solution
+    if Solution:
+    for p_=#3:
+    trace p_ withpen pencircle scaled 1.5;
+    endfor;
+    fi;
+    % On ajoute des tracés si nécessaire
+    if Code:
+    EffectuerLesTraces;
+    fi;
+    );
+    trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle};
+  \end{mpost}
+  \fi
+}%
+
+\def\UpdateLignes#1/#2/#3\nil{\addtotok\toklisteptsgrad{#1,#3,#2,}}%
+\def\UpdateTraces#1\nil{\addtotok\toklistetracesgrad{#1,}}%
+\def\UpdateDefLignes#1/#2/#3\nil{\addtotok\toklistedefligne{(#1,#2,#3),}}%
+
+\newcommand\DessinGradue[4][]{%
+  \useKVdefault[DessinGradue]%
+  \setKV[DessinGradue]{#1}%
+  \newtoks\toklisteptsgrad%
+  \newtoks\toklistetracesgrad%
+  % On retiens les données pour la solution
+  \setsepchar[*]{,*/}%
+  \readlist\ListePG{#3}%
+  \setsepchar[*]{§*/}%
+  \readlist\ListeTraces{#4}%
+  \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}%
+  \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}%
+  \ifboolKV[DessinGradue]{LignesIdentiques}{%
+    \TraceDessinGradueComplet{}{\the\toklisteptsgrad}{\the\toklistetracesgrad}%
+  }{%
+    \setsepchar[*]{,*/}%
+    \readlist\ListeDefLigne{#2}%
+    \xdef\toklistedefligne{}%
+    \ifboolKV[DessinGradue]{OrigineVariable}{%
+      \foreachitem\compteur\in\ListeDefLigne{%
+        \xdef\toklistedefligne{\toklistedefligne (\ListeDefLigne[\compteurcnt,1],\ListeDefLigne[\compteurcnt,2]),(\ListeDefLigne[\compteurcnt,3],\ListeDefLigne[\compteurcnt,4]),}%
+      }%
+    }{%
+      \foreachitem\compteur\in\ListeDefLigne{%
+        \xdef\toklistedefligne{\toklistedefligne (\ListeDefLigne[\compteurcnt,1],\ListeDefLigne[\compteurcnt,2],\ListeDefLigne[\compteurcnt,3]),}%
+      }%
+    }%
+    \TraceDessinGradueComplet{\toklistedefligne}{\the\toklisteptsgrad}{\the\toklistetracesgrad}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinGradue.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,374 @@
+%%%
+% Lien : ratio
+%%%
+\setKVdefault[ClesRatio]{FigureCours=false,Figure=false,Longueur=5cm,TexteTotal=quantit\'e,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,CouleurTab=gray!15}
+
+\newcommand\MPTest[9][]{%
+  % #2 : Longueur de la barre unit\'e
+  % #3 : premier nombre
+  % #4 : deuxi\`eme nombre
+  % #5 : troisi\`eme nombre
+  % #6 : ne sert à rien. Laissé en attente.
+  % #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
+    labeloffset:=labeloffset/2;
+    label.top(TEX("\footnotesize$\overbrace{\hbox
+      to"&decimal(abs(A-B))&"pt{}}$"),iso(D,C));
+    labeloffset:=labeloffset*2;
+    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.top(btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
+    if #3>1:
+    label.bot(btex #3~\useKV[ClesRatio]{TextePart}s
+    etex,iso(A,(N[1]/somme)[A,B]));
+    else:
+    label.bot(btex #3~\useKV[ClesRatio]{TextePart} etex,iso(A,(N[1]/somme)[A,B]));
+    fi;
+    if #4>1:
+    label.bot(btex #4~\useKV[ClesRatio]{TextePart}s etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    else:
+    label.bot(btex #4~\useKV[ClesRatio]{TextePart}
+    etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    fi;
+    if n>2:
+    if #5>1:
+    label.bot(btex #5~\useKV[ClesRatio]{TextePart}s etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+    else:
+    label.bot(btex #5~\useKV[ClesRatio]{TextePart} etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+    fi;
+    fi;
+  \end{mplibcode}
+  \else
+  \mpxcommands{%
+    \usepackage{ProfCollege}
+    \setKVdefault[ClesRatio]{TexteTotal=quantit\'e,TextePart=part}
+    \setKV[ClesRatio]{#1}
+  }
+  \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.top(LATEX("\noexpand\footnotesize$\noexpand\overbrace{\noexpand\hbox
+      to"&decimal(abs(A-B))&"pt{}}$"),iso(D,C));
+    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.top(\btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
+    if #3>1:
+    label.bot(btex #3\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(A,(N[1]/somme)[A,B]));
+    else:
+    label.bot(btex #3\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(A,(N[1]/somme)[A,B]));
+    fi;
+    if #4>1:
+    label.bot(btex #4\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    else:
+    label.bot(btex #4\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+    fi;
+    if n>2:
+    if #5>1:
+    label.bot(btex #5\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+    else:
+    label.bot(btex #5\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+    fi;
+    fi;
+  \end{mpost}
+  \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,}}
+
+\def\updateratiotoks#1/#2/#3\nil{\addtotok\tabtoksa{&\ifx\bla#2\bla\else\num{#2}\fi}\addtotok\tabtoksb{&\ifx\bla#3\bla\else\num{#3}\fi}\addtotok\tabtoksc{&#1}}
+
+\def\buildtabratio{%
+  \tabtoksa{}\tabtoksb{}\tabtoksc{}%
+  \tabtoksa{\useKV[ClesRatio]{GrandeurA}}\tabtoksb{\useKV[ClesRatio]{GrandeurB}}
+  \foreachitem\compteur\in\ListeRatio{\expandafter\updateratiotoks\compteur\nil}%
+  \xdef\LongListe{\ListeRatiolen}%
+  \renewcommand{\arraystretch}{\useKV[ClesRatio]{Stretch}}%
+  \begin{tabular}{|>{\columncolor{\useKV[ClesRatio]{CouleurTab}}}c|*{\number\numexpr\ListeRatiolen}{>{\centering\arraybackslash}p{\useKV[ClesRatio]{Largeur}}|}l}
+    \ifboolKV[ClesRatio]{Nom}{%
+    \hhline{~*{\number\numexpr\ListeRatiolen}{-}}
+    \multicolumn{1}{c|}{}\the\tabtoksc\\
+    }{}
+    \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}%
+    \the\tabtoksa&\setcounter{NbPropor}{1}\TikzRH\\%
+    \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}%
+    \the\tabtoksb&\setcounter{NbPropor}{1}\TikzRB\\%
+    \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}%
+  \end{tabular}%
+}%
+
+\newcommand\TikzRH{%
+   \tikz[remember picture,overlay]{%
+   \coordinate[name=ProporH-\theNbPropor,yshift=\getstrut\ht*\arraystretch];}%
+   \stepcounter{NbPropor}%
+ }%
+
+ \newcommand\TikzRB{%
+   \tikz[remember picture, overlay]{%
+     \coordinate[name=ProporB-\theNbPropor,yshift=-\getstrut\dp*\arraystretch];}%
+   \stepcounter{NbPropor}%
+ }%
+ 
+\newcommand\FlecheRatio[2][\EcartLargeur]{%
+  \begin{tikzpicture}[remember picture, overlay]%
+    \node[] (Point1) at ($(ProporH-1)!0.1!(ProporB-1)$) {};%
+    \node[] (Point2) at ($(ProporH-1)!0.9!(ProporB-1)$) {};%
+    \coordinate[right of=Point1,node distance=0*#1-\tabcolsep] (point1);%
+    \coordinate[right of=Point2,node distance=0*#1-\tabcolsep] (point2);%
+    \draw[-stealth,out=-20,in=20] (point1) to node[midway,right,inner sep=1pt]{#2}(point2);%
+\end{tikzpicture}%
+}%
+
+\newcommand\FlecheInvRatio[2][\EcartLargeur]{%
+  \begin{tikzpicture}[remember picture, overlay]%
+    \node[] (Point1) at ($(ProporH-1)!0.1!(ProporB-1)$) {};%
+    \node[] (Point2) at ($(ProporH-1)!0.9!(ProporB-1)$) {};%
+    \coordinate[right of=Point1,node distance=0*#1-\tabcolsep] (point1);%
+    \coordinate[right of=Point2,node distance=0*#1-\tabcolsep] (point2);%
+    \draw[-stealth,out=20,in=-20] (point2) to node[midway,right,inner sep=1pt]{#2}(point1);%
+\end{tikzpicture}%
+}%
+
+\newcommand\Ratio[2][]{%
+  \useKVdefault[ClesRatio]%
+  \setKV[ClesRatio]{#1}%
+  \xdef\EcartLargeur{\useKV[ClesRatio]{Largeur}}%
+  \ifboolKV[ClesRatio]{FigureCours}{%
+    \setsepchar{,}\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{}}%
+    \MPTestCours[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
+  }{%
+    \ifboolKV[ClesRatio]{Figure}{%
+      \setsepchar{,}\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}}%
+    }{%
+      \ifboolKV[ClesRatio]{Tableau}{%
+        \setsepchar[*]{,*/}\ignoreemptyitems%
+        \readlist*\ListeRatio{#2}%
+        \buildtabratio%
+      }{}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDessinerRatio.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDiagrammeRadar.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDiagrammeRadar.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDiagrammeRadar.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,158 @@
+%%%
+% Radar
+%%%
+\setKVdefault[ClesRadar]{Rayon=3cm,Reference=20,MoyenneClasse=false,Disciplines=false,Pas=5}
+
+\newtoks\toklisteradara%pour la moyenne de l'\'el\`eve
+\newtoks\toklisteradarb%pour la discipline
+\newtoks\toklisteradarc%pour la moyenne de classe
+
+\def\UpdateRadara#1/#2/#3\nil{\addtotok\toklisteradara{#1,}}
+\def\UpdateRadarb#1/#2/#3\nil{\addtotok\toklisteradarb{"#2",}}
+\def\UpdateRadarc#1/#2/#3\nil{\addtotok\toklisteradarc{#3,}}
+
+\newcommand\MPRadar[6]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    pair O;
+    O=(0,0);
+    path cc;
+    cc=cercles(O,#1);
+    %%etiquettage des disciplines
+    n:=0;%compter le nombre de disciplines
+    for p_=#2:
+    n:=n+1;
+    endfor;
+    for k=1 upto n:
+    N[k]=k*(360/n);
+    trace segment(O,pointarc(cc,N[k]));% dashed evenly;
+    endfor;
+    p:=0;
+    for p_=#2:
+    p:=p+1;
+    if (N[p]<90) or (N[p]=90):
+    label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if ((N[p]>90) and (N[p]<180)) or (N[p]=180):
+    label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>180) and (N[p]<270):
+    label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>270) or (N[p]=270):
+    label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    endfor;
+    % trac\'e des pas:
+    pas=#4/#3;
+    for k=1 upto pas-1:
+    trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor
+    --cycle dashed evenly withcolor 0.5white;
+    endfor;
+    trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
+    --cycle;
+    % etiquettage des pas
+    dotlabel.urt(TEX("\tiny"&decimal(#4)),pointarc(cc,0));
+    dotlabel.urt(TEX("\tiny"&decimal(#3)),(1/pas)[O,pointarc(cc,0)]);
+    % trac\'e des r\'esultats \'el\`eves
+    pair El[];
+    el=0;
+    for p_=#5:
+    el:=el+1;
+    El[el]=(p_/#4)[O,pointarc(cc,N[el])];
+    endfor;
+    trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen
+    pencircle scaled 1.5 withcolor blue;
+    % trac\'e des r\'esultats classe
+    pair Cl[];
+    cl=0;
+    for p_=#6:
+    cl:=cl+1;
+    Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])];
+    endfor;
+    trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge;
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    pair O;
+    O=(0,0);
+    path cc;
+    cc=cercles(O,#1);
+    %%etiquettage des disciplines
+    n:=0;%compter le nombre de disciplines
+    for p_=#2:
+    n:=n+1;
+    endfor;
+    for k=1 upto n:
+    N[k]=k*(360/n);
+    trace segment(O,pointarc(cc,N[k]));% dashed evenly;
+    endfor;
+    p:=0;
+    for p_=#2:
+    p:=p+1;
+    if (N[p]<90) or (N[p]=90):
+    label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if ((N[p]>90) and (N[p]<180)) or (N[p]=180):
+    label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>180) and (N[p]<270):
+    label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>270) or (N[p]=270):
+    label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    endfor;
+    % trac\'e des pas:
+    pas=#4/#3;
+    for k=1 upto pas-1:
+    trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor
+    --cycle dashed evenly withcolor 0.5white;
+    endfor;
+    trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
+    --cycle;
+    % etiquettage des pas
+    dotlabel.top(LATEX("\noexpand\tiny"&decimal(#4)&"") rotated -90,pointarc(cc,0));
+    dotlabel.urt(LATEX("\noexpand\tiny"&decimal(#3)&""),(1/pas)[O,pointarc(cc,0)]);
+    % trac\'e des r\'esultats \'el\`eves
+    pair El[];
+    el=0;
+    for p_=#5:
+    el:=el+1;
+    El[el]=(p_/#4)[O,pointarc(cc,N[el])];
+    endfor;
+    trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen
+    pencircle scaled 1.5 withcolor blue;
+    % trac\'e des r\'esultats classe
+    pair Cl[];
+    cl=0;
+    for p_=#6:
+    cl:=cl+1;
+    Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])];
+    endfor;
+    trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge;
+  \end{mpost}
+  \fi
+}
+
+\newcommand\Radar[2][]{%
+  % 1 les param\`etres
+  % 2 la r\'epartition des notes
+  \useKVdefault[ClesRadar]%
+  \setKV[ClesRadar]{#1}%
+  \ignoreemptyitems%
+  \setsepchar[*]{,}%
+  \readlist*\ListeRadar{#2}%
+  \toklisteradara{}%
+  \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadara\compteur\nil}%
+  \ifboolKV[ClesRadar]{Disciplines}{}{%
+    \toklisteradarb{}%
+    \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarb\compteur\nil}%
+  }%
+  \ifboolKV[ClesRadar]{MoyenneClasse}{}{%
+    \toklisteradarc{}%
+    \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarc\compteur\nil}%
+  }%
+  \MPRadar{\useKV[ClesRadar]{Rayon}}{\the\toklisteradarb}{\useKV[ClesRadar]{Pas}}{\useKV[ClesRadar]{Reference}}{\the\toklisteradara}{\the\toklisteradarc}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDiagrammeRadar.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,1092 @@
+%%%
+% Distributivit\'e
+%%%
+% https://tex.stackexchange.com/questions/168972/draw-arrows-to-show-multiplication-pattern-distributive-property/169278?noredirect=1 
+\newcommand\Tikzmark[1]{%
+  \tikz[remember picture,baseline,inner sep=0pt]{%
+    \node[name=Distri-\theNbDistri,anchor=base] {${#1}$};}%
+  \stepcounter{NbDistri}%
+}%
+
+\newcommand\DrawArrow{%
+  \begin{tikzpicture}[overlay,remember picture]
+    \draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-2.north);
+    \draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-3.north);
+    \draw[-stealth,out=-50,in=-140,DCFlechesb,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-2.south);
+    \draw[-stealth,out=-50,in=-140,DCFlechesb!50,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-3.south);
+  \end{tikzpicture}
+}
+
+\newcommand\DrawArrowSimple[1]{%
+  \begin{tikzpicture}[overlay,remember picture]
+    \draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-2.north);
+    \draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-3.north);
+  \end{tikzpicture}
+}
+
+\newcommand\DrawArrowSimpleRenverse[1]{%
+  \begin{tikzpicture}[overlay,remember picture]
+    \draw[-stealth,out=140,in=50,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-0.north);
+    \draw[-stealth,out=140,in=50,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-1.north);
+  \end{tikzpicture}
+}
+
+\newcounter{NbDistri}%
+\setcounter{NbDistri}{0}%
+
+\newcounter{NbCalculDistri}%Pour compter combien de distributivit\'e il
+% y a dans un "seul calcul".
+\setcounter{NbCalculDistri}{0}
+
+\setKVdefault[ClesDistributivite]{Cours=false,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,Reperes=false,Impression=false,Tableau=false}%,AideAdd=false:inutile ?
+
+\newcommand\Tuile[4]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Vide,Reperes,Print;
+    Vide=\useKV[ClesDistributivite]{Vide};
+    Reperes=\useKV[ClesDistributivite]{Reperes};
+    Print=\useKV[ClesDistributivite]{Impression};
+    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));
+    if Print=false:
+    fill cc withcolor col;
+    fi;
+    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));
+    if Print=false:
+    fill cc withcolor col;
+    fi;
+    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:
+    if Reperes:
+    %%%%
+    %% 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)));
+    trace titi withcolor 0.6white;
+    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)));
+    trace titi withcolor 0.6white;
+    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)));
+    trace titi withcolor 0.6white;
+    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)));
+    trace titi withcolor 0.6white;
+    endfor;
+    endfor;
+    fi;
+    fi;
+    %%%
+    else:
+    %% 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)));
+    if Print=false:
+    fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi;
+    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,Print; Vide=\useKV[ClesDistributivite]{Vide}; Print=\useKV[ClesDistributivite]{Impression};}]
+    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));
+    if Print=false:
+    fill cc withcolor col;
+    fi;
+    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));
+    if Print=false:
+    fill cc withcolor col;
+    fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi;
+    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)));
+    if Print=false:
+    fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi;
+    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}}%
+  \ensuremath{%
+    % partie du x^2
+    \xintifboolexpr{#2==0}{}{\xintifboolexpr{#2==1}{}{\xintifboolexpr{#2==-1}{-}{\num{#2}}}\LETTRE^2}%
+    % partie du x
+    \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{%
+        \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}%
+      }\LETTRE}%
+    % partie du nombre
+    \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\num{#4}}{%
+        \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}%
+    % 
+  }%
+}%
+
+\xdef\SommeA{0}%
+\xdef\SommeB{0}%
+\xdef\SommeC{0}%
+
+\newcommand\Distri[5][]{%
+  \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]{Cours}{%
+    \ensuremath{%
+      \xintifboolexpr{#2==0}{%
+      }{\xintifboolexpr{#3==0}{}{(}}\xintifboolexpr{#2==0}{\Tikzmark{}}{\Tikzmark{a}}
+      \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+      \xintifboolexpr{#3==0}{\Tikzmark{}}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{b}}%
+      \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{c}%
+      \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+      \xintifboolexpr{#5>0}{\xintifboolexpr{#4==0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4==0}{{-}}{-}}{}}\Tikzmark{d}%
+      \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
+      \xintifboolexpr{\Multi==0}{%
+        \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+      %
+      =
+      %
+      \xdef\Multi{\fpeval{#2*#4}}%
+      \xintifboolexpr{\Multi==0}{}{%
+        \xintifboolexpr{#2<0}{(-}{}a\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(-}{}c\xintifboolexpr{#4<0}{)}{}%
+      }
+      \xdef\Multij{\fpeval{#2*#5}}%
+      \xintifboolexpr{\Multij==0}{}{%
+        \xintifboolexpr{\Multi==0}{}{+}%
+        \xintifboolexpr{#2<0}{(-}{}a\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(-}{}d\xintifboolexpr{#5<0}{)}{}%
+      }%
+      \xdef\Multik{\fpeval{#3*#4}}%
+      \xintifboolexpr{\Multik==0}{}{%
+        \xintifboolexpr{\Multi==0}{}{+}%
+        \xintifboolexpr{#3<0}{(-}{}b\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(-}{}c\xintifboolexpr{#4<0}{)}{}%
+      }%
+      \xdef\Multil{\fpeval{#3*#5}}%
+      \xintifboolexpr{\Multil==0}{}{+%
+        \xintifboolexpr{#3<0}{(-}{}b\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(-}{}d\xintifboolexpr{#5<0}{)}{}%
+      }%
+      % Fleches
+      \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}%
+    }%
+  }{%
+    \ifboolKV[ClesDistributivite]{Tuile}{%
+      \Tuile{#2}{#3}{#4}{#5}%
+    }{%
+      \ifboolKV[ClesDistributivite]{Tableau}{%
+        \DistriTableau[#1]{#2}{#3}{#4}{#5}%
+      }{%
+        \ensuremath{%
+          \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
+            \DistriEchange[#1]{#2}{#3}{#4}{#5}%
+          }{%
+            \ifboolKV[ClesDistributivite]{Remarquable}{%
+              \ifboolKV[ClesDistributivite]{Numerique}{%
+                \ifx\bla#4\bla%
+                \xintifboolexpr{#3>0}{%
+                  \num{\fpeval{#2+#3}}^2=(\num{#2}+\num{#3})^2=\num{#2}^2+2\times\num{#2}\times\num{#3}+\num{#3}^2=\num{\fpeval{#2*#2}}+\num{\fpeval{2*#2*#3}}+\num{\fpeval{#3*#3}}=\num{\fpeval{(#2+#3)**2}}
+                }{%
+                  \num{\fpeval{#2+#3}}^2=(\num{#2}\num{#3})^2=\num{#2}^2-2\times\num{#2}\times\num{\fpeval{-#3}}+\num{\fpeval{-#3}}^2=\num{\fpeval{#2*#2}}-\num{\fpeval{2*#2*abs(#3)}}+\num{\fpeval{#3*#3}}=\num{\fpeval{(#2-abs(#3))**2}}
+                }
+                \else
+                \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}=(\num{#2}+\num{#3})\times(\num{#4}\num{#5})=\num{#2}^2-\num{#3}^2=\num{\fpeval{#2*#2}}-\num{\fpeval{#3*#3}}=\num{\fpeval{(#2+#3)*(#2-#3)}}
+                \fi%
+              }{%
+              \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%
+              }{}%
+              % fin Remarquable
+            }%
+            }{%
+              \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}}%
+                  \xdef\NomVariable{\useKV[ClesDistributivite]{Lettre}}%
+                  \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+                  {\NomLettre&=\Distri[Etape=##1,Lettre=\NomVariable]{#2}{#3}{#4}{#5}\\}%
+                  \NomLettre&=\Distri[Etape=\NomFin,Lettre=\NomVariable]{#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}}%
+                      \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}{)}{}%
+                    }%
+                    \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}{)}{}}%
+                      }%
+                    }{%
+                      \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}{)}{}}%
+                    }{%
+                      \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}}}{}%
+                  }{}%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\DistriTableau[5][]{%
+  \useKVdefault[ClesDistributivite]%
+  \setKV[ClesDistributivite]{#1}%
+  \ensuremath{%
+    \begin{array}{|>{\columncolor{gray!15}}c|c|c|}
+      \hline
+      \rowcolor{gray!15}\times&\Affichage[#1]{0}{#4}{0}&\Affichage[#1]{0}{0}{#5}\\
+      \hline
+      \xintifboolexpr{#2==0}{}{\Affichage[#1]{0}{#2}{0}&\Affichage[#1]{\fpeval{#2*#4}}{0}{0}&\xintifboolexpr{\fpeval{#2*#5}>0}{+}{}\Affichage[#1]{0}{\fpeval{#2*#5}}{0}\\
+      \hline}%
+      \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+}{}\Affichage[#1]{0}{0}{#3}&\xintifboolexpr{\fpeval{#3*#4}>0}{+}{}\Affichage[#1]{0}{\fpeval{#3*#4}}{0}&\xintifboolexpr{\fpeval{#3*#5}>0}{+}{}\Affichage[#1]{0}{0}{\fpeval{#3*#5}}\\
+      \hline}
+    \end{array}
+  }%
+}%
+
+\newcommand\Resultat[1][]{%
+  \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+  \ensuremath{%
+    \Affichage{\SommeA}{\SommeB}{\SommeC}
+  }%
+}
+
+\newcommand\AffichageEchange[4][]{%
+  \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+  \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
+  \ensuremath{%
+    % partie du nombre
+    \xintifboolexpr{#2==0}{}{\num{#2}}%
+    % partie du x
+    \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{%
+        \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}
+      }\LETTRE}%
+    % partie du x^2
+    \xintifboolexpr{#4==0}{}{%
+      \xintifboolexpr{#4>0}{%
+        \xintifboolexpr{#2==0}{%
+          \xintifboolexpr{#3==0}{%
+          }{+}%
+        }{+}%
+        \xintifboolexpr{#4==1}{}{\num{#4}%
+        }%
+      }{%
+        \xintifboolexpr{#2==0}{%
+          \xintifboolexpr{#3==0}{%
+            \num{#4}%
+          }{-\num{\fpeval{abs(#4)%
+              }%
+            }%
+          }%
+        }{%
+          \xintifboolexpr{#4==-1}{-}{-\num{\fpeval{abs(#4)}}}}}%
+      \LETTRE^2}%
+  }%
+}%
+
+\newcommand\DistriEchange[5][]{%
+  \ensuremath{%
+    \useKVdefault[ClesDistributivite]%
+    \setKV[ClesDistributivite]{#1}%
+    \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]{Remarquable}{%
+      \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{\ifx\bla#4\bla(\AffichageEchange{#2}{#3}{0})^2\else(\AffichageEchange{#2}{#3}{0})(\AffichageEchange{#4}{#5}{0})\fi
+      }{}
+      \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{%
+        \ifx\bla#4\bla\xintifboolexpr{#3>0}{%
+          \num{#2}^2+2\times\num{#2}\times\xintifboolexpr{#3==1}{}{\num{#3}}\useKV[ClesDistributivite]{Lettre}+
+          \xintifboolexpr{#3==1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==1}{}{)}^2%
+        }{%
+          \num{#2}^2-2\times\num{#2}\times\xintifboolexpr{#3==-1}{}{\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}+
+          \xintifboolexpr{#3==-1}{}{(\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==-1}{}{)}^2%
+        }%
+        \else\num{#2}^2-\xintifboolexpr{#3==1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==1}{}{)}^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}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+          \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+          \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+        }{%
+          \AffichageEchange{\Multi}{\Multim}{\Multil}%
+        }
+        \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#3*#3}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#2*#2}}}{}%
+        \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#3*#3}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#2*#2}}}{}%
+        \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}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+          \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+          \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+        }{%
+          \AffichageEchange{\Multi}{\Multim}{\Multil}%
+        }
+        % \`a faire
+        \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#3*#5}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#2*#4}}}{}%
+        \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#3*#5}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#2*#4}}}{}%
+        % 
+        \fi%
+      }{}%
+    }{%
+      \ifboolKV[ClesDistributivite]{Numerique}{%
+      }{%
+        \ifboolKV[ClesDistributivite]{All}{%
+           \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
+           \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
+           \xdef\ValeurEchange{\useKV[ClesDistributivite]{Echange}}
+           \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+           {\NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=##1]{#2}{#3}{#4}{#5}\\}%
+           \NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=\NomFin]{#2}{#3}{#4}{#5}%
+        }{%
+          % Etape 1
+          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1||\useKV[ClesDistributivite]{Echange}==3}{%
+              \xintifboolexpr{#2==0}{%
+              }{\xintifboolexpr{#3==0}{%
+                }{(}}\Tikzmark{\Affichage[#1]{0}{0}{#2}}%
+              \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+              \xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{\fpeval{abs(#3)}}{0}}%
+              \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+              \xintifboolexpr{#2==0}{%
+              }{\xintifboolexpr{#3==0}{%
+                }{)}}%
+            }{
+              \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{\useKV[ClesDistributivite]{Echange}==2||\useKV[ClesDistributivite]{Echange}==3}{%
+              \xintifboolexpr{\Multi==0}{\times%
+                \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+              \Tikzmark{\AffichageEchange[#1]{#4}{0}{0}}%
+              \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+              \xintifboolexpr{#5>0}{\xintifboolexpr{#4==0}{}{+}}{\xintifboolexpr{#5<0}{-}{}}\Tikzmark{\AffichageEchange[#1]{0}{\fpeval{abs(#5)}}{0}}%
+              \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
+              \xintifboolexpr{\Multi==0}{%
+                \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+            }{%
+              \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}}%
+             \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}{%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{%
+              \xdef\Multi{\fpeval{#2*#4}}%
+              \xintifboolexpr{\Multi==0}{}{%
+                \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{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}{(}{}\AffichageEchange[#1]{#2}{0}{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}{(}{}\AffichageEchange[#1]{0}{#3}{0}\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}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+              }%
+            }{}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{%
+              \xdef\Multi{\fpeval{#2*#4}}%
+              \xintifboolexpr{\Multi==0}{}{%
+                \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{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}{(}{}\AffichageEchange[#1]{0}{#5}{0}\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}{(}{}\AffichageEchange[#1]{#4}{0}{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}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
+              }%
+            }{}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{%
+              \xdef\Multi{\fpeval{#2*#4}}%
+              \xintifboolexpr{\Multi==0}{}{%
+                \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
+              }%
+              \xdef\Multij{\fpeval{#2*#5}}%
+              \xintifboolexpr{\Multij==0}{}{%
+                \xintifboolexpr{\Multi==0}{}{+}%
+                \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
+              }%
+              \xdef\Multik{\fpeval{#3*#4}}%
+              \xintifboolexpr{\Multik==0}{}{%
+                \xintifboolexpr{\Multi==0}{}{+}%
+                \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
+              }%
+              \xdef\Multil{\fpeval{#3*#5}}%
+              \xintifboolexpr{\Multil==0}{}{+%
+                \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\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{\useKV[ClesDistributivite]{Echange}==1}{%
+            \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
+              \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{\Multij}{0}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+              \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{0}{\Multik}\xintifboolexpr{\Multik<0}{)}{}}%
+              \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
+              \xdef\Multim{\fpeval{#2*#4+#3*#5}}%              
+              \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
+              \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%              
+            }{}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{%
+            \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
+              \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{0}{\Multij}\xintifboolexpr{\Multij<0}{)}{}}%
+              \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{\Multik}{0}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+              \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
+              \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+              \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
+              \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
+            }{}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{%
+            \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{\Multi}{0}{0})}{\AffichageEchange{\Multi}{0}{0}}}{\AffichageEchange{\Multi}{0}{0}}%
+              \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+              \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+              \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+              \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+              \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
+              \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
+            }{}%
+          }{}%fin etape3
+          % 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
+            % \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+            %\stepcounter{NbCalculDistri}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{%
+              \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+              \ifboolKV[ClesDistributivite]{Oppose}{%
+                \xdef\Multiko{\fpeval{-\Multik}}%
+                \xdef\Multimo{\fpeval{-\Multim}}%
+                \xdef\Multijo{\fpeval{-\Multij}}%
+                 \xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko<0}{(}{}\Affichage{\Multiko}{0}{0}\xintifboolexpr{\Multiko<0}{)}{}}%
+                 \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+                 \xintifboolexpr{\Multijo==0}{}{\xintifboolexpr{\Multijo>0}{+}{+(}\Affichage{0}{0}{\Multijo}\xintifboolexpr{\Multijo<0}{)}{}}%
+              }{%
+                \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multik<0}{(\Affichage{\Multik}{0}{0})}{\Affichage{\Multik}{0}{0}}}{\Affichage{\Multik}{0}{0}}%
+              \xintifboolexpr{\Multim==0}{}{%
+                \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+              }%
+              \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multij<0}{-\Affichage{0}{0}{\fpeval{-\Multij}}}{+\Affichage{0}{0}{\Multij}}}%
+              }%
+               \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
+               \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%
+            }{}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{%
+              \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+              \ifboolKV[ClesDistributivite]{Oppose}{%
+                \xdef\Multijo{\fpeval{-\Multij}}%
+                \xdef\Multimo{\fpeval{-\Multim}}%
+                \xdef\Multiko{\fpeval{-\Multik}}%
+                 \xintifboolexpr{\Multijo==0}{}{\xintifboolexpr{\Multijo<0}{(}{}\Affichage{\Multijo}{0}{0}\xintifboolexpr{\Multijo<0}{)}{}}%
+                 \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+                 \xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}%
+              }{%
+                \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{%%%%%%%%%%%%%%%%%%%%%
+                    (\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}%
+              \xintifboolexpr{\Multim==0}{}{%
+                \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+              }%
+              \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multik<0}{-\Affichage{0}{0}{\fpeval{-\Multik}}}{+\Affichage{0}{0}{\Multik}}}%
+              }%
+               \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
+               \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
+            }{}%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{%
+              \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+              \ifboolKV[ClesDistributivite]{Oppose}{%
+                \xdef\Multilo{\fpeval{-\Multil}}%
+                \xdef\Multimo{\fpeval{-\Multim}}%
+                \xdef\Multio{\fpeval{-\Multi}}%
+                 \xintifboolexpr{\Multilo==0}{}{\xintifboolexpr{\Multilo<0}{(}{}\Affichage{\Multilo}{0}{0}\xintifboolexpr{\Multilo<0}{)}{}}%
+                 \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+                 \xintifboolexpr{\Multio==0}{}{\xintifboolexpr{\Multio>0}{+}{+(}\Affichage{0}{0}{\Multio}\xintifboolexpr{\Multio<0}{)}{}}%
+               }{%
+                \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multil<0}{(\Affichage{\Multil}{0}{0})}{\Affichage{\Multil}{0}{0}}}{\Affichage{\Multil}{0}{0}}%
+              \xintifboolexpr{\Multim==0}{}{%
+                \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+              }%
+              \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{-\Affichage{0}{0}{\fpeval{-\Multi}}}{+\Affichage{0}{0}{\Multi}}}%
+              }
+               \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
+               \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
+            }{}%
+          }{}%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDistributivite.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDomino.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCDomino.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCDomino.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,127 @@
+%%%
+% Domino
+%%%
+\newtcolorbox{MyDominoMini}[1][]{%
+  enhanced,
+  nobeforeafter,
+  left skip=0pt,
+  right skip=0pt,
+  left=0pt,right=0pt,top=0pt,bottom=0pt,
+  width=\textwidth/\ColonneDomino,
+  height=\textheight/\LigneDomino,
+  segmentation style={solid, line width=1.5pt},
+  colback=\CouleurDomino,
+  center upper,
+  valign upper=center,
+  center lower,
+  valign lower=center,
+  arc=2pt,
+  #1
+}
+
+\newtcolorbox{MyDominoLogo}[1][]{%
+  enhanced,
+  nobeforeafter,
+  left skip=0pt,
+  right skip=0pt,
+  left=0pt,right=0pt,top=0pt,bottom=0pt,
+  width=\textwidth/\ColonneDomino,
+  height=\textheight/\LigneDomino,
+  valign=center,
+  halign=center,
+  arc=2pt,
+  colback=white,
+  #1
+}
+
+\NewEnviron{TrameDomino}{%
+  \setlength{\margev}{1cm}
+  \setlength{\margeh}{1cm}
+  \begin{tikzpicture}[remember picture,overlay]
+    % quadrillages horizontal et vertical
+    \coordinate[yshift=-\margev] (A0) at (current page.north west);
+    \coordinate[yshift=-\margev] (B0) at (current page.north east);
+    \foreach \i in {1,...,\useKV[Domino]{Lignes}}{%
+      \coordinate[yshift=-\i*\textheight/\LigneDomino] (A\i) at (A0);
+      \coordinate[yshift=-\i*\textheight/\LigneDomino] (B\i) at (B0);
+    }
+    \coordinate[xshift=\margeh] (C0) at (current page.north west);
+    \coordinate[xshift=\margeh] (D0) at (current page.south west);
+    \foreach \i in {1,...,\useKV[Domino]{Colonnes}}{
+      \coordinate[xshift=\i*\textwidth/\ColonneDomino] (C\i) at (C0);
+      \coordinate[xshift=\i*\textwidth/\ColonneDomino] (D\i) at (D0);
+    }
+    \foreach \i in {0,...,\LigneDomino}{%
+      \draw (A\i) -- (B\i);
+    }
+    \foreach \i in {0,...,\ColonneDomino}{%
+      \draw (C\i) -- (D\i);
+    }
+    \draw[blue, line width=3pt] (A0)--(B0);
+    \draw[blue, line width=3pt] (A\LigneDomino)--(B\LigneDomino);
+    \draw[blue, line width=3pt] (C0)--(D0);
+    \draw[blue, line width=3pt] (C\ColonneDomino)--(D\ColonneDomino);
+    % point pour placer les cartes
+    \foreach \i in {0,...,\fpeval{\ColonneDomino-1}}{%
+      \foreach \j in {0,...,\fpeval{\LigneDomino-1}}{%
+        \coordinate[xshift=\margeh+(0.5\textwidth/\ColonneDomino)+\i*\textwidth/\ColonneDomino,yshift=-0.5\textheight/\LigneDomino-\j*\textheight/\LigneDomino]
+        (Domino\fpeval{\i+\ColonneDomino*\j+1}) at (A0);
+      }
+    }
+    \BODY
+  \end{tikzpicture}
+}
+
+\setKVdefault[Domino]{Couleur=white,Trame,Ratio=0.5,Lignes=7,Colonnes=5,Superieur=false,Logo=false,Image=tiger.pdf}
+
+\newcommand\Dominos[2][]{%
+  \useKVdefault[Domino]%
+  \setKV[Domino]{#1}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeDominos{#2}%
+  \xdef\CouleurDomino{\useKV[Domino]{Couleur}}%
+  \xdef\ratiodomino{\useKV[Domino]{Ratio}}%
+  \xdef\LigneDomino{\useKV[Domino]{Lignes}}%
+  \xdef\ColonneDomino{\useKV[Domino]{Colonnes}}%
+  \ifboolKV[Domino]{Trame}{%
+    \clearpage
+    \begin{TrameDomino}
+      \foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{%
+        \node[] at (Domino\i){%
+          \ifboolKV[Domino]{Superieur}{%
+            \begin{MyDominoMini}[space=\ratiodomino]%
+              \ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]%
+            \end{MyDominoMini}%
+          }{%
+            \begin{MyDominoMini}[sidebyside,sidebyside gap=4mm,righthand ratio=\ratiodomino]%
+              \ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]%          
+            \end{MyDominoMini}%
+          }%
+        };
+      }%
+    \end{TrameDomino}%
+    \ifboolKV[Domino]{Logo}{%
+      \clearpage
+      \begin{TrameDomino}
+        \foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{%
+          \node at (Domino\i){%
+            \begin{MyDominoLogo}%
+              \includegraphics[height=\tcbtextheight]{\useKV[Domino]{Image}}
+            \end{MyDominoLogo}%
+          };
+        }%
+      \end{TrameDomino}%
+    }{}%
+  }{%
+    \ifboolKV[Domino]{Superieur}{%
+      \begin{MyDominoMini}[space=\ratiodomino]%
+        \ListeDominos[1,1]\tcblower\ListeDominos[1,2]%
+      \end{MyDominoMini}%
+    }{%
+      \begin{MyDominoMini}[sidebyside,sidebyside gap=4mm,righthand ratio=\ratiodomino]%
+        \ListeDominos[1,1]\tcblower%
+        \ListeDominos[1,2]%          
+      \end{MyDominoMini}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCDomino.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,148 @@
+%%%
+% QCM
+%%%
+\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=R\'eponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false,Parties={Yeux,Nez,Bouche}}%
+\newlength{\LargeurQCM}%
+\newlength{\PfCLargeurQCM}%
+\newcounter{QuestionQCM}%
+\newcounter{TitreQCM}%
+\ifdef{\QCM}{%
+  \PackageWarning{ProfCollege}{La commande \noexpand\QCM étant définie par la classe du document, ProfCollege modifie sa commande \noexpand\QCM en \noexpand\QCMPfC.}%
+  \newcommand\QCMPfC[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}%
+        \setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
+        \setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
+        \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}%
+      }%
+    }%
+    \renewcommand{\arraystretch}{1}%
+  }%
+}{%
+  \newcommand\QCM[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}%
+      \renewcommand{\arraystretch}{1}%
+    }{%
+      \ifboolKV[ClesQCM]{VF}{%
+        \setKV[ClesQCM]{Reponses=2}%
+        \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+        \setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
+        \setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
+        \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}%
+      }%
+    }%
+    \renewcommand{\arraystretch}{1}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcrireunQCM.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureLettres.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureLettres.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureLettres.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,57 @@
+
+
+
+%%%
+% Ecriture des nombres en lettres
+%%%
+\setKVdefault[ClesEcriture]{Math=false,Majuscule=false,E=false,Tradition=false,Zero=false}
+
+\newcommand\EcriturePluriel[1]{%
+  \xintifboolexpr{#1 > 1}{s}{}%
+}
+
+\newcommand\EcritureDecimale{%
+  \StrLen{\ListeEcriture[2]}[\LongueurDecimale]%
+  \xintifboolexpr{\LongueurDecimale == 6}{%
+    ~millionième\EcriturePluriel{\ListeEcriture[2]}%
+  }{\xintifboolexpr{\LongueurDecimale == 5}{%
+     ~cent-millième\EcriturePluriel{\ListeEcriture[2]}
+    }{\xintifboolexpr{\LongueurDecimale == 4}{%
+        ~dix-millième\EcriturePluriel{\ListeEcriture[2]}
+      }{\xintifboolexpr{\LongueurDecimale == 3}{%
+          ~millième\EcriturePluriel{\ListeEcriture[2]}
+        }{\xintifboolexpr{\LongueurDecimale == 2}{%
+            ~centième\EcriturePluriel{\ListeEcriture[2]}
+          }{\xintifboolexpr{\LongueurDecimale == 1}{%
+              ~dixième\EcriturePluriel{\ListeEcriture[2]}
+            }{}%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\Ecriture[2][]{%
+  \useKVdefault[ClesEcriture]%
+  \setKV[ClesEcriture]{#1}%
+  \ifboolKV[ClesEcriture]{Tradition}{%
+    \fmtcountsetoptions{french={dash or space=traditional}}%
+  }{%
+    \fmtcountsetoptions{french={dash or space=always}}%
+  }%
+  \setsepchar{.}%
+  \readlist*\ListeEcriture{#2}%
+  \xintifboolexpr{\ListeEcriturelen == 2}{%
+    \ifboolKV[ClesEcriture]{Majuscule}{%
+      \ifboolKV[ClesEcriture]{Zero}{}{\Numberstringnum{\ListeEcriture[1]}}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{Zero}{}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]} et }}{\ifboolKV[ClesEcriture]{Tradition}{ virgule }{-virgule-}}\numberstringnum{\ListeEcriture[2]}\ifboolKV[ClesEcriture]{Math}{\EcritureDecimale}{}%
+    }{%
+      \ifboolKV[ClesEcriture]{Zero}{}{\numberstringnum{\ListeEcriture[1]}}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{Zero}{}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]} et }}{\ifboolKV[ClesEcriture]{Tradition}{ virgule }{-virgule-}}\numberstringnum{\ListeEcriture[2]}\ifboolKV[ClesEcriture]{Math}{\EcritureDecimale}{}%
+    }}{%
+    \ifboolKV[ClesEcriture]{Majuscule}{%
+      \Numberstringnum{\ListeEcriture[1]}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]}}{}%
+    }{%
+      \numberstringnum{\ListeEcriture[1]}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]}}{}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureLettres.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,427 @@
+%%%
+% Ecritures d'unit\'es
+%%%
+\setKVdefault[Unites]{m=false,km=false,hm=false,ha=false,dam=false,a=false,dm=false,cm=true,mm=false,um=false,nm=false,g=true,t=false,q=false,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,ug=false,ng=false,mmin=false,kmh=true,kms=false,ms=false,mh=false,kgm=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false,Go=true,Mo=false,ko=false,To=false,o=false,kWh=true,C=true,K=false,F=false,Nombre}
+\defKV[Unites]{Dots=\setKV[Unites]{Nombre=false}}
+
+\newlength{\PfCLgUnites}
+
+%D'apres https://tex.stackexchange.com/questions/38905/time-of-the-day-or-time-period-using-the-package-siunitx
+\ExplSyntaxOn
+\NewDocumentCommand \Temps {o o > { \SplitArgument { 5 } { ; } } m }
+{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}
+  \group_begin:%
+  \IfNoValueF{#2}
+  { \keys_set:nn { siunitx } {#2} }
+  \siunitx_hms_output:nnn #3
+  \group_end:
+}
+\cs_new_protected:Npn \siunitx_hms_output:nnn #1#2#3#4#5#6
+{%
+  \IfNoValueF {#1}%
+  {%
+    \tl_if_blank:nF {#1}%
+    {%
+      \ifboolKV[Unites]{Nombre}{%
+        \SI{#1}{\annee\xintifboolexpr{#1>1}{s}{}}%
+      }{%
+      \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+      \pointilles[\PfCLgUnites]\,\si{\annee(s)}}%
+      \IfNoValueF {#2}{\,}%
+    }%
+  }%
+  \IfNoValueF {#2}%
+  {%
+    \tl_if_blank:nF {#2}%
+    {%
+      \ifboolKV[Unites]{Nombre}{%
+        \SI{#2}{\mois}%
+      }{%
+      \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+      \pointilles[\PfCLgUnites]\,\si{\mois}}%
+      \IfNoValueF{#3}{\,}%
+    }%
+  }%
+  \IfNoValueF {#3}%
+  {%
+    \tl_if_blank:nF {#3}%
+    {%
+      \ifboolKV[Unites]{Nombre}{%
+         \SI{#3}{\jour}%
+      }{%
+      \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+      \pointilles[\PfCLgUnites]\,\si{\jour}}%        
+      \IfNoValueF{#4}{\,}%
+    }%
+  }%
+  \IfNoValueF {#4}%
+  {%
+    \tl_if_blank:nF {#4}%
+    {%
+      \ifboolKV[Unites]{Nombre}{%
+        \SI{#4}{\hour}%
+      }{%
+      \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+      \pointilles[\PfCLgUnites]\,\si{\hour}}%
+      \IfNoValueF{#5}{\,}%
+    }%
+  }%
+  \IfNoValueF {#5}%
+  {%
+    \tl_if_blank:nF {#5}%
+    {%
+      \ifboolKV[Unites]{Nombre}{%
+        \SI[minimum-integer-digits=2]{#5}{\minute}%
+      }{%
+      \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+      \pointilles[\PfCLgUnites]\,\si{\minute}}%
+      \IfNoValueF{#6}{\,}%
+    }%
+  }%
+  \IfNoValueF {#6}%
+  {%
+    \tl_if_blank:nF {#6} {%
+      \ifboolKV[Unites]{Nombre}{%
+        \SI{#6}{\second}}{%
+        \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+        \pointilles[\PfCLgUnites]\,\si{\second}}%
+    }%
+  }%
+}%
+\ExplSyntaxOff
+
+\NewDocumentCommand\Temp{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{F}{%
+    \DeclareSIUnit{\Tempo}{\fahrenheit}%
+  }{%
+    \ifboolKV[Unites]{K}{%
+      \DeclareSIUnit{\Tempo}{\kelvin}%
+    }{%
+      \DeclareSIUnit{\Tempo}{\celsius}%
+    }%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\Tempo}%
+  }%    
+}%
+
+\NewDocumentCommand\Conso{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\kWh}%
+  }{%
+  \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+  \pointilles[\PfCLgUnites]\,\si{\kWh}%
+  }%
+}%
+
+%Pour mémoire au cas où...
+%\newcommand\Prixo[2][2]{%
+%  \SI[round-mode=places,round-precision=#1]{#2}{\EuRo}%
+%}
+
+\NewDocumentCommand\Prix{O{} O{2} m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI[round-mode=places,round-precision=#2]{#3}{\EuRo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}
+    \pointilles[\PfCLgUnites]\,\si{\EuRo}%
+  }%
+}%
+
+\NewDocumentCommand\Octet{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{o}{%
+    \DeclareSIUnit{\Tempo}{\octet}%
+  }{%
+    \ifboolKV[Unites]{ko}{%
+      \DeclareSIUnit{\Tempo}{\kilo\octet}%
+    }{%
+      \ifboolKV[Unites]{Mo}{%
+        \DeclareSIUnit{\Tempo}{\mega\octet}%
+      }{%
+        \ifboolKV[Unites]{To}{%
+          \DeclareSIUnit{\Tempo}{\tera\octet}%
+        }{%
+          \DeclareSIUnit{\Tempo}{\giga\octet}%
+        }%
+      }%
+    }%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\Tempo}%
+  }%
+}%
+
+\NewDocumentCommand\Lg{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{nm}{%
+    \DeclareSIUnit{\Tempo}{\nano\meter}%
+  }{%
+    \ifboolKV[Unites]{um}{%
+      \DeclareSIUnit{\Tempo}{\micro\meter}%
+    }{%
+      \ifboolKV[Unites]{km}{%
+        \DeclareSIUnit{\Tempo}{\kilo\meter}%
+      }{%
+        \ifboolKV[Unites]{hm}{%
+          \DeclareSIUnit{\Tempo}{\hecto\meter}%
+        }{%
+          \ifboolKV[Unites]{dam}{%
+            \DeclareSIUnit{\Tempo}{\deca\meter}%
+          }{%
+            \ifboolKV[Unites]{m}{%
+              \DeclareSIUnit{\Tempo}{\meter}%
+            }{%
+              \ifboolKV[Unites]{dm}{%
+                \DeclareSIUnit{\Tempo}{\deci\meter}%
+              }{%
+                \ifboolKV[Unites]{mm}{%
+                  \DeclareSIUnit{\Tempo}{\milli\meter}%
+                }{%
+                  \DeclareSIUnit{\Tempo}{\centi\meter}%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }% 
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\Tempo}%
+  }%    
+}%
+
+\NewDocumentCommand\Masse{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{ng}{%
+    \DeclareSIUnit{\Tempo}{\nano\gram}%
+  }{\ifboolKV[Unites]{ug}{%
+      \DeclareSIUnit{\Tempo}{\micro\gram}%
+    }{\ifboolKV[Unites]{t}{%
+        \DeclareSIUnit{\Tempo}{\tonne}%
+      }{\ifboolKV[Unites]{q}{%
+          \DeclareSIUnit{\Tempo}{\quintal}%
+        }{%
+          \ifboolKV[Unites]{kg}{%
+            \DeclareSIUnit{\Tempo}{\kilo\gram}%
+          }{\ifboolKV[Unites]{hg}{%
+              \DeclareSIUnit{\Tempo}{\hecto\gram}%
+            }{\ifboolKV[Unites]{dag}{%
+                \DeclareSIUnit{\Tempo}{\deca\gram}%
+              }{\ifboolKV[Unites]{dg}{%
+                  \DeclareSIUnit{\Tempo}{\deci\gram}%
+                }{\ifboolKV[Unites]{cg}{%
+                    \DeclareSIUnit{\Tempo}{\centi\gram}%
+                  }{\ifboolKV[Unites]{mg}{%
+                      \DeclareSIUnit{\Tempo}{\milli\gram}%
+                    }{%
+                      \DeclareSIUnit{\Tempo}{\gram}%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\Tempo}%
+  }%
+}%
+
+\NewDocumentCommand\Capa{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{kL}{%
+    \DeclareSIUnit{\Tempo}{\kilo\liter}%
+  }{\ifboolKV[Unites]{hL}{%
+      \DeclareSIUnit{\Tempo}{\hecto\liter}%
+    }{\ifboolKV[Unites]{daL}{%
+        \DeclareSIUnit{\Tempo}{\deca\liter}%
+      }{\ifboolKV[Unites]{dL}{%
+          \DeclareSIUnit{\Tempo}{\deci\liter}%
+        }{\ifboolKV[Unites]{cL}{%
+            \DeclareSIUnit{\Tempo}{\centi\liter}%
+          }{\ifboolKV[Unites]{mL}{%
+              \DeclareSIUnit{\Tempo}{\milli\liter}%
+            }{%
+              \DeclareSIUnit{\Tempo}{\liter}%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\Tempo}%
+  }%
+}%
+
+\NewDocumentCommand\Aire{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{ha}{%
+    \DeclareSIUnit{\Tempo}{\hectare}%
+  }{%
+    \ifboolKV[Unites]{a}{%
+      \DeclareSIUnit{\Tempo}{\are}%
+    }{%
+      \ifboolKV[Unites]{nm}{%
+        \DeclareSIUnit{\Tempo}{\nano\meter}%
+      }{%
+        \ifboolKV[Unites]{um}{%
+          \DeclareSIUnit{\Tempo}{\micro\meter}%
+        }{%
+          \ifboolKV[Unites]{km}{%
+            \DeclareSIUnit{\Tempo}{\kilo\meter}%
+          }{%
+            \ifboolKV[Unites]{hm}{%
+              \DeclareSIUnit{\Tempo}{\hecto\meter}%
+            }{%
+              \ifboolKV[Unites]{dam}{%
+                \DeclareSIUnit{\Tempo}{\deca\meter}%
+              }{%
+                \ifboolKV[Unites]{m}{%
+                  \DeclareSIUnit{\Tempo}{\meter}%
+                }{%
+                  \ifboolKV[Unites]{dm}{%
+                    \DeclareSIUnit{\Tempo}{\deci\meter}%
+                  }{%
+                    \ifboolKV[Unites]{mm}{%
+                      \DeclareSIUnit{\Tempo}{\milli\meter}%
+                    }{%
+                      \DeclareSIUnit{\Tempo}{\centi\meter}%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\square\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\square\Tempo}%
+  }%
+}%
+
+\NewDocumentCommand\Vol{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{nm}{%
+    \DeclareSIUnit{\Tempo}{\nano\meter}%
+  }{%
+    \ifboolKV[Unites]{um}{%
+      \DeclareSIUnit{\Tempo}{\micro\meter}%
+    }{%
+      \ifboolKV[Unites]{km}{%
+        \DeclareSIUnit{\Tempo}{\kilo\meter}%
+      }{%
+        \ifboolKV[Unites]{hm}{%
+          \DeclareSIUnit{\Tempo}{\hecto\meter}%
+        }{%
+          \ifboolKV[Unites]{dam}{%
+            \DeclareSIUnit{\Tempo}{\deca\meter}%
+          }{%
+            \ifboolKV[Unites]{m}{%
+              \DeclareSIUnit{\Tempo}{\meter}%
+            }{%
+              \ifboolKV[Unites]{dm}{%
+                \DeclareSIUnit{\Tempo}{\deci\meter}%
+              }{%
+                \ifboolKV[Unites]{mm}{%
+                  \DeclareSIUnit{\Tempo}{\milli\meter}%
+                }{%
+                  \DeclareSIUnit{\Tempo}{\centi\meter}%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }% 
+  \ifboolKV[Unites]{Nombre}{%
+    \SI{#2}{\cubic\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si{\cubic\Tempo}%
+  }%
+}%
+
+\NewDocumentCommand\Vitesse{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{mmin}{%
+    \DeclareSIUnit{\Tempo}{\meter\per\minute}%
+  }{%
+    \ifboolKV[Unites]{mh}{%
+      \DeclareSIUnit{\Tempo}{\meter\per\hour}%
+    }{%
+      \ifboolKV[Unites]{ms}{%
+        \DeclareSIUnit{\Tempo}{\meter\per\second}%
+      }{%
+        \ifboolKV[Unites]{kms}{%
+          \DeclareSIUnit{\Tempo}{\kilo\meter\per\second}%
+        }{%
+          \DeclareSIUnit{\Tempo}{\kilo\meter\per\hour}%
+        }%
+      }%
+    }%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI[per-mode=symbol]{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si[per-mode=symbol]{\Tempo}%
+  }%
+}%
+
+\NewDocumentCommand\MasseVol{o m}{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{kgm}{%
+    \DeclareSIUnit{\Tempo}{\kilo\gram\per\cubic\meter}%
+  }{%
+    \DeclareSIUnit{\Tempo}{\gram\per\cubic\centi\meter}%
+  }%
+  \ifboolKV[Unites]{Nombre}{%
+    \SI[per-mode=symbol]{#2}{\Tempo}%
+  }{%
+    \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+    \pointilles[\PfCLgUnites]\,\si[per-mode=symbol]{\Tempo}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,135 @@
+%%%
+% Engrenages
+%%%
+\newtoks\tokPfCEngrenages%
+\def\UpdatetoksEngrenages#1/#2\nil{\addtotok\tokPfCEngrenages{#1,#2,}}%
+
+\setKVdefault[Engrenages]{Couleur=LightSteelBlue,Unite=3mm}
+
+\NewDocumentCommand\Engrenages{o m}{%
+  \tokPfCEngrenages{}
+  \useKVdefault[Engrenages]%
+  \setKV[Engrenages]{#1}%
+  \setsepchar[*]{,*/}%
+  \ignoreemptyitems
+  \readlist*\ListePfCEngrenages{#2}%
+  \setsepchar{,}
+  \xdef\PfCFooEngrenages{}
+  % \foreachitem\compteur\in\ListePfCEngrenages{\expandafter\UpdatetoksEngrenages\compteur\nil}%
+  \foreachitem\compteur\in\ListePfCEngrenages{%
+    \xdef\PfCFooEngrenages{\PfCFooEngrenages \ListePfCEngrenages[\compteurcnt,1],\ListePfCEngrenages[\compteurcnt,2],}%
+  }%
+  \BuildEngrenages{\PfCFooEngrenages}%
+}%
+
+\NewDocumentCommand\BuildEngrenages{m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCEngrenages;
+    
+    u:=\useKV[Engrenages]{Unite};
+    CouleurEngrenage=\useKV[Engrenages]{Couleur};
+    
+    vardef LectureDonnees(text t)=
+    n:=0;k=0;l=0;
+    for p_=t:
+    n:=n+1;
+    if (n mod 2)=0:
+    l:=l+1;
+    Zz[l]=p_;
+    else:
+    k:=k+1;
+    Mm[k]=p_;
+    fi;
+    endfor;
+    enddef;
+    
+    LectureDonnees(#1);
+
+    pair K;
+    K=(0,0);
+
+    trace Engrenage(Mm[1],Zz[1],(0,0));
+    
+    Signe=1;
+    
+    for w=2 upto (n div 2):
+    K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0);
+    AngleRot[w]:=360/(2*Zz[w]);
+    if w=2:
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]);
+    if (Zz[w] mod 2)=0:
+    Signe:=Signe*(-1);
+    fi;
+    else:
+    if (Zz[w] mod 2)=1:
+    if Signe=-1:
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180);
+    else:
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]);
+    fi;
+    else:
+    Signe:=Signe*(-1);
+    if Signe=1:
+trace rotation(Engrenage(Mm[w],Zz[w],K),K,180);
+    else:
+trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]);
+    fi;
+    fi;
+    fi;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={input PfCEngrenages;u:=\useKV[Engrenages]{Unite};CouleurEngrenage=\useKV[Engrenages]{Couleur};}]
+    vardef LectureDonnees(text t)=
+    n:=0;k=0;l=0;
+    for p_=t:
+    n:=n+1;
+    if (n mod 2)=0:
+    l:=l+1;
+    Zz[l]=p_;
+    else:
+    k:=k+1;
+    Mm[k]=p_;
+    fi;
+    endfor;
+    enddef;
+    
+    LectureDonnees(#1);
+
+    pair K;
+    K=(0,0);
+
+    trace Engrenage(Mm[1],Zz[1],(0,0));
+    
+    Signe=1;
+    
+    for w=2 upto (n div 2):
+    K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0);
+    AngleRot[w]:=360/(2*Zz[w]);
+    if w=2:
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]);
+    if (Zz[w] mod 2)=0:
+    Signe:=Signe*(-1);
+    fi;
+    else:
+    if (Zz[w] mod 2)=1:
+    if Signe=-1:
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180);
+    else:
+    trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]);
+    fi;
+    else:
+    Signe:=Signe*(-1);
+    if Signe=1:
+trace rotation(Engrenage(Mm[w],Zz[w],K),K,180);
+    else:
+trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]);
+    fi;
+    fi;
+    fi;
+    endfor;
+  \end{mpost}
+  \fi
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnigmeAire.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnigmeAire.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnigmeAire.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,337 @@
+%%%
+% Enigme Aire
+%%%
+\setKVdefault[EnigmeAire]{Modele=A,Couleur=LightSteelBlue,Echelle=7mm,Etape=1,Solution=false,Graines=false}
+\defKV[EnigmeAire]{Graine=\setKV[EnigmeAire]{Graines}}
+
+\def\MPEnigmeAireA{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines:=\useKV[EnigmeAire]{Graines};
+    Solution:=\useKV[EnigmeAire]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[EnigmeAire]{Graine};
+    fi;
+    
+    u:=\useKV[EnigmeAire]{Echelle};
+    
+    pair A[],B[];
+    numeric la[];
+    la1=ceiling(3+uniformdeviate(7));
+    la2=ceiling(3+uniformdeviate(7));
+    la3=ceiling(3+uniformdeviate(7));
+    la4=ceiling(4+uniformdeviate(6));
+    A1=u*(1,1);
+    A2-A1=u*(10,0);
+    A3-A2=u*(0,5);
+    A4-A3=A1-A2;
+    B1=(la1/(la1+la2+la3))[A1,A2];
+    B2=((la1+la2)/(la1+la2+la3))[A1,A2];
+    B3-B2=A4-A1;
+    B4-B1=B3-B2;
+    fill polygone(B1,B2,B3,B4) withcolor \useKV[EnigmeAire]{Couleur};
+    trace polygone(B1,B2,B3,B4);
+    trace polygone(A1,A2,A3,A4);
+    label(TEX("\Aire[m]{"&decimal(la1*la4)&"}"),iso(A1,B4));
+    if Solution:
+    label(TEX(decimal(la2*la4)&"\,\si{\square\meter}"),iso(B1,B3));
+    else:
+    label(TEX("?\,\si{\square\meter}"),iso(B1,B3));
+    fi;
+    
+    label(TEX("\Aire[m]{"&decimal(la3*la4)&"}"),iso(B2,A3));
+    trace cotation(A4,B3,3mm,3mm,TEX("\Lg[m]{"&decimal(la1+la2)&"}"));
+    trace cotation(B1,A2,-3mm,-3mm,TEX("\Lg[m]{"&decimal(la3+la2)&"}"));
+  \end{mplibcode}
+  \fi
+}
+
+\def\MPEnigmeAireB{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines:=\useKV[EnigmeAire]{Graines};
+    Solution:=\useKV[EnigmeAire]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[EnigmeAire]{Graine};
+    fi;
+    
+    u:=\useKV[EnigmeAire]{Echelle};
+    pair A[],B[];
+    numeric La[],la[],Ca[];
+    la1=ceiling(3+uniformdeviate(7));
+    la2=ceiling(3+uniformdeviate(7));
+    La1=ceiling(8+uniformdeviate(7));
+    La2=ceiling(uniformdeviate(5));
+    Ca1=1+ceiling(uniformdeviate(La1-La2-2));
+    Ca2=ceiling(uniformdeviate(la2-2));
+    A1=u*(1,1);
+    A2-A1=u*(10,0);
+    A3-A2=u*(0,2);
+    A4-A3=u*(-7,0);
+    A5-A4=u*(0,4);
+    A6-A5=(xpart(A1-A4),0);
+    A7-A6=A4-A5;
+    B1=(Ca1/(La1-La2))[A4,A3];
+    B3=((Ca2+1)/la2)[A4,A5];
+    B2-B1=B3-A4;
+    fill polygone(A4,B1,B2,B3) withcolor \useKV[EnigmeAire]{Couleur};
+    trace chemin(B1,B2,B3);
+    trace polygone(A1,A2,A3,A4,A5,A6);
+    trace chemin(A7,A4);
+    label(TEX("\Aire[m]{"&decimal(la1*La1)&"}"),iso(A1,A3));
+    if Solution:
+    label(TEX(decimal(Ca1*Ca2)&"\,\si{\square\meter}"),iso(B1,B3));
+    else:
+    label(TEX("?\,\si{\square\meter}"),iso(B1,B3));
+    fi;
+    
+    label(TEX("\Aire[m]{"&decimal(la2*La2)&"}"),iso(A7,A5));
+    trace appelation(A6,A5,3mm,TEX("\Lg[m]{"&decimal(La2)&"}"));
+    trace appelation(B1,A3,3mm,TEX("\Lg[m]{"&decimal(La1-La2-Ca1)&"}"));
+    label.rt(TEX("\Lg[m]{"&decimal(la2-Ca2)&"}"),iso(A5,B3));
+    label.rt(TEX("\Lg[m]{"&decimal(la1)&"}"),iso(A2,A3));
+  \end{mplibcode}
+  \fi
+}
+
+\def\MPEnigmeAireC{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines:=\useKV[EnigmeAire]{Graines};
+    Solution:=\useKV[EnigmeAire]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[EnigmeAire]{Graine};
+    fi;
+    
+    u:=\useKV[EnigmeAire]{Echelle};
+    pair A[];
+    numeric la[],La[];
+    La1=ceiling(3+uniformdeviate(7));
+    La2=ceiling(3+uniformdeviate(7));
+    La3=ceiling(3+uniformdeviate(7));
+    la1=ceiling(3+uniformdeviate(7));
+    la2=ceiling(3+uniformdeviate(7));
+    la3=ceiling(3+uniformdeviate(7));
+    A1=u*(1,1);
+    A4-A1=if La1+La2+La3>la1+la2+la3:
+    u*(10,0)
+    else:
+    u*(8,0);
+    fi;
+    A2=(La1/(La1+La2+La3))[A1,A4];
+    A3=((La1+La2)/(La1+La2+La3))[A1,A4];
+    A5-A4=if La1+La2+La3>la1+la2+la3:
+    u*(0,7)
+    else:
+    u*(0,10);
+    fi;
+    A6-A5=A3-A4;
+    A7-A3=((la1+la2)/(la1+la2+la3))[A4,A5]-A4;
+    A8-A7=A2-A3;
+    A9-A2=(la1/(la1+la2+la3))[A4,A5]-A4;
+    A10-A9=A1-A2;
+    trace polygone(A1,A4,A5,A6,A7,A8,A9,A10);
+    trace segment(A2,A9);
+    trace segment(A3,A7);
+    label(TEX("\Aire[cm]{"&decimal(la1*La1)&"}"),iso(A1,A9));
+    label(TEX("\Aire[cm]{"&decimal((la1+la2)*La2)&"}"),iso(A2,A7));
+    label(TEX("\Aire[cm]{"&decimal((la1+la2+la3)*La3)&"}"),iso(A3,A5));
+    trace cotation(A1,A4,-3mm,-3mm,TEX("\Lg[cm]{"&decimal(La1+La2+La3)&"}"));
+    label.lft(TEX("\Lg{"&decimal(la1)&"}"),iso(A1,A10));
+    label.lft(TEX("\Lg{"&decimal(la2)&"}"),iso(A9,A8));
+    if Solution:
+    label.lft(TEX(decimal(la3)&"\,\si{\centi\meter}"),iso(A7,A6));
+    else:
+    label.lft(TEX("?\,\si{\centi\meter}"),iso(A7,A6));
+    fi;
+  \end{mplibcode}
+  \fi
+}
+
+\def\MPEnigmeAireD{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines:=\useKV[EnigmeAire]{Graines};
+    Solution:=\useKV[EnigmeAire]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[EnigmeAire]{Graine};
+    fi;
+    
+    u:=\useKV[EnigmeAire]{Echelle};
+    Etape:=\useKV[EnigmeAire]{Etape};
+    pair A[];
+    numeric la[],La[];
+    la[1]=ceiling(3+uniformdeviate(7));
+    la[2]=ceiling(3+uniformdeviate(7));
+    k=1;
+    La[k]=ceiling(3+uniformdeviate(7));
+    A[1]=u*(9,-9);
+    A[6*(k-1)+2]-A[6*(k-1)+1]=u*(0,3);
+    A[6*(k-1)+3]-A[6*(k-1)+2]=u*(-6,0);
+    A[6*(k-1)+4]-A[6*(k-1)+3]=A[6*(k-1)+1]-A[6*(k-1)+2];
+    A[6*(k-1)+5]=(la[k]/(la[k]+la[k+1]))[A[6*(k-1)+1],A[6*(k-1)+4]];
+    A[6*(k-1)+6]-A[6*(k-1)+5]=A[6*(k-1)+2]-A[6*(k-1)+1];
+    trace polygone(A[6*(k-1)+1],A[6*(k-1)+2],A[6*(k-1)+3],A[6*(k-1)+4]);
+    trace segment(A[6*(k-1)+5],A[6*(k-1)+6]);
+    if Solution:
+    trace cotation(A[6*(k-1)+5],A[6*(k-1)+1],-3mm,-3mm,TEX("\Lg{"&decimal(la[k])&"}"));
+    else:
+    trace cotation(A[6*(k-1)+5],A[6*(k-1)+1],-3mm,-3mm,TEX("?\,\si{\centi\meter}"));
+    fi;
+    label(TEX("\Aire{"&decimal(la[k]*La[k])&"}"),iso(A[6*(k-1)+5],A[6*(k-1)+2]));
+    label(TEX("\Aire{"&decimal(la[k+1]*La[k])&"}"),iso(A[6*(k-1)+4],A[6*(k-1)+6]));
+    if Etape<2:
+    trace cotation(A[6*(k-1)+3],A[6*(k-1)+6],3mm,3mm,TEX("\Lg{"&decimal(la[k+1])&"}"));
+    fi;
+    for k=2 upto Etape:
+    La[k]=ceiling(3+uniformdeviate(7));
+    la[k+1]=ceiling(3+uniformdeviate(7));
+    A[6*(k-1)+1]=A[6*(k-1)];
+    A[6*(k-1)+2]-A[6*(k-1)+1]=u*(0,3);
+    A[6*(k-1)+3]-A[6*(k-1)+2]=u*(-6,0);
+    A[6*(k-1)+4]-A[6*(k-1)+3]=A[6*(k-1)+1]-A[6*(k-1)+2];
+    A[6*(k-1)+5]=A[6*(k-1)-3];%(la[k]/(la[k]+la[k+1]))[A[6*(k-1)+1],A[6*(k-1)+4]];
+    A[6*(k-1)+6]-A[6*(k-1)+5]=A[6*(k-1)+2]-A[6*(k-1)+1];
+    trace polygone(A[6*(k-1)+1],A[6*(k-1)+2],A[6*(k-1)+3],A[6*(k-1)+4]);
+    trace segment(A[6*(k-1)+5],A[6*(k-1)+6]);
+    if k=Etape:
+    trace cotation(A[6*(k-1)+3],A[6*(k-1)+6],3mm,3mm,TEX("\Lg{"&decimal(la[k+1])&"}"));
+    fi;
+    label(TEX("\Aire[cm]{"&decimal(la[k]*La[k])&"}"),iso(A[6*(k-1)+6],A[6*(k-1)]));
+    label(TEX("\Aire[cm]{"&decimal(la[k+1]*La[k])&"}"),iso(A[6*(k-1)+4],A[6*(k-1)+6]));
+    endfor;
+  \end{mplibcode}
+  \fi
+}
+
+\def\MPEnigmeAireE{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines:=\useKV[EnigmeAire]{Graines};
+    Solution:=\useKV[EnigmeAire]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[EnigmeAire]{Graine};
+    fi;
+    
+    u:=\useKV[EnigmeAire]{Echelle};
+    pair A[];
+    numeric la[],La[];
+    La1=ceiling(3+uniformdeviate(7));
+    La2=ceiling(3+uniformdeviate(7));
+    La3=ceiling(3+uniformdeviate(7));
+    la1=ceiling(4+uniformdeviate(5));
+    la2=ceiling(4+uniformdeviate(5));
+    la3=la1+la2+2;
+    A1=u*(7,1);
+    A11-A1=if la3>(La1+La2+La3):u*(0,10) else:u*(0,7) fi;
+    A2=(La1/(La1+La2+La3))[A1,A11];
+    A3=((La1+La2)/(La1+La2+La3))[A1,A11];
+    A8-A2=if la3>(La1+La2+La3):u*(-7,0) else:u*(-10,0) fi;
+    A6-A8=A11-A2;
+    A7-A8=A3-A2;
+    A4=(la2/la3)[A7,A3];
+    A5-A4=A6-A7;
+    A9=(la1/la3)[A2,A8];
+    A10-A9=A1-A2;
+    trace polygone(A1,A3,A4,A5,A6,A8,A9,A10);
+    trace segment(A7,A4);
+    trace segment(A2,A9);
+    label(TEX("\Aire[cm]{"&decimal(la1*La1)&"}"),iso(A1,A9));
+    label(TEX("\Aire[cm]{"&decimal(la3*La2)&"}"),iso(A2,A7));
+    label(TEX("\Aire[cm]{"&decimal(la2*La3)&"}"),iso(A4,A6));
+    trace cotationarc(A5,A4,5mm,4,1,TEX("\Lg[cm]{"&decimal(La3)&"}") rotated 90);
+    trace cotationarc(A9,A8,3mm,4,1,TEX("\Lg[cm]{"&decimal(la3-la1)&"}") rotated 180);
+    trace cotationarc(A4,A3,3mm,4,1,TEX("\Lg[cm]{"&decimal(la3-la2)&"}"));
+    if Solution:
+    trace cotationarc(A3,A1,5mm,3,1,TEX("\Lg{"&decimal(La1+La2)&"}") rotated 90);
+    else:
+    trace cotationarc(A3,A1,5mm,3,1,TEX("?") rotated 90);
+    fi;
+  \end{mplibcode}
+  \fi
+}
+
+\def\MPEnigmeAireF{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines:=\useKV[EnigmeAire]{Graines};
+    Solution:=\useKV[EnigmeAire]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[EnigmeAire]{Graine};
+    fi;
+    
+    u:=\useKV[EnigmeAire]{Echelle};
+    pair A[];
+    numeric la[],La[];
+    la1=ceiling(2+uniformdeviate(4));
+    la2=ceiling(2+uniformdeviate(4));
+    la3=ceiling(2+uniformdeviate(4));
+    la4=ceiling(2+uniformdeviate(4));
+    La1=ceiling(8+uniformdeviate(4));
+    La2=ceiling(8+uniformdeviate(4));
+    La3=ceiling(8+uniformdeviate(4));
+    La4=ceiling(8+uniformdeviate(4));
+    A1=(0,0);
+    A2-A1=u*(0,-3.5);
+    A3-A2=u*(2.25,0);
+    A4-A1=A3-A2;
+    A5-A1=u*(6,0);
+    A6-A5=u*(0,2.5);
+    A7-A6=A1-A5;
+    A8-A7=u*(0,2);
+    A9-A8=u*(-2,0);
+    A10-A9=A1-A8;
+    A11-A1=u*(-4.5,0);
+    A12-A11=u*(0,-1.5);
+    A13-A12=A1-A11;
+    fill polygone(A1,A5,A6,A7) withcolor \useKV[EnigmeAire]{Couleur};
+    trace polygone(A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13);
+    trace segment(A7,A13);
+    trace segment(A10,A4);
+    if Solution:
+    label(TEX("\Aire{"&decimal(la2*La2)&"}"),iso(A1,A6));
+    else:
+    label(TEX("?\,\si{\square\centi\meter}"),iso(A1,A6));
+    fi;
+    label(TEX("\Aire[cm]{"&decimal(la1*La1)&"}"),iso(A2,A4));
+    label(TEX("\Aire[cm]{"&decimal(la3*La3)&"}"),iso(A10,A8));
+    label(TEX("\Aire[cm]{"&decimal(la4*La4)&"}"),iso(A12,A1));
+    trace cotationarc(A12,A11,5mm,4,1,TEX("\Lg[cm]{"&decimal(la4)&"}") rotated -90);
+    trace cotationarc(A5,A4,5mm,4,1,TEX("\Lg[cm]{"&decimal(La2-la1)&"}") rotated 180);
+    trace cotationarc(A8,A7,5mm,4,1,TEX("\Lg[cm]{"&decimal(La3-la2)&"}") rotated 90);
+    trace cotationarc(A11,A10,3mm,4,1,TEX("\Lg[cm]{"&decimal(La4-la3)&"}"));
+    trace cotationarc(A2,A13,5mm,3,1,TEX("\Lg[cm]{"&decimal(La1-la4)&"}") rotated -90);
+  \end{mplibcode}
+  \fi
+}
+
+\NewDocumentCommand\EnigmeAire{o}{%
+  \useKVdefault[EnigmeAire]%
+  \setKV[EnigmeAire]{#1}%
+  \IfStrEqCase{\useKV[EnigmeAire]{Modele}}{%
+    {A}{\MPEnigmeAireA}
+    {B}{\MPEnigmeAireB}
+    {C}{\MPEnigmeAireC}
+    {D}{\MPEnigmeAireD}
+    {E}{\MPEnigmeAireE}
+    {F}{\MPEnigmeAireF}
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnigmeAire.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnquete.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnquete.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnquete.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,105 @@
+%%%
+% Enquête
+%%%
+\setKVdefault[ClesEnquete]{Perso=Qui ?,Objet=Quoi ?,Lieu=Où ?,Largeur=4.5cm}
+
+\newcommand\Enquete[1][]{%
+  \useKVdefault[ClesEnquete]%
+  \setKV[ClesEnquete]{#1}%
+}
+
+\newcommand\ListePersonnages[1]{%
+  \setsepchar{§}%
+  \readlist*\RetiensListePersonnages{#1}%
+  \setsepchar{,}%
+}
+
+\newcommand\ListeObjets[1]{%
+  \setsepchar{§}%
+  \readlist*\RetiensListeObjets{#1}%
+  \setsepchar{,}%
+}
+
+\newcommand\ListeLieux[1]{%
+  \setsepchar{§}%
+  \readlist*\RetiensListeLieux{#1}%
+  \setsepchar{,}%
+}
+
+\newcommand\ListeQuestions[1]{%
+  \setsepchar[*]{§*/}%
+  \readlist*\RetiensListeQuestions{#1}
+  % On crée la liste des numéros des questions
+  \xdef\foo{}%
+  \xintFor* ##1 in {\xintSeq{1}{\RetiensListeQuestionslen}}\do{%
+    \xdef\foo{\foo ##1,}%
+  }%
+  % Mélange des questions
+  % on crée les 6 premieres solutions.
+  \MelangeListe{\foo}{\fpeval{\RetiensListePersonnageslen}}%
+  \readlist*\ListeMelangeePersonnages{\faa}%
+  \readlist*\ListeRestante{\fii}%\ListeRestante[]
+  \MelangeListe{\faa}{\fpeval{\RetiensListePersonnageslen-1}}%
+  \readlist*\ListefuuPerso{\faa}%
+  % on crée les 6 solutions suivantes.
+  \xdef\fuuu{}%
+  \foreachitem\compteur\in\ListeRestante{\xdef\fuuu{\fuuu,\ListeRestante[\compteurcnt]}}%
+  \MelangeListe{\fuuu}{\fpeval{\RetiensListeObjetslen}}%
+  \readlist*\ListeMelangeeObjets{\faa}%
+  \readlist*\ListeRestante{\fii}%
+  \MelangeListe{\faa}{\fpeval{\RetiensListeObjetslen-1}}%
+  \readlist*\ListefuuObjets{\faa}%
+  % on crée les dernieres solutions.
+  \xdef\fuuu{}%
+  \foreachitem\compteur\in\ListeRestante{\xdef\fuuu{\fuuu,\ListeRestante[\compteurcnt]}}%
+  \MelangeListe{\fuuu}{\fpeval{\RetiensListeLieuxlen}}
+  \readlist*\ListeMelangeeLieux{\faa}%
+  %% \readlist*\ListeRestante{\fii}%
+  \MelangeListe{\faa}{\fpeval{\RetiensListeLieuxlen-1}}%
+  \readlist*\ListefuuLieux{\faa}%
+  % --------------
+  % Liste des questions sauvegardees
+  \xdef\fuu{}%
+  \foreachitem\compteur\in\ListefuuPerso{\xdef\fuu{\fuu,\ListefuuPerso[\compteurcnt]}}%
+  \foreachitem\compteur\in\ListefuuObjets{\xdef\fuu{\fuu,\ListefuuObjets[\compteurcnt]}}%
+  \foreachitem\compteur\in\ListefuuLieux{\xdef\fuu{\fuu,\ListefuuLieux[\compteurcnt]}}%
+  \ignoreemptyitems\setsepchar{,}%
+  \MelangeListe{\fuu}{\fpeval{\RetiensListePersonnageslen+\RetiensListeObjetslen+\RetiensListeLieuxlen-3}}%
+  \readlist*\ListeMelangeeQuestions{\faa}%
+  \reademptyitems%
+}%
+
+\newcommand\AffichageQuestions{%
+  \begin{enumerate}
+    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\RetiensListePersonnageslen+\RetiensListeObjetslen+\RetiensListeLieuxlen-3}}}\do{%
+    \item\xdef\Compteur{\ListeMelangeeQuestions[##1]}\RetiensListeQuestions[\Compteur,1]
+    }
+  \end{enumerate}
+}
+
+\newcommand\AffichageTableau{%
+  \begin{tabular}{|>{\PfCTBstrut$\square$~}m{\useKV[ClesEnquete]{Largeur}}|}
+    \hline
+    \rowcolor{gray!15}\multicolumn{1}{|c|}{\PfCTBstrut\useKV[ClesEnquete]{Perso}}\\
+    \hline
+    \xintFor* ##1 in {\xintSeq{1}{\RetiensListePersonnageslen}}\do{%
+    \RetiensListePersonnages[##1]\xdef\PfCCompteurMelange{\ListeMelangeePersonnages[##1]} $\star$ \RetiensListeQuestions[\PfCCompteurMelange,2]\\
+    }
+    % 
+    \hline
+    \rowcolor{gray!15}\multicolumn{1}{|c|}{\PfCTBstrut\useKV[ClesEnquete]{Objet}}\\
+    \hline
+    \xintFor* ##1 in {\xintSeq{1}{\RetiensListeObjetslen}}\do{%
+    \RetiensListeObjets[##1]\xdef\PfCCompteurMelange{\ListeMelangeeObjets[##1]} $\star$ \RetiensListeQuestions[\PfCCompteurMelange,2]\\
+    }
+    % 
+    \hline
+    \rowcolor{gray!15}\multicolumn{1}{|c|}{\PfCTBstrut\useKV[ClesEnquete]{Lieu}}\\
+    \hline
+    \xintFor* ##1 in {\xintSeq{1}{\RetiensListeLieuxlen}}\do{%
+    \RetiensListeLieux[##1]\xdef\PfCCompteurMelange{\ListeMelangeeLieux[##1]} $\star$ \RetiensListeQuestions[\PfCCompteurMelange,2]
+    \\
+    }
+    \hline
+  \end{tabular}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCEnquete.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFicheMemo.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCFicheMemo.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCFicheMemo.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,64 @@
+%%%
+% Fiche m\'emorisation active
+%%%
+\setKVdefault[ClesFicheMemo]{TexteReponses=Réponses,TexteQuestions=Questions,Solution=false,Largeur=\linewidth}
+
+\newcommand\FicheMemo[3][]{%
+  \xdef\CountcolUn{0}%
+  \xdef\CountcolDeux{0}%
+  \useKVdefault[ClesFicheMemo]%
+  \setKV[ClesFicheMemo]{#1}%
+  \setsepchar[*]{§*/}\reademptyitems%
+  \readlist*\ListeQuestionColonneUn{#2}%
+  \readlist*\ListeQuestionColonneDeux{#3}%
+  \renewcommand{\arraystretch}{1.35}%
+  \begin{NiceTabular}[width=\useKV[ClesFicheMemo]{Largeur}]{X[1]X[1]X[1]X[1]}[hvlines]
+    \CodeBefore%
+    \rowcolor{gray!15}{1}%
+    \tikz\draw[dashed,gray!50](2-|1.5) to (last-|1.5);%
+    \tikz\draw[dashed,gray!50](2-|4.5) to (last-|4.5);%
+    \Body%
+    \Block{1-1}{\bfseries\useKV[ClesFicheMemo]{TexteReponses}}&&&\Block{1-1}{\bfseries\useKV[ClesFicheMemo]{TexteReponses}}\\
+    \xintFor* ##1 in {\xintSeq {1}{\ListeQuestionColonneUnlen}}\do{%
+      \xintifboolexpr{\listlen\ListeQuestionColonneUn[##1]==2}{%
+        \uppercase{&}}{%
+        \Block[l]{\fpeval{\ListeQuestionColonneUn[##1,1]}-1}{\ifboolKV[ClesFicheMemo]{Solution}{\ListeQuestionColonneUn[##1,3]}{}}%
+        \uppercase{&}\xdef\CountcolUn{\fpeval{\CountcolUn+1}}\Block[l]{\fpeval{\ListeQuestionColonneUn[##1,1]}-1}{\ListeQuestionColonneUn[##1,2]}%
+      }%
+      &%
+      \xintifboolexpr{\listlen\ListeQuestionColonneDeux[##1]==2}{%
+        \uppercase{&}%
+      }{%
+        \xdef\CountcolDeux{\fpeval{\CountcolDeux+1}}\Block[l]{\fpeval{\ListeQuestionColonneDeux[##1,1]}-1}{\ListeQuestionColonneDeux[##1,2]}\uppercase{&}\Block[l]{\fpeval{\ListeQuestionColonneDeux[##1,1]}-1}{\ifboolKV[ClesFicheMemo]{Solution}{\ListeQuestionColonneDeux[##1,3]}{}}%
+      }%
+      \\%
+    }%
+    \CodeAfter%
+    \tikz\node[xshift=0.5em] at (2-|1) {\scriptsize\faCut};%
+    \xdef\PfCCountCutUn{2}%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeQuestionColonneUnlen}}\do{%
+      \xintifboolexpr{\listlen\ListeQuestionColonneUn[##1]==2}{%
+      }{%
+        \xdef\PfCCountCutUn{\fpeval{\PfCCountCutUn+\ListeQuestionColonneUn[##1,1]}}%
+        \tikz\node[xshift=0.5em] at (\fpeval{\PfCCountCutUn}-|1) {\scriptsize\faCut};%
+      }%
+    }%
+    \tikz\node[xshift=-0.5em] at (2-|last) {\scriptsize\rotatebox{180}{\faCut}};%
+    \xdef\PfCCountCutDeux{2}%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeQuestionColonneDeuxlen}}\do{%
+      \xintifboolexpr{\listlen\ListeQuestionColonneDeux[##1]==2}{%
+      }{%
+        \xdef\PfCCountCutDeux{\fpeval{\PfCCountCutDeux+\ListeQuestionColonneDeux[##1,1]}}%
+        \tikz\node[xshift=-0.5em] at (\fpeval{\PfCCountCutDeux}-|last) {\scriptsize\rotatebox{180}{\faCut}};%
+      }%
+    }%
+    \tikz\node[xshift=0.5em] at (1-|1) {\color{gray}\scriptsize\faCut};%
+    \tikz\node[xshift=0.5em] at (last-|1) {\color{gray}\scriptsize\faCut};%
+    \tikz\node[xshift=-0.5em] at (1-|last) {\color{gray}\scriptsize\rotatebox{180}{\faCut}};%
+    \tikz\node[xshift=-0.5em] at (last-|last) {\color{gray}\scriptsize\rotatebox{180}{\faCut}};%
+    \tikz\node at (1.5-|2.5) {\bfseries\useKV[ClesFicheMemo]{TexteQuestions} 1 à \num{\CountcolUn}};%
+    \tikz\node at (1.5-|3.5) {\bfseries\useKV[ClesFicheMemo]{TexteQuestions} \num{\fpeval{\CountcolUn+1}} à \num{\fpeval{\CountcolUn+\CountcolDeux}}};%
+  \end{NiceTabular}%
+  \renewcommand{\arraystretch}{1}%
+  \setsepchar{,}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFicheMemo.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFonctionAffine.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCFonctionAffine.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCFonctionAffine.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,360 @@
+%%%
+% Fonction Affine
+%%%
+\setKVdefault[ClesAffine]{Nom=f,Variable=x,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false}%ACoefficient=false%: inutile ?
+
+\newcommand\FonctionAffine[5][]{%
+  % #1 nombre ou abscisse premier point
+  % #2 a ou ordonn\'ee premier point
+  % #3 b ou abscisse deuxi\`eme point
+  % #4 {} ou ordonn\'ee deuxi\`eme point
+  \useKVdefault[ClesAffine]%A supprimer car appel r\'ecursif avec Redaction
+  \setKV[ClesAffine]{#1}%
+  \ifboolKV[ClesAffine]{Image}{%
+    \ifboolKV[ClesAffine]{Ligne}{%
+      \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\xintifboolexpr{#4==0}{}{=\num{\fpeval{#2*#3+#4}}}}%
+    }{%
+      \ifboolKV[ClesAffine]{ProgCalcul}{%
+        \begin{align*}
+          \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}\\
+          \useKV[ClesAffine]{Nom}&:\num{#2}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{\fpeval{#3*#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{\fpeval{#3*#2+#4}}}
+        \end{align*}    
+      }{%
+        \begin{align*}
+          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\\
+          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}%\\
+          \xintifboolexpr{#4==0}{}{\\
+          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2+#4}}%\\
+          }
+        \end{align*}
+      }%
+    }%
+  }{\ifboolKV[ClesAffine]{Antecedent}{%
+      \ifboolKV[ClesAffine]{ProgCalcul}{%
+        La fonction affine $\useKV[ClesAffine]{Nom}$ est d\'efinie par :
+        \begin{align*}
+          \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
+        \end{align*}
+        Nous cherchons le nombre $\useKV[ClesAffine]{Variable}$ tel que son image par la fonction $\useKV[ClesAffine]{Nom}$ soit $\num{#2}$. Donc on obtient :
+        \begin{align*}
+          \useKV[ClesAffine]{Nom}&:\frac{\num{\fpeval{#2-#4}}}{\num{#3}}\stackrel{\div\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longleftarrow}\num{\fpeval{#2-#4}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{-\num{#4}}{\longleftarrow}}{\stackrel{+\num{\fpeval{0-#4}}}{\longleftarrow}}\num{#2}}
+        \end{align*}    
+      }{%
+        On cherche l'ant\'ec\'edent de $\num{#2}$ par la fonction
+        $\useKV[ClesAffine]{Nom}$, c'est-\`a-dire le nombre
+        $\useKV[ClesAffine]{Variable}$ tel que
+        $\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or,
+        la fonction $\useKV[ClesAffine]{Nom}$ est d\'efinie par : \[%
+          \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3==0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3==0}{\num{#4}}{\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}}
+        \]
+        Par cons\'equent, on a :
+        \begin{align*}
+            \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}&=\num{#2}\\
+          \xintifboolexpr{#4==0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}%\\
+          }{\num{#3}\useKV[ClesAffine]{Variable}&=\num{\fpeval{#2-#4}}\\
+          \useKV[ClesAffine]{Variable}&=\frac{\num{\fpeval{#2-#4}}}{\num{#3}}%\\
+          }
+        \end{align*}
+      }%
+    }{%
+      \ifboolKV[ClesAffine]{Retrouve}{%
+        On sait que $\useKV[ClesAffine]{Nom}$ est une fonction affine. Donc elle s'\'ecrit sous la forme : \[\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=a\useKV[ClesAffine]{Variable}+b\]
+        Or, $\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}$ et $\useKV[ClesAffine]{Nom}(\num{#4})=\num{#5}$. Par cons\'equent, d'apr\`es la propri\'et\'e des accroissements :
+        \begin{align*}
+          a&=\frac{\useKV[ClesAffine]{Nom}(\num{#2})-\useKV[ClesAffine]{Nom}(\num{#4})}{\num{#2}-\xintifboolexpr{#4<0}{(\num{#4})}{\num{#4}}}\\
+          a&=\frac{\num{#3}-\xintifboolexpr{#5<0}{(\num{#5})}{\num{#5}}}{\num{\fpeval{#2-#4}}}\\
+          a&=\frac{\num{\fpeval{#3-#5}}}{\num{\fpeval{#2-#4}}}%\\
+          \SSimpliTest{\fpeval{#3-#5}}{\fpeval{#2-#4}}\ifthenelse{\boolean{Simplification}}{\\a&=\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}}{}%
+        \end{align*}
+        La fonction $\useKV[ClesAffine]{Nom}$ s'\'ecrit alors sous la forme $\displaystyle\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}+b$.
+        \\De plus, comme $\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}$, alors :
+        \begin{align*}
+          \SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}+b&=\num{#3}\\
+          \SSimplifie{\fpeval{(#3-#5)*#2}}{\fpeval{#2-#4}}+b&=\num{#3}\\
+          b&=\num{\fpeval{#3-(#3-#5)*#2/(#2-#4)}}
+        \end{align*}
+        \xdef\OrdOrigine{\fpeval{#3-(#3-#5)*#2/(#2-#4)}}
+        La fonction affine $\useKV[ClesAffine]{Nom}$ cherch\'ee est :
+        \[\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}\xintifboolexpr{\OrdOrigine==0}{}{\xintifboolexpr{\OrdOrigine>0}{+\num{\OrdOrigine}}{-\num{\fpeval{0-\OrdOrigine}}}}\]
+      }{%
+        %
+      }%
+    }%
+  }%
+  \ifboolKV[ClesAffine]{Graphique}{%
+    \ifboolKV[ClesAffine]{VoirCoef}{%
+      \MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{\useKV[ClesAffine]{ACoef}}%
+    }{%
+      \MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{""}}{}%
+  }{}%
+  \ifboolKV[ClesAffine]{Redaction}{%
+    \xintifboolexpr{#2==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$
+      est une fonction constante, alors sa repr\'esentation graphique est une droite parall\`ele \`a l'axe des abscisses passant par le point de coordonn\'ees $(0;\num{#3})$.}%
+    {\xintifboolexpr{#3==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction lin\'eaire, alors sa repr\'esentation graphique est une droite passant par l'origine du rep\`ere.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
+      }{%
+        Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa repr\'esentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomVariable{\useKV[ClesAffine]{Variable}}\xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis \setKV[ClesAffine]{Variable=\NomVariable}$\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonn\'ees $(\num{#5};\num{\fpeval{#2*#5+#3}})$.%        
+      }%
+    }%
+  }%
+  {}%
+  \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2==0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
+  \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2==0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
+}%
+
+\def\MPFonctionAffine#1#2#3#4#5#6#7{%
+  % #1 Unitex #2 Unitey
+    % #2 a pour f1 - #4 b pour f1
+    % #5 abscisse du premier point
+    % #6 abscisse du deuxi\`eme point
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    XMin=-2;
+    XMax=2;
+    if #5<XMin:
+    XMin:=#5;
+    fi;
+    if #6<XMin:
+    XMin:=#6;
+    fi;
+    if #5>XMax:
+    XMax:=#5;
+    fi;
+    if #6>XMax:
+    XMax:=#6;
+    fi;
+    YMax=2;
+    YMin=-2;
+    if (#5*#3+(#4))>YMax:
+    YMax:=(#5*#3+(#4));
+    fi;
+    if (#6*#3+(#4))>YMax:
+    YMax:=(#6*#3+(#4));
+    fi;
+    if (#5*#3+(#4))<YMin:
+    YMin:=(#5*#3+(#4));
+    fi;
+    if (#6*#3+(#4))<YMin:
+    YMin:=(#6*#3+(#4));
+    fi;
+    unitex:=#1*cm;
+    unitey:=#2*cm;
+    XMax:=XMax+2;
+    XMin:=XMin-2;
+    YMax:=YMax+2;
+    YMin:=YMin-2;
+    %On trace la grille
+    drawoptions(withcolor 0.95white);
+    for k=0 upto (XMax-XMin):
+    draw ((XMin+k)*unitex,YMin*unitey)--((XMin+k)*unitex,YMax*unitey);
+    endfor;
+    for k=0 upto (YMax-YMin):
+    draw (XMin*unitex,(YMin+k)*unitey)--(XMax*unitex,(YMin+k)*unitey);
+    endfor;
+    drawoptions();
+    %On trace les axes
+    drawarrow (XMin*unitex,0)--(XMax*unitex,0);
+    drawarrow (0,YMin*unitey)--(0,YMax*unitey);
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,(unitex,0));
+    dotlabel.lft(btex 1 etex,(0,unitey));
+    % On trace la droite
+    pair A[];
+    A1=(#5*unitex,(#5*#3+(#4))*unitey);
+    A2=(#6*unitex,(#6*#3+(#4))*unitey);
+    draw 2[A1,A2]--2[A2,A1];
+    clip currentpicture to ((XMin*unitex,YMin*unitey)--(XMax*unitex,YMin*unitey)--(XMax*unitex,YMax*unitey)--(XMin*unitex,YMax*unitey)--cycle);
+    %On labellise les points
+    fill (fullcircle scaled 1mm) shifted A1;
+    fill (fullcircle scaled 1mm) shifted A2;
+    draw (xpart(A1),0)--A1--(0,ypart(A1)) dashed evenly;
+    draw (xpart(A2),0)--A2--(0,ypart(A2)) dashed evenly;
+    if (#5*#3+(#4))=0:
+    else:
+    if (#5*#3+(#4))<0:
+    label.top(TEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+    else:
+    label.bot(TEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+    fi;
+    fi;
+    if (#6*#3+(#4))=0:
+    else:
+    if (#6*#3+(#4))<0:
+    label.top(TEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+    else:
+    label.bot(TEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+    fi;
+    fi;
+    if #3=0:
+    label.urt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    else:
+    if #3>0:
+    if (#5*#3+(#4))=0:
+    else:
+    if (#5*#3+(#4))<0:
+    label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    else:
+    label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    fi;
+    fi;
+    if (#6*#3+(#4))=0:
+    else:
+    if (#6*#3+(#4))<0:
+    label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    else:
+    label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    fi;
+    fi;
+    else:
+    if (#5*#3+(#4))=0:
+    else:
+    if (#5*#3+(#4))<0:
+    label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    else:
+    label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    fi;
+    fi;
+    if (#6*#3+(#4))=0:
+    else:
+    if (#6*#3+(#4))<0:
+    label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    else:
+    label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    fi;
+    fi;
+    fi;
+    fi;
+    % On affiche ou pas "la marche" du coef directeur
+    for p_=#7:
+    if numeric p_:
+    draw ((#7*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,((#7+1)*#3+(#4))*unitey)) withcolor red;
+    fi;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    % On d\'efinit les constantes
+    XMin=-2;
+    XMax=2;
+    if #5<XMin:
+    XMin:=#5;
+    fi;
+    if #6<XMin:
+    XMin:=#6;
+    fi;
+    if #5>XMax:
+    XMax:=#5;
+    fi;
+    if #6>XMax:
+    XMax:=#6;
+    fi;
+    YMax=2;
+    YMin=-2;
+    if (#5*#3+(#4))>YMax:
+    YMax:=(#5*#3+(#4));
+    fi;
+    if (#6*#3+(#4))>YMax:
+    YMax:=(#6*#3+(#4));
+    fi;
+    if (#5*#3+(#4))<YMin:
+    YMin:=(#5*#3+(#4));
+    fi;
+    if (#6*#3+(#4))<YMin:
+    YMin:=(#6*#3+(#4));
+    fi;
+    unitex:=#1*cm;
+    unitey:=#2*cm;
+    XMax:=XMax+2;
+    XMin:=XMin-2;
+    YMax:=YMax+2;
+    YMin:=YMin-2;
+    %On trace la grille
+    drawoptions(withcolor 0.95white);
+    for k=0 upto (XMax-XMin):
+    draw ((XMin+k)*unitex,YMin*unitey)--((XMin+k)*unitex,YMax*unitey);
+    endfor;
+    for k=0 upto (YMax-YMin):
+    draw (XMin*unitex,(YMin+k)*unitey)--(XMax*unitex,(YMin+k)*unitey);
+    endfor;
+    drawoptions();
+    %On trace les axes
+    drawarrow (XMin*unitex,0)--(XMax*unitex,0);
+    drawarrow (0,YMin*unitey)--(0,YMax*unitey);
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,(unitex,0));
+    dotlabel.lft(btex 1 etex,(0,unitey));
+    % On trace la droite
+    pair A[];
+    A1=(#5*unitex,(#5*#3+(#4))*unitey);
+    A2=(#6*unitex,(#6*#3+(#4))*unitey);
+    draw 2[A1,A2]--2[A2,A1];
+    clip currentpicture to ((XMin*unitex,YMin*unitey)--(XMax*unitex,YMin*unitey)--(XMax*unitex,YMax*unitey)--(XMin*unitex,YMax*unitey)--cycle);
+    %On labellise les points
+    fill (fullcircle scaled 1mm) shifted A1;
+    fill (fullcircle scaled 1mm) shifted A2;
+    draw (xpart(A1),0)--A1--(0,ypart(A1)) dashed evenly;
+    draw (xpart(A2),0)--A2--(0,ypart(A2)) dashed evenly;
+    if (#5*#3+(#4))=0:
+    else:
+    if (#5*#3+(#4))<0:
+    label.top(LATEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+    else:
+    label.bot(LATEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+    fi;
+    fi;
+    if (#6*#3+(#4))=0:
+    else:
+    if (#6*#3+(#4))<0:
+    label.top(LATEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+    else:
+    label.bot(LATEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+    fi;
+    fi;
+    if #3=0:
+    label.urt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    else:
+    if #3>0:
+    if (#5*#3+(#4))=0:
+    else:
+    if (#5*#3+(#4))<0:
+    label.rt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    else:
+    label.lft(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    fi;
+    fi;
+    if (#6*#3+(#4))=0:
+    else:
+    if (#6*#3+(#4))<0:
+    label.rt(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    else:
+    label.lft(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    fi;
+    fi;
+    else:
+    if (#5*#3+(#4))=0:
+    else:
+    if (#5*#3+(#4))<0:
+    label.lft(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    else:
+    label.rt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+    fi;
+    fi;
+    if (#6*#3+(#4))=0:
+    else:
+    if (#6*#3+(#4))<0:
+    label.lft(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    else:
+    label.rt(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+    fi;
+    fi;
+    fi;
+    fi;
+    % On affiche ou pas "la marche" du coef directeur
+    for p_=#7:
+    if numeric p_:
+    draw ((#7*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,((#7+1)*#3+(#4))*unitey)) withcolor red;
+    fi;
+    endfor;
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFonctionAffine.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFrise.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCFrise.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCFrise.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,233 @@
+%%%
+% Frise temporelle
+%%%
+\setKVdefault[ClesFrise]{Longueur=8cm,Fleches=false,Ecart=5mm,Sup=false}%
+
+\newtoks\toklistefrise%
+\def\UpdatetoksFrise#1/#2/#3\nil{\addtotok\toklistefrise{"#1","#2","#3",}}%
+
+\newcommand\Frise[2][]{%
+  \useKVdefault[ClesFrise]%
+  \setKV[ClesFrise]{#1}%
+  \setsepchar[*]{,*/}\ignoreemptyitems%
+  \readlist*\ListeTempo{#2}%
+  \toklistefrise{}%
+  \foreachitem\compteur\in\ListeTempo{\expandafter\UpdatetoksFrise\compteur\nil}
+  \MPDessineFrise{\the\toklistefrise}%
+}
+
+\newcommand\MPDessineFrise[1]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    Longueur:=\useKV[ClesFrise]{Longueur};
+    Ecart:=\useKV[ClesFrise]{Ecart};
+    boolean Fleches;
+    Fleches=\useKV[ClesFrise]{Fleches};
+    boolean Sup;
+    Sup=\useKV[ClesFrise]{Sup};
+    pair A[],B;
+    A0=(0,0);
+    B-A0=(Longueur,0);
+    n=0;
+    for p_=#1:
+    n:=n+1;
+    endfor;
+    for k=1 upto ((n div 3)-2):
+    A[k]=(k/((n div 3)-1))[A0,B];
+    endfor;
+    A[(n div 3)-1]=B;
+    if Sup:
+      for k=0 upto ((n div 3)-1):
+      trace (u*(0,-0.1)--u*(0,0.1)) shifted A[k];
+      endfor;
+      % on définit les points milieu des fleches
+      path Fleche[];
+      pair C[];
+      for k=0 upto ((n div 3)-3):
+      Fleche[k]=(A[k]{dir-30}..{dir30}A[k+1]) shifted((0,-Ecart));
+      C[k]=point (0.5*length Fleche[k]) of Fleche[k];
+      endfor;
+      Fleche[(n div 3)-2]=%(A[(n div 3)-3]{dir-30}..{dir30}A[(n div 3)-1]) shifted((0,-Ecart));
+      chemin(A[(n div 3)-3]+(0,-Ecart),A[(n div 3)-3]+(0,-4*Ecart),A[(n div 3)-1]+(0,-4*Ecart),A[(n div 3)-1]+(0,-Ecart));
+      C[(n div 3)-1]=point (0.5*length Fleche[(n div 3)-2]) of Fleche[(n div 3)-2];
+      Fleche[(n div 3)-1]=(A[(n div 3)-1]{dir-150}..{dir150}A[(n div 3)-2]) shifted((0,-Ecart));
+      C[(n div 3)-2]=point (0.5*length Fleche[(n div 3)-1]) of Fleche[(n div 3)-1];
+      % 
+      maxx:=n;
+      trace segment(A0,A[(n div 3)-2]);
+      trace segment(A[(n div 3)-2],A[(n div 3)-1]) dashed evenly;
+      n:=0;
+      labeloffset:=labeloffset*2;
+      for p_=#1:
+      n:=n+1;
+      if n<maxx+1:
+      if (n mod 3)=1:
+      label.top(TEX(""&p_&""),A[n div 3]);
+      elseif (n mod 3)=2:
+      label.top(TEX(""&p_&""),C[n div 3]);%
+      elseif (n mod 3)=0:
+      label.bot(TEX(""&p_&""),C[(n div 3)-1]);
+      fi;
+      fi;
+      endfor;
+      drawoptions();
+      labeloffset:=labeloffset/2;
+      if Fleches:
+      for k=0 upto ((n div 3)-4):
+      drawarrow Fleche[k];
+      endfor;
+      drawarrow Fleche[(n div 3)-1];
+      drawarrow Fleche[(n div 3)-2];
+      drawarrow (A[(n div 3)-1]{dir-150}..{dir150}A[(n div 3)-2]) shifted((0,-Ecart));
+      for k=0 upto ((n div 3)-2):
+      draw segment(A[k],A[k]+(0,-Ecart)) dashed evenly;
+      endfor;
+      draw segment(A[(n div 3)-1],A[(n div 3)-1]+(0,-Ecart)) dashed evenly;
+      fi;
+    %fin Sup
+    else:
+      for k=0 upto ((n div 3)-1):
+      trace (u*(0,-0.1)--u*(0,0.1)) shifted A[k];
+      endfor;
+      % on définit les points milieu des fleches
+      path Fleche[];
+      pair C[];
+      for k=0 upto ((n div 3)-2):
+      Fleche[k]=(A[k]{dir-30}..{dir30}A[k+1]) shifted((0,-Ecart));
+      C[k]=point (0.5*length Fleche[k]) of Fleche[k];
+      endfor;
+      maxx:=n;
+      trace segment(A0,A[(n div 3)-1]);
+      n:=0;
+      labeloffset:=labeloffset*2;
+      for p_=#1:
+      n:=n+1;
+      if n<maxx:
+      if (n mod 3)=1:
+      label.top(TEX(""&p_&""),A[n div 3]);
+      elseif (n mod 3)=2:
+      if (n div 3)<((maxx div 3)-1):label.top(TEX(""&p_&""),C[n div 3]);fi;
+      elseif (n mod 3)=0:
+      label.bot(TEX(""&p_&""),C[(n div 3)-1]);
+      fi;
+      fi;
+      endfor;
+      labeloffset:=labeloffset/2;
+      if Fleches:
+      for k=0 upto ((n div 3)-2):
+      draw segment(A[k],A[k]+(0,-Ecart)) dashed evenly;
+      drawarrow Fleche[k];
+      endfor;
+      draw segment(A[(n div 3)-1],A[(n div 3)-1]+(0,-Ecart)) dashed evenly;
+      fi;
+    fi;
+  \end{mplibcode}
+  \else
+    \begin{mpost}[mpsettings={%
+    Longueur:=\useKV[ClesFrise]{Longueur};
+    Ecart:=\useKV[ClesFrise]{Ecart};
+    boolean Fleches;
+    Fleches=\useKV[ClesFrise]{Fleches};
+    boolean Sup;
+    Sup=\useKV[ClesFrise]{Sup};
+    }]
+    pair A[],B;
+    A0=(0,0);
+    B-A0=(Longueur,0);
+    n=0;
+    for p_=#1:
+    n:=n+1;
+    endfor;
+    for k=1 upto ((n div 3)-2):
+    A[k]=(k/((n div 3)-1))[A0,B];
+    endfor;
+    A[(n div 3)-1]=B;
+    if Sup:
+      for k=0 upto ((n div 3)-1):
+      trace (u*(0,-0.1)--u*(0,0.1)) shifted A[k];
+      endfor;
+      % on définit les points milieu des fleches
+      path Fleche[];
+      pair C[];
+      for k=0 upto ((n div 3)-3):
+      Fleche[k]=(A[k]{dir-30}..{dir30}A[k+1]) shifted((0,-Ecart));
+      C[k]=point (0.5*length Fleche[k]) of Fleche[k];
+      endfor;
+      Fleche[(n div 3)-2]=%(A[(n div 3)-3]{dir-30}..{dir30}A[(n div 3)-1]) shifted((0,-Ecart));
+      chemin(A[(n div 3)-3]+(0,-Ecart),A[(n div 3)-3]+(0,-4*Ecart),A[(n div 3)-1]+(0,-4*Ecart),A[(n div 3)-1]+(0,-Ecart));
+      C[(n div 3)-1]=point (0.5*length Fleche[(n div 3)-2]) of Fleche[(n div 3)-2];
+      Fleche[(n div 3)-1]=(A[(n div 3)-1]{dir-150}..{dir150}A[(n div 3)-2]) shifted((0,-Ecart));
+      C[(n div 3)-2]=point (0.5*length Fleche[(n div 3)-1]) of Fleche[(n div 3)-1];
+      % 
+      maxx:=n;
+      trace segment(A0,A[(n div 3)-2]);
+      trace segment(A[(n div 3)-2],A[(n div 3)-1]) dashed evenly;
+      n:=0;
+      labeloffset:=labeloffset*2;
+      for p_=#1:
+      n:=n+1;
+      if n<maxx+1:
+      if (n mod 3)=1:
+      label.top(LATEX(""&p_&""),A[n div 3]);
+      elseif (n mod 3)=2:
+      label.top(LATEX(""&p_&""),C[n div 3]);%
+      elseif (n mod 3)=0:
+      label.bot(LATEX(""&p_&""),C[(n div 3)-1]);
+      fi;
+      fi;
+      endfor;
+      drawoptions();
+      labeloffset:=labeloffset/2;
+      if Fleches:
+      for k=0 upto ((n div 3)-4):
+      drawarrow Fleche[k];
+      endfor;
+      drawarrow Fleche[(n div 3)-1];
+      drawarrow Fleche[(n div 3)-2];
+      drawarrow (A[(n div 3)-1]{dir-150}..{dir150}A[(n div 3)-2]) shifted((0,-Ecart));
+      for k=0 upto ((n div 3)-2):
+      draw segment(A[k],A[k]+(0,-Ecart)) dashed evenly;
+      endfor;
+      draw segment(A[(n div 3)-1],A[(n div 3)-1]+(0,-Ecart)) dashed evenly;
+      fi;
+    %fin Sup
+    else:
+      for k=0 upto ((n div 3)-1):
+      trace (u*(0,-0.1)--u*(0,0.1)) shifted A[k];
+      endfor;
+      % on définit les points milieu des fleches
+      path Fleche[];
+      pair C[];
+      for k=0 upto ((n div 3)-2):
+      Fleche[k]=(A[k]{dir-30}..{dir30}A[k+1]) shifted((0,-Ecart));
+      C[k]=point (0.5*length Fleche[k]) of Fleche[k];
+      endfor;
+      maxx:=n;
+      trace segment(A0,A[(n div 3)-1]);
+      n:=0;
+      labeloffset:=labeloffset*2;
+      for p_=#1:
+      n:=n+1;
+      if n<maxx:
+      if (n mod 3)=1:
+      label.top(LATEX(""&p_&""),A[n div 3]);
+      elseif (n mod 3)=2:
+      if (n div 3)<((maxx div 3)-1):label.top(LATEX(""&p_&""),C[n div 3]);fi;
+      elseif (n mod 3)=0:
+      label.bot(LATEX(""&p_&""),C[(n div 3)-1]);
+      fi;
+      fi;
+      endfor;
+      labeloffset:=labeloffset/2;
+      if Fleches:
+      for k=0 upto ((n div 3)-2):
+      draw segment(A[k],A[k]+(0,-Ecart)) dashed evenly;
+      drawarrow Fleche[k];
+      endfor;
+      draw segment(A[(n div 3)-1],A[(n div 3)-1]+(0,-Ecart)) dashed evenly;
+      fi;
+    fi;
+  \end{mpost}
+  \fi
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFrise.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFutoshiki.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCFutoshiki.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCFutoshiki.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,87 @@
+%%%
+% Futoshiki
+%%%
+\setKVdefault[Futo]{Largeur=15pt,Solution=false,CouleurSolution=Black,CouleurCase=Cornsilk,StyleTexte={}}
+
+\newlength\PfCFutoHeight
+
+\NewDocumentCommand\Futoshiki{o m}{%
+  \useKVdefault[Futo]
+  \setKV[Futo]{#1}%
+  \setlength{\PfCFutoHeight}{\useKV[Futo]{Largeur}+\tabcolsep}%
+  \setsepchar{\\/,}%
+  \readlist\ListeFuto{#2}%
+  \xdef\PfCTailleFuto{\ListeFutolen}%
+  \def\PfCFutoStyleTexte{\useKV[Futo]{StyleTexte}}%
+  \colorlet{PfCFutoCase}{\useKV[Futo]{CouleurCase}}%
+  \begin{NiceTabular}{*{\fpeval{\PfCTailleFuto-1}}{m{\useKV[Futo]{Largeur}}m{5pt}}m{\useKV[Futo]{Largeur}}}%[hvlines]
+    \xintFor* ##1 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
+      \xintFor* ##2 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
+        \rule{0pt}{\PfCFutoHeight}%
+        \StrChar{\ListeFuto[##1,\fpeval{2*##2-1}]}{1}[\PfCCaracFuto]%
+        \IfStrEq{\PfCCaracFuto}{*}{%
+          \StrGobbleLeft{\ListeFuto[##1,\fpeval{2*##2-1}]}{1}[\PfCResteFuto]%
+          \Block[draw]{}{\PfCFutoStyleTexte\PfCResteFuto}%
+        }{%
+          \IfStrEq{\PfCCaracFuto}{!}{%
+            \StrGobbleLeft{\ListeFuto[##1,\fpeval{2*##2-1}]}{1}[\PfCResteFuto]%
+            \Block[draw,fill=PfCFutoCase]{}{\PfCFutoStyleTexte\PfCResteFuto}%
+          }{%
+            \ifboolKV[Futo]{Solution}{\Block[draw]{}{\PfCFutoStyleTexte\color{\useKV[Futo]{CouleurSolution}}\ListeFuto[##1,\fpeval{2*##2-1}]}}{\Block[draw]{}{}}%
+          }%
+        }%
+        \xintifForLast{}{&&}%
+      }\\
+      \rule{0pt}{\fpeval{5pt+\tabcolsep}pt}\Block[]{}{}\\
+    }%
+    \CodeAfter%Pour écrire les symboles
+    \xintFor* ##1 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
+      \xintFor* ##2 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{>}{%
+          \tikz{%
+            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1}-|\fpeval{2*##2});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{<}{%
+          \tikz{%
+            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2})--(\fpeval{2*##1}-|\fpeval{2*##2+0.5});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{v}{%
+          \tikz{%
+            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1.5}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{A}{%
+          \tikz{%
+            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1}-|\fpeval{2*##2});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{>A}{%
+          \tikz{%
+            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1}-|\fpeval{2*##2});
+            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1}-|\fpeval{2*##2});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{>v}{%
+          \tikz{%
+            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1}-|\fpeval{2*##2});
+            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1.5}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{<A}{%
+          \tikz{%
+            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2})--(\fpeval{2*##1}-|\fpeval{2*##2+0.5});
+            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1}-|\fpeval{2*##2});
+          }%
+        }{}%
+        \IfStrEq{\ListeFuto[##1,2*##2]}{<v}{%
+          \tikz{%
+            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2})--(\fpeval{2*##1}-|\fpeval{2*##2+0.5});
+            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1.5}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2});
+          }%
+        }{}%
+      }%
+    }%
+  \end{NiceTabular}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCFutoshiki.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGaram.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCGaram.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCGaram.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,51 @@
+%%%
+% Garam
+%%%
+\setKVdefault[Garam]{Taille=7,Largeur=15pt,Solution=false,CouleurSolution=Black}
+\newlength\PfCGaramHeight
+
+\NewDocumentCommand\Garam{o m}{%
+  \useKVdefault[Garam]
+  \setKV[Garam]{#1}%
+  \setlength{\PfCGaramHeight}{\useKV[Garam]{Largeur}+\tabcolsep}%
+  \reademptyitems%
+  \setsepchar[*]{§*,*/}%
+  \readlist*\PfCListeGaram{#2}%
+  \colorlet{PfCGaramCoulSol}{\useKV[Garam]{CouleurSolution}}%
+  \begin{NiceTabular}{*{\useKV[Garam]{Taille}}{m{\useKV[Garam]{Largeur}}}}
+    \CodeBefore
+    \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Garam]{Taille}}}}\do{%
+      \tikz{\draw[dashed,LightGray] (1-|##1)--(last-|##1);}%
+    }%
+    \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCListeGaramlen-1}}}\do{%
+      \tikz{\draw[dashed,LightGray] (##1-|1)--(##1-|last);}%
+    }%
+    \tikz{\draw (1-|1) rectangle (last-|last);}%
+    \Body
+    \xintFor* ##1 in{\xintSeq{1}{\PfCListeGaramlen}}\do{%
+      \rule{0pt}{\PfCGaramHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Garam]{Taille}}}\do{%
+        \xintifForFirst{}{&}\StrChar{\PfCListeGaram[##1,##2,1]}{1}[\PfCCaracGaram]%
+        \IfStrEq{\PfCCaracGaram}{*}{\Block[draw,fill=black]{1-1}{}}{%
+          \IfStrEq{\PfCCaracGaram}{!}{\Block{}{\ifboolKV[Garam]{Solution}{\StrGobbleLeft{\PfCListeGaram[##1,##2,1]}{1}}{}}}{\Block{}{\color{PfCGaramCoulSol}\PfCListeGaram[##1,##2,1]}}%
+        }%
+      }\\
+    }%
+    \CodeAfter
+    % On place les symboles
+    \xintFor* ##1 in{\xintSeq{1}{\PfCListeGaramlen}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[Garam]{Taille}}}\do{%
+        \StrChar{\PfCListeGaram[##1,##2,1]}{1}[\PfCCaracGaram]%
+        \IfStrEq{\PfCCaracGaram}{*}{}{%
+          \tikz{%
+            \StrSubstitute{\PfCListeGaram[##1,##2,2]}{x}{\times}[\PfCGaramUn]%
+            \StrSubstitute{\PfCGaramUn}{:}{\div}[\PfCGaramUn]%
+            \StrSubstitute{\PfCListeGaram[##1,##2,3]}{x}{\times}[\PfCGaramDeux]%
+            \StrSubstitute{\PfCGaramDeux}{:}{\div}[\PfCGaramDeux]%
+            \xintifForLast{}{\node at (\fpeval{##1+0.5}-|\fpeval{##2+1}) {$\PfCGaramUn$};}
+            \node at (\fpeval{##1+1}-|\fpeval{##2+0.5}) {$\PfCGaramDeux$};
+          }%
+        }%
+      }%
+    }%
+  \end{NiceTabular}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGaram.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,61 @@
+%%%
+% Geometrie
+%%%
+\setKVdefault[Geometrie]{CoinBG={(0,0)},CoinHD={(10u,10u)},TypeTrace="Instruments"}%
+
+\ifluatex
+\NewDocumentEnvironment{Geometrie}{o +b}{%
+  \useKVdefault[Geometrie]%
+  \setKV[Geometrie]{#1}%
+  \mplibforcehmode
+  \begin{mplibcode}
+    % input PfCMPFr;
+    pair Coinbg,Coinhd;
+    Coinbg=\useKV[Geometrie]{CoinBG};
+    Coinhd=\useKV[Geometrie]{CoinHD};
+    if \useKV[Geometrie]{TypeTrace}="Instruments":
+    typetrace:="normal";
+    elseif \useKV[Geometrie]{TypeTrace}="MainLevee":
+    typetrace:="mainlevee";
+    elseif \useKV[Geometrie]{TypeTrace}="Espace":
+    typetrace:="3D";
+    typerepre:="persp";
+    fi;
+    xa=xpart(Coinbg);
+    xb=xpart(Coinhd);
+    ya=ypart(Coinbg);
+    yb=ypart(Coinhd);
+    feuille(xa,ya,xb,yb);
+    _tfig:=if (xb-xa)>(yb-ya): (xb-xa) else: (yb-ya) fi;
+    _tfig:=2*_tfig;
+    #2%
+  \end{mplibcode}
+}{}
+\else
+\NewDocumentEnvironment{Geometrie}{o +b}{%
+  \useKVdefault[Geometrie]%
+  \setKV[Geometrie]{#1}%
+  \begin{mpost}[mpsettings={
+      pair Coinbg,Coinhd;
+      Coinbg=\useKV[Geometrie]{CoinBG};
+      Coinhd=\useKV[Geometrie]{CoinHD};
+      if \useKV[Geometrie]{TypeTrace}="Instruments":
+      typetrace:="normal";
+      elseif \useKV[Geometrie]{TypeTrace}="MainLevee":
+      typetrace:="mainlevee";
+      elseif \useKV[Geometrie]{TypeTrace}="Espace":
+      typetrace:="3D";
+      typerepre:="persp";
+      fi;}
+    ]%
+    xa=xpart(Coinbg);
+    xb=xpart(Coinhd);;
+    ya=ypart(Coinbg);
+    yb=ypart(Coinhd);
+    feuille(xa,ya,xb,yb);
+    _tfig:=if (xb-xa)>(yb-ya): (xb-xa) else: (yb-ya) fi;
+    _tfig:=2*_tfig;
+    #2%
+  \end{mpost}
+}{}
+\fi%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGeometrie.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGrades.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCGrades.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCGrades.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,104 @@
+%%%
+% Grades
+%%%
+\setKVdefault[Grades]{Solution=false,Longueur=9,Largeur=9,Echelle=8mm,Graines=false}
+\defKV[Grades]{Graine=\setKV[Grades]{Graines}}
+
+\NewDocumentCommand\Grades{o}{%
+  \useKVdefault[Grades]%
+  \setKVdefault[Grades]{#1}%
+  \BuildGrades%
+}
+
+\NewDocumentCommand\BuildGrades{}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution;
+    Graines=\useKV[Grades]{Graines};
+    Solution=\useKV[Grades]{Solution};
+    
+    if Graines:
+    randomseed:=\useKV[Grades]{Graine};
+    fi;
+    
+    numeric Longueur,Largeur;
+    Longueur=\useKV[Grades]{Longueur};
+    Largeur=\useKV[Grades]{Largeur};
+    
+    u:=\useKV[Grades]{Echelle};
+    
+    p:=0;
+    pair A[];%centre des carrés.
+    boolean Allume[][];
+    numeric Nombre[][];
+    
+    for k=-1 upto Largeur+1:
+    for l=-1 upto Longueur+1:
+    Allume[k][l]=false;
+    endfor;
+    endfor;
+    
+    for k=0 upto Longueur-1:
+    for l=0 upto Largeur-1:
+    p:=p+1;
+    A[p]=u*(k,-l);
+    trace (unitsquare scaled u) shifted A[p];
+    endfor;
+    endfor;
+
+    for k=0 upto Largeur-1:
+    for l=0 upto Longueur-1:
+    if Allume[k][l]:
+    else:
+    Allume[k][l]:=true;
+    m:=uniformdeviate(1);
+    if m<0.5:
+    % on ne met pas de nombre
+    else:
+    % on met un nombre
+    Nombre[k][l]=floor(1+uniformdeviate(9));
+    Allume[k][l+1]:=true;
+    Allume[k+1][l-1]:=true;
+    Allume[k+1][l]:=true;
+    Allume[k+1][l+1]:=true;
+    if Solution:
+    label(TEX(decimal(Nombre[k][l])),u*(l+0.5,-k+0.5));
+    fi;
+    fi;
+    fi;
+    endfor;
+    endfor;
+
+    % on compte le nombre de chiffres dans les lignes et on les ajoute
+    for k=0 upto Largeur-1:
+    p:=0;
+    Somme:=0;
+    for l=0 upto Longueur-1:
+    if unknown Nombre[k][l]:
+    else:
+    p:=p+1;
+    Somme:=Somme+Nombre[k][l];
+    fi;
+    endfor;
+    label(TEX(decimal(p)),u*(-0.5,-k+0.5));
+    label(TEX(decimal(Somme)),u*(Longueur+0.5,-k+0.5));
+    endfor;
+
+    % on compte le nombre de chiffres dans les colonnes et on les ajoute
+    for k=0 upto Longueur-1:
+    p:=0;
+    Somme:=0;
+    for l=0 upto Largeur-1:
+    if unknown Nombre[l][k]:
+    else:
+    p:=p+1;
+    Somme:=Somme+Nombre[l][k];
+    fi;
+    endfor;
+    label(TEX(decimal(p)),u*(k+0.5,1.5));
+    label(TEX(decimal(Somme)),u*(k+0.5,-Largeur+0.5));
+    endfor;
+  \end{mplibcode}
+ \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCGrades.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCHiddenMessage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCHiddenMessage.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCHiddenMessage.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,52 @@
+%%%
+% Message caché
+%%%
+\setKVdefault[Hidden]{TLargeur=5,THauteur=3,Solution=false,Hauteur=70pt,Largeur=120pt,Jeu=false,Solution}
+\defKV[Hidden]{Plateau=\setKV[Hidden]{Jeu}\setKV[Hidden]{Solution=false}}
+
+\newlength\PfCHiddenHeight%
+\newlength\PfCHiddenWidth%
+
+\NewDocumentCommand\MessageCache{o m m}{%1 options 2 questions/réponses 3 message
+  % on récupère les options
+  \useKVdefault[Hidden]%
+  \setKV[Hidden]{#1}%
+  % on définit les dimensions des cases
+  \setlength{\PfCHiddenHeight}{\useKV[Hidden]{Hauteur}+\tabcolsep}%
+  \setlength{\PfCHiddenWidth}{\useKV[Hidden]{Largeur}}%
+  % On récupère les questions
+  \setsepchar[*]{§*/}%
+  \readlist*\PfCHiddenQuestions{#2}%
+  \setsepchar{,}
+  \ifboolKV[Hidden]{Solution}{%
+    % On donne les questions et la phrase
+    \begin{center}
+      \begin{NiceTabular}{*{\useKV[Hidden]{TLargeur}}{m{\PfCHiddenWidth}}}%[hvlines]
+        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
+          \rule{0pt}{\PfCHiddenHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Hidden]{TLargeur}}}\do{%
+            \Block[draw]{1-1}{\PfCHiddenQuestions[\fpeval{\useKV[Hidden]{THauteur}*(##1-1)+##2},1]}\xintifForLast{}{&}
+          }\\
+        }%
+        \CodeAfter%
+        \StrGobbleLeft{#3}{0}[\PhraseCorrection]%
+        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
+          \xintFor* ##2 in{\xintSeq{1}{\fpeval{\useKV[Hidden]{TLargeur}-1}}}\do{%
+            \StrLeft{\PhraseCorrection}{1}[\LettreAAfficher]\StrGobbleLeft{\PhraseCorrection}{1}[\PhraseCorrection]%
+            \tikz{\node[anchor=south] at (\fpeval{##1+1}-|\fpeval{##2+1}) {\huge\bfseries\LettreAAfficher};}%
+          }%
+        }%
+      \end{NiceTabular}
+    \end{center}
+  }{%
+    % On donne le plateau des solutions
+    \begin{center}
+      \begin{NiceTabular}{*{\useKV[Hidden]{TLargeur}}{m{\PfCHiddenWidth}}}%[hvlines]
+        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
+          \rule{0pt}{\PfCHiddenHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Hidden]{TLargeur}}}\do{%
+            \Block[draw]{1-1}{\PfCHiddenQuestions[\fpeval{\useKV[Hidden]{THauteur}*(##1-1)+##2},2]}\xintifForLast{}{&}
+          }\\
+        }%
+      \end{NiceTabular}
+    \end{center}
+  }
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCHiddenMessage.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakurasu.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakurasu.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakurasu.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,108 @@
+%%%
+% Kakurasu
+%%%
+\setKVdefault[Kakurasu]{Solution=false,Longueur=6,Largeur=6,Echelle=8mm,Graines=false,Trace=false}
+\defKV[Kakurasu]{Graine=\setKV[Kakurasu]{Graines}}
+\defKV[Kakurasu]{Traces=\setKV[Kakurasu]{Trace}}
+
+\NewDocumentCommand\Kakurasu{o}{%
+  \useKVdefault[Kakurasu]%
+  \setKVdefault[Kakurasu]{#1}%
+  \BuildKakurasu%
+}
+
+\NewDocumentCommand\BuildKakurasu{}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Graines,Solution,Trace;
+    Graines=\useKV[Kakurasu]{Graines};
+    Solution=\useKV[Kakurasu]{Solution};
+    Trace=\useKV[Kakurasu]{Trace};
+    
+    if Graines:
+    randomseed:=\useKV[Kakurasu]{Graine};
+    fi;
+    
+    numeric Longueur,Largeur;
+    Longueur=\useKV[Kakurasu]{Longueur};
+    Largeur=\useKV[Kakurasu]{Largeur};
+    
+    u:=\useKV[Kakurasu]{Echelle};
+    
+    pair A[][];%centre des carrés.
+    boolean Allume[][];
+    numeric NombreLigne[][],NombreColonne[][];
+    
+    for k=-1 upto Largeur+1:
+    for l=-1 upto Longueur+1:
+    Allume[k][l]=false;
+    endfor;
+    endfor;
+    
+    for k=0 upto Largeur-1:
+    for l=0 upto Longueur-1:
+    A[k][l]=u*(l,-k);
+    trace (unitsquare scaled u) shifted A[k][l];
+    endfor;
+    endfor;
+
+    for k=0 upto Largeur-1:
+    for l=0 upto Longueur-1:
+    if Allume[k][l]:
+    else:
+    Allume[k][l]:=true;
+    m:=uniformdeviate(1);
+    if m<0.5:
+    % on ne met pas de case noire
+    else:
+    % on met une case noire
+    NombreLigne[k][l]=l+1;
+    NombreColonne[k][l]=k+1;
+    if Solution:
+    fill (unitsquare scaled 0.9u) shifted (A[k][l]+0.05*u*(1,1));
+    fi;
+    fi;
+    fi;
+    endfor;
+    endfor;
+    
+    % on compte le nombre de chiffres dans les lignes et on les ajoute
+    for k=0 upto Largeur-1:
+    Somme:=0;
+    for l=0 upto Longueur-1:
+    if unknown NombreLigne[k][l]:
+    else:
+    Somme:=Somme+NombreLigne[k][l];
+    fi;
+    endfor;
+    label(TEX(decimal(Somme)),u*(-0.5,-k+0.5));
+    endfor;
+
+    % on compte le nombre de chiffres dans les colonnes et on les ajoute
+    for k=0 upto Longueur-1:
+    Somme:=0;
+    for l=0 upto Largeur-1:
+    if unknown NombreColonne[l][k]:
+    else:
+    Somme:=Somme+NombreColonne[l][k];
+    fi;
+    endfor;
+    label(TEX(decimal(Somme)),u*(k+0.5,1.5));
+    endfor;
+
+    % On affiche les valeurs des cases noires.
+    drawoptions(withcolor 0.5white);
+    for k=0 upto Longueur-1:
+    label(TEX("\footnotesize"&decimal(k+1)),u*(k+0.5,-Largeur+0.5));
+    endfor;
+    for k=0 upto Largeur-1:
+    label(TEX("\footnotesize"&decimal(k+1)),u*(Longueur+0.5,-k+0.5));
+    endfor;
+    drawoptions();
+    if Trace:
+    \useKV[Kakurasu]{Traces};
+    fi;
+  \end{mplibcode}
+ \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakurasu.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,51 @@
+%%%
+% Kakuro
+%%%
+\setKVdefault[Kakuro]{CouleurCase=LightGray,TLargeur=5,THauteur=5,Solution=false,Largeur=2em,Aide=false,CouleurSolution=Black,Tailles=false}%,Taille=5
+\defKV[Kakuro]{ListeNombres=\setKV[Kakuro]{Aide}}%
+\defKV[Kakuro]{Taille=\setKV[Kakuro]{Tailles}}%
+
+\newlength\PfCKakuro%
+
+\NewDocumentCommand\Kakuro{o m}{%
+  \useKVdefault[Kakuro]%
+  \setKV[Kakuro]{#1}%
+  \ifboolKV[Kakuro]{Tailles}{%
+    \setKV[Kakuro]{THauteur=\useKV[Kakuro]{Taille}}%
+    \setKV[Kakuro]{TLargeur=\useKV[Kakuro]{Taille}}%
+  }{}%
+  \setlength{\PfCKakuro}{\useKV[Kakuro]{Largeur}+\tabcolsep}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeCasesKK{#2}%
+  \setsepchar{,}%
+  \xdef\ListeAvantNombres{\useKV[Kakuro]{ListeNombres}}%
+  \readlist*\ListeKakuroNombres{\ListeAvantNombres}%
+  \savecomparemode%
+  \comparestrict%
+  \begin{NiceTabular}{*{\useKV[Kakuro]{TLargeur}}{m{\useKV[Kakuro]{Largeur}}}}[hvlines]
+    \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Kakuro]{THauteur}-1}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[Kakuro]{TLargeur}}}\do{%
+        \rule{0pt}{\PfCKakuro}%
+        \StrCompare{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}{*}[\PfCTestBlack]
+        \xintifboolexpr{\PfCTestBlack==0}{%
+          \Block[fill=black]{1-1}{}%
+        }{%
+          \xintifboolexpr{\listlen\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2}]==2}{
+            \Block[fill=\useKV[Kakuro]{CouleurCase}]{1-1}{\diagbox{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},2]}}%
+          }{%
+            \Block{1-1}{\ifboolKV[Kakuro]{Solution}{\Large\color{\useKV[Kakuro]{CouleurSolution}}\num{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}}{%
+                \ifboolKV[Kakuro]{Aide}{%
+                  \xintFor* ##3 in{\xintSeq{1}{\ListeKakuroNombreslen}}\do{%
+                    \Block{1-1}{\xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]==\ListeKakuroNombres[##3]}{\Large\color{\useKV[Kakuro]{CouleurSolution}}\num{\ListeCasesKK[\fpeval{\useKV[Kakuro]{TLargeur}*##1+##2},1]}}{}}%
+                  }%
+                }{}%
+              }%
+            }%
+          }%
+        }%
+        \xintifForLast{\\}{&}%
+      }%
+    }%
+  \end{NiceTabular}
+  \restorecomparemode%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKakuro.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,86 @@
+%%%
+% KenKen
+%%%
+\setKVdefault[ClesKK]{Solution=false,Taille=3,Largeur=2em,Aide=false}%
+\defKV[ClesKK]{Nombre=\setKV[ClesKK]{Aide}}%
+
+\newlength\PfCKenKen
+
+\NewDocumentCommand\KenKen{o m}{%
+  \useKVdefault[ClesKK]%
+  \setKV[ClesKK]{#1}%
+  \setlength{\PfCKenKen}{\useKV[ClesKK]{Largeur}+\tabcolsep}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeCasesKK{#2}%
+  \savecomparemode%
+  \comparestrict%
+  \begin{NiceTabular}{*{\useKV[ClesKK]{Taille}}{m{\useKV[ClesKK]{Largeur}}}}%
+    \CodeBefore
+    \xintFor* ##1 in {\xintSeq{2}{\fpeval{\useKV[ClesKK]{Taille}}}}\do{%
+      \tikz\draw[gray] (##1-|1) -- (##1-|last);%
+      \tikz\draw[gray] (1-|##1) -- (last-|##1);%
+    }%
+    \Body
+    \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[ClesKK]{Taille}-1}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[ClesKK]{Taille}}}\do{%
+        \rule{0pt}{\PfCKenKen}%
+        \StrCompare{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},1]}{b}[\PfCTestb]%\PfCTestb
+        \StrCompare{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},1]}{l}[\PfCTestl]%\PfCTestr
+        \StrCompare{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},1]}{lb}[\PfCTestlb]%\PfCTestbr
+        \xintifboolexpr{\PfCTestb==0}{%
+          \Block[borders={bottom},line-width=2pt]{1-1}{%
+            \ifboolKV[ClesKK]{Solution}{%
+              \Large\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]%
+            }{%
+              \ifboolKV[ClesKK]{Aide}{%
+                \xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]==\useKV[ClesKK]{Nombre}}{%
+                  \cellcolor{LightGray}\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]%
+                }{}%
+              }{}%
+            }%
+          }%
+        }{%
+          \xintifboolexpr{\PfCTestl==0}{%
+            \Block[borders={left},line-width=2pt]{1-1}{\ifboolKV[ClesKK]{Solution}{\Large\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]}{%
+                \ifboolKV[ClesKK]{Aide}{%
+                  \xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]==\useKV[ClesKK]{Nombre}}{%
+                    \cellcolor{LightGray}\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]%
+                  }{}%
+                }{}%
+              }%
+            }%
+          }{%
+            \xintifboolexpr{\PfCTestlb==0}{%
+              \Block[borders={bottom,left},line-width=2pt]{1-1}{\ifboolKV[ClesKK]{Solution}{\Large\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]}{%
+                  \ifboolKV[ClesKK]{Aide}{%
+                    \xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]==\useKV[ClesKK]{Nombre}}{%
+                      \cellcolor{LightGray}\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]%
+                    }{}%
+                  }{}%
+                }%
+              }%
+            }{%
+              \Block{1-1}{\ifboolKV[ClesKK]{Solution}{\Large\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]}{%
+                  \ifboolKV[ClesKK]{Aide}{%
+                    \xintifboolexpr{\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]==\useKV[ClesKK]{Nombre}}{%
+                      \cellcolor{LightGray}\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*##1+##2},3]%
+                    }{}%
+                  }{}%
+                }%
+              }%
+            }%
+          }%
+        }%
+        \xintifForLast{\\}{&}%
+      }%
+    }%
+    \CodeAfter%
+    \tikz\draw[line width=2pt] (1-|1) rectangle (last-|last);%
+    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesKK]{Taille}}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[ClesKK]{Taille}}}\do{%
+        \tikz\node[anchor=west,inner sep=0pt,xshift=1mm,yshift=-0.2\PfCKenKen] at (##1 -|##2) {\scriptsize$\ListeCasesKK[\fpeval{\useKV[ClesKK]{Taille}*(##1-1)+##2},2]$};%
+      }%
+    }%
+  \end{NiceTabular}
+  \restorecomparemode%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCKenKen.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheJeu.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheJeu.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheJeu.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,143 @@
+%%%
+% Labyrinthe
+%%%
+\setKVdefault[Labyrinthe]{Lignes=6,Colonnes=3,Longueur=4,Hauteur=2,Passages=false,EcartH=1,EcartV=1,CouleurF=gray!50,Texte=\color{black},SensImpose=false,Slop}
+
+\tikzset{FDirect/.style={-stealth}}
+\tikzset{FIndirect/.style={stealth-}}
+\tikzset{FBidirect/.style={stealth-stealth}}
+
+\newlength{\LabyLongCM}
+
+\newcommand\Labyrinthe[3][]{%
+  \useKVdefault[Labyrinthe]%
+  \setKV[Labyrinthe]{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeLaby{#2}%
+  \xdef\LabySlop{\ifboolKV[Labyrinthe]{Slop}{sloped}{}}%
+  \ifboolKV[Labyrinthe]{Passages}{%
+    \readlist*\ListeLabySol{#3}%
+  }{}%
+  \xdef\LabyLong{\useKV[Labyrinthe]{Longueur}}%
+%  \setlength{\LabyLongCM}{\fpeval{\LabyLong*28.3465}pt}%
+  \xdef\LabyHaut{\useKV[Labyrinthe]{Hauteur}}%
+  \ifboolKV[Labyrinthe]{SensImpose}{%
+    \xdef\TotalLaby{\fpeval{4*(\useKV[Labyrinthe]{Colonnes}-1)+1}}%
+  }{%
+    \xdef\TotalLaby{\fpeval{3*\useKV[Labyrinthe]{Colonnes}-2}}%
+  }%
+  \xdef\CouleurF{\useKV[Labyrinthe]{CouleurF}}%
+  \xdef\MotifTexte{\noexpand\useKV[Labyrinthe]{Texte}}%
+  \xintifboolexpr{\ListeLabylen==\fpeval{\useKV[Labyrinthe]{Lignes}*\useKV[Labyrinthe]{Colonnes}}}{%
+    \begin{tikzpicture}[remember picture]%
+%      % on dessine les cadres
+      \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
+        \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
+          \xdef\ColorFill{\ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},2]}%
+          \node[fill=\ColorFill,draw,minimum height=\LabyHaut*1cm,minimum width=\LabyLong*1cm,name=A-\compteurh-\compteurv] at
+          (\fpeval{\LabyLong+\useKV[Labyrinthe]{EcartH}}*\compteurh,-\fpeval{\LabyHaut+\useKV[Labyrinthe]{EcartV}}*\compteurv) {%
+%            \begin{minipage}{\LabyLongCM}
+              \ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},1]%
+%            \end{minipage}
+          };%
+        }%
+      }%
+      % fin des cadres
+      % on dessine les fl\`eches
+      \ifboolKV[Labyrinthe]{SensImpose}{%
+        %verticales
+        \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
+          \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},1]}%
+              \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
+                \draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,midway,inner sep=2pt]{\MotifTexte\NomNode}(A-\compteurh-\fpeval{\compteurv+1});}{}%
+            }{%
+              \draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- (A-\compteurh-\fpeval{\compteurv+1});%
+            }%
+          }%
+        }%
+%        % horizontales
+        \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
+          \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},1]}%
+              \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
+              \draw[\CouleurF,line width=3pt,\NomStyle](A-\compteurh-\compteurv) -- node[fill=white,midway,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv);}{}
+            }{%
+              \draw[\CouleurF,line width=3pt,FBidirect](A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\compteurv);%
+            }%
+          }%
+        }%
+%        % diagonales "inverses"
+        \foreach \compteurv in {2,...,\fpeval{\useKV[Labyrinthe]{Lignes}}}{%
+          \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},1]}%
+              \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
+                \draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1});
+              }{}
+            }{%
+              \draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1});
+            }%
+          }%
+        }%
+%%        % diagonales directes
+        \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
+          \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},1]}%
+              \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]>0}{%
+                \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}
+                \draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
+              }{}%
+            }{%
+              \draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
+            }%          
+          }%
+        }%
+      }{%
+        \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
+          \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)}]}%
+              \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\compteurh-\fpeval{\compteurv+1});%
+            }{%
+              \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\compteurh-\fpeval{\compteurv+1});%
+            }%
+          }%
+        }%
+        \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
+          \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\compteurh}]}%
+              \draw[\CouleurF,line width=3pt,stealth-stealth]
+              (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv);
+            }{%
+              \draw[\CouleurF,line width=3pt,stealth-stealth]
+              (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\compteurv);
+            }%
+          }
+        }
+        \foreach \compteurv in {2,...,\fpeval{\useKV[Labyrinthe]{Lignes}}}{%
+          \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+            \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1});
+          }
+        }
+        \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
+          \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+            \ifboolKV[Labyrinthe]{Passages}{%
+              \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)+1}]}%
+              \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
+            }{%
+              \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
+            }%          
+          }%
+        }%
+%      % fin des fl\`eches
+    }
+  \end{tikzpicture}
+   }{
+  \textbf{! Le nombre d'informations n'est pas compatible avec les
+    d\'efinitions de {\ttfamily Colonnes} et {\ttfamily Lignes} !}}%
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheJeu.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheNombre.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheNombre.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheNombre.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,511 @@
+%%%
+% Labyrinthe Nombre
+%%%
+\setKVdefault[ClesLabyNb]{Multiple=5,XDepart=0,YDepart=0,Longueur=7,Largeur=4,XArrivee=6,YArrivee=3,Solution=false,Echelle=1,Angle=0,Couleur=red,Murs=false,Nom=Ex1,CouleurChemin=LightSteelBlue,DoubleOperation=false,Chemin=false,EntreeSortie=false,Entree="Nord",Sortie="Sud",SortieUnique=true}
+
+\newcommand\LabyNombre[1][]{%
+  \useKVdefault[ClesLabyNb]%
+  \setKV[ClesLabyNb]{#1}%
+  \ifboolKV[ClesLabyNb]{Solution}{%
+    \TraceLabyFactoSolution{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+  }{%
+    \TraceLabyFacto{\useKV[ClesLabyNb]{Multiple}}{\useKV[ClesLabyNb]{Longueur}}{\useKV[ClesLabyNb]{Largeur}}{(\useKV[ClesLabyNb]{YDepart},\useKV[ClesLabyNb]{XDepart})}{(\useKV[ClesLabyNb]{YArrivee},\useKV[ClesLabyNb]{XArrivee})}{\useKV[ClesLabyNb]{Solution}}%
+  }%    
+}%
+
+\newcommand\TraceLabyFacto[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    input PfCLabyNombre;
+
+    boolean Murs;
+    Murs=\useKV[ClesLabyNb]{Murs};
+
+    string Entree,Sortie;
+    Entree=\useKV[ClesLabyNb]{Entree};
+    Sortie=\useKV[ClesLabyNb]{Sortie};
+    boolean SortieUnique,EntreeSortie;
+    SortieUnique:=\useKV[ClesLabyNb]{SortieUnique};
+    EntreeSortie:=\useKV[ClesLabyNb]{EntreeSortie};
+    picture Square;
+    Square=image(
+    path Test;
+    Test=unitsquare scaled 10mm;
+    trace subpath(0.85,1.15) of Test;
+    trace subpath(1.85,2.15) of Test;
+    trace subpath(2.85,3.15) of Test;
+    trace subpath(3.85,4.15) of Test;
+    );
+
+    vardef RemplissagePremier=
+    Totalpremier:=if indiceChemin<62:62 else: indiceChemin fi;
+
+    numeric p[]; boolean n_is_prime; p[1]=2; kis:=1;
+    for nis=3 step 2 until infinity:
+    n_is_prime := true;
+    for jis=2 upto kis:
+    if nis mod p[jis]=0: n_is_prime := false; fi
+    exitif nis/p[jis] < p[jis];
+    endfor
+    if n_is_prime: p[incr kis] := nis; exitif kis=Totalpremier; fi
+    endfor fi
+    
+    numeric PR[],pretiens[];
+    
+    for ki=1 upto Totalpremier-1:
+    pretiens[ki]:=p[ki+1];
+    endfor;
+    
+    Kk:=0;
+    
+    for ki=Totalpremier-1 downto 1:
+    alea:=1+floor(uniformdeviate(ki));
+    PR[incr Kk]:=pretiens[alea];
+    % message("k="&decimal(k)&" alea="&decimal(alea)&" Kk="&decimal(Kk)&" PR[Kk]="&decimal(PR[Kk]));
+    Kkl:=0;
+    for li=1 upto ki:
+    if li<>alea:
+      pretiens[incr Kkl]:=pretiens[li];
+      % message("Kkl="&decimal(Kkl));
+      fi;
+    endfor;
+    endfor;
+    enddef;
+    
+    numeric Multiple;
+    Multiple=#1;
+    % Initialisation du labyrinthe
+    InitialisationLabyrinthe(#2,#3);
+    % On initialise les paramètres du parcours
+    numeric choixligneD,choixligneA,choixcolonneD,choixcolonneA;
+    choixligneD=xpart(#4);
+    choixcolonneD=ypart(#4);
+    choixligneA=xpart(#5);
+    choixcolonneA=ypart(#5);%
+    pair Depart;
+    Depart=N[choixligneD][choixcolonneD];
+    pair Arrivee;
+    Arrivee=N[choixligneA][choixcolonneA];
+    pair Mobile;
+    Mobile=Depart;
+    %
+    RAZPileChemin;
+
+    if \useKV[ClesLabyNb]{SortieUnique}:
+    if (Sortie="Est") or (Sortie="Ouest"):
+    for k=0 upto LargeurLaby-1:
+    if k<>choixligneA:
+    CaseExploree[k][choixcolonneA]:=true;
+    fi;
+    endfor;
+    elseif (Sortie="Nord") or (Sortie="Sud"):
+    for k=0 upto LongueurLaby-1:
+    if k<>choixcolonneA:
+    CaseExploree[choixligneA][k]:=true;
+    fi;
+    endfor;
+    fi;
+    fi;
+    % Exploration du labyrinthe
+    if Entree="Nord":
+    CaseExploree[choixligneD-1][choixcolonneD]:=true;
+    elseif Entree="Sud":
+    CaseExploree[choixligneD+1][choixcolonneD]:=true;
+    elseif Entree="Est":
+    CaseExploree[choixligneD][choixcolonneD+1]:=true;
+    elseif Entree="Ouest":
+    CaseExploree[choixligneD][choixcolonneD-1]:=true;
+    fi;
+    %
+    PushChemin((choixligneD,choixcolonneD));
+    CaseExploree[choixligneD][choixcolonneD]:=true;
+    VoisinDispo(choixligneD,choixcolonneD);
+    forever: exitif Mobile=Arrivee;%nb=0;
+    nb:=ceiling(uniformdeviate(nbvoisin));
+    if nb>0:
+      for k=1 upto nbvoisin:
+        CaseExploree[xpart(PileVoisin[k])][ypart(PileVoisin[k])]:=true;
+      endfor;
+      PushChemin((xpart(PileVoisin[nb]),ypart(PileVoisin[nb])));
+      Mobile:=N[xpart(PileChemin[indiceChemin])][ypart(PileChemin[indiceChemin])];
+      VoisinDispo(xpart(PileChemin[indiceChemin]),ypart(PileChemin[indiceChemin]));
+    else:
+      PopCheminMathAlea;
+    fi;
+    endfor;
+    % Affichagefinal
+    % on sauvegarde les nombres aléatoires
+    numeric NbAffiche[];
+    numeric NbSol[];
+    % on écrit des nombres au hasard, mais sans être multiple du nombre choisi
+    numeric nbaffiche;
+    nbaffiche=0;
+    for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      nbaffiche:=nbaffiche+1;
+      if Multiple=1:%On affichera que des multiples de 2/3/5/9/10 pour afficher un chemin de nombre premiers
+      mathalea:=uniformdeviate(5);
+      if mathalea<1:
+      NbAffiche[nbaffiche]:=(10+ceiling(uniformdeviate(100)))*2;
+      elseif mathalea<2:
+      NbAffiche[nbaffiche]:=(10+ceiling(uniformdeviate(100)))*3;
+      elseif mathalea<3:
+      NbAffiche[nbaffiche]:=(10+ceiling(uniformdeviate(100)))*5;
+      elseif mathalea<4:
+      NbAffiche[nbaffiche]:=(10+ceiling(uniformdeviate(100)))*9;
+      else:  NbAffiche[nbaffiche]:=(10+ceiling(uniformdeviate(100)))*10;
+      fi;
+      else:
+      NbAffiche[nbaffiche]:=(50+ceiling(uniformdeviate(100)))*Multiple+ceiling(uniformdeviate(Multiple-1));
+      fi;
+      endfor;
+    endfor;
+    % On crée des multiples du nombre choisi
+    RemplissagePremier;
+    
+    for k=1 upto indiceChemin:
+    if Multiple>1:
+    NbSol[k]=(50+ceiling(uniformdeviate(100)))*Multiple;
+    else:
+    NbSol[k]=PR[k];
+    fi;
+    endfor;
+    % On affiche
+    picture Corps;
+    Corps=image(
+      nbaffiche:=0;
+      for k=0 upto LargeurLaby-1:
+        for l=0 upto LongueurLaby-1:
+	  nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+      endfor;
+      for k=1 upto indiceChemin:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      if EntreeSortie=false:
+      remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNb]{Couleur};
+      remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNb]{Couleur};
+      trace TraceLabyrinthe;
+      else:
+      for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      trace Square shifted N[k][l];
+      endfor;
+      endfor;
+      trace u*(0,0)--u*(LongueurLaby,0)--u*(LongueurLaby,-LargeurLaby)--u*(0,-LargeurLaby)--cycle;
+      % On dessine l'entrée.
+      if Entree="Nord":
+      N[-1][-1]:=Depart+(0,10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(1,4) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Ouest":
+      N[-1][-1]:=Depart+(-10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(2,5) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(1.15,1.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Sud":
+      N[-1][-1]:=Depart+(0,-10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(3,6) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(2.15,2.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Est":
+      N[-1][-1]:=Depart+(10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(0,3) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(3.18,3.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      fi;
+      % On dessine les sorties
+      if Sortie="Nord":
+      N[-2][-2]=Arrivee+(5mm,20mm);
+      for k=0 upto LongueurLaby-1:
+      draw ((point(0.15) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      draw ((point(0.85) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted (N[0][k]+(0,10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[0][k]+(0,10mm)));
+      endfor;
+      elseif Sortie="Ouest":
+      N[-2][-2]=Arrivee+(-10mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(1.15) of unitsquare scaled 10mm)--0.5[(point(1.15) of unitsquare scaled 10mm),(point(3.85) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      draw ((point(1.85) of unitsquare scaled 10mm)--0.5[(point(1.85) of unitsquare scaled 10mm),(point(3.15) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      undraw (subpath(1.18,1.82) of unitsquare scaled 10mm) shifted (N[k][0]+(-10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][0]+(-10mm,0)));
+      endfor;
+      elseif Sortie="Sud":
+      N[-2][-2]=Arrivee+(5mm,-10mm);
+      for k=0 upto LongueurLaby-1:
+      draw ((point(2.85) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      draw ((point(2.15) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      undraw (subpath(2.18,2.82) of unitsquare scaled 10mm) shifted (N[LargeurLaby-1][k]+(0,-10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[LargeurLaby-1][k]+(0,-10mm)));
+      endfor;
+      elseif Sortie="Est":
+      N[-2][-2]=Arrivee+(20mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(3.15) of unitsquare scaled 10mm)--0.5[(point(3.15) of unitsquare scaled 10mm),(point(1.85) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      draw ((point(3.85) of unitsquare scaled 10mm)--0.5[(point(3.85) of unitsquare scaled 10mm),(point(1.15) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      undraw (subpath(3.18,3.8) of unitsquare scaled 10mm) shifted (N[k][LongueurLaby-1]+(10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][LongueurLaby-1]+(10mm,0)));
+      endfor;
+      fi;
+      fi;
+      );
+    Corps:=(Corps scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+    trace Corps;
+  \end{mplibcode}
+}
+
+\newcommand\TraceLabyFactoSolution[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    color CouleurChemin;
+    CouleurChemin:=\useKV[ClesLabyNb]{CouleurChemin};
+    picture CorpsSolution;
+    CorpsSolution=image(
+    nbaffiche:=0;
+      for k=0 upto LargeurLaby-1:
+        for l=0 upto LongueurLaby-1:
+          nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+      endfor;
+      if EntreeSortie=false:
+            remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNb]{Couleur};
+      remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNb]{Couleur};
+      for k=2 upto indiceChemin-1:
+        remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor \useKV[ClesLabyNb]{CouleurChemin};
+        label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+        endfor;
+        else:
+      for k=1 upto indiceChemin:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      fi;
+      if EntreeSortie=false:
+      trace TraceLabyrinthe;
+      else:
+      for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      trace Square shifted N[k][l];
+      endfor;
+      endfor;
+      trace u*(0,0)--u*(LongueurLaby,0)--u*(LongueurLaby,-LargeurLaby)--u*(0,-LargeurLaby)--cycle;
+      % On dessine l'entrée.
+      if Entree="Nord":
+      N[-1][-1]:=Depart+(0,10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(1,4) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Ouest":
+      N[-1][-1]:=Depart+(-10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(2,5) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(1.15,1.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Sud":
+      N[-1][-1]:=Depart+(0,-10mm);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(3,6) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(2.15,2.85) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      elseif Entree="Est":
+      N[-1][-1]:=Depart+(10mm,0);
+      fill ((unitsquare scaled 10mm) shifted N[-1][-1]) withcolor white;
+      draw (subpath(0,3) of unitsquare scaled 10mm) shifted N[-1][-1];
+      undraw (subpath(3.18,3.82) of unitsquare scaled 10mm) shifted N[-1][-1] withpen pencircle scaled 1.25;
+      label(btex \footnotesize Départ etex,(center Square) shifted N[-1][-1]);
+      fi;
+      % On dessine les sorties
+      if Sortie="Nord":
+      N[-2][-2]=Arrivee+(5mm,20mm);
+      for k=0 upto LongueurLaby-1:
+      draw ((point(0.15) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      draw ((point(0.85) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[0][k]+(0,10mm));
+      undraw (subpath(0.18,0.82) of unitsquare scaled 10mm) shifted (N[0][k]+(0,10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[0][k]+(0,10mm)));
+      endfor;
+      elseif Sortie="Ouest":
+      N[-2][-2]=Arrivee+(-10mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(1.15) of unitsquare scaled 10mm)--0.5[(point(1.15) of unitsquare scaled 10mm),(point(3.85) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      draw ((point(1.85) of unitsquare scaled 10mm)--0.5[(point(1.85) of unitsquare scaled 10mm),(point(3.15) of unitsquare scaled 10mm)]) shifted (N[k][0]+(-10mm,0));
+      undraw (subpath(1.18,1.82) of unitsquare scaled 10mm) shifted (N[k][0]+(-10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][0]+(-10mm,0)));
+      endfor;
+      elseif Sortie="Sud":
+      N[-2][-2]=Arrivee+(5mm,-10mm);
+      for k=0 upto LongueurLaby-1:
+      % draw (Square) shifted (N[LargeurLaby-1][k]+(0,-10mm)) withcolor red;
+      draw ((point(2.85) of unitsquare scaled 10mm)--0.5[(point(0.15) of unitsquare scaled 10mm),(point(2.85) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      draw ((point(2.15) of unitsquare scaled 10mm)--0.5[(point(0.85) of unitsquare scaled 10mm),(point(2.15) of unitsquare scaled 10mm)]) shifted (N[LargeurLaby-1][k]+(0,-10mm));
+      undraw (subpath(2.18,2.82) of unitsquare scaled 10mm) shifted (N[LargeurLaby-1][k]+(0,-10mm)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[LargeurLaby-1][k]+(0,-10mm)));
+      endfor;
+      elseif Sortie="Est":
+      N[-2][-2]=Arrivee+(20mm,5mm);
+      for k=0 upto LargeurLaby-1:
+      draw ((point(3.15) of unitsquare scaled 10mm)--0.5[(point(3.15) of unitsquare scaled 10mm),(point(1.85) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      draw ((point(3.85) of unitsquare scaled 10mm)--0.5[(point(3.85) of unitsquare scaled 10mm),(point(1.15) of unitsquare scaled 10mm)]) shifted (N[k][LongueurLaby-1]+(10mm,0));
+      undraw (subpath(3.18,3.8) of unitsquare scaled 10mm) shifted (N[k][LongueurLaby-1]+(10mm,0)) withpen pencircle scaled 1.25;
+      label(TEX("\footnotesize S"&decimal(k)),center (Square) shifted (N[k][LongueurLaby-1]+(10mm,0)));
+      endfor;
+      fi;
+      path CheminSolution;
+      CheminSolution=(N[-1][-1] shifted (5mm,5mm))--((center unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD])
+      for k=2 upto indiceChemin-1:
+      -- ((center unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])])
+      endfor
+      --((center unitsquare scaled 10mm) shifted Arrivee)--N[-2][-2];
+      trace CheminSolution dashed evenly withcolor CouleurChemin;
+      fi;
+      );
+      CorpsSolution:=(CorpsSolution scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+      trace CorpsSolution;
+  \end{mplibcode}
+}
+
+\newcommand\TraceLabyNombreDouble[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    input PfCLabyNombre;
+
+    boolean Murs;
+    Murs=\useKV[ClesLabyNb]{Murs};
+    
+    numeric Multiple;
+    Multiple=#1;
+    % Initialisation du labyrinthe
+    InitialisationLabyrinthe(#2,#3);
+    % On initialise les paramètres du parcours
+    numeric choixligneD,choixligneA,choixcolonneD,choixcolonneA;
+    choixligneD=xpart(#4);
+    choixcolonneD=ypart(#4);
+    choixligneA=xpart(#5);
+    choixcolonneA=ypart(#5);%
+    pair Depart;
+    Depart=N[choixligneD][choixcolonneD];
+    pair Arrivee;
+    Arrivee=N[choixligneA][choixcolonneA];
+    pair Mobile;
+    Mobile=Depart;
+    RAZPileChemin;
+    % Exploration du labyrinthe
+    PushChemin((choixligneD,choixcolonneD));
+    CaseExploree[choixligneD][choixcolonneD]:=true;
+    VoisinDispo(choixligneD,choixcolonneD);
+    forever: exitif Mobile=Arrivee;%nb=0;
+    nb:=ceiling(uniformdeviate(nbvoisin));
+    if nb>0:
+      for k=1 upto nbvoisin:
+        CaseExploree[xpart(PileVoisin[k])][ypart(PileVoisin[k])]:=true;
+      endfor;
+      PushChemin((xpart(PileVoisin[nb]),ypart(PileVoisin[nb])));
+      Mobile:=N[xpart(PileChemin[indiceChemin])][ypart(PileChemin[indiceChemin])];
+      VoisinDispo(xpart(PileChemin[indiceChemin]),ypart(PileChemin[indiceChemin]));
+    else:
+      PopChemin;
+    fi;
+    endfor;
+    % Affichagefinal
+    % on sauvegarde les nombres aléatoires
+    numeric NbAffiche[];
+    numeric NbSol[];
+    % on écrit des nombres au hasard, mais sans être multiple du nombre choisi
+    numeric nbaffiche;
+    nbaffiche=0;
+    NbAffiche[0]=5+ceiling(uniformdeviate(7));
+    for k=0 upto LargeurLaby-1:
+      for l=0 upto LongueurLaby-1:
+      nbaffiche:=nbaffiche+1;
+      mathalea:=uniformdeviate(1);
+      if mathalea<0.95:
+      NbAffiche[nbaffiche]=NbAffiche[nbaffiche-1]+Multiple+1;
+      else:
+      NbAffiche[nbaffiche]=NbAffiche[nbaffiche-1]*(Multiple-1);
+      fi;
+      endfor;
+    endfor;
+    % On crée des multiples du nombre choisi
+    NbSol[1]=5+ceiling(uniformdeviate(7));
+    for k=2 upto indiceChemin-1:
+    mathalea:=uniformdeviate(1);
+    if mathalea<0.9:
+    NbSol[k]=NbSol[k-1]+Multiple;
+    else:
+    NbSol[k]=NbSol[k-1]*Multiple;
+    fi;
+    endfor;
+    % On affiche
+    picture Corps;
+    Corps=image(
+      nbaffiche:=0;
+      for k=0 upto LargeurLaby-1:
+        for l=0 upto LongueurLaby-1:
+	  nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+      endfor;
+      remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNb]{Couleur};
+      remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNb]{Couleur};
+      for k=2 upto indiceChemin-1:
+        remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+        label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      trace TraceLabyrinthe;
+    );
+    Corps:=(Corps scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+    trace Corps;
+  \end{mplibcode}
+}
+
+\newcommand\TraceDoubleSolution[6]{%
+  \mplibforcehmode%
+  \xdef\PfCNomLabyrinthe{\useKV[ClesLabyNb]{Nom}}%
+  \begin{mplibcode}[\PfCNomLabyrinthe]
+    picture CorpsSolution;
+    CorpsSolution=image(
+      nbaffiche:=0;
+      for k=0 upto #3-1:
+        for l=0 upto #2-1:
+          nbaffiche:=nbaffiche+1;
+          label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]);
+        endfor;
+        endfor;
+      remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNb]{Couleur};
+      remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNb]{Couleur};
+      if \useKV[ClesLabyNb]{Chemin}:
+      for k=2 upto indiceChemin-1:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white;
+      endfor;
+      trace ((center unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD])
+      for k=2 upto indiceChemin-1:
+      -- ((center unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])])
+      endfor
+      --((center unitsquare scaled 10mm) shifted Arrivee) dashed evenly withcolor Brown;
+      for k=2 upto indiceChemin-1:
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      else:
+      for k=2 upto indiceChemin-1:
+      remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor \useKV[ClesLabyNb]{CouleurChemin};
+      label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]);
+      endfor;
+      fi;
+      trace TraceLabyrinthe;
+      );
+      CorpsSolution:=(CorpsSolution scaled \useKV[ClesLabyNb]{Echelle}) rotated \useKV[ClesLabyNb]{Angle};
+      trace CorpsSolution;
+  \end{mplibcode}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCLabyrintheNombre.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMentalo.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMentalo.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMentalo.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,50 @@
+%%%
+% Mentalo
+%%%
+\NewDocumentCommand\PfCNum{m}{%
+  \xintifboolexpr{#1<0}{(\num{#1})}{\num{#1}}%
+}%
+
+\setKVdefault[Mentalo]{Questions=10,ValeurMin=1,ValeurMax=15}
+
+\NewDocumentCommand\Mentalo{o m}{%
+  \useKVdefault[Mentalo]%
+  \setKV[Mentalo]{#1}%
+  \xdef\PfCMentaloEtages{\fpeval{\useKV[Mentalo]{Questions}+1}}
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\PfCMentaloListeOperations{#2}%
+  \reademptyitems%
+  \setlength{\tabcolsep}{0.25\tabcolsep}
+  \renewcommand{\arraystretch}{1.5}
+  \begin{NiceTabular}{*{\fpeval{\PfCMentaloEtages}}{m{5pt}}m{20pt}cm{20pt}cl*{\fpeval{\PfCMentaloEtages}}{m{5pt}}*{5}{m{15pt}}*{1}{m{10pt}}}
+    \Block{1-\fpeval{\PfCMentaloEtages}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages}}}\do{&}%
+    \Block[draw,fill=gray!15]{1-5}{Arrivée}&&&&&\Block{1-\fpeval{\PfCMentaloEtages}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages}}}\do{&}\\
+    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages-1}}}\do{%
+      \Block{1-\fpeval{\PfCMentaloEtages-##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages-##1}}}\do{&}%
+      \Block[borders={top,left,bottom}]{1-\fpeval{##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{##1}}}\do{&}%
+      \Block[borders={top,bottom}]{1-1}{%
+        \xdef\PfCMentaloPremierTerme{\fpeval{randint(\useKV[Mentalo]{ValeurMin},\useKV[Mentalo]{ValeurMax})}}%
+        \num{\PfCMentaloPremierTerme}}&\Block[borders={top,bottom}]{1-1}{%
+        \xintifboolexpr{\PfCMentaloListeOperationslen==1}{%
+          \StrSubstitute{\PfCMentaloListeOperations[1]}{*}{\times}[\PfCCBAffiche]$\PfCCBAffiche$%
+        }{%
+          \StrSubstitute{\PfCMentaloListeOperations[##1]}{*}{\times}[\PfCCBAffiche]$\PfCCBAffiche$%
+        }%
+      }&%
+      \Block[borders={top,bottom}]{1-1}{\xdef\PfCMentaloDeuxiemeTerme{\fpeval{randint(\useKV[Mentalo]{ValeurMin},\useKV[Mentalo]{ValeurMax})}}%
+        \PfCNum{\PfCMentaloDeuxiemeTerme}}&\Block[borders={top,bottom}]{1-1}{$=$}&\Block[borders={top,bottom}]{1-1}{\pointilles[20pt]}&%
+      \Block[borders={top,right,bottom}]{1-\fpeval{##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{##1}}}\do{&}%
+      \Block{1-\fpeval{\PfCMentaloEtages-##1}}{~}\xintFor* ##2 in{\xintSeq{1}{\fpeval{\PfCMentaloEtages-##1}}}\do{&}%
+      &&&&\Block{1-2}{%
+        \xintifboolexpr{\PfCMentaloListeOperationslen==1}{%
+          \num{\fpeval{\PfCMentaloPremierTerme\PfCMentaloListeOperations[1]\PfCMentaloDeuxiemeTerme}}
+        }{%
+          \num{\fpeval{\PfCMentaloPremierTerme\PfCMentaloListeOperations[##1]\PfCMentaloDeuxiemeTerme}}
+        }%
+      }&\\
+    }%
+    \Block[draw,fill=gray!15]{1-\fpeval{2*\PfCMentaloEtages+5}}{Départ}\xintFor* ##2 in{\xintSeq{1}{\fpeval{2*\PfCMentaloEtages+5}}}\do{&}\\%
+    \CodeAfter
+    \tikz\draw[dashed] (1-|\fpeval{5+5+2+2*\PfCMentaloEtages-2})--(last-|\fpeval{5+5+2+2*\PfCMentaloEtages-2});
+  \end{NiceTabular}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMentalo.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMidpoint.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMidpoint.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMidpoint.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,273 @@
+%%%
+% Midpoint
+%%%
+\setKVdefault[MidPoint]{Solution=false,Graines=false,Hard=false}
+\defKV[MidPoint]{Graine=\setKV[MidPoint]{Graines}}
+
+\NewDocumentCommand\MidPoint{o}{%
+  \useKVdefault[MidPoint]%
+  \setKV[MidPoint]{#1}%
+  \BuildMidPoint
+}
+
+\NewDocumentCommand\BuildMidPoint{}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    numeric Longueur,Largeur;
+    Longueur=8;
+    Largeur=4;
+    boolean Horizontal,Vertical,RetiensSens;
+    Horizontal=false;
+    Vertical=false;
+    
+    boolean Solution,Hard,Graines;
+    Solution:=\useKV[MidPoint]{Solution};
+    Hard:=\useKV[MidPoint]{Hard};
+    Graines:=\useKV[MidPoint]{Graines};
+    if Graines:
+    randomseed:=\useKV[MidPoint]{Graine}
+    fi;
+  
+  u:=8mm;
+  
+  pair A[][];%centre des carrés.
+
+  vardef CherchePoint(expr basek,basel)=
+      % Si le déplacement précédent est horizontal, il faut passer en vertical
+      % Si le déplacement précédent est vertical, il faut passer en horizontal
+    p:=p+1;
+    if basel=ColonneArrivee:
+      RP[p]:=Arrivee;
+    else:
+      if Vertical:
+    %deplacement horizontal
+	ecart:=ColonneArrivee-basel;
+	if ecart=1:
+	  Basel:=ColonneArrivee;
+	  RP[p]:=A[basek][ColonneArrivee];
+	else:
+	  Basel:=ceiling(basel+uniformdeviate(ecart));
+	  RP[p]:=A[basek][Basel];
+	fi;
+	Basek:=basek;
+	Horizontal:=true;
+	Vertical:=false;
+      else:
+	%on vérifie qu'on peut se déplacer dans les deux sens.
+    % on choisit vertical positif ou vertical négatif
+	if basek=1:
+	  choix:=0.75;
+	elseif basek=Largeur:
+	  choix:=0.25;
+	else:
+	  choix:=uniformdeviate(1);
+	fi;
+	if choix<0.5:
+	  ecart:=basek-1;
+	  if ecart=1:
+	    Basek:=1;
+	    RP[p]:=A[1][basel];
+	  else:
+	    Basek:=ceiling(uniformdeviate(ecart));
+	    RP[p]:=A[Basek][basel];
+	  fi;
+	  Basel:=basel;
+	else:
+	  ecart:=Largeur-basek;
+	  if ecart=1:
+	    Basek:=Largeur;
+	    RP[p]:=A[Largeur][basel];
+	  else:
+	    Basek:=basek+ceiling(uniformdeviate(ecart));
+	    RP[p]:=A[Basek][basel];
+	fi;
+	Basel:=basel;
+      fi;
+      Horizontal:=false;
+      Vertical:=true;
+    fi;
+  fi;
+enddef;
+
+vardef MidPoint(expr Aa,Bb)=
+  save $;
+  picture $;
+  $=image(
+      if Solution:
+      trace Aa--Bb withpen pencircle scaled 1.5;
+    fi;
+    if Hard:
+      NbMid:=NbMid+1;
+      if NbMid mod 2=0:
+	remplis cercles(1/2[Aa,Bb],1mm);
+      fi;
+    else:
+      remplis cercles(1/2[Aa,Bb],1mm);
+    fi;
+    );
+  $
+enddef;
+  
+  % tracé de la grille
+  for k=1 upto 2*Largeur:
+    for l=-3 upto Largeur+Longueur-4:
+      trace (unitsquare scaled u) shifted (u*(l,-k)-center (unitsquare scaled u)) withcolor 0.5*white;
+    endfor;
+  endfor;
+  
+  for k=1 upto Largeur:
+    for l=1 upto Longueur:
+      A[k][l]=u*(l,-k);
+      %trace (unitsquare scaled u) shifted (A[k][l]-center (unitsquare scaled u)) withcolor 0.5*white;
+    endfor;
+  endfor;
+  
+%On choisit le premier déplacement
+  choix:=uniformdeviate(1);
+  if choix<0.5:
+    Horizontal:=true;
+  else:
+    Vertical:=true;
+  fi;
+  
+  p:=0;
+  NbMid=ceiling(uniformdeviate(2));%Pour le niveau Hard
+
+  %1er rectangle
+LigneDepart:=2;%2;
+ColonneDepart:=1;
+LigneArrivee:=4;%4;
+ColonneArrivee:=8;
+pair Depart,Arrivee;
+Depart=A[LigneDepart][ColonneDepart];
+Arrivee=A[LigneArrivee][ColonneArrivee];
+
+pair RP[];%RetiensPoints
+RP[0]=Depart;
+  
+Basek:=LigneDepart;
+Basel:=ColonneDepart;
+forever:
+  CherchePoint(Basek,Basel);
+  exitif RP[p]=Arrivee;
+endfor;
+
+if ypart(RP[p])=ypart(RP[p-1]):
+  RetiensSens:=true;
+else:
+  RetiensSens:=false;
+  p:=p-1;
+fi;
+
+%2eme rectangle
+for k=1 upto Largeur:
+  for l=1 upto Longueur:
+    A[k][l]:=u*(Longueur+l,-k);
+  endfor;
+endfor;
+
+LigneDepart:=4;
+ColonneDepart:=1;
+LigneArrivee:=2;
+ColonneArrivee:=8;
+Depart:=A[LigneDepart][ColonneDepart];
+Arrivee:=A[LigneArrivee][ColonneArrivee];
+
+Basek:=LigneDepart;
+Basel:=ColonneDepart;
+Retiens:=p;
+RP[p+1]:=Depart;
+
+forever:
+  CherchePoint(Basek,Basel);
+  exitif RP[p]=Arrivee;
+endfor;
+
+if ypart(RP[p])=ypart(RP[p-1]):
+  RetiensSens:=true;
+    p:=p-1;
+else:
+  RetiensSens:=false;
+fi;
+
+for h=(Retiens+1) upto p:
+  RP[h]:=symetrie(RP[h],u*(Longueur+0.5,-Largeur-0.5));
+endfor;
+%3eme Rectangle
+for k=1 upto Largeur:
+  for l=1 upto Longueur:
+    A[k][l]:=u*(2*Longueur+l,-k);
+  endfor;
+endfor;
+
+LigneDepart:=4;
+ColonneDepart:=2;
+LigneArrivee:=1;
+ColonneArrivee:=4;
+Depart:=A[LigneDepart][ColonneDepart];
+Arrivee:=A[LigneArrivee][ColonneArrivee];
+
+
+Basek:=LigneDepart;
+Basel:=ColonneDepart;
+Retiens:=p;
+RP[p+1]:=Depart;
+forever:
+  CherchePoint(Basek,Basel);
+  exitif RP[p]=Arrivee;
+endfor;
+for h=(Retiens+1) upto p:
+  RP[h]:=rotation(RP[h],u*(2*Longueur+0.5,-Largeur-0.5),90) shifted(u*(-2*Longueur,-Largeur));
+endfor;
+%4eme rectangle. On termine la boucle ?
+for k=1 upto Largeur:
+  for l=1 upto Longueur:
+    A[k][l]:=u*(3*Longueur+l,-k);
+  endfor;
+endfor;
+
+LigneDepart:=4;
+ColonneDepart:=1;
+LigneArrivee:=2;
+ColonneArrivee:=4;
+Depart:=A[LigneDepart][ColonneDepart];
+Arrivee:=A[LigneArrivee][ColonneArrivee];
+
+Basek:=LigneDepart;
+Basel:=ColonneDepart;
+Retiens:=p;
+RP[p+1]:=Depart;
+forever:
+  CherchePoint(Basek,Basel);
+  exitif RP[p]=Arrivee;
+endfor;
+
+if ypart(RP[p])=ypart(RP[p-1]):
+  p:=p-1;
+fi;
+
+if ypart(RP[0])=ypart(RP[1]):
+  RetiensSens:=true;
+else:
+  RetiensSens:=false;
+fi;
+
+for h=(Retiens+1) upto p:
+  RP[h]:=RP[h] shifted(u*(-3.5*Longueur,0));
+endfor;
+
+if RetiensSens:
+  RP[p+1]:=RP[1];
+  go:=1;
+else:
+  RP[p+1]:=RP[0];
+  go:=0;
+fi;
+
+for h=go upto p:
+  draw MidPoint(RP[h],RP[h+1]);
+endfor;
+\end{mplibcode}
+\fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMidpoint.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,386 @@
+%%%
+% Modele en barre
+%%%
+\setKVdefault[ClesModeleBarre]{Hauteur=0.5cm,Largeur=1cm,Separation=0,Homogene=false}%Separation pour conserver le lien avec les équations.
+\defKV[ClesModeleBarre]{Longueur=\setKV[ClesModeleBarre]{Homogene}}%
+
+\newtoks\toklistemodelbarresup%
+\toklistemodelbarresup{}%
+\def\UpdateListeModelBarreSup#1\nil{\addtotok\toklistemodelbarresup{#1,}}%
+\newtoks\toklistemodelbarreinf%
+\toklistemodelbarreinf{}%
+\def\UpdateListeModelBarreInf#1\nil{\addtotok\toklistemodelbarreinf{#1,}}%
+
+\newcommand\ModeleBarre[3][]{%
+  % #1 options
+  % #2 éléments de la barre supérieure C1 2 $x$ 1 3/C2 1 1x/
+  % #3 éléments de la barre inférieure (même lecture)
+  \useKVdefault[ClesModeleBarre]%
+  \setKV[ClesModeleBarre]{#1}%
+  \setsepchar{\\/ }%
+  \readlist\ListeModelBarreSup{#2}%
+  \readlist\ListeModelBarreInf{#3}%
+  \toklistemodelbarresup{}%
+  \foreachitem\compteur\in\ListeModelBarreSup{%
+    \foreachitem\valeur\in\ListeModelBarreSup[\compteurcnt]{%
+      \expandafter\UpdateListeModelBarreSup\valeur\nil%
+    }%
+  }%
+  \toklistemodelbarreinf{}%
+  \foreachitem\compteur\in\ListeModelBarreInf{%
+    \foreachitem\valeur\in\ListeModelBarreInf[\compteurcnt]{%
+      \expandafter\UpdateListeModelBarreInf\valeur\nil%
+    }%
+  }%
+  \ifboolKV[ClesModeleBarre]{Homogene}{%
+    \PfCMPDessineModelBarre{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}%
+  }{%
+    \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}%
+  }%
+}%
+
+\newcommand\PfCMPDessineModelBarre[2]{%
+  \begin{mplibcode}%
+    Longueur:=\useKV[ClesModeleBarre]{Longueur};
+    Hauteur:=\useKV[ClesModeleBarre]{Hauteur};
+
+    vardef Briquesup(expr col)(text t)=
+    save $;
+    picture $;
+    $=image(
+    u:=Longueur/MBnbcasessuptotal;
+    remplis polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur)) withcolor col;
+    draw polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur));
+    label(TEX(t),iso((0,0),(u,Hauteur)));
+    u:=1cm;
+    );
+    $
+    enddef;
+
+    vardef Briqueinf(expr col)(text t)=
+    save $;
+    picture $;
+    $=image(
+    u:=Longueur/MBnbcasesinftotal;
+    remplis polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur)) withcolor col;
+    draw polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur));
+    label(TEX(t),iso((0,0),(u,Hauteur)));
+    u:=1cm;
+    );
+    $
+    enddef;
+    
+    numeric MBnbcolsup;%compte combien de couleurs
+    MBnbcolsup=0;
+    color MBColSup[];%Sauvegarde les couleurs de la barre sup
+    numeric MBnbinfosup[];%compte combien d'infos par couleurs.
+    numeric MBnbcasessup[][];
+    numeric MBnbcasessuptotal;
+    MBnbcasessuptotal=0;
+    string MBTextcasessup[][];
+    vardef toto(text t)=
+    for p_=t:
+    if color p_:
+    MBnbcolsup:=MBnbcolsup+1;% on incrémente le nombre de couleurs
+    MBColSup[MBnbcolsup]:=p_;% on définit la couleur de la série de cases
+    MBnbinfosup[MBnbcolsup]:=0;
+    else:
+    if numeric p_:
+    MBnbinfosup[MBnbcolsup]:=MBnbinfosup[MBnbcolsup]+1;
+    MBnbcasessuptotal:=MBnbcasessuptotal+p_;
+    MBnbcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_;
+    else:
+    MBTextcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    
+    toto(#1);
+
+    numeric MBnbcolinf;%compte combien de couleurs
+    MBnbcolinf=0;
+    color MBColInf[];%Sauvegarde les couleurs de la barre inf
+    numeric MBnbinfoinf[];%compte combien d'infos par couleurs.
+    numeric MBnbcasesinf[][];
+    numeric MBnbcasesinftotal;
+    MBnbcasesinftotal=0;
+    string MBTextcasesinf[][];
+    vardef tata(text t)=
+    for p_=t:
+    if color p_:
+    MBnbcolinf:=MBnbcolinf+1;% on incrémente le nombre de couleurs
+    MBColInf[MBnbcolinf]:=p_;% on définit la couleur de la série de cases
+    MBnbinfoinf[MBnbcolinf]:=0;
+    else:
+    if numeric p_:
+    MBnbinfoinf[MBnbcolinf]:=MBnbinfoinf[MBnbcolinf]+1;
+    MBnbcasesinftotal:=MBnbcasesinftotal+p_;
+    MBnbcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_;
+    else:
+    MBTextcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    
+    tata(#2);
+    
+    pair VecteurDeplasup;
+    VecteurDeplasup=(Longueur/MBnbcasessuptotal,0);
+
+    numeric MBnbdepla;
+    MBnbdepla=0;
+    for k=1 upto MBnbcolsup:
+    for l=1 upto MBnbinfosup[k]:
+    for j=1 upto MBnbcasessup[k][l]:
+    trace Briquesup(MBColSup[k])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDeplasup);
+    MBnbdepla:=MBnbdepla+1;
+    endfor;
+    endfor;
+    endfor;
+
+    pair VecteurDeplainf;
+    VecteurDeplainf=(Longueur/MBnbcasesinftotal,0);
+
+    numeric MBnbdepla;
+    MBnbdepla=0;
+    for k=1 upto MBnbcolinf:
+    for l=1 upto MBnbinfoinf[k]:
+    for j=1 upto MBnbcasesinf[k][l]:
+    trace Briqueinf(MBColInf[k])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDeplainf+(0,-Hauteur));
+    MBnbdepla:=MBnbdepla+1;
+    endfor;
+    endfor;
+    endfor;
+  \end{mplibcode}
+}%
+
+\newcommand\PfCMPDessineModelBarreNonHomogene[2]{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}
+    Longueur:=\useKV[ClesModeleBarre]{Largeur};
+    Hauteur:=\useKV[ClesModeleBarre]{Hauteur};
+    Separation:=\useKV[ClesModeleBarre]{Separation};
+    
+    vardef Brique(expr col,nbfois)(text t)=
+    save $;
+    picture $;
+    $=image(
+    u:=Longueur;
+    if t="?":
+    draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) dashed evenly;
+    else:
+    remplis polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) withcolor col;
+    draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur));
+    fi;
+    if nbfois>0:
+    label(TEX(t),iso((0,0),(u*abs(nbfois),Hauteur)));
+    else:
+    label.bot(TEX(t),iso((0,0),(u*abs(nbfois),-Hauteur)));
+    drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur);
+    fi;
+    u:=1cm;
+    );
+    $
+    enddef;
+    
+    numeric MBnbcolsup;%compte combien de couleurs
+    MBnbcolsup=0;
+    color MBColSup[];%Sauvegarde les couleurs de la barre sup
+    numeric MBnbinfosup[];%compte combien d'infos par couleurs.
+    numeric MBnbcasessup[][];
+    numeric MBnbcasessuptotal;
+    MBnbcasessuptotal=0;
+    string MBTextcasessup[][];
+    vardef toto(text t)=
+    for p_=t:
+    if color p_:
+    MBnbcolsup:=MBnbcolsup+1;% on incrémente le nombre de couleurs
+    MBColSup[MBnbcolsup]:=p_;% on définit la couleur de la série de cases
+    MBnbinfosup[MBnbcolsup]:=0;
+    else:
+    if numeric p_:
+    MBnbinfosup[MBnbcolsup]:=MBnbinfosup[MBnbcolsup]+1;
+    MBnbcasessuptotal:=MBnbcasessuptotal+p_;
+    MBnbcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_;
+    else:
+    MBTextcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    
+    toto(#1);
+
+    numeric MBnbcolinf;%compte combien de couleurs
+    MBnbcolinf=0;
+    color MBColInf[];%Sauvegarde les couleurs de la barre inf
+    numeric MBnbinfoinf[];%compte combien d'infos par couleurs.
+    numeric MBnbcasesinf[][];
+    numeric MBnbcasesinftotal;
+    MBnbcasesinftotal=0;
+    string MBTextcasesinf[][];
+    vardef tata(text t)=
+    for p_=t:
+    if color p_:
+    MBnbcolinf:=MBnbcolinf+1;% on incrémente le nombre de couleurs
+    MBColInf[MBnbcolinf]:=p_;% on définit la couleur de la série de cases
+    MBnbinfoinf[MBnbcolinf]:=0;
+    else:
+    if numeric p_:
+    MBnbinfoinf[MBnbcolinf]:=MBnbinfoinf[MBnbcolinf]+1;
+    MBnbcasesinftotal:=MBnbcasesinftotal+p_;
+    MBnbcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_;
+    else:
+    MBTextcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    
+    tata(#2);
+    
+    pair VecteurDepla;
+    VecteurDepla=(Longueur,0);
+
+    numeric MBnbdepla;
+    MBnbdepla=0;
+    for k=1 upto MBnbcolsup:
+    for l=1 upto MBnbinfosup[k]:
+    trace Brique(MBColSup[k],MBnbcasessup[k][l])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDepla);
+    MBnbdepla:=MBnbdepla+MBnbcasessup[k][l];
+    endfor;
+    endfor;
+
+    MBnbdepla:=0;
+    for k=1 upto MBnbcolinf:
+    for l=1 upto MBnbinfoinf[k]:
+    trace Brique(MBColInf[k],MBnbcasesinf[k][l])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDepla+(0,-Hauteur));
+    if MBnbcasesinf[k][l]<0:
+    for j=1 upto (abs(MBnbcasesinf[k][l])-1):
+    trace ((0,0)--(0,Hauteur)) shifted((MBnbdepla+j)*VecteurDepla+(0,-Hauteur)) withcolor black;
+    endfor;
+    fi;
+    MBnbdepla:=MBnbdepla+abs(MBnbcasesinf[k][l]);
+    endfor;
+    endfor;
+
+    if Separation>0:
+    draw (u*Separation,-1.5Hauteur)--(u*Separation,1.5Hauteur) withpen pencircle scaled 1.5 dashed evenly withcolor red;
+    fi;
+
+  \end{mplibcode}%
+  \else
+  \begin{mpost}[mpsettings={Longueur:=\useKV[ClesModeleBarre]{Largeur};Hauteur:=\useKV[ClesModeleBarre]{Hauteur};Separation:=\useKV[ClesModeleBarre]{Separation};}]
+    vardef Brique(expr col,nbfois)(text t)=
+    save $;
+    picture $;
+    $=image(
+    u:=Longueur;
+    if t="?":
+    draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) dashed evenly;
+    else:
+    remplis polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) withcolor col;
+    draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur));
+    fi;
+    if nbfois>0:
+    label(LATEXProf(t),iso((0,0),(u*abs(nbfois),Hauteur)));
+    else:
+    label.bot(LATEXProf(t),iso((0,0),(u*abs(nbfois),-Hauteur)));
+    drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur);
+    fi;
+    u:=1cm;
+    );
+    $
+    enddef;
+    
+    numeric MBnbcolsup;%compte combien de couleurs
+    MBnbcolsup=0;
+    color MBColSup[];%Sauvegarde les couleurs de la barre sup
+    numeric MBnbinfosup[];%compte combien d'infos par couleurs.
+    numeric MBnbcasessup[][];
+    numeric MBnbcasessuptotal;
+    MBnbcasessuptotal=0;
+    string MBTextcasessup[][];
+    vardef toto(text t)=
+    for p_=t:
+    if color p_:
+    MBnbcolsup:=MBnbcolsup+1;% on incrémente le nombre de couleurs
+    MBColSup[MBnbcolsup]:=p_;% on définit la couleur de la série de cases
+    MBnbinfosup[MBnbcolsup]:=0;
+    else:
+    if numeric p_:
+    MBnbinfosup[MBnbcolsup]:=MBnbinfosup[MBnbcolsup]+1;
+    MBnbcasessuptotal:=MBnbcasessuptotal+p_;
+    MBnbcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_;
+    else:
+    MBTextcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    
+    toto(#1);
+
+    numeric MBnbcolinf;%compte combien de couleurs
+    MBnbcolinf=0;
+    color MBColInf[];%Sauvegarde les couleurs de la barre inf
+    numeric MBnbinfoinf[];%compte combien d'infos par couleurs.
+    numeric MBnbcasesinf[][];
+    numeric MBnbcasesinftotal;
+    MBnbcasesinftotal=0;
+    string MBTextcasesinf[][];
+    vardef tata(text t)=
+    for p_=t:
+    if color p_:
+    MBnbcolinf:=MBnbcolinf+1;% on incrémente le nombre de couleurs
+    MBColInf[MBnbcolinf]:=p_;% on définit la couleur de la série de cases
+    MBnbinfoinf[MBnbcolinf]:=0;
+    else:
+    if numeric p_:
+    MBnbinfoinf[MBnbcolinf]:=MBnbinfoinf[MBnbcolinf]+1;
+    MBnbcasesinftotal:=MBnbcasesinftotal+p_;
+    MBnbcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_;
+    else:
+    MBTextcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    
+    tata(#2);
+    
+    pair VecteurDepla;
+    VecteurDepla=(Longueur,0);
+
+    numeric MBnbdepla;
+    MBnbdepla=0;
+    for k=1 upto MBnbcolsup:
+    for l=1 upto MBnbinfosup[k]:
+    trace Brique(MBColSup[k],MBnbcasessup[k][l])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDepla);
+    MBnbdepla:=MBnbdepla+MBnbcasessup[k][l];
+    endfor;
+    endfor;
+
+    MBnbdepla:=0;
+    for k=1 upto MBnbcolinf:
+    for l=1 upto MBnbinfoinf[k]:
+    trace Brique(MBColInf[k],MBnbcasesinf[k][l])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDepla+u*(0,-0.5));
+    if MBnbcasesinf[k][l]<0:
+    for j=1 upto (abs(MBnbcasesinf[k][l])-1):
+    trace ((0,0)--(0,Hauteur)) shifted((MBnbdepla+j)*VecteurDepla+u*(0,-0.5)) withcolor black;
+    endfor;
+    fi;
+    MBnbdepla:=MBnbdepla+abs(MBnbcasesinf[k][l]);
+    endfor;
+    endfor;
+
+    if Separation>0:
+    draw u*(Separation,-0.75)--u*(Separation,0.75) withpen pencircle scaled 1.5 dashed evenly withcolor red;
+    fi;
+
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCModeleBarre.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMosaique.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMosaique.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMosaique.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,138 @@
+%%%
+% Mosaique
+%%%
+\setKVdefault[ClesMosaique]{Largeur=2,Hauteur=2,Solution=false,Type=1,Label,Echelle=1cm}
+
+\newcommand\DessineMosaique[2][]{%
+  \useKVdefault[ClesMosaique]%
+  \setKV[ClesMosaique]{#1}%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}
+    u:=\useKV[ClesMosaique]{Echelle};
+    Type:=\useKV[ClesMosaique]{Type};
+    input PfCMosaique;
+    trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi;
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}[mpsettings={u:=\useKV[ClesMosaique]{Echelle};Type:=\useKV[ClesMosaique]{Type};}]%
+    input PfCMosaique;
+    trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi;
+  \end{mpost}%
+  \fi%
+}%
+
+\newcommand\DessineMosaiqueComplet[1]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCMosaique;
+    Largeur=\useKV[ClesMosaique]{Largeur};
+    Hauteur=\useKV[ClesMosaique]{Hauteur};
+    Type=\useKV[ClesMosaique]{Type};
+    boolean Solution,Label;
+    Solution=\useKV[ClesMosaique]{Solution};
+    Label=\useKV[ClesMosaique]{Label};
+    pair A,B,C,D;
+    A=u*(0,1);
+    B-A=u*(Largeur,0);
+    C-B=u*(0,-Hauteur);
+    D-C=A-B;
+    picture mosaique;
+    path case;
+    case=unitsquare scaled 1cm;
+    if Type=1:
+    mosaique=image(
+    trace case withcolor 0.5white;
+    trace (point(0) of case)--(point(2) of case) withcolor 0.75white;
+    trace (point(1) of case)--(point(3) of case) withcolor 0.75white;
+    trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+    trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+    );
+    else:
+    mosaique=image(
+    trace case withcolor 0.5white;
+    trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+    trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+    trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white;
+    );
+    fi;
+    if Solution:
+    nbmos:=0;
+    for p_=#1:
+    trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+    nbmos:=nbmos+1;
+    endfor;
+    else:
+    nbmos:=0;
+    for p_=#1:
+    trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+    if Label:
+    label(TEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique  shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)))));
+    fi;
+    nbmos:=nbmos+1;
+    endfor;
+    fi;
+    trace polygone(A,B,C,D);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={Largeur=\useKV[ClesMosaique]{Largeur};Hauteur=\useKV[ClesMosaique]{Hauteur};Type=\useKV[ClesMosaique]{Type};boolean Solution,Label;Solution=\useKV[ClesMosaique]{Solution};}]
+    Label=\useKV[ClesMosaique]{Label};
+    input PfCMosaique;
+    pair A,B,C,D;
+    A=u*(0,1);
+    B-A=u*(Largeur,0);
+    C-B=u*(0,-Hauteur);
+    D-C=A-B;
+    picture mosaique;
+    path case;
+    case=unitsquare scaled 1cm;
+    if Type=1:
+    mosaique=image(
+    trace case withcolor 0.5white;
+    trace (point(0) of case)--(point(2) of case) withcolor 0.75white;
+    trace (point(1) of case)--(point(3) of case) withcolor 0.75white;
+    trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+    trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+    );
+    else:
+    mosaique=image(
+    trace case withcolor 0.5white;
+    trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+    trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+    trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white;
+    );
+    fi;
+    if Solution:
+    nbmos:=0;
+    for p_=#1:
+    trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+    nbmos:=nbmos+1;
+    endfor;
+    else:
+    nbmos:=0;
+    for p_=#1:
+    trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+    if Label:
+    label(LATEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique  shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)))));
+    fi;
+    nbmos:=nbmos+1;
+    endfor;
+    fi;
+    trace polygone(A,B,C,D);
+  \end{mpost}
+  \fi
+}%
+    
+\newtoks\toklistecaseM%
+\def\UpdatetoksMosaique#1/#2\nil{\addtotok\toklistecaseM{(#1,#2),}}%
+
+\newcommand\Mosaique[2][]{%
+  \useKVdefault[ClesMosaique]%
+  \setKV[ClesMosaique]{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeMosaique{#2}%
+  \toklistecaseM{}%
+  \foreachitem\compteur\in\ListeMosaique{\expandafter\UpdatetoksMosaique\compteur\nil}%
+  \DessineMosaiqueComplet{\the\toklistecaseM}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMosaique.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,59 @@
+%%%
+% Mots Cod\'es
+%%%
+\setKVdefault[MotsCodes]{LargeurT=1cm,Colonnes=5,Largeur=3cm,Solution=false,Math=false}%
+
+\newcommand\MotsCodes[2][]{%
+  \useKVdefault[MotsCodes]%
+  \setKV[MotsCodes]{#1}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeMotsCodes{#2}%
+  \xdef\ListeMotsCodesPas{\fpeval{\ListeMotsCodeslen/\useKV[MotsCodes]{Colonnes}}}%
+  \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{Largeur}}}}
+    \xintFor* ##1 in {\xintSeq {1}{\ListeMotsCodesPas}}\do{%
+      \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
+        \xintifForFirst{}{&}\Block[draw=black]{4-1}{}%
+      }\\
+      \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
+        \xintifForFirst{}{&}\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},1]
+      }\\
+      \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
+        \xintifForFirst{}{&}%
+      }\\
+      \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{%
+        \xintifForFirst{}{&}\textbf{\Large\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},2]}
+      }\\
+    }%
+  \end{NiceTabular}%
+}%
+
+\newcommand\MotsCodesTableau[3][]{%
+  \useKVdefault[MotsCodes]%
+  \setKV[MotsCodes]{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeMotsCodesTableau{#2}%
+  \xdef\ListeMotsCodesMax{0}%
+  \setsepchar{,}%
+  \readlist*\ListeMotsCodesPhrase{#3}%
+  \foreachitem\compteur\in\ListeMotsCodesTableau{%
+    \xintifboolexpr{\ListeMotsCodesMax<\listlen\ListeMotsCodesTableau[\compteurcnt]}{\xdef\ListeMotsCodesMax{\fpeval{\listlen\ListeMotsCodesTableau[\compteurcnt]}}}{}%
+  }%
+  \begin{NiceTabular}{*{\fpeval{\ListeMotsCodesMax}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{LargeurT}}}}
+    \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsCodesTableaulen}}}\do{%
+      \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{%
+        \xintifForFirst{}{&}\ifboolKV[MotsCodes]{Solution}{%
+          \StrMid{\ListeMotsCodesPhrase[##1]}{##2}{##2}[\MotsCodesMaLettre]%
+          \IfStrEq{\MotsCodesMaLettre}{*}{\Block[draw=black,fill=black]{3-1}{}}{\Block[draw=black]{3-1}{\StrMid{\ListeMotsCodesPhrase[##1]}{##2}{##2}}}%
+        }{%
+          \IfStrEq{\ListeMotsCodesTableau[##1,##2]}{*}{\Block[draw=black,fill=black]{3-1}{}}{\Block[draw=black]{3-1}{}}%
+        }%%
+      }\\
+      \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{%
+        \xintifForFirst{}{&}
+      }\\
+      \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{%
+        \xintifForFirst{}{&}\IfStrEq{\ListeMotsCodesTableau[##1,##2]}{*}{}{\footnotesize\ifboolKV[MotsCodes]{Math}{\ListeMotsCodesTableau[##1,##2]}{\num{\ListeMotsCodesTableau[##1,##2]}}}%
+      }\\
+    }%
+  \end{NiceTabular}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCodes.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCroises.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCroises.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCroises.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,56 @@
+%%%
+% Mots croisés
+%%%
+\setKVdefault[ClesCroises]{Lignes=6,Colonnes=8,Solution=false,Croises=false,Couleur=gray,Largeur=1em}
+
+\newcounter{PfCLettreHorizontal}
+
+\newcommand\MotsCroises[2][]{%
+  \useKVdefault[ClesCroises]%
+  \setKV[ClesCroises]{#1}%
+  \setcounter{PfCLettreHorizontal}{0}%
+  \setsepchar[*]{§*,*/}%
+  \readlist*\ListeCasesCroises{#2}%
+  \begin{NiceTabular}{*{\fpeval{\useKV[ClesCroises]{Colonnes}}}{p{\useKV[ClesCroises]{Largeur}}}}[first-row,first-col]%
+    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesCroises]{Colonnes}}}}\do{%
+      &\ifboolKV[ClesCroises]{Croises}{\stepcounter{PfCLettreHorizontal}\footnotesize\Alph{PfCLettreHorizontal}}{}
+    }\\
+    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesCroises]{Lignes}}}}\do{%
+      \ifboolKV[ClesCroises]{Croises}{\footnotesize##1}{}\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesCroises]{Colonnes}}}}\do{%
+        &\IfStrEq{\ListeCasesCroises[##1,##2,1]}{!}{%
+        }{%
+          \IfStrEq{\ListeCasesCroises[##1,##2,1]}{*}{%
+            \Block[draw,fill=black]{}{\PfCTBstrut}}{%
+            \IfStrEq{\ListeCasesCroises[##1,##2,1]}{+}{%
+              \Block[draw,fill=\useKV[ClesCroises]{Couleur}]{}{%
+                \PfCTBstrut\ifboolKV[ClesCroises]{Solution}{%
+                  \ListeCasesCroises[##1,##2,2]%
+                }{}%
+              }
+            }{%
+              \Block[draw]{}{\PfCTBstrut\ifboolKV[ClesCroises]{Solution}{%
+                  \ListeCasesCroises[##1,##2,2]}{}%
+              }%
+            }%
+          }%
+        }%
+      }\\
+    }%
+    \CodeAfter
+    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesCroises]{Lignes}}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesCroises]{Colonnes}}}}\do{%
+        \IfStrEq{\ListeCasesCroises[##1,##2,1]}{!}{%
+        }{%
+          \IfStrEq{\ListeCasesCroises[##1,##2,1]}{*}{%
+          }{%
+            \IfStrEq{\ListeCasesCroises[##1,##2,1]}{+}{%
+            }{%
+              \xintifboolexpr{\fpeval{\ListeCasesCroises[##1,##2,1]}>0}{\tikz\node[transform canvas={xshift=1mm,yshift=-1mm}] at (\fpeval{##1}-|\fpeval{##2}){\tiny\ListeCasesCroises[##1,##2,1]};}{}%
+            }%
+          }%
+        }%
+      }%
+    }%
+  \end{NiceTabular}%
+  \setsepchar{,}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsCroises.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsEmpiles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsEmpiles.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsEmpiles.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,34 @@
+%%%
+% Mots empilés
+%%%
+\setKVdefault[ClesMotEmpile]{Colonne=4,Solution=false,Couleur=black}
+
+\newcounter{CompteurMotEmpile}
+
+\newcommand\MotsEmpiles[2][]{%
+  \useKVdefault[ClesMotEmpile]%
+  \setKV[ClesMotEmpile]{#1}%
+  \setcounter{CompteurMotEmpile}{0}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeMotsEmpiles{#2}%
+  \xdef\ListeMotsEmpilesMax{0}%
+  \colorlet{MotEmpileCouleur}{\useKV[ClesMotEmpile]{Couleur}}%
+  \foreachitem\compteur\in\ListeMotsEmpiles{%
+    \StrLen{\ListeMotsEmpiles[\compteurcnt,2]}[\LongueurMot]%
+    \xintifboolexpr{\ListeMotsEmpilesMax<\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}{\xdef\ListeMotsEmpilesMax{\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}}{}%
+  }%
+  \begin{NiceTabular}{c|*{\fpeval{\ListeMotsEmpilesMax}}{m{10pt}}}%
+    \Block{1-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}}{}\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesMotEmpile]{Colonne}}}}\do{&}&$\downarrow$\xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpilesMax-\useKV[ClesMotEmpile]{Colonne}-1}}}\do{&}\\
+    \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpileslen}}}\do{%
+      \rule[-1.2ex]{0pt}{3.8ex}\stepcounter{CompteurMotEmpile}\Alph{CompteurMotEmpile}&\Block{1-\fpeval{\ListeMotsEmpiles[##1,1]}}{}\xintFor* ##2 in {\xintSeq {1}{\fpeval{\ListeMotsEmpiles[##1,1]}}}\do{%
+        &
+      }%
+      \StrLen{\ListeMotsEmpiles[##1,2]}[\LongueurMot]%
+      \xintFor* ##3 in {\xintSeq {1}{\fpeval{\LongueurMot}}}\do{%
+        \xintifForFirst{}{&}\Block[draw=black]{1-1}{\ifboolKV[ClesMotEmpile]{Solution}{\centering\arraybackslash\StrMid{\ListeMotsEmpiles[##1,2]}{##3}{##3}}{}}%%
+      }%
+      \\
+    }%
+    \CodeAfter\tikz\draw[line width=1.5pt,MotEmpileCouleur](row-2-|col-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}) rectangle (row-\fpeval{\ListeMotsEmpileslen+2}-|col-\fpeval{\useKV[ClesMotEmpile]{Colonne}+3});
+  \end{NiceTabular}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCMotsEmpiles.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNombreAstral.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCNombreAstral.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCNombreAstral.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,220 @@
+%%%
+% Nombre Astral
+%%%
+\setKVdefault[NombreAstral]{Solution=false,Graines=false,Echelle=1}
+\defKV[NombreAstral]{Graine=\setKV[NombreAstral]{Graines}}%
+
+\newtoks\toklisteNANombres%
+\newtoks\toklisteNAMelange%
+\def\UpdatetoksNANombres#1\nil{\addtotok\toklisteNANombres{"#1",}}%
+\def\UpdatetoksNAMelange#1\nil{\addtotok\toklisteNAMelange{#1,}}%
+
+\NewDocumentCommand\NombreAstral{o}{%
+  \toklisteNANombres{}%
+  \toklisteNAMelange{}%
+  \useKVdefault[NombreAstral]%
+  \setKV[NombreAstral]{#1}%
+  \ifboolKV[NombreAstral]{Graines}{\PfCGraineAlea{\useKV[NombreAstral]{Graine}}}{}%
+  \xdef\PfCNACible{\fpeval{2*randint(25,45)}}%
+  \xdef\PfCNAListeNombres{}%
+  \xintFor* ##1 in{\xintSeq{11}{\fpeval{floor(\PfCNACible/3)}}}\do{%
+    \xdef\PfCNAListeNombres{\PfCNAListeNombres ##1,}%
+  }%
+  \MelangeListe{\PfCNAListeNombres}{5}%
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\PfCNAListeNombresBase{\faa}%
+  \reademptyitems
+  \readlist*\PfCNAListeNombres{%
+    \PfCNAListeNombresBase[1],%
+    \PfCNAListeNombresBase[2],%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[5]-\PfCNAListeNombresBase[4]-\PfCNAListeNombresBase[3]},%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[4]-\PfCNAListeNombresBase[2]-\PfCNAListeNombresBase[5]},%
+    \PfCNAListeNombresBase[3],%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[3]-\PfCNAListeNombresBase[5]-\PfCNAListeNombresBase[1]},%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[2]-\PfCNAListeNombresBase[4]-\PfCNAListeNombresBase[1]},%
+    \fpeval{0.5*\PfCNACible+\PfCNAListeNombresBase[1]-\PfCNAListeNombresBase[2]-\PfCNAListeNombresBase[3]},%
+    \PfCNAListeNombresBase[4],%
+    \PfCNAListeNombresBase[5]%
+  }%
+  \foreachitem\compteur\in\PfCNAListeNombres{\expandafter\UpdatetoksNANombres\compteur\nil}%
+  \xdef\PfCNAListeAEffacer{1,2,3,4,5,6,7,8,9,10}%
+  \MelangeListe{\PfCNAListeAEffacer}{6}%
+  \ignoreemptyitems%
+  \readlist*\PfCNAListeMelange{\faa}%
+  \reademptyitems%
+  \foreachitem\compteur\in\PfCNAListeMelange{\expandafter\UpdatetoksNAMelange\compteur\nil}%
+  \BuildNombreAstral{\the\toklisteNANombres}{\the\toklisteNAMelange}%
+}%
+
+\NewDocumentCommand\BuildNombreAstral{m m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    Cible=\PfCNACible;
+    
+    boolean Solution;
+    Solution:=\useKV[NombreAstral]{Solution};
+
+    Echelle:=\useKV[NombreAstral]{Echelle};
+    
+    string Rappel[];
+    Rayon:=4cm;
+    
+    path cc,ca[];
+    cc=cercles((0,0),Rayon);
+    
+    pair A[],C[],D[];
+    for k=1 upto 5:
+    C[k]=pointarc(cc,90+(k-1)*72);
+    endfor;
+    
+    D1=C2+30*unitvector(C2-C4);
+    D2=C2+30*unitvector(C2-C5);
+    D3=C3+30*unitvector(C3-C1);
+    D4=C4+30*unitvector(C4-C1);
+    D5=C5+30*unitvector(C5-C3);
+    
+    drawarrow C2--D1;
+    drawarrow C2--D2;
+    drawarrow C3--D3;
+    drawarrow C4--D4;
+    drawarrow C5--D5;
+    
+    label.ulft(TEX("\bfseries\Large"&decimal(Cible)),D1);
+    label.lft(TEX("\bfseries\Large"&decimal(Cible)),D2);
+    label.llft(TEX("\bfseries\Large"&decimal(Cible)),D3);
+    label.lrt(TEX("\bfseries\Large"&decimal(Cible)),D4);
+    label.urt(TEX("\bfseries\Large"&decimal(Cible)),D5);
+    
+    trace polygone(C1,C3,C5,C2,C4) withpen (pencircle scaled 8);
+    A1=C1;
+    A2=C2;
+    A9=C3;
+    A10=C4;
+    A5=C5;
+    A3=segment(C1,C3) intersectionpoint segment(C2,C5);
+    A4=segment(C1,C4) intersectionpoint segment(C2,C5);
+    A6=segment(C1,C3) intersectionpoint segment(C2,C4);
+    A7=segment(C1,C4) intersectionpoint segment(C3,C5);
+    A8=segment(C2,C4) intersectionpoint segment(C3,C5);
+    for k=1 upto 10:
+    ca[k]=cercles(A[k],0.6u);
+    fill ca[k] withcolor white;
+    trace ca[k];
+    endfor;
+    vardef Affichage(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    Rappel[n]=p_;
+    label(TEX("\Large"&p_),A[n]);
+    endfor;
+    enddef;
+    
+    vardef Suppression(text t)=
+    k:=0;
+    for p_=t:
+    k:=k+1;
+    fill ca[p_] withcolor white;
+    trace ca[p_];
+    label(TEX("\Large"&Rappel[p_]),u*(-7,5.6-1.5k));
+    trace cercles(u*(-7,5.6-1.5k),0.6u);
+    endfor;
+    enddef;
+    
+    Affichage(#1);
+    if Solution=false:
+    Suppression(#2);
+    fi;
+    picture recap;%
+    recap:=currentpicture scaled Echelle;%
+    currentpicture:=nullpicture;%
+    draw recap;%
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+      Echelle:=\useKV[NombreAstral]{Echelle};
+      Cible=\PfCNACible;boolean Solution;Solution:=\useKV[NombreAstral]{Solution};
+      string Rappel[];
+      n:=0;
+      for p_=#1:
+      n:=n+1;
+      Rappel[n]=p_;
+      endfor;
+    }]
+    
+    Rayon:=4cm;
+    
+    path cc,ca[];
+    cc=cercles((0,0),Rayon);
+    
+    pair A[],C[],D[];
+    for k=1 upto 5:
+    C[k]=pointarc(cc,90+(k-1)*72);
+    endfor;
+    
+    D1=C2+30*unitvector(C2-C4);
+    D2=C2+30*unitvector(C2-C5);
+    D3=C3+30*unitvector(C3-C1);
+    D4=C4+30*unitvector(C4-C1);
+    D5=C5+30*unitvector(C5-C3);
+    
+    drawarrow C2--D1;
+    drawarrow C2--D2;
+    drawarrow C3--D3;
+    drawarrow C4--D4;
+    drawarrow C5--D5;
+    
+    label.ulft(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)&""),D1);
+    label.lft(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D2);
+    label.llft(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D3);
+    label.lrt(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D4);
+    label.urt(LATEX("\noexpand\bfseries\noexpand\Large"&decimal(Cible)),D5);
+    
+    trace polygone(C1,C3,C5,C2,C4) withpen (pencircle scaled 8);
+    A1=C1;
+    A2=C2;
+    A9=C3;
+    A10=C4;
+    A5=C5;
+    A3=segment(C1,C3) intersectionpoint segment(C2,C5);
+    A4=segment(C1,C4) intersectionpoint segment(C2,C5);
+    A6=segment(C1,C3) intersectionpoint segment(C2,C4);
+    A7=segment(C1,C4) intersectionpoint segment(C3,C5);
+    A8=segment(C2,C4) intersectionpoint segment(C3,C5);
+    for k=1 upto 10:
+    ca[k]=cercles(A[k],0.6u);
+    fill ca[k] withcolor white;
+    trace ca[k];
+    endfor;
+    vardef Affichage(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label(LATEX("\noexpand\Large"&Rappel[n]),A[n]);
+    endfor;
+    enddef;
+    
+    vardef Suppression(text t)=
+    k:=0;
+    for p_=t:
+    k:=k+1;
+    fill ca[p_] withcolor white;
+    trace ca[p_];
+    label(LATEX("\noexpand\Large"&Rappel[p_]),u*(-7,5.6-1.5k));
+    trace cercles(u*(-7,5.6-1.5k),0.6u);
+    endfor;
+    enddef;
+
+    Affichage(#1);
+    if Solution=false:
+    Suppression(#2);
+    fi;
+
+    picture recap;%
+    recap:=currentpicture scaled Echelle;%
+    currentpicture:=nullpicture;%
+    draw recap;%
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNombreAstral.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,581 @@
+
+
+
+
+%%%
+% Fonction
+%%%
+\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Epaisseur=1,Couleur=black,CouleurTrace=black,PointsCourbe=true,Codes=false,Origine={(0,0)},Vide=false}
+\defKV[ClesFonction]{Traces=\setKV[ClesFonction]{Codes}}%
+
+\newtoks\toklistePtsFn%pour la discipline
+
+\def\UpdatePtsFn#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{#1,(#2,#3),#4,}}%
+\def\UpdatePtsFN#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{(#2,#3),}}%
+
+\NewDocumentCommand\Fonction{o m}{%
+  \useKVdefault[ClesFonction]%
+  \setKV[ClesFonction]{#1}%
+  \ifboolKV[ClesFonction]{Trace}{%
+    \useKVdefault[TraceG]%
+    \setKV[TraceG]{#1}%
+    \MPTraceFonction[#1]{\useKV[ClesFonction]{Calcul}}%
+  }{%
+    \ifboolKV[ClesFonction]{Points}{%
+      \toklistePtsFn{}%
+      \setsepchar[*]{§*/}%\ignoreemptyitems%
+      \readlist*\ListePoints{#2}%
+      \ifboolKV[ClesFonction]{Catmull}{%
+        \xdef\PfCFooListePoints{(\ListePoints[1,2],\ListePoints[1,3]),}%
+        \foreachitem\compteur\in\ListePoints{%
+          \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
+        }%
+        \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\ListePointslen,2],\ListePoints[\ListePointslen,3]),}%
+        \MPCatmull{\PfCFooListePoints}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}%
+      }{%
+        \xdef\PfCFooListePoints{}
+        \ifboolKV[ClesFonction]{Tangentes}{%
+          \foreachitem\compteur\in\ListePoints{%
+            % \expandafter\UpdatePtsFn\compteur\nil%
+            \xdef\PfCFooListePoints{\PfCFooListePoints \ListePoints[\compteurcnt,1],(\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),\ListePoints[\compteurcnt,4],}%
+          }%
+        }{%
+          \foreachitem\compteur\in\ListePoints{%
+            % \expandafter\UpdatePtsFN\compteur\nil%
+            \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
+          }%
+        }%
+        \MPCourbeNew{\PfCFooListePoints}%\the\toklistePtsFn}%
+      }%
+    }{%
+      \setsepchar{,}\ignoreemptyitems%
+      \readlist*\ListeFonction{#2}%
+      \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
+      \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
+      \StrSubstitute{\tempa}{*}{}[\tempab]%
+      \ifboolKV[ClesFonction]{Ecriture}{%
+        \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}%
+      }{}%
+      \ifboolKV[ClesFonction]{Definition}{%
+        \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}%
+      }{}%
+      \ifboolKV[ClesFonction]{Tableau}{%
+        \buildtabfonction%
+      }{}%
+      \reademptyitems%
+    }%
+  }%
+}%
+
+\def\MPCourbeNew#1{%#2#3#4#5#6{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    x.u:=\useKV[ClesFonction]{PasX};
+    y.u:=\useKV[ClesFonction]{PasY};
+    X.u:=\useKV[ClesFonction]{UniteX};
+    Y.u:=\useKV[ClesFonction]{UniteY};
+    Epaisseur:=\useKV[ClesFonction]{Epaisseur};
+    
+    boolean Prolonge,Tangentes,PointsCourbe,Codes;
+    Prolonge=\useKV[ClesFonction]{Prolonge};
+    Tangentes=\useKV[ClesFonction]{Tangentes};
+    PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+    Codes=\useKV[ClesFonction]{Codes};
+
+    color CouleurTrace;
+    CouleurTrace=\useKV[ClesFonction]{CouleurTrace};
+
+    def enplace=
+    xscaled X.u yscaled Y.u
+    enddef;
+
+    vardef placepoint(expr q,r)=
+    (q,r)*cm enplace
+    enddef;
+    
+    numeric dirav[],dirap[];
+    pair Fn[],Gn[];
+    n=0;
+    if Tangentes:
+    for p_=#1:
+    if (n mod 3)=0:
+    dirav[n div 3]=p_;
+    fi;
+    if (n mod 3)=1:
+    Gn[n div 3]=p_;
+    Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    fi;
+    if (n mod 3)=2:
+    dirap[n div 3]=p_;
+    fi;
+    n:=n+1;
+    endfor;
+    N:=(n-1) div 3;
+    else:
+    for p_=#1:
+    Gn[n]=p_;
+    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    n:=n+1;
+    endfor;
+    N:=(n-1);
+    fi;
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    for k=0 upto N:
+    if xpart(Gn[k])<MinX:
+    MinX:=xpart(Gn[k]);
+    fi;
+    if xpart(Gn[k])>MaxX:
+    MaxX:=xpart(Gn[k]);
+    fi;
+    if ypart(Gn[k])<MinY:
+    MinY:=ypart(Gn[k]);
+    fi;
+    if ypart(Gn[k])>MaxY:
+    MaxY:=ypart(Gn[k]);
+    fi;
+    endfor;
+    if MinY<0:
+    if MinY<>ceiling(MinY):
+    MinY:=ceiling(MinY)-1;
+    fi;
+    fi;
+    if MinX<0:
+    if MinX<>ceiling(MinX):
+    MinX:=ceiling(MinX)-1;
+    fi;
+    fi;
+    if MaxY<>ceiling(MaxY):
+    MaxY:=ceiling(MaxY);
+    fi;
+    if MaxX<>ceiling(MaxX):
+    MaxX:=ceiling(MaxX);
+    fi;
+    if MaxX<1:
+    MaxX:=1;
+    fi;
+    if MaxY<1:
+    MaxY:=1;
+    fi;
+    if Prolonge:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX step x.u until MaxX:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    else:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    fi;
+    if Prolonge:    
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+    else:
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0*cm,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0*cm)--((MaxX+1)*X.u*cm,0*cm);
+    fi;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+    draw if Tangentes:
+    Fn[0]{dir dirap[0]}
+    for k=1 upto (N-1):
+    ..{dir dirav[k]}Fn[k]{dir dirap[k]}
+    endfor
+    ..{dir dirav[N]}Fn[N]
+    else:
+    Fn[0]
+    for k=1 upto N:
+    ..Fn[k]
+    endfor fi withpen pencircle scaled Epaisseur withcolor CouleurTrace;
+    if PointsCourbe:
+    if Prolonge:
+    for k=1 upto N-1:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    else:
+    for k=0 upto N:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    fi;
+    fi;
+    if Codes:
+    \useKV[ClesFonction]{Traces};
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+      x.u:=\useKV[ClesFonction]{PasX};y.u:=\useKV[ClesFonction]{PasY};
+      X.u:=\useKV[ClesFonction]{UniteX};Y.u:=\useKV[ClesFonction]{UniteY};
+      Epaisseur:=\useKV[ClesFonction]{Epaisseur};
+      boolean Prolonge,Tangentes,PointsCourbe,Codes;
+      Prolonge=\useKV[ClesFonction]{Prolonge};
+      Tangentes=\useKV[ClesFonction]{Tangentes};
+      PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+      Codes=\useKV[ClesFonction]{Codes};
+      color CouleurTrace;
+      CouleurTrace=\useKV[ClesFonction]{CouleurTrace};
+      }]
+      def enplace=
+      xscaled X.u yscaled Y.u
+      enddef;
+      vardef placepoint(expr q,r)=
+      (q,r)*cm enplace
+      enddef;
+    numeric dirav[],dirap[];
+    pair Fn[],Gn[];
+    n=0;
+    if Tangentes:
+    for p_=#1:
+    if (n mod 3)=0:
+    dirav[n div 3]=p_;
+    fi;
+    if (n mod 3)=1:
+    Gn[n div 3]=p_;
+    Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    fi;
+    if (n mod 3)=2:
+    dirap[n div 3]=p_;
+    fi;
+    n:=n+1;
+    endfor;
+    N:=(n-1) div 3;
+    else:
+    for p_=#1:
+    Gn[n]=p_;
+    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    n:=n+1;
+    endfor;
+    N:=(n-1);
+    fi;
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    for k=0 upto N:
+    if xpart(Gn[k])<MinX:
+    MinX:=xpart(Gn[k]);
+    fi;
+    if xpart(Gn[k])>MaxX:
+    MaxX:=xpart(Gn[k]);
+    fi;
+    if ypart(Gn[k])<MinY:
+    MinY:=ypart(Gn[k]);
+    fi;
+    if ypart(Gn[k])>MaxY:
+    MaxY:=ypart(Gn[k]);
+    fi;
+    endfor;
+    if MinY<0:
+    if MinY<>ceiling(MinY):
+    MinY:=ceiling(MinY)-1;
+    fi;
+    fi;
+    if MinX<0:
+    if MinX<>ceiling(MinX):
+    MinX:=ceiling(MinX)-1;
+    fi;
+    fi;
+    if MaxY<>ceiling(MaxY):
+    MaxY:=ceiling(MaxY);
+    fi;
+    if MaxX<>ceiling(MaxX):
+    MaxX:=ceiling(MaxX);
+    fi;
+    if MaxX<1:
+    MaxX:=1;
+    fi;
+    if MaxY<1:
+    MaxY:=1;
+    fi;
+    if Prolonge:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX step x.u until MaxX:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    else:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    fi;
+    if Prolonge:    
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+    else:
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0*cm,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0*cm)--((MaxX+1)*X.u*cm,0*cm);
+    fi;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+    draw if Tangentes:
+    Fn[0]{dir dirap[0]}
+    for k=1 upto (N-1):
+    ..{dir dirav[k]}Fn[k]{dir dirap[k]}
+    endfor
+    ..{dir dirav[N]}Fn[N]
+    else:
+    Fn[0]
+    for k=1 upto N:
+    ..Fn[k]
+    endfor fi withpen pencircle scaled Epaisseur withcolor CouleurTrace;
+    if PointsCourbe:
+    if Prolonge:
+    for k=1 upto N-1:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    else:
+    for k=0 upto N:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    fi;
+    fi;
+  \end{mpost}
+  \fi
+}
+
+\def\MPCatmull#1#2#3#4#5{%
+  % #1 la liste des points
+  % #2: pas en x
+  % #3: pas en y
+  % #4: unit\'e en x
+  % #5: unit\'e en y
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean PointsCourbe;
+    PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+
+    boolean Code;
+    Code=\useKV[ClesFonction]{Codes};
+        
+    x.u:=#2;
+    y.u:=#3;
+    X.u:=#4;
+    Y.u:=#5;
+
+    def enplace=
+    xscaled X.u yscaled Y.u
+    enddef;
+
+    vardef placepoint(expr q,r)=
+    (q,r)*cm enplace
+    enddef;
+    
+    pair Fn[],Gn[];
+    n=0;
+    for p_=#1:
+    Gn[n]=p_;
+    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    n:=n+1;
+    endfor;
+    N:=(n-1);
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    debutbalai=0;
+    finbalai=N;
+    if \useKV[ClesFonction]{Prolonge}:
+    debutbalai:=2;
+    finbalai:=N-2;
+    fi;
+    for k=debutbalai upto finbalai:
+    if xpart(Gn[k])<MinX:
+    MinX:=xpart(Gn[k]);
+    fi;
+    if xpart(Gn[k])>MaxX:
+    MaxX:=xpart(Gn[k]);
+    fi;
+    if ypart(Gn[k])<MinY:
+    MinY:=ypart(Gn[k]);
+    fi;
+    if ypart(Gn[k])>MaxY:
+    MaxY:=ypart(Gn[k]);
+    fi;
+    endfor;
+    if MaxY<1:
+    MaxY:=2;
+    fi;
+    if MinY>-1:
+    MinY:=-2;
+    fi;
+    if MinY<0:
+    if MinY<>ceiling(MinY):
+    MinY:=ceiling(MinY)-1;
+    fi;
+    fi;
+    if MinX<0:
+    if MinX<>ceiling(MinX):
+    MinX:=ceiling(MinX)-1;
+    fi;
+    fi;
+    if MaxY<>ceiling(MaxY):
+    MaxY:=ceiling(MaxY);
+    fi;
+    if MaxX<>ceiling(MaxX):
+    MaxX:=ceiling(MaxX);
+    fi;
+    if MaxX<1:
+    MaxX:=1;
+    fi;
+    if MaxY<1:
+    MaxY:=1;
+    fi;
+    %
+    path cadreexterieur;
+    cadreexterieur=(((MinX-1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX-1)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
+    draw Fn[1]
+    for k=2 upto N-1:
+    ..{dir angle(Fn[k+1]-Fn[k-1])}Fn[k]{dir angle(Fn[k+1]-Fn[k-1])}
+    endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur} withcolor \useKV[ClesFonction]{Couleur};
+    clip currentpicture to cadreexterieur;
+    picture RetiensCourbe;
+    RetiensCourbe=currentpicture;
+    currentpicture:=nullpicture;
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    if PointsCourbe:
+    for k=debutbalai upto finbalai:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    fi;
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+    %
+    draw RetiensCourbe;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+    if Code:
+    \useKV[ClesFonction]{Traces};
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur}; color CouleurCourbe; CouleurCourbe=\useKV[ClesFonction]{Couleur};boolean PointsCourbe;PointsCourbe=\useKV[ClesFonction]{PointsCourbe};}]
+        x.u:=#2;
+    y.u:=#3;
+    X.u:=#4;
+    Y.u:=#5;
+
+    pair Fn[],Gn[];
+    n=0;
+    for p_=#1:
+    Gn[n]=p_;
+    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    n:=n+1;
+    endfor;
+    N:=(n-1);
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    debutbalai=0;
+    finbalai=N;
+    if \useKV[ClesFonction]{Prolonge}:
+    debutbalai:=2;
+    finbalai:=N-2;
+    fi;
+    for k=debutbalai upto finbalai:
+    if xpart(Gn[k])<MinX:
+    MinX:=xpart(Gn[k]);
+    fi;
+    if xpart(Gn[k])>MaxX:
+    MaxX:=xpart(Gn[k]);
+    fi;
+    if ypart(Gn[k])<MinY:
+    MinY:=ypart(Gn[k]);
+    fi;
+    if ypart(Gn[k])>MaxY:
+    MaxY:=ypart(Gn[k]);
+    fi;
+    endfor;
+    if MaxY<1:
+    MaxY:=2;
+    fi;
+    if MinY>-1:
+    MinY:=-2;
+    fi;
+    if MinY<0:
+    if MinY<>ceiling(MinY):
+    MinY:=ceiling(MinY)-1;
+    fi;
+    fi;
+    if MinX<0:
+    if MinX<>ceiling(MinX):
+    MinX:=ceiling(MinX)-1;
+    fi;
+    fi;
+    if MaxY<>ceiling(MaxY):
+    MaxY:=ceiling(MaxY);
+    fi;
+    if MaxX<>ceiling(MaxX):
+    MaxX:=ceiling(MaxX);
+    fi;
+    if MaxX<1:
+    MaxX:=1;
+    fi;
+    if MaxY<1:
+    MaxY:=1;
+    fi;
+    %
+    path cadreexterieur;
+    cadreexterieur=(((MinX-1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX-1)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
+    draw Fn[1]
+    for k=2 upto N-1:
+    ..{dir angle(Fn[k+1]-Fn[k-1])}Fn[k]{dir angle(Fn[k+1]-Fn[k-1])}
+    endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur} withcolor \useKV[ClesFonction]{Couleur};
+    clip currentpicture to cadreexterieur;
+    picture RetiensCourbe;
+    RetiensCourbe=currentpicture;
+    currentpicture:=nullpicture;
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    if PointsCourbe:
+    for k=debutbalai upto finbalai:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    fi;
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+    %
+    draw RetiensCourbe;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+  \end{mpost}
+  \fi
+}%
+
+\def\buildtabfonction{%
+  \[%
+    \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}%
+      \hline%
+      \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\
+      \hline%
+      \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}}%
+      \\\hline
+    \end{array}%
+  \]%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCNotionFonction.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCOperationsTrou.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCOperationsTrou.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCOperationsTrou.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,71 @@
+%%%
+% Op\'erations pos\'es à trou
+%%%
+%% D'après https://tex.stackexchange.com/questions/277246/drawing-a-circle-around-the-numbers-in-xlop-package
+
+\newcommand\PfCchiffre[2]{\tikz[remember picture] \node[inner sep=0pt](#1){#2};}
+
+\newcommand\PfCentoure[2]{\tikz[remember picture,overlay] \node[preaction={draw={\useKV[ClesOperations]{CouleurCadre}},ultra thick,opacity=1,
+transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,inner sep=.55em,fit=(#1.center)(#2.center)]{} ;}
+
+\newcounter{divxlop}%
+\newcounter{mulxlop}%
+\newcounter{addxlop}%
+\newcounter{subxlop}%
+
+\setKVdefault[ClesOperations]{Solution=false,CouleurCadre=LightSteelBlue,CouleurSolution=red,CouleurFond=white,CouleurVirgule=white}
+
+\newcommand\Division[3][]{%
+  \useKVdefault[ClesOperations]%
+  \setKV[ClesOperations]{#1}%
+  \setcounter{divxlop}{0}%
+  \ifboolKV[ClesOperations]{Solution}{\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurSolution}}}{\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurFond}}}%
+  \opidiv[lineheight=1.5em,columnwidth=1.25em,displayintermediary=all,voperator=bottom,intermediarystyle=\stepcounter{divxlop}\color{PfCSolOp}\PfCchiffre{A\thedivxlop},remainderstyle=\stepcounter{divxlop}\color{PfCSolOp}\PfCchiffre{A\thedivxlop},resultstyle=\stepcounter{divxlop}\color{PfCSolOp}\PfCchiffre{A\thedivxlop}]{#2}{#3}%
+  \foreach \i in {1,...,\thedivxlop}{%
+    \PfCentoure{A\i}{A\i}%
+  }%
+}%
+
+\newcommand\DivisionD[3][]{%
+  \useKVdefault[ClesOperations]%
+  \setKV[ClesOperations]{#1}%
+  \setcounter{divxlop}{0}%
+  \ifboolKV[ClesOperations]{Solution}{\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurSolution}}\colorlet{PfCCouleurVirgule}{PfCSolOp}}{\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurFond}}\colorlet{PfCCouleurVirgule}{\useKV[ClesOperations]{CouleurVirgule}}}%
+  \opdiv[decimalsepsymbol={,},lineheight=1.5em,columnwidth=1.5em,displayintermediary=all,voperator=bottom,intermediarystyle=\stepcounter{divxlop}\color{PfCSolOp}\PfCchiffre{A\thedivxlop},remainderstyle=\stepcounter{divxlop}\color{PfCSolOp}\PfCchiffre{A\thedivxlop},resultstyle=\stepcounter{divxlop}\color{PfCSolOp}\PfCchiffre{A\thedivxlop},resultstyle.d=\color{PfCCouleurVirgule}]{#2}{#3}%
+  \foreach \i in {1,...,\thedivxlop}{%
+    \PfCentoure{A\i}{A\i}%
+  }%
+}%
+
+\newcommand\Multiplication[3][]{%
+  \useKVdefault[ClesOperations]%
+  \setKV[ClesOperations]{#1}%
+  \setcounter{mulxlop}{0}%
+  \ifboolKV[ClesOperations]{Solution}{\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurSolution}}\colorlet{PfCCouleurVirgule}{PfCSolOp}}{\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurFond}}\colorlet{PfCCouleurVirgule}{\useKV[ClesOperations]{CouleurVirgule}}}%
+  \opmul[decimalsepsymbol={,},lineheight=2em,columnwidth=1.5em,displayintermediary=all,voperator=bottom,intermediarystyle=\stepcounter{mulxlop}\color{PfCSolOp}\PfCchiffre{A\themulxlop},resultstyle=\stepcounter{mulxlop}\color{PfCSolOp}\PfCchiffre{A\themulxlop},resultstyle.d=\color{PfCCouleurVirgule}]{#2}{#3}%
+  \foreach \i in {1,...,\themulxlop}{%
+    \PfCentoure{A\i}{A\i}%
+  }%
+}%
+
+\newcommand\Addition[3][]{%
+  \useKVdefault[ClesOperations]%
+  \setKV[ClesOperations]{#1}%
+  \setcounter{addxlop}{0}%
+  \ifboolKV[ClesOperations]{Solution}{\opset{carryadd,carrystyle=\color{PfCSolOp}\scriptsize}\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurSolution}}\colorlet{PfCCouleurVirgule}{PfCSolOp}}{\opset{carryadd=false}\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurFond}}\colorlet{PfCCouleurVirgule}{\useKV[ClesOperations]{CouleurVirgule}}}%
+  \opadd[decimalsepsymbol={,},lineheight=1.75em,columnwidth=1.5em,displayintermediary=all,voperator=bottom,intermediarystyle=\stepcounter{addxlop}\color{PfCSolOp}\PfCchiffre{A\theaddxlop},resultstyle=\stepcounter{addxlop}\color{PfCSolOp}\PfCchiffre{A\theaddxlop},resultstyle.d=\color{PfCCouleurVirgule}]{#2}{#3}
+  \foreach \i in {1,...,\theaddxlop}{%
+    \PfCentoure{A\i}{A\i}%
+  }%
+}%
+
+\newcommand\Soustraction[3][]{%
+  \useKVdefault[ClesOperations]%
+  \setKV[ClesOperations]{#1}%
+  \setcounter{subxlop}{0}%
+  \ifboolKV[ClesOperations]{Solution}{\opset{carrysub,carrystyle=\color{PfCSolOp}\scriptsize}\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurSolution}}\colorlet{PfCCouleurVirgule}{PfCSolOp}}{\opset{carrysub=false}\colorlet{PfCSolOp}{\useKV[ClesOperations]{CouleurFond}}\colorlet{PfCCouleurVirgule}{\useKV[ClesOperations]{CouleurVirgule}}}%
+  \opsub[decimalsepsymbol={,},lineheight=1.75em,columnwidth=1.5em,displayintermediary=all,voperator=bottom,intermediarystyle=\stepcounter{subxlop}\color{PfCSolOp}\PfCchiffre{A\thesubxlop},resultstyle=\stepcounter{subxlop}\color{PfCSolOp}\PfCchiffre{A\thesubxlop},resultstyle.d=\color{PfCCouleurVirgule}]{#2}{#3}%
+  \foreach \i in {1,...,\thesubxlop}{%
+    \PfCentoure{A\i}{A\i}
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCOperationsTrou.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPapiers.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPapiers.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPapiers.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,457 @@
+%%%
+% Papiers
+%%%
+\setKVdefault[Papiers]{Cinq=true,Seyes=false,Echelle=8,Isometrique=false,IsometriquePointe=false,Millimetre=false,Triangle=false,Largeur=5,Hauteur=4,Couleur=black,Grille=-1,GrillePointe=-1,PageEntiere=false,ZoneTexte=false,Baseline=false,CodeAfter=false}%
+\defKV[Papiers]{Traces=\setKV[Papiers]{CodeAfter}}
+
+%\def\MPBaseLineSkip#1#2#3{%à retravailler : ne fonctionne pas :(
+%  %
+%  \ifluatex
+%  \mplibforcehmode
+%  \begin{mplibcode}
+%    path horizon,verticon;
+%    horizon=(0,0)--(#1*cm,0);
+%    %verticon=(0,0)--(0,#2*cm);
+%    drawoptions(withcolor #3);
+%    %for k=0 step 0.5 until #1:
+%    %draw verticon shifted((k*cm,0));
+%    %endfor;
+%    for k=(#2-(\mpdim{1.6ex}/1cm)) step (-\mpdim{\baselineskip}/1cm) until 0:
+%    draw horizon shifted((0,k*cm));
+%    endfor;
+%    drawoptions(withcolor blue);
+%    for k=#2 step (-\mpdim{\baselineskip}/1cm) until 0:
+%    draw horizon shifted((0,k*cm));
+%    endfor;
+%  \end{mplibcode}
+%  \fi
+%}
+
+\def\MPGrille#1#2#3#4{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step (#4*100) until (#1*100):
+    draw verticon shifted(((k/100)*cm,0));
+    endfor;
+    for k=0 step (#4*100) until (#2*100):
+    draw horizon shifted((0,(k/100)*cm));
+    endfor;
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}%
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 0.5 until #1:
+    draw verticon shifted((k*cm,0));
+    endfor;
+    for k=0 step 0.5 until #2:
+    draw horizon shifted((0,k*cm));
+    endfor;
+  \end{mpost}%
+  \fi%
+}%
+
+\def\MPGrillePointe#1#2#3#4{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    drawoptions(withcolor #3);
+    for k=0 step (#4*100) until (#1*100):
+    for l=0 step (#4*100) until (#2*100):
+    fill (cercles((0,0),1pt) shifted(((k/100)*cm,(l/100)*cm)));
+    endfor;
+    endfor;
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}%
+    drawoptions(withcolor #3);
+    for k=0 step (#4*100) until (#1*100):
+    for l=0 step (#4*100) until (#2*100):
+    fill (cercles((0,0),0.5pt) shifted(((k/100)*cm,(l/100)*cm)));
+    endfor;
+    endfor;
+  \end{mpost}%
+  \fi%
+}%
+
+\def\MPCinq#1#2#3{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 0.5 until #1:
+    draw verticon shifted((k*cm,0));
+    endfor;
+    for k=0 step 0.5 until #2:
+    draw horizon shifted((0,k*cm));
+    endfor;
+    if \useKV[Papiers]{CodeAfter}:
+    \useKV[Papiers]{Traces};
+    fi;
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 0.5 until #1:
+    draw verticon shifted((k*cm,0));
+    endfor;
+    for k=0 step 0.5 until #2:
+    draw horizon shifted((0,k*cm));
+    endfor;
+  \end{mpost}%
+  \fi%
+}%
+
+\def\MPSeyes#1#2#3{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    u:=\useKV[Papiers]{Echelle};
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step u until (#1*10):
+    draw verticon shifted(((k/10)*cm,0));
+    endfor;
+    for k=0 step (u/4) until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5;
+    endfor;
+    for k=0 step u until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25;
+    endfor;
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}[mpsettings={u:=\useKV[Papiers]{Echelle};}]%
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step u until (#1*10):
+    draw verticon shifted(((k/10)*cm,0));
+    endfor;
+    for k=0 step (u/4) until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5;
+    endfor;
+    for k=0 step u until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25;
+    endfor;
+  \end{mpost}
+  \fi%
+}%
+
+\def\MPMillimetre#1#2#3{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 1 until (#1*10):
+    draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2;
+    endfor;
+    for k=0 step 5 until (#1*10):
+    draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5;
+    endfor;
+    for k=0 step 1 until (#1):
+    draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25;
+    endfor;
+    for k=0 step 1 until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2;
+    endfor;
+    for k=0 step 5 until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5;
+    endfor;
+    for k=0 step 1 until (#2):
+    draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25;
+    endfor;
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}%
+    path horizon,verticon;
+    horizon=(0,0)--(#1*cm,0);
+    verticon=(0,0)--(0,#2*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 1 until (#1*10):
+    draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2;
+    endfor;
+    for k=0 step 5 until (#1*10):
+    draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5;
+    endfor;
+    for k=0 step 1 until (#1):
+    draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25;
+    endfor;
+    for k=0 step 1 until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2;
+    endfor;
+    for k=0 step 5 until (#2*10):
+    draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5;
+    endfor;
+    for k=0 step 1 until (#2):
+    draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25;
+    endfor;
+  \end{mpost}%
+  \fi%
+}%
+
+\def\MPIsometrique#1#2#3{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    path diagon,antidiagon;
+    diagon=(0,0)--#2*(sqrt(3)*cm,1*cm);
+    antidiagon=(0,0)--#2*(-sqrt(3)*cm,1*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 1 until (#1):
+    draw diagon shifted((k*cm,0));
+    draw antidiagon shifted((k*cm,0));
+    endfor;
+    for k=0 step (sqrt(3)/3) until (#2):
+    draw diagon shifted((0,k*cm));
+    draw antidiagon shifted((#1*cm,k*cm));
+    endfor;
+    clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm));
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}%
+    path diagon,antidiagon;
+    diagon=(0,0)--#2*(sqrt(3)*cm,1*cm);
+    antidiagon=(0,0)--#2*(-sqrt(3)*cm,1*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 1 until (#1):
+    draw diagon shifted((k*cm,0));
+    draw antidiagon shifted((k*cm,0));
+    endfor;
+    for k=0 step (sqrt(3)/3) until (#2):
+    draw diagon shifted((0,k*cm));
+    draw antidiagon shifted((#1*cm,k*cm));
+    endfor;
+    clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm));
+  \end{mpost}%
+  \fi%
+}%
+
+\def\MPIsometriquePointe#1#2#3{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    pair diagon,antidiagon;
+    diagon=(1pt,1pt);
+    antidiagon=(1pt+0.5cm,1pt+0.5*(sqrt(3)*1cm/3));
+    drawoptions(withcolor #3);
+    for k=0 step (sqrt(3)/3) until (#2):
+    for l=0 step 1 until (#1):
+    fill (cercles(diagon,1pt) shifted((l*cm,k*cm)));
+    fill (cercles(antidiagon,1pt) shifted((l*cm,k*cm)));
+    endfor;
+    endfor;
+    clip currentpicture to polygone((0,0),(#1*cm+2pt,0),(#1*cm+2pt,#2*cm+1pt),(0,#2*cm+1pt));
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}%
+    pair diagon,antidiagon;
+    diagon=(1pt,1pt);
+    antidiagon=(1pt+0.5cm,1pt+0.5*(sqrt(3)*1cm/3));
+    drawoptions(withcolor #3);
+    for k=0 step (sqrt(3)/3) until (#2):
+    for l=0 step 1 until (#1):
+    fill (cercles(diagon,1pt) shifted((l*cm,k*cm)));
+    fill (cercles(antidiagon,1pt) shifted((l*cm,k*cm)));
+    endfor;
+    endfor;
+    clip currentpicture to polygone((0,0),(#1*cm+2pt,0),(#1*cm+2pt,#2*cm+1pt),(0,#2*cm+1pt));
+  \end{mpost}%
+  \fi%
+}%
+
+\def\MPTriangulaire#1#2#3{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    path horizon,diagon,antidiagon;
+    horizon=(0,0)--(#1*cm,0);
+    diagon=(0,0)--#2*(sqrt(3)*cm/3,1*cm);
+    antidiagon=(0,0)--#2*(-sqrt(3)*cm/3,1*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 1 until #1:
+    draw diagon shifted((k*cm,0));
+    endfor;
+    for k=0 step (sqrt(3)) until (#2):
+    draw diagon shifted((0,k*cm));
+    endfor;
+    for k=0 step 1 until (#1):
+    draw antidiagon shifted((k*cm,0));
+    endfor;
+    for k=0 step (sqrt(3)) until (#2):
+    draw antidiagon shifted((#1*cm,k*cm));
+    endfor;
+    for k=0 step (sqrt(3)/2) until (#2):
+    draw horizon shifted((0,k*cm));
+    endfor;
+    clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm));
+  \end{mplibcode}%
+  \else%
+  \begin{mpost}%
+    path horizon,diagon,antidiagon;
+    horizon=(0,0)--(#1*cm,0);
+    diagon=(0,0)--#2*(sqrt(3)*cm/3,1*cm);
+    antidiagon=(0,0)--#2*(-sqrt(3)*cm/3,1*cm);
+    drawoptions(withcolor #3);
+    for k=0 step 1 until #1:
+    draw diagon shifted((k*cm,0));
+    endfor;
+    for k=0 step (sqrt(3)) until (#2):
+    draw diagon shifted((0,k*cm));
+    endfor;
+    for k=0 step 1 until (#1):
+    draw antidiagon shifted((k*cm,0));
+    endfor;
+    for k=0 step (sqrt(3)) until (#2):
+    draw antidiagon shifted((#1*cm,k*cm));
+    endfor;
+    for k=0 step (sqrt(3)/2) until (#2):
+    draw horizon shifted((0,k*cm));
+    endfor;
+    clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm));
+  \end{mpost}%
+  \fi%
+}%
+
+\RequirePackage{ifoddpage}
+
+\newlength{\PapierLeftCurrent}
+
+\newcommand\Papiers[1][]{%
+  \useKVdefault[Papiers]%
+  \setKV[Papiers]{#1}%
+  \xdef\PapierLargeur{\useKV[Papiers]{Largeur}}%
+  \xdef\PapierHauteur{\useKV[Papiers]{Hauteur}}%
+  \xdef\PapierCouleur{\useKV[Papiers]{Couleur}}%
+  \xdef\PapierGrille{\useKV[Papiers]{Grille}}%
+  \xdef\PapierGrillePointe{\useKV[Papiers]{GrillePointe}}%
+  \ifboolKV[Papiers]{ZoneTexte}{%
+    \checkoddpage\ifoddpage%
+    \setlength{\PapierLeftCurrent}{\oddsidemargin}%
+    \else%
+    \setlength{\PapierLeftCurrent}{\evensidemargin}%
+    \fi%
+    \xdef\PapierLeft{\the\dimexpr1in+\PapierLeftCurrent}%
+    \xdef\PapierBottom{\fpeval{\paperheight-\textheight-\voffset-\headheight-\topmargin-\headsep-1in}}%
+    \xdef\PapierHauteur{\fpeval{\textheight/1cm}}%
+    \xdef\PapierLargeur{\fpeval{\textwidth/1cm}}%
+    \begin{tikzpicture}[remember picture,overlay]%
+      \node[anchor=south west,inner sep=0pt,transform canvas={xshift=\PapierLeft,yshift=\PapierBottom}] at (current page.south west) {%
+        \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0}{%
+          \MPGrillePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrillePointe}%
+        }{%
+          \xintifboolexpr{\useKV[Papiers]{Grille}>0}{%
+            \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}%
+          }{\ifboolKV[Papiers]{Baseline}{%
+              \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+            }{%
+              \ifboolKV[Papiers]{IsometriquePointe}{%
+                \MPIsometriquePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+              }{%
+                \ifboolKV[Papiers]{Triangle}{%
+                  \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                }{\ifboolKV[Papiers]{Millimetre}{%
+                    \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                  }{\ifboolKV[Papiers]{Isometrique}{%
+                      \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                    }{\ifboolKV[Papiers]{Seyes}{%
+                        \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                      }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                      }%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      };%
+    \end{tikzpicture}%
+  }{%
+    \ifboolKV[Papiers]{PageEntiere}{%
+      \checkoddpage\ifoddpage%
+      \setlength{\PapierLeftCurrent}{\oddsidemargin}%
+      \else%
+      \setlength{\PapierLeftCurrent}{\evensidemargin}%
+      \fi%
+      \xdef\PapierLeft{\the\dimexpr1in+\PapierLeftCurrent}%
+      \xdef\PapierBottom{\fpeval{\paperheight-\textheight-\voffset-\headheight-\topmargin-\headsep-1in}}%
+      \xdef\PapierHauteur{\fpeval{\paperheight/1cm}}%
+      \xdef\PapierLargeur{\fpeval{\paperwidth/1cm}}%
+      \begin{tikzpicture}[remember picture,overlay]%
+        \node[anchor=south west,inner sep=0pt] at (current page.south west) {%
+          \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0}{%
+            \MPGrillePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrillePointe}%
+          }{%
+            \xintifboolexpr{\useKV[Papiers]{Grille}>0}{%
+              \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}%
+            }{\ifboolKV[Papiers]{IsometriquePointe}{%
+                \MPIsometriquePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+              }{\ifboolKV[Papiers]{Triangle}{%
+                  \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                }{\ifboolKV[Papiers]{Millimetre}{%
+                    \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                  }{\ifboolKV[Papiers]{Isometrique}{%
+                      \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                    }{\ifboolKV[Papiers]{Seyes}{%
+                        \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                      }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                      }%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        };%
+      \end{tikzpicture}%
+    }{%
+      \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0}{%
+        \MPGrillePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrillePointe}%
+      }{%
+        \xintifboolexpr{\useKV[Papiers]{Grille}>0}{%
+          \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}%
+        }{\ifboolKV[Papiers]{Baseline}{%
+            \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+          }{%
+            \ifboolKV[Papiers]{IsometriquePointe}{%
+              \MPIsometriquePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+            }{%
+              \ifboolKV[Papiers]{Triangle}{%
+                \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+              }{\ifboolKV[Papiers]{Millimetre}{%
+                  \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                }{\ifboolKV[Papiers]{Isometrique}{%
+                    \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                  }{\ifboolKV[Papiers]{Seyes}{%
+                      \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                    }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPapiers.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPixelArt.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPixelArt.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPixelArt.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,143 @@
+%%%
+% PixelArt
+%%%
+\newtoks\toklistePANombre%
+\def\UpdatetoksPANombre#1\nil{\addtotok\toklistePANombre{"#1",}}%
+
+\setKVdefault[ClesPixelArt]{Largeur=29,Hauteur=29,Solution=false,Lettres=ABCDEFGHIJK,Nombres=false,ListeCouleurs={Orange,Red,LightGray,Maroon,Purple,black,black,Plum,Orange,White,White},Unite=5mm}
+\defKV[ClesPixelArt]{ListeNombres=\setKV[ClesPixelArt]{Nombres}}
+
+\NewDocumentCommand\PixelArt{o m}{%
+  \toklistePANombre{}%
+  \useKVdefault[ClesPixelArt]%
+  \setKV[ClesPixelArt]{#1}%
+  \xdef\ListeAvantCouleurs{\useKV[ClesPixelArt]{ListeCouleurs}}%
+  \xdef\ListeAvantNombres{\useKV[ClesPixelArt]{ListeNombres}}%
+  \setsepchar{,}%
+  \readlist*\ListePANombre{\ListeAvantNombres}%
+  \foreachitem\compteur\in\ListePANombre{\expandafter\UpdatetoksPANombre\compteur\nil}%
+  \BuildPixelArt{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}%
+}%
+
+\NewDocumentCommand\BuildPixelArt{m m m m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    largeur:=\useKV[ClesPixelArt]{Largeur};
+    hauteur:=\useKV[ClesPixelArt]{Hauteur};
+    Unite:=\useKV[ClesPixelArt]{Unite};
+    boolean Solution,Nombres;
+    Solution:=\useKV[ClesPixelArt]{Solution};
+    Nombres:=\useKV[ClesPixelArt]{Nombres};
+    string BaseLettres;
+    BaseLettres=str #2;
+
+    color ColorEntier[],ColFond;
+    n:=0;
+    for p_=#3:
+    n:=n+1;
+    ColorEntier[n]:=p_;
+    endfor;
+
+    string RetiensNombres[];
+    if Nombres:
+    n:=0;
+    for p_=#4:
+    n:=n+1;
+    RetiensNombres[n]=p_;
+    endfor;
+    fi;
+        
+    vardef Lecturecsv(expr nomfichier)=
+    for h=hauteur downto 1:
+    string p_;
+    p_=readfrom nomfichier;
+    l:=0;
+    for p=0 step 2 until 2*largeur-2:
+    l:=l+1;
+    if (substring(p,p+1) of p_)="-":
+    else:
+    if Nombres:
+    for m=0 upto (length BaseLettres-1):
+    if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres:
+    label(TEX(RetiensNombres[m+1]),((l-1)*Unite,(h-1)*Unite));
+    fi;
+    endfor;
+    else:
+    label(TEX(substring(p,p+1) of p_),((l-1)*Unite,(h-1)*Unite));
+    fi;
+    if Solution:
+    for m=0 upto (length BaseLettres-1):
+    if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres:
+    ColFond:=ColorEntier[m+1];
+    fi;
+    endfor;
+    if unknown ColFond: else: fill (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite) withcolor ColFond fi;
+    fi;
+    trace (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite);
+   fi;
+    endfor;
+    endfor;
+    closefrom nomfichier;
+    enddef;
+    
+    Lecturecsv("#1");
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={largeur:=\useKV[ClesPixelArt]{Largeur}; hauteur:=\useKV[ClesPixelArt]{Hauteur}; Unite:=\useKV[ClesPixelArt]{Unite}; boolean Solution,Nombres; Solution:=\useKV[ClesPixelArt]{Solution}; Nombres:=\useKV[ClesPixelArt]{Nombres};}]
+    string BaseLettres;
+    BaseLettres=str #2;
+
+    color ColorEntier[],ColFond;
+    n:=0;
+    for p_=#3:
+    n:=n+1;
+    ColorEntier[n]:=p_;
+    endfor;
+
+    string RetiensNombres[];
+    if Nombres:
+    n:=0;
+    for p_=#4:
+    n:=n+1;
+    RetiensNombres[n]=p_;
+    endfor;
+    fi;
+        
+    vardef Lecturecsv(expr nomfichier)=
+    for h=hauteur downto 1:
+    string p_;
+    p_=readfrom nomfichier;
+    l:=0;
+    for p=0 step 2 until 2*largeur-2:
+    l:=l+1;
+    if (substring(p,p+1) of p_)="-":
+    else:
+    if Nombres:
+    for m=0 upto (length BaseLettres-1):
+    if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres:
+    label(LATEX(RetiensNombres[m+1]),((l-1)*Unite,(h-1)*Unite));
+    fi;
+    endfor;
+    else:
+    label(LATEX(substring(p,p+1) of p_),((l-1)*Unite,(h-1)*Unite));
+    fi;
+    if Solution:
+    for m=0 upto (length BaseLettres-1):
+    if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres:
+    ColFond:=ColorEntier[m+1];
+    fi;
+    endfor;
+    if unknown ColFond: else: fill (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite) withcolor ColFond fi;
+    fi;
+    trace (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite);
+   fi;
+    endfor;
+    endfor;
+    closefrom nomfichier;
+    enddef;
+    
+    Lecturecsv("#1");
+  \end{mpost}
+  \fi
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPixelArt.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,67 @@
+%%%
+% 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,Largeur=1cm,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15}
+  
+\newcommand\Pourcentage[3][]{%
+  \useKVdefault[ClesPourcentage]%
+  \setKV[ClesPourcentage]{#1}%
+  \ifboolKV[ClesPourcentage]{Reduire}{%
+    \ifboolKV[ClesPourcentage]{Formule}{%
+        R\'eduire une quantit\'e de \num{#2}~\%, cela revient \`a multiplier cette quantit\'e par $1-\dfrac{\num{#2}}{100}$. Par cons\'equent, si on r\'eduit \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
+        \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1-\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1-\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1-#2/100)}}=\num{\fpeval{#3*(1-#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
+      }{%
+        Calculons ce que repr\'esente la \useKV[ClesPourcentage]{MotReduction} de \num{#2}~\%.
+        \ifboolKV[ClesPourcentage]{AideTableau}{%
+          \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
+          \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
+          \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+          \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
+          \begin{center}
+            \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#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}}{}.%
+        }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :
+        \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+       On obtient une \useKV[ClesPourcentage]{MotReduction} de $\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}}{}.}
+      }
+  }{%
+    \ifboolKV[ClesPourcentage]{Augmenter}{%
+      \ifboolKV[ClesPourcentage]{Formule}{%
+        Augmenter de \num{#2}~\% une quantit\'e, cela revient \`a multiplier cette quantit\'e par $1+\dfrac{\num{#2}}{100}$. Par cons\'equent, si on augmente \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
+        \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1+\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1+\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1+#2/100)}}=\num{\fpeval{#3*(1+#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
+      }{%
+        Calculons ce que repr\'esente l'augmentation de \num{#2}~\%. %
+        \ifboolKV[ClesPourcentage]{AideTableau}{%
+          \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
+          \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
+          \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+          \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
+          \begin{center}%
+            \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#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}}{}.%
+        }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :
+          \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+          On obtient une augmentation de $\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}}{}.}
+      }
+    }{%
+      \ifboolKV[ClesPourcentage]{Calculer}{%
+        \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
+        \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
+        \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+        \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
+        \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{\num{#2}/\num{#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}}$}%
+        \xdef\ResultatPourcentage{\fpeval{#2*100/#3}}%
+      }{%
+        Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :%
+        \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPourcentage.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCProbabilites.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCProbabilites.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCProbabilites.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,288 @@
+%%%
+% Proba
+%%%
+\setKVdefault[ClesProba]{Echelle=false,Arbre=false,Branche=2,Angle=60,Rayon=0.25,LongueurEchelle=5,Affichage=0,Grille=1,Incline}
+
+\def\Updatetoksproba#1/#2\nil{\addtotok\toklistepointproba{"#1","\footnotesize #2",}}
+\def\Updatetoksprobapdf#1/#2\nil{\addtotok\toklistepointproba{"#1","\noexpand\footnotesize #2",}}
+\def\Updatetoksprobaechelle#1/#2/#3\nil{\addtotok\toklistepointproba{#1,#2,"#3",}}
+
+\newtoks\toklistepointproba
+
+% Pour construire l'arbre de probabilit\'e
+\def\buildarbreproba{%
+  \toklistepointproba{}%
+  \ifluatex
+  \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksproba\compteur\nil}%
+  \else
+  \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksprobapdf\compteur\nil}%
+  \fi
+  \MPArbreProba{\useKV[ClesProba]{Branche}}{\useKV[ClesProba]{Angle}}{\the\toklistepointproba}{\useKV[ClesProba]{Rayon}}%
+}%
+
+% Pour construire l'\'echelle de probabilit\'e
+\def\buildechelleproba{%
+  \toklistepointproba{}%
+  \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksprobaechelle\compteur\nil}%
+  \MPEchelleProbaUn{\useKV[ClesProba]{LongueurEchelle}}{\the\toklistepointproba}{\useKV[ClesProba]{Affichage}}{\useKV[ClesProba]{Grille}}%
+}
+
+\def\MPEchelleProbaUn#1#2#3#4{%
+  % #1:longueur du segment repr\'esentant l'\'echelle
+  % #2:Liste des \'ev\`enements/proba
+  % #3: pour l'affichage des labels (0 : rien, 1: fleches, 2 : fleches+ev\`enements, 3: fleches+proba, 4 : tout)
+  % #4 : dimension de "la grille" associ\'ee
+  \ifluatex
+  \begin{mplibcode}
+    pair A,B,C[],D[];%les noeuds de l'arbre
+    %Figure(-10u,-10u,10u,10u);
+    A=u*(1,1);
+    B-A=u*(#1,0);
+    draw segment(A,B);
+    draw marquesegment(A,B);
+    marque_s:=marque_s/2;
+    if #4>1:
+      for k=0 upto (#4-1):
+        D[k]=(k/#4)[A,B];
+      endfor;
+      if (#4 mod 2)=0:
+        for k=0 step 2 until (#4-1):
+          draw marquesegment(D[k],D[k+1]);
+        endfor;
+      else:
+        for k=1 step 2 until (#4-1):
+          draw marquesegment(D[k],D[k+1]);
+        endfor;
+      fi;
+    fi;
+    marque_s:=marque_s*2;
+    labeloffset:=labeloffset*3;
+    label.bot(btex 0 etex,A);
+    label.bot(btex 1 etex,B);
+    labeloffset:=labeloffset/3;
+    n:=1;%compter les informations
+    k:=1;% compter les informations noeud pour les placer
+    vardef toto(text t)=
+      for p_=t:
+        if (n mod 3)=1:
+          num:=p_;
+        fi;
+        if (n mod 3)=2:
+        deno:=p_;
+        fi;
+        if (n mod 3=0):
+          C[k]=(num/deno)[A,B];
+          if (#3>0):
+          drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15));
+          fi;
+          if (#3=2) or (#3=4):
+            dotlabel.top(TEX(p_),C[k]);
+          fi;
+          if (#3=1) or (#3=3):
+            dotlabel.top("",C[k]);
+          fi;
+          if (#3>2):
+            label.bot(TEX("$\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));
+          fi;
+          k:=k+1;
+        fi;
+      n:=n+1;
+      endfor;
+    enddef;
+    toto(#2);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={input PfCGeometrie;}]
+    pair A,B,C[],D[];%les noeuds de l'arbre
+    Figure(-10u,-10u,10u,10u);
+    A=u*(1,1);
+    B-A=u*(#1,0);
+    draw segment(A,B);
+    draw marquesegment(A,B);
+    marque_s:=marque_s/2;
+    if #4>1:
+      for k=0 upto (#4-1):
+        D[k]=(k/#4)[A,B];
+      endfor;
+      if (#4 mod 2)=0:
+        for k=0 step 2 until (#4-1):
+          draw marquesegment(D[k],D[k+1]);
+        endfor;
+      else:
+        for k=1 step 2 until (#4-1):
+          draw marquesegment(D[k],D[k+1]);
+        endfor;
+      fi;
+    fi;
+    marque_s:=marque_s*2;
+    labeloffset:=labeloffset*3;
+    label.bot(btex 0 etex,A);
+    label.bot(btex 1 etex,B);
+    labeloffset:=labeloffset/3;
+    n:=1;%compter les informations
+    k:=1;% compter les informations noeud pour les placer
+    vardef toto(text t)=
+      for p_=t:
+        if (n mod 3)=1:
+          num:=p_;
+        fi;
+        if (n mod 3)=2:
+        deno:=p_;
+        fi;
+        if (n mod 3=0):
+          C[k]=(num/deno)[A,B];
+          if (#3>0):
+          drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15));
+          fi;
+          if (#3=2) or (#3=4):
+            dotlabel.top(LATEX(p_),C[k]);
+          fi;
+          if (#3=1) or (#3=3):
+            dotlabel.top("",C[k]);
+          fi;
+          if (#3>2):
+            label.bot(LATEX("$\noexpand\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));%Le \noexpand est n\'ecessaire pour \'eviter un probl\`eme \`a la compilation, dû \`a l'expansion du \frac par gmp.
+          fi;
+          k:=k+1;
+        fi;
+      n:=n+1;
+      endfor;
+    enddef;
+    toto(#2);
+  \end{mpost}
+  \fi
+}
+
+\def\MPArbreProba#1#2#3#4{%
+  % #1:longueur d'une branche
+  % #2:angle entre deux branches de m\^eme origine
+  % #3:Liste des \'ev\`enements/proba
+  \ifluatex
+  \begin{mplibcode}
+    boolean Incline;
+    Incline=\useKV[ClesProba]{Incline};
+    pair A[],B[];%les noeuds de l'arbre
+    A0=u*(1,1);
+    B0-A0=u*(#1,0);
+    A1=rotation(B0,A0,#2/2);
+    A2=rotation(B0,A0,-#2/2);
+    B1-A1=B0-A0;
+    A3=rotation(B1,A1,#2/3);
+    A4=rotation(B1,A1,-#2/3);
+    B2-A2=B0-A0;
+    A5=rotation(B2,A2,#2/3);
+    A6=rotation(B2,A2,-#2/3);
+    draw segment(A4,A1);
+    draw segment(A5,A2);
+    draw chemin(A3,A1,A0,A2,A6);
+    for k=1 upto 6:
+    fill cercles(A[k],#4*cm) withcolor white;
+    endfor;
+    n:=1;%compter les informations
+    k:=1;% compter les informations noeud pour les placer
+    l:=1;% compter les informations "num\'eriques"
+    vardef toto(text t)=
+    for p_=t:
+    if (n mod 2)=1:
+    if p_<>"":
+    label(TEX(p_),A[k]);
+    fi;
+    k:=k+1;
+    else:
+    if (l mod 2)=1:
+    if p_<>"":
+    if Incline:
+    draw appelation(A[(l-1) div 2],A[l],4mm,TEX(p_));
+    else:
+    label.ulft(TEX(p_),iso(A[(l-1) div 2],A[l]));
+    fi;
+    fi;
+    else:
+    if p_<>"":
+    if Incline:
+    draw appelation(A[(l-1) div 2],A[l],-4mm,TEX(p_));
+    else:
+    label.llft(TEX(p_),iso(A[(l-1) div 2],A[l]));
+    fi;
+    fi;
+    fi;
+    l:=l+1;
+    fi;
+    n:=n+1;
+    endfor;
+    enddef;
+    toto(#3);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%input PfCGeometrie;
+      boolean Incline; Incline=\useKV[ClesProba]{Incline};}]
+    pair A[],B[];%les noeuds de l'arbre
+    %Figure(-10u,-10u,10u,10u);
+    A0=u*(1,1);
+    B0-A0=u*(#1,0);
+    A1=rotation(B0,A0,#2/2);
+    A2=rotation(B0,A0,-#2/2);
+    B1-A1=B0-A0;
+    A3=rotation(B1,A1,#2/3);
+    A4=rotation(B1,A1,-#2/3);
+    B2-A2=B0-A0;
+    A5=rotation(B2,A2,#2/3);
+    A6=rotation(B2,A2,-#2/3);
+    draw segment(A4,A1);
+    draw segment(A5,A2);
+    draw chemin(A3,A1,A0,A2,A6);
+    for k=1 upto 6:
+    fill cercles(A[k],#4*cm) withcolor white;
+    endfor;
+    n:=1;%compter les informations
+    k:=1;% compter les informations noeud pour les placer
+    l:=1;% compter les informations "num\'eriques"
+    vardef toto(text t)=
+    for p_=t:
+    if (n mod 2)=1:
+    if p_<>"":
+    label(LATEX(p_),A[k]);
+    fi;
+    k:=k+1;
+    else:
+    if (l mod 2)=1:
+    if p_<>"":
+    if Incline:
+    draw appelation(A[(l-1) div 2],A[l],4mm,LATEX(p_));
+    else:
+    label.ulft(LATEX(p_),iso(A[(l-1) div 2],A[l]));
+    fi;
+    fi;
+    else:
+    if p_<>"":
+    if Incline:
+    draw appelation(A[(l-1) div 2],A[l],-4mm,LATEX(p_));
+    else:
+    label.llft(LATEX(p_),iso(A[(l-1) div 2],A[l]));
+    fi;
+    fi;
+    fi;
+    l:=l+1;
+    fi;
+    n:=n+1;
+    endfor;
+    enddef;
+    toto(#3);
+  \end{mpost}
+  \fi
+}
+
+\newcommand\Proba[2][]{%
+  \useKVdefault[ClesProba]%
+  \setKV[ClesProba]{#1}%
+  % On liste les diff\'erents \'el\'ements sous la forme Ev\`enement/proba
+  \setsepchar[*]{,*/}\ignoreemptyitems%
+  \readlist*\ListeProba{#2}%
+  \ifboolKV[ClesProba]{Echelle}{%
+    \buildechelleproba%
+  }{\ifboolKV[ClesProba]{Arbre}{%
+      \buildarbreproba%
+    }{}%
+  }%
+  \setsepchar{,}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCProbabilites.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCProgrammeCalcul.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCProgrammeCalcul.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCProgrammeCalcul.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,170 @@
+%%%%
+% Prog de calculs "simples"
+%%%%
+\setKVdefault[ClesProg]{%
+  Ecart=2em,%
+  Direct,%
+  SansCalcul=false,%
+  Application=false,
+  Details=false,
+  Enonce=false,
+  Nom={},
+  CouleurCadre=black,%
+  CouleurFond=gray!10,%
+  Largeur={.95\linewidth},%
+  Epaisseur=.75pt,%
+  Pointilles=0,
+  ThemePerso=false,
+}
+
+\newcounter{NBprog}%
+\setcounter{NBprog}{0}%
+
+\newlength{\PointillesClesProg}%
+
+\newcommand\ProgCalcul[2][]{%
+  % #1 : cl\'es
+  % #2 : \'etapes
+  \useKVdefault[ClesProg]%
+  \setKV[ClesProg]{#1}%
+  \ifboolKV[ClesProg]{ThemePerso}{}{%
+    \tcbset{ProgCalcul/.style={%
+        boxsep=1mm,
+        bottom=.75mm,
+        middle=2mm,
+        boxrule={\useKV[ClesProg]{Epaisseur}},
+        text width={\useKV[ClesProg]{Largeur}},
+        colframe={\useKV[ClesProg]{CouleurCadre}},
+        colback={\useKV[ClesProg]{CouleurFond}},
+        halign upper=center
+      }%
+    }%
+  }%
+  \ifboolKV[ClesProg]{Application}{%
+    %    % by Thomas Dehon and cp
+    \setsepchar[*]{§*,}
+    % \setsepchar[*]{,* }%
+    \ignoreemptyitems%
+    \readlist*\ListeTotale{#2}%
+    \xdef\PfCPCfoo{\ListeTotale[1]}%
+    \xdef\PfCPCfaa{\ListeTotale[2]}%
+    %% 
+    \setsepchar{,}%    \ignoreemptyitems%
+    \readlist*\ListeEtapes{\PfCPCfoo}%
+    \setsepchar[*]{,* }\ignoreemptyitems%
+    \readlist*\ListeProg{\PfCPCfaa}%
+      \begin{tcolorbox}[%
+        ProgCalcul,%
+        ]
+        \ifthenelse{\equal{\useKV[ClesProg]{Nom}}{}}%
+        {}%
+        {%
+          {\color{\useKV[ClesProg]{CouleurCadre}}{\bfseries\useKV[ClesProg]{Nom}}}%
+          \tcblower
+        }%
+        \ifboolKV[ClesProg]{SansCalcul}{%
+          \begin{enumerate}
+          \item Choisir un nombre~\pointilles~$\ListeProg[1]$%
+            \foreachitem\etape\in\ListeEtapes{%
+            \item \etape~\pointilles~$\ListeProg[3,\etapecnt]$
+            }%
+          \end{enumerate}
+        }{\begin{enumerate}
+          \item Choisir un nombre~\pointilles~\xdef\NbDepart{\ListeProg[1]}\num{\NbDepart}
+            \foreachitem\etape\in\ListeEtapes{%
+            \item \etape~\pointilles~\edef\Test{\ListeProg[2,\etapecnt]}%
+              \expandarg%
+              \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]%
+              \StrSubstitute{\tempa}{**}{^}[\tempab]%
+              \StrSubstitute{\tempab}{*}{\times}[\tempac]%
+              \StrSubstitute{\tempac}{/}{\div}[\tempad]%
+              $\ifboolKV[ClesProg]{Details}{\xintifboolexpr{\NbDepart<0}{(\num{\NbDepart})}{\num{\NbDepart}}\tempad=}{}\xdef\NbDepart{\fpeval{(\NbDepart)\ListeProg[2,\etapecnt]}}\num{\NbDepart}$%
+            }%
+          \end{enumerate}
+        }
+      \end{tcolorbox}
+  }{%
+    \ifboolKV[ClesProg]{Enonce}{%
+      % by Thomas Dehon
+      \setsepchar[*]{,* }%
+      \ignoreemptyitems%
+      \readlist*\ListeEtapes{#2}% 
+      \begin{tcolorbox}[%
+        ProgCalcul,%
+        ]
+        \ifthenelse{\equal{\useKV[ClesProg]{Nom}}{}}%
+        {}%
+        {%
+          {\color{\useKV[ClesProg]{CouleurCadre}}{\bfseries\useKV[ClesProg]{Nom}}}%
+          \tcblower
+        }%
+        \begin{enumerate}
+          \foreachitem\etape\in\ListeEtapes{%
+          \item \etape 
+            \ifthenelse{\equal{\useKV[ClesProg]{Pointilles}}{0}}%
+            {}%
+            {%
+              \setlength{\PointillesClesProg}{\useKV[ClesProg]{Pointilles}}
+              \hfill \pointilles[\PointillesClesProg]%
+            }%
+          }
+        \end{enumerate}
+      \end{tcolorbox}
+    }{%
+      \setsepchar[*]{,* }\ignoreemptyitems%
+      \readlist*\ListeProg{#2}%
+      \stepcounter{NBprog}%
+      \xdef\NbDepart{\ListeProg[1]}%
+      \ifboolKV[ClesProg]{SansCalcul}{%
+        $\NbDepart$\foreachitem\compteur\in\ListeProg[2]{%
+          \hspace{0.2em}\tikzmark{A-\theNBprog-\compteurcnt}\hspace{\useKV[ClesProg]{Ecart}}\tikzmark{B-\theNBprog-\compteurcnt}\hspace{0.2em}$\ListeProg[3,\compteurcnt]$%
+        }%
+        \begin{tikzpicture}[remember picture, overlay]
+          \foreachitem\compteur\in\ListeProg[2]{%
+            \edef\Test{\ListeProg[2,\compteurcnt]}
+            \expandarg%
+            \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]%
+            \StrSubstitute{\tempa}{**}{^}[\tempab]%
+            \StrSubstitute{\tempab}{*}{\times}[\tempac]%
+            \StrSubstitute{\tempac}{/}{\div}[\tempad]%
+            \draw[-stealth,transform canvas={yshift=0.25em}] (pic cs:A-\theNBprog-\compteurcnt) --
+            node[above]{\scriptsize$\tempad$}(pic cs:B-\theNBprog-\compteurcnt);
+          }
+        \end{tikzpicture}  
+      }{%
+        \num{\NbDepart}\foreachitem\compteur\in\ListeProg[2]{%
+          \hspace{0.2em}\tikzmark{A-\theNBprog-\compteurcnt}\hspace{\useKV[ClesProg]{Ecart}}\tikzmark{B-\theNBprog-\compteurcnt}\xdef\NbDepart{\fpeval{(\NbDepart)\ListeProg[2,\compteurcnt]}}\hspace{0.2em}\num{\NbDepart}%
+        }%
+        \ifboolKV[ClesProg]{Direct}{%
+          \begin{tikzpicture}[remember picture, overlay]
+            \foreachitem\compteur\in\ListeProg[2]{%
+              \edef\Test{\ListeProg[2,\compteurcnt]}
+              \expandarg%
+              \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]%
+              \StrSubstitute{\tempa}{**}{^}[\tempab]%
+              \StrSubstitute{\tempab}{*}{\times}[\tempac]%
+              \StrSubstitute{\tempac}{/}{\div}[\tempad]%
+              \draw[-stealth,transform canvas={yshift=0.25em}] (pic cs:A-\theNBprog-\compteurcnt) --
+              node[above]{\scriptsize$\tempad$}(pic
+              cs:B-\theNBprog-\compteurcnt);
+            }
+          \end{tikzpicture}
+        }{%
+          \begin{tikzpicture}[remember picture, overlay]
+            \foreachitem\compteur\in\ListeProg[2]{%
+              \edef\Test{\ListeProg[2,\compteurcnt]}
+              \expandarg%
+              \StrSubstitute{\Test}{^2}{\empty\sqrt{\dots{}}}[\tempa]%
+              \StrSubstitute{\tempa}{**}{^}[\tempab]%
+              \StrSubstitute{\tempab}{*}{\div}[\tempac]%
+              \StrSubstitute{\tempac}{/}{\times}[\tempad]%
+              \StrSubstitute{\tempad}{-}{+}[\tempae]%
+              \StrSubstitute{\tempae}{++}{-}[\tempaf]%
+              \draw[-stealth,transform canvas={yshift=0.25em}] (pic cs:B-\theNBprog-\compteurcnt) --  node[above]{\scriptsize$\tempaf$}(pic cs:A-\theNBprog-\compteurcnt);
+            }
+          \end{tikzpicture}
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCProgrammeCalcul.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,332 @@
+%%%
+% Proportionnalit\'e
+%%%
+\setKVdefault[ClesPropor]{GrandeurA=Grandeur A,GrandeurB=Grandeur B,Largeur=1cm,Math=false,Stretch=1,ColorFill=white,CouleurTab=gray!15,Vertical=false,Simple=false}%
+
+\def\Updatetoksmath#1/#2\nil{\addtotok\tabtoksa{&#1}\addtotok\tabtoksb{&#2}}%
+\def\updatetokspropor#1/#2\nil{\addtotok\tabtoksa{&\num{#1}}\addtotok\tabtoksb{&\num{#2}}}
+\def\Buildtabpropor{%
+  \setcounter{NbProporG}{0}%
+  \setcounter{NbProporD}{0}%
+  \renewcommand{\arraystretch}{\useKV[ClesPropor]{Stretch}}%
+  \ifboolKV[ClesPropor]{Vertical}{%
+    \begin{tabular}{c|*{2}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}c}%
+      \multicolumn{1}{c}{}&\multicolumn{1}{c}{\setcounter{NbPropor}{1}\TikzPH}&\multicolumn{1}{c}{\TikzPH}&\\
+      \hhline{~--~}%
+                          &\cellcolor{\useKV[ClesPropor]{CouleurTab}}\useKV[ClesPropor]{GrandeurA}&\cellcolor{\useKV[ClesPropor]{CouleurTab}}\useKV[ClesPropor]{GrandeurB}&\\
+      \hhline{~--~}%
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{\ListeValeurlen}}}\do{%
+      \stepcounter{NbProporG}\TikzPG&\ifboolKV[ClesPropor]{Math}{\ListeValeur[##1,1]}{\num{\ListeValeur[##1,1]}}&\ifboolKV[ClesPropor]{Math}{\ListeValeur[##1,2]}{\num{\ListeValeur[##1,2]}}&\stepcounter{NbProporD}\TikzPD\\
+      \hhline{~--~}%
+      }%
+      \multicolumn{1}{c}{}&\multicolumn{1}{c}{\setcounter{NbPropor}{1}\TikzPB}&\multicolumn{1}{c}{\TikzPB}&\\
+    \end{tabular}%
+  }{%
+    \tabtoksa{}\tabtoksb{}%
+    \ifboolKV[ClesPropor]{Simple}{}{%
+    \tabtoksa{\cellcolor{\useKV[ClesPropor]{CouleurTab}}\useKV[ClesPropor]{GrandeurA}}%
+    \tabtoksb{\cellcolor{\useKV[ClesPropor]{CouleurTab}}\useKV[ClesPropor]{GrandeurB}}%
+    }%
+    \ifboolKV[ClesPropor]{Math}{%
+      \foreachitem\compteur\in\ListeValeur{\expandafter\Updatetoksmath\compteur\nil}%
+    }{\foreachitem\compteur\in\ListeValeur{\expandafter\updatetokspropor\compteur\nil}%
+    }%
+    \xdef\LongListe{\ListeValeurlen}%
+    \ifboolKV[ClesPropor]{Simple}{%
+      \begin{tabular}{r|*{\number\numexpr\ListeValeurlen}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}l}%
+        \multicolumn{1}{c}{}\setcounter{NbPropor}{1}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPH}}&\multicolumn{1}{c}{}\\%
+        \hhline{~*{\number\numexpr\ListeValeurlen}{-}~}%
+       \multicolumn{1}{c|}{\stepcounter{NbProporG}\TikzPG}\the\tabtoksa&\multicolumn{1}{c}{\stepcounter{NbProporD}\TikzPD}\\%
+        \hhline{~*{\number\numexpr\ListeValeurlen}{-}~}%
+        \multicolumn{1}{c|}{\stepcounter{NbProporG}\TikzPG}\the\tabtoksb&\multicolumn{1}{c}{\stepcounter{NbProporD}\TikzPD}\\%
+        \hhline{~*{\number\numexpr\ListeValeurlen}{-}~}%
+        \multicolumn{1}{c}{}\setcounter{NbPropor}{1}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPB}}&\multicolumn{1}{c}{}\\%
+      \end{tabular}%
+    }{%
+      \begin{tabular}{rc|*{\number\numexpr\ListeValeurlen}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}l}%
+        \multicolumn{1}{c}{}&\multicolumn{1}{c}{}\setcounter{NbPropor}{1}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPH}}&\multicolumn{1}{c}{}\\%
+        \hhline{~*{\number\numexpr\ListeValeurlen+1}{-}~}%
+        \multicolumn{1}{c|}{\stepcounter{NbProporG}\TikzPG}&\the\tabtoksa&\multicolumn{1}{c}{\stepcounter{NbProporD}\TikzPD}\\%
+        \hhline{~*{\number\numexpr\ListeValeurlen+1}{-}~}%
+        \multicolumn{1}{c|}{\stepcounter{NbProporG}\TikzPG}&\the\tabtoksb&\multicolumn{1}{c}{\stepcounter{NbProporD}\TikzPD}\\%
+        \hhline{~*{\number\numexpr\ListeValeurlen+1}{-}~}%
+        \multicolumn{1}{c}{\stepcounter{NbProporG}\TikzPG}&\multicolumn{1}{c}{}\setcounter{NbPropor}{1}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPB}}&\multicolumn{1}{c}{}\\%
+      \end{tabular}%
+    }%
+  }%
+  \renewcommand{\arraystretch}{1}%
+}%
+
+\newcounter{NbPropor}%
+
+\newcommand\TikzPH{%
+  \tikz[remember picture,overlay]{%
+    \coordinate[name=ProporH-\theNbPropor,yshift=-\getstrut\dp*\arraystretch];}%
+  \stepcounter{NbPropor}%
+}%
+
+\newcommand\TikzPB{%
+  \tikz[remember picture, overlay]{%
+    \coordinate[name=ProporB-\theNbPropor,yshift=\getstrut\ht*\arraystretch];}%
+  \stepcounter{NbPropor}%
+}%
+
+\newcommand\TikzPG{%
+  \tikz[remember picture,overlay]{%
+    \coordinate[name=ProporG-\theNbProporG,xshift=\tabcolsep+\arrayrulewidth,yshift=\getstrut\dp];}%
+}%
+\newcommand\TikzPD{%
+  \tikz[remember picture,overlay]{%
+    \coordinate[name=ProporD-\theNbProporD,xshift=-\tabcolsep-\arrayrulewidth,yshift=\getstrut\dp];}%
+}%
+
+\newcommand\TikzPHD{%
+  \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}%
+  \setbox2=\hbox{\useKV[ClesPropor]{GrandeurB}}%
+  \xintifboolexpr{\wd1>\wd2}{%
+    \tikz[remember picture,overlay]{%
+      \coordinate[name=ProporHD,xshift=-0.5\wd1,yshift=-\getstrut\dp*\arraystretch];}%
+  }{%
+    \tikz[remember picture,overlay]{%
+      \coordinate[name=ProporHD,xshift=-0.5\wd2,yshift=-\getstrut\dp*\arraystretch];}%
+  }
+}%
+
+\newcommand\TikzPBD{%
+  \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}%
+  \setbox2=\hbox{\useKV[ClesPropor]{GrandeurB}}%
+  \xintifboolexpr{\wd1>\wd2}{%
+    \tikz[remember picture, overlay]{%
+      \coordinate[name=ProporBD,xshift=-0.5*\the\wd1,yshift=\getstrut\ht*\arraystretch];}%
+  }{%
+    \tikz[remember picture, overlay]{%
+      \coordinate[name=ProporBD,xshift=-0.5*\the\wd2,yshift=\getstrut\ht*\arraystretch];}%
+  }
+  \stepcounter{NbPropor}%
+}%
+%
+\newcommand\FlechesPH[3]{%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \ifnum#1<#2\relax%
+    \draw[-stealth,out=50,in=130] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporH-#2);%
+  \else%
+    \draw[-stealth,out=130,in=50] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporH-#2);%
+    \fi%
+  \end{tikzpicture}%
+}%
+%
+\newcommand\FlechesPB[3]{%
+  \ifnum\number#1<\number#2\relax%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \draw[-stealth,out=-50,in=-130] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporB-#2);%
+  \end{tikzpicture}%
+  \else%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \draw[-stealth,out=-130,in=-50] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporB-#2);%
+  \end{tikzpicture}%
+  \fi%
+}%
+%
+\newcommand\FlechesPG[3]{%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \ifnum#1<#2\relax%
+    \draw[-stealth,out=-150,in=150] (ProporG-#1) to node[transform canvas={xshift=-1pt},inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5,left]{#3}(ProporG-#2);%
+    \else%
+    \draw[-stealth,out=150,in=-150] (ProporG-#1) to node[transform canvas={xshift=-1pt},inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, left]{#3}(ProporG-#2);%
+    \fi%
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlechesPD[3]{%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \ifnum#1<#2\relax%
+    \draw[-stealth,out=-30,in=30] (ProporD-#1) to node[transform canvas={xshift=1pt},inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5,right]{#3}(ProporD-#2);%
+    \else%
+    \draw[-stealth,out=30,in=-30] (ProporD-#1) to node[transform canvas={xshift=1pt},inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5,right]{#3}(ProporD-#2);%
+    \fi%
+  \end{tikzpicture}%
+}%
+
+\NewDocumentCommand\FlechePCH{mm}{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=\getstrut\ht]%
+    \node[inner sep=0pt] (MilieuH-#1) at ($(ProporH-#1)!0.33!(ProporB-#1)$) {};%
+    \node[inner sep=0pt] (MilieuH-#2) at ($(ProporH-#2)!0.33!(ProporB-#2)$) {};%
+    \node[inner sep=0pt] (MilieuB-#1) at ($(ProporH-#1)!0.67!(ProporB-#1)$) {};%
+    \node[inner sep=0pt] (MilieuB-#2) at ($(ProporH-#2)!0.67!(ProporB-#2)$) {};%
+    \xintifboolexpr{#1<#2}{%
+      \coordinate[right of=MilieuH-#1] (aux1);%
+      \coordinate[left of=MilieuH-#2] (aux2);%
+      \coordinate[right of=MilieuB-#1] (aux3);%
+      \coordinate[left of=MilieuB-#2] (aux4);%
+      \draw[out=-150,in=-30,gray] (aux3) to (aux4);
+    }{%
+      \coordinate[left of=MilieuH-#1] (aux1);%
+      \coordinate[right of=MilieuH-#2] (aux2);%
+      \coordinate[left of=MilieuB-#1] (aux3);%
+      \coordinate[right of=MilieuB-#2] (aux4);%
+      \draw[out=-30,in=-150,gray] (aux3) to (aux4);
+    }%
+    \draw[gray] (aux2) -- (aux3);
+    \draw[-stealth,gray] (aux4) -- (aux1);
+  \end{tikzpicture}%
+}%
+
+\NewDocumentCommand\FlechePCB{mm}{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=\getstrut\ht]%
+    \node[inner sep=0pt] (MilieuH-#1) at ($(ProporH-#1)!0.33!(ProporB-#1)$) {};%
+    \node[inner sep=0pt] (MilieuH-#2) at ($(ProporH-#2)!0.33!(ProporB-#2)$) {};%
+    \node[inner sep=0pt] (MilieuB-#1) at ($(ProporH-#1)!0.67!(ProporB-#1)$) {};%
+    \node[inner sep=0pt] (MilieuB-#2) at ($(ProporH-#2)!0.67!(ProporB-#2)$) {};%
+    \xintifboolexpr{#1<#2}{%
+      \coordinate[right of=MilieuH-#1] (aux1);%
+      \coordinate[left of=MilieuH-#2] (aux2);%
+      \coordinate[right of=MilieuB-#1] (aux3);%
+      \coordinate[left of=MilieuB-#2] (aux4);%
+      \draw[out=150,in=30,gray] (aux1) to (aux2);
+    }{%
+      \coordinate[left of=MilieuH-#1] (aux1);%
+      \coordinate[right of=MilieuH-#2] (aux2);%
+      \coordinate[left of=MilieuB-#1] (aux3);%
+      \coordinate[right of=MilieuB-#2] (aux4);%
+      \draw[out=30,in=150,gray] (aux1) to (aux2);
+    }%
+    \draw[gray] (aux4) -- (aux1);
+    \draw[-stealth,gray] (aux2) -- (aux3);
+  \end{tikzpicture}%
+}%
+
+\NewDocumentCommand\FlechePCG{mm}{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=\getstrut\ht]%
+    \node[inner sep=0pt] (MilieuH-#1) at ($(ProporG-#1)!0.25!(ProporD-#1)$) {};%
+    \node[inner sep=0pt] (MilieuH-#2) at ($(ProporG-#2)!0.25!(ProporD-#2)$) {};%
+    \node[inner sep=0pt] (MilieuB-#1) at ($(ProporG-#1)!0.75!(ProporD-#1)$) {};%
+    \node[inner sep=0pt] (MilieuB-#2) at ($(ProporG-#2)!0.75!(ProporD-#2)$) {};%
+    \xintifboolexpr{#1<#2}{%
+      \coordinate[right of=MilieuH-#1] (aux1);%
+      \coordinate[right of=MilieuH-#2] (aux2);%
+      \coordinate[left of=MilieuB-#1] (aux3);%
+      \coordinate[left of=MilieuB-#2] (aux4);%
+      \draw[out=30,in=-30,gray] (aux3) to (aux4);
+    }{%
+      \coordinate[right of=MilieuH-#1] (aux1);%
+      \coordinate[right of=MilieuH-#2] (aux2);%
+      \coordinate[left of=MilieuB-#1] (aux3);%
+      \coordinate[left of=MilieuB-#2] (aux4);%
+      \draw[out=-30,in=30,gray] (aux3) to (aux4);
+    }%
+    \draw[gray] (aux2) -- (aux3);
+    \draw[-stealth,gray] (aux4) -- (aux1);
+  \end{tikzpicture}%
+}%
+
+\NewDocumentCommand\FlechePCD{mm}{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=\getstrut\ht]%
+    \node[inner sep=0pt] (MilieuH-#1) at ($(ProporG-#1)!0.25!(ProporD-#1)$) {};%
+    \node[inner sep=0pt] (MilieuH-#2) at ($(ProporG-#2)!0.25!(ProporD-#2)$) {};%
+    \node[inner sep=0pt] (MilieuB-#1) at ($(ProporG-#1)!0.75!(ProporD-#1)$) {};%
+    \node[inner sep=0pt] (MilieuB-#2) at ($(ProporG-#2)!0.75!(ProporD-#2)$) {};%
+    \xintifboolexpr{#1<#2}{%
+      \coordinate[right of=MilieuH-#1] (aux1);%
+      \coordinate[right of=MilieuH-#2] (aux2);%
+      \coordinate[left of=MilieuB-#1] (aux3);%
+      \coordinate[left of=MilieuB-#2] (aux4);%
+      \draw[out=150,in=-150,gray] (aux1) to (aux2);
+    }{%
+      \coordinate[right of=MilieuH-#1] (aux1);%
+      \coordinate[right of=MilieuH-#2] (aux2);%
+      \coordinate[left of=MilieuB-#1] (aux3);%
+      \coordinate[left of=MilieuB-#2] (aux4);%
+      \draw[out=-150,in=150,gray] (aux1) to (aux2);
+    }%
+    \draw[gray] (aux4) -- (aux1);
+    \draw[-stealth,gray] (aux2) -- (aux3);
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlecheLineaireG[4]{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=1em]%
+    \node[inner sep=0pt] (MilieuH) at ($(ProporG-#1)!0.5!(ProporG-#2)$) {};%
+    \node[circle,draw,inner sep=0pt] [left of=MilieuH] (aux) {#4} ;%
+    \coordinate[left of=aux] (aux1);%
+    \draw[-stealth] (ProporG-#1) -| (aux);%
+    \draw[-stealth] (ProporG-#2) -| (aux);%
+    \draw[-stealth] (aux) -- (aux1) |- (ProporG-#3);%
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlecheLineaireD[4]{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=1em]%
+    \node[inner sep=0pt] (MilieuH) at ($(ProporD-#1)!0.5!(ProporD-#2)$) {};%
+    \node[circle,draw,inner sep=0pt] [right of=MilieuH] (aux) {#4} ;%
+    \coordinate[right of=aux] (aux1);%
+    \draw[-stealth] (ProporD-#1) -| (aux);%
+    \draw[-stealth] (ProporD-#2) -| (aux);%
+    \draw[-stealth] (aux) -- (aux1) |- (ProporD-#3);%
+  \end{tikzpicture}%
+}%
+
+\newcounter{NbProporG}%
+\newcounter{NbProporD}%
+
+\newcommand\Propor[2][]{%
+  \useKVdefault[ClesPropor]%
+  \setKV[ClesPropor]{#1}%
+  \xdef\colorfill{\useKV[ClesPropor]{ColorFill}}%
+  \xdef\EcartLargeur{\useKV[ClesPropor]{Largeur}}%
+  %  % on lit la liste \'ecrite sous la forme valeur/effectif
+  \setsepchar[*]{,*/}\ignoreemptyitems%
+  \readlist*\ListeValeur{#2}%
+  \Buildtabpropor%
+}%
+
+\newcommand\FlecheCoef[2][\EcartLargeur]{%
+  \begin{tikzpicture}[remember picture, overlay]%
+    \node[] (Point1) at ($(ProporH-\LongListe)!0.1!(ProporB-\LongListe)$) {};%
+    \node[] (Point2) at ($(ProporH-\LongListe)!0.9!(ProporB-\LongListe)$) {};%
+    \coordinate[right of=Point1,node distance=0.5*#1+\tabcolsep] (point1);%
+    \coordinate[right of=Point2,node distance=0.5*#1+\tabcolsep] (point2);%
+    \draw[-stealth,out=-20,in=20] (point1) to node[midway,right,inner sep=1pt]{#2}(point2);%
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlecheCoefDebut[2][\tabcolsep+\arrayrulewidth]{%
+  \begin{tikzpicture}[remember picture, overlay]%
+    \node[] (Noeud1) at ($(ProporHD)!0.1!(ProporBD)$) {};%
+    \node[] (Noeud2) at ($(ProporHD)!0.9!(ProporBD)$) {};%
+    \coordinate[left of=Noeud1,node distance=#1] (noeud1);%
+    \coordinate[left of=Noeud2,node distance=#1] (noeud2);%
+    \draw[-stealth,out=160,in=-160] (noeud2) to node[midway,left,inner sep=1pt]{#2}(noeud1);%
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlecheCoefInv[2][1cm]{%
+  \begin{tikzpicture}[remember picture, overlay]%
+    \node[] (Point1) at ($(ProporH-\LongListe)!0.1!(ProporB-\LongListe)$) {};%
+    \node[] (Point2) at ($(ProporH-\LongListe)!0.9!(ProporB-\LongListe)$) {};%
+    \coordinate[right of=Point1,node distance=0.5*#1+\tabcolsep] (point1);%
+    \coordinate[right of=Point2,node distance=0.5*#1+\tabcolsep] (point2);%
+    \draw[-stealth,out=20,in=-20] (point2) to node[midway,right,inner sep=1pt]{#2}(point1);%
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlecheLineaireH[4]{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=\getstrut\ht]%
+    \node[inner sep=0pt] (MilieuH) at ($(ProporH-#1)!0.5!(ProporH-#2)$) {};%
+    \node[circle,draw,inner sep=0pt] [above of=MilieuH] (aux) {#4} ;%
+    \coordinate[above of=aux] (aux1);%
+    \draw[-stealth] (ProporH-#1) |- (aux);%
+    \draw[-stealth] (ProporH-#2) |- (aux);%
+    \draw[-stealth] (aux) -- (aux1) -| (ProporH-#3);%
+  \end{tikzpicture}%
+}%
+
+\newcommand\FlecheLineaireB[4]{%
+  \begin{tikzpicture}[remember picture,overlay,node distance=3mm]%
+    \node[inner sep=0pt] (MilieuB) at ($(ProporB-#1)!0.5!(ProporB-#2)$) {};%
+    \node[circle,draw,inner sep=0pt] [below of=MilieuB] (aux) {#4};%
+    \coordinate[below of=aux,node distance=3mm] (aux1);%
+    \draw[-stealth] (ProporB-#1) |- (aux);%
+    \draw[-stealth] (ProporB-#2) |- (aux);%
+    \draw[-stealth] (aux) -- (aux1) -| (ProporB-#3);%
+  \end{tikzpicture}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPropor.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCProprietesDroites.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCProprietesDroites.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCProprietesDroites.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,343 @@
+%%%
+% Ppt\'es des droites (6eme)
+%%%
+\setKVdefault[ClesDroites]{Brouillon=false,CitePropriete=false,Num=1,Figure=false,Remediation=false}
+
+\newcommand\Redaction[4][]{%
+  \ifboolKV[ClesDroites]{Remediation}{%
+    \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
+      \ifboolKV[ClesDroites]{CitePropriete}{%
+        Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.%
+        
+        Or, si deux droites sont parall\`eles, alors toute droite parall\`ele \`a l'une est parall\`ele \`a l'autre.%
+        
+        Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.%
+      }{%
+        Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux parall\`eles \`a la m\^eme droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.%
+      }
+    }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
+        \ifboolKV[ClesDroites]{CitePropriete}{%
+          Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.%
+          
+          Or, si deux droites sont perpendiculaires \`a une m\^eme droite, alors elles sont parall\`eles.%
+          
+          Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.
+        }{%
+          Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux perpendiculaires \`a la m\^eme droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.
+        }
+      }{%
+        \ifboolKV[ClesDroites]{CitePropriete}{%
+          Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.%
+          
+          Or, si deux droites sont parall\`eles, alors toute droite droite perpendiculaire \`a l'une est perpendiculaire \`a l'autre.%
+          
+          Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.
+        }{%
+          Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles, alors la droite $(\hbox to2em{\dotfill})$ qui est perpendiculaire \`a $(\hbox to2em{\dotfill})$ est \'egalement perpendiculaire \`a la droite $(\hbox to2em{\dotfill})$.
+        }
+      }
+    }%
+  }{%
+    \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
+      \ifboolKV[ClesDroites]{CitePropriete}{%
+        Les droites $(#2)$ et $(#4)$ sont parall\`eles. Les droites $(#3)$ et $(#4)$ sont parall\`eles.%
+        
+        Or, si deux droites sont parall\`eles, alors toute droite parall\`ele \`a l'une est parall\`ele \`a l'autre.%
+        
+        Donc les droites $(#2)$ et $(#3)$ sont parall\`eles.
+      }{%
+        Comme les droites $(#2)$ et $(#3)$ sont toutes les deux parall\`eles \`a la m\^eme droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parall\`eles.
+      }
+    }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
+        \ifboolKV[ClesDroites]{CitePropriete}{%
+          Les droites $(#2)$ et $(#4)$ sont perpendiculaires. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.%
+          
+          Or, si deux droites sont perpendiculaires \`a une m\^eme droite, alors elles sont parall\`eles.%
+          
+          Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires.
+        }{%
+          Comme les droites $(#2)$ et $(#3)$ sont toutes les deux perpendiculaires \`a la m\^eme droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parall\`eles.
+        }
+      }{%
+        \ifboolKV[ClesDroites]{CitePropriete}{%
+          Les droites $(#2)$ et $(#4)$ sont parall\`eles. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.%
+          
+          Or, si deux droites sont parall\`eles, alors toute droite droite perpendiculaire \`a l'une est perpendiculaire \`a l'autre.%
+          
+          Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires.
+        }{%
+          Comme les droites $(#2)$ et $(#4)$ sont parall\`eles, alors la droite $(#3)$ qui est perpendiculaire \`a $(#4)$ est \'egalement perpendiculaire \`a la droite $(#2)$.
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\Brouillon[4][]{%
+  \setlength{\abovedisplayskip}{0pt}
+  \ifboolKV[ClesDroites]{Remediation}{%
+    \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
+      \[\left.
+          \begin{array}{l}
+            (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\
+            \\
+            (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
+          \end{array}
+        \right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
+      \]
+    }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
+        \[\left.
+            \begin{array}{l}
+              (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
+              \\
+              (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
+            \end{array}
+          \right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
+        \]
+      }{%
+        \[\left.
+            \begin{array}{l}
+              (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\
+              \\
+              (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
+            \end{array}
+          \right\}(\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})
+        \]
+      }
+    }
+  }{
+    \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
+      \[\left.
+          \begin{array}{l}
+            (#2)//(#4)\\
+            \\
+            (#3)//(#4)
+          \end{array}
+        \right\}(#2)//(#3)
+      \]
+    }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
+        \[\left.
+            \begin{array}{l}
+              (#2)\perp(#4)\\
+              \\
+              (#3)\perp(#4)\\
+            \end{array}
+          \right\}(#2)//(#3)
+        \]
+      }{%
+        \[\left.
+            \begin{array}{l}
+              (#2)//(#4)\\
+              \\
+              (#3)\perp(#4)\\
+            \end{array}
+          \right\}(#2)\perp(#3)
+        \]
+      }%
+    }%
+  }%
+}%
+
+\def\MPFigureDroite#1#2{%
+  \ifluatex
+  %\mplibcodeinherit{enable}
+  \mplibforcehmode
+  \begin{mplibcode}
+    pair A,B,C,D,E,F,G,H,I,J,K;
+    u:=7.5mm;
+    A=u*(1,3);
+    B-A=u*(3,2);
+    C-A=u*(2,-1);
+    E-C=u*(1,-1.5);
+    G-E=u*(1.5,0);
+    I-A=whatever*(B-A);
+    I-G=whatever*((B-A) rotated 90);
+    D-B=C-A;
+    F-D=E-C;
+    H=1.1[G,I];
+    J=(C--D) intersectionpoint (G--H);
+    K=(E--F) intersectionpoint (G--H);
+    path Codeperp[];
+    pair M[];
+    M1-I=7*unitvector(B-I);
+    M3-I=7*unitvector(J-I);
+    M2-M3=M1-I;
+    Codeperp1=M1--M2--M3;
+    Codeperp2=Codeperp1 shifted(J-I);
+    picture Codepara[];
+    pair R,S,T;
+    path cd;
+    Codepara1=image(
+    R=1/3[A,B];
+    T=1/3[E,F];
+    S=1/3[R,T];
+    cd=(fullcircle scaled 6mm) shifted S;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+    drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,S);
+    drawoptions();
+    );
+    Codepara2=image(
+    R:=1/2[C,D];
+    T:=1/2[E,F];
+    S:=1/2[R,T];
+    cd:=(fullcircle scaled 6mm) shifted S;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+    drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,S);
+    drawoptions();
+    );
+    path d[];
+    d1=A--B;
+    d2=C--D;
+    d3=E--F;
+    d4=G--H;
+    picture reste;
+    reste=image(
+    %trac\'es des droites
+    draw d1;
+    if #1=2:
+    draw d2;
+    elseif #1=3:
+    draw d3;
+    fi;
+    if #2=3:
+    draw d3;
+    elseif #2=4:
+    draw d4;
+    fi;
+    % trac\'es des codes
+    if (#1=2) and (#2=3):
+    draw Codepara1; draw Codepara2;
+    fi;
+    if (#1=2) and (#2=4):
+    draw Codeperp1; draw Codeperp2;
+    fi;
+    if (#1=3) and (#2=4):
+    draw Codepara1; draw Codeperp1;
+    fi;
+    );
+    reste:=reste rotatedabout(u*(3,3),-90+uniformdeviate(180));
+    draw reste;
+  \end{mplibcode}
+  %\mplibcodeinherit{disable}
+  \else
+  \begin{mpost}
+    pair A,B,C,D,E,F,G,H,I,J,K;
+    u:=7.5mm;
+    A=u*(1,3);
+    B-A=u*(3,2);
+    C-A=u*(2,-1);
+    E-C=u*(1,-1.5);
+    G-E=u*(1.5,0);
+    I-A=whatever*(B-A);
+    I-G=whatever*((B-A) rotated 90);
+    D-B=C-A;
+    F-D=E-C;
+    H=1.1[G,I];
+    J=(C--D) intersectionpoint (G--H);
+    K=(E--F) intersectionpoint (G--H);
+    path Codeperp[];
+    pair M[];
+    M1-I=7*unitvector(B-I);
+    M3-I=7*unitvector(J-I);
+    M2-M3=M1-I;
+    Codeperp1=M1--M2--M3;
+    Codeperp2=Codeperp1 shifted(J-I);
+    picture Codepara[];
+    pair R,S,T;
+    path cd;
+    Codepara1=image(
+    R=1/3[A,B];
+    T=1/3[E,F];
+    S=1/3[R,T];
+    cd=(fullcircle scaled 6mm) shifted S;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+    drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,S);
+    drawoptions();
+    );
+    Codepara2=image(
+    R:=1/2[C,D];
+    T:=1/2[E,F];
+    S:=1/2[R,T];
+    cd:=(fullcircle scaled 6mm) shifted S;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+    drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,S);
+    drawoptions();
+    );
+    path d[];
+    d1=A--B;
+    d2=C--D;
+    d3=E--F;
+    d4=G--H;
+    picture reste;
+    reste=image(
+    %trac\'es des droites
+    draw d1;
+    if #1=2:
+    draw d2;
+    elseif #1=3:
+    draw d3;
+    fi;
+    if #2=3:
+    draw d3;
+    elseif #2=4:
+    draw d4;
+    fi;
+    % trac\'es des codes
+    if (#1=2) and (#2=3):
+    draw Codepara1; draw Codepara2;
+    fi;
+    if (#1=2) and (#2=4):
+    draw Codeperp1; draw Codeperp2;
+    fi;
+    if (#1=3) and (#2=4):
+    draw Codepara1; draw Codeperp1;
+    fi;
+    );
+    reste:=reste rotatedabout(u*(3,3),-90+uniformdeviate(180));
+    draw reste;
+  \end{mpost}
+  \fi
+}
+
+\newcommand\FaireFigure[4][]{%
+  \setlength{\abovedisplayskip}{0pt}
+  \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
+    \MPFigureDroite{2}{3}%
+  }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
+      \MPFigureDroite{2}{4}%
+    }{%
+      \MPFigureDroite{3}{4}%
+    }%
+  }%
+}%
+
+\newcommand\ProprieteDroites[4][]{%
+  \useKVdefault[ClesDroites]%
+  \setKV[ClesDroites]{#1}%
+  \ifboolKV[ClesDroites]{Figure}{%
+    \begin{multicols}{2}%
+      \begin{center}%
+        \FaireFigure[#1]{#2}{#3}{#4}%
+      \end{center}%
+      \columnbreak
+      \ifboolKV[ClesDroites]{Brouillon}{\Brouillon[#1]{#2}{#3}{#4}}{}%
+      \Redaction[#1]{#2}{#3}{#4}%
+      \par%
+    \end{multicols}
+  }{%
+      \ifboolKV[ClesDroites]{Brouillon}{\Brouillon[#1]{#2}{#3}{#4}}{}%
+      \Redaction[#1]{#2}{#3}{#4}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCProprietesDroites.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuissanceQuatre.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuissanceQuatre.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuissanceQuatre.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,203 @@
+%%%
+% Puissances 4
+%%%
+\setKVdefault[ClesPQuatre]{Couleur=Gray,Largeur=2cm,LargeurUn=2cm,Multiplication,Entier,Nombre,Exposant=false,Libre=false,Texte=false,Echelle=2}%
+\defKV[ClesPQuatre]{Addition=\setKV[ClesPQuatre]{Multiplication=false}}%
+\defKV[ClesPQuatre]{Relatif=\setKV[ClesPQuatre]{Entier=false}}%
+\defKV[ClesPQuatre]{Puissance=\setKV[ClesPQuatre]{Exposant}}%
+\defKV[ClesPQuatre]{Autre=\setKV[ClesPQuatre]{Nombre=false}\setKV[ClesPQuatre]{Libre}}%
+\defKV[ClesPQuatre]{Consignes=\setKV[ClesPQuatre]{Texte}}%
+
+\newtoks\toklistePQuatreh%
+\newtoks\toklistePQuatrev%
+\def\UpdatetoksPQuatreh#1\nil{\addtotok\toklistePQuatreh{"#1",}}%
+\def\UpdatetoksPQuatrev#1\nil{\addtotok\toklistePQuatrev{"#1",}}%
+
+\NewDocumentCommand\PQuatre{o +m}{%
+  \useKVdefault[ClesPQuatre]%
+  \toklistePQuatreh{}%
+  \toklistePQuatrev{}%
+  \setKV[ClesPQuatre]{#1}%
+  \ifboolKV[ClesPQuatre]{Nombre}{%
+    \ifboolKV[ClesPQuatre]{Exposant}{%
+      \def\PQuatreListe{$10^{-10}$,$10^{-9}$,$10^{-8}$,$10^{-7}$,$10^{-6}$,$10^{-5}$,$10^{-4}$,$10^{-3}$,$10^{-2}$,$10^{2}$,$10^{3}$,$10^{4}$,$10^{5}$,$10^{6}$,$10^{7}$,$10^{8}$,$10^{9}$,$10^{10}$}%
+      \MelangeListe{\PQuatreListe}{7}%
+      \readlist*\PQuatreListeH{\faa}%
+      \MelangeListe{\PQuatreListe}{7}%
+      \readlist*\PQuatreListeV{\faa}%
+      \foreachitem\compteur\in\PQuatreListeH{\expandafter\UpdatetoksPQuatreh\compteur\nil}%
+      \foreachitem\compteur\in\PQuatreListeV{\expandafter\UpdatetoksPQuatrev\compteur\nil}%
+    }{%
+      \ifboolKV[ClesPQuatre]{Entier}{%
+        % On choisit aléatoirement les listes de nombres de 2 à 10 en faisant deux listes : horizontale et verticale
+        \def\PQuatreListe{2,3,4,5,6,7,8,9,10}%
+        \MelangeListe{\PQuatreListe}{7}%
+        \readlist*\PQuatreListeH{\faa}%
+        \MelangeListe{\PQuatreListe}{7}%
+        \readlist*\PQuatreListeV{\faa}%
+        \foreachitem\compteur\in\PQuatreListeH{\expandafter\UpdatetoksPQuatreh\compteur\nil}%
+        \foreachitem\compteur\in\PQuatreListeV{\expandafter\UpdatetoksPQuatrev\compteur\nil}%
+      }{%
+        % On choisit aléatoirement les listes de nombres de -10 à -2 union 2 à 10 en faisant deux listes : horizontale et verticale
+        \def\PQuatreListe{$-10$,$-9$,$-8$,$-7$,$-6$,$-5$,$-4$,$-3$,$-2$,2,3,4,5,6,7,8,9,10}%
+        \MelangeListe{\PQuatreListe}{7}%
+        \readlist*\PQuatreListeH{\faa}%
+        \MelangeListe{\PQuatreListe}{7}%
+        \readlist*\PQuatreListeV{\faa}%
+        \foreachitem\compteur\in\PQuatreListeH{\expandafter\UpdatetoksPQuatreh\compteur\nil}%
+        \foreachitem\compteur\in\PQuatreListeV{\expandafter\UpdatetoksPQuatrev\compteur\nil}%
+      }%
+    }%
+  }{%
+    % on lit la liste des données fournies par l'utilisateur
+    \setsepchar[*]{,*/}%
+    \readlist\PQuatreListes{#2}%
+    \setsepchar{,}%
+    \foreachitem\compteur\in\PQuatreListes[1]{\expandafter\UpdatetoksPQuatrev\compteur\nil}%
+    \foreachitem\compteur\in\PQuatreListes[2]{\expandafter\UpdatetoksPQuatreh\compteur\nil}%
+  }%
+  % Une fois les listes construites, on dessine et on place les listes.
+  \PQuatreGrille{\the\toklistePQuatrev}{\the\toklistePQuatreh}%
+}%
+
+\NewDocumentCommand\PQuatreGrille{m m}{%
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}
+    Largeur=\useKV[ClesPQuatre]{Largeur};
+    LargeurUn=\useKV[ClesPQuatre]{LargeurUn};
+    Echelle=\useKV[ClesPQuatre]{Echelle};
+    color fond;
+    fond=\useKV[ClesPQuatre]{Couleur};
+    boolean Libre,Multiplication,Texte;
+    Libre:=\useKV[ClesPQuatre]{Libre};
+    Multiplication=\useKV[ClesPQuatre]{Multiplication};
+    Texte:=\useKV[ClesPQuatre]{Texte};
+
+    if Texte:
+    string Consignes;
+    Consignes=\useKV[ClesPQuatre]{Consignes};
+    fi;
+    
+    % On calcule le nombre de cases
+    nchauteur:=0;
+    for p_=#1:
+    nchauteur:=incr nchauteur;
+    endfor;
+    nclargeur:=0;
+    for p_=#2:
+    nclargeur:=incr nclargeur;
+    endfor;
+    if Libre=false:
+    nchauteur:=7;
+    nclargeur:=7;
+    fi;
+    %On affiche
+    pair A,B,C,D,H[],V[],M[][];
+    A=(0,0);
+    B-A=Largeur*(nclargeur,0);
+    C-B=Largeur*(0,nchauteur);
+    D-C=A-B;
+    fill polygone(A,B,C,D) withcolor fond;
+    trace polygone(A,B,C,D);
+    for k=0 upto (nclargeur-1):
+    for l=0 upto (nchauteur-1):
+    M[k][l]=A+0.5*(Largeur,Largeur)+k*(Largeur,0)+l*(0,Largeur);
+    fill cercles(M[k][l],0.4*Largeur) withcolor blanc;
+    trace cercles(M[k][l],0.4*Largeur);
+    endfor;
+    endfor;
+    labeloffset:=labeloffset*2;
+    if Libre:
+    if Texte:
+    label.llft(TEX("\begin{minipage}{"&decimal(LargeurUn)&"pt}"&Consignes&"\end{minipage}") scaled Echelle,A);
+    fi;
+    else:
+    if Multiplication:
+    label.llft(btex $\times$ etex scaled Echelle,A);
+    else:
+    label.llft(btex $+$ etex scaled Echelle,A);
+    fi;
+    fi;
+    labeloffset:=labeloffset/2;
+    vardef Vertical(text t)=
+    n:=0;
+    for p_=t:
+    label.lft(TEX(p_) scaled Echelle,A+(0,n*Largeur+Largeur/2));
+    n:=n+1;
+    endfor;
+    enddef;
+    vardef Horizontal(text t)=
+    n:=0;
+    for p_=t:
+    label.bot(TEX(p_) scaled Echelle,A+(n*Largeur+Largeur/2,0));
+    n:=n+1;
+    endfor;
+    enddef;
+    labeloffset:=labeloffset*4;
+    Vertical(#1);
+    Horizontal(#2);
+  \end{mplibcode}
+  \else%
+  \begin{mpost}[mpsettings={Largeur=\useKV[ClesPQuatre]{Largeur};Largeur=\useKV[ClesPQuatre]{Largeur};LargeurUn=\useKV[ClesPQuatre]{LargeurUn};Echelle=\useKV[ClesPQuatre]{Echelle};color fond;fond=\useKV[ClesPQuatre]{Couleur};boolean Libre,Multiplication,Texte;Libre:=\useKV[ClesPQuatre]{Libre};Multiplication=\useKV[ClesPQuatre]{Multiplication};Texte:=\useKV[ClesPQuatre]{Texte};if Texte:string Consignes;Consignes=\useKV[ClesPQuatre]{Consignes};fi;}]
+    % On calcule le nombre de cases
+    nchauteur:=0;
+    for p_=#1:
+    nchauteur:=incr nchauteur;
+    endfor;
+    nclargeur:=0;
+    for p_=#2:
+    nclargeur:=incr nclargeur;
+    endfor;
+    if Libre=false:
+    nchauteur:=7;
+    nclargeur:=7;
+    fi;
+    %On affiche
+    pair A,B,C,D,H[],V[],M[][];
+    A=(0,0);
+    B-A=Largeur*(nclargeur,0);
+    C-B=Largeur*(0,nchauteur);
+    D-C=A-B;
+    fill polygone(A,B,C,D) withcolor fond;
+    trace polygone(A,B,C,D);
+    for k=0 upto (nclargeur-1):
+    for l=0 upto (nchauteur-1):
+    M[k][l]=A+0.5*(Largeur,Largeur)+k*(Largeur,0)+l*(0,Largeur);
+    fill cercles(M[k][l],0.4*Largeur) withcolor blanc;
+    trace cercles(M[k][l],0.4*Largeur);
+    endfor;
+    endfor;
+    labeloffset:=labeloffset*2;
+    if Libre:
+    if Texte:
+    label.llft(LATEX("\begin{minipage}{"&decimal(LargeurUn)&"pt}"&Consignes&"\end{minipage}") scaled Echelle,A);
+    fi;
+    else:
+    if Multiplication:
+    label.llft(btex $\times$ etex scaled Echelle,A);
+    else:
+    label.llft(btex $+$ etex scaled Echelle,A);
+    fi;
+    fi;
+    labeloffset:=labeloffset/2;
+    vardef Vertical(text t)=
+    n:=0;
+    for p_=t:
+    label.lft(LATEX(p_) scaled Echelle,A+(0,n*Largeur+Largeur/2));
+    n:=n+1;
+    endfor;
+    enddef;
+    vardef Horizontal(text t)=
+    n:=0;
+    for p_=t:
+    label.bot(LATEX(p_) scaled Echelle,A+(n*Largeur+Largeur/2,0));
+    n:=n+1;
+    endfor;
+    enddef;
+    labeloffset:=labeloffset*4;
+    Vertical(#1);
+    Horizontal(#2);
+  \end{mpost}
+  \fi%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuissanceQuatre.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuzzleSommePyramide.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuzzleSommePyramide.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuzzleSommePyramide.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,134 @@
+%%%
+% Puzzle Somme Pyramide
+%%%
+\setKVdefault[ClesPuzzleP]{Largeur=40pt,Etages=4,Graines=false,Solutions=false,Jeu,EnonceQuestion=false,NbLignes=7}
+\defKV[ClesPuzzleP]{Graine=\setKV[ClesPuzzleP]{Graines}}%
+\defKV[ClesPuzzleP]{Solution=\setKV[ClesPuzzleP]{Solutions}\setKV[ClesPuzzleP]{Jeu=false}}%
+\defKV[ClesPuzzleP]{Questions=\setKV[ClesPuzzleP]{EnonceQuestion}\setKV[ClesPuzzleP]{Jeu=false}}%
+\newcounter{PfCPuzzlePcpt}
+\newcounter{PfCPuzzlePavcpt}
+\newlength{\PfCPuzzleP}
+
+\NewDocumentCommand\PuzzlePyramideListeLettres{}{%
+  \setcounter{PfCPuzzlePcpt}{0}%
+  \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[1]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[2]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[3]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[4]}\Alph{PfCPuzzlePavcpt} et \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[5]}\Alph{PfCPuzzlePavcpt}%
+}
+
+\NewDocumentCommand\PuzzlePyramide{o m}{%
+  \useKVdefault[ClesPuzzleP]%
+  \setKV[ClesPuzzleP]{#1}%
+  \ifboolKV[ClesPuzzleP]{Graines}{\PfCGraineAlea{\useKV[ClesPuzzleP]{Graine}}}{}%
+  \setsepchar{§}
+  \readlist*\PfCPuzzlePQuestions{#2}%
+  \setsepchar{,}
+  \setlength{\PfCPuzzleP}{\useKV[ClesPuzzleP]{Largeur}}%
+  \xdef\PfCPuzzlePLettres{1}%
+  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[ClesPuzzleP]{Etages}*(\useKV[ClesPuzzleP]{Etages}+1)/2}}}\do{%
+    \xdef\PfCPuzzlePLettres{\PfCPuzzlePLettres,##1}%
+  }%
+  \MelangeListe{\PfCPuzzlePLettres}{\fpeval{\useKV[ClesPuzzleP]{Etages}*(\useKV[ClesPuzzleP]{Etages}+1)/2}}%
+  \readlist*{\PfCPuzzlePCptLettre}{\faa}%
+  \xdef\PuzzlePyramideLettres{\PuzzlePyramideListeLettres}%
+  \setcounter{PfCPuzzlePcpt}{0}%
+  \ifboolKV[ClesPuzzleP]{Solutions}{%
+%    % Plateau de jeu
+    \begin{center}
+      \begin{NiceTabular}{*{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}{m{\PfCPuzzleP}}}%[hvlines]
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}}}}\do{%
+          \xintifForLast{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&}{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&&}
+        }\\%
+        \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
+          \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
+            \xintifForLast{\\}{&}
+          }%
+        }%
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-1}}}\do{%
+          \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
+            \xintifForFirst{}{&}
+          }\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-##1}}}\do{%
+            &\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&
+          }%
+          \\
+          \xintFor* ##3 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
+            \xintFor* ##4 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
+              \xintifForLast{\\}{&}
+            }%
+          }%
+        }%
+      \end{NiceTabular}
+    \end{center}
+  }{%
+    \ifboolKV[ClesPuzzleP]{EnonceQuestion}{%
+      % Plateau des questions
+      \setcounter{PfCPuzzlePcpt}{0}%
+      \begin{center}
+        \begin{NiceTabular}{*{10}{m{\PfCPuzzleP}}}%[hvlines]
+          \xintFor* ##3 in {\xintSeq{1}{\fpeval{ceil(\PfCPuzzlePQuestionslen/5)}}}\do{%
+            \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
+              \xintifForLast{%
+                \Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{%
+                  \stepcounter{PfCPuzzlePcpt}%
+                  \xintifboolexpr{\thePfCPuzzlePcpt>\PfCPuzzlePQuestionslen}{}{%
+                    \xintFor* ##4 in{\xintSeq{1}{\PfCPuzzlePQuestionslen}}\do{%
+                      \xintifboolexpr{\thePfCPuzzlePcpt==\PfCPuzzlePCptLettre[##4]}{\PfCPuzzlePQuestions[##4]}{}%
+                    }%
+                  }%
+                }&%
+              }{%
+                \Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{%
+                  \stepcounter{PfCPuzzlePcpt}%
+                  \xintifboolexpr{\thePfCPuzzlePcpt>\PfCPuzzlePQuestionslen}{}{%
+                    \xintFor* ##4 in{\xintSeq{1}{\PfCPuzzlePQuestionslen}}\do{%
+                      \xintifboolexpr{\thePfCPuzzlePcpt==\PfCPuzzlePCptLettre[##4]}{\PfCPuzzlePQuestions[##4]}{}%
+                    }%
+                  }%
+                }%
+                &&%
+              }%
+            }\\%
+            \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
+              \xintFor* ##2 in {\xintSeq{1}{10}}\do{%
+                \xintifForLast{\\}{&}
+              }%
+            }%
+          }%
+          \CodeAfter
+          \setcounter{PfCPuzzlePcpt}{0}%
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{ceil(\PfCPuzzlePQuestionslen/5)}}}\do{%
+            \xintFor* ##2 in {\xintSeq{1}{5}}\do{%
+              \tikz{\node[anchor={north west},xshift=1mm,yshift=-1mm] at (\fpeval{(##1-1)*\useKV[ClesPuzzleP]{NbLignes}+1}-|\fpeval{2*##2-1}) {\stepcounter{PfCPuzzlePcpt}\Large\bfseries\Alph{PfCPuzzlePcpt}};}%
+              \tikz{\node[anchor={south east},xshift=-2mm,yshift=-2mm,rectangle,draw] at (\fpeval{##1*\useKV[ClesPuzzleP]{NbLignes}}-|\fpeval{2*##2+1}) {\large\bfseries\hbox to 1.2\PfCPuzzleP{\rule{0pt}{1.8ex}}};}%
+            }%
+          }%
+        \end{NiceTabular}
+      \end{center}%
+    }{%
+      % Plateau de jeu
+      \begin{center}
+        \begin{NiceTabular}{*{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}{m{\PfCPuzzleP}}}%[hvlines]
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}}}}\do{%
+            \xintifForLast{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&}{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&&}
+          }\\%
+          \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
+            \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
+              \xintifForLast{\\}{&}
+            }%
+          }%
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-1}}}\do{%
+            \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
+              \xintifForFirst{}{&}
+            }\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-##1}}}\do{%
+              &\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{}&
+            }%
+            \\
+            \xintFor* ##3 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
+              \xintFor* ##4 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
+                \xintifForLast{\\}{&}
+              }%
+            }%
+          }%
+        \end{NiceTabular}
+      \end{center}
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPuzzleSommePyramide.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPyramideCalculs.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPyramideCalculs.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPyramideCalculs.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,281 @@
+
+
+%%%
+% Pyramide de calculs
+%%%
+\newcommand\DessinePyramideNombreMul[1]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    pair A[],B[],O;
+    cote:=\useKV[ClesPyramide]{Cote};
+    boolean Aide,Produit,Solution,Vide;
+    Aide:=\useKV[ClesPyramide]{Aide};
+    Vide:=\useKV[ClesPyramide]{Vide};
+    Produit:=\useKV[ClesPyramide]{Produit};
+    Solution:=\useKV[ClesPyramide]{Solution};
+    A1=u*(1,1);
+    A2-A1=cote*(1,0);
+    A3=rotation(A2,A1,60);
+    A4=A1;
+    B1=iso(A1,A2);
+    B2=iso(A2,A3);
+    B3=iso(A3,A1);
+    O=iso(A1,A2,A3);
+    path BoiteRec;
+    BoiteRec=((-0.4,-0.5)--(0.4,-0.5){dir0}..{dir90}(0.5,-0.4)--(0.5,0.4){dir90}..{dir180}(0.4,0.5)--(-0.4,0.5){dir180}..{dir-90}(-0.5,0.4)--(-0.5,-0.4){dir-90}..cycle) scaled 1u;
+    % On trace et on affiche...éventuellement :)
+    trace polygone(A1,A2,A3);
+    for k=1 upto 3:
+    trace segment(O,B[k]) dashed withdots scaled 0.25;
+    draw BoiteRec shifted (1.75[O,B[k]]-center BoiteRec) dashed evenly scaled 0.5;
+    endfor;
+    if Vide:
+    else:
+    % On récupère les valeurs pour déterminer les produits
+    k=0;
+    for p_=#1:
+    k:=k+1;
+    Facteur[k]=p_;
+    endfor;
+    Produit[1]=Facteur[1] * Facteur[2];
+    Produit[2]=Facteur[2] * Facteur[3];
+    Produit[3]=Facteur[3] * Facteur[1];
+    for k=1 upto 3:
+    if Produit or Solution:
+    label(TEX("\num{"&decimal(Produit[k])&"}"),(1.75[O,B[k]]-center BoiteRec));
+    fi;
+    if Produit:
+    else:
+    label(TEX("\num{"&decimal(Facteur[k])&"}"),(0.5[O,A[k]]-center BoiteRec));
+    fi;
+    endfor;
+    fi;
+    if Aide:
+    for k=1 upto 3:
+    drawarrow (0.5[O,A[k]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (1.75[O,B[k]]-center BoiteRec) dashed evenly scaled 0.5;
+    drawarrow (0.5[O,A[k+1]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (1.75[O,B[k]]-center BoiteRec) dashed evenly scaled 0.5;
+    endfor;
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={cote:=\useKV[ClesPyramide]{Cote};
+      boolean Aide,Produit,Solution,Vide;
+      Aide:=\useKV[ClesPyramide]{Aide};
+      Vide:=\useKV[ClesPyramide]{Vide};
+      Produit:=\useKV[ClesPyramide]{Produit};
+      Solution:=\useKV[ClesPyramide]{Solution};}]
+    pair A[],B[],O;
+    A1=u*(1,1);
+    A2-A1=cote*(1,0);
+    A3=rotation(A2,A1,60);
+    A4=A1;
+    B1=iso(A1,A2);
+    B2=iso(A2,A3);
+    B3=iso(A3,A1);
+    O=iso(A1,A2,A3);
+    path BoiteRec;
+    BoiteRec=((-0.4,-0.5)--(0.4,-0.5){dir0}..{dir90}(0.5,-0.4)--(0.5,0.4){dir90}..{dir180}(0.4,0.5)--(-0.4,0.5){dir180}..{dir-90}(-0.5,0.4)--(-0.5,-0.4){dir-90}..cycle) scaled 1u;
+    % On trace et on affiche...éventuellement :)
+    trace polygone(A1,A2,A3);
+    for k=1 upto 3:
+    trace segment(O,B[k]) dashed withdots scaled 0.25;
+    draw BoiteRec shifted (1.75[O,B[k]]-center BoiteRec) dashed evenly scaled 0.5;
+    endfor;
+    if Vide:
+    else:
+    % On récupère les valeurs pour déterminer les produits
+    k=0;
+    for p_=#1:
+    k:=k+1;
+    Facteur[k]=p_;
+    endfor;
+    Produit[1]=Facteur[1] * Facteur[2];
+    Produit[2]=Facteur[2] * Facteur[3];
+    Produit[3]=Facteur[3] * Facteur[1];
+    for k=1 upto 3:
+    if Produit or Solution:
+    label(TEX("\num{"&decimal(Produit[k])&"}"),(1.75[O,B[k]]-center BoiteRec));
+    fi;
+    if Produit:
+    else:
+    label(TEX("\num{"&decimal(Facteur[k])&"}"),(0.5[O,A[k]]-center BoiteRec));
+    fi;
+    endfor;
+    fi;
+    if Aide:
+    for k=1 upto 3:
+    drawarrow (0.5[O,A[k]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (1.75[O,B[k]]-center BoiteRec) dashed evenly scaled 0.5;
+    drawarrow (0.5[O,A[k+1]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (1.75[O,B[k]]-center BoiteRec) dashed evenly scaled 0.5;
+    endfor;
+    fi;
+  \end{mpost}
+  \fi
+}
+
+\newcommand\DessinePyramideNombre[1]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    pair A[][],B[];
+    path Case[];
+    color CaseCouleur;
+    nbetages:=\useKV[ClesPyramide]{Etages};
+    largeur:=\useKV[ClesPyramide]{Largeur};
+    hauteur:=\useKV[ClesPyramide]{Hauteur};
+    CaseCouleur:=\useKV[ClesPyramide]{Couleur};
+    boolean Double;
+    Double=\useKV[ClesPyramide]{Double};
+    Nbeb:=0;%Pour associer les textes avec les points. Plus facile :)
+    if Double:
+    for k=nbetages downto 1:
+    for l=0 upto (k-1):
+    Nbeb:=Nbeb+1;
+    A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,(nbetages-k)*hauteur);
+    B[Nbeb]=A[k][l];
+    Case[Nbeb]=((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5*(largeur,hauteur));
+    trace Case[Nbeb];
+    endfor;
+    endfor;
+    for k=nbetages-1 downto 1:
+    for l=0 upto (k-1):
+    Nbeb:=Nbeb+1;
+    A[-k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,-(nbetages-k)*hauteur);
+    B[Nbeb]=A[-k][l];
+    Case[Nbeb]=((unitsquare xscaled largeur) yscaled hauteur) shifted (A[-k][l]-0.5*(largeur,hauteur));
+    trace Case[Nbeb];
+    endfor;
+    endfor;
+    else:
+    if \useKV[ClesPyramide]{Inverse}:
+    change:=-1;
+    else:
+    change=1;
+    fi;
+    for k=nbetages downto 1:
+    for l=0 upto (k-1):
+    Nbeb:=Nbeb+1;
+    A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,change*(nbetages-k)*hauteur);
+    B[Nbeb]=A[k][l];
+    Case[Nbeb]=((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5*(largeur,hauteur));
+    trace Case[Nbeb];
+    endfor;
+    endfor;
+    fi;
+    if \useKV[ClesPyramide]{Vide}:
+    else:
+    Nbeb:=0;
+    for p_=#1:
+    Nbeb:=Nbeb+1;
+    if (substring(0,1) of p_)="*":
+    fill Case[Nbeb] withcolor CaseCouleur;
+    trace Case[Nbeb];
+    label(TEX(substring(1,length p_) of p_),B[Nbeb]);
+    elseif (substring(0,1) of p_)="!":
+    drawoptions(withcolor \useKV[ClesPyramide]{CouleurNombre});
+    label(TEX(substring(1,length p_) of p_),B[Nbeb]);
+    drawoptions();
+    else:
+    label(TEX(p_),B[Nbeb]);
+    fi;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={nbetages:=\useKV[ClesPyramide]{Etages};largeur:=\useKV[ClesPyramide]{Largeur};hauteur:=\useKV[ClesPyramide]{Hauteur};boolean Vide;Vide=\useKV[ClesPyramide]{Vide};boolean Inverse;Inverse=\useKV[ClesPyramide]{Inverse};color CaseCouleur; CaseCouleur:=\useKV[ClesPyramide]{Couleur};boolean Double;Double=\useKV[ClesPyramide]{Double}; color CouleurNombre;CouleurNombre=\useKV[ClesPyramide]{CouleurNombre};}]
+    pair A[][],B[];
+    path Case[];
+    Nbeb:=0;
+    if Double:
+    for k=nbetages downto 1:
+    for l=0 upto (k-1):
+    Nbeb:=Nbeb+1;
+    A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,(nbetages-k)*hauteur);
+    B[Nbeb]=A[k][l];
+    Case[Nbeb]=((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5*(largeur,hauteur));
+    trace Case[Nbeb];
+    endfor;
+    endfor;
+    for k=nbetages-1 downto 1:
+    for l=0 upto (k-1):
+    Nbeb:=Nbeb+1;
+    A[-k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,-(nbetages-k)*hauteur);
+    B[Nbeb]=A[-k][l];
+    Case[Nbeb]=((unitsquare xscaled largeur) yscaled hauteur) shifted (A[-k][l]-0.5*(largeur,hauteur));
+    trace Case[Nbeb];
+    endfor;
+    endfor;
+    else:
+    if \useKV[ClesPyramide]{Inverse}:
+    change:=-1;
+    else:
+    change=1;
+    fi;
+    for k=nbetages downto 1:
+    for l=0 upto (k-1):
+    Nbeb:=Nbeb+1;
+    A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,change*(nbetages-k)*hauteur);
+    B[Nbeb]=A[k][l];
+    Case[Nbeb]=((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5*(largeur,hauteur));
+    trace Case[Nbeb];
+    endfor;
+    endfor;
+    fi;
+    if \useKV[ClesPyramide]{Vide}:
+    else:
+    Nbeb:=0;
+    for p_=#1:
+    Nbeb:=Nbeb+1;
+    if (substring(0,1) of p_)="*":
+    fill Case[Nbeb] withcolor CaseCouleur;
+    trace Case[Nbeb];
+    label(LATEX(substring(1,length p_) of p_),B[Nbeb]);
+    elseif (substring(0,1) of p_)="!":
+    drawoptions(withcolor CouleurNombre);
+    label(LATEX(substring(1,length p_) of p_),B[Nbeb]);
+    drawoptions();
+    else:
+    label(LATEX(p_),B[Nbeb]);
+    fi;
+    endfor;
+  \end{mpost}
+  \fi
+}%
+
+\setKVdefault[ClesPyramide]{Etages=5,Largeur=2cm,Hauteur=1cm,Vide=false,Inverse=false,Double=false,Couleur=Crimson,Multiplication=false,CouleurNombre=blue,Produit=false,Solution=false,Aide=false,Cote=4cm}%
+
+\newtoks\toklistecaseP%
+\def\UpdatetoksPyramide#1\nil{\addtotok\toklistecaseP{"#1",}}%
+\def\UpdatetoksPyramideMul#1\nil{\addtotok\toklistecaseP{#1,}}%
+
+\NewDocumentCommand\PyramideNombre{o m}{%
+  \useKVdefault[ClesPyramide]%
+  \setKV[ClesPyramide]{#1}%
+  \ifboolKV[ClesPyramide]{Multiplication}{%
+    \ifx\bla#2\bla%
+    \setKV[ClesPyramide]{Vide=true}%
+    \DessinePyramideNombreMul{\the\toklistecaseP}%
+    \else
+    \setsepchar{,}%
+    \readlist*\ListePyramide{#2}%
+    \DessinePyramideNombreMul{\ListePyramide[1],\ListePyramide[2],\ListePyramide[3]}%
+    \fi
+  }{%
+    \ifx\bla#2\bla%
+    \setKV[ClesPyramide]{Vide=true}%
+    \DessinePyramideNombre{\the\toklistecaseP}%
+    \else%
+    \setsepchar{,}%
+    \readlist*\ListePyramide{#2}%
+    \ifboolKV[ClesPyramide]{Double}{%
+      \def\CalculNombreComposants{\fpeval{\useKV[ClesPyramide]{Etages}*\useKV[ClesPyramide]{Etages}}}%
+    }{%
+      \def\CalculNombreComposants{\fpeval{\useKV[ClesPyramide]{Etages}*(\useKV[ClesPyramide]{Etages}+1)/2}}%
+    }%
+    \xintifboolexpr{\ListePyramidelen==\CalculNombreComposants}{%
+      \toklistecaseP{}%
+      \foreachitem\compteur\in\ListePyramide{\expandafter\UpdatetoksPyramide\compteur\nil}%
+      \DessinePyramideNombre{\the\toklistecaseP}%
+    }{Le nombre d'éléments dans la liste des propositions n'est pas compatible avec le nombre d'étages choisi.}%
+    \fi%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPyramideCalculs.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,516 @@
+%%%
+% Le th\'eor\`eme de Pythagore
+%%%
+\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0,Perso=false,AllPerso=false,SansMots=false}
+
+% On d\'efinit les figures \`a utiliser
+\def\MPFigurePytha#1#2#3#4#5#6{%
+  % #1 Premier sommet
+  % #2 Sommet de l'angle droit
+  % #3 troisi\`eme sommet
+  % #4 1ere longueur
+  % #5 2eme longueur
+  % #6 angle de rotation de la figure
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesPythagore]{Echelle};
+    pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+    O=u*(2.5,2.5);
+    path cc;
+    cc=(fullcircle scaled 4u) shifted O;
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.9*length cc) of cc;
+    B=A rotatedabout(O,-120);
+    C=2[A,O];
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % On d\'efinit l'angle droit
+    D-B=7*unitvector(C-B);
+    F-B=7*unitvector(A-B);
+    E-D=F-B;
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    draw D--E--F;
+    numeric decalage;
+    decalage=3mm;
+    if (#4<#5) or (#4=#5) :
+    if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     else:
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     fi
+    else:
+      if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+        else:
+        label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C)
+        rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+      fi;
+    fi;
+    label(btex #3 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #1 etex,1.2[O,C]);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesPythagore]{Echelle};}]
+    pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+    O=u*(2.5,2.5);
+    path cc;
+    cc=(fullcircle scaled 4u) shifted O;
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.9*length cc) of cc;
+    B=A rotatedabout(O,-120);
+    C=2[A,O];
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % On d\'efinit l'angle droit
+    D-B=7*unitvector(C-B);
+    F-B=7*unitvector(A-B);
+    E-D=F-B;
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
+    draw D--E--F;
+    decalage=3mm;
+    if (#4<#5) or (#4=#5) :
+    if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     else:
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     fi
+    else:
+      if ypart(B)>ypart(O) :
+      label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+        else:
+        label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C)
+        rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+      fi;
+    fi;
+    label(btex #3 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #1 etex,1.2[O,C]);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureReciPytha#1#2#3#4#5#6#7{%
+  % #1 Premier sommet
+    % #2 Sommet de l'angle droit
+    % #3 troisi\`eme sommet
+    % #4 1ere longueur
+    % #5 2eme longueur
+    % #6 3eme longueur
+    % #7 angle de rotation de la figure
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesPythagore]{Echelle};
+    pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+    O=u*(2.5,2.5);
+    path cc;
+    cc=(fullcircle scaled 4u) shifted O;
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.8*length cc) of cc;
+    B=A rotatedabout(O,-100);
+    C=2[A,O];
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#7);
+    B:=B rotatedabout(O,#7);
+    C:=C rotatedabout(O,#7);
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
+    decalage=3mm;
+    if ypart(B)>ypart(O) :
+    label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+    label(btex \num{#5} etex,1/2[C,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#6} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+    else:
+    label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+    label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#6} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+    fi;
+    label(btex #1 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #3 etex,1.2[O,C]);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesPythagore]{Echelle};}]
+    pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+    O=u*(2.5,2.5);
+    path cc;
+    cc=(fullcircle scaled 4u) shifted O;
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.8*length cc) of cc;
+    B=A rotatedabout(O,-100);
+    C=2[A,O];
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#7);
+    B:=B rotatedabout(O,#7);
+    C:=C rotatedabout(O,#7);
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
+    decalage=3mm;
+    if ypart(B)>ypart(O) :
+    label(LATEX("\num{"&decimal(#4)&"}") rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+    label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
+    label(LATEX("\num{"&decimal(#6)&"}") rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
+    else:
+    label(LATEX("\num{"&decimal(#4)&"}") rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+    label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+    label(LATEX("\num{"&decimal(#6)&"}") rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
+    fi;
+    label(btex #1 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #3 etex,1.2[O,C]);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigurePythaSansMots#1#2#3#4#5#6{%
+  % #1 Premier sommet
+  % #2 Sommet de l'angle droit
+  % #3 troisi\`eme sommet
+  % #4 1ere longueur
+  % #5 2eme longueur
+  % #6 angle de rotation de la figure
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesPythagore]{Echelle};
+    pair A,B,C,O,D,E,F,L[],M[],N[];%B est le sommet de l'angle droit
+    O=u*(2.5,2.5);
+    path cc;
+    cc=(fullcircle scaled 4u) shifted O;
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.9*length cc) of cc;
+    B=A rotatedabout(O,-120);
+    C=2[A,O];
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % On d\'efinit l'angle droit
+    D-B=7*unitvector(C-B);
+    F-B=7*unitvector(A-B);
+    E-D=F-B;
+    trace polygone(A,B,C);
+    draw D--E--F;
+    L1=rotation(B,A,90);
+    L2-L1=B-A;
+    trace chemin(A,L1,L2,B);
+    M1=rotation(C,B,90);
+    M2-M1=C-B;
+    trace chemin(B,M1,M2,C);
+    N1=rotation(A,C,90);
+    N2-N1=A-C;
+    trace chemin(C,N1,N2,A);    
+    numeric decalage;
+    decalage=3mm;
+    if (#4<#5) or (#4=#5) :
+    if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]+decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(B,M2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}+\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4+#5*#5}}$\\\end{tabular}"),iso(C,N2));
+     else:
+        label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]+decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(B,M2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}+\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4+#5*#5}}$\\\end{tabular}"),iso(C,N2));
+        drawarrow 2/10[iso(A,L2),iso(C,N2)]--8/10[iso(A,L2),iso(C,N2)];
+        drawarrow 2/10[iso(B,M2),iso(C,N2)]--8/10[iso(B,M2),iso(C,N2)];
+     fi
+    else:
+      if ypart(B)>ypart(O) :
+        label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(C,N2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}-\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4-#5*#5}}$\\\end{tabular}"),iso(B,M2));
+        drawarrow 2/10[iso(A,L2),iso(B,M2)]--8/10[iso(A,L2),iso(B,M2)];
+        drawarrow 2/10[iso(C,N2),iso(B,M2)]--8/10[iso(C,N2),iso(B,M2)];
+        else:
+        label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(C,N2));
+        label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}-\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4-#5*#5}}$\\\end{tabular}"),iso(B,M2));
+        drawarrow 2/10[iso(A,L2),iso(B,M2)]--8/10[iso(A,L2),iso(B,M2)];
+        drawarrow 2/10[iso(C,N2),iso(B,M2)]--8/10[iso(C,N2),iso(B,M2)];
+      fi;
+    fi;
+    label(btex #3 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #1 etex,1.2[O,C]);
+  \end{mplibcode}
+  \fi
+}
+
+\newcommand\RedactionPythagore{}%
+\newcommand\RedactionReciPythagore{}%
+\newcommand\RedactionCalculsPythagore{}%
+\newcommand\RedactionCalculsReciPythagore{}%
+\newcommand\RedactionConclusionReciPythagore{}%
+
+% \newcommand\Pythagore[5][]{%
+\NewDocumentCommand\Pythagore{o m m m m}{%
+  % #1 Param\`etres sous forme de cl\'es
+  % #2 Nom "complet" du triangle : ABC par exemple
+  % #3 Premi\`ere longueur
+  % #4 Deuxi\`eme longueur
+  % #5 Troisi\`eme longueur (\'eventuellement vide)
+  \useKVdefault[ClesPythagore]%obligatoire car la macro n'est pas dans un groupe.
+  \setKV[ClesPythagore]{#1}%On lit les arguments optionnels
+  \DeclareSIUnit{\PfCPythaUnit}{\useKV[ClesPythagore]{Unite}}%
+  \ifboolKV[ClesPythagore]{Reciproque}{%
+    % On retient les noms des sommets
+    \StrMid{#2}{1}{1}[\NomA]%
+    \StrMid{#2}{2}{2}[\NomB]%
+    \StrMid{#2}{3}{3}[\NomC]%
+    \xdef\NomTriangle{\NomA\NomB\NomC}%
+    % on stocke les valeurs donn\'ees
+    \opcopy{#3}{A1}%
+    \opcopy{#4}{A2}%
+    \opcopy{#5}{A3}%
+    \xdef\GrandCote{#3}%
+    \xdef\PetitCote{#4}%
+    \xdef\MoyenCote{#5}%
+    % On trace une figure ou pas ?
+    \ifboolKV[ClesPythagore]{FigureSeule}{%
+      \MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}%
+    }{%
+      \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+        \begin{multicols}{2}
+          {\em La figure est donn\'ee \`a titre indicatif.}%
+          \[\MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}\]%
+          \par\columnbreak\par%
+          \ifboolKV[ClesPythagore]{AllPerso}{%
+            \RedactionReciPythagore%
+            \RedactionCalculsReciPythagore%
+            \RedactionConclusionReciPythagore%
+          }{%
+            % on r\'edige
+            \ifboolKV[ClesPythagore]{Perso}{%
+              \RedactionReciPythagore%
+            }{%
+              Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand c\^ot\'e.%
+            }
+            \ifboolKV[ClesPythagore]{ReciColonnes}{%
+              \[
+                \begin{array}{cccc|cccc}
+                  &&\NomA\NomC^2&&&\NomA\NomB^2&+&\NomB\NomC^2\\
+                  &&\opexport{A1}{\Aun}\num{\Aun}^2&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
+                  &&\opmul*{A1}{A1}{a1}&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
+                  &&\opexport{a1}{\Aun}\num{\Aun}&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
+                \end{array}
+              \]
+            }{%
+              \[\left.
+                  \begin{array}{l}
+                    \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\
+                    \\
+                    \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\
+                  \end{array}
+                \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
+              \]
+            }
+            \ifboolKV[ClesPythagore]{Egalite}{%
+              \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
+              \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore n'est pas v\'erifi\'ee. Donc le triangle $#2$ n'est pas rectangle.\fi%
+            }{%
+              \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle
+              en $\NomB$ d'apr\`es la r\'eciproque du th\'eor\`eme de Pythagore.\fi%
+              \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
+              triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'apr\`es la contrapos\'ee du th\'eor\`eme de Pythagore.}\fi%
+            }
+          }
+        \end{multicols}
+      }{%
+        \ifboolKV[ClesPythagore]{AllPerso}{%
+          \RedactionReciPythagore%
+          \RedactionCalculsReciPythagore%
+          \RedactionConclusionReciPythagore%
+        }{%
+          \ifboolKV[ClesPythagore]{Perso}{\RedactionReciPythagore}{%
+            Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand c\^ot\'e.%
+          }
+          \ifboolKV[ClesPythagore]{ReciColonnes}{%
+            \[
+              \begin{array}{cccc|cccc}
+                &&\NomA\NomC^2&&&\NomA\NomB^2&+&\NomB\NomC^2\\
+                &&\opexport{A1}{\Aun}\num{\Aun}^2&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
+                &&\opmul*{A1}{A1}{a1}&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
+                &&\opexport{a1}{\Aun}\num{\Aun}&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
+              \end{array}
+            \]
+          }{%
+            \[\left.
+                \begin{array}{l}
+                  \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\
+                  \\
+                  \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\
+                \end{array}
+              \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
+            \]
+          }%
+          \ifboolKV[ClesPythagore]{Egalite}{%
+            \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
+            \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore n'est pas v\'erifi\'ee. Donc le triangle $#2$ n'est pas rectangle.\fi%
+          }{%
+            \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle
+            en $\NomB$ d'apr\`es la r\'eciproque du th\'eor\`eme de Pythagore.\fi%
+            \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
+            triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'apr\`es la contrapos\'ee du th\'eor\`eme de Pythagore.}\fi%
+          }%
+        }%
+      }%
+    }%
+  }{%
+    % [xlop] param\`etres de calcul
+    \opcopy{#3}{A1}%
+    \opcopy{#4}{A2}%
+    \opcopy{\useKV[ClesPythagore]{Precision}}{pres}%
+    \xintifboolexpr{#3<#4 || #3==#4}{
+      \xdef\PetitCote{#3}%
+      \xdef\MoyenCote{#4}%
+      \xdef\GrandCote{}%
+    }{%
+      \xdef\GrandCote{#3}%
+      \xdef\MoyenCote{#4}%
+      \xdef\PetitCote{}% Pour la personnalisation
+    }
+    % On retient les noms des sommets
+    \StrMid{#2}{1}{1}[\NomA]%
+    \StrMid{#2}{2}{2}[\NomB]%
+    \StrMid{#2}{3}{3}[\NomC]%
+    \xdef\NomTriangle{\NomA\NomB\NomC}%
+    \xdef\NomAngleDroit{\NomB}%
+    \xdef\NomSommetA{\NomA}%
+    \xdef\NomSommetC{\NomC}%
+    % On trace une figure ou pas ?
+    \ifboolKV[ClesPythagore]{FigureSeule}{%
+      \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
+        \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+      }{%
+        \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+      }%
+      \MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}
+    }{%
+      \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+        \begin{multicols}{2}%
+          {\em La figure est donn\'ee \`a titre indicatif.}%
+          \[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\]
+          \par\columnbreak\par%
+          % On d\'emarre la r\'esolution
+          \ifboolKV[ClesPythagore]{AllPerso}{%
+            \RedactionPythagore%
+            \RedactionCalculsPythagore%
+          }{%
+            \ifboolKV[ClesPythagore]{Perso}{%
+              \RedactionCalculsPythagore%
+            }{%
+              \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
+              }%
+            }
+            \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
+              \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+              \begin{align*}
+                \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+                \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+              \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+              \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                               \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                }%
+              \end{align*}
+            }{%\else%
+              \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+              \begin{align*}
+                \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+                \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+                \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                                 \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                }%
+              \end{align*}
+            }%\fi%
+          }
+        \end{multicols}
+      }{%
+        % On d\'emarre la r\'esolution
+        \ifboolKV[ClesPythagore]{SansMots}{%
+         \MPFigurePythaSansMots{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}%
+        }{%
+          \ifboolKV[ClesPythagore]{AllPerso}{%
+            \RedactionPythagore%
+            \RedactionCalculsPythagore%
+          }{%
+            \ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
+              }}%
+            \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
+              \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+              \begin{align*}
+                \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+                \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+                \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                                 \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                }
+              \end{align*}
+            }{%\else
+              \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+              \ifboolKV[ClesPythagore]{Soustraction}{%
+                \begin{align*}
+                  \NomA\NomB^2&=\NomA\NomC^2-\NomB\NomC^2\\
+                  \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}-\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                  \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                  \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                  \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+                  \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                                   \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                  }
+                \end{align*}
+              }{%
+                \begin{align*}
+                  \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+                  \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+                  \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                  \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+                  \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+                  \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+                  \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}%
+                                                                   \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+                  }
+                \end{align*}
+              }%
+            }%\fi%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCPythagore.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsFlash.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsFlash.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsFlash.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,631 @@
+%%%
+% Questions Flash
+%%%
+\tcbset{Expression/.style={colback=white,valign=center,left=0mm,right=0mm,top=1mm,bottom=1mm,colframe=white}}%
+\tcbset{ExpressionSerie1/.style={colback=\useKV[ClesFlash]{Couleur1},left=0mm,right=0mm,top=1mm,bottom=1mm}}%
+\tcbset{ExpressionSerie2/.style={colback=\useKV[ClesFlash]{Couleur2},left=0mm,right=0mm,top=1mm,bottom=1mm}}%
+\tcbset{ExpressionSerie3/.style={colback=\useKV[ClesFlash]{Couleur3},left=0mm,right=0mm,top=1mm,bottom=1mm}}
+\tcbset{ExpressionSerie4/.style={colback=\useKV[ClesFlash]{Couleur4},left=0mm,right=0mm,top=1mm,bottom=1mm}}
+\tcbset{BoiteExpression/.style={enhanced,nobeforeafter,tcbox raise base,colback=white,right=3.5mm,left=3.5mm,halign=center,colframe=black}}
+\newtcolorbox{CadreNombre}[1][]{%
+  Expression,#1}
+
+\newcommand\BoiteFlash[2][40pt]{%
+  \ifx\bla#2\bla%
+  \tcbox[BoiteExpression]{\hbox to#1{\phantom{A}}}%
+  \else
+  \tcbox[BoiteExpression]{#2}%
+  \fi
+}
+
+\setKVdefault[ClesFlash]{Hauteur=0.2\textheight,Simple=false,Intrus=false,Kahout=false,Daily=false,Expression=false,Mental=false,Mesure=false,Heure=false,Decimal=false,Operation=Multiplie,Numeration=false,Evaluation=false,Pause=false,Couleur1=blue!10,Couleur2=orange!10,Couleur3=green!10,Couleur4=yellow!10,Numerique=false,Seul=false}
+
+\newlength{\HauteurFlash}
+
+\def\MPAfficheur#1#2#3{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=0.5u;
+    draw Afficheur(#1 div10,0);
+    draw Afficheur(#1 mod10,0) shifted(u*(1,0));
+    draw Afficheur(10,0) shifted(u*(2,0));
+    draw Afficheur(#2 div10,0) shifted(u*(3,0));
+    draw Afficheur(#2 mod10,0) shifted(u*(4,0));
+    draw Afficheur(10,0) shifted(u*(5,0));
+    draw Afficheur(#3 div10,0) shifted(u*(6,0));
+    draw Afficheur(#3 mod10,0) shifted(u*(7,0));
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    u:=0.5u;
+    draw Afficheur(#1 div10,0);
+    draw Afficheur(#1 mod10,0) shifted(u*(1,0));
+    draw Afficheur(10,0) shifted(u*(2,0));
+    draw Afficheur(#2 div10,0) shifted(u*(3,0));
+    draw Afficheur(#2 mod10,0) shifted(u*(4,0));
+    draw Afficheur(10,0) shifted(u*(5,0));
+    draw Afficheur(#3 div10,0) shifted(u*(6,0));
+    draw Afficheur(#3 mod10,0) shifted(u*(7,0));
+  \end{mpost}
+  \fi
+}
+
+\def\MPHorloge#1#2#3{
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+  marque_horloge=1;
+  save Hor;
+  picture Hor;
+  path gdeaig,pteaig,trot;
+  pair centrehorloge;
+  centrehorloge=(0,0);
+  path tourhorloge;
+  tourhorloge=cercles(centrehorloge,marque_horloge*cm);
+  Hor=image(
+  %% dessin de l'horloge
+  draw tourhorloge;
+  for i=0 upto 59:
+  if (i mod 5)=0:
+  if (i mod 15)=0:
+  draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 2bp;
+  else:
+  draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (5*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 1.5bp;
+  fi;
+  else:
+  draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (3*unitvector(centrehorloge-pointarc(tourhorloge,6*i))));
+  fi;
+  endfor;
+  path graduhorloge;
+  graduhorloge=cercles(centrehorloge,marque_horloge*cm+5*abs(unitvector(centrehorloge-pointarc(tourhorloge,0))));
+  % 
+  marque_p:="plein";
+  pointe(centrehorloge);
+  marque_p:="rien";
+  %% placement des aiguilles
+  gdeaig=centrehorloge--(pointarc(tourhorloge,0) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+  pteaig=centrehorloge--(pointarc(tourhorloge,0) shifted (18*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+  trot=centrehorloge--(pointarc(tourhorloge,0) shifted (10*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+  draw rotation(trot,centrehorloge,90-6*#3) withpen pencircle scaled0.4;
+  draw rotation(gdeaig,centrehorloge,90-6*#2) withpen pencircle scaled1.25;
+  draw rotation(pteaig,centrehorloge,90-30*(#1+#2/60)) withpen pencircle scaled 2bp;
+  );
+  draw Hor;
+  \end{mplibcode}
+\else
+  \begin{mpost}[mpsettings={input PfCGeometrie;}]
+    marque_horloge=1;
+    save Hor;
+    picture Hor;
+    path gdeaig,pteaig,trot;
+    pair centrehorloge;
+    centrehorloge=(0,0);
+    path tourhorloge;
+    tourhorloge=cercles(centrehorloge,marque_horloge*cm);
+    Hor=image(
+    %% dessin de l'horloge
+    draw tourhorloge;
+    for i=0 upto 59:
+    if (i mod 5)=0:
+    if (i mod 15)=0:
+    draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 2bp;
+    else:
+    draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (5*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 1.5bp;
+    fi;
+    else:
+    draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (3*unitvector(centrehorloge-pointarc(tourhorloge,6*i))));
+    fi;
+    endfor;
+    path graduhorloge;
+    graduhorloge=cercles(centrehorloge,marque_horloge*cm+5*abs(unitvector(centrehorloge-pointarc(tourhorloge,0))));
+    %
+    marque_p:="plein";
+    pointe(centrehorloge);
+    marque_p:="rien";
+    %% placement des aiguilles
+    gdeaig=centrehorloge--(pointarc(tourhorloge,0) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+    pteaig=centrehorloge--(pointarc(tourhorloge,0) shifted (18*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+    trot=centrehorloge--(pointarc(tourhorloge,0) shifted (10*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+    draw rotation(trot,centrehorloge,90-6*#3) withpen pencircle scaled0.4;
+    draw rotation(gdeaig,centrehorloge,90-6*#2) withpen pencircle scaled1.25;
+    draw rotation(pteaig,centrehorloge,90-30*(#1+#2/60)) withpen pencircle scaled 2bp;
+    );
+    draw Hor;
+  \end{mpost}
+  \fi
+}
+
+\newcommand\QFNumeration{%
+  \begin{CadreNombre}
+    {\Large LE NOMBRE DU JOUR est : }
+    \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie1]
+      $\square$ \textbf{Le chiffre des \ListeFlash[1,2] est :}
+      \tcbox[BoiteExpression]{\phantom{1500000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie2]
+      $\square$ \textbf{Le chiffre \ListeFlash[1,3] repr\'esente le
+        chiffre des :}
+      \tcbox[BoiteExpression]{\phantom{1500000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie3]
+      $\square$ \textbf{Le nombre de \ListeFlash[1,4] est :}
+      \tcbox[BoiteExpression]{\phantom{1500000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie4]
+      $\square$ \textbf{\ListeFlash[1,5] est le nombre des :}
+      \tcbox[BoiteExpression]{\phantom{1500000}}
+    \end{tcolorbox}
+  \end{CadreNombre}
+}
+
+\newcommand\QFHeure{%
+  \begin{CadreNombre}
+    {\Large L'HEURE DU JOUR est : }\ifboolKV[ClesFlash]{Numerique}{\raisebox{-0.3cm}{\MPAfficheur{\NbHeures}{\NbMinutes}{\NbSecondes}}}{\raisebox{-0.9cm}{{\MPHorloge{\NbHeures}{\NbMinutes}{\NbSecondes}}}}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie1]
+      $\square$ \textbf{\ListeFlash[1,2] :}
+      \tcbox[BoiteExpression]{\phantom{1500000000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie2]
+      $\square$ \textbf{\ListeFlash[1,3] :}
+      \tcbox[BoiteExpression]{\phantom{1500000000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie3]
+      $\square$ \textbf{\ListeFlash[1,4] :}
+      \tcbox[BoiteExpression]{\phantom{\hbox to4.5em{15}}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie4]
+      $\square$ \textbf{\ListeFlash[1,5] :}
+      \tcbox[BoiteExpression]{\phantom{\hbox to4.5em{1500000}}}
+    \end{tcolorbox}
+  \end{CadreNombre}
+}
+
+\newcommand\QFMesure{%
+  \begin{CadreNombre}
+    {\Large LA MESURE DU JOUR est : }
+    \tcbox[BoiteExpression]{\ListeFlash[1,1]}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie1]
+      $\square$ \textbf{Convertis-la en \ListeFlash[1,2] :}
+      \tcbox[BoiteExpression]{\phantom{1500000000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie2]
+      $\square$ \textbf{Elle peut aussi s'\'ecrire \ListeFlash[1,3] }
+      \tcbox[BoiteExpression]{\phantom{1500000000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie3]
+      $\square$ \textbf{Ajoute-lui \ListeFlash[1,4] :}
+      \tcbox[BoiteExpression]{\phantom{\hbox to5em{1500000}}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie4]
+      $\square$ \textbf{Enl\`eve-lui \ListeFlash[1,5] :}
+      \tcbox[BoiteExpression]{\phantom{\hbox to5em{1500000}}}
+    \end{tcolorbox}
+  \end{CadreNombre}
+}
+
+\tikzset{
+  arrow/.style={
+    draw,
+    minimum height=1.25cm,
+    inner sep=0.25em,
+    shape=signal,
+    signal from=west,
+    signal to=east,
+    signal pointer angle=150,
+  }
+}
+
+\newcommand\QFDaily{%
+  \begin{tikzpicture}%
+    \begin{scope}[start chain=transition going right,node distance=-\pgflinewidth]%
+      \foreach \s in {1,...,\ListeFlashlen}{%
+        \xintifboolexpr{\s == 1}{%
+          \node[arrow,on chain] {\Huge\bfseries\ListeFlash[\s]};%
+          \ifboolKV[ClesFlash]{Pause}{\pause}{}%
+        }{%
+          \xintifboolexpr{\s == \ListeFlashlen}{%
+            \node[arrow,on chain] {\Huge\bfseries?};%
+          }{%
+            \node[arrow,on chain] {\ListeFlash[\s]};%
+            \ifboolKV[ClesFlash]{Pause}{\pause}{}%
+          }%
+        }%
+      }%
+    \end{scope}%
+  \end{tikzpicture}%
+}%
+
+\newcommand\QFDecimal{%
+  \begin{CadreNombre}
+    {\Large LE NOMBRE DU JOUR est : }
+    \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie1]
+      $\square$ \textbf{\'Ecris-le en fraction d\'ecimale :}
+      \tcbox[BoiteExpression]{$\dfrac{\phantom{1000000}}{\phantom{1000000}}$}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie2]
+      $\square$ \begin{tabular}{c}
+        \textbf{Partie}\\
+        \textbf{enti\`ere}
+      \end{tabular} \textbf{: }
+      \tcbox[BoiteExpression]{\phantom{100000}}\hfill%
+      $\square$ \begin{tabular}{c}
+        \textbf{Partie}\\
+        \textbf{d\'ecimale}
+      \end{tabular} \textbf{: }
+      \tcbox[BoiteExpression]{\phantom{100000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie3]
+      $\square$ \textbf{\useKV[ClesFlash]{Operation}-le par
+        \ListeFlash[1,2] :} \tcbox[BoiteExpression]{\phantom{1000000000}}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie4]
+      $\square$ \textbf{Trouve le nombre entier le plus proche :} \tcbox[BoiteExpression]{\phantom{10000000}}
+    \end{tcolorbox}
+  \end{CadreNombre}
+}
+
+\newcommand\QFMental{%
+  \begin{CadreNombre}
+    {\Large LE NOMBRE DU JOUR est : }
+    \tcbox[BoiteExpression]{\ListeFlash[1,1]}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie1]
+      $\square$ \textbf{Ajoute-lui}
+      \tcbox[BoiteExpression]{\ListeFlash[1,2]}\hfill$\square$
+      \textbf{Soustrais-lui} \tcbox[BoiteExpression]{\ListeFlash[1,3]}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie2]
+      $\square$ \textbf{Multiplie-le par }
+      \tcbox[BoiteExpression]{\ListeFlash[1,4]}\hfill$\square$
+      \textbf{Divise-le par } \tcbox[BoiteExpression]{\ListeFlash[1,5]}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie3]
+      $\square$ \textbf{Trouve}
+      \tcbox[BoiteExpression]{\ListeFlash[1,6]}
+      \textbf{\% de ce nombre.}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie4]
+      $\square$ \textbf{Trouve } \tcbox[BoiteExpression]{\ListeFlash[1,7]}
+      \textbf{de ce nombre.}
+    \end{tcolorbox}
+  \end{CadreNombre}
+}
+
+\newcommand\QFExpression{%
+  \begin{CadreNombre}
+    {\Large L'EXPRESSION DU JOUR est : }
+    \tcbox[BoiteExpression]{\ListeFlash[1,1]}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie1]
+      $\square$ \textbf{Ajoute-lui}
+      \tcbox[BoiteExpression]{\ListeFlash[1,2]}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie2]
+      $\square$ \textbf{Soustrais-lui}
+      \tcbox[BoiteExpression]{\ListeFlash[1,3]}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie3]
+      $\square$ \textbf{Multiplie-la par}
+      \tcbox[BoiteExpression]{\ListeFlash[1,4]}
+    \end{tcolorbox}
+    \ifboolKV[ClesFlash]{Pause}{\pause}{}
+    \begin{tcolorbox}[ExpressionSerie4]
+      $\square$ \textbf{\'Evalue-la lorsque} \tcbox[BoiteExpression]{\ListeFlash[1,5]}
+    \end{tcolorbox}
+  \end{CadreNombre}
+}
+
+
+
+\newcommand\QFVide{%
+  \begin{CadreNombre}
+    {\ListeFlash[1]}
+    \xintFor* ##1 in {\xintSeq {1}{\ListeFlashlen-1}}\do{%
+      \ifboolKV[ClesFlash]{Pause}{\pause}{}
+      \begin{tcolorbox}[ExpressionSerie##1]
+        \ListeFlash[1+##1]
+      \end{tcolorbox}
+    }
+  \end{CadreNombre}
+}
+
+\newcommand\QFlash[2][]{%
+  \useKVdefault[ClesFlash]%
+  \setKV[ClesFlash]{#1}%
+  \setlength{\HauteurFlash}{\useKV[ClesFlash]{Hauteur}}%
+  \colorlet{CouleurUn}{\useKV[ClesFlash]{Couleur1}}%
+  \colorlet{CouleurDeux}{\useKV[ClesFlash]{Couleur2}}%
+  \colorlet{CouleurTrois}{\useKV[ClesFlash]{Couleur3}}%
+  \colorlet{CouleurQuatre}{\useKV[ClesFlash]{Couleur4}}%
+  \ifboolKV[ClesFlash]{Evaluation}{%
+    \ifboolKV[ClesFlash]{Seul}{%
+      \setsepchar[*]{/}%
+      \readlist*\ListeFlash{#2}%
+      \QFVide%
+    }{%
+      \ifboolKV[ClesFlash]{Numeration}{%
+        \setsepchar[*]{,*/}%
+        \readlist*\ListeFlash{#2}%
+        \QFNumeration%
+      }{%
+        \ifboolKV[ClesFlash]{Heure}{%
+          \setsepchar[*]{,*/}%
+          \readlist*\ListeFlash{#2}%
+          \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
+          \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
+          \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
+          \QFHeure%
+        }{%
+          \ifboolKV[ClesFlash]{Mesure}{%
+            \setsepchar[*]{,*/}%
+            \readlist*\ListeFlash{#2}%
+            \QFMesure%
+          }{%
+            \ifboolKV[ClesFlash]{Daily}{%
+              \setsepchar[*]{/}%
+              \readlist*\ListeFlash{#2}%
+              \QFDaily%
+            }{%
+              \ifboolKV[ClesFlash]{Decimal}{%
+                \setsepchar[*]{,*/}%
+                \readlist*\ListeFlash{#2}%
+                \QFDecimal%
+              }{%
+                \ifboolKV[ClesFlash]{Mental}{%
+                  \setsepchar[*]{,*/}%
+                  \readlist*\ListeFlash{#2}%
+                  \QFMental%
+                }{%
+                  \ifboolKV[ClesFlash]{Expression}{%
+                    \setsepchar[*]{,*/}%
+                    \readlist*\ListeFlash{#2}%
+                    \QFExpression%
+                  }{%
+                    \setsepchar[*]{/}%
+                    \readlist*\ListeFlash{#2}%
+                    \ifboolKV[ClesFlash]{Simple}{%
+                      \ListeFlash[1]
+                      \begin{tcolorbox}[valign=center]
+                        \ListeFlash[2]
+                      \end{tcolorbox}
+                    }{%
+                      \setsepchar[*]{*/}%
+                      \readlist*\ListeFlash{#2}%
+                      \ifboolKV[ClesFlash]{Kahout}{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{tcolorbox}[halign=center,valign=center]
+                          \ListeFlash[1,1]
+                        \end{tcolorbox}
+                        % \par
+                        \begin{multicols}{4}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
+                            \ListeFlash[1,2]
+                          \end{tcolorbox}
+                          % \hfill%
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
+                            \ListeFlash[1,3]
+                          \end{tcolorbox}
+                          % \hfill%
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
+                            \ListeFlash[1,4]
+                          \end{tcolorbox}
+                          % \hfill%
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
+                            \ListeFlash[1,5]
+                          \end{tcolorbox}
+                        \end{multicols}
+                      }{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{tcolorbox}[halign=center,valign=center]
+                          \ListeFlash[1,1]
+                        \end{tcolorbox}
+                        \begin{multicols}{4}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                            \ListeFlash[1,2]
+                          \end{tcolorbox}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                            \ListeFlash[1,3]
+                          \end{tcolorbox}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
+                            \ListeFlash[1,4]
+                          \end{tcolorbox}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                            \ListeFlash[1,5]
+                          \end{tcolorbox}
+                        \end{multicols}
+                      }%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }{%
+    \ifboolKV[ClesFlash]{Seul}{%
+      \setsepchar[*]{/}%
+      \readlist*\ListeFlash{#2}%
+      \begin{frame}
+        \QFVide%
+      \end{frame}
+    }{%
+      \ifboolKV[ClesFlash]{Numeration}{%
+        \setsepchar[*]{,*/}%
+        \readlist*\ListeFlash{#2}%
+        \begin{frame}
+          \QFNumeration%
+        \end{frame}
+      }{%
+        \ifboolKV[ClesFlash]{Heure}{%
+          \setsepchar[*]{,*/}%
+          \readlist*\ListeFlash{#2}%
+          \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
+          \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
+          \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
+          \begin{frame}
+            \QFHeure%
+          \end{frame}
+        }{%
+          \ifboolKV[ClesFlash]{Mesure}{%
+            \setsepchar[*]{,*/}%
+            \readlist*\ListeFlash{#2}%
+            \begin{frame}
+              \QFMesure%
+            \end{frame}
+          }{%
+            \ifboolKV[ClesFlash]{Daily}{%
+              \setsepchar[*]{/}%
+              \readlist*\ListeFlash{#2}%
+              \begin{frame}
+                \QFDaily%
+              \end{frame}
+            }{%
+              \ifboolKV[ClesFlash]{Decimal}{%
+                \setsepchar[*]{,*/}%
+                \readlist*\ListeFlash{#2}%
+                \begin{frame}
+                  \QFDecimal%
+                \end{frame}
+              }{%
+                \ifboolKV[ClesFlash]{Mental}{%
+                  \setsepchar[*]{,*/}%
+                  \readlist*\ListeFlash{#2}%
+                  \begin{frame}
+                    \QFMental%
+                  \end{frame}
+                }{%
+                  \ifboolKV[ClesFlash]{Expression}{%
+                    \setsepchar[*]{,*/}%
+                    \readlist*\ListeFlash{#2}%
+                    \begin{frame}
+                      \QFExpression%
+                    \end{frame}
+                  }{%
+                    \setsepchar[*]{/}%
+                    \readlist*\ListeFlash{#2}%
+                    \ifboolKV[ClesFlash]{Simple}{%
+                      \begin{frame}
+                        \ListeFlash[1]
+                        \begin{tcolorbox}[valign=center]
+                          \ListeFlash[2]
+                        \end{tcolorbox}
+                      \end{frame}
+                    }{%
+                      \setsepchar[*]{,*/}%
+                      \readlist*\ListeFlash{#2}%
+                      \ifboolKV[ClesFlash]{Kahout}{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{frame}
+                          \begin{tcolorbox}[valign=center]
+                            \ListeFlash[1,1]
+                          \end{tcolorbox}
+                          \vfill
+                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
+                                \ListeFlash[1,2]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
+                                \ListeFlash[1,3]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                          \bigskip
+                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
+                                \ListeFlash[1,4]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
+                                \ListeFlash[1,5]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                        \end{frame}
+                      }{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{frame}
+                          \begin{tcolorbox}[valign=center]
+                            \ListeFlash[1,1]
+                          \end{tcolorbox}
+                          \vfill
+                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                                \ListeFlash[1,2]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                                \ListeFlash[1,3]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                          \bigskip
+                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
+                                \ListeFlash[1,4]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                                \ListeFlash[1,5]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                        \end{frame}
+                      }%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsFlash.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,59 @@
+%%%
+% R\'eponses \`a relier
+%%%
+\setKVdefault[ClesRelie]{Solution=false,LargeurG=5cm,LargeurD=2cm,Stretch=1.5,Ecart=2cm,Couleur=black}
+
+\newcommand\Relie[2][]{%
+  \useKVdefault[ClesRelie]%
+  \setKV[ClesRelie]{#1}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeRelie{#2}%
+  \buildtabrelie%
+  \ifboolKV[ClesRelie]{Solution}{%
+    \colorlet{PfCRelieCouleurTrace}{\useKV[ClesRelie]{Couleur}}%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{%
+      \itemtomacro\ListeRelie[##1,1]\untest
+      \ifx\bla\untest\bla%
+      \else
+      \tikz[remember picture,overlay]{\draw[PfCRelieCouleurTrace] (RelieG-##1) -- (RelieD-\ListeRelie[##1,3]);}%
+      \fi
+    }%
+  }{%
+  }%
+}
+
+\newcounter{NbRelie}
+
+\def\buildtabrelie{%
+  \setcounter{NbRelie}{0}%
+  \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}%
+  \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember
+    picture]{\node[name=RelieD-\theNbRelie,inner
+    sep=0pt]{};\fill[] (RelieD-\theNbRelie) circle[radius=1.5pt]}}cp{\useKV[ClesRelie]{LargeurD}}}%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest%
+\ifx\bla\untest\bla%                                       
+    \uppercase{&}\stepcounter{NbRelie}%
+      \else
+      \uppercase{&}\stepcounter{NbRelie}\tikz[remember
+                   picture,overlay]{\node[name=RelieG-\theNbRelie,inner
+                   sep=0pt]{};\fill[]
+                   (RelieG-\theNbRelie) circle[radius=1.5pt];}
+\fi&&&\ListeRelie[##1,2]\\}%
+  \end{tabular}%
+  \setcounter{NbRelie}{0}%
+}%
+
+\def\buildtabrelieold{%
+  \setcounter{NbRelie}{0}%
+  \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}%
+  \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember
+    picture,baseline]{\node[name=RelieD-\theNbRelie]{\Large\textbullet};}}cp{\useKV[ClesRelie]{LargeurD}}}%
+    \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest%
+\ifx\bla\untest\bla%                                       
+    \uppercase{&}\stepcounter{NbRelie}%
+      \else
+      \uppercase{&}\stepcounter{NbRelie}\tikz[remember picture,baseline]{\node[name=RelieG-\theNbRelie]{\Large\textbullet};}
+\fi&&&\ListeRelie[##1,2]\\}%
+  \end{tabular}%
+  \setcounter{NbRelie}{0}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuestionsRelier.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuiSuisJe.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuiSuisJe.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuiSuisJe.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,81 @@
+%%%
+% Qui suis-je
+%%%
+\setKVdefault[Quisuisje]{Solution=false,Largeur=5mm,Colonnes=5,CodePerso=false,TexteA=Lettre,TexteB=R\'esultat du calcul}%
+
+\newcommand\QuisuisjeEnonce{%
+  Chaque lettre du mot à découvrir porte un numéro qui correspond à un
+  calcul à effectuer. Pour trouver les lettres de ce mot, tu dois donc
+  effectuer les calculs proposés. Les résultats que tu auras trouvés
+  te donneront, à l'aide du tableau de correspondance ci-dessous, les
+  lettres du mot.
+}%
+
+\newcommand\QuisuisjeTableau[2][]{%
+  \setKV[Quisuisje]{#1}%
+  \setsepchar[*]{§*/}\ignoreemptyitems%
+  \readlist*\ListeQuisuisje{#2}%
+  \begin{NiceTabular}{|l|*{\ListeQuisuisjelen}{m{\useKV[Quisuisje]{Largeur}}|}}%
+    \hline
+    \useKV[Quisuisje]{TexteA}\xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjelen}}\do{%
+      &\centering\arraybackslash\ListeQuisuisje[##1,1]
+    }\\
+    \hline
+    \useKV[Quisuisje]{TexteB}\xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjelen}}\do{%
+      &\centering\arraybackslash\ListeQuisuisje[##1,2]
+    }\\
+    \hline
+  \end{NiceTabular}%
+}%
+
+\newcommand\QuisuisjeCodePerso[3][]{%
+  \setKV[Quisuisje]{#1}%
+  \setsepchar{ }%
+  \readlist*\ListeQuisuisjeCode{#2}%
+  \readlist*\ListeQuisuisjeLettres{#3}%
+  \par\hfill%
+  \begin{NiceTabular}{|*{\ListeQuisuisjeLettreslen}{m{7mm}|}}
+    \hline
+    \xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjeLettreslen}}\do{%
+      \xintifForFirst{}{&}\ifboolKV[Quisuisje]{Solution}{\hfill\ListeQuisuisjeLettres[##1]}{\phantom{1}}
+    }\\
+    \xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjeLettreslen}}\do{%
+      \xintifForFirst{}{&}\tiny\ListeQuisuisjeCode[##1]%
+    }\\
+    \hline
+  \end{NiceTabular}%
+}%
+
+\newcommand\Quisuisje[3][]{%
+  \useKVdefault[Quisuisje]%
+  \setKV[Quisuisje]{#1}%
+  \ifboolKV[Quisuisje]{CodePerso}{}{%
+    \setsepchar{ }%
+    \readlist\ListeLettres{#3}%
+  }%
+  \setsepchar{§}%
+  \readlist\ListeCalculs{#2}%
+  \ifboolKV[Quisuisje]{CodePerso}{}{%
+    \par\hfill%
+    \begin{NiceTabular}{|*{\ListeLettreslen}{m{7mm}|}}
+      \hline
+      \xintFor* ##1 in {\xintSeq {1}{\ListeLettreslen}}\do{%
+        \xintifForFirst{}{&} \ifboolKV[Quisuisje]{Solution}{\hfill\ListeLettres[##1]}{\phantom{1}}
+      }\\
+      \xintFor* ##1 in {\xintSeq {1}{\ListeLettreslen}}\do{%
+        \xintifForFirst{}{&}\tiny\num{##1}%
+      }\\
+      \hline
+    \end{NiceTabular}%
+  }%
+  \par\bigskip\par
+  \ifboolKV[Quisuisje]{Solution}{}{%
+    \begin{multicols}{\useKV[Quisuisje]{Colonnes}}%
+      \begin{enumerate}
+        \xintFor* ##1 in {\xintSeq {1}{\ListeCalculslen}}\do{%
+        \item\ListeCalculs[##1]
+        }
+      \end{enumerate}%
+    \end{multicols}%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCQuiSuisJe.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRLE.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRLE.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRLE.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,206 @@
+%%%
+% Codage RLE
+%%%
+\setKVdefault[RLE]{Largeur=10pt,Taille=5,Unite=1cm,Solution=false,Enonce=true}
+
+\newtoks\toklisterle
+\def\UpdatetoksRLE#1\nil{\addtotok\toklisterle{#1,}}%
+
+%\newlength\PfCRLEHeight%
+\NewDocumentCommand\CodageRLE{o m}{%
+  \useKVdefault[RLE]%
+  \setKV[RLE]{#1}%
+  %\setlength{\PfCRLEHeight}{\useKV[RLE]{Largeur}}%
+  \setsepchar{,}%
+  \readlist*\PfCListeRLE{#2}%
+  \toklisterle{}%
+  \foreachitem\compteur\in\PfCListeRLE{\expandafter\UpdatetoksRLE\compteur\nil}%
+  \BuildRLE{\the\toklisterle}%
+}
+
+\NewDocumentCommand\BuildRLE{m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    Taille:=\useKV[RLE]{Taille};
+    u:=\useKV[RLE]{Unite};
+    boolean Solution,Enonce;
+    Solution:=\useKV[RLE]{Solution};
+    Enonce:=\useKV[RLE]{Enonce};
+    
+    color RLEFill;
+    RLEFill=white;
+
+    numeric nbretenir[][];
+    
+    vardef NombreLigne(text t)=
+    retiens:=0;
+    nblignes:=0;
+    for p_=t:
+    retiens:=retiens+p_;
+    if retiens=Taille:
+    nblignes:=nblignes+1;
+    retiens:=0;
+    fi;
+    endfor;
+    enddef;
+
+    path Square;
+    Square=unitsquare scaled u;
+
+    vardef RLE(text t)=
+    nbcoups:=0;
+    nbcases:=0;
+    nbcaseslignes:=0;
+    cptretiensnb:=0;
+    cptretiensnblignes:=1;
+    for p_=t:
+    if p_=0:
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    RLEFill:=black;
+    else:
+    nbcoups:=nbcoups+1;
+    for l=0 upto p_-1:
+        if Solution: fill ((Square scaled 0.95) shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))+u*(0.025,0.025))) withcolor RLEFill; fi;
+    trace (Square shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))));
+    endfor;
+    nbcaseslignes:=nbcaseslignes+p_;
+    nbcases:=nbcases+p_;
+    if (nbcaseslignes mod Taille)=0:
+    RLEFill:=white;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    cptretiensnblignes:=cptretiensnblignes+1;
+    cptretiensnb:=0;
+    else:
+    if RLEFill=white: RLEFill:=black else: RLEFill:=white fi;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    string Sequence[];
+
+    boolean STOP;
+    STOP:=false;
+    
+    vardef Affichage=
+    for k=1 upto nblignes:
+    Sequence[k]=decimal(nbretenir[k][1]);
+    n:=1;
+    forever:
+    n:=n+1;
+    if unknown nbretenir[k][n]:
+    STOP:=true;
+    else:
+    Sequence[k]:=Sequence[k]&","&decimal(nbretenir[k][n]);
+    fi;
+    exitif STOP;
+    endfor;
+    label.rt(TEX(Sequence[k]),u*(Taille+1,-k+1+0.5));
+    STOP:=false;
+    endfor;
+    enddef;
+    
+    NombreLigne(#1);
+    RLE(#1);
+    if Enonce:
+    Affichage;
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+    Taille:=\useKV[RLE]{Taille};
+    u:=\useKV[RLE]{Unite};
+    boolean Solution,Enonce;
+    Solution:=\useKV[RLE]{Solution};
+    Enonce:=\useKV[RLE]{Enonce};
+    }]
+    color RLEFill;
+    RLEFill=white;
+
+    numeric nbretenir[][];
+    
+    vardef NombreLigne(text t)=
+    retiens:=0;
+    nblignes:=0;
+    for p_=t:
+    retiens:=retiens+p_;
+    if retiens=Taille:
+    nblignes:=nblignes+1;
+    retiens:=0;
+    fi;
+    endfor;
+    enddef;
+
+    path Square;
+    Square=unitsquare scaled u;
+
+    vardef RLE(text t)=
+    nbcoups:=0;
+    nbcases:=0;
+    nbcaseslignes:=0;
+    cptretiensnb:=0;
+    cptretiensnblignes:=1;
+    for p_=t:
+    if p_=0:
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    RLEFill:=black;
+    else:
+    nbcoups:=nbcoups+1;
+    for l=0 upto p_-1:
+        if Solution: fill ((Square scaled 0.95) shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))+u*(0.025,0.025))) withcolor RLEFill; fi;
+    trace (Square shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))));
+    endfor;
+    nbcaseslignes:=nbcaseslignes+p_;
+    nbcases:=nbcases+p_;
+    if (nbcaseslignes mod Taille)=0:
+    RLEFill:=white;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    cptretiensnblignes:=cptretiensnblignes+1;
+    cptretiensnb:=0;
+    else:
+    if RLEFill=white: RLEFill:=black else: RLEFill:=white fi;
+    cptretiensnb:=cptretiensnb+1;
+    nbretenir[cptretiensnblignes][cptretiensnb]=p_;
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    string Sequence[];
+
+    boolean STOP;
+    STOP:=false;
+    
+    vardef Affichage=
+    for k=1 upto nblignes:
+    Sequence[k]=decimal(nbretenir[k][1]);
+    n:=1;
+    forever:
+    n:=n+1;
+    if unknown nbretenir[k][n]:
+    STOP:=true;
+    else:
+    Sequence[k]:=Sequence[k]&","&decimal(nbretenir[k][n]);
+    fi;
+    exitif STOP;
+    endfor;
+    label.rt(LATEX(Sequence[k]),u*(Taille+1,-k+1+0.5));
+    STOP:=false;
+    endfor;
+    enddef;
+    
+    NombreLigne(#1);
+    RLE(#1);
+    if Enonce:
+    Affichage;
+    fi;    
+  \end{mpost}
+  \fi
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRLE.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRangementNombres.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRangementNombres.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRangementNombres.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,67 @@
+%%%
+% Rangement des nombres
+%%%
+\setKVdefault[ClesRgt]{Croissant,Decroissant=false,Strict,Fraction=false,Details=false}
+
+\dtlexpandnewvalue%
+\DTLgnewdb{mtnumedb}%
+\DTLgnewdb{mtRGTdb}% Pb de doublon avec mtdb de Mediane
+
+\newcommand\Rangement[2][]{%
+  \useKVdefault[ClesRgt]%
+  \setKV[ClesRgt]{#1}%
+  \ifboolKV[ClesRgt]{Fraction}{%
+    \setsepchar[*]{,*/}\ignoreemptyitems%
+    \readlist*\ListeRgt{#2}%
+    % on cherche le d\'enominateur commun
+    \ppcm=1\relax
+    \foreachitem\x\in\ListeRgt{%
+      \PPCM{\fpeval{\ListeRgt[\xcnt,2]}}{\fpeval{\the\ppcm}}%
+    }%
+    % On cr\'ee la liste des rangements.
+    \DTLcleardb{mtnumedb}%
+%    % on les trie pour les ranger par ordre croissant
+    \foreachitem\x\in\ListeRgt{%
+      \DTLnewrow{mtnumedb}%
+      \xdef\toto{\fpeval{\ListeRgt[\xcnt,1]*\the\ppcm/\ListeRgt[\xcnt,2]}}%
+      \DTLnewdbentry{mtnumedb}{numeric}{\toto}%
+    }%
+%    % On trie
+    \ifboolKV[ClesRgt]{Decroissant}{%
+%      % On trie la liste
+      \dtlsort{numeric=descending}{mtnumedb}{\dtlicompare}%
+      \ifboolKV[ClesRgt]{Details}{\ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\frac{\num{\numeroDonnee}}{\num{\the\ppcm}}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}}{%
+        \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\Simplification{\numeroDonnee}{\ppcm}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}%
+      }
+    }{%
+%      % On trie la liste
+      \dtlsort{numeric}{mtnumedb}{\dtlicompare}%
+      \ifboolKV[ClesRgt]{Details}{%
+        \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\frac{\num{\numeroDonnee}}{\num{\the\ppcm}}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
+      }{%
+        \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\Simplification{\numeroDonnee}{\ppcm}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
+      }%
+    }%
+  }{%
+    \setsepchar{,}\ignoreemptyitems%
+    \readlist*\ListeRgt{#2}%
+    % on cr\'ee la base de donn\'ees des valeurs
+    \DTLcleardb{mtRGTdb}%
+%    % on les trie pour les ranger par ordre croissant
+    \foreachitem\x\in\ListeRgt{%
+      \DTLnewrow{mtRGTdb}%
+      \itemtomacro\ListeRgt[\xcnt]\y%
+      \DTLnewdbentry{mtRGTdb}{numeric}{\y}%
+    }%
+%    % 
+    \ifboolKV[ClesRgt]{Decroissant}{%
+      % On trie la liste
+      \dtlsort{numeric=descending}{mtRGTdb}{\dtlicompare}%
+      \ensuremath{\DTLforeach{mtRGTdb}{\numeroDonnee=numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}%
+    }{%
+%      % On trie la liste
+      \dtlsort{numeric}{mtRGTdb}{\dtlicompare}%
+      \ensuremath{\DTLforeach{mtRGTdb}{\numeroDonnee=numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRangementNombres.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRapido.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRapido.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRapido.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,67 @@
+%%%
+% Rapido
+%%%
+%% D'après https://www.facebook.com/groups/994675223903586/user/100017057226847
+%% et une programmation de Laurent Lassale-Carrere
+\newcounter{PfCnexo}
+\newtcolorbox[use counter=PfCnexo,number format=\arabic]{RapidoBox}{%
+  % Titre
+  colbacktitle=white,
+  fonttitle=\color{black}\Large\bfseries,
+  toptitle=1mm,
+  bottomtitle=1mm,
+  bottom=1mm,
+  title={\useKV[ClesRapido]{Titre}},
+  %% Cadre principal
+  enhanced,
+  width=\WidthRapido,
+  colback=white,
+  valign=top,
+  drop lifted shadow
+}
+\newtcolorbox{QuestionBox}{enhanced,nobeforeafter,size=small,sidebyside adapt=left}
+\newtcolorbox{QuestionReponse}{enhanced,nobeforeafter,upperbox=invisible,colback=white,width=1.5cm,grow to left by=3mm,grow to right by=3mm,height=10mm}
+
+\setKVdefault[ClesRapido]{Debut=false,Largeur=0.9\linewidth,Titre={Rapido n°\thetcbcounter\hfill Date :\hspace*{2.5cm}}}%
+\defKV[ClesRapido]{Numero=\setKV[ClesRapido]{Debut=true}}
+
+\newlength{\WidthRapido}
+
+\newcommand\Rapido[2][]{% numéro
+\useKVdefault[ClesRapido]%
+\setKV[ClesRapido]{#1}%
+%
+\ifboolKV[ClesRapido]{Debut}{%
+  \setcounter{PfCnexo}{\fpeval{\useKV[ClesRapido]{Numero}-1}}
+}{}%
+\setlength{\WidthRapido}{\useKV[ClesRapido]{Largeur}}%
+%
+\setsepchar[*]{§*/}%
+\readlist*\ListeRapido{#2}%
+\begin{RapidoBox}
+  \xintFor* ##1 in {\xintSeq {1}{\ListeRapidolen}}\do{%
+    \tcbsidebyside[%
+    sidebyside adapt=right,
+    bicolor,
+    colback=white,colbacklower=yellow!10!white,
+    nobeforeafter,
+    top=0mm,left=1mm,
+    grow to left by=3mm,
+    grow to right by=3mm,
+    bottom=0mm
+    ]{%
+      \ListeRapido[##1,1]
+    }{%
+      \ListeRapido[##1,2]
+    }
+  }%
+\end{RapidoBox}
+}%
+
+\newcommand\BoiteRapido[1]{%
+  \ifx\bla#1\bla%
+  \tcbox[BoiteExpression]{\phantom{100000}}%
+  \else%
+  \tcbox[BoiteExpression]{#1}%
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRapido.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRappelsFormules.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRappelsFormules.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRappelsFormules.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,1028 @@
+%%%
+% Formules
+%%%
+\setKVdefault[ClesFormule]{Perimetre=false,Aire=false,Volume=false,Surface=carr\'e,Solide=pav\'e,Angle=0,Ancre={(0,0)},Largeur=5cm,Couleur=white,EchelleEspace=70,Echelle=1cm}
+
+\def\MPFigureCarre{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0);
+    C=rotation(A,B,-90);
+    D-C=A-B;
+    draw polygone(A,B,C,D);
+    draw codeperp(A,B,C,5);
+    draw codeperp(B,C,D,5);
+    draw codeperp(C,D,A,5);
+    draw codeperp(D,A,B,5);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,B,C,C,D,D,A,2);
+    marque_s:=marque_s*3;
+    draw appelation(A,B,-3mm,btex $c$ etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0);
+    C=rotation(A,B,-90);
+    D-C=A-B;
+    draw polygone(A,B,C,D);
+    draw codeperp(A,B,C,5);
+    draw codeperp(B,C,D,5);
+    draw codeperp(C,D,A,5);
+    draw codeperp(D,A,B,5);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,B,C,C,D,D,A,2);
+    marque_s:=marque_s*3;
+    draw appelation(A,B,-3mm,btex $c$ etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigurePolygone{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    pair A,B,C,D,E,F;
+    A=u*(1,1);
+    B-A=u*(2,0);
+    C=3/5[B,rotation(A,B,-120)];
+    D-C=u*(0,1);
+    E-D=u*(-1.25,-1);
+    F-E=u*(-1,1);
+    draw polygone(A,B,C,D,E,F);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    pair A,B,C,D,E,F;
+    A=u*(1,1);
+    B-A=u*(2,0);
+    C=3/5[B,rotation(A,B,-120)];
+    D-C=u*(0,1);
+    E-D=u*(-1.25,-1);
+    F-E=u*(-1,1);
+    draw polygone(A,B,C,D,E,F);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureParallelogramme{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesFormule]{Echelle};
+    vardef marque_para(expr dd,ee,pa)=
+  save im;
+  picture im;
+  pair kk,ll,mn,mo;
+  kk=point(pa*length dd) of dd;
+  ll=projection(kk,point(0.25*length ee) of ee,point(0.5*length ee) of ee);
+  mn=iso(kk,ll);
+  mo=(mn--kk) intersectionpoint cercles(mn,3mm);
+  im=image(
+    drawarrow mo--kk;
+    drawarrow symetrie(mo,mn)--ll;
+    label(btex $//$ etex,mn);
+    );
+  im
+  enddef;
+     
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2.25,0.25);
+    D=4/5[A,rotation(B,A,40)];
+    C-D=B-A;
+    draw polygone(A,B,C,D);
+    drawoptions(withcolor gris);
+    draw marque_para(droite(A,B),droite(C,D),0.455);
+    draw marque_para(droite(B,C),droite(A,D),0.43);
+    draw segment(B,2.5[C,B]) dashed evenly;
+    draw segment(A,1.5[D,A]) dashed evenly;
+    draw segment(A,1.55[B,A]) dashed evenly;
+    draw segment(D,2[C,D]) dashed evenly;
+    drawoptions();
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    vardef marque_para(expr dd,ee,pa)=
+  save im;
+  picture im;
+  pair kk,ll,mn,mo;
+  kk=point(pa*length dd) of dd;
+  ll=projection(kk,point(0.25*length ee) of ee,point(0.5*length ee) of ee);
+  mn=iso(kk,ll);
+  mo=(mn--kk) intersectionpoint cercles(mn,3mm);
+  im=image(
+    drawarrow mo--kk;
+    drawarrow symetrie(mo,mn)--ll;
+    label(btex $//$ etex,mn);
+    );
+  im
+  enddef;
+  
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2.25,0.25);
+    D=4/5[A,rotation(B,A,40)];
+    C-D=B-A;
+    draw polygone(A,B,C,D);
+    drawoptions(withcolor gris);
+    draw marque_para(droite(A,B),droite(C,D),0.455);
+    draw marque_para(droite(B,C),droite(A,D),0.43);
+    draw segment(B,2.5[C,B]) dashed evenly;
+    draw segment(A,1.5[D,A]) dashed evenly;
+    draw segment(A,1.55[B,A]) dashed evenly;
+    draw segment(D,2[C,D]) dashed evenly;
+    drawoptions();
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureParallelogrammeAire{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,10u,5u);
+    pair A,B,C,D,I,J;
+    A=u*(1,1);
+    B-A=u*(2,0.5);
+    D=3/5[A,rotation(B,A,40)];
+    C-D=B-A;
+    I=projection(D,A,B);
+    draw polygone(A,B,C,D) withcolor gris;
+    draw segment(A,B);
+    draw segment(D,I);
+    draw codeperp(D,I,B,5);
+    A:=A+3*u*(1,0);
+    B:=A+u*(2,0.5);
+    D:=3/5[A,rotation(B,A,40)];
+    C:=D+B-A;
+    J=projection(B,A,D);
+    draw polygone(A,B,C,D) withcolor gris;
+    draw segment(D,1.5[A,D]) dashed evenly withcolor gris;
+    draw segment(A,D);
+    draw segment(B,J);
+    draw codeperp(B,J,A,5);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,10u,5u);
+    pair A,B,C,D,I,J;
+    A=u*(1,1);
+    B-A=u*(2,0.5);
+    D=3/5[A,rotation(B,A,40)];
+    C-D=B-A;
+    I=projection(D,A,B);
+    draw polygone(A,B,C,D) withcolor gris;
+    draw segment(A,B);
+    draw segment(D,I);
+    draw codeperp(D,I,B,5);
+    A:=A+3*u*(1,0);
+    B:=A+u*(2,0.5);
+    D:=3/5[A,rotation(B,A,40)];
+    C:=D+B-A;
+    J=projection(B,A,D);
+    draw polygone(A,B,C,D) withcolor gris;
+    draw segment(D,1.5[A,D]) dashed evenly withcolor gris;
+    draw segment(A,D);
+    draw segment(B,J);
+    draw codeperp(B,J,A,5);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureSphere{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    typetrace:="3D";
+    Initialisation(5,0,10,\useKV[ClesFormule]{EchelleEspace});
+    color O,A,B,C;
+    O=(0,0,0);
+    A-O=(0,1/2,0);
+    C-O=(-1/2,0,0);
+    B-O=(0,0,1/2);
+    path cc,cd;
+    cc=cercles(O,A,O,A,C);
+    cd=cercles(O,A,O,A,B);
+    draw cd;
+    draw (subpath(0,length cc/2) of cc) dashed evenly;
+    draw subpath(length cc/2,length cc) of cc;
+    draw cotationmil(O,A,0,18,btex rayon $r$ etex);
+    marque_p:="plein";
+    pointe(O);
+    marque_p:="non";
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    typetrace:="3D";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,0,10,v);
+    color O,A,B,C;
+    O=(0,0,0);
+    A-O=(0,1/2,0);
+    C-O=(-1/2,0,0);
+    B-O=(0,0,1/2);
+    path cc,cd;
+    cc=cercles(O,A,O,A,C);
+    cd=cercles(O,A,O,A,B);
+    draw cd;
+    draw (subpath(0,length cc/2) of cc) dashed evenly;
+    draw subpath(length cc/2,length cc) of cc;
+    draw cotationmil(O,A,0,18,btex rayon $r$ etex);
+    marque_p:="plein";
+    pointe(O);
+    marque_p:="non";
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigurePave{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,30,20,115);
+    color A,B,C,D,E,F,G,H;
+    draw Pave(A,B,C,D,E,F,G,H)(0.5,1,1/3) withcolor gris;
+    draw segment(A,B);
+    draw segment(E,F);
+    draw segment(A,F);
+    draw appelation(A,B,-2mm,btex $\ell$ etex);
+    draw appelation(F,E,2mm,btex $p$ etex);
+    draw appelation(A,F,2mm,btex $h$ etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,30,20,115);
+    color A,B,C,D,E,F,G,H;
+    draw Pave(A,B,C,D,E,F,G,H)(0.5,1,1/3) withcolor gris;
+    draw segment(A,B);
+    draw segment(E,F);
+    draw segment(A,F);
+    draw appelation(A,B,-2mm,\btex $\ell$ etex);
+    draw appelation(F,E,2mm,\btex $p$ etex);
+    draw appelation(A,F,2mm,\btex $h$ etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigurePrisme{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,30,20,\useKV[ClesFormule]{EchelleEspace});
+    color A,B,C,D,E,F,G,H;
+    D=(0.75,0,0);
+    G=(0,1,0);
+    H=(0,0,0);
+    A-D=(0,0,0.5);
+    C-D=G-H;
+    E-H=A-D;
+    F-E=(0,0.6,0);
+    B-A=F-E;
+    NbS:=8;
+    Sommet1:=A;
+    Sommet2:=B;
+    Sommet3:=C;
+    Sommet4:=D;
+    Sommet5:=E;
+    Sommet6:=F;
+    Sommet7:=G;
+    Sommet8:=H;
+    NF:=6;
+    Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+    Fc[200]:=4;Fc[201]:=4;Fc[202]:=1;Fc[203]:=5;Fc[204]:=8;
+    Fc[300]:=4;Fc[301]:=4;Fc[302]:=8;Fc[303]:=7;Fc[304]:=3;
+    Fc[400]:=4;Fc[401]:=8;Fc[402]:=5;Fc[403]:=6;Fc[404]:=7;
+    Fc[500]:=4;Fc[501]:=1;Fc[502]:=2;Fc[503]:=6;Fc[504]:=5;
+    Fc[600]:=4;Fc[601]:=2;Fc[602]:=3;Fc[603]:=7;Fc[604]:=6;
+    CoulTrace:=gris;
+    DessineObjet;
+    drawoptions(withcolor gris);
+    draw codeperp(B,A,E,5);
+    draw codeperp(A,B,F,5);
+    draw codeperp(H,D,C,5);
+    draw codeperp(D,C,G,5);
+    drawoptions();
+    draw polygone(A,B,C,D);
+    draw hachurage(polygone(A,B,C,D),60,0.3,0);
+    draw segment(A,E);
+    draw appelation(A,E,3mm,btex hauteur etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,30,20,115);
+    color A,B,C,D,E,F,G,H;
+    D=(0.75,0,0);
+    G=(0,1,0);
+    H=(0,0,0);
+    A-D=(0,0,0.5);
+    C-D=G-H;
+    E-H=A-D;
+    F-E=(0,0.6,0);
+    B-A=F-E;
+    NbS:=8;
+    Sommet1:=A;
+    Sommet2:=B;
+    Sommet3:=C;
+    Sommet4:=D;
+    Sommet5:=E;
+    Sommet6:=F;
+    Sommet7:=G;
+    Sommet8:=H;
+    NF:=6;
+    Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+    Fc[200]:=4;Fc[201]:=4;Fc[202]:=1;Fc[203]:=5;Fc[204]:=8;
+    Fc[300]:=4;Fc[301]:=4;Fc[302]:=8;Fc[303]:=7;Fc[304]:=3;
+    Fc[400]:=4;Fc[401]:=8;Fc[402]:=5;Fc[403]:=6;Fc[404]:=7;
+    Fc[500]:=4;Fc[501]:=1;Fc[502]:=2;Fc[503]:=6;Fc[504]:=5;
+    Fc[600]:=4;Fc[601]:=2;Fc[602]:=3;Fc[603]:=7;Fc[604]:=6;
+    CoulTrace:=gris;
+    DessineObjet;
+    drawoptions(withcolor gris);
+    draw codeperp(B,A,E,5);
+    draw codeperp(A,B,F,5);
+    draw codeperp(H,D,C,5);
+    draw codeperp(D,C,G,5);
+    drawoptions();
+    draw polygone(A,B,C,D);
+    draw hachurage(polygone(A,B,C,D),60,0.3,0);
+    draw segment(A,E);
+    draw appelation(A,E,3mm,btex hauteur etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureCylindre{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,0,20,\useKV[ClesFormule]{EchelleEspace});
+    color O,O',A,A',B,B',C,C';
+    O=(0,0,0);
+    O'-O=(0,0,1);
+    A-O=(0,1,0);
+    A'-A=O'-O;
+    C=symetrie(A,O);
+    C'-C=O'-O;
+    B-O=(-1/2,0,0);
+    B'-B=O'-O;
+    path cc,cd;
+    cc=cercles(O,A,O,A,B);
+    cd=cercles(O',A',O',A',B');
+    draw cd;
+    draw segment(C,C');
+    draw segment(A,A');
+    draw (subpath(0,length cc/2) of cc) dashed evenly;
+    draw subpath(length cc/2,length cc) of cc;
+    draw segment(O,A);
+    draw cotationmil(C,C',3mm,25,btex hauteur $h$ etex);
+    draw appelation(O,A,2mm,btex rayon $r$ etex);
+    marque_p:="croix";
+    pointe(O);
+    marque_p:="non";
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,0,20,70);
+    color O,O',A,A',B,B',C,C';
+    O=(0,0,0);
+    O'-O=(0,0,1);
+    A-O=(0,1,0);
+    A'-A=O'-O;
+    C=symetrie(A,O);
+    C'-C=O'-O;
+    B-O=(-1/2,0,0);
+    B'-B=O'-O;
+    path cc,cd;
+    cc=cercles(O,A,O,A,B);
+    cd=cercles(O',A',O',A',B');
+    draw cd;
+    draw segment(C,C');
+    draw segment(A,A');
+    draw (subpath(0,length cc/2) of cc) dashed evenly;
+    draw subpath(length cc/2,length cc) of cc;
+    draw segment(O,A);
+    draw cotationmil(C,C',3mm,25,btex hauteur $h$ etex);
+    draw appelation(O,A,2mm,btex rayon $r$ etex);
+    marque_p:="croix";
+    pointe(O);
+    marque_p:="non";
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureCone{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,0,10,\useKV[ClesFormule]{EchelleEspace});
+    color O,O',A,B,C;
+    O=(0,0,0);
+    O'-O=(0,0,1.5);
+    A-O=(0,1,0);
+    C=symetrie(A,O);
+    B-O=(-1/2,0,0);
+    path cc;
+    cc=cercles(O,A,O,A,B);
+    draw chemin(C,O',A);
+    draw (subpath(0,length cc/2) of cc) dashed evenly;
+    draw subpath(length cc/2,length cc) of cc;
+    draw chemin(O',O,A);
+    draw appelation(O,O',2mm,btex hauteur etex);
+    draw appelation(O,A,1mm,btex rayon $r$ etex);
+    marque_p:="croix";
+    pointe(O);
+    marque_p:="non";
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,0,10,70);
+    color O,O',A,B,C;
+    O=(0,0,0);
+    O'-O=(0,0,1.5);
+    A-O=(0,1,0);
+    C=symetrie(A,O);
+    B-O=(-1/2,0,0);
+    path cc;
+    cc=cercles(O,A,O,A,B);
+    draw chemin(C,O',A);
+    draw (subpath(0,length cc/2) of cc) dashed evenly;
+    draw subpath(length cc/2,length cc) of cc;
+    draw chemin(O',O,A);
+    draw appelation(O,O',2mm,btex hauteur etex);
+    draw appelation(O,A,1mm,btex rayon $r$ etex);
+    marque_p:="croix";
+    pointe(O);
+    marque_p:="non";
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigurePyramide{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    u:=0.5cm;
+    z0=(-0.5,0)*u;
+    z1=(2.5,0.5)*u;
+    z2=(4,2)*u;
+    z3=(-0.5,2.75)*u;
+    z4=(-3,1.5)*u;
+    z5=(0.5,6)*u;
+    z6=(0.5,1.5)*u;
+    z7=z6 shifted (5u,0);
+    draw z5--z0 withcolor gris;
+    draw z5--z1 withcolor gris;
+    draw z5--z2 withcolor gris;
+    draw z5--z4 withcolor gris;
+    draw z5--z3 dashed evenly withcolor gris;
+    draw hachurage(polygone(z4,z0,z1,z2,z3,z4),60,0.4,0);
+    remplis codeperp(z7,z6,z5,8)--z6--cycle withcolor white;
+    draw z4--z0--z1--z2;
+    draw z2--z3--z4 dashed evenly;
+    draw z5--z6 dashed evenly;
+    draw codeperp(z7,z6,z5,8);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    Figure(-10u,-10u,10u,10u);
+    u:=0.5cm;
+    z0=(-0.5,0)*u;
+    z1=(2.5,0.5)*u;
+    z2=(4,2)*u;
+    z3=(-0.5,2.75)*u;
+    z4=(-3,1.5)*u;
+    z5=(0.5,6)*u;
+    z6=(0.5,1.5)*u;
+    z7=z6 shifted (5u,0);
+    draw z5--z0 withcolor gris;
+    draw z5--z1 withcolor gris;
+    draw z5--z2 withcolor gris;
+    draw z5--z4 withcolor gris;
+    draw z5--z3 dashed evenly withcolor gris;
+    draw hachurage(polygone(z4,z0,z1,z2,z3,z4),60,0.4,0);
+    remplis codeperp(z7,z6,z5,8)--z6--cycle withcolor white;
+    draw z4--z0--z1--z2;
+    draw z2--z3--z4 dashed evenly;
+    draw z5--z6 dashed evenly;
+    draw codeperp(z7,z6,z5,8);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureCube{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,30,20,80);
+    color A,B,C,D,E,F,G,H;
+    draw Cube(A,B,C,D,E,F,G,H) withcolor gris;
+    draw segment(E,H);
+    draw appelation(E,H,2mm,btex $a$ etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={v:=\useKV[ClesFormule]{EchelleEspace};}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(5,30,20,80);
+    color A,B,C,D,E,F,G,H;
+    draw Cube(A,B,C,D,E,F,G,H) withcolor gris;
+    draw segment(E,H);
+    draw appelation(E,H,2mm,btex $a$ etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureLosange{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0.5);
+    D=rotation(B,A,40);
+    C-D=B-A;
+    draw polygone(A,B,C,D);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,B,C,C,D,D,A,2);
+    marque_s:=marque_s*3;
+    draw appelation(A,B,-3mm,btex $c$ etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0.5);
+    D=rotation(B,A,40);
+    C-D=B-A;
+    draw polygone(A,B,C,D);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,B,C,C,D,D,A,2);
+    marque_s:=marque_s*3;
+    draw appelation(A,B,-3mm,btex $c$ etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureLosangeAire{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0.5);
+    D=rotation(B,A,40);
+    C-D=B-A;
+    draw polygone(A,B,C,D) withcolor gris;
+    draw segment(A,C);
+    draw segment(B,D);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,B,C,C,D,D,A,2);
+    marque_s:=marque_s*3;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0.5);
+    D=rotation(B,A,40);
+    C-D=B-A;
+    draw polygone(A,B,C,D) withcolor gris;
+    draw segment(A,C);
+    draw segment(B,D);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,B,C,C,D,D,A,2);
+    marque_s:=marque_s*3;
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureRectangle{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(3,0);
+    C=2/3[B,rotation(A,B,-90)];
+    D-C=A-B;
+    draw polygone(A,B,C,D);
+    draw codeperp(A,B,C,5);
+    draw codeperp(B,C,D,5);
+    draw codeperp(C,D,A,5);
+    draw codeperp(D,A,B,5);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,C,D,2);
+    draw Codelongueur(A,D,C,B,5);
+    marque_s:=marque_s*3;
+    draw appelation(A,B,-3mm,btex $L$ etex);
+    label.lft(btex $\ell$ etex,iso(A,D));
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(3,0);
+    C=2/3[B,rotation(A,B,-90)];
+    D-C=A-B;
+    draw polygone(A,B,C,D);
+    draw codeperp(A,B,C,5);
+    draw codeperp(B,C,D,5);
+    draw codeperp(C,D,A,5);
+    draw codeperp(D,A,B,5);
+    marque_s:=marque_s/3;
+    draw Codelongueur(A,B,C,D,2);
+    draw Codelongueur(A,D,C,B,5);
+    marque_s:=marque_s*3;
+    draw appelation(A,B,-3mm,btex $L$ etex);
+    label.lft(btex $\ell$ etex,iso(A,D));
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureTriangle{%
+    \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C;
+    A=u*(1,1);
+    B-A=u*(3,0);
+    C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    draw polygone(A,B,C);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C;
+    A=u*(1,1);
+    B-A=u*(3,0);
+    C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    draw polygone(A,B,C);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureCercle{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C;
+    A=u*(2.5,2.5);
+    path cc;
+    cc=cercles(A,1.25u);
+    B=pointarc(cc,195);
+    C=symetrie(B,A);
+    draw cc withcolor gris;
+    draw segment(B,C);
+    marque_p:="croix";
+    pointe(A);
+    draw appelation(B,C,3mm,btex diam\`etre etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C;
+    A=u*(2.5,2.5);
+    path cc;
+    cc=cercles(A,1.25u);
+    B=pointarc(cc,195);
+    C=symetrie(B,A);
+    draw cc withcolor gris;
+    draw segment(B,C);
+    marque_p:="croix";
+    pointe(A);
+    draw appelation(B,C,3mm,\btex diam\`etre etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureDisque{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C;
+    A=u*(2.5,2.5);
+    path cc;
+    cc=cercles(A,1.25u);
+    B=pointarc(cc,195);
+    C=symetrie(B,A);
+    draw cc withcolor gris;
+    draw segment(A,C);
+    marque_p:="croix";
+    pointe(A);
+    draw appelation(A,C,3mm,btex rayon $r$ etex);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C;
+    A=u*(2.5,2.5);
+    path cc;
+    cc=cercles(A,1.25u);
+    B=pointarc(cc,195);
+    C=symetrie(B,A);
+    draw cc withcolor gris;
+    draw segment(A,C);
+    marque_p:="croix";
+    pointe(A);
+    draw appelation(A,C,3mm,\btex rayon $r$ etex);
+  \end{mpost}
+  \fi
+}
+
+\def\MPFigureTriangleAire{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+u:=\useKV[ClesFormule]{Echelle};
+    drawoptions( dashed dashpattern(on1cm));
+    pair A,B,C,H,I,J;
+    A=u*(0.5,1);
+    B-A=u*(1.4,0);
+    C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    H=projection(C,A,B);
+    I=projection(A,B,C);
+    J=projection(B,C,A);
+    draw polygone(A,B,C) withcolor gris;
+    drawoptions();
+    draw segment(C,H);
+    draw segment(A,B);
+    draw codeperp(C,H,B,5);
+    drawoptions();
+    A:=A+u*(2.5,0);
+    B:=A+u*(1.4,0);
+    C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    I:=projection(A,B,C);
+    J:=projection(B,C,A);
+    draw polygone(A,B,C) withcolor gris;
+    drawoptions();
+    draw segment(A,I);
+    draw segment(C,B);
+    draw codeperp(A,I,B,5);
+    drawoptions();
+    A:=A-u*(1.25,1);
+    B:=A+u*(1.4,0);
+    C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    J:=projection(B,C,A);
+    draw polygone(A,B,C) withcolor gris;
+    drawoptions();
+    draw segment(B,J);
+    draw segment(C,A);
+    draw codeperp(B,J,C,5);
+    drawoptions();
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesFormule]{Echelle};}]
+    Figure(-5u,-5u,5u,5u);
+    pair A,B,C,H,I,J;
+    A=u*(0.5,1);
+    B-A=u*(1.4,0);
+    C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    H=projection(C,A,B);
+    I=projection(A,B,C);
+    J=projection(B,C,A);
+    draw polygone(A,B,C) withcolor gris;
+    drawoptions();
+    draw segment(C,H);
+    draw segment(A,B);
+    draw codeperp(C,H,B,5);
+    drawoptions();
+    A:=A+u*(2.5,0);
+    B:=A+u*(1.4,0);
+    C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    I:=projection(A,B,C);
+    J:=projection(B,C,A);
+    draw polygone(A,B,C) withcolor gris;
+    drawoptions();
+    draw segment(A,I);
+    draw segment(C,B);
+    draw codeperp(A,I,B,5);
+    drawoptions();
+    A:=A-u*(1.25,1);
+    B:=A+u*(1.4,0);
+    C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+    J:=projection(B,C,A);
+    draw polygone(A,B,C) withcolor gris;
+    drawoptions();
+    draw segment(B,J);
+    draw segment(C,A);
+    draw codeperp(B,J,C,5);
+    drawoptions();
+  \end{mpost}
+  \fi
+}%
+
+\newcommand\Formule[1][]{%
+  \useKVdefault[ClesFormule]%
+  \setKV[ClesFormule]{#1}%
+  \setlength{\RoundedBoxWidth}{\useKV[ClesFormule]{Largeur}}%
+  \xdef\ColorFill{\useKV[ClesFormule]{Couleur}}%
+  \ifboolKV[ClesFormule]{Perimetre}{%
+    \begin{tikzpicture}[remember picture, overlay]
+      \node[draw,fill=\ColorFill,dashed,rounded corners,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+          \IfStrEqCase{\useKV[ClesFormule]{Surface}}{%
+            {carre}{\begin{center}
+                \MPFigureCarre\par
+                P\'erim\`etre d'un carr\'e :\par$4\times c$
+              \end{center}}%
+            {polygone}{%
+              \begin{center}
+                \MPFigurePolygone\par
+                P\'erim\`etre d'un polygone : \par$\text{Somme des c\^ot\'es}$
+              \end{center}
+            }%
+            {rectangle}{%
+              \begin{center}
+                \MPFigureRectangle\par
+                P\'erim\`etre d'un rectangle : \par$2\times(L+\ell)$
+              \end{center}
+              }%
+              {losange}{%
+                \begin{center}
+                \MPFigureLosange\par
+                P\'erim\`etre d'un losange : \par$4\times c$
+              \end{center}
+              }%
+            {triangle}{%
+              \begin{center}
+                \MPFigureTriangle\par
+                P\'erim\`etre d'un triangle : \par Somme des c\^ot\'es
+              \end{center}
+            }%
+            {cercle}{%
+              \begin{center}
+                \MPFigureCercle\par
+                P\'erim\`etre d'un cercle : \par$\pi\times\text{diam\`etre}$
+              \end{center}
+            }%
+            {parallelogramme}{%
+              \begin{center}
+                \MPFigureParallelogramme\par
+                P\'erim\`etre d'un parall\'elogramme : \par Somme des c\^ot\'es
+              \end{center}
+            }}
+        \end{minipage}};
+    \end{tikzpicture}
+  }{\ifboolKV[ClesFormule]{Aire}{%
+      \begin{tikzpicture}[remember picture, overlay]
+        \node[draw,fill=\ColorFill,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+            \IfStrEqCase{\useKV[ClesFormule]{Surface}}{%
+              {carre}{\begin{center}
+                  \MPFigureCarre\par
+                  Aire d'un carr\'e :\par$c\times c$
+              \end{center}}%
+            {rectangle}{%
+              \begin{center}
+                  \MPFigureRectangle\par
+                  Aire d'un rectangle :\par$L\times\ell$
+              \end{center}
+              }%
+              {losange}{%
+                \begin{center}
+                  \MPFigureLosangeAire\par
+                  Aire d'un losange :\par$\dfrac{\text{grande diagonale}\times\text{petite diagonale}}{2}$
+              \end{center}
+              }%
+            {triangle}{%
+              \begin{center}
+                \MPFigureTriangleAire\par\vspace{1em}\par
+                Aire d'un triangle : $\displaystyle\frac{\text{c\^ot\'e}\times\text{hauteur relative \`a ce c\^ot\'e}}{2}$
+              \end{center}
+            }%
+            {disque}{%
+              \begin{center}
+                \MPFigureDisque\par
+                Aire d'un disque :\par$\pi\times r\times r$
+              \end{center}
+            }%
+            {parallelogramme}{%
+              \begin{center}
+                \MPFigureParallelogrammeAire\par
+                Aire d'un parall\'elogramme : $\text{c\^ot\'e}\times\text{hauteur relative \`a ce c\^ot\'e}$
+                \end{center}
+            }
+            {sphere}{%
+              \begin{center}
+                \MPFigureSphere\par
+                Aire d'une sph\`ere : $4\times\pi\times r^2$
+              \end{center}
+            }}
+        \end{minipage}};
+    \end{tikzpicture}
+    }{%Volume
+      \begin{tikzpicture}[remember picture, overlay]
+        \node[draw,fill=\ColorFill,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+            \IfStrEqCase{\useKV[ClesFormule]{Solide}}{%
+              {boule}{\begin{center}
+                \MPFigureSphere\par
+                Volume d'une boule : $\dfrac{4\times\pi\times r^3}{3}$
+              \end{center}}%
+            {cube}{%
+              \begin{center}
+                \MPFigureCube\par
+                Volume d'un cube : $a^3\quad(a\times a\times a)$
+              \end{center}
+            }%
+              {pave}{%
+                \begin{center}
+                  \MPFigurePave\par
+                  Volume d'un pav\'e droit : $\ell\times h\times p$
+              \end{center}
+              }
+              {prisme}{%
+                \begin{center}
+                  \MPFigurePrisme\par
+                  Volume d'un prisme droit : $\text{Aire de la base}\times\mbox{hauteur}$
+                \end{center}
+              }
+              {cylindre}{%
+                \begin{center}
+                  \MPFigureCylindre\par
+                  Volume d'un cylindre de r\'evolution : $\pi\times r^2\times h$
+                \end{center}
+              }
+              {pyramide}{%
+                \begin{center}
+                  \MPFigurePyramide\par
+                  Volume d'une pyramide : $\dfrac{\text{Aire de la base}\times\text{hauteur}}{3}$
+                \end{center}
+              }
+              {cone}{%
+                \begin{center}
+                  \MPFigureCone\par
+                  Volume d'un c\^one de r\'evolution : $\displaystyle\dfrac{\pi\times r^2\times h}{3}$
+                \end{center}
+              }
+              }
+          \end{minipage}};
+      \end{tikzpicture}
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRappelsFormules.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,2095 @@
+%%%
+% Reperage
+%%%
+\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false,CouleurMercure=black,Celsius,Kelvin=false,Farenheit=false,ValeurMin=-4000,ValeurMax=4000,Etages=4,Code=false}
+\defKV[ClesReperage]{Traces=\setKV[ClesReperage]{Code}}
+% ValeurOrigine permet de faire des morceaux de demi-droite gradu\'ee en passant par droite :)
+
+\def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
+\def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
+\def\Updatetoksdemidroite#1/#2\nil{\addtotok\toklistenompointdemidroite{"#2",}}
+\def\Updatetoksrepere#1/#2/#3\nil{\addtotok\toklistepointrepere{#1,#2,"#3",}}
+\def\Updatetoksespace#1/#2/#3/#4\nil{\addtotok\toklistepointespace{#1,#2,#3,"#4",}}
+
+\newtoks\toklistepointrepere%
+\newtoks\toklistepointdroite%
+\newtoks\toklistepointdemidroite%
+\newtoks\toklistenompointdemidroite%
+\newtoks\toklistepointespace%
+
+% Pour construire le rep\`ere de l'espace
+\def\buildespace{%
+  \toklistepointespace{}%
+  \ifboolKV[ClesReperage]{Sphere}{%
+    \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}%
+    \[\MPEspaceSphere{\the\toklistepointrepere}{\useKV[ClesReperage]{EchelleEspace}}\]
+  }{%
+    \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksespace\compteur\nil}%
+    \ifboolKV[ClesReperage]{AffichageNom}{%
+      \ifboolKV[ClesReperage]{AffichageCoord}{%
+        \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{3}{\useKV[ClesReperage]{EchelleEspace}}\]%
+      }{%
+        \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{2}{\useKV[ClesReperage]{EchelleEspace}}\]%
+      }%
+    }{%
+      \ifboolKV[ClesReperage]{AffichageCoord}{%
+        \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{1}{\useKV[ClesReperage]{EchelleEspace}}\]%
+      }{%
+        \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{0}{\useKV[ClesReperage]{EchelleEspace}}\]%
+      }%
+    }%
+  }%
+}%
+
+\def\MPEspaceSphere#1#2{%
+  \ifluatex
+  \begin{mplibcode}
+    typetrace:="3D";
+    typerepre:="persp";
+    anglephi:=\useKV[ClesReperage]{AnglePhi};
+    Initialisation(1500,anglephi,10,#2);
+    color O,A,B,C,D,Z,M[];
+    O=(0,0,0);
+    A=(cosd(anglephi+90),sind(anglephi+90),0);
+    B=(cosd(anglephi+180),sind(anglephi+180),0);
+    C=(1,0,0);
+    D=(0,1,0);
+    Z=(0,0,1);
+    trace cercles(O,A,O,A,Z) withcolor 0.7white;
+    path Equateur;
+    Equateur=cercles(O,C,O,C,D);
+    trace (subpath((0.25+anglephi/360)*length Equateur,(0.75+anglephi/360)*length Equateur) of Equateur) dashed evenly withcolor 0.7white;
+    trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white;
+    path greenwich;
+    greenwich=cercles(O,C,O,C,Z);
+    trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich  withcolor 0.7white;
+    clip currentpicture to cercles(O,A,O,A,Z);
+    trace chemin(C,O,Z) dashed evenly withcolor 0.85white;
+    trace chemin(O,2[Z,O])  dashed evenly withcolor 0.85white;
+
+    vardef toto(text t)=
+    n:=1;
+    for p_=t:
+    if (n mod 3)=1:
+    k:=p_;
+    fi;
+    if (n mod 3)=2:
+    l:=p_;
+    fi;
+    if (n mod 3)=0:
+      M[n]=(cosd(k)*cosd(l),sind(k)*cosd(l),sind(l));
+      path Codageun,Codagedeux;
+      if k>0:
+        Codageun=cercles(O,1[O,C],O,1[O,C],D) cutafter chemin(O,(cosd(k),sind(k),0));
+      elseif k<0:
+        Codageun=cercles(O,1[O,C],O,1[O,C],D) cutbefore chemin(O,(cosd(k),sind(k),0));
+      fi;
+      if l>0:
+        Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutafter chemin(O,M[n]);
+      elseif l<0:
+        Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutbefore chemin(O,M[n]);
+      fi;
+    %%%% if l>0:
+    %%%fill Projette(O)--Projette((cosd(k),sind(k),0))--Codagedeux--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+    %%%fill Projette(O)--Projette(C)--Codageun--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+    %%%else:
+    %%%fill Projette(O)--Codagedeux--Projette((cosd(k),sind(k),0))--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+    %%%fill Projette(O)--Codageun--Projette(C)--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+    %%%fi;
+      if unknown Codageun: else: trace Codageun; fi;
+      if unknown Codagedeux: else: trace Codagedeux; fi;
+      if \useKV[ClesReperage]{AffichageCoord}:
+        picture CodageUn,CodageDeux;
+        CodageUn=image(
+          if k>0:
+            label.bot(TEX("\scriptsize\ang{"&decimal(k)&"} E"),(0,0));
+          else:
+            label.bot(TEX("\scriptsize\ang{"&decimal(abs(k))&"} O"),(0,0));
+          fi;
+        );
+        CodageDeux=image(
+        if k>0:
+          label.rt(TEX("\scriptsize\ang{"&decimal(l)&"} N"),(0,0));
+        else:
+          label.lft(TEX("\scriptsize\ang{"&decimal(abs(l))&"} S"),(0,0));
+        fi;
+        );
+        fill (polygone(llcorner CodageUn,lrcorner CodageUn,urcorner CodageUn,ulcorner CodageUn) shifted(point(0.5*length Codageun) of Codageun)) withcolor blanc;
+        trace CodageUn shifted (point(0.5*length Codageun) of Codageun);
+        fill (polygone(llcorner CodageDeux,lrcorner CodageDeux,urcorner CodageDeux,ulcorner CodageDeux) shifted(point(0.5*length Codagedeux) of Codagedeux)) withcolor blanc;
+        trace CodageDeux shifted (point(0.5*length Codagedeux) of Codagedeux);
+      fi;
+    trace chemin(O,(cosd(k),sind(k),0)) dashed withdots scaled 0.5;
+    trace chemin(O,M[n]) dashed withdots scaled 0.5;
+    trace chemin(O,C) dashed withdots scaled 0.5;
+    if \useKV[ClesReperage]{AffichageNom}:
+    if l>0:dotlabel.top(p_,Projette(M[n]));
+    else:
+    dotlabel.bot(p_,Projette(M[n]));
+    fi;
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    enddef;
+    toto(#1);
+    label.llft(btex \tiny \ang{0} etex,Projette(C));
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={boolean AffichageCoord; AffichageCoord=\useKV[ClesReperage]{AffichageCoord}; boolean AffichageNom; AffichageNom=\useKV[ClesReperage]{AffichageNom};anglephi:=\useKV[ClesReperage]{AnglePhi};}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Initialisation(1500,anglephi,10,#2);
+    color O,A,B,C,D,Z,M[];
+    O=(0,0,0);
+    A=(cosd(anglephi+90),sind(anglephi+90),0);
+    B=(cosd(anglephi+180),sind(anglephi+180),0);
+    C=(1,0,0);
+    D=(0,1,0);
+    Z=(0,0,1);
+    trace cercles(O,A,O,A,Z) withcolor 0.7white;
+    path Equateur;
+    Equateur=cercles(O,C,O,C,D);
+    trace (subpath((0.25+anglephi/360)*length Equateur,(0.75+anglephi/360)*length Equateur) of Equateur) dashed evenly withcolor 0.7white;
+    trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white;
+    path greenwich;
+    greenwich=cercles(O,C,O,C,Z);
+    trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich  withcolor 0.7white;
+    clip currentpicture to cercles(O,A,O,A,Z);
+    trace chemin(C,O,Z) dashed evenly withcolor 0.85white;
+    trace chemin(O,2[Z,O])  dashed evenly withcolor 0.85white;
+
+    vardef toto(text t)=
+    n:=1;
+    for p_=t:
+     if (n mod 3)=1:
+     k:=p_;
+    fi;
+    if (n mod 3)=2:
+    l:=p_;
+    fi;
+    if (n mod 3)=0:
+    M[n]=(cosd(k)*cosd(l),sind(k)*cosd(l),sind(l));
+    path Codageun,Codagedeux;
+    if k>0:
+    Codageun=cercles(O,1[O,C],O,1[O,C],D) cutafter chemin(O,(cosd(k),sind(k),0));
+    elseif k<0:
+    Codageun=cercles(O,1[O,C],O,1[O,C],D) cutbefore chemin(O,(cosd(k),sind(k),0));
+    fi;
+    if l>0:
+    Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutafter chemin(O,M[n]);
+    elseif k<0:
+    Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutbefore chemin(O,M[n]);
+    fi;
+    %if l>0:
+    %fill Projette(O)--Projette((cosd(k),sind(k),0))--Codagedeux--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+    %fill Projette(O)--Projette(C)--Codageun--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+    %else:
+    %fill Projette(O)--Codagedeux--Projette((cosd(k),sind(k),0))--cycle withcolor \useKV[ClesReperage]{CouleurLa};
+    %fill Projette(O)--Codageun--Projette(C)--cycle withcolor \useKV[ClesReperage]{CouleurLon};
+    %fi;
+    if unknown Codageun: else: trace Codageun; fi;
+    if unknown Codagedeux: else: trace Codagedeux; fi;
+    if AffichageCoord:
+    picture CodageUn,CodageDeux;
+    CodageUn=image(
+    if k>0:
+    label.bot(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(k)&"} E"),(0,0));
+    else:
+    label.bot(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(abs(k))&"} O"),(0,0));
+    fi;
+    );
+    CodageDeux=image(
+    if k>0:
+    label.rt(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(l)&"} N"),(0,0));
+    else:
+    label.lft(LATEX("\noexpand\scriptsize\noexpand\ang{"&decimal(abs(l))&"} S"),(0,0));
+    fi;
+    );
+    fill (polygone(llcorner CodageUn,lrcorner CodageUn,urcorner CodageUn,ulcorner CodageUn) shifted(point(0.5*length Codageun) of Codageun)) withcolor blanc;
+    trace CodageUn shifted (point(0.5*length Codageun) of Codageun);
+    fill (polygone(llcorner CodageDeux,lrcorner CodageDeux,urcorner CodageDeux,ulcorner CodageDeux) shifted(point(0.5*length Codagedeux) of Codagedeux)) withcolor blanc;
+    trace CodageDeux shifted (point(0.5*length Codagedeux) of Codagedeux);
+    fi;
+    trace chemin(O,(cosd(k),sind(k),0)) dashed withdots scaled 0.5;
+    trace chemin(O,M[n]) dashed withdots scaled 0.5;
+    trace chemin(O,C) dashed withdots scaled 0.5;
+    if AffichageNom:
+    if l>0:dotlabel.top(p_,Projette(M[n]));
+    else:
+    dotlabel.bot(p_,Projette(M[n]));
+    fi;
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    enddef;
+    toto(#1);
+    label.llft(LATEX("\noexpand\tiny\noexpand\ang{0}"),Projette(C));
+  \end{mpost}
+  \fi
+}
+
+\def\MPEspacePave#1#2#3#4#5#6#7#8#9{%
+  \ifluatex
+  \begin{mplibcode}
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-20u,-20u,20u,20u);
+    Initialisation(1500,30,20,abs(#9));
+    %marque_r:=marque_r/2;
+    marque_p:="plein";
+    color A,B,C,D,E,F,G,H,M[],N[];
+    draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+    if #9>0:
+    drawarrow Projette(A)--Projette(1.5[D,A]);
+    drawarrow Projette(C)--Projette(1.5[D,C]);
+    drawarrow Projette(E)--Projette(1.5[D,E]);
+    label.top(btex $x$ etex,Projette(1.5[D,A]));
+    label.top(btex $y$ etex,Projette(1.5[D,C]));
+    label.top(btex $z$ etex,Projette(1.5[D,E]));
+    label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+    label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+    label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+    for k=1 upto (#2):
+    pointe((k/#2)[D,A]);
+    endfor;
+    for k=1 upto (#4):
+    pointe((k/#4)[D,C]);
+    endfor;
+    for k=1 upto (#6):
+    pointe((k/#6)[D,E]);
+    endfor;
+    else:
+    drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+    drawarrow Projette(B)--Projette(1.5[A,B]);
+    drawarrow Projette(F)--Projette(1.5[A,F]);
+    label.lrt(btex $x$ etex,Projette(1.5[A,D]));
+    label.top(btex $y$ etex,Projette(1.5[A,B]));
+    label.top(btex $z$ etex,Projette(1.5[A,F]));
+    label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+    label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+    label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+    for k=1 upto (#2):
+    pointe((k/#2)[A,D]);
+    endfor;
+    for k=1 upto (#4):
+    pointe((k/#4)[A,B]);
+    endfor;
+    for k=1 upto (#6):
+    pointe((k/#6)[A,F]);
+    endfor;
+    fi;
+    vardef tata(text t)=
+    n:=1;%pour compter combien de points
+    k:=0;%pour garder l'abscisse
+    l:=0;%pour garder l'ordonn\'ee
+    m:=0;%pour garder l'altitude
+    if #8>0:
+    for p_=t:
+    if (n mod 4)=1:
+    k:=p_;
+    fi;
+    if (n mod 4)=2:
+    l:=p_;
+    fi;
+    if (n mod 4)=3:
+    m:=p_;
+    fi;
+    if (n mod 4)=0:
+    M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+    N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+    if (#8>1):
+    label.top(TEX(p_),Projette(M[n]));
+    pointe(M[n]);
+    fi;
+    if (#8=1) or (#8=3) :
+    drawoptions(dashed evenly withcolor gris);
+    draw segment(M[n],(0,0,bluepart(M[n])));
+    draw segment(M[n],N[n]);
+    draw segment(N[n],(redpart(M[n]),0,0));
+    draw segment(N[n],(0,greenpart(M[n]),0));
+    drawoptions();
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    vardef toto(text t)=
+    n:=1;%pour compter combien de points
+    k:=0;%pour garder l'abscisse
+    l:=0;%pour garder l'ordonn\'ee
+    m:=0;%pour garder l'altitude
+    if #8>0:
+    for p_=t:
+    if (n mod 4)=1:
+    k:=p_;
+    fi;
+    if (n mod 4)=2:
+    l:=p_;
+    fi;
+    if (n mod 4)=3:
+    m:=p_;
+    fi;
+    if (n mod 4)=0:
+    % message("je suis ici : "&p_);
+    M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+    N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+    if (#8>1):
+    label.top(TEX(p_),Projette(M[n]));
+    pointe(M[n]);
+    fi;
+    if (#8=1) or (#8=3) :
+    drawoptions(dashed evenly withcolor gris);
+    draw segment(M[n],A+(0,0,bluepart(M[n])));
+    draw segment(M[n],N[n]);
+    draw segment(N[n],A+(l/#4)*(B-A));
+    draw segment(N[n],A+(k/#2)*(D-A));
+    drawoptions();
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    if #9>0:
+    tata(#7);
+    else:
+    toto(#7);
+    fi;
+    draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+    if \useKV[ClesReperage]{Code}:
+    \useKV[ClesReperage]{Traces}
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={input PfCGeometrie;}]
+    typetrace:="3D";
+    typerepre:="persp";
+    Figure(-20u,-20u,20u,20u);
+    Initialisation(1500,30,20,abs(#9));
+    %marque_r:=marque_r/2;
+    marque_p:="plein";
+    color A,B,C,D,E,F,G,H,M[],N[];
+    draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+    if #9>0:
+    drawarrow Projette(A)--Projette(1.5[D,A]);
+    drawarrow Projette(C)--Projette(1.5[D,C]);
+    drawarrow Projette(E)--Projette(1.5[D,E]);
+    label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+    label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+    label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+    for k=1 upto (#2):
+    pointe((k/#2)[D,A]);
+    endfor;
+    for k=1 upto (#4):
+    pointe((k/#4)[D,C]);
+    endfor;
+    for k=1 upto (#6):
+    pointe((k/#6)[D,E]);
+    endfor;
+    else:
+    drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+    drawarrow Projette(B)--Projette(1.5[A,B]);
+    drawarrow Projette(F)--Projette(1.5[A,F]);
+    label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+    label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+    label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+    for k=1 upto (#2):
+    pointe((k/#2)[A,D]);
+    endfor;
+    for k=1 upto (#4):
+    pointe((k/#4)[A,B]);
+    endfor;
+    for k=1 upto (#6):
+    pointe((k/#6)[A,F]);
+    endfor;
+    fi;
+    vardef tata(text t)=
+    n:=1;%pour compter combien de points
+    k:=0;%pour garder l'abscisse
+    l:=0;%pour garder l'ordonn\'ee
+    m:=0;%pour garder l'altitude
+    if #8>0:
+    for p_=t:
+    if (n mod 4)=1:
+    k:=p_;
+    fi;
+    if (n mod 4)=2:
+    l:=p_;
+    fi;
+    if (n mod 4)=3:
+    m:=p_;
+    fi;
+    if (n mod 4)=0:
+    M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+    N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+    if (#8>1):
+    label.top(LATEX(p_),Projette(M[n]));
+    pointe(M[n]);
+    fi;
+    if (#8=1) or (#8=3) :
+    drawoptions(dashed evenly withcolor gris);
+    draw segment(M[n],(0,0,bluepart(M[n])));
+    draw segment(M[n],N[n]);
+    draw segment(N[n],(redpart(M[n]),0,0));
+    draw segment(N[n],(0,greenpart(M[n]),0));
+    drawoptions();
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    vardef toto(text t)=
+    n:=1;%pour compter combien de points
+    k:=0;%pour garder l'abscisse
+    l:=0;%pour garder l'ordonn\'ee
+    m:=0;%pour garder l'altitude
+    if #8>0:
+    for p_=t:
+    if (n mod 4)=1:
+    k:=p_;
+    fi;
+    if (n mod 4)=2:
+    l:=p_;
+    fi;
+    if (n mod 4)=3:
+    m:=p_;
+    fi;
+    if (n mod 4)=0:
+    % message("je suis ici : "&p_);
+    M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+    N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+    if (#8>1):
+    label.top(LATEX(p_),Projette(M[n]));
+    pointe(M[n]);
+    fi;
+    if (#8=1) or (#8=3) :
+    drawoptions(dashed evenly withcolor gris);
+    draw segment(M[n],A+(0,0,bluepart(M[n])));
+    draw segment(M[n],N[n]);
+    draw segment(N[n],A+(l/#4)*(B-A));
+    draw segment(N[n],A+(k/#2)*(D-A));
+    drawoptions();
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    if #9>0:
+    tata(#7);
+    else:
+    toto(#7);
+    fi;
+    draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+  \end{mpost}
+  \fi
+}%
+
+% Pour construire le rep\`ere du plan
+\def\buildreperenew{%
+  \toklistepointrepere{}%
+  \foreachitem\compteur\in\ListePointRepere{\expandafter\Updatetoksrepere\compteur\nil}%
+  \ifboolKV[ClesReperage]{Trace}{%
+    \[\MPPlanTrace{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}{\useKV[ClesReperage]{ListeSegment}}\]%
+  }{%
+    \xdef\AfficheNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{3}}{\xdef\AfficheNom{2}}}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{1}}{}}%
+    \xdef\AfficheGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AfficheGrad{1}}{}%
+    \xdef\AfficheCoord{\useKV[ClesReperage]{AffichageAbs}}%
+    \MPPlannew{(\useKV[ClesReperage]{Unitex},\useKV[ClesReperage]{Pasx})}{(\useKV[ClesReperage]{Unitey},\useKV[ClesReperage]{Pasy})}{\the\toklistepointrepere}{\AfficheNom}{\AfficheCoord}{\AfficheGrad}{(\useKV[ClesReperage]{ValeurUnitex},\useKV[ClesReperage]{ValeurUnitey})}%
+  }%
+}
+
+\def\MPPlannew#1#2#3#4#5#6#7{%
+  %#1 : Unitex, pasx
+  %#2 : unitey, pasy
+  %#3 : liste de points
+  %#4 : Affichage nom + lecture graphique
+  %#5 : Affichage des (abscisses/ordonn\'ees)
+  %#6 : Graduation compl\`ete ?
+  %#7 : (unitex,unitey)
+  \ifluatex
+  \begin{mplibcode}
+    maxx:=-4000;
+    minx=4000;
+    unitex:=(xpart(#1))*cm;
+    pasx=ypart(#1);
+    unitpx:=unitex/pasx;
+    maxy:=-4000;
+    miny:=4000;
+    unitey:=(xpart(#2))*cm;
+    pasy:=ypart(#2);
+    unitpy:=unitey/pasy;
+    n:=1;
+    vardef toto(text t)=
+    for p_=t:
+    if (n mod 3)=1:
+    if p_>maxx:
+        maxx:=p_;
+      fi;
+      if p_<minx:
+        minx:=p_;
+      fi;
+    fi;
+    if (n mod 3)=2:
+      if p_>maxy:
+        maxy:=p_;
+      fi;
+      if p_<miny:
+        miny:=p_;
+      fi;
+      fi;
+      n:=n+1;
+    endfor;
+    maxx:=maxx+1;
+    minx:=minx-1;
+    if maxx<(ypart(#1)+1):
+    maxx:=ypart(#1)+1;
+    fi;
+    if minx>(-ypart(#1)-1):
+    minx:=-ypart(#1)-1;
+    fi;
+    maxy:=maxy+1;
+    miny:=miny-1;
+    if maxy<(ypart(#2)+1):
+    maxy:=ypart(#2)+1;
+    fi;
+    if miny>(-ypart(#2)-1):
+    miny:=-ypart(#2)-1;
+    fi;
+    enddef;
+    toto(#3);
+    Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+    pair A,B,C,D,E;
+    A=(0,0);
+    B=(minx*unitpx,0);
+    C=(maxx*unitpx,0);
+    D=(0,miny*unitpy);
+    E=(0,maxy*unitpy);
+    for k=0 upto (maxx-minx):
+    draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+    endfor;
+    for k=0 upto (maxy-miny):
+    draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+    endfor;
+    drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+    drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+    % graduation compl\`ete ou pas ?
+    label.llft(btex \footnotesize 0 etex,A);
+    if #6>0:
+    for k=minx upto maxx:
+    if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))<xpart(C+(0.75*unitpx,0))):
+    if k<>0:
+    dotlabel.lrt(TEX("\footnotesize\num{"&decimal(k)&"}"),(k*unitex,0));
+    fi;
+    fi;
+    endfor;
+    for k=miny upto maxy:
+    if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))<ypart(E+(0,0.75*unitpy))):
+    if k<>0:
+    dotlabel.ulft(TEX("\footnotesize\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    fi;
+    endfor;
+    else:
+    dotlabel.lrt(TEX("\footnotesize\num{"&decimal(xpart(#7))&"}"),(unitex,0));
+    dotlabel.ulft(TEX("\footnotesize\num{"&decimal(ypart(#7))&"}"),(0,unitey));
+    fi;
+    % apparition du nom des points ou pas
+    m_c:=m_c*3;
+    marque_p:="croix";
+    vardef tata(text t)=%on place les points
+    if #4>0:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if #4>1:
+    if p_<>"":
+    if (k>0) and (l>0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l>0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l=0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l>0):
+    label.ulft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l<0):
+    label.llft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l<0):
+    label.llft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l=0):
+    label.llft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l<0):
+    label.lrt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    pointe((k*unitpx,l*unitpy));
+    fi;
+    fi;
+    if (#4=1) or (#4=3):
+    draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    if #5=2:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+        if (k mod pasx)<>0:
+        label.lrt(TEX("\footnotesize$\frac{\num{"&decimal(k)&"}}{\num{"&decimal(pasx)&"}}$"),(k*unitpx,0));
+        else:
+        label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+        fi;
+        if (l mod pasy)<>0:
+        label.ulft(TEX("\footnotesize$\frac{\num{"&decimal(l)&"}}{\num{"&decimal(pasy)&"}}$"),(0,l*unitpy));
+        else:
+        label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+        fi;
+      pointe((k*unitpx,0),(0,l*unitpy));
+      fi;
+    fi;
+    n:=n+1;
+    endfor;
+    elseif #5=1:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+    label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+    label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+    pointe((k*unitpx,0),(0,l*unitpy));
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    tata(#3);
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    maxx:=-4000;
+    minx=4000;
+    unitex:=(xpart(#1))*cm;
+    pasx=ypart(#1);
+    unitpx:=unitex/pasx;
+    maxy:=-4000;
+    miny:=4000;
+    unitey:=(xpart(#2))*cm;
+    pasy:=ypart(#2);
+    unitpy:=unitey/pasy;
+    n:=1;
+    vardef toto(text t)=
+    for p_=t:
+    if (n mod 3)=1:
+    if p_>maxx:
+        maxx:=p_;
+      fi;
+      if p_<minx:
+        minx:=p_;
+      fi;
+    fi;
+    if (n mod 3)=2:
+      if p_>maxy:
+        maxy:=p_;
+      fi;
+      if p_<miny:
+        miny:=p_;
+      fi;
+      fi;
+      n:=n+1;
+    endfor;
+    maxx:=maxx+1;
+    minx:=minx-1;
+    if maxx<(ypart(#1)+1):
+    maxx:=ypart(#1)+1;
+    fi;
+    if minx>(-ypart(#1)-1):
+    minx:=-ypart(#1)-1;
+    fi;
+    maxy:=maxy+1;
+    miny:=miny-1;
+    if maxy<(ypart(#2)+1):
+    maxy:=ypart(#2)+1;
+    fi;
+    if miny>(-ypart(#2)-1):
+    miny:=-ypart(#2)-1;
+    fi;
+    enddef;
+    toto(#3);
+    Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+    pair A,B,C,D,E;
+    A=(0,0);
+    B=(minx*unitpx,0);
+    C=(maxx*unitpx,0);
+    D=(0,miny*unitpy);
+    E=(0,maxy*unitpy);
+    for k=0 upto (maxx-minx):
+    draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+    endfor;
+    for k=0 upto (maxy-miny):
+    draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+    endfor;
+    drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+    drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+    % graduation compl\`ete ou pas ?
+    label.llft(btex \noexpand\footnotesize 0 etex,A);
+    if #6>0:
+    for k=minx upto maxx:
+    if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))<xpart(C+(0.75*unitpx,0))):
+    if k<>0:
+    dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(k*unitex,0));
+    fi;
+    fi;
+    endfor;
+    for k=miny upto maxy:
+    if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))<ypart(E+(0,0.75*unitpy))):
+    if k<>0:
+    dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    fi;
+    endfor;
+    else:
+    dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(xpart(#7))&"}"),(unitex,0));
+    dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ypart(#7))&"}"),(0,unitey));
+    fi;
+    % apparition du nom des points ou pas
+    m_c:=m_c*3;
+    marque_p:="croix";
+    vardef tata(text t)=%on place les points
+    if #4>0:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if #4>1:
+    if p_<>"":
+    if (k>0) and (l>0):
+    label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l>0):
+    label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l=0):
+    label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l>0):
+    label.ulft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l<0):
+    label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l<0):
+    label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l=0):
+    label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l<0):
+    label.lrt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    pointe((k*unitpx,l*unitpy));
+    fi;
+    fi;
+    if (#4=1) or (#4=3):
+    draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    if #5=2:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+        if (k mod pasx)<>0:
+        label.lrt(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(k)&"}}{\noexpand\num{"&decimal(pasx)&"}}$"),(k*unitpx,0));
+        else:
+        label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+        fi;
+        if (l mod pasy)<>0:
+        label.ulft(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(l)&"}}{\noexpand\num{"&decimal(pasy)&"}}$"),(0,l*unitpy));
+        else:
+        label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+        fi;
+      pointe((k*unitpx,0),(0,l*unitpy));
+      fi;
+    fi;
+    n:=n+1;
+    endfor;
+    elseif #5=1:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+    label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+    label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+    pointe((k*unitpx,0),(0,l*unitpy));
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    tata(#3);
+  \end{mpost}
+  \fi
+}
+
+\def\MPPlanTrace#1#2#3#4#5#6#7#8#9{%
+  \ifluatex
+  \begin{mplibcode}
+    maxx:=-4000;
+  minx=4000;
+  unitex:=#1*cm;
+  pasx=#2;
+  unitpx:=unitex/pasx;
+  maxy:=-4000;
+  miny:=4000;
+  unitey:=#3*cm;
+  pasy:=#4;
+  unitpy:=unitey/pasy;
+  n:=1;
+  vardef toto(text t)=
+    for p_=t:
+    if (n mod 3)=1:
+      if p_>maxx:
+        maxx:=p_;
+      fi;
+      if p_<minx:
+        minx:=p_;
+      fi;
+    fi;
+    if (n mod 3)=2:
+      if p_>maxy:
+        maxy:=p_;
+      fi;
+      if p_<miny:
+        miny:=p_;
+      fi;
+      fi;
+      n:=n+1;
+    endfor;
+    maxx:=maxx+1;
+    minx:=minx-1;
+    if maxx<(#2+1):
+    maxx:=#2+1;
+    fi;
+    if minx>(-#2-1):
+    minx:=-#2-1;
+    fi;
+    maxy:=maxy+1;
+    miny:=miny-1;
+    if maxy<(#4+1):
+    maxy:=#2+1;
+    fi;
+    if miny>(-#4-1):
+    miny:=-#4-1;
+    fi;
+    enddef;
+    toto(#5);
+    Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+    pair A,B,C,D,E;
+    A=(0,0);
+    B=(minx*unitpx,0);
+    C=(maxx*unitpx,0);
+    D=(0,miny*unitpy);
+    E=(0,maxy*unitpy);
+    for k=0 upto (maxx-minx):
+    draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+    endfor;
+    for k=0 upto (maxy-miny):
+    draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+    endfor;
+    drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+    drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+    dotlabel.bot(TEX("\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+    dotlabel.lft(TEX("\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+    label.llft(btex 0 etex,A);
+    % apparition du nom des points ou pas
+    m_c:=m_c*3;
+    marque_p:="croix";
+        vardef tata(text t)=%on place les points
+    if #6>0:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if #6>1:
+    if (k>0) and (l>0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l>0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l=0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l>0):
+    label.ulft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l<0):
+    label.llft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l<0):
+    label.llft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l=0):
+    label.llft(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l<0):
+    label.lrt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    pointe((k*unitpx,l*unitpy));
+    fi;
+    if (#6=1) or (#6=3):
+    draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;    
+    vardef Tracage(text t)(text ls)=%on trace les segments
+    pair A[];
+    n:=0;%pour parcourir la liste
+    m:=0;%pour lister les points par leur nombre
+    for p_=t:
+    n:=n+1;
+    if (n mod 3)=1:
+    k:=p_;
+    fi;
+    if (n mod 3)=2:
+    l:=p_;
+    fi;
+    if (n mod 3)=0:
+    m:=m+1;
+    A[m]=(k*unitpx,l*unitpy);
+    fi;
+    endfor;
+    for p_=ls:
+    draw segment(A[p_ div 10],A[p_ mod 10]);
+    endfor;
+    enddef;
+    tata(#5);
+    Tracage(#5)(#9);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={input PfCGeometrie;}]
+  maxx:=-4000;
+  minx=4000;
+  unitex:=#1*cm;
+  pasx=#2;
+  unitpx:=unitex/pasx;
+  maxy:=-4000;
+  miny:=4000;
+  unitey:=#3*cm;
+  pasy:=#4;
+  unitpy:=unitey/pasy;
+  n:=1;
+  vardef toto(text t)=
+    for p_=t:
+    if (n mod 3)=1:
+      if p_>maxx:
+        maxx:=p_;
+      fi;
+      if p_<minx:
+        minx:=p_;
+      fi;
+    fi;
+    if (n mod 3)=2:
+      if p_>maxy:
+        maxy:=p_;
+      fi;
+      if p_<miny:
+        miny:=p_;
+      fi;
+      fi;
+      n:=n+1;
+    endfor;
+    maxx:=maxx+1;
+    minx:=minx-1;
+    if maxx<(#2+1):
+    maxx:=#2+1;
+    fi;
+    if minx>(-#2-1):
+    minx:=-#2-1;
+    fi;
+    maxy:=maxy+1;
+    miny:=miny-1;
+    if maxy<(#4+1):
+    maxy:=#2+1;
+    fi;
+    if miny>(-#4-1):
+    miny:=-#4-1;
+    fi;
+    enddef;
+    toto(#5);
+    Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+    pair A,B,C,D,E;
+    A=(0,0);
+    B=(minx*unitpx,0);
+    C=(maxx*unitpx,0);
+    D=(0,miny*unitpy);
+    E=(0,maxy*unitpy);
+    for k=0 upto (maxx-minx):
+    draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+    endfor;
+    for k=0 upto (maxy-miny):
+    draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+    endfor;
+    drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+    drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+    dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+    dotlabel.lft(LATEX("\noexpand\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+    label.llft(btex 0 etex,A);
+    % apparition du nom des points ou pas
+    m_c:=m_c*3;
+    marque_p:="croix";
+        vardef tata(text t)=%on place les points
+    if #6>0:
+    n:=1;
+    k:=0;%pour retenir la coordonn\'ee en x
+    l:=0;%pour retenir la coordonn\'ee en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if #6>1:
+    if (k>0) and (l>0):
+    label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l>0):
+    label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l=0):
+    label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l>0):
+    label.ulft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k=0) and (l<0):
+    label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l<0):
+    label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k<0) and (l=0):
+    label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    if (k>0) and (l<0):
+    label.lrt(LATEX(p_),(k*unitpx,l*unitpy));
+    fi;
+    pointe((k*unitpx,l*unitpy));
+    fi;
+    if (#6=1) or (#6=3):
+    draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;    
+    vardef Tracage(text t)(text ls)=%on trace les segments
+    pair A[];
+    n:=0;%pour parcourir la liste
+    m:=0;%pour lister les points par leur nombre
+    for p_=t:
+    n:=n+1;
+    if (n mod 3)=1:
+    k:=p_;
+    fi;
+    if (n mod 3)=2:
+    l:=p_;
+    fi;
+    if (n mod 3)=0:
+    m:=m+1;
+    A[m]=(k*unitpx,l*unitpy);
+    fi;
+    endfor;
+    for p_=ls:
+    draw segment(A[p_ div 10],A[p_ mod 10]);
+    endfor;
+    enddef;
+    tata(#5);
+    Tracage(#5)(#9);
+  \end{mpost}
+  \fi
+}
+
+\def\MPTouteDROITEGraduee#1#2{%
+  % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+  % #2 : liste des noms des points
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    maxx:=0;
+    minx:=4000;
+    unitex:=\useKV[ClesReperage]{Unitex}*cm;
+    pasx:=\useKV[ClesReperage]{Pasx};
+    unitp:=unitex/pasx;%unit\'e de d\'eplacement
+    ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+    ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+    AffichageGrad:=\AffichageGrad;
+    AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+    AffichageNom:=\AffichageNom;
+    boolean DemiDroite;
+    DemiDroite=\useKV[ClesReperage]{DemiDroite};
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    if minx<\useKV[ClesReperage]{ValeurMin}:
+    minx:=\useKV[ClesReperage]{ValeurMin};
+    fi;
+    if maxx>\useKV[ClesReperage]{ValeurMax}:
+    maxx:=\useKV[ClesReperage]{ValeurMax};
+    fi;
+    if DemiDroite:
+    minx:=0;
+    fi;
+    % -----
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(maxx,0);
+    C=unitp*(minx,0);
+    % On trace la droite
+    if DemiDroite:
+    drawarrow C--(B+unitp*(0.75,0));
+    else:
+    drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+    fi;
+    % marquage secondaire
+    marque_s:=marque_s/3;
+%    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*3;
+    label.bot(TEX("\footnotesize\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
+    label.bot(TEX("\footnotesize\num{"&decimal(ValeurOrigine)&"}"),A);
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    fi;
+    endfor;
+    fi;
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if substring(1,2) of p_="*":
+    label.top(TEX(substring(2,length p_) of p_),unitp*(valeur[n],0));
+    else:
+    label.top(TEX(p_),unitp*(valeur[n],0));
+    fi;
+    if p_<>"":
+    pointe(unitp*(valeur[n],0));
+    fi;
+    endfor;
+    fi;
+    % On ajoute une paramétrisation possible à chaque point.
+    if AffichageCoord>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if substring(1,2) of p_="*":
+    ACoord:=scantokens(substring(0,1) of p_);
+    if ACoord=3:
+    drawarrow ((unitp*valeur[n],-7mm))--((unitp*valeur[n],-3mm));
+    label.bot(btex \hbox to2em{\dotfill} etex,((unitp*valeur[n],-8mm)));
+    pointe(unitp*(valeur[n]-ValeurOrigine,0));
+    elseif ACoord=2:
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+    else:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    fi;
+    pointe(unitp*(valeur[n],0));
+    elseif ACoord=1:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    pointe(unitp*(valeur[n],0));
+    fi;
+    else:
+    if AffichageCoord=3:
+    if p_<>"":
+    drawarrow ((unitp*valeur[n],-7mm))--((unitp*valeur[n],-3mm));
+    label.bot(btex \hbox to2em{\dotfill} etex,((unitp*valeur[n],-8mm)));
+    pointe(unitp*(valeur[n],0));
+    fi;
+    elseif AffichageCoord=2:
+    if p_<>"":
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+    else:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    fi;
+    pointe(unitp*(valeur[n],0));
+    fi;
+    elseif AffichageCoord=1:
+    if p_<>"":
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    pointe(unitp*(valeur[n],0));
+    fi;
+    fi;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    %%%
+    tata(#2);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={unitex:=\useKV[ClesReperage]{Unitex}*cm; pasx:=\useKV[ClesReperage]{Pasx}; unitp:=unitex/pasx; ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex}; ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine}; AffichageGrad:=\AffichageGrad; AffichageCoord:=\useKV[ClesReperage]{AffichageAbs}; AffichageNom:=\AffichageNom; ValeurMin=\useKV[ClesReperage]{ValeurMin}; ValeurMax=\useKV[ClesReperage]{ValeurMax};boolean DemiDroite;DemiDroite=\useKV[ClesReperage]{DemiDroite}}]
+    maxx:=0;
+    minx:=4000;
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    if minx<ValeurMin:
+    minx:=ValeurMin;
+    fi;
+    if maxx>ValeurMax:
+    maxx:=ValeurMax;
+    fi;
+    if DemiDroite:
+    minx:=0;
+    fi;
+    % -----
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(maxx,0);
+    C=unitp*(minx,0);
+    % On trace la demi-droite
+    if DemiDroite:
+    drawarrow C--(B+unitp*(0.75,0));
+    else:
+    drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+    fi;
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    %labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*3;
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ValeurOrigine)&"}"),A);
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    fi;
+    endfor;
+    fi;
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if substring(1,2) of p_="*":
+    label.top(LATEX(substring(2,length p_) of p_),unitp*(valeur[n],0));
+    else:
+    label.top(LATEX(p_),unitp*(valeur[n],0));
+    fi;
+    if p_<>"":
+    pointe(unitp*(valeur[n],0));
+    fi;
+    endfor;
+    fi;
+    if AffichageCoord>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if substring(1,2) of p_="*":
+    ACoord:=scantokens(substring(0,1) of p_);
+    if ACoord=3:
+    drawarrow (unitp*(valeur[n],-1))--(unitp*(valeur[n],-0.3));
+    label.bot(btex \noexpand\hbox to2em{\noexpand\dotfill} etex,(unitp*(valeur[n],-1)));
+    pointe(unitp*(valeur[n]-ValeurOrigine,0));
+    elseif ACoord=2:
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+    else:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    fi;
+    pointe(unitp*(valeur[n],0));
+    elseif ACoord=1:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    pointe(unitp*(valeur[n],0));
+    fi;
+    else:
+    if AffichageCoord=3:
+    if p_<>"":
+    drawarrow (unitp*(valeur[n],-1))--(unitp*(valeur[n],-0.3));
+    label.bot(btex \noexpand\hbox to2em{\noexpand\dotfill} etex,(unitp*(valeur[n],-1)));
+    pointe(unitp*(valeur[n],0));
+    fi;
+    elseif AffichageCoord=2:
+    if p_<>"":
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(valeur[n],0));
+    else:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    fi;
+    pointe(unitp*(valeur[n],0));
+    fi;
+    elseif AffichageCoord=1:
+    if p_<>"":
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+    pointe(unitp*(valeur[n],0));
+    fi;
+    fi;
+    fi;
+    endfor;
+    fi;    
+    enddef;
+    %%%
+    tata(#2);
+  \end{mpost}
+  \fi
+}%
+
+\def\MPThermo#1#2{%
+  % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+  % #2 : liste des noms des points
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    maxx:=0;
+    minx:=4000;
+    unitex:=\useKV[ClesReperage]{Unitex}*cm;
+    pasx:=\useKV[ClesReperage]{Pasx};
+    unitp:=unitex/pasx;%unit\'e de d\'eplacement
+    ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+    ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+    AffichageGrad:=\AffichageGrad;
+    AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+    AffichageNom:=\AffichageNom;
+    boolean Kelvin,Farenheit;
+    Kelvin=\useKV[ClesReperage]{Kelvin};
+    Farenheit=\useKV[ClesReperage]{Farenheit};
+    color ColMercure;
+    ColMercure:=\useKV[ClesReperage]{CouleurMercure};
+    boolean Mercure;
+    Mercure=\useKV[ClesReperage]{Mercure};
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    if Kelvin:
+    minx:=0;
+    fi;
+    % -----
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(0,maxx);
+    C=unitp*(0,minx);
+    % On trace la demi-droite
+    draw ((C+unitp*(0,-0.75))--(B+unitp*(0,0.75)));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    if pasx<11:
+    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    if Kelvin:
+    label.lft(TEX("\footnotesize\Temp[K]{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+    label.lft(TEX("\footnotesize\Temp[K]{"&decimal(ValeurOrigine)&"}"),A);
+    elseif Farenheit:
+    label.lft(TEX("\footnotesize\Temp[F]{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+    label.lft(TEX("\footnotesize\Temp[F]{"&decimal(ValeurOrigine)&"}"),A);
+    else:
+    label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+    label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurOrigine)&"}"),A);
+    fi;
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    if Kelvin:
+    label.lft(TEX("\footnotesize\Temp[K]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+    elseif Farenheit:
+    label.lft(TEX("\footnotesize\Temp[F]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+    else:
+    label.lft(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+    fi;
+    fi;
+    endfor;
+    fi;
+
+    vardef Thermo(expr nbt)=
+    pair Tc[];
+    Tc[0]=(5mm,unitp*(minx-1));
+    path cc[];
+    cc1=cercles(Tc[0],2.5mm);
+    Tc1=pointarc(cc1,75);
+    Tc4=pointarc(cc1,105);
+    Tc2=(xpart(Tc1),ypart(B+unitp*(0,0.75)));
+    Tc3=(xpart(Tc4),ypart(B+unitp*(0,0.75)));
+    Tc5=(xpart(Tc1),ypart(unitp*(0,valeur[1])));
+    Tc6=(xpart(Tc4),ypart(unitp*(0,valeur[1])));
+    path temp;
+    temp=Tc1--Tc5--Tc6--Tc4--arccercle(Tc4,Tc1,Tc0)--cycle;
+    if nbt>0:
+    fill temp withcolor ColMercure;
+    trace Tc5--Tc6;
+    fi;
+    trace arccercle(Tc4,Tc1,Tc0);
+    trace Tc1--Tc2--arccercle(Tc2,Tc3,iso(Tc2,Tc3))--Tc4;
+    enddef;
+
+    if Mercure:Thermo(1) else : Thermo(0) fi;
+    
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label.rt(TEX(p_),unitp*(0,valeur[n]));
+    if p_<>"":
+    pointe(unitp*(0,valeur[n]));
+    fi;
+    endfor;
+    fi;
+    if AffichageCoord=3:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    drawarrow (unitp*(-1,valeur[n]))--(unitp*(-0.3,valeur[n]));
+    label.rt(btex \hbox to2em{\dotfill} etex,(unitp*(-1,valeur[n])));
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=2:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.rt(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(0,valeur[n]));
+    else:
+    label.rt(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(0,valeur[n]));
+    fi;
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=1:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    if Kelvin:
+    label.rt(TEX("\footnotesize\Temp[K]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+    elseif Farenheit:
+    label.rt(TEX("\footnotesize\Temp[F]{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+    else:
+    label.rt(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+    fi;
+    pointe(unitp*(0,valeur[n]));
+    draw (unitp*(0,valeur[n]))--(7.5mm,unitp*valeur[n]) dashed evenly;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    %%%
+    tata(#2);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={unitex:=\useKV[ClesReperage]{Unitex}*cm;
+    pasx:=\useKV[ClesReperage]{Pasx};
+    unitp:=unitex/pasx;%unit\'e de d\'eplacement
+    ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+    ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+    AffichageGrad:=\AffichageGrad;
+    AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+    AffichageNom:=\AffichageNom;
+    boolean Kelvin,Farenheit;
+    Kelvin=\useKV[ClesReperage]{Kelvin};
+    Farenheit=\useKV[ClesReperage]{Farenheit};
+    color ColMercure;
+    ColMercure:=\useKV[ClesReperage]{CouleurMercure};
+    boolean Mercure;
+    Mercure=\useKV[ClesReperage]{Mercure};}]
+    maxx:=0;
+    minx:=4000;
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    if Kelvin:
+    minx:=0;
+    fi;
+    % -----
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(0,maxx);
+    C=unitp*(0,minx);
+    % On trace la demi-droite
+    draw (C+unitp*(0,-0.75))--(B+unitp*(0,0.75));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    if pasx<11:
+    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+    fi;
+    fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    if Kelvin:
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurUnitex)&"}{\kelvin}"),unitex*(0,1));
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurOrigine)&"}{\kelvin}"),A);
+    elseif Farenheit:
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurUnitex)&"}{\farenheit}"),unitex*(0,1));
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurOrigine)&"}{\farenheit}"),A);
+    else:
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurUnitex)&"}{\celsius}"),unitex*(0,1));
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{"&decimal(ValeurOrigine)&"}{\celsius}"),A);
+    fi;
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    if Kelvin:
+    label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}{\kelvin}"),unitex*(0,k));%%%
+    elseif Farenheit:
+label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}{\farenheit}"),unitex*(0,k));%%%
+    else:
+label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}{\celsius}"),unitex*(0,k));%%%
+    fi;
+    fi;
+    endfor;
+    fi;
+
+    vardef Thermo(expr nbt)=
+    pair Tc[];
+    Tc[0]=(5mm,unitp*(minx-1));
+    path cc[];
+    cc1=cercles(Tc[0],2.5mm);
+    Tc1=pointarc(cc1,75);
+    Tc4=pointarc(cc1,105);
+    Tc2=(xpart(Tc1),ypart(B+unitp*(0,0.75)));
+    Tc3=(xpart(Tc4),ypart(B+unitp*(0,0.75)));
+    Tc5=(xpart(Tc1),ypart(unitp*(0,valeur[1])));
+    Tc6=(xpart(Tc4),ypart(unitp*(0,valeur[1])));
+    path temp;
+    temp=Tc1--Tc5--Tc6--Tc4--arccercle(Tc4,Tc1,Tc0)--cycle;
+    if nbt>0:
+    fill temp withcolor ColMercure;
+    trace Tc5--Tc6;
+    fi;
+    trace arccercle(Tc4,Tc1,Tc0);
+    trace Tc1--Tc2--arccercle(Tc2,Tc3,iso(Tc2,Tc3))--Tc4;
+    enddef;
+
+    if Mercure:Thermo(1) else : Thermo(0) fi;
+    
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label.rt(LATEX(p_),unitp*(0,valeur[n]));
+    if p_<>"":
+    pointe(unitp*(0,valeur[n]));
+    fi;
+    endfor;
+    fi;
+    if AffichageCoord=3:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    drawarrow (unitp*(-1,valeur[n]))--(unitp*(-0.3,valeur[n]));
+    label.rt(\btex \hbox to2em{\dotfill} etex,(unitp*(-1,valeur[n])));
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=2:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.rt(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(0,valeur[n]));
+    else:
+    label.rt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(0,valeur[n]));
+    fi;
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=1:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    if Kelvin:
+    label.rt(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}{\kelvin}"),(5mm,unitp*valeur[n]));
+    elseif Farenheit:
+    label.rt(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}{\farenheit}"),(5mm,unitp*valeur[n]));
+    else:
+    label.rt(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}{\celsius}"),(5mm,unitp*valeur[n]));
+    fi;
+    pointe(unitp*(0,valeur[n]));
+    draw (unitp*(0,valeur[n]))--(7.5mm,unitp*valeur[n]) dashed evenly;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    %%%
+    tata(#2);
+  \end{mpost}
+  \fi
+}
+
+\def\MPNewDROITEGradueeMulti#1#2{%
+  % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+  % #2 : liste des noms des points
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    maxx:=0;
+    minx:=4000;
+    unitex:=\useKV[ClesReperage]{Unitex}*cm;
+    pasx:=\useKV[ClesReperage]{Pasx};
+    unitp:=unitex/pasx;%unit\'e de d\'eplacement
+    ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+    ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+    AffichageGrad:=\AffichageGrad;
+    AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+    AffichageNom:=\AffichageNom;
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    if minx<\useKV[ClesReperage]{ValeurMin}:
+    minx:=\useKV[ClesReperage]{ValeurMin};
+    fi;
+    if maxx>\useKV[ClesReperage]{ValeurMax}:
+    maxx:=\useKV[ClesReperage]{ValeurMax};
+    fi;
+%    % -----
+    pair A[],B[],C[];
+    for l=0 upto (\useKV[ClesReperage]{Etages}-1):
+    A[l]=(0,-l*cm);
+    B[l]=unitp*(maxx,0)+(0,-l*cm);
+    C[l]=unitp*(minx,0)+(0,-l*cm);
+    % On trace la demi-droite
+    drawarrow (C[l]+unitp*(-0.75,0))--(B[l]+unitp*(0.75,0));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C[l],B[l]);
+      draw marquesegment((k/maxx)[A[l],B[l]],((k+1)/maxx)[A[l],B[l]]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A[l],B[l]],((k+1)/maxx)[A[l],B[l]]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A[l],B[l]],((k+pasx)/maxx)[A[l],B[l]]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A[l],B[l]],((k-pasx)/maxx)[A[l],B[l]]);
+    endfor;
+    endfor;
+    % On trace les zoom
+    for k=0 upto (\useKV[ClesReperage]{Etages}-2):
+    lp:=floor(1+uniformdeviate(8));
+    draw (lp/10)[A[k],B[k]]--A[k+1] dashed evenly scaled 0.5 withcolor 0.5white;
+    draw ((lp+1)/10)[A[k],B[k]]--B[k+1] dashed evenly scaled 0.5 withcolor 0.5white;
+    endfor;
+    % Labelisation
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    label.top(TEX("\footnotesize\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
+    label.top(TEX("\footnotesize\num{"&decimal(ValeurOrigine)&"}"),A[0]);
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    fi;
+    endfor;
+    fi;
+    labeloffset:=labeloffset/2;
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label.top(TEX(p_),unitp*(valeur[n],0)+(0,(-\useKV[ClesReperage]{Etages}+1)*cm));
+    pointe(unitp*(valeur[n],0));
+    endfor;
+    fi;
+    if AffichageCoord=3:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    drawarrow (unitp*(valeur[n],-1)+(0,(-\useKV[ClesReperage]{Etages}+1)*cm))--(unitp*(valeur[n],-0.3)+(0,(-\useKV[ClesReperage]{Etages}+1)*cm));
+    label.bot(btex \hbox to4em{\dotfill} etex,(unitp*(valeur[n],-1))+(0,(-\useKV[ClesReperage]{Etages}+0.5)*cm));
+    %pointe(unitp*(valeur[n],0));
+    fi;
+    endfor;
+    fi;
+    enddef;
+    %%%
+    tata(#2);
+  \end{mplibcode}
+  \fi
+}
+
+% Pour construire les droite/demi-droite gradu\'ee
+\def\builddemidroitenew{%
+  \toklistepointdroite{}%
+  \toklistenompointdemidroite{}%
+  \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{}
+  \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}}
+  \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{}
+  \ifboolKV[ClesReperage]{Thermometre}{%
+    \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+    \xdef\Listedesvaleursaplacersurlademidroite{}%
+    \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+    % \Listedesvaleursaplacersurlademidroite%
+    \MPThermo{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+  }{%
+    \xdef\Listedesvaleursaplacersurlademidroite{}%
+    \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+    \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+    \MPTouteDROITEGraduee{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+  }%
+}%
+
+\NewDocumentCommand\Reperage{o m}{%
+  \useKVdefault[ClesReperage]%
+  \setKV[ClesReperage]{#1}%
+  \ifboolKV[ClesReperage]{Espace}{%
+    \setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}%
+    \ifboolKV[ClesReperage]{Sphere}{\setKV[ClesReperage]{EchelleEspace=75}}{}%
+    \setKV[ClesReperage]{#1}%
+    \setsepchar[*]{,*/}\ignoreemptyitems%
+    \readlist*\ListePointEspace{#2}%
+    \buildespace%
+  }{\ifboolKV[ClesReperage]{Plan}{%
+      \setsepchar[*]{,*/}\ignoreemptyitems%
+      \readlist*\ListePointRepere{#2}%
+      \buildreperenew%
+    }{%
+      \setsepchar[*]{,*/}\ignoreemptyitems%
+      \readlist*\ListePointDroite{#2}%
+      \builddemidroitenew%
+    }%
+  }%
+}%
+
+\NewDocumentCommand\ReperageMulti{o m}{%
+  \useKVdefault[ClesReperage]%
+  \setKV[ClesReperage]{#1}%
+  \setsepchar[*]{,*/}\ignoreemptyitems%
+  \readlist*\ListePointDroite{#2}%
+  \toklistepointdroite{}%
+  \toklistenompointdemidroite{}%
+  \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{}
+  \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}}
+  \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{}
+  \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+  \xdef\Listedesvaleursaplacersurlademidroite{}%
+  \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+  \MPNewDROITEGradueeMulti{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+  \setsepchar{,}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCReperage.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresentationGraphique.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresentationGraphique.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresentationGraphique.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,442 @@
+%%%
+% Diff\'erentes représentations graphiques
+%%%
+\setKVdefault[TraceG]{Grille=false,Graduations=false,PasGradX=1,PasGradY=1,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Epaisseur=1,Relie=false,RelieSegment=false,Marque=dot,Code=false,Vide=false,NbPointsCourbe=100}%
+\defKV[TraceG]{Traces=\setKV[TraceG]{Code}}%
+
+\newcommand\TraceGraphique[2][]{%
+  \useKVdefault[TraceG]%
+  \setKV[TraceG]{#1}%
+  \ifboolKV[TraceG]{Fonction}{%
+    \MPTraceFonction[#1]{#2}%
+  }{%
+    \setKV[TraceG]{Xmin=0,Ymin=0}
+    \setKV[TraceG]{#1}%
+    \readlist*\ListePointsPlaces{#2}%
+    \newtoks\toklistepoint%
+    \foreachitem\compteur\in\ListePointsPlaces{\expandafter\Updatetoks\compteur\nil}%
+    \MPPlacePoint[#1]{\the\toklistepoint}
+  }%
+}%
+
+\newcommand\MPPlacePoint[2][]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    xmin=\useKV[TraceG]{Xmin};
+    xmax=\useKV[TraceG]{Xmax};
+    ymin=\useKV[TraceG]{Ymin};
+    ymax=\useKV[TraceG]{Ymax};
+    pasx=\useKV[TraceG]{Xstep};
+    pasy=\useKV[TraceG]{Ystep};
+    x.u=1cm/\useKV[TraceG]{Xstep};
+    y.u=1cm/\useKV[TraceG]{Ystep};
+    grillex=\useKV[TraceG]{PasGrilleX};
+    grilley=\useKV[TraceG]{PasGrilleY};
+    pos=\useKV[TraceG]{LabelC};
+
+    marque_p:=str \useKV[TraceG]{Marque};
+    m_c:=m_c*2;
+    
+    color colorpoint,colortrace;
+    colorpoint=\useKV[TraceG]{CouleurPoint};
+    colortrace=\useKV[TraceG]{CouleurTrace};
+    boolean Grille;
+    Grille=\useKV[TraceG]{Grille};
+
+    boolean Graduations;
+    Graduations=\useKV[TraceG]{Graduations};
+
+    boolean Relie;
+    Relie=\useKV[TraceG]{Relie};
+
+    boolean RelieSegment;
+    RelieSegment=\useKV[TraceG]{RelieSegment};
+
+    boolean Invisible;
+    Invisible=\useKV[TraceG]{Invisible};
+    
+    pair Origine;
+    Origine=(0,0);
+    
+    if Grille:
+    drawoptions(withcolor 0.75white);
+    for k=0 step grillex until (xmax-xmin):
+    trace (k*x.u,ypart(Origine))--(x.u*k,y.u*(ymax-ymin));
+    endfor;
+    for k=0 step grilley until (ymax-ymin):
+    trace (xpart(Origine),k*y.u)--(x.u*(xmax-xmin),y.u*k);
+    endfor;
+    drawoptions();
+    fi;
+    
+    if Graduations:
+    for k=0 step grillex until (xmax-xmin):
+    trace ((0,-0.5mm)--(0,0.5mm)) shifted ((k*x.u,0) shifted Origine) withpen pencircle scaled1.25;
+    label.bot(TEX("\num{"&decimal(xmin+k)&"}"),(k*x.u,0) shifted Origine);
+    endfor;
+    label.ulft(TEX("\num{"&decimal(ymin)&"}"),(0,0) shifted Origine);
+    for k=grilley step grilley until (ymax-ymin):
+    trace ((-0.5mm,0)--(0.5mm,0)) shifted ((0,k*y.u) shifted Origine) withpen pencircle scaled1.25;
+    label.lft(TEX("\num{"&decimal(ymin+k)&"}"),(0,k*y.u) shifted Origine);
+    endfor;
+    fi;
+    drawoptions(withpen pencircle scaled1.5);
+    drawarrow Origine--(xpart(Origine),y.u*(ymax-ymin));
+    drawarrow Origine--((xmax-xmin)*x.u,ypart(Origine));
+    drawoptions();
+
+    % On relie éventuellement les points
+    if Relie:
+    pair N[];
+    nbpoint=0;
+    for p_=#2:
+    nbpoint:=nbpoint+1;
+    N[nbpoint]=(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin));
+    endfor;
+    draw N[1] for k=2 upto nbpoint:
+    ..N[k]
+    endfor withcolor colortrace;
+    fi;
+    if RelieSegment:
+    pair N[];
+    nbpoint=0;
+    for p_=#2:
+    nbpoint:=nbpoint+1;
+    N[nbpoint]=(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin));
+    endfor;
+    draw N[1] for k=2 upto nbpoint:
+    --N[k]
+    endfor withcolor colortrace;
+    fi;
+    
+    % On place les points
+    if Invisible=false:
+    drawoptions(withcolor colorpoint);
+    for p_=#2:
+    if marque_p="dot":
+    dotlabel("",(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin)));
+    elseif marque_p="croix":
+    pointe((x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin)));
+    fi;
+    endfor;
+    drawoptions();
+    fi;
+    %on labelise les axes
+    label.urt(btex \useKV[TraceG]{LabelX} etex,(x.u*(xmax-xmin),ypart(Origine)));
+    label.urt(btex \useKV[TraceG]{LabelY} etex,(xpart(Origine),y.u*(ymax-ymin)));
+  \end{mplibcode}
+  \else
+  \mpxcommands{%
+    \usepackage{ProfCollege}
+    \setKV[TraceG]{#1}
+  }
+  \begin{mpost}[mpsettings={xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};color colorpoint,colortrace;colorpoint=\useKV[TraceG]{CouleurPoint};colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};boolean Relie;Relie=\useKV[TraceG]{Relie};boolean RelieSegment;RelieSegment=\useKV[TraceG]{RelieSegment};boolean Invisible;Invisible=\useKV[TraceG]{Invisible};}]    
+    pair Origine;
+    Origine=(0,0);
+    
+    if Grille:
+    drawoptions(withcolor 0.75white);
+    for k=0 step grillex until (xmax-xmin):
+    trace (k*xu,ypart(Origine))--(xu*k,yu*(ymax-ymin));
+    endfor;
+    for k=0 step grilley until (ymax-ymin):
+    trace (xpart(Origine),k*yu)--(xu*(xmax-xmin),yu*k);
+    endfor;
+    drawoptions();
+    fi;
+    
+    if Graduations:
+    for k=0 step grillex until (xmax-xmin):
+    trace ((0,-0.5mm)--(0,0.5mm)) shifted ((k*xu,0) shifted Origine) withpen pencircle scaled1.25;
+    label.bot(LATEX("\num{"&decimal(xmin+k)&"}"),(k*xu,0) shifted Origine);
+    endfor;
+    label.ulft(LATEX("\num{"&decimal(ymin)&"}"),(0,0) shifted Origine);
+    for k=grilley step grilley until (ymax-ymin):
+    trace ((-0.5mm,0)--(0.5mm,0)) shifted ((0,k*yu) shifted Origine) withpen pencircle scaled1.25;
+    label.lft(LATEX("\num{"&decimal(ymin+k)&"}"),(0,k*yu) shifted Origine);
+    endfor;
+    fi;
+    drawoptions(withpen pencircle scaled1.5);
+    drawarrow Origine--(xpart(Origine),yu*(ymax-ymin));
+    drawarrow Origine--((xmax-xmin)*xu,ypart(Origine));
+    drawoptions();
+
+    % On relie éventuellement les points
+    if Relie:
+    pair N[];
+    nbpoint=0;
+    for p_=#2:
+    nbpoint:=nbpoint+1;
+    N[nbpoint]=(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin));
+    endfor;
+    draw N[1] for k=2 upto nbpoint:
+    ..N[k]
+    endfor withcolor colortrace;
+    fi;
+    if RelieSegment:
+    pair N[];
+    nbpoint=0;
+    for p_=#2:
+    nbpoint:=nbpoint+1;
+    N[nbpoint]=(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin));
+    endfor;
+    draw N[1] for k=2 upto nbpoint:
+    --N[k]
+    endfor withcolor colortrace;
+    fi;
+    
+    % On place les points
+    if Invisible=false:
+    drawoptions(withcolor colorpoint);
+    for p_=#2:
+    dotlabel("",(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin)));
+    endfor;
+    drawoptions();
+    fi;
+    %on labelise les axes
+    label.urt(btex \unexpanded{\useKV[TraceG]{LabelX}} etex,(xu*(xmax-xmin),ypart(Origine)));
+    label.urt(btex \unexpanded{\useKV[TraceG]{LabelY}} etex,(xpart(Origine),yu*(ymax-ymin)));
+  \end{mpost}
+  \fi
+}
+
+\newcommand\MPTraceFonction[2][]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    borneinf=\useKV[TraceG]{Bornea};
+    bornesup=\useKV[TraceG]{Borneb};
+    nbpointsCourbe:=\useKV[TraceG]{NbPointsCourbe};
+    xmin=\useKV[TraceG]{Xmin};
+    xmax=\useKV[TraceG]{Xmax};
+    ymin=\useKV[TraceG]{Ymin};
+    ymax=\useKV[TraceG]{Ymax};
+    pasx=\useKV[TraceG]{Xstep};
+    pasy=\useKV[TraceG]{Ystep};
+    x.u=1cm/\useKV[TraceG]{Xstep};
+    y.u=1cm/\useKV[TraceG]{Ystep};
+    grillex=\useKV[TraceG]{PasGrilleX};
+    grilley=\useKV[TraceG]{PasGrilleY};
+    gradx=\useKV[TraceG]{PasGradX};
+    grady=\useKV[TraceG]{PasGradY};
+    pos=\useKV[TraceG]{LabelC};
+    Epaisseur:=\useKV[TraceG]{Epaisseur};
+    
+    color colortrace;
+    colortrace=\useKV[TraceG]{CouleurTrace};
+    
+    pair Origine;
+    Origine=(xmin,ymin)+\useKV[TraceG]{Origine};
+
+    boolean Grille,Vide;
+    Grille=\useKV[TraceG]{Grille};
+    Vide=\useKV[TraceG]{Vide};
+
+    boolean Graduations;
+    Graduations=\useKV[TraceG]{Graduations};
+
+    vardef sin(expr t) = sind(c*t) enddef;
+
+    vardef cos(expr t) = cosd(c*t) enddef;
+    
+    vardef tan(expr t) = sin(t)/cos(t) enddef;
+    
+    vardef exp(expr t) = e**t enddef;
+    
+    vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef;
+    
+    vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef;
+    
+    vardef ln(expr t) = mlog(t)/256 enddef;
+    
+    vardef arcsin(expr x)=%Définition mathématique en radian
+    pi*angle((sqrt(1-x**2),x))/180
+    enddef;
+    
+    vardef arccos(expr x)=%Définition mathématique en radian
+    pi*angle((x,sqrt(1-x**2)))/180
+    enddef;
+
+    def enplace=
+    xscaled x.u yscaled y.u shifted (Origine*cm)
+    enddef;
+
+    vardef placepoint(expr q,r)=
+    (q,r) enplace
+    enddef;
+    
+    path Cb[];
+    
+    vardef courbe[](expr a,b,nb)(text texte)=
+    path Courbe;
+    for i:=0 upto nb :
+    x@[i]:=(a+i*(b-a)/nb);
+    x:=x@[i];
+    y@[i]:=texte;
+    endfor ;
+    Cb@:=(x at .0*x.u,y at .0*y.u)
+    for i:=1 upto nb :
+    ..(x@[i]*x.u,y@[i]*y.u)
+    endfor;
+    Cb@:=Cb@ shifted (Origine*cm);
+    Courbe=Cb@;
+    Courbe
+    enddef;
+
+    if Grille:
+    drawoptions(withcolor 0.75white);
+    for k=xpart(Origine) step grillex until xmax:
+    trace u*(k,ymin)--u*(k,ymax);
+    endfor;
+    for k=xpart(Origine) step -grillex until xmin:
+    trace u*(k,ymin)--u*(k,ymax);
+    endfor;
+    for k=ypart(Origine) step grilley until ymax:
+    trace u*(xmin,k)--u*(xmax,k);
+    endfor;
+    for k=ypart(Origine) step -grilley until ymin:
+    trace u*(xmin,k)--u*(xmax,k);
+    endfor;
+    drawoptions();
+    fi;
+    if Graduations:
+    for k=gradx step gradx until bornesup:%xmax*gradx/grillex:
+    dotlabel.bot(TEX("\num{"&decimal(k)&"}"),(k*x.u+xpart(Origine*cm),ypart(Origine*cm)));
+    endfor;
+    for k=-gradx step -gradx until borneinf:%xmin*gradx/grillex:
+    dotlabel.bot(TEX("\num{"&decimal(k)&"}"),(k*x.u+xpart(Origine*cm),ypart(Origine*cm)));
+    endfor;
+    for k=grady step grady until ymax*grady/grilley:
+    dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm)));
+    endfor;
+    for k=-grady step -grady until ymin*grady/grilley:
+    dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm)));
+    endfor;
+    fi;
+
+    drawoptions(withpen pencircle scaled(1));
+    drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0));
+    drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine)));
+    label.llft(btex 0 etex,u*Origine);
+    drawoptions();
+    if Vide:
+    else:
+    draw courbe1(borneinf,bornesup,nbpointsCourbe)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace;
+    % labelisation
+    numeric t;
+    t=pos*length Cb1;
+    pair PT,Tangente;
+    PT:=point (pos*length Cb1) of Cb1;
+    Tangente:=unitvector(direction t of Cb1);
+    label(TEX("\useKV[TraceG]{NomCourbe}") rotated angle(Tangente),PT+2mm*(Tangente rotated 90));
+    % fin labelisation
+    clip currentpicture to polygone(u*(xmin,ymin),u*(xmax,ymin),u*(xmax,ymax),u*(xmin,ymax));
+    label.rt(btex \useKV[TraceG]{LabelX} etex,u*(xmax,ypart(Origine)));
+    label.top(btex \useKV[TraceG]{LabelY} etex,u*(xpart(Origine),ymax));
+    if \useKV[TraceG]{Code}:
+    \useKV[TraceG]{Traces}
+    fi;
+    fi;
+  \end{mplibcode}
+  \else
+  \mpxcommands{%
+    \usepackage{ProfCollege}
+    \setKV[TraceG]{#1}
+  }
+  \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};nbpointsCourbe:=\useKV[TraceG]{NbPointsCourbe};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};Epaisseur=\useKV[TraceG]{Epaisseur}; color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille,Vide;Grille=\useKV[TraceG]{Grille};Vide=\useKV[TraceG]{Vide};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};
+    pair Origine;
+    Origine=(xmin,ymin)+\useKV[TraceG]{Origine};}]
+
+    vardef sin(expr t) = sind(c*t) enddef;
+
+    vardef cos(expr t) = cosd(c*t) enddef;
+    
+    vardef tan(expr t) = sin(t)/cos(t) enddef;
+   
+    vardef exp(expr t) = e**t enddef;
+   
+    vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef;
+    
+    vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef;
+    
+    vardef ln(expr t) = mlog(t)/256 enddef;
+    
+    vardef arcsin(expr x)=%Définition mathématique en radian
+    pi*angle((sqrt(1-x**2),x))/180
+    enddef;
+    
+    vardef arccos(expr x)=%Définition mathématique en radian
+    pi*angle((x,sqrt(1-x**2)))/180
+    enddef;
+    
+    path Cb[];
+    
+    vardef courbe[](expr a,b,nb)(text texte)=
+    path Courbe;
+    for i:=0 upto nb :
+    x@[i]:=(a+i*(b-a)/nb);
+    x:=x@[i];
+    y@[i]:=texte;
+    endfor ;
+    Cb@:=(x at .0*xu,y at .0*yu)
+    for i:=1 upto nb :
+    ..(x@[i]*xu,y@[i]*yu)
+    endfor;
+    Cb@:=Cb@ shifted (Origine*cm);
+    Courbe=Cb@;
+    Courbe
+    enddef;
+
+    if Grille:
+    drawoptions(withcolor 0.75white);
+    for k=xpart(Origine) step grillex until xmax:
+    trace u*(k,ymin)--u*(k,ymax);
+    endfor;
+    for k=xpart(Origine) step -grillex until xmin:
+    trace u*(k,ymin)--u*(k,ymax);
+    endfor;
+    for k=ypart(Origine) step grilley until ymax:
+    trace u*(xmin,k)--u*(xmax,k);
+    endfor;
+    for k=ypart(Origine) step -grilley until ymin:
+    trace u*(xmin,k)--u*(xmax,k);
+    endfor;
+    drawoptions();
+    fi;
+    if Graduations:
+    for k=1 upto xmax/grillex:
+    dotlabel.bot(LATEX("\num{"&decimal(k)&"}"),(k*xu+xpart(Origine*cm),ypart(Origine*cm)));
+    endfor;
+    for k=-1 downto xmin/grillex:
+    dotlabel.bot(LATEX("\num{"&decimal(k)&"}"),(k*xu+xpart(Origine*cm),ypart(Origine*cm)));
+    endfor;
+    for k=1 upto ymax/grilley:
+    dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*yu+ypart(Origine*cm)));
+    endfor;
+    for k=-1 downto ymin/grilley:
+    dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*yu+ypart(Origine*cm)));
+    endfor;
+    fi;
+    drawoptions(withpen pencircle scaled1.5);
+    drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0));
+    drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine)));
+    drawoptions();
+    if Vide:
+    else:
+    draw courbe1(borneinf,bornesup,nbpointsCourbe)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace;
+%    % labelisation
+    numeric t;
+    t=pos*length Cb1;
+    pair PT,Tangente;
+    PT:=point (pos*length Cb1) of Cb1;
+    Tangente:=unitvector(direction t of Cb1);
+    label(btex \noexpand\useKV[TraceG]{NomCourbe} etex rotated angle(Tangente),PT+2mm*(Tangente rotated 90));
+%    % fin labelisation
+    clip currentpicture to polygone(u*(xmin,ymin),u*(xmax,ymin),u*(xmax,ymax),u*(xmin,ymax));
+    label.rt(btex \useKV[TraceG]{LabelX} etex,u*(xmax,ypart(Origine)));
+    label.top(btex \useKV[TraceG]{LabelY} etex,u*(xpart(Origine),ymax));
+    fi;
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresentationGraphique.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterEntier.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterEntier.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterEntier.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,150 @@
+%%%
+% Représenter un entier
+%%%
+\setKVdefault[ClesREntier]{Echelle=1,Unite=false,Compact=false,Impression=false,ListeCouleurs={Tomato,LightSteelBlue,LightGreen,Cornsilk}}%
+
+\newcommand\RepresenterEntier[2][]{%
+  \useKVdefault[ClesREntier]%
+  \setKV[ClesREntier]{#1}%
+  \ifboolKV[ClesREntier]{Unite}{%
+    \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)}]
+      Echelle=\useKV[ClesREntier]{Echelle};
+      Initialisation(5,30,15,50*Echelle);
+      color A,B,C,D,E,F,G,H;
+      pointilles:="non";
+      trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1);
+    \end{Geometrie}
+  }{%
+    % On décompose le nombre
+    \StrLen{#2}[\LongueurNombreEntier]%
+    \xdef\FooListeEntier{}
+    \xintFor* ##1 in{\xintSeq{1}{\LongueurNombreEntier}}\do{%
+      \StrChar{#2}{##1}[\ChiffreAAjouter]
+      \xdef\FooListeEntier{\FooListeEntier \ChiffreAAjouter,}
+    }
+    \setsepchar{,}\ignoreemptyitems
+    \readlist*\ListeDesChiffres{\FooListeEntier}%
+    \xdef\ListeAvantCouleurs{\useKV[ClesREntier]{ListeCouleurs}}%
+    \readlist*\ListeCouleurEntier{\ListeAvantCouleurs}%
+    \xintifboolexpr{\LongueurNombreEntier==4}{%
+      \xdef\NombreMilliers{\ListeDesChiffres[1]}%
+      \xdef\NombreCentaines{\ListeDesChiffres[2]}%
+      \xdef\NombreDizaines{\ListeDesChiffres[3]}%
+      \xdef\NombreUnites{\ListeDesChiffres[4]}%
+    }{%
+      \xintifboolexpr{\LongueurNombreEntier==3}{%
+        \xdef\NombreMilliers{0}%
+        \xdef\NombreCentaines{\ListeDesChiffres[1]}%
+        \xdef\NombreDizaines{\ListeDesChiffres[2]}%
+        \xdef\NombreUnites{\ListeDesChiffres[3]}%
+      }{%
+        \xintifboolexpr{\LongueurNombreEntier==2}{%
+          \xdef\NombreMilliers{0}%
+          \xdef\NombreCentaines{0}%
+          \xdef\NombreDizaines{\ListeDesChiffres[1]}%
+          \xdef\NombreUnites{\ListeDesChiffres[2]}%
+        }{%
+          \xdef\NombreMilliers{0}%
+          \xdef\NombreCentaines{0}%
+          \xdef\NombreDizaines{0}%
+          \xdef\NombreUnites{\ListeDesChiffres[1]}%
+        }%
+      }%
+    }%
+    \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)},CoinHD={u*(20,20)}]
+      Echelle=\useKV[ClesREntier]{Echelle};
+      NM=\NombreMilliers;
+      NC=\NombreCentaines;
+      ND=\NombreDizaines;
+      NU=\NombreUnites;
+      color ColorEntier[];
+      ColorEntier1=\ListeCouleurEntier[1];
+      ColorEntier2=\ListeCouleurEntier[2];
+      ColorEntier3=\ListeCouleurEntier[3];
+      ColorEntier4=\ListeCouleurEntier[4];
+      boolean Compact,Print;
+      Compact=\useKV[ClesREntier]{Compact};
+      Print=\useKV[ClesREntier]{Impression};
+      Initialisation(5,30,15,50*Echelle);
+      color A,B,C,D,E,F,G,H;
+      picture TypePave[];
+      TypePave0=image(
+      trace Pave(A,B,C,D,E,F,G,H)(1,1,1);
+      currentpicture:=nullpicture;
+      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier1 fi;
+      for k=0 upto 10:
+      trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]);
+      endfor;
+      for k=0 upto 10:
+      trace chemin((k/10)[B,C],(k/10)[G,H],(k/10)[F,E]);
+      endfor;
+      for k=0 upto 10:
+      trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]);
+      endfor;
+      );
+      color A,B,C,D,E,F,G,H;
+      TypePave1=image(
+      trace Pave(A,B,C,D,E,F,G,H)(0.1,1,1);
+      currentpicture:=nullpicture;
+      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier2 fi;
+      trace chemin(C,H,E);
+      for k=0 upto 10:
+      trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]);
+      endfor;
+      for k=0 upto 10:
+      trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]);
+      endfor;
+      );
+      color A,B,C,D,E,F,G,H;
+      TypePave2=image(
+      trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,1);
+      currentpicture:=nullpicture;
+      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier3 fi;
+      trace chemin(C,H,E);
+      trace chemin(A,F,E);
+      trace chemin(B,G,F);
+      for k=0 upto 10:
+      trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]);
+      endfor;
+      );
+      color A,B,C,D,E,F,G,H;
+      TypePave3=image(
+      trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1);
+      currentpicture:=nullpicture;
+      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier4 fi;
+      trace chemin(C,H,E);
+      trace chemin(A,F,E);
+      trace chemin(A,B,C);
+      trace chemin(F,G,H);
+      trace chemin(B,G);
+      );
+      if Compact:
+      for k=0 upto (\NombreMilliers-1):
+      trace TypePave0 shifted ((Projette((k,0,0))-Projette((0,0,0))));
+      endfor;
+      for k=0 upto (\NombreCentaines-1):
+      trace TypePave1 shifted ((Projette((0.1*k,1.5,0))-Projette((0,0,0))));
+      endfor;
+      for k=0 upto (\NombreDizaines-1):
+      trace TypePave2 shifted ((Projette((0.1*k,3,0))-Projette((0,0,0))));
+      endfor;
+      for k=0 upto (\NombreUnites-1):
+      trace TypePave3 shifted ((Projette((0,3.6,0.1*k))-Projette((0,0,0))));
+      endfor;
+      else:
+      for k=0 upto (\NombreMilliers-1):
+      trace TypePave0 shifted ((Projette((0,1.1*(k-1),0))-Projette((0,0,0))));
+      endfor;
+      for k=0 upto (\NombreCentaines-1):
+      trace TypePave1 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(k-1),0))-Projette((0,0,0))));
+      endfor;
+      for k=0 upto (\NombreDizaines-1):
+      trace TypePave2 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(k-1),0))-Projette((0,0,0))));
+      endfor;
+      for k=0 upto (\NombreUnites-1):
+      trace TypePave3 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(\NombreDizaines-1),0.2*(k)))-Projette((0,0,0))));
+      endfor;
+      fi;
+    \end{Geometrie}
+  }
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterEntier.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,971 @@
+%%%
+% Fractions
+%%%
+\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{%
+  % #1 longueur du c\^ot\'e
+  % #2 partage sur le c\^ot\'e
+  % #3 num
+  % #4 d\'eno (attention : = #2^2)
+  % #5 couleur
+  \ifluatex
+   \mplibforcehmode
+   \begin{mplibcode}
+     nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+     
+     m:=#3 div #4;
+
+     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;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+     
+     m:=#3 div #4;
+
+     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
+ }
+
+ \def\MPFractionTriangleH#1#2#3#4#5#6{
+  % #1 longueur du c\^ot\'e
+  % #2 partage sur le c\^ot\'e
+  % #3 num
+  % #4 d\'eno (attention : = #2^2)
+  % #5 couleur
+  % #6 \'epaisseur
+  \ifluatex
+   \mplibforcehmode
+   \begin{mplibcode}
+          nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+     
+     m:=#3 div #4;
+
+     for l=1 upto (#3 mod #4):
+     drawoptions(withpen pencircle scaled #6);
+     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;
+     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}
+       nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+
+     diversite=floor(uniformdeviate(#2**2-#3-1));
+     
+     for k=(1+diversite) upto (#3+diversite):
+     drawoptions(withpen pencircle scaled #6);
+     trace hachurage(M[k],90,0.2,0) withcolor #5;
+     endfor;
+     drawoptions(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;
+     \end{mpost}
+   \fi
+ }
+
+\def\MPFractionRegulier#1#2#3#4#5{%
+  % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair O,A[],B[];
+    O=u*(0,0);
+    path cc,cd;
+    cc=cercles(O,#1);
+    for k=0 upto #2:
+    A[k]=pointarc(cc,k*(360/#2));
+    endfor;
+    cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor);
+    for k=0 upto #4-1:
+    B[k]=point(k*(#2/#4)) of cd;
+    endfor;
+    picture fondcolore;
+    fondcolore=image(
+    remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5;
+    clip currentpicture to cd;
+    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[];
+    O=u*(0,0);
+    path cc,cd;
+    cc=cercles(O,#1);
+    for k=0 upto #2:
+    A[k]=pointarc(cc,k*(360/#2));
+    endfor;
+    cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor);
+    for k=0 upto #4-1:
+    B[k]=point(k*(#2/#4)) of cd;
+    endfor;
+    picture fondcolore;
+    fondcolore=image(
+    remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5;
+    clip currentpicture to cd;
+    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, #6 épaisseur
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair O,A[],B[];
+    O=u*(0,0);
+    path cc,cd;
+    cc=cercles(O,#1);
+    for k=0 upto #2:
+    A[k]=pointarc(cc,k*(360/#2));
+    endfor;
+    cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor);
+    for k=0 upto #4-1:
+    B[k]=point(k*(#2/#4)) of cd;
+    endfor;
+    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);
+    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):
+    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}
+    pair O,A[],B[];
+    O=u*(0,0);
+    path cc,cd;
+    cc=cercles(O,#1);
+    for k=0 upto #2:
+    A[k]=pointarc(cc,k*(360/#2));
+    endfor;
+    cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor);
+    for k=0 upto #4-1:
+    B[k]=point(k*(#2/#4)) of cd;
+    endfor;
+    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);
+    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):
+    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
+}
+
+\def\MPFractionRectangle#1#2#3#4#5#6{%
+  % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair A,B,C,D,M[],N[],R[],S[];
+    A=(1,1);
+    B-A=(#1,0);
+    C-B=(0,#2);
+    D-C=A-B;
+    numeric parts;
+    parts=(#4 div #6);
+    for k=0 upto parts:
+    M[k]=(k/parts)[A,B];
+    N[k]=(k/parts)[D,C];
+    endfor;
+    if #6>1:
+    for k=0 upto #6:
+    R[k]=(k/#6)[A,D];
+    S[k]=(k/#6)[B,C];
+    endfor;
+    fi;
+    picture FondRectangle;
+    FondRectangle=image(%
+    draw polygone(A,B,C,D);
+    for k=1 upto (parts-1):
+    draw segment(M[k],N[k]);
+    endfor;
+    if #6>1:
+    for k=1 upto (#6-1):
+    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[];
+    A=(1,1);
+    B-A=(#1,0);
+    C-B=(0,#2);
+    D-C=A-B;
+    numeric parts;
+    parts=(#4 div #6);
+    for k=0 upto parts:
+    M[k]=(k/parts)[A,B];
+    N[k]=(k/parts)[D,C];
+    endfor;
+    if #6>1:
+    for k=0 upto #6:
+    R[k]=(k/#6)[A,D];
+    S[k]=(k/#6)[B,C];
+    endfor;
+    fi;
+    picture FondRectangle;
+    FondRectangle=image(%
+    draw polygone(A,B,C,D);
+    for k=1 upto (parts-1):
+    draw segment(M[k],N[k]);
+    endfor;
+    if #6>1:
+    for k=1 upto (#6-1):
+    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
+}
+
+\def\MPFractionRectangleH#1#2#3#4#5#6#7{%
+  % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair A,B,C,D,M[],N[],R[],S[];
+    A=(1,1);
+    B-A=(#1,0);
+    C-B=(0,#2);
+    D-C=A-B;
+    numeric parts;
+    parts=(#4 div #6);
+    for k=0 upto parts:
+    M[k]=(k/parts)[A,B];
+    N[k]=(k/parts)[D,C];
+    endfor;
+    if #6>1:
+    for k=0 upto #6:
+    R[k]=(k/#6)[A,D];
+    S[k]=(k/#6)[B,C];
+    endfor;
+    fi;
+    picture FondRectangle;
+    FondRectangle=image(%
+    draw polygone(A,B,C,D);
+    for k=1 upto (parts-1):
+    draw segment(M[k],N[k]);
+    endfor;
+    if #6>1:
+    for k=1 upto (#6-1):
+    draw segment(R[k],S[k]);
+    endfor;
+    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}
+    pair A,B,C,D,M[],N[],R[],S[];
+    A=(1,1);
+    B-A=(#1,0);
+    C-B=(0,#2);
+    D-C=A-B;
+    numeric parts;
+    parts=(#4 div #6);
+    for k=0 upto parts:
+    M[k]=(k/parts)[A,B];
+    N[k]=(k/parts)[D,C];
+    endfor;
+    if #6>1:
+    for k=0 upto #6:
+    R[k]=(k/#6)[A,D];
+    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);
+    draw polygone(A,B,C,D);
+    for k=1 upto (parts-1):
+    draw segment(M[k],N[k]);
+    endfor;
+    if #6>1:
+    for k=1 upto (#6-1):
+    draw segment(R[k],S[k]);
+    endfor;
+    drawoptions();
+    fi;
+  \end{mpost}
+  \fi
+}
+
+\def\MPFractionDisque#1#2#3#4{%
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair A,B[];
+    A=(0,0);
+    path cc;
+    cc=cercles(A,#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):
+    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]) shifted(l*(2*#1+1cm,0));
+    endfor;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    pair A,B[];
+    A=(0,0);
+    path cc;
+    cc=cercles(A,#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):
+    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]) shifted(l*(2*#1+1cm,0));
+    endfor;
+    endfor;
+  \end{mpost}
+  \fi
+}
+
+\def\MPFractionDisqueH#1#2#3#4#5{%
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair A,B[];
+    A=(0,0);
+    path cc;
+    cc=cercles(A,#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(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+    endfor;
+    fi;
+    drawoptions(withpen pencircle scaled#5);
+    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]) shifted(l*(2*#1+1cm,0));
+    endfor;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    pair A,B[];
+    A=(0,0);
+    path cc;
+    cc=cercles(A,#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(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+    endfor;
+    fi;
+    drawoptions(withpen pencircle scaled#5);
+    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]) shifted(l*(2*#1+1cm,0));
+    endfor;
+    endfor;
+  \end{mpost}
+  \fi
+}
+
+\def\MPFractionSegment#1#2#3#4{
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    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):
+    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] 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[];
+    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):
+    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] 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{%
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    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[#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) 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] 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[];
+    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[#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) 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] 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
+}
+
+\newcommand\Fraction[2][]{%
+  \useKVdefault[ClesFraction]%
+  \setKV[ClesFraction]{#1}%
+  \setsepchar[*]{/}%
+  \readlist*\ListeFraction{#2}%
+  \ifboolKV[ClesFraction]{Triangle}{%
+    \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+      \ifboolKV[ClesFraction]{Hachures}{%
+        \MPFractionTriangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
+      }{%
+        \MPFractionTriangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+      }%
+  }{%
+    \ifboolKV[ClesFraction]{Regulier}{%
+      \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+      \ifboolKV[ClesFraction]{Hachures}{%
+        \MPFractionRegulierH{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
+      }{%
+        \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+      }%
+    }{%
+      \ifboolKV[ClesFraction]{Segment}{%
+        \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+        \ifboolKV[ClesFraction]{Hachures}{%
+          \MPFractionSegmentH{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
+        }{%
+          \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+        }%
+      }{%
+        \ifboolKV[ClesFraction]{Rectangle}{%rectangle
+          \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+          \ifboolKV[ClesFraction]{Hachures}{%
+            \MPFractionRectangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}{\useKV[ClesFraction]{Epaisseur}}%
+          }{%
+            \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}%
+          }%
+        }{%disque
+          \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+          \ifboolKV[ClesFraction]{Hachures}{%
+            \MPFractionDisqueH{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% 
+          }{%
+            \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterFraction.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,104 @@
+%%%
+% Tableur
+%%%
+\setKVdefault[Tableur]{Colonnes=4,Largeur=30pt,LargeurUn=30pt,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false}%
+%Idee de P. Nuns
+\defKV[Tableur]{Couleur=\setKV[Tableur]{Selection}}%
+%
+
+%Bas\'e sur un code de Christian T\'ell\'ech\'ea.
+\newcount\cntlin%
+\newcount\cntcol%
+
+\makeatletter%
+\newtoks\t at b%
+\long\def\ifremain at lines#1\\#2\@nil{%
+  \csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}%
+\long\def\subst at eol#1\\#2\@nil{\addtot at b{#1\\}%
+  \ifremain at lines#2\\\@nil{\addtot at b&\subst at eol#2\@nil}{\addtot at b{#2\CodeAfter\xintifboolexpr{\useKV[Tableur]{Ligne}==0 || \useKV[Tableur]{Colonne}==0}{}{%
+        \tikz\node at (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}}) {\tiny$\blacksquare$};%
+      }%
+    \end{NiceTabular}}}}%
+\long\def\collectcp at body#1\end{\subst at eol#1\@nil\end}%
+
+\newcommand\addtot at b[1]{\t at b\expandafter{\the\t at b#1}}%
+\newcommand\edftot at b[1]{\edef\temp@{#1}\expandafter\addtot at b\expandafter{\temp@}}%
+
+\newlength\PfCLongInter%
+\newlength\PfCTableurLargeurUn%
+\newlength\PfCTableurLargeur%
+
+\RequirePackage{printlen}
+
+\newenvironment{Tableur}[1][]{%
+  \useKVdefault[Tableur]%
+  \setKV[Tableur]{#1}%
+  \setlength{\PfCTableurLargeurUn}{\fpeval{\useKV[Tableur]{LargeurUn}}pt}%
+  \setlength{\PfCTableurLargeur}{\fpeval{\useKV[Tableur]{Largeur}}pt}%
+  \ttfamily%
+  \newcolumntype{Y}{>{\centering\arraybackslash}m{\PfCTableurLargeurUn}}%
+  \newcolumntype{X}{>{\centering\arraybackslash}m{\PfCTableurLargeur}}%
+  \setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+2}\arrayrulewidth}%  
+  \ifboolKV[Tableur]{Bandeau}{%
+    \begin{NiceTabular}{p{\PfCTableurLargeur}p{10pt}p{50pt}p{\PfCLongInter}}
+      \Block[draw,l]{}{\useKV[Tableur]{Cellule}}&\Block[draw]{}{\scriptsize$\blacktriangledown$}&\Block{}{$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$}&\Block[draw]{}{\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$}\\
+    \end{NiceTabular}%
+    \nopagebreak%
+    \\%
+  }{}%
+  \cntlin\z@%
+  \t at b{%
+    \begin{NiceTabular}{%
+        >{%
+          \global\cntcol\z@\global\advance\cntlin\@ne%
+          \centering\arraybackslash%
+          \ifnum\cntlin>\@ne%
+          \ifboolKV[Tableur]{Selection}{%
+            \xintifboolexpr{\cntlin>\useKV[Tableur]{Ligne} && \cntlin<\fpeval{\useKV[Tableur]{Ligne}+\useKV[Tableur]{PasL}+1}}{\textcolor{white}{\number\numexpr\cntlin-1\relax}}{\number\numexpr\cntlin-1\relax}%
+          }{\number\numexpr\cntlin-1\relax}\fi}%
+        wc{20pt}Y*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{X}}[hvlines]%
+      \CodeBefore
+      % on colorie en gris toute la première ligne
+      \tikz\draw[fill=gray!15](row-1-|col-1) rectangle (row-2-|last);%
+      % on colorie en gris toute la première colonne
+      \tikz\draw[fill=gray!15](row-1-|col-1) rectangle (last-|col-2);%
+      %
+      \xintifboolexpr{\useKV[Tableur]{Ligne}==0 || \useKV[Tableur]{Colonne}==0}{}{%
+        \ifboolKV[Tableur]{Selection}{%
+          \xdef\PfCTabCouleur{\useKV[Tableur]{Couleur}}%
+          % on colorie les cellules sans les tracer
+          \tikz\draw[fill=\PfCTabCouleur!50](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});%
+          % on trace la première cellule qui a servi à sélectionner
+          \tikz\draw[line width=1.25pt,fill=\PfCTabCouleur!50](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+1});%
+          % on colorie la zone nécessaire sur la première ligne
+          \tikz\draw[fill=\PfCTabCouleur](row-1-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-2-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});%
+          % on colorie la zone nécessaire sur la première colonne
+          \tikz\draw[fill=\PfCTabCouleur](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-1) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-2);%
+        }{%
+          \tikz\draw[line width=1.25pt](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});%
+        }%
+      }%
+      \Body
+    %
+  }%
+  \loop%
+  \ifnum\cntcol<\useKV[Tableur]{Colonnes}%
+  \advance\cntcol\@ne%
+  \addtot at b{&}%
+  % modif by Pascal Nuns
+  \ifboolKV[Tableur]{Selection}{%
+    \ifnum\cntcol>\fpeval{\useKV[Tableur]{Colonne}-1}%
+    \ifnum\cntcol<\fpeval{\useKV[Tableur]{Colonne}+\useKV[Tableur]{PasC}}%
+    \edftot at b{{\noexpand\textcolor{white}{\noexpand\bfseries\@Alph{\the\cntcol}}}}%
+    \else%
+    \edftot at b{\@Alph{\the\cntcol}}%
+    \fi%
+    \else%
+    \edftot at b{\@Alph{\the\cntcol}}%
+    \fi%
+  }{\edftot at b{\@Alph{\the\cntcol}}}%
+  % fin de modif
+  \repeat%
+  \addtot at b{\\&}%
+  \collectcp at body}{\the\t at b}%
+\makeatother
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRepresenterTableur.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCReseauxSociaux.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCReseauxSociaux.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCReseauxSociaux.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,159 @@
+%%%
+% Twitter
+%%%
+\setKVdefault[Twitter]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Url=ViveLaTeX,EchelleLogo=0.035,Logo=DrStrange,Publie=false}
+
+\NewEnviron{Twitter}[1][]{%
+  \useKVdefault[Twitter]%
+  \setKV[Twitter]{#1}%
+  \xdef\EchelleLogo{\useKV[Twitter]{EchelleLogo}}%
+  \begin{tcolorbox}[%
+    enhanced,%
+    overlay unbroken and first={%
+      \node[anchor=west,xshift=3em,yshift=-2em] at (frame.north west) {\textbf{\useKV[Twitter]{Auteur}}~{\color{gray}@\ttfamily \useKV[Twitter]{Url} - \useKV[Twitter]{Date}}};
+      \node[anchor=center,xshift=1em+2mm,yshift=-2em] at (frame.north west) {\LogoTW{\useKV[Twitter]{Logo}}{\EchelleLogo}};
+      \node[xshift=-1em,yshift=-2em] at (frame.north east) {\color{gray}...};
+      \coordinate[yshift=1em] (A) at (frame.south west);
+      \coordinate[yshift=1em] (B) at (frame.south east);
+      \node[] (C1) at ($(A)!0.1!(B)$) {\faComment[regular]\ifboolKV[Twitter]{Publie}{~\fpeval{randint(1,10)}}{}};
+      \node[] (C2) at ($(A)!0.325!(B)$) {\faRetweet\ifboolKV[Twitter]{Publie}{~\fpeval{randint(1,10)}}{}};
+      \node[] (C3) at ($(A)!0.55!(B)$) {\faHeart[regular]\ifboolKV[Twitter]{Publie}{~\fpeval{randint(1,10)}}{}};
+      \node[] (C4) at ($(A)!0.775!(B)$) {\faShareSquare};
+    },
+    colback=white,
+    colframe=gray!15,
+    top=2em,
+    left=3em,
+    bottom=2em]
+    \vspace*{0.5em}\par
+    \BODY%
+  \end{tcolorbox}
+}
+
+%%%
+% Facebook
+%%%
+\setKVdefault[Facebook]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Heure=3:14,EchelleLogo=0.035,Logo=DrStrange,Publie=false}
+
+\NewEnviron{Facebook}[1][]{%
+  \useKVdefault[Facebook]%
+  \setKV[Facebook]{#1}%
+  \xdef\EchelleLogo{\useKV[Facebook]{EchelleLogo}}%
+  \begin{tcolorbox}[%
+    enhanced,%
+    overlay unbroken and first={%
+      \node[anchor=west,xshift=3em,yshift=-1em] at (frame.north west) {\textbf{\useKV[Facebook]{Auteur}}};
+      \node[anchor=west,xshift=3em,yshift=-2em] at (frame.north west) {\scriptsize\color{gray}\useKV[Facebook]{Date}, \useKV[Facebook]{Heure}};
+      \node[anchor=center,xshift=1em+2mm,yshift=-1.5em] at (frame.north west) {\LogoTW{\useKV[Facebook]{Logo}}{\EchelleLogo}};
+      \node[xshift=-1em,yshift=-1.5em] at (frame.north east) {\bfseries\color{gray}...};
+      \coordinate[yshift=1.15em] (A) at (frame.south west);
+      \coordinate[yshift=1.15em] (B) at (frame.south east);
+      \coordinate[xshift=0.5em,yshift=1.8em] (A1) at (frame.south west);
+      \coordinate[xshift=-0.5em,yshift=1.8em] (B1) at (frame.south east);
+      \coordinate[xshift=0.5em,yshift=0.5em] (A2) at (frame.south west);
+      \coordinate[xshift=-0.5em,yshift=0.5em] (B2) at (frame.south east);
+      \ifboolKV[Facebook]{Publie}{%
+        \coordinate[xshift=1em,yshift=1em] (A3) at (A1);
+        \draw[blue,fill=blue] (A3) circle (1.5mm);
+        \node[] at (A3) {\tiny\color{white}\faThumbsUp};
+        \node[anchor=west] at (A3) {~\scriptsize\fpeval{randint(1,150)}};
+        \node[anchor=east,xshift=-1em,yshift=1em] at (B1) {\scriptsize\fpeval{randint(2,20)} commentaires~\fpeval{randint(2,10)} partages};
+      }{}
+      \draw[gray] (A1)--(B1);
+      \draw[gray] (A2)--(B2);
+      \node[] (C1) at ($(A)!0.15!(B)$) {\footnotesize\faThumbsUp{}~\bfseries J'aime};
+      \node[] (C2) at ($(A)!0.5!(B)$) {\footnotesize\faComment*[regular]~\bfseries Commenter};     \node[] (C3) at ($(A)!0.85!(B)$) {\footnotesize\faShareSquare~\bfseries Partager};
+    },
+    colback=white,
+    colframe=gray!15,
+    top=2em,
+    left=3em,
+    bottom=4em]
+    %\vspace*{0.5em}\par
+    \BODY%
+  \end{tcolorbox}
+}
+
+%%%
+% Instagram
+%%%
+\setKVdefault[Instagram]{Largeur=0.95\linewidth,Auteur=Christophe,Expediteur=Pierre,Date=\today,Temps=34,Publie=false,Logo=DrStrange,LogoEx=tiger,EchelleLogo=0.035,Texte={}}
+
+\NewEnviron{Instagram}[1][]{%
+  \useKVdefault[Instagram]%
+  \setKV[Instagram]{#1}%
+  \xdef\EchelleLogo{\useKV[Instagram]{EchelleLogo}}%
+  \begin{tcolorbox}[%
+    enhanced,%
+    underlay unbroken and first={%
+      \node[anchor=west,xshift=3em,yshift=-1.5em] at (frame.north west) {\textbf{\useKV[Instagram]{Expediteur}}};
+      \node[anchor=center,xshift=1em+2mm,yshift=-1.5em] at (frame.north west) {\LogoTW{\useKV[Instagram]{LogoEx}}{\EchelleLogo}};
+      \node[xshift=-1em,yshift=-1.5em,rotate=90] at (frame.north east) {\bfseries\color{gray}...};
+      \coordinate[yshift=-3em] (HA) at (frame.north west);
+      \coordinate[yshift=-3em] (HB) at (frame.north east);
+      \draw[gray!15] (HA)--(HB);
+      \coordinate[yshift=7em] (BA) at (frame.south west);
+      \coordinate[yshift=7em] (BB) at (frame.south east);
+      \draw[gray!15] (BA)--(BB);
+      \coordinate[xshift=1em,yshift=6em] (A) at (frame.south west);
+      \node[anchor=west] at (A) {\bfseries\faHeart[regular]\quad\faComment[regular]\quad\faPaperPlane};
+      \coordinate[xshift=-1em,yshift=6em] (A1) at (frame.south east);
+      \node[anchor=east] at (A1) {\bfseries\faBookmark[regular]};
+      \coordinate[xshift=1em,yshift=5em] (B) at (frame.south west);
+      \node[anchor=west] at (B) {\footnotesize\bfseries\fpeval{randint(10,30)} J'aime};
+      \coordinate[xshift=1em,yshift=4em] (C) at (frame.south west);
+      \node[anchor=west] at (C) {\textbf{\useKV[Instagram]{Expediteur}}~\useKV[Instagram]{Texte}};
+      \node[anchor=center,xshift=2em,yshift=2.25em] at (frame.south west) {\LogoTW{\useKV[Instagram]{Logo}}{\EchelleLogo}};
+      \node[anchor=west,xshift=4em,yshift=2.25em] at (frame.south west) {\textcolor{gray!50}{Ajouter un commentaire\dots}};
+      \node[anchor=east,xshift=-1em,yshift=2.25em] at (frame.south east) {\textcolor{red}{\faHeart}\quad\textcolor{Gold}{\faHandSpock}\quad\textcolor{gray!50}{\faPlusCircle}};
+      \node[anchor=west,xshift=1em,yshift=0.5em] at (frame.south west) {\scriptsize\color{gray} Il y a \useKV[Instagram]{Temps} secondes};
+    },
+    colback=white,
+    colframe=gray!15,
+    top=3em,
+    left=3em,
+    bottom=7em]
+    \BODY%
+  \end{tcolorbox}
+}
+
+%%%
+% Snapchat
+%%%
+\setKVdefault[Snapchat]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Temps=34,Logo=DrStrange,EchelleLogo=0.035,Texte=Envoyer un Chat}
+
+\NewEnviron{Snapchat}[1][]{%
+  \useKVdefault[Snapchat]%
+  \setKV[Snapchat]{#1}%
+  \xdef\EchelleLogo{\useKV[Snapchat]{EchelleLogo}}%
+  \begin{tcolorbox}[%
+    enhanced,%
+    underlay unbroken and first={%
+      \node[anchor=west,xshift=3em,yshift=-1em] at (frame.north west) {\textbf{\useKV[Snapchat]{Auteur}}};
+      \node[anchor=west,xshift=3em,yshift=-2em] at (frame.north west) {\scriptsize\color{gray} il y a \useKV[Snapchat]{Temps}~min};
+      \node[anchor=center,xshift=1em+2mm,yshift=-1.5em] at (frame.north west) {\LogoTW{\useKV[Snapchat]{Logo}}{\EchelleLogo}};
+      \node[xshift=-1em,yshift=-1.5em,rotate=90] at (frame.north east) {\bfseries...};
+      \node[xshift=-3em,yshift=-1.5em] at (frame.north east) {\faBell[regular]};
+      \coordinate[xshift=2em,yshift=2em] (P1) at (frame.south west);
+      \coordinate[xshift=4.5em,yshift=2em] (P2) at (frame.south west);
+      \coordinate[xshift=-3em,yshift=2em] (P4) at (frame.south west);
+      \coordinate[xshift=-2em,yshift=2em] (P3) at (frame.south east);
+      \coordinate[xshift=4.5em,yshift=1em] (P5) at (frame.south west);
+      \coordinate[xshift=4.5em,yshift=3em] (P8) at (frame.south west);
+      \coordinate[xshift=-4.5em,yshift=1em] (P6) at (frame.south east);
+      \coordinate[xshift=-4.5em,yshift=3em] (P7) at (frame.south east);
+      \draw (P1) circle (1em);
+      \node at (P1) {\faCamera};
+      \draw (P3) circle (1em);
+      \node[xshift=-0.125em,rotate=-45] at (P3) {\faLocationArrow};
+      \node[anchor=west,inner sep=0pt] at (P2) {\useKV[Snapchat]{Texte}};
+      \draw (P5) -- (P6) arc(270:450:1em) -- (P7) -- (P8) arc(90:270:1em) -- cycle;
+    },
+    colback=white,
+    colframe=gray!15,
+    top=3em,
+    left=3em,
+    bottom=3em]
+    \BODY%
+  \end{tcolorbox}
+}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCReseauxSociaux.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,286 @@
+%%%
+% Equations
+%%%
+\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Decimal=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false}
+
+\newcommand\rightcomment[4]{%
+  \begin{tikzpicture}[remember picture,overlay]
+    \draw[Cfleches,-stealth]
+    ($({pic cs:#3}|-{pic cs:#1})+(\useKV[ClesEquation]{Ecart},0)$)
+    .. controls +(0.2,-0.05) and +(0.2,0.1) ..
+    node[right,align=left]{#4}
+    ($({pic cs:#3}|-{pic cs:#2})+(\useKV[ClesEquation]{Ecart},0.1)$);
+  \end{tikzpicture}%
+}%
+
+\newcommand\leftcomment[4]{%
+  \begin{tikzpicture}[remember picture,overlay]
+    \draw[Cfleches,-stealth]
+    ($({pic cs:#3}|-{pic cs:#1})-(\useKV[ClesEquation]{Ecart},0)$)
+    .. controls +(-0.2,-0.05) and +(-0.2,0.1) ..
+    node[left,align=right]{#4}
+    ($({pic cs:#3}|-{pic cs:#2})-(\useKV[ClesEquation]{Ecart},-0.1)$);
+  \end{tikzpicture}%
+}%
+
+\newcommand\Rightcomment[4]{%
+  \begin{tikzpicture}[remember picture,overlay]
+    \draw[Cfleches,-stealth]
+    ($({pic cs:#3}|-{pic cs:#1})+(\useKV[ClesEquation]{Ecart},0)$)
+    .. controls +(0.2,-0.05) and +(0.2,0.1) ..
+    node[right,align=left]{#4}
+    ($({pic cs:#3}|-{pic cs:#2})+(\useKV[ClesEquation]{Ecart},0.1)$);
+  \end{tikzpicture}%
+}%
+\newcommand\Leftcomment[4]{%
+  \begin{tikzpicture}[remember picture,overlay]
+    \draw[Cfleches,-stealth]
+    ($({pic cs:#3}|-{pic cs:#1})-(\useKV[ClesEquation]{Ecart},0)$)
+    .. controls +(-0.2,-0.05) and +(-0.2,0.1) ..
+    node[left,align=right]{#4}
+    ($({pic cs:#3}|-{pic cs:#2})-(\useKV[ClesEquation]{Ecart},-0.1)$);
+  \end{tikzpicture}%
+}%
+
+% Pour "oublier" les tikzmarks. En cas de plusieurs utilisations de la macro \ResolEquation
+\newcounter{Nbequa}
+\setcounter{Nbequa}{0}
+
+%CT
+\newdimen\fdashwidth    \fdashwidth  = 0.8pt % \'epaisseur traits
+\newdimen\fdashlength   \fdashlength = 0.5mm % longueur des pointill\'es et s\'eparation entre pointill\'es
+\newdimen\fdashsep      \fdashsep    = 3pt % s\'eparateur entre contenu et traits
+
+\def\fdash#1{%
+  \leavevmode\begingroup%
+  \setbox0\hbox{#1}%
+  \def\hdash{\vrule height\fdashwidth width\fdashlength\relax}%
+  \def\vdash{\hrule height\fdashlength width\fdashwidth\relax}%
+  \def\dashblank{\kern\fdashlength}%
+  \ifdim\fdashsep>0pt
+  \setbox0\hbox{\vrule width0pt height\dimexpr\ht0+\fdashsep depth\dimexpr\dp0+\fdashsep\kern\fdashsep\unhbox0 \kern\fdashsep}%
+  \fi
+  \edef\hdash{\hbox to\the\wd0{\noexpand\color{Csymbole}\hdash\kern.5\fdashlength\xleaders\hbox{\hdash\dashblank}\hfil\hdash}}%
+  \edef\vdash{\vbox to\the\dimexpr\ht0+\dp0+2\fdashwidth{\noexpand\color{Csymbole}\vdash\kern.5\fdashlength\xleaders\vbox{\vdash\dashblank}\vfil\vdash}}%
+  \hbox{%
+    \vdash
+    \vtop{\vbox{\offinterlineskip\hdash\hbox{\unhbox0 }\hdash}}%
+    \vdash}%
+  \endgroup
+}
+% fin CT
+\def\Fdash#1{\raisebox{-2\fdashsep+\fdashwidth}{\fdash{#1}}}
+
+%Une simplification de a/b est possible ou non ?
+\newboolean{Simplification}
+
+\newcommand\SSimpliTest[2]{%
+  % Test d'une simplification possible ou pas de #1/#2
+  \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno%
+  \numerateur=\number#1
+  \denominateur=\number#2
+  \ifnum\number#1<0
+  \valabsnum=\numexpr0-\number#1
+  \else
+  \valabsnum=\number#1
+  \fi
+  \ifnum\number#2<0
+  \valabsdeno=\numexpr0-\number#2
+  \else
+  \valabsdeno=\number#2
+  \fi
+  \ifnum\the\valabsnum=0
+    \setboolean{Simplification}{true}
+  \else
+    \PGCD{\the\valabsnum}{\the\valabsdeno}
+    \ifnum\pgcd>1
+      \setboolean{Simplification}{true}
+    \else
+      \ifnum\the\numerateur<0
+        \ifnum\the\denominateur<0
+          \setboolean{Simplification}{true}
+        \else
+          \ifnum\valabsdeno=1\relax
+            \setboolean{Simplification}{true}
+          \else
+          \setboolean{Simplification}{false}
+          \fi
+        \fi
+      \else
+        \ifnum\valabsdeno=1\relax
+          \setboolean{Simplification}{true}
+        \else
+          \setboolean{Simplification}{false}
+        \fi
+      \fi
+    \fi
+  \fi
+}
+
+\definecolor{Cfleches}{RGB}{100,100,100}%
+
+\newcommand\AffichageEqua[4]{%
+  \def\LETTRE{\useKV[ClesEquation]{Lettre}}%
+  \ensuremath{%
+    % partie du x
+    \xintifboolexpr{#1==0}{}{\xintifboolexpr{#1==1}{}{\xintifboolexpr{#1==-1}{-}{\num{#1}}}\LETTRE}%
+    % partie du nombre
+    \xintifboolexpr{#2==0}{\xintifboolexpr{#1==0}{0}{}}{\xintifboolexpr{#2>0}{\xintifboolexpr{#1==0}{}{+}\num{#2}}{\num{#2}}}%
+    % egal
+    =
+    % partie du x
+    \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3==1}{}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}\LETTRE}%
+    % partie du nombre
+    \xintifboolexpr{#4==0}{%
+      \xintifboolexpr{#3==0}{0}{}
+    }{%
+      \xintifboolexpr{#4>0}{\xintifboolexpr{#3==0}{}{+}\num{#4}}{\num{#4}}%
+    }
+  }%
+}%
+
+\newcommand\EcrireSolutionEquation[4]{%
+  L'équation \AffichageEqua{#1}{#2}{#3}{#4} a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+}%
+
+\input{PfCEquationSoustraction2}%
+\input{PfCEquationTerme1}%
+\input{PfCEquationComposition2}%
+\input{PfCEquationPose1}%
+\input{PfCEquationSymbole1}%
+\input{PfCEquationLaurent1}
+
+\newcommand\ResolEquation[5][]{%
+  \useKVdefault[ClesEquation]%
+  \setKV[ClesEquation]{#1}%
+  \colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}%
+  \colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}%
+  \colorlet{Csymbole}{\useKV[ClesEquation]{CouleurSymbole}}%
+  \colorlet{Cdecomp}{\useKV[ClesEquation]{CouleurSous}}%
+  \ifboolKV[ClesEquation]{Carre}{%
+    \ResolEquationCarre[#1]{#2}%
+  }{%
+    \ifboolKV[ClesEquation]{Produit}{%
+      \ResolEquationProduit[#1]{#2}{#3}{#4}{#5}%
+    }{%
+      \ifboolKV[ClesEquation]{Verification}{%
+        \Verification[#1]{#2}{#3}{#4}{#5}%
+      }{%
+        \ifboolKV[ClesEquation]{Symbole}{%
+          \ResolEquationSymbole[#1]{#2}{#3}{#4}{#5}%
+        }{%
+          \ifboolKV[ClesEquation]{Laurent}{%
+            \ResolEquationLaurent[#1]{#2}{#3}{#4}{#5}%
+          }{%
+            \ifboolKV[ClesEquation]{Terme}{%
+              \ResolEquationTerme[#1]{#2}{#3}{#4}{#5}%
+            }{\ifboolKV[ClesEquation]{Composition}{%
+                \ResolEquationComposition[#1]{#2}{#3}{#4}{#5}%
+              }{\ifboolKV[ClesEquation]{Pose}{%
+                  \ResolEquationL[#1]{#2}{#3}{#4}{#5}%
+                }{%
+                  \ResolEquationSoustraction[#1]{#2}{#3}{#4}{#5}%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\ResolEquationCarre[2][]{%
+  \setKV[ClesEquation]{#1}%
+  \xintifboolexpr{#2<0}{%
+    Comme $\num{#2}$ est n\'egatif, alors l'\'equation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ n'a aucune solution.%
+  }{\xintifboolexpr{#2==0}{%
+      L'\'equation $\useKV[ClesEquation]{Lettre}^2=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.%
+    }{%
+      Comme \num{#2} est positif, alors l'\'equation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ a deux solutions :%
+      \begin{align*}
+        \useKV[ClesEquation]{Lettre}&=\sqrt{\num{#2}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\sqrt{\num{#2}}%\\
+        \ifboolKV[ClesEquation]{Exact}{\\%
+        \useKV[ClesEquation]{Lettre}&=\num{\fpeval{sqrt(#2)}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\num{\fpeval{sqrt(#2)}}}{}%
+      \end{align*}
+    }%
+  }%
+}%
+
+\newcommand\ResolEquationProduit[5][]{%
+  \setKV[ClesEquation]{#1}%
+  \ifboolKV[ClesEquation]{Equivalence}{}{C'est un produit nul donc \ifboolKV[ClesEquation]{Facteurs}{l'un au
+      moins des facteurs est nul}{} :}%
+  \ifboolKV[ClesEquation]{Equivalence}{%
+          \[\Distri{#2}{#3}{#4}{#5}=0\]
+    \begin{align*}%
+      &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&\quad&\makebox[0pt]{ou}\quad&\xintifboolexpr{#5==0}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
+      &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3==0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5==0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc==1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
+      \xintifboolexpr{\Coeffa==1 'and' \Coeffc==1}{}{\\%\ifnum\cmtd>1
+      &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{\Coeffa==1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc==1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
+      % accolade%\\
+      %%%% 
+      \ifboolKV[ClesEquation]{Entier}{%
+      \xdef\TSimp{}%
+      \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3==0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
+      \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5==0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
+      \xintifboolexpr{\TSimp==0}{}{\\
+      \ifboolKV[ClesEquation]{Simplification}{%
+      &\makebox[0pt]{$\Longleftrightarrow$}&\SSimpliTest{\Coeffb}{\Coeffa}\xintifboolexpr{\Coeffa==1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
+      }
+      }{}
+      &&&\ifboolKV[ClesEquation]{Simplification}{%
+      \SSimpliTest{\Coeffd}{\Coeffc}%
+          \xintifboolexpr{\Coeffc==1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
+      }
+      }{}
+      }
+      }{}
+      }
+    \end{align*}
+  }{%
+    \begin{align*}
+    \xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&&\text{ou}&\xintifboolexpr{#5==0}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
+    \xintifboolexpr{#3==0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5==0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc==1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
+      \xintifboolexpr{\Coeffa==1 'and' \Coeffc==1}{}{\\%\ifnum\cmtd>1
+      \xintifboolexpr{\Coeffa==1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc==1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
+       %accolade%\\
+      %%%%   
+      \ifboolKV[ClesEquation]{Entier}{%
+      \xdef\TSimp{}
+      \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3==0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
+      \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5==0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
+      \xintifboolexpr{\TSimp==0}{}{\\
+      \ifboolKV[ClesEquation]{Simplification}{%
+      \SSimpliTest{\Coeffb}{\Coeffa}
+      \xintifboolexpr{\Coeffa==1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
+      }
+      }{}
+      &&&\ifboolKV[ClesEquation]{Simplification}{%
+      \SSimpliTest{\Coeffd}{\Coeffc}%
+          \xintifboolexpr{\Coeffc==1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
+      }
+      }{}
+      }
+      }{}
+      }
+    \end{align*}
+  }%
+  \ifboolKV[ClesEquation]{Solution}{L'\'equation $\xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5==0}{\times\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$.
+  }{}%
+}
+
+\newcommand\Verification[5][]{%
+  \setKV[ClesEquation]{#1}%
+  \xdef\ValeurTest{\useKV[ClesEquation]{Nombre}}%
+  Testons la valeur $\useKV[ClesEquation]{Lettre}=\num{\ValeurTest}$ :%
+  \begin{align*}
+    \xintifboolexpr{#2==0}{\num{#3}}{\num{#2}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4==0}{\num{#5}}{\num{#4}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
+    \xintifboolexpr{#2==0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4==0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
+    \xintifboolexpr{#2==0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}}&&\xintifboolexpr{#4==0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}}
+  \end{align*}
+  \xdef\Testa{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}\xdef\Testb{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}%
+  \ifboolKV[ClesEquation]{Egalite}{%
+    Comme \xintifboolexpr{\Testa==\Testb}{$\num{\Testa}=\num{\Testb}$}{$\num{\Testa}\not=\num{\Testb}$}, alors l'\'egalit\'e $\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4==0}{\num{#5}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$ \xintifboolexpr{\Testa==\Testb}{ est v\'erifi\'ee }{ n'est pas v\'erifi\'ee } pour $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$.%
+  }{\xintifboolexpr{\Testa==\Testb}{Comme $\num{\Testa}=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ est bien }{Comme $\num{\Testa}\not=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ n'est pas }une solution de l'\'equation $\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4==0}{\num{#5}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$.}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCResoudreEquation.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRondeInfernale.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRondeInfernale.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRondeInfernale.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,466 @@
+%%%
+% Ronde infernale
+%%%
+\newcommand\TestNombrePremier[1]{%
+  % #1 le nombre \`a tester
+  \newcount\anp\newcount\bnp\newcount\cnp%
+  \anp=#1\relax
+  \bnp=2\relax
+  \premier=-1\relax
+  \whiledo{\anp > 1}{%
+    \modulo{\the\anp}{\the\bnp}
+    \ifnum\remainder=0\relax%
+      \global\premier=\numexpr\premier+1\relax%
+      \cnp=\numexpr\anp/\bnp\relax%
+      \anp=\cnp\relax%
+    \else%
+      \bnp=\numexpr\bnp+1\relax%
+    \fi%
+  }%
+}%
+
+\newcommand\PfCRIListeDiviseur[1]{%#1 : nombre entier
+  \newcount\anp\newcount\bnp%
+  \anp=\fpeval{abs(#1)}%
+  \bnp=2\relax%
+  \xdef\PfCRIRetiensListeDiviseurs{}%
+  \ifnum#1=0%
+  \xdef\PfCRIRetiensListeDiviseurs{\fpeval{randint(2,5)},\fpeval{randint(6,9)}}%
+  \else
+  \whiledo{\bnp<\anp}{%
+    \modulo{\the\anp}{\the\bnp}{}%
+    \ifnum\remainder=0%
+    \ifnum#1>0
+    \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,}%
+    \else
+    \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,-\the\bnp,}%
+    \fi
+    \fi%
+    \bnp=\numexpr\bnp+1%
+  }%
+  \ifnum#1>0
+  \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,1}
+  \else
+  \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,-\the\anp}
+  \fi
+  \fi
+}
+
+\setKVdefault[RondeInfernale]{Solution=false,Relatifs=false,Etapes=4,Perso=false,Cles=false,Vide,Rayon=2.5cm,Graines=false,Rectangle=false}%
+\defKV[RondeInfernale]{Graine=\setKV[RondeInfernale]{Graines}}%
+\defKV[RondeInfernale]{Cle=\setKV[RondeInfernale]{Cles}\setKV[RondeInfernale]{Vide=false}}%
+\defKV[RondeInfernale]{ListeOperations=\setKV[RondeInfernale]{Perso}}%
+\defKV[RondeInfernale]{ListeNombres=\setKV[RondeInfernale]{Perso}}%
+% 
+\NewDocumentCommand\RondeInfernale{o}{%
+  \useKVdefault[RondeInfernale]%
+  \setKV[RondeInfernale]{#1}%
+  % Graine
+  \ifboolKV[RondeInfernale]{Graines}{\PfCGraineAlea{\useKV[RondeInfernale]{Graine}}}{}%
+  % Nombre clé
+  \ifboolKV[RondeInfernale]{Cles}{%
+    \xdef\PfCRINombreCle{\useKV[RondeInfernale]{Cle}}%
+  }{%
+    \ifboolKV[RondeInfernale]{Relatifs}{%
+      \xdef\PfCRIListeNegatifs{-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10}
+      \MelangeListe{\PfCRIListeNegatifs}{1}
+      \readlist*\PfCRIListeCle{\faa}
+      \xdef\PfCRINombreCle{\PfCRIListeCle[1]}%
+    }{%
+      \xdef\PfCRINombreCle{\fpeval{randint(2,9)}}%
+    }%
+  }%
+  \ifboolKV[RondeInfernale]{Perso}{%
+    \xdef\PfCRIRecupOperations{\useKV[RondeInfernale]{ListeOperations}}%
+    \xdef\PfCRIRecupNombres{\useKV[RondeInfernale]{ListeNombres}}%
+  }{%
+    % On définit les éléments nécessaires
+    \xdef\PfCRIListeToutesOperations{+,-,*,/}%
+    \xdef\PfCRIListeOperationsSansDiv{+,-,*}%
+    \xdef\PfCRIListeOperationsSansMul{+,-,/}%
+    \xdef\PfCRIListeOperationsSimple{+,-}%
+    \xdef\PfCRIRecupOperations{}%
+    \xdef\PfCRIRecupNombres{}%
+    \xdef\PfCRIRecupResultats{}%
+    \xdef\PfCRINombreATester{\PfCRINombreCle}%
+    \xdef\PfCRIRetiensNbEtapes{\useKV[RondeInfernale]{Etapes}}%
+    \setsepchar{,}\ignoreemptyitems%
+    % Liste des opérations jusqu'à l'étape n-1
+    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[RondeInfernale]{Etapes}-1}}}\do{%
+      \TestNombrePremier{\PfCRINombreATester}\relax%
+      \xintifboolexpr{\premier==0}{%
+        % Définition des opérations
+        \MelangeListe{\PfCRIListeOperationsSansDiv}{1}%
+        \readlist*\PfCRIRetiensLoperation{\faa}%
+        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+        \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
+        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
+        \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
+        \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
+        \xdef\PfCRINombreATester{\PfCRIResultat}%
+      }{%
+        \MelangeListe{\PfCRIListeToutesOperations}{1}%
+        \readlist*\PfCRIRetiensLoperation{\faa}%
+        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+        \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
+          \PfCRIListeDiviseur{\PfCRINombreATester}%
+          \MelangeListe{\PfCRIRetiensListeDiviseurs}{1}%
+          \readlist*\PfCRIRetiensLeDiviseur{\faa}%
+          \xdef\PfCRIOperateur{\PfCRIRetiensLeDiviseur[1]}%
+        }{%
+          \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
+        }%
+        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
+        \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
+        \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
+        \xdef\PfCRINombreATester{\PfCRIResultat}%
+      }%
+    }%
+    % Dernière opération
+    \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}>0}{%
+      \modulo{\PfCRINombreATester}{\PfCRINombreCle}{}%
+      \xintifboolexpr{\remainder==0}{%
+        \MelangeListe{\PfCRIListeOperationsSansMul}{1}%
+        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+        \ignoreemptyitems%
+        \readlist*\PfCRIRetiensLoperation{\faa}%
+        \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
+          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester/\PfCRINombreCle}}%
+        }{%
+          \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
+            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
+          }{%
+            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
+          }%
+        }%
+        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
+      }{%
+        \MelangeListe{\PfCRIListeOperationsSimple}{1}%
+        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+        \ignoreemptyitems%
+        \readlist*\PfCRIRetiensLoperation{\faa}%
+        \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
+          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
+        }{%
+          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
+        }%
+        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
+      }%
+    }{%
+      \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}==0}{%
+        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations *}%
+        \ignoreemptyitems%
+        \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
+        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres 1}%
+      }{%
+        \xintifboolexpr{\PfCRINombreATester==0}{%
+          \MelangeListe{\PfCRIListeOperationsSimple}{1}%
+          \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+          \ignoreemptyitems%
+          \readlist*\PfCRIRetiensLoperation{\faa}%
+          \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
+            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
+          }{%
+            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
+          }%
+          \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
+        }{%
+          \modulo{\PfCRINombreCle}{\PfCRINombreATester}{}%
+          \xintifboolexpr{\remainder==0}{%-1
+            \MelangeListe{\PfCRIListeToutesOperations}{1}%
+            \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+            \readlist*\PfCRIRetiensLoperation{\faa}%
+            \ignoreemptyitems%
+            \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
+            \IfStrEq{\PfCRIRetiensLoperation[1]}{*}{%
+              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle/\PfCRINombreATester}}%
+              \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
+            }{
+              \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
+                \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
+              }{%
+                \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
+              }%
+              \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
+            }%
+          }{%
+            \MelangeListe{\PfCRIListeOperationsSimple}{1}%
+            \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
+            \ignoreemptyitems%
+            \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
+            \IfStrEq{\PfCRIRIListeOperations[\PfCRIRetiensNbEtapes]}{-}{%
+              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
+            }{%
+              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
+            }%
+            \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
+          }%
+        }%
+      }%
+    }%
+  }%
+  \ignoreemptyitems%
+  \readlist*\PfCRIRIOperations{\PfCRIRecupOperations}%
+  \readlist*\PfCRIRINombres{\PfCRIRecupNombres}%
+  \reademptyitems%
+  % On prépare le dessin
+  \xdef\PfCRINombresDessin{}%
+  \xdef\PfCRIOperationsDessin{}%
+  \foreachitem\compteur\in\PfCRIRINombres{%
+    \xintifboolexpr{\PfCRIRINombres[\compteurcnt]<0}{%
+      \xdef\PfCRINombresDessin{\PfCRINombresDessin "(\num{\PfCRIRINombres[\compteurcnt]})",}%
+    }{%
+      \xdef\PfCRINombresDessin{\PfCRINombresDessin "\num{\PfCRIRINombres[\compteurcnt]}",}%
+    }%
+  }%
+  \foreachitem\compteur\in\PfCRIRIOperations{%
+    \xdef\PfCRIOperationsDessin{\PfCRIOperationsDessin "\PfCRIRIOperations[\compteurcnt]",}%
+  }%
+  % On dessine
+  \BuildRondeInfernale{\PfCRINombresDessin}{\PfCRIOperationsDessin}%
+}%
+
+\NewDocumentCommand\BuildRondeInfernale{m m}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean Vide,Rectangle,Perso;
+    Vide=\useKV[RondeInfernale]{Vide};
+    Rectangle=\useKV[RondeInfernale]{Rectangle};
+    Perso=\useKV[RondeInfernale]{Perso};
+    if Perso:
+    string Depart;
+    Depart=\useKV[RondeInfernale]{Cle};
+    else:
+    numeric Depart;
+    Depart=\PfCRINombreCle;
+    fi;
+
+    numeric Rayon;
+    Rayon=\useKV[RondeInfernale]{Rayon};
+
+    string Nombre[];
+    
+    vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
+    nbcase:=0;
+    for p_=t:
+    nbcase:=nbcase+1;
+    Nombre[nbcase]=p_;
+    endfor;
+    enddef;
+
+    vardef AfficheRonde(text t)=%On fait l'affichage des opérations
+    n:=0;
+    for k=1 upto nbcase:
+    fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
+    endfor;
+    for p_=t:
+    n:=n+1;
+    if p_="*":
+    label(TEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
+    elseif p_="/":
+    label(TEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
+    else:
+    label(TEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
+        fi;
+    endfor;
+    enddef;
+
+    vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if n=nbcase:
+    if p_="*":
+    label.bot(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
+    elseif p_="/":
+    label.bot(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
+    else:
+    label.bot(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
+    fi;
+    else:
+    if p_="*":
+    label.top(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
+    elseif p_="/":
+    label.top(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
+    else:
+    label.top(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    vardef BaseRonde=
+    pair O,A[];
+    O=(0,0);
+    path cc;
+    cc=cercles(O,Rayon);
+    A[0]=pointarc(cc,0);
+    A[nbcase+1]=A[0];
+    for k=1 upto nbcase:
+    A[k]=rotation(A[0],O,k*(360/nbcase));
+    endfor;
+    for k=0 upto nbcase:
+    drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
+    endfor;
+    for k=0 upto nbcase:
+    fill cercles(A[k],5mm) withcolor white;
+    trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
+    endfor;
+    enddef;
+
+    vardef BoiteRectangle=
+    save $;
+    path $;
+    $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
+    $
+    enddef;
+    
+    vardef BaseRectangle=
+    pair O,A[];
+    O=(0,0);
+    A[0]=O;
+    for k=1 upto nbcase:
+    A[k]-A[k-1]=(Rayon+2cm,0);
+    endfor;
+    for k=0 upto nbcase-2:
+    drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
+    endfor;
+    drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
+    for k=0 upto nbcase-1:
+    trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
+    endfor;
+    enddef;
+    
+    Compte(#1);
+    
+    if Rectangle:
+    BaseRectangle;
+    AfficheRectangle(#2);
+    else:
+    BaseRonde;
+    AfficheRonde(#2);
+    fi;
+    if Vide=false:
+    if Perso:
+    label(TEX("$"&Depart&"$"),A[0]);
+    else:
+    label(TEX("$"&decimal(Depart)&"$"),A[0]);
+    fi;
+    fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+      boolean Vide,Rectangle,Perso;Vide=\useKV[RondeInfernale]{Vide};Rectangle=\useKV[RondeInfernale]{Rectangle};Perso=\useKV[RondeInfernale]{Perso};if Perso:string Depart;Depart=\useKV[RondeInfernale]{Cle};else:numeric Depart;Depart=\PfCRINombreCle;fi;numeric Rayon;Rayon=\useKV[RondeInfernale]{Rayon};}]
+    string Nombre[];
+    
+    vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
+    nbcase:=0;
+    for p_=t:
+    nbcase:=nbcase+1;
+    Nombre[nbcase]=p_;
+    endfor;
+    enddef;
+
+    vardef AfficheRonde(text t)=%On fait l'affichage des opérations
+    n:=0;
+    for k=1 upto nbcase:
+    fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
+    endfor;
+    for p_=t:
+    n:=n+1;
+    if p_="*":
+    label(LATEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
+    elseif p_="/":
+    label(LATEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
+    else:
+    label(LATEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
+    fi;
+    endfor;
+    enddef;
+
+    vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if n=nbcase:
+    if p_="*":
+    label.bot(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
+    elseif p_="/":
+    label.bot(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
+    else:
+    label.bot(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
+    fi;
+    else:
+    if p_="*":
+    label.top(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
+    elseif p_="/":
+    label.top(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
+    else:
+    label.top(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    vardef BaseRonde=
+    pair O,A[];
+    O=(0,0);
+    path cc;
+    cc=cercles(O,Rayon);
+    A[0]=pointarc(cc,0);
+    A[nbcase+1]=A[0];
+    for k=1 upto nbcase:
+    A[k]=rotation(A[0],O,k*(360/nbcase));
+    endfor;
+    for k=0 upto nbcase:
+    drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
+    endfor;
+    for k=0 upto nbcase:
+    fill cercles(A[k],5mm) withcolor white;
+    trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
+    endfor;
+    enddef;
+
+    vardef BoiteRectangle=
+    save $;
+    path $;
+    $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
+    $
+    enddef;
+    
+    vardef BaseRectangle=
+    pair O,A[];
+    O=(0,0);
+    A[0]=O;
+    for k=1 upto nbcase:
+    A[k]-A[k-1]=(Rayon+2cm,0);
+    endfor;
+    for k=0 upto nbcase-2:
+    drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
+    endfor;
+    drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
+    for k=0 upto nbcase-1:
+    trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
+    endfor;
+    enddef;
+    
+    Compte(#1);
+    
+    if Rectangle:
+    BaseRectangle;
+    AfficheRectangle(#2);
+    else:
+    BaseRonde;
+    AfficheRonde(#2);
+    fi;
+    if Vide=false:
+    if Perso:
+    label(LATEX("$"&Depart&"$"),A[0]);
+    else:
+    label(LATEX("$"&decimal(Depart)&"$"),A[0]);
+    fi;
+    fi;
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRondeInfernale.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRose.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCRose.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCRose.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,302 @@
+%%%
+% Rose
+%%%
+\setKVdefault[ClesRose]{Vide=false,Couleur=white,Produits=false,Solution=false,Rayon=2cm,Petales=7,Aide=false,FacteurMin=2,FacteurMax=10,ProduitVide=false,CaseVide=false,Polygone=false,Nom=Rose1}%
+
+\NewDocumentCommand\RoseMul{o}{%
+  \useKVdefault[ClesRose]%
+  \setKV[ClesRose]{#1}%
+  \ifluatex%
+  \ifboolKV[ClesRose]{Solution}{%
+    \DessineRoseMulSol%
+  }{%
+    \DessineRoseMul%
+  }%
+  \else%
+  \DessineRoseMul%
+  \fi%
+}%
+
+\newcommand\DessineRoseMulSol{%
+  \ifluatex%
+  \mplibforcehmode%
+  \xdef\PfCNomRose{\useKV[ClesRose]{Nom}}%
+  \begin{mplibcode}[\PfCNomRose]
+    boolean Aide,Produits,Solution,Vide,ProduitVide,CaseVide,Polygone;
+    Aide:=\useKV[ClesRose]{Aide};
+    Vide:=\useKV[ClesRose]{Vide};
+    Solution:=\useKV[ClesRose]{Solution};
+    Produits:=\useKV[ClesRose]{Produits};
+    ProduitVide:=\useKV[ClesRose]{ProduitVide};
+    CaseVide:=\useKV[ClesRose]{CaseVide};
+    if ProduitVide:Solution:=true fi;
+    if CaseVide:Solution:=true fi;
+    % on labelise
+    if Vide=false:
+    if Produits:
+    else:
+    for k=0 upto Petales-1:
+    label(TEX("\num{"&decimal(Facteur[k])&"}"),(0.5[O,A[k]]-center BoiteRec));
+    endfor;
+    fi;
+    if Produits or Solution:
+    for k=0 upto Petales-1:
+    label(TEX("\num{"&decimal(Produit[k])&"}"),(B[k]+0.5*Rayon*unitvector(B[k])));
+    endfor;
+    fi;
+    fi;
+    % On trace et on affiche...éventuellement :)
+    if Aide:
+    for k=0 upto Petales-1:
+    drawarrow (0.5[O,A[k]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    drawarrow (0.5[O,A[k+1]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    endfor;
+    fi;
+    if ProduitVide:
+    %choix=floor(uniformdeviate(Petales-1));
+    fill (BoiteRec shifted (1.75[O,B[choix]]-center BoiteRec)) withcolor Fond;
+    fill rotation(polygone(O,B0,A1,B1),O,(choix-1)*(360/Petales)) withcolor Fond;
+    fill rotation(polygone(O,B0,A1,B1),O,choix*(360/Petales)) withcolor Fond;
+    fi;
+    if CaseVide:
+    %choix:=floor(uniformdeviate(Petales-1));
+    for k=0 upto Petales-1:
+    if k<>choix:
+    fill rotation(polygone(O,B0,A1,B1),O,k*(360/Petales)) withcolor Fond;
+    fi;
+    endfor;
+    fi;
+    trace A0 for k=1 upto Petales:--A[k] endfor --cycle;
+    for k=0 upto Petales-1:
+    trace segment(O,B[k]) dashed withdots scaled 0.25;
+    draw BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    endfor;
+  \end{mplibcode}
+  \fi
+}
+\newcommand\DessineRoseMul{%
+  \ifluatex%
+  \mplibforcehmode%
+  \xdef\PfCNomRose{\useKV[ClesRose]{Nom}}%
+  \begin{mplibcode}[\PfCNomRose]
+    vardef ExtraireListe(expr nbmin,nbmax,nbfacteurs)=
+    numeric ElementE[],ElementS[];
+    %% éléments d'entrée
+    nbe:=1;
+    for k=nbmin upto nbmax:
+    ElementE[nbe]=k;
+    nbe:=nbe+1;
+    endfor;
+    totalE:=(nbmax-nbmin)+1;
+    numeric rec;
+    for k=1 upto nbfacteurs:
+    rec:=ceiling(uniformdeviate(totalE+1-k));
+    ElementS[k]=ElementE[rec];
+    numeric ElementI[];
+    p:=0;
+    for l=1 upto totalE+1-k:
+    if l<>rec:
+    p:=p+1;
+    ElementI[p]=ElementE[l];
+    fi;
+    endfor;
+    numeric ElementE[];
+    for l=1 upto p:
+    ElementE[l]=ElementI[l];
+    endfor;
+    endfor;
+    enddef;
+    pair A[],B[],O;
+    Rayon:=\useKV[ClesRose]{Rayon};
+    boolean Aide,Produits,Solution,Vide,ProduitVide,CaseVide,Polygone;
+    Aide:=\useKV[ClesRose]{Aide};
+    Vide:=\useKV[ClesRose]{Vide};
+    Solution:=\useKV[ClesRose]{Solution};
+    Produits:=\useKV[ClesRose]{Produits};
+    ProduitVide:=\useKV[ClesRose]{ProduitVide};
+    CaseVide:=\useKV[ClesRose]{CaseVide};
+    if ProduitVide:Solution:=true fi;
+    if CaseVide:Solution:=true fi;
+    Polygone:=\useKV[ClesRose]{Polygone};
+    Petales:=\useKV[ClesRose]{Petales};
+    FacteurMin:=\useKV[ClesRose]{FacteurMin};
+    FacteurMax:=\useKV[ClesRose]{FacteurMax};
+    color Fond;
+    Fond:=\useKV[ClesRose]{Couleur};
+    O=(0,0);
+    ExtraireListe(FacteurMin,FacteurMax,Petales);
+    path cc;
+    cc=cercles(O,Rayon);
+    for k=0 upto Petales:
+    A[k]=pointarc(cc,(360/Petales)*k);
+    endfor;
+    for k=0 upto Petales-1:
+    B[k]=iso(A[k],A[k+1]);
+    endfor;
+    path BoiteRec;
+    if Polygone:
+    BoiteRec=(pointarc(fullcircle,0) for k=1 upto Petales:--pointarc(fullcircle,k*(360/Petales)) endfor --cycle) scaled 1u;
+    else:
+    BoiteRec=((-0.4,-0.5)--(0.4,-0.5){dir0}..{dir90}(0.5,-0.4)--(0.5,0.4){dir90}..{dir180}(0.4,0.5)--(-0.4,0.5){dir180}..{dir-90}(-0.5,0.4)--(-0.5,-0.4){dir-90}..cycle) scaled 1u;
+    fi;    
+    %On détermine les facteurs et produits
+    for k=0 upto Petales-1:
+    Facteur[k]:=ElementS[k+1];
+    endfor;
+    Facteur[Petales]:=Facteur[0];
+    for k=0 upto Petales-1:
+    Produit[k]:=Facteur[k]*Facteur[k+1];
+    endfor;
+    %on labelise
+    if Vide=false:
+    if Produits:
+    else:
+    for k=0 upto Petales-1:
+    label(TEX("\num{"&decimal(Facteur[k])&"}"),(0.5[O,A[k]]-center BoiteRec));
+    endfor;
+    fi;
+    if Produits or Solution:
+    for k=0 upto Petales-1:
+    label(TEX("\num{"&decimal(Produit[k])&"}"),(B[k]+0.5*Rayon*unitvector(B[k])));
+    endfor;
+    fi;
+    fi;
+    % On trace et on affiche...éventuellement :)
+    if Aide:
+    for k=0 upto Petales-1:
+    drawarrow (0.5[O,A[k]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    drawarrow (0.5[O,A[k+1]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    endfor;
+    fi;
+    if ProduitVide:
+    choix:=floor(uniformdeviate(Petales-1));
+    fill (BoiteRec shifted (1.75[O,B[choix]]-center BoiteRec)) withcolor Fond;
+    fill rotation(polygone(O,B0,A1,B1),O,(choix-1)*(360/Petales)) withcolor Fond;
+    fill rotation(polygone(O,B0,A1,B1),O,choix*(360/Petales)) withcolor Fond;
+    fi;
+    if CaseVide:
+    choix:=floor(uniformdeviate(Petales-1));
+    for k=0 upto Petales-1:
+    if k<>choix:
+    fill rotation(polygone(O,B0,A1,B1),O,k*(360/Petales)) withcolor Fond;
+    fi;
+    endfor;
+    fi;
+    trace A0 for k=1 upto Petales:--A[k] endfor --cycle;
+    for k=0 upto Petales-1:
+    trace segment(O,B[k]) dashed withdots scaled 0.25;
+    draw BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={Rayon:=\useKV[ClesRose]{Rayon};
+    boolean Aide,Produits,Solution,Vide,ProduitVide,CaseVide,Polygone;
+    Aide:=\useKV[ClesRose]{Aide};
+    Vide:=\useKV[ClesRose]{Vide};
+    Solution:=\useKV[ClesRose]{Solution};
+    Produits:=\useKV[ClesRose]{Produits};
+    ProduitVide:=\useKV[ClesRose]{ProduitVide};
+    CaseVide:=\useKV[ClesRose]{CaseVide};
+    if ProduitVide:Solution:=true fi;
+    if CaseVide:Solution:=true fi;
+    Polygone:=\useKV[ClesRose]{Polygone};
+    Petales:=\useKV[ClesRose]{Petales};
+    FacteurMin:=\useKV[ClesRose]{FacteurMin};
+    FacteurMax:=\useKV[ClesRose]{FacteurMax};
+    color Fond;
+    Fond:=\useKV[ClesRose]{Couleur};}]
+    vardef ExtraireListe(expr nbmin,nbmax,nbfacteurs)=
+    numeric ElementE[],ElementS[];
+    %% éléments d'entrée
+    nbe=1;
+    for k=nbmin upto nbmax:
+    ElementE[nbe]=k;
+    nbe:=nbe+1;
+    endfor;
+    totalE=(nbmax-nbmin)+1;
+    numeric rec;
+    for k=1 upto nbfacteurs:
+    rec:=ceiling(uniformdeviate(totalE+1-k));
+    ElementS[k]=ElementE[rec];
+    numeric ElementI[];
+    p:=0;
+    for l=1 upto totalE+1-k:
+    if l<>rec:
+    p:=p+1;
+    ElementI[p]=ElementE[l];
+    fi;
+    endfor;
+    numeric ElementE[];
+    for l=1 upto p:
+    ElementE[l]=ElementI[l];
+    endfor;
+    endfor;
+    enddef;
+    pair A[],B[],O;
+    O=(0,0);
+    ExtraireListe(FacteurMin,FacteurMax,Petales);
+    path cc;
+    cc=cercles(O,Rayon);
+    for k=0 upto Petales:
+    A[k]=pointarc(cc,(360/Petales)*k);
+    endfor;
+    for k=0 upto Petales-1:
+    B[k]=iso(A[k],A[k+1]);
+    endfor;
+    path BoiteRec;
+    if Polygone:
+    BoiteRec=(pointarc(fullcircle,0) for k=1 upto Petales:--pointarc(fullcircle,k*(360/Petales)) endfor --cycle) scaled 1u;
+    else:
+    BoiteRec=((-0.4,-0.5)--(0.4,-0.5){dir0}..{dir90}(0.5,-0.4)--(0.5,0.4){dir90}..{dir180}(0.4,0.5)--(-0.4,0.5){dir180}..{dir-90}(-0.5,0.4)--(-0.5,-0.4){dir-90}..cycle) scaled 1u;
+    fi;    
+    %On détermine les facteurs et produits
+    for k=0 upto Petales-1:
+    Facteur[k]=ElementS[k+1];
+    endfor;
+    Facteur[Petales]=Facteur[0];
+    for k=0 upto Petales-1:
+    Produit[k]=Facteur[k]*Facteur[k+1];
+    endfor;
+    %on labelise
+    if Vide=false:
+    if Produits:
+    else:
+    for k=0 upto Petales-1:
+    label(LATEX("\num{"&decimal(Facteur[k])&"}"),(0.5[O,A[k]]-center BoiteRec));
+    endfor;
+    fi;
+    if Produits or Solution:
+    for k=0 upto Petales-1:
+    label(LATEX("\num{"&decimal(Produit[k])&"}"),(B[k]+0.5*Rayon*unitvector(B[k])));
+    endfor;
+    fi;
+    fi;
+    % On trace et on affiche...éventuellement :)
+    if Aide:
+    for k=0 upto Petales-1:
+    drawarrow (0.5[O,A[k]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    drawarrow (0.5[O,A[k+1]]--1.75[O,B[k]]) cutbefore segment(A[k],A[k+1]) cutafter BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    endfor;
+    fi;
+    if ProduitVide:
+    choix=floor(uniformdeviate(Petales-1));
+    fill (BoiteRec shifted (1.75[O,B[choix]]-center BoiteRec)) withcolor Fond;
+    fill rotation(polygone(O,B0,A1,B1),O,(choix-1)*(360/Petales)) withcolor Fond;
+    fill rotation(polygone(O,B0,A1,B1),O,choix*(360/Petales)) withcolor Fond;
+    fi;
+    if CaseVide:
+    choix:=floor(uniformdeviate(Petales-1));
+    for k=0 upto Petales-1:
+    if k<>choix:
+    fill rotation(polygone(O,B0,A1,B1),O,k*(360/Petales)) withcolor Fond;
+    fi;
+    endfor;
+    fi;
+    trace A0 for k=1 upto Petales:--A[k] endfor --cycle;
+    for k=0 upto Petales-1:
+    trace segment(O,B[k]) dashed withdots scaled 0.25;
+    draw BoiteRec shifted (B[k]+0.5*Rayon*unitvector(B[k])) dashed evenly scaled 0.5;
+    endfor;
+  \end{mpost}
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCRose.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,45 @@
+%%%%
+% Scratch
+%%%%
+\newlength{\longbarreheight}
+\setlength{\longbarreheight}{2.1ex+3pt}
+
+\newlength{\longbarredepth}
+\setlength{\longbarredepth}{0.9ex+3pt}
+\def\longbarre{\vrule height\longbarreheight depth\longbarredepth width0pt}%
+
+\def\barre{\vrule height2.1ex depth.9ex width0pt}%
+\def\demibarre{\vrule height1.4ex depth.6ex width0pt}%
+
+\setKVdefault[Scratch]{Impression=false,Numerotation=false,Echelle=1,Naturel=false}%
+
+\ifluatex
+\NewDocumentEnvironment{Scratch}{o +b}{%
+  \useKVdefault[Scratch]%
+  \setKV[Scratch]{#1}%
+  \mplibforcehmode%
+  \ifboolKV[Scratch]{Naturel}{}{\myfontScratch}%
+  \begin{mplibcode}%
+    boolean Naturel;
+    Naturel=\useKV[Scratch]{Naturel};
+    if Naturel: input PfCPseudo; print:=true; else: input PfCScratch; print:=\useKV[Scratch]{Impression}; fi;
+    NumeroteLignes:=\useKV[Scratch]{Numerotation};%
+    #2%
+    picture recap;%
+    recap:=currentpicture scaled \useKV[Scratch]{Echelle};%
+    currentpicture:=nullpicture;%
+    draw recap;%
+  \end{mplibcode}%
+  }{}
+\else%
+\NewDocumentEnvironment{Scratch}{o +b}{%
+  \setKV[Scratch]{#1}%
+  \begin{mpost}[mpsettings={boolean Naturel;Naturel=\useKV[Scratch]{Naturel};if Naturel: input PfCPseudo; print:=true; else: input PfCScratchpdf; print:=\useKV[Scratch]{Impression}; fi;NumeroteLignes:=\useKV[Scratch]{Numerotation};Echelle:=\useKV[Scratch]{Echelle};}]%
+    #2%
+    picture recap;%
+    recap:=currentpicture scaled Echelle;%
+    currentpicture:=nullpicture;%
+    draw recap;%
+  \end{mpost}
+}{}%
+\fi%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCScratch.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCShikaku.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCShikaku.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCShikaku.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,299 @@
+%%%
+% Shikaku
+%%%
+\newcounter{PfCShikakuNom}
+\setcounter{PfCShikakuNom}{0}
+
+\setKVdefault[Shikaku]{Couleur=Purple,Taille=4,Largeur=2em,Solution=false,CodeAfter={},Creation=false,TailleHor=10,TailleVer=10,TailleHorMax=5,TailleVerMax=5,Nom=Shikaku\PfCShikakuNom}
+
+\newlength\PfCShikakuh
+\newlength\PfCShikakuv
+
+\NewDocumentCommand\Shikaku{o m}{%
+  \stepcounter{PfCShikakuNom}%
+  \useKVdefault[Shikaku]%
+  \setKV[Shikaku]{#1}%
+  \ifboolKV[Shikaku]{Creation}{%
+    \ifluatex\else\PackageWarning{ProfCollege}{La création automatique de Shikaku n'est disponible qu'avec LuaLaTeX.}\fi%
+    \ifboolKV[Shikaku]{Solution}{%
+      \ShikakuCreationSolution%
+    }{%
+      \ShikakuCreation%
+    }%
+  }{%
+    \setlength{\PfCShikakuv}{\useKV[Shikaku]{Largeur}+\tabcolsep}%
+    \setlength{\PfCShikakuh}{\useKV[Shikaku]{Largeur}}%
+    \colorlet{PfCCouleurShikaku}{\useKV[Shikaku]{Couleur}}%
+    \setsepchar[*]{,*/}%
+    \readlist*\ListeCasesSKK{#2}%
+    \savecomparemode%
+    \comparestrict%
+    \begin{NiceTabular}{*{\useKV[Shikaku]{Taille}}{m{\PfCShikakuh}}}[hvlines]
+      \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Shikaku]{Taille}-1}}}\do{%
+        \xintFor* ##2 in {\xintSeq{1}{\useKV[Shikaku]{Taille}}}\do{%
+          \rule{0pt}{\PfCShikakuv}%
+          \StrCompare{\ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},1]}{b}[\PfCTestb]%
+          \StrCompare{\ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},1]}{l}[\PfCTestl]%
+          \StrCompare{\ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},1]}{lb}[\PfCTestlb]%
+          \xintifboolexpr{\PfCTestb==0}{%
+            \ifboolKV[Shikaku]{Solution}{%
+              \Block[borders={bottom,tikz=PfCCouleurShikaku},line-width=2pt]{1-1}{%
+                \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+              }%
+            }{%
+              \Block[]{1-1}{%
+                \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+              }%
+            }%
+          }{% Testl
+            \xintifboolexpr{\PfCTestl==0}{%
+              \ifboolKV[Shikaku]{Solution}{%
+                \Block[borders={left,tikz=PfCCouleurShikaku},line-width=2pt]{1-1}{%
+                  \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+                }%
+              }{%
+                \Block[]{1-1}{%
+                  \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+                }%
+              }%
+            }{% Testlb
+              \xintifboolexpr{\PfCTestlb==0}{%
+                \ifboolKV[Shikaku]{Solution}{%
+                  \Block[borders={left,bottom,tikz=PfCCouleurShikaku},line-width=2pt]{1-1}{%
+                    \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+                  }%
+                }{%
+                  \Block[]{1-1}{%
+                    \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+                  }%
+                }%
+              }{%
+                \Block[]{1-1}{%
+                  \ListeCasesSKK[\fpeval{\useKV[Shikaku]{Taille}*##1+##2},2]%
+                }%
+              }%
+            }%
+          }%
+          \xintifForLast{\\}{&}%
+        }%
+      }%
+      \CodeAfter%
+      \useKV[Shikaku]{CodeAfter}%
+      \ifboolKV[Shikaku]{Solution}{%
+        \tikz\draw[line width=2pt,PfCCouleurShikaku] (1-|1) rectangle (last-|last);%
+      }{}%
+    \end{NiceTabular}%
+    \restorecomparemode%
+  }%
+}%
+
+\NewDocumentCommand\ShikakuCreation{}{%
+  \ifluatex%
+  \mplibforcehmode
+  \xdef\PfCNomShikaku{\useKV[Shikaku]{Nom}}%
+  \begin{mplibcode}[\PfCNomShikaku]%
+    Taillehor=\useKV[Shikaku]{TailleHor};
+    Taillever=\useKV[Shikaku]{TailleVer};
+    
+    TailleMaxh=\useKV[Shikaku]{TailleHorMax};
+    TailleMaxv=\useKV[Shikaku]{TailleVerMax};
+
+    u:=5mm;
+    
+    path R[],S[],RIso[],SIso[];
+    numeric RAire[],SAire[];
+    numeric RHor[],RVer[],SHor[],SVer[],RAngle[],SAngle[];
+    
+    vardef RetiensLesInfosGenerales(expr depart,Lhor,Lver)=
+    R[k]:=polygone(depart,depart+u*(Lhor,0),depart+u*(Lhor,-Lver),depart+u*(0,-Lver));
+    RIso[k]=iso(depart,depart+u*(Lhor,0),depart+u*(Lhor,-Lver),depart+u*(0,-Lver));
+    RHor[k]=Lhor;
+    RVer[k]=Lver;
+    RAire[k]=Lhor*Lver;
+    RAngle[k]=ANGLE;
+    enddef;
+    
+    vardef RetiensLesInfosPourLaSuite(expr depart,Lhor,Lver)=
+    if Lver>0:
+    S[k]=polygone(depart,depart+u*(Lhor,0),depart+u*(Lhor,-Lver),depart+u*(0,-Lver));
+    SIso[k]=iso(depart,depart+u*(Lhor,0),depart+u*(Lhor,-Lver),depart+u*(0,-Lver));
+    SHor[k]=Lhor;
+    SVer[k]=Lver;
+    SAire[k]=Lhor*Lver;
+    SAngle[k]=ANGLE;
+    fi;
+    enddef;
+    
+    vardef RectangleAuto(expr aa,bb)=
+    save $;
+    path $;
+    $=polygone(aa,aa+(xpart(bb-aa),0),bb,bb-(xpart(bb-aa),0));
+    $
+    enddef;
+
+    pair T[];
+    
+    pair A[],B[];
+  
+    A1=u*(0,Taillever);
+    A2-A1=u*(Taillehor,0);
+    A4=(0,0);
+    A3-A4=A2-A1;
+    
+    nbh=Taillehor div TailleMaxh;
+    nbv=Taillever div TailleMaxv;
+    
+    p:=0;
+    for l=0 upto nbv:
+    for k=0 upto nbh:
+    p:=p+1;
+    T[p]=A1+u*(k*TailleMaxh,-l*TailleMaxv);
+    if k<nbh:
+    Hor[p]=TailleMaxh;
+    else:
+    Hor[p]=Taillehor mod TailleMaxh;
+    fi;
+    if l<nbv:
+    Ver[p]=TailleMaxv;
+    else:
+    Ver[p]=Taillever mod TailleMaxv;
+    fi;
+    endfor;
+    endfor;
+    
+    Total:=p;
+    
+    vardef DecomposeUnRectangle(expr BASEA,THOR,TVER)=
+    TMAXV:=TVER;
+    pair BBASEA;
+    BTHOR:=THOR;
+    BTVER:=TVER;
+    BBASEA:=BASEA;
+    forever:
+    k:=k+1;
+    hor:=floor(1+uniformdeviate(BTHOR));
+    ver:=floor(1+uniformdeviate(BTVER));
+    RetiensLesInfosGenerales(BBASEA,hor,ver);
+    RetiensLesInfosPourLaSuite(BBASEA+u*(0,-ver),hor,TMAXV-ver);
+    BTHOR:=BTHOR-hor;
+    BTVER:=ver;
+    BBASEA:=BBASEA+u*(hor,0);
+    exitif BTHOR<1;
+    endfor;
+    enddef;
+    
+    k=0;
+    for l=1 upto Total:
+    if uniformdeviate(1)>0.5:
+    Angle[l]=180;
+    ANGLE:=Angle[l];
+    else:
+    Angle[l]=0;
+    ANGLE:=Angle[l];
+    fi;
+    DecomposeUnRectangle(T[l],Hor[l],Ver[l]);
+    endfor;
+    Totalk=k;
+
+    picture RTEXT[],STEXT[];
+    
+    drawoptions(withpen pencircle scaled 2);
+    for n=1 upto Totalk:
+    trace R[n] withcolor white;
+    RTEXT[n]=image(
+    label(decimal(RAire[n]),(0,0));
+    );
+    RTEXT[n]:=image(
+    trace rotation(RTEXT[n],center RTEXT[n],RAngle[n]) shifted ((point(0) of R[n]) shifted(u*(0.5+floor(uniformdeviate(RHor[n])),-0.5-floor(uniformdeviate(RVer[n])))));
+    );
+    trace RTEXT[n];
+    endfor;
+    for n=1 upto Totalk:
+    if unknown S[n]:
+    else:
+    trace S[n] withcolor white;
+    STEXT[n]=image(
+    label(decimal(SAire[n]),(0,0));
+    );
+    STEXT[n]:=image(
+    trace rotation(STEXT[n],center STEXT[n],SAngle[n]) shifted ((point(0) of S[n]) shifted(u*(0.5+floor(uniformdeviate(SHor[n])),-0.5-floor(uniformdeviate(SVer[n])))));
+    );
+    trace STEXT[n];
+    fi;
+    endfor;
+    clip currentpicture to polygone(A1,A2,A3,A4);
+    
+    picture CasesAvant[],CasesApres[];
+    CasesAvant[0]=currentpicture;
+    
+    currentpicture:=nullpicture;
+
+    drawoptions(withpen pencircle scaled 2);
+    for n=1 upto Totalk:
+    trace R[n];
+    trace RTEXT[n];
+    endfor;
+    for n=1 upto Totalk:
+    if unknown S[n]:
+    else:
+    trace S[n];
+    trace STEXT[n];
+    fi;
+    endfor;
+    clip currentpicture to polygone(A1,A2,A3,A4);
+    CasesApres[0]:=currentpicture;
+    
+    currentpicture:=nullpicture;
+        
+    for l=1 upto Total:
+    CasesAvant[l]=image(%
+    trace CasesAvant[0];
+    clip currentpicture to polygone(T[l],T[l]+u*(Hor[l],0),T[l]+u*(Hor[l],-Ver[l]),T[l]+u*(0,-Ver[l]));
+    );
+    currentpicture:=nullpicture;
+    CasesApres[l]=image(
+    trace CasesApres[0];
+    clip currentpicture to polygone(T[l],T[l]+u*(Hor[l],0),T[l]+u*(Hor[l],-Ver[l]),T[l]+u*(0,-Ver[l]));
+    );
+    currentpicture:=nullpicture;
+    endfor;
+    
+    for l=1 upto Total:
+    trace rotation(CasesAvant[l],center CasesAvant[l],Angle[l]);
+    endfor;
+    
+    drawoptions(withpen pencircle scaled 2);
+    trace RectangleAuto(A1,A3);
+    drawoptions();
+    for k=1 upto Taillehor-1:
+    trace (k/Taillehor)[A4,A3]--(k/Taillehor)[A1,A2];
+    endfor;
+    
+    for k=1 upto Taillever-1:
+    trace (k/Taillever)[A4,A1]--(k/Taillever)[A3,A2];
+    endfor;
+  \end{mplibcode}
+  \fi%
+}%
+
+\NewDocumentCommand\ShikakuCreationSolution{}{%
+  \ifluatex%
+  \mplibforcehmode
+  \xdef\PfCNomShikaku{\useKV[Shikaku]{Nom}}%
+  \begin{mplibcode}[\PfCNomShikaku]%
+    for l=1 upto Total:
+    trace rotation(CasesApres[l],center CasesApres[l],Angle[l]);
+    endfor;
+    drawoptions(withpen pencircle scaled 2);
+    trace RectangleAuto(A1,A3);
+    drawoptions();
+    for k=1 upto Taillehor-1:
+    trace (k/Taillehor)[A4,A3]--(k/Taillehor)[A1,A2];
+    endfor;
+    
+    for k=1 upto Taillever-1:
+    trace (k/Taillever)[A4,A1]--(k/Taillever)[A3,A2];
+    endfor;
+  \end{mplibcode}
+  \fi%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCShikaku.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,209 @@
+%%%
+% Simplification
+%%%
+\makeatletter%by christian Tellechea
+% Calcul du PGCD de #1 et #2
+\newcount\cnt at a\newcount\cnt at b\newcount\pgcd
+\def\PGCD#1#2{%
+  \ifnum#1>#2\cnt at a#1\cnt at b#2\else\cnt at a#2\cnt at b#1\relax\fi
+  \PGCD at i
+}
+\def\PGCD at i{\edef\PGCD at ii##1{##1{\number\cnt at a}{\number\cnt at b}}\PGCD at ii\PGCD at iii}
+\def\PGCD at iii#1#2{%
+  \cnt at b#1\relax\global\divide\cnt at b#2%
+  \global\cnt at b\numexpr#1-#2*\cnt at b%
+  \global\cnt at a#2\global\pgcd\cnt at a%
+  \ifnum\cnt at b>\z@\expandafter\PGCD at i%
+  \fi}%
+\makeatother
+
+\def\SSimplifie#1#2{%
+  % Simplification d'une \'ecriture #1/#2
+  \ensuremath{
+    \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno
+    \numerateur=\number#1
+    \denominateur=\number#2
+    \ifnum\number#1<0\relax
+      \valabsnum=\numexpr0-\number#1
+    \else
+      \valabsnum=\number#1
+    \fi
+    \ifnum\number#2<0\relax
+      \valabsdeno=\numexpr0-\number#2
+    \else
+      \valabsdeno=\number#2
+    \fi
+    \ifnum\the\numerateur<0\relax
+      \ifnum\the\denominateur<0\relax
+        \numerateur=\valabsnum
+        \denominateur=\valabsdeno
+      \fi
+    \else
+      \ifnum\the\denominateur<0\relax
+        \numerateur=-\valabsnum
+        \denominateur=\valabsdeno
+      \fi
+    \fi
+    \ifnum\number#2=0\relax
+      \text{\bfseries(???)}
+    \else
+      \ifnum\number#1=0\relax
+        0
+      \else
+        \PGCD{\the\valabsnum}{\the\valabsdeno}%
+        \ifnum\pgcd>1\relax
+          \ifthenelse{\pgcd=\number#2 \OR \pgcd=\the\valabsdeno}{%
+            \divide\numerateur by \denominateur\num{\the\numerateur}
+          }{\divide\numerateur by\pgcd%
+            \divide\denominateur by\pgcd%
+            \frac{\num{\the\numerateur}}{\num{\the\denominateur}}
+          }
+        \else%%%comme on est avec les n\'egatifs, on doit regarder si la valeur absolue est \'egale \`a 1
+          \ifnum\valabsdeno=1\relax
+            \divide\numerateur by \denominateur\num{\the\numerateur}
+          \else
+            \frac{\num{\the\numerateur}}{\num{\the\denominateur}}
+          \fi
+        \fi%
+      \fi%
+    \fi%
+  }%
+}
+
+
+\newcommand\SSimpli[2]{%
+  % D\'ecomposition d'une simplification de #1/#2
+  \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno%
+  \numerateur=\number#1
+  \denominateur=\number#2
+  \ifnum\number#1<0
+  \valabsnum=\numexpr0-\number#1
+  \else
+  \valabsnum=\number#1
+  \fi
+  \ifnum\number#2<0
+  \valabsdeno=\numexpr0-\number#2
+  \else
+  \valabsdeno=\number#2
+  \fi
+  \ifnum\the\numerateur<0\relax
+    \ifnum\the\denominateur<0\relax
+      \numerateur=\valabsnum
+      \denominateur=\valabsdeno
+    \fi
+  \else
+    \ifnum\the\denominateur<0\relax
+      \numerateur=-\valabsnum
+      \denominateur=\valabsdeno
+    \fi
+  \fi
+  \ifnum\number#2=0\relax
+    \ensuremath{\text{\bfseries(???)}}
+  \else
+      \ifnum\number#1=0\relax
+        0
+      \else
+        \PGCD{\the\valabsnum}{\the\valabsdeno}%
+        \ifnum\pgcd>1\relax
+          \ifthenelse{\pgcd=\number#2 \OR \pgcd=\the\valabsdeno}{%
+            \divide\numerateur by \denominateur\num{\the\numerateur}
+          }{%\divide\numerateur by\pgcd%
+            % \divide\denominateur by\pgcd%
+            \ensuremath{\frac{\num{\the\numerateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}{\num{\the\denominateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}}%
+          }
+        \else
+          \ifnum\denominateur=1\relax
+            \ensuremath{\frac{\num{\the\numerateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}{\num{\the\denominateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}}
+          \else
+            \ensuremath{\frac{\num{\the\numerateur}}{\num{\the\denominateur}}}
+          \fi
+        \fi
+      \fi
+    \fi
+}
+
+\newcount\anpdc\newcount\bnpdc\newcount\cnpdc\newcount\dnpdc%
+\newcount\DivCom
+\newcommand\DiviseurCommun[2]{%
+  % #1 : le premier nombre entier
+  % #2 : le deuxi\`eme nombre entier
+ % nombre 1 vaut #1 - Nombre 2 vaut #2
+  \anpdc=#1%
+  \cnpdc=#2%
+  \bnpdc=2\relax%
+  \dnpdc=\numexpr#1+1\relax%
+  \DivCom=1\relax%
+  \whiledo{\bnpdc<\dnpdc}{%
+    \modulo{\the\anpdc}{\the\bnpdc}\relax
+    \ifnum\remainder=0%
+    \modulo{\the\cnpdc}{\the\bnpdc}
+    \ifnum\remainder=0%
+    \DivCom=\bnpdc%
+    \bnpdc=\anpdc%
+    \else%
+    \DivCom=1%
+    \fi
+    \else%
+    \DivCom=1%
+    \fi
+    \bnpdc=\numexpr\bnpdc+1\relax%
+  }%
+}
+
+\newcommand\LongueSimplification[2]{%
+  \xdef\NumerateurDiv{#1}%
+  \xdef\DenominateurDiv{#2}%
+  \DiviseurCommun{#1}{#2}%
+  \ensuremath{%
+    \whiledo{\DivCom>1}{%
+      \frac{\num{\fpeval{\NumerateurDiv/\the\DivCom}}\times\num{\the\DivCom}}{\num{\fpeval{\DenominateurDiv/\the\DivCom}}\times\num{\the\DivCom}}=\frac{\num{\fpeval{\NumerateurDiv/\DivCom}}}{\num{\fpeval{\DenominateurDiv/\DivCom}}}%
+      \xdef\NumerateurDiv{\fpeval{\NumerateurDiv/\DivCom}}%
+      \xdef\DenominateurDiv{\fpeval{\DenominateurDiv/\DivCom}}%
+      \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}%
+      \xintifboolexpr{\DivCom>1}{=}{}%
+    }%
+  }%
+}%
+
+\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0}
+
+\newcounter{NbFrac}%
+\setcounter{NbFrac}{0}%
+
+\newcommand\Simplification[3][]{%
+  \stepcounter{NbFrac}%
+  \useKVdefault[ClesSimplification]%
+  \setKV[ClesSimplification]{#1}%
+  \ifboolKV[ClesSimplification]{Fleches}{%
+    \setsepchar[*]{,*/}%\ignoreemptyitems
+    \readlist*\Listea{#2}%
+    \readlist*\Listeb{#3}%
+    \setbox1=\hbox{\Listea[1,1]{}}%
+    \setbox2=\hbox{\Listeb[1,1]}%
+    \setbox3=\hbox{\Listea[1,3]}%
+    \setbox4=\hbox{\Listeb[1,3]}%
+     \ensuremath{%
+       \frac{\tikzmarknode[anchor=north]{A-\theNbFrac}{\Listea[1,1]}{}}{\tikzmarknode[anchor=south]{B-\theNbFrac}{\Listeb[1,1]}{}}=\frac{\tikzmarknode[anchor=north]{C-\theNbFrac}{\Listea[1,3]}{}}{\tikzmarknode[anchor=south]{D-\theNbFrac}{\Listeb[1,3]}{}}%
+     }%
+     \begin{tikzpicture}[remember picture,overlay]%
+       \draw[out=45,in=135,-stealth,transform canvas={yshift=0.25em}]
+       let
+       \p1=(pic cs:A-\theNbFrac),
+       \p2=(pic cs:C-\theNbFrac)
+       in (pic cs:A-\theNbFrac) to node[midway,above]{\Listea[1,2]}(\x2,\y1);
+      \draw[out=-45,in=-135,-stealth,transform canvas={yshift=-0.25em}] (pic cs:B-\theNbFrac) to node[midway,below]{\Listeb[1,2]}(pic cs:D-\theNbFrac);%
+    \end{tikzpicture}%
+  }{%
+    \xintifboolexpr{\useKV[ClesSimplification]{Contraire}>1}{%
+      \ensuremath{%
+        \frac{\num{#2}}{\num{#3}}=\frac{\num{#2}\times\num{\useKV[ClesSimplification]{Contraire}}}{\num{#3}\times\num{\useKV[ClesSimplification]{Contraire}}}=\frac{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#2}}}{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#3}}}%
+      }%
+    }{%
+      \ifboolKV[ClesSimplification]{Longue}{%
+        \LongueSimplification{#2}{#3}%
+      }{%
+        \ifboolKV[ClesSimplification]{Details}{\SSimpli{#2}{#3}}{\ifboolKV[ClesSimplification]{All}{\ensuremath{\SSimpli{#2}{#3}=\SSimplifie{#2}{#3}}}{\SSimplifie{#2}{#3}}}%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSimplifierFraction.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,866 @@
+%%%
+% Solide et sections
+%%%
+\setKVdefault[ClesSolides]{Nom=cube,Aretes,Sommets,Pointilles,Largeur=1.5,Hauteur=1,Profondeur=0.75,ListeSommets={A,B,C,D,E,F,G,H},Rho=1500,Phi=30,Theta=20,Distance=50,Code=false,Couleur=white,Anglex=0,RayonCone=1,HauteurCone=2,HauteurPyramide=2,SommetsPyramide=5,Reguliere=false,DecalageSommet={(0,0,0)},RayonCylindre=1,HauteurCylindre=2,RayonSphere=1,AutoLabel=true,Sections=false,CoefSection=0.3,Axes=false,PointsSection={M,N,O,P},RemplisSection=false,ObjetSection={0.5,E,H,0.25,F,G,G,B}}%
+\defKV[ClesSolides]{Traces=\setKV[ClesSolides]{Code}}%
+\defKV[ClesSolides]{Section=\setKV[ClesSolides]{Sections}}%
+\defKV[ClesSolides]{CouleurSection=\setKV[ClesSolides]{RemplisSection}}%
+
+\newcommand\MPSolideCylindre[3]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCSolid;
+    
+    boolean NommeSommets,Code,Sections,Axes,RemplisSection;
+    NommeSommets=\useKV[ClesSolides]{Sommets};
+    Code=\useKV[ClesSolides]{Code};
+    Sections:=\useKV[ClesSolides]{Sections};
+    Axes:=\useKV[ClesSolides]{Axes};
+    RemplisSection=\useKV[ClesSolides]{RemplisSection};
+    if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi;
+    %Initialisation
+    PfCRho=\useKV[ClesSolides]{Rho};
+    PfCPhi=\useKV[ClesSolides]{Phi};
+    PfCTheta=\useKV[ClesSolides]{Theta};
+    PfCDistance=\useKV[ClesSolides]{Distance};
+    CoefSection=\useKV[ClesSolides]{CoefSection};
+    anglerotationx=\useKV[ClesSolides]{Anglex};
+    rayoncylindre=\useKV[ClesSolides]{RayonCylindre};
+    hauteurcylindre=\useKV[ClesSolides]{HauteurCylindre};
+
+    string Section;
+    if Sections:Section=\useKV[ClesSolides]{Section};fi;
+        
+    color PfCOutColor;
+    PfCOutColor=\useKV[ClesSolides]{Couleur};
+    
+    vardef BaseCylindre(text t)=
+    save Cer;
+    picture Cer;
+    save n;
+    n:=0;
+    for p_=t:
+    if color p_:
+    n:=n+1;
+    _T[n]:=p_;
+    fi;
+    endfor;
+    pascercle:=5;
+    color ptcer[];
+    for k=0 step pascercle until (360+pascercle) :
+    ptcer[k div pascercle]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5]));
+    endfor;
+    %
+    color ddcer,cccer;
+    nbpointilles:=0;
+    nbtraces:=0;
+    path PathSection[];
+    nbpathsection:=0;
+    Cer=image(%
+    for k=0 step pascercle until 360:
+    ddcer:=Oeil-ptcer[k div pascercle];
+    cccer:=-Normal(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle],ptcer[k div pascercle]+Sommet1-Sommet2);
+    if (ProduitScalaire(ddcer,cccer)>=0):
+    nbtraces:=nbtraces+1;
+    if (nbtraces=1) and (nbpointilles>0):
+    draw chemin(ptcer[k div pascercle],ptcer[k div pascercle]+Sommet1-Sommet2);
+    fi;
+    nbpathsection:=nbpathsection+1;
+    PathSection[nbpathsection]=chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    draw chemin(ptcer[k div pascercle]+Sommet1-Sommet2,ptcer[(k+pascercle) div pascercle]+Sommet1-Sommet2);
+    else:
+    nbpointilles:=nbpointilles+1;
+    nbtraces:=0;
+    if (nbpointilles=1):
+    draw chemin(ptcer[k div pascercle],ptcer[k div pascercle]+Sommet1-Sommet2);
+    fi;
+    if k mod (2*pascercle)=0:
+    nbpathsection:=nbpathsection+1;
+    PathSection[nbpathsection]=chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    draw chemin(ptcer[k div pascercle]+Sommet1-Sommet2,ptcer[(k+pascercle) div pascercle]+Sommet1-Sommet2);
+    fi;
+    fi;
+    endfor;
+    );
+    Cer
+    enddef;
+
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance);
+%    Initialisation(1500,30,20,50);
+    typetrace:="3D";
+    typerepre:="persp";
+    eclairage:=false;
+    nb:=36;%36
+    subh:=1;%
+    incolor:=white;
+    outcolor:=PfCOutColor;
+    Ferme1:=true;
+    angx:=anglerotationx;
+    Objetcylindre1("r="&decimal(rayoncylindre),"h="&decimal(hauteurcylindre));
+    eclairage:=false;
+%    traits:=false;
+%    AffichageObjet1;
+
+    color O,S,A,M,B,C,D,Sommet[];
+    Sommet2=(0,0,0);
+    Sommet1-Sommet2=(0,0,hauteurcylindre);
+    Sommet3-Sommet2=rayoncylindre*(cosd(0),-sind(0),0);
+    Sommet4-Sommet2=rayoncylindre*(cosd(90),-sind(90),0);
+    color MSection[];
+    MSection[1]-Sommet2=rayoncylindre*(CoefSection,sin(arccos(CoefSection)),0);
+    MSection[7]-Sommet2=rayoncylindre*(CoefSection+0.01,sin(arccos(CoefSection+0.01)),0);
+    MSection[2]-Sommet2=rayoncylindre*(CoefSection,-sin(arccos(CoefSection)),0);
+    MSection[3]-MSection[2]=Sommet1-Sommet2;
+    MSection[4]-MSection[1]=Sommet1-Sommet2;
+    MSection[5]-Sommet2=CoefSection[Sommet1,Sommet2];
+    MSection[6]-MSection[5]=MSection[2]-MSection[1];
+    Sommet1:=RotXYZ(Sommet1);
+    Sommet2:=RotXYZ(Sommet2);
+    Sommet3:=RotXYZ(Sommet3);
+    Sommet4:=RotXYZ(Sommet4);
+    MSection[1]:=RotXYZ(MSection[1]);
+    MSection[2]:=RotXYZ(MSection[2]);
+    MSection[3]:=RotXYZ(MSection[3]);
+    MSection[4]:=RotXYZ(MSection[4]);
+    MSection[5]:=RotXYZ(MSection[5]);
+    MSection[6]:=RotXYZ(MSection[6]);
+    MSection[7]:=RotXYZ(MSection[7]);
+
+    trace BaseCylindre(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4);
+    currentpicture:=nullpicture;
+    
+    if Sections:
+    if Section="parallele":
+    if RemplisSection:
+    fill polygone(MSection[1],MSection[2],MSection[3],MSection[4]) withcolor CouleurSection;
+    fi;
+    color dcer,ccer;
+    invnormale:=if CoefSection<=0:-1 else:1 fi;
+    %1er côté et 3eme côté : face "basse" et face "haute"
+    dcer:=Oeil-Sommet3;
+    ccer:=-Normal(Sommet3,MSection1,MSection2);
+    draw chemin(MSection1,MSection2) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi;
+    draw chemin(MSection3,MSection4) if (ProduitScalaire(dcer,ccer)>0):dashed evenly fi;
+    % 2eme côté et 4eme coté
+    dcer:=Oeil-MSection7;
+    ccer:=-Normal(MSection7,MSection4,MSection1);
+    draw chemin(MSection4,MSection1) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi;
+    draw chemin(MSection2,MSection3) if (ProduitScalaire(dcer,ccer)>0):dashed evenly fi;
+    else:
+    if RemplisSection:
+    fill (PathSection[1] for p_=2 upto nbpathsection:--PathSection[p_] endfor--cycle) shifted(Projette(CoefSection[Sommet1,Sommet2]-Sommet2)) withcolor CouleurSection;
+    fi;
+    for p_=1 upto nbpathsection:
+    draw (PathSection[p_] shifted(Projette(CoefSection[Sommet1,Sommet2]-Sommet2)));
+    endfor;
+    fi;
+    fi;
+    
+    trace BaseCylindre(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4);
+
+    color dcer,ccer;
+    dcer:=Oeil-Sommet2;
+    ccer:=Normal(Sommet2,Sommet3,Sommet4);
+    if (ProduitScalaire(dcer,ccer)>=0):
+    draw Cercles(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4);
+    fi;
+    dcer:=Oeil-Sommet1;
+    ccer:=Normal(Sommet1,Sommet4+Sommet1-Sommet2,Sommet3+Sommet1-Sommet2);
+    if (ProduitScalaire(dcer,ccer)>=0):
+    draw Cercles(Sommet1,Sommet3+Sommet1-Sommet2,Sommet1,Sommet3+Sommet1-Sommet2,Sommet4+Sommet1-Sommet2);
+    fi;
+
+    vardef EcrireSommets(text t)=
+    nb:=0;
+    for p_=t:
+    nb:=nb+1;
+    if bluepart(Sommet1)>bluepart(Sommet2):
+    if nb=1:
+    label.ulft(TEX(p_),Projette(Sommet1));%p_
+    elseif nb=2:
+    dotlabel.rt(TEX(p_),Projette(Sommet2));%p_
+    fi;
+    else:
+    if nb=1:
+    label.bot(TEX(p_),Projette(Sommet1));
+    elseif nb=2:
+    dotlabel.ulft(TEX(p_),Projette(Sommet2));
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    DefinirSommets(#1);
+    DefinirSommetsSection(#3);
+    
+    if Axes:
+    draw segment(1.5[Sommet1,Sommet2],1.5[Sommet2,Sommet1]) dashed dashpattern(on6 off3 on3 off 3);
+    remplis (fullcircle scaled 1mm) shifted(Projette(Sommet1));
+    remplis (fullcircle scaled 1mm) shifted(Projette(Sommet2));
+    fi;
+    
+    if Code:
+    \useKV[ClesSolides]{Traces};
+    fi;
+    
+  \end{mplibcode}
+  \fi
+}
+
+\newcommand\MPSolidePyramide[4]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+
+    input PfCSolid;
+    
+    boolean Pointilles,TraceArete,NommeSommets,Code,Reguliere,AutoLabel,Sections,RemplisSection;
+    Sections:=\useKV[ClesSolides]{Sections};
+    RemplisSection=\useKV[ClesSolides]{RemplisSection};
+    if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi;
+    AutoLabel:=\useKV[ClesSolides]{AutoLabel};
+    Pointilles=\useKV[ClesSolides]{Pointilles};
+    TraceArete=\useKV[ClesSolides]{Aretes};
+    NommeSommets=\useKV[ClesSolides]{Sommets};
+    Code=\useKV[ClesSolides]{Code};
+    Reguliere:=\useKV[ClesSolides]{Reguliere};
+    % Initialisation
+    PfCRho=\useKV[ClesSolides]{Rho};
+    PfCPhi=\useKV[ClesSolides]{Phi};
+    PfCTheta=\useKV[ClesSolides]{Theta};
+    PfCDistance=\useKV[ClesSolides]{Distance};
+    CoefSection=\useKV[ClesSolides]{CoefSection};
+    anglerotationx=\useKV[ClesSolides]{Anglex};
+    hauteurpyramide=\useKV[ClesSolides]{HauteurPyramide};
+    nombresommets=\useKV[ClesSolides]{SommetsPyramide};
+    color PfCOutColor,DecalageSommet;
+    PfCOutColor=\useKV[ClesSolides]{Couleur};
+    DecalageSommet=if Reguliere:(0,0,0) else: #3 fi;
+    
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance);
+    typetrace:="3D";
+    typerepre:="persp";
+    if Pointilles=false:
+    pointilles:="non";
+    fi;
+
+    Ferme1:=true;
+
+    color O,A[],S;
+    O=(0,0,0);
+    S-O=(0,0,hauteurpyramide)+DecalageSommet;
+
+    NbS:=nombresommets;
+    Sommet1:=S;
+    ecartangle=360/(NbS-1);
+    for k=2 upto NbS:
+    if Reguliere:
+    repereangle:=(k-2)*ecartangle;
+    else:
+    repereangle:=(k-2)*ecartangle+(ecartangle*0.25+uniformdeviate(floor(ecartangle/2)));
+    fi;
+    Sommet[k]:=(cosd(repereangle),-sind(repereangle),0);
+    endfor;
+    Sommet[NbS+1]:=Sommet[2];
+
+    color TS[];
+    for k=1 upto (NbS+1):
+    TS[k]=Sommet[k];
+    endfor;
+    color PiedHauteur;
+    PiedHauteur=ProjectionsurPlan(Sommet1,Sommet2,Sommet3,Sommet4);
+    eclairage:=false;
+    traits:=false;
+    outcolor:=PfCOutColor;
+    angx:=anglerotationx;
+    for k=1 upto (NbS+1):
+    TS[k]:=RotXYZ(TS[k]);
+    endfor;
+    angx:=0;
+
+    color MSection[];
+    for p_=2 upto NbS:
+    MSection[p_-1]=CoefSection[Sommet[1],Sommet[p_]];
+    endfor;
+
+    DefinirSommetsSection(#4);
+    
+    vardef SectionPyramide(expr fracsection)=
+    save Section;
+    picture Section;
+    Section=image(%
+    if RemplisSection:
+    remplis polygone(fracsection[Sommet1,Sommet2],for p_=3 upto NbS-1:fracsection[Sommet1,Sommet[p_]],endfor fracsection[Sommet1,Sommet[NbS]]) withcolor CouleurSection;
+    fi;
+    color dcer,ccer;
+    for p_=2 upto NbS:
+    dcer:=Oeil-Sommet[p_];
+    ccer:=-Normal(Sommet1,Sommet[p_],Sommet[p_+1]);
+    if (ProduitScalaire(dcer,ccer)>=0):
+    draw chemin(fracsection[Sommet1,Sommet[p_]],fracsection[Sommet1,Sommet[p_+1]]);
+    else:
+    draw chemin(fracsection[Sommet1,Sommet[p_]],fracsection[Sommet1,Sommet[p_+1]]) dashed evenly;
+    fi;
+    endfor;
+    );
+    Section
+    enddef;
+    
+    ObjetNew1(%
+    TS1, for k=2 upto NbS:TS[k], endfor TS[NbS+1]
+    )(%
+    NbS-1, for p_=2 upto NbS:p_, endfor 
+    for p=2 upto NbS:
+    3,1,p+1,p,%
+    endfor);
+    AffichageObjet1;
+
+    Sommet[NbS+1]:=Sommet[2];
+
+    if Sections:
+    draw SectionPyramide(CoefSection);
+    fi;
+    
+    NF:=NbS;%nombresommets;
+    % Fc[100] est la base
+    Fc[100]:=NbS-1;
+    for k=2 upto NbS:
+    Fc[100+k-1]:=k;
+    endfor;
+    for k=2 upto NF:
+    Fc[k*100]:=3;
+    Fc[k*100+1]:=1;
+    Fc[k*100+2]:=k+1;
+    Fc[k*100+3]:=k;
+    endfor;
+    DessineObjet;
+
+    vardef EcrireSommets(text t)=
+    if AutoLabel:
+    nb:=0;
+    for p_=t:
+    nb:=nb+1;
+    if nb<NbS+1:
+    if nb>1:
+    label(TEX(""&p_&""),1.1[Projette(Sommet1),Projette(Sommet[nb])]);
+    else:
+    label(TEX(p_),1.1[Projette(Sommet[2]),Projette(Sommet[1])]);
+    fi;
+    fi;
+    endfor;
+    fi;
+    enddef;
+     
+    DefinirSommets(#1);
+
+    if TraceArete=false:
+    currentpicture:=nullpicture;    
+    fi;
+    if NommeSommets:
+    EcrireSommets(#2);
+    fi;
+    u:=0.25u;
+    marque_p:="croix";
+    nbcroix=0;
+    for p_=#1:
+    nbcroix:=nbcroix+1;
+    if nbcroix<NbS+1:
+    pointe(p_);
+    fi;
+    endfor;
+    u:=1cm;
+    if Code:
+    \useKV[ClesSolides]{Traces};
+    fi;
+
+  \end{mplibcode}
+  \fi
+}
+
+\newcommand\MPSolideCone[3]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean NommeSommets,Code,Sections,Axes,RemplisSection;
+    NommeSommets=\useKV[ClesSolides]{Sommets};
+    Code=\useKV[ClesSolides]{Code};
+    Axes:=\useKV[ClesSolides]{Axes};
+    Sections=\useKV[ClesSolides]{Sections};
+    RemplisSection=\useKV[ClesSolides]{RemplisSection};
+    if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi;
+    %Initialisation
+    PfCRho=\useKV[ClesSolides]{Rho};
+    PfCPhi=\useKV[ClesSolides]{Phi};
+    PfCTheta=\useKV[ClesSolides]{Theta};
+    PfCDistance=\useKV[ClesSolides]{Distance};
+    CoefSection=\useKV[ClesSolides]{CoefSection};
+    anglerotationx=\useKV[ClesSolides]{Anglex};
+    rayoncone=\useKV[ClesSolides]{RayonCone};
+    hauteurcone=\useKV[ClesSolides]{HauteurCone};
+    
+    color PfCOutColor;
+    PfCOutColor=\useKV[ClesSolides]{Couleur};
+    input PfCSolid;
+    
+    vardef BaseCone(text t)=
+    save Cer;
+    picture Cer;
+    save n;
+    n:=0;
+    for p_=t:
+    if color p_:
+    n:=n+1;
+    _T[n]:=p_;
+    fi;
+    endfor;
+    pascercle:=5;
+    color ptcer[];
+    for k=0 step pascercle until (360+pascercle) :
+    ptcer[k div pascercle]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5]));
+    endfor;
+    %
+    color ddcer,cccer;
+    nbpointilles:=0;
+    nbtraces:=0;
+    Cer=image(%
+    for k=0 step pascercle until 360:
+    ddcer:=Oeil-ptcer[k div pascercle];
+    cccer:=-Normal(Sommet1,ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    if (ProduitScalaire(ddcer,cccer)>=0):
+    nbtraces:=nbtraces+1;
+    if (nbtraces=1) and (nbpointilles>0):
+    draw chemin(ptcer[k div pascercle],Sommet1);
+    fi;
+    draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    else:
+    nbpointilles:=nbpointilles+1;
+    nbtraces:=0;
+    if (nbpointilles=1):
+    draw chemin(ptcer[k div pascercle],Sommet1);
+    fi;
+    if k mod (2*pascercle)=0:
+    draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]);
+    fi;
+    fi;
+    endfor;
+    );
+    Cer
+    enddef;
+
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance);
+    typetrace:="3D";
+    typerepre:="persp";
+    eclairage:=false;
+    nb:=36;%36
+    subh:=1;%
+    incolor:=white;
+    outcolor:=PfCOutColor;
+    Ferme1:=true;
+    angx:=anglerotationx;
+    Objetcone1("r="&decimal(rayoncone),"h="&decimal(hauteurcone));
+    traits:=false;
+    AffichageObjet1;
+
+    color Sommet[];%O,S,A,M,B,C,D,
+    Sommet2=(0,0,0);
+    Sommet1-Sommet2=(0,0,hauteurcone);
+    Sommet3-Sommet2=rayoncone*(cosd(0),-sind(0),0);
+    Sommet4-Sommet2=rayoncone*(cosd(90),-sind(90),0);
+    Sommet1:=RotXYZ(Sommet1);
+    Sommet3:=RotXYZ(Sommet3);
+    Sommet4:=RotXYZ(Sommet4);
+
+    color MSection[];
+    MSection[1]=CoefSection[Sommet1,Sommet2];
+
+    DefinirSommetsSection(#3);
+    
+    if Sections:
+    if RemplisSection:
+    remplis Cercles(CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet4]) withcolor CouleurSection;
+    fi;
+    trace BaseCone(CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet4]);
+    fi;
+
+    trace BaseCone(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4);
+    color dcer,ccer;
+    dcer:=Oeil-Sommet2;
+    ccer:=Normal(Sommet2,Sommet3,Sommet4);
+    if (ProduitScalaire(dcer,ccer)>=0):
+    draw Cercles(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4);
+    fi;
+
+    vardef EcrireSommets(text t)=
+    nb:=0;
+    for p_=t:
+    nb:=nb+1;
+    if bluepart(Sommet1)>bluepart(Sommet2):
+    if nb=1:
+    label.ulft(TEX(p_),Projette(Sommet1));
+    elseif nb=2:
+    dotlabel.rt(TEX(p_),Projette(Sommet2));
+    fi;
+    else:
+    if nb=1:
+    label.bot(TEX(p_),Projette(Sommet1));
+    elseif nb=2:
+    dotlabel.ulft(TEX(p_),Projette(Sommet2));
+    fi;
+    fi;
+    endfor;
+    enddef;
+
+    DefinirSommets(#1);
+
+    if Axes:
+    draw segment(1.5[Sommet1,Sommet2],1.5[Sommet2,Sommet1]) dashed dashpattern(on6 off3 on3 off 3);
+    remplis (fullcircle scaled 1mm) shifted(Projette(Sommet1));
+    remplis (fullcircle scaled 1mm) shifted(Projette(Sommet2));
+    fi;
+
+    if Code:
+    \useKV[ClesSolides]{Traces};
+    fi;
+
+  \end{mplibcode}
+  \fi
+}
+
+\newcommand\MPSolidePave[5]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCSolid;
+    
+    boolean Pointilles,TraceArete,NommeSommets,Code,AutoLabel,Sections,RemplisSection;
+    AutoLabel:=\useKV[ClesSolides]{AutoLabel};
+    Pointilles=\useKV[ClesSolides]{Pointilles};
+    TraceArete=\useKV[ClesSolides]{Aretes};
+    NommeSommets=\useKV[ClesSolides]{Sommets};
+    Code=\useKV[ClesSolides]{Code};
+    Sections:=\useKV[ClesSolides]{Sections};
+    RemplisSection=\useKV[ClesSolides]{RemplisSection};
+    if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi;
+
+    string Section;
+    if Sections:Section=\useKV[ClesSolides]{Section};fi;
+    
+    %Initialisation
+    PfCRho=\useKV[ClesSolides]{Rho};
+    PfCPhi=\useKV[ClesSolides]{Phi};
+    PfCTheta=\useKV[ClesSolides]{Theta};
+    PfCDistance=\useKV[ClesSolides]{Distance};
+    
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance);
+    typetrace:="3D";
+    typerepre:="persp";
+    if Pointilles=false:
+    pointilles:="non";
+    fi;
+    color A,B,C,D,E,F,G,H;
+    color Sommet[];
+    trace Pave(A,B,C,D,E,F,G,H)(#3);
+    currentpicture:=nullpicture;
+    Sommet1=A;
+    Sommet2=B;
+    Sommet3=C;
+    Sommet4=D;
+    Sommet5=E;
+    Sommet6=F;
+    Sommet7=G;
+    Sommet8=H;
+
+    DefinirSommets(#1);
+    
+    color MSection[];
+    numeric RetiensSection[];
+    numretienssection:=0;
+    color RetiensDefSection[];
+    numretiensdefsection:=0;
+    if Sections:
+    if Section="arete":
+    for p_=#5:
+    if numeric p_:
+    numretienssection:=numretienssection+1;
+    RetiensSection[numretienssection]=p_;
+    elseif color p_:
+    numretiensdefsection:=numretiensdefsection+1;
+    RetiensDefSection[numretiensdefsection]=p_;
+    fi;    
+    endfor;
+    % On dessine la section
+    MSection[1]=(RetiensSection[1])[RetiensDefSection[1],RetiensDefSection[2]];
+    MSection[2]=(RetiensSection[2])[RetiensDefSection[3],RetiensDefSection[4]];
+    MSection[3]-MSection[2]=RetiensDefSection[6]-RetiensDefSection[5];
+    MSection[4]-MSection[1]=RetiensDefSection[6]-RetiensDefSection[5];
+    if RemplisSection:
+    fill polygone(MSection1,MSection2,MSection3,MSection4) withcolor CouleurSection;
+    fi;
+%    DotLabel.top(TEX("M1"),MSection[1]);
+%    DotLabel.top(TEX("M2"),MSection[2]);
+%    DotLabel.top(TEX("M3"),MSection[3]);
+%    DotLabel.top(TEX("M4"),MSection[4]);
+%    if RemplisSection:
+%    fill polygone(MSection1,MSection2,MSection3,MSection4) withcolor CouleurSection;
+%    fi;
+%    trace polygone(MSection1,MSection2,MSection3,MSection4);
+    color dcer,ccer;
+    % 1er cote -> ok
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]);
+    draw chemin(MSection1,MSection2) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi;
+    % 2eme cote
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[4],RetiensDefSection[3],RetiensDefSection[4]+RetiensDefSection[6]-RetiensDefSection[5]);
+    draw chemin(MSection2,MSection3) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi;
+    % 3eme cote
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]);
+    draw chemin(MSection3,MSection4) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi;
+    % 4eme cote
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[4],RetiensDefSection[3],RetiensDefSection[4]+RetiensDefSection[6]-RetiensDefSection[5]);
+    draw chemin(MSection4,MSection1) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi;
+    else:
+    %face 
+    for p_=#5:
+    if numeric p_:
+    numretienssection:=numretienssection+1;
+    RetiensSection[numretienssection]=p_;
+    elseif color p_:
+    numretiensdefsection:=numretiensdefsection+1;
+    RetiensDefSection[numretiensdefsection]=p_;
+    fi;    
+    endfor;
+    % On dessine la section
+    MSection[1]=(RetiensSection[1])[RetiensDefSection[1],RetiensDefSection[2]];
+    MSection[2]-MSection[1]=RetiensDefSection[4]-RetiensDefSection[3];
+    MSection[3]-MSection[2]=RetiensDefSection[5]-RetiensDefSection[4];
+    MSection[4]-MSection[1]=MSection[3]-MSection[2];
+%    DotLabel.top(TEX("M1"),MSection[1]);
+%    DotLabel.top(TEX("M2"),MSection[2]);
+%    DotLabel.top(TEX("M3"),MSection[3]);
+%    DotLabel.top(TEX("M4"),MSection[4]);
+    if RemplisSection:
+    fill polygone(MSection1,MSection2,MSection3,MSection4) withcolor CouleurSection;
+    fi;
+    color dcer,ccer;
+    % 1er cote -> ok
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]);
+    draw chemin(MSection1,MSection2) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi;
+    % 2eme cote
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[5],RetiensDefSection[4],RetiensDefSection[5]+RetiensDefSection[1]-RetiensDefSection[2]);
+    draw chemin(MSection2,MSection3) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi;
+    % 3eme cote
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]);
+    draw chemin(MSection3,MSection4) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi;
+    % 4eme cote
+    dcer:=Oeil-RetiensDefSection[4];
+    ccer:=Normal(RetiensDefSection[5],RetiensDefSection[4],RetiensDefSection[5]+RetiensDefSection[1]-RetiensDefSection[2]);
+    draw chemin(MSection4,MSection1) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi;
+    fi;
+    %On trace la section considérée
+    %trace polygone(MSection1,MSection2,MSection3,MSection4);
+    fi;
+
+    trace Pave(A,B,C,D,E,F,G,H)(#3);
+    
+    DefinirSommetsSection(#4);
+    
+    if TraceArete=false:
+    currentpicture:=nullpicture;    
+    fi;
+    if NommeSommets:
+    EcrireSommetsPave(#2);
+    fi;
+    u:=0.25u;
+    marque_p:="croix";
+    nbcroix=0;
+    for p_=#1:
+    nbcroix:=nbcroix+1;
+    if nbcroix=4:
+    if Pointilles:
+    pointe(p_);
+    fi;
+    else:
+    pointe(p_);
+    fi;
+    endfor;
+    u:=1cm;
+    if Code:
+    \useKV[ClesSolides]{Traces};
+    fi;
+  \end{mplibcode}
+  \fi
+}
+
+\newcommand\MPSolideSphere[3]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    boolean NommeSommets,Code,Sections,Axes,RemplisSection;
+    NommeSommets=\useKV[ClesSolides]{Sommets};
+    Code=\useKV[ClesSolides]{Code};
+    Axes:=\useKV[ClesSolides]{Axes};
+    Sections=\useKV[ClesSolides]{Sections};
+    RemplisSection=\useKV[ClesSolides]{RemplisSection};
+    if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi;
+    %Initialisation
+    PfCRho=\useKV[ClesSolides]{Rho};
+    PfCPhi=0;%\useKV[ClesSolides]{Phi};
+    PfCTheta=10;%\useKV[ClesSolides]{Theta};
+    PfCDistance=\useKV[ClesSolides]{Distance};
+    CoefSection=\useKV[ClesSolides]{CoefSection};
+    anglerotationx=\useKV[ClesSolides]{Anglex};
+    rayonsphere=\useKV[ClesSolides]{RayonSphere};
+    
+    color PfCOutColor;
+    PfCOutColor=\useKV[ClesSolides]{Couleur};
+    input PfCSolid;
+    
+    vardef BaseSphere=
+    save Cer;
+    picture Cer;
+    color PtInter.iso,PtInter[];
+    vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef;
+    subh:=72;
+    Cer=image(%
+    if Sections:
+    if RemplisSection:fill (Cercles(Image((0,0,0)),Image((0,1,0)),Image((0,0,0)),Image((0,1,0)),Image((-1,0,0))) scaled (sqrt(1-(abs(CoefSection+0.02))**2))) shifted(Projette(MSection1-Sommet1)) withcolor CouleurSection; fi;
+    fi;
+    %Equateur
+    umin:=0; umax:=pi/nb; upas:=pi/nb;
+    vmin:=0; vpas:=2*pi/subh; vmax:=2*pi;
+    for l=0 upto subh-1:
+    PtInter[1]:=Image(Famille(umin+(0+1)*upas,vmin+l*vpas));
+    PtInter[2]:=Image(Famille(umin+0*upas,vmin+l*vpas));
+    PtInter[3]:=Image(Famille(umin+0*upas,vmin+(l+1)*vpas));
+    PtInter[4]:=Image(Famille(umin+(0+1)*upas,vmin+(l+1)*vpas));
+    PtInter.iso:=(PtInter[1]+PtInter[2]+PtInter[3]+PtInter[4])/4;
+    if ProduitScalaire(Oeil-PtInter.iso,Normal(PtInter.iso,PtInter[4],PtInter[1]))>=0:
+    if Sections:
+    draw (segment(PtInter[3],PtInter[2]) scaled (sqrt(1-(abs(CoefSection+0.02))**2))) shifted(Projette(MSection1-Sommet1));
+    fi;
+    draw segment(PtInter[3],PtInter[2]);
+    else:
+    if l mod 2=0:
+    if Sections:
+    draw (segment(PtInter[3],PtInter[2]) scaled (sqrt(1-(abs(CoefSection+0.02))**2))) shifted(Projette(MSection1-Sommet1));
+    fi;
+    draw segment(PtInter[3],PtInter[2]);
+    fi;
+    fi;
+    endfor;
+    
+    % "Exterieur"
+    nb:=72;
+    subh:=18;
+    umin:=-pi; umax:=pi; upas:=2*pi/nb;
+    vpas:=2*pi/subh; vmin:=pi/2; vmax:=2*pi;
+    for k=0 upto nb-1:
+    PtInter[1]:=Image(Famille(umin+(k+1)*upas,vmin+0*vpas));
+    PtInter[2]:=Image(Famille(umin+k*upas,vmin+0*vpas));
+    PtInter[3]:=Image(Famille(umin+k*upas,vmin+(0+1)*vpas));
+    PtInter[4]:=Image(Famille(umin+(k+1)*upas,vmin+(0+1)*vpas));
+    PtInter.iso:=(PtInter[1]+PtInter[2]+PtInter[3]+PtInter[4])/4;
+    draw segment(PtInter[2],PtInter[1]);
+    endfor;
+    );
+    Cer
+    enddef;
+
+    Figure(-10u,-10u,10u,10u);
+    Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance);
+    typetrace:="3D";
+    typerepre:="persp";
+    eclairage:=false;
+    nb:=24;%36
+    subh:=36;%
+    incolor:=blue;
+    outcolor:=white;%PfCOutColor;
+    Ferme1:=true;
+    angx:=anglerotationx;
+    Objetsphere1("R="&decimal(rayonsphere));
+    % traits:=false;
+    % AffichageObjet1;
+    color Sommet[],SommetN,SommetS,SommetB;
+    Sommet1=(0,0,0);
+    Sommet2=(0,rayonsphere,0);
+    Sommet3=(-rayonsphere,0,0);
+    Sommet4=(0,0,rayonsphere);
+    SommetN=Sommet4;
+    SommetS=(0,0,-rayonsphere);
+    SommetB=(rayonsphere,0,0);
+    Sommet2:=RotXYZ(Sommet2);
+    Sommet3:=RotXYZ(Sommet3);
+    Sommet4:=RotXYZ(Sommet4);
+    SommetN:=RotXYZ(SommetN);
+    SommetS:=RotXYZ(SommetS);
+    SommetB:=RotXYZ(SommetB);
+    color MSection[];
+    MSection[1]=CoefSection[Sommet1,SommetN];
+    MSection[2]=Image((0,sqrt(1-CoefSection**2),CoefSection));    
+
+    trace BaseSphere;
+
+    DefinirSommets(#1);
+    DefinirSommetsSection(#3);
+
+    if Axes:
+    draw segment(1.25[SommetN,SommetS],1.25[SommetS,SommetN]) dashed dashpattern(on6 off3 on3 off3);
+    remplis (fullcircle scaled 1mm) shifted(Projette(SommetN));
+    remplis (fullcircle scaled 1mm) shifted(Projette(SommetS));
+    fi;
+
+    if Code:
+    \useKV[ClesSolides]{Traces};
+    fi;
+
+  \end{mplibcode}
+  \fi
+}
+
+\def\UpdatetoksSolide#1\nil{\addtotok\toksolidelistesommets{"#1",}}
+\newtoks\toksolidelistesommets%
+\newtoks\toksolidelistepointssections%
+
+\newcommand\Solide[1][]{%
+  \useKVdefault[ClesSolides]%
+  \setKV[ClesSolides]{#1}%
+  \setsepchar{,}\ignoreemptyitems%
+  \xdef\foo{\useKV[ClesSolides]{ListeSommets}}%
+  \readlist*\ListeNomSommet{\foo}%\showitems\ListeNomSommet
+  \reademptyitems%
+  \toksolidelistesommets{}
+  \foreachitem\compteur\in\ListeNomSommet{\expandafter\UpdatetoksSolide\compteur\nil}%\the\toksolidelistesommets%
+  \IfStrEqCase{\useKV[ClesSolides]{Nom}}{%
+    {cube}{%
+      \MPSolidePave{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{1,1,1}{\useKV[ClesSolides]{PointsSection}}{\useKV[ClesSolides]{ObjetSection}}%
+    }%
+    {pave}{%
+      \MPSolidePave{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{Profondeur},\useKV[ClesSolides]{Largeur},\useKV[ClesSolides]{Hauteur}}{\useKV[ClesSolides]{PointsSection}}{\useKV[ClesSolides]{ObjetSection}}%
+    }%
+    {cone}{%
+      \MPSolideCone{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}%
+    }%
+    {pyramide}{%
+      \MPSolidePyramide{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{DecalageSommet}}{\useKV[ClesSolides]{PointsSection}}%
+    }%
+    {cylindre}{%
+      \MPSolideCylindre{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}%
+    }%
+    {sphere}{%
+      \MPSolideSphere{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSolides.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSommeAngles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSommeAngles.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSommeAngles.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,335 @@
+%%%
+% Somme des angles
+%%%
+\setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Rectangle=false,Figure=false,FigureSeule=false,Angle=0,Perso=false,Echelle=1cm}%
+
+\def\MPFigureSommeAngle#1#2#3#4#5{%
+    % #1 Premier sommet
+    % #2 Deuxi\`eme sommet
+    % #3 Troisi\`eme sommet
+    % #4 1er angle
+    % #5 2eme angle
+  \ifluatex
+  %\mplibcodeinherit{enable}
+  \mplibforcehmode
+  \begin{mplibcode}
+    pair A,B,C,O,I;%
+    u:=\useKV[ClesSommeAngle]{Echelle};
+    Angle:=\useKV[ClesSommeAngle]{Angle};
+    boolean Rectangle,Isocele;
+    Rectangle=\useKV[ClesSommeAngle]{Rectangle};%
+    Isocele=\useKV[ClesSommeAngle]{Isocele};
+    A=u*(1,1);
+    B-A=u*(4,0);
+    if Rectangle:
+    C=3/5[B,rotation(A,B,-90)];
+    else:
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    fi;
+    O=CentreCercleC(A,B,C);
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=rotation(A,O,Angle);
+    B:=rotation(B,O,Angle);
+    C:=rotation(C,O,Angle);
+    % On d\'efinit le centre du cercle inscrit
+    I=CentreCercleI(A,B,C);
+    % on dessine \`a main lev\'ee :)
+    path triangle;
+    triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+    % pour marquer les angles
+    path cc;
+    cc=fullcircle scaled 1u;
+    picture MAngle;
+    path cd; pair M[];
+    MAngle=image(%
+    if Isocele:%
+    if Rectangle:
+    trace codeperp(A,B,C,5);
+    cd=A--(A+B+C)/3;
+    M1=cd intersectionpoint (cc shifted A);
+    trace 9/10[A,M1]--11/10[A,M1];
+    cd:=C--(A+B+C)/3;
+    M1:=cd intersectionpoint (cc shifted C);
+    trace 9/10[C,M1]--11/10[C,M1];
+    else:
+    cd=B--(A+B+C)/3;
+    M1=cd intersectionpoint (cc shifted B);
+    trace 9/10[B,M1]--11/10[B,M1];
+    cd:=C--(A+B+C)/3;
+    M1:=cd intersectionpoint (cc shifted C);
+    trace 9/10[C,M1]--11/10[C,M1];
+    fi;
+    fi;
+    if Rectangle:
+    trace codeperp(A,B,C,5);
+    else:
+    draw (cc shifted B);
+    fi;
+    draw (cc shifted A);
+    draw (cc shifted C);
+    );
+    draw MAngle;
+    clip currentpicture to triangle;
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    % on labelise
+    label(btex #1 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #3 etex,1.2[O,C]);
+    % Codage
+    if Isocele:
+    marque_s:=marque_s/2;
+    if Rectangle:
+    draw Codelongueur(A,B,B,C,2);
+    else:
+    draw Codelongueur(A,B,A,C,2);
+    fi;
+    marque_s:=marque_s*2;
+    fi;
+    % Affichage des angles:
+    if Isocele:
+    if Rectangle:
+    label(btex ? etex,A+0.95u*unitvector(I-A));
+    else:
+    if #4>#5:%Cas où b est vide donc on affiche la mesure commune
+    label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
+    label(btex ? etex,B+0.95u*unitvector(I-B));
+    else:
+    label(btex $\ang{#5}$ etex,B+0.95u*unitvector(I-B));
+    label(btex ? etex,A+0.95u*unitvector(I-A));
+    fi;
+    fi;
+    else:
+    if Rectangle:
+    if #4>#5:
+    label(btex $\ang{#4}$ etex,C+0.95u*unitvector(I-C));
+    else:
+    label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+    fi;
+    else:
+    label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+    label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+    fi;
+    label(btex ? etex,A+0.95u*unitvector(I-A));
+    fi;
+  \end{mplibcode}
+  %\mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesSommeAngle]{Echelle};boolean Rectangle,Isocele;
+      Rectangle=\useKV[ClesSommeAngle]{Rectangle};Isocele=\useKV[ClesSommeAngle]{Isocele};Angle:=\useKV[ClesSommeAngle]{Angle};}]
+    pair A,B,C,O,I;%
+    A=u*(1,1);
+    B-A=u*(4,0);
+    if Rectangle:
+    C=3/5[B,rotation(A,B,-90)];
+    else:
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    fi;
+    O=CentreCercleC(A,B,C);
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=rotation(A,O,Angle);
+    B:=rotation(B,O,Angle);
+    C:=rotation(C,O,Angle);
+    % On d\'efinit le centre du cercle inscrit
+    I=CentreCercleI(A,B,C);
+    % on dessine \`a main lev\'ee :)
+    path triangle;
+    triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+    % pour marquer les angles
+    path cc;
+    cc=fullcircle scaled 1u;
+    picture MAngle;
+    path cd; pair M[];
+    MAngle=image(%
+    if Isocele:%
+    if Rectangle:
+    trace codeperp(A,B,C,5);
+    cd=A--(A+B+C)/3;
+    M1=cd intersectionpoint (cc shifted A);
+    trace 9/10[A,M1]--11/10[A,M1];
+    cd:=C--(A+B+C)/3;
+    M1:=cd intersectionpoint (cc shifted C);
+    trace 9/10[C,M1]--11/10[C,M1];
+    else:
+    cd=B--(A+B+C)/3;
+    M1=cd intersectionpoint (cc shifted B);
+    trace 9/10[B,M1]--11/10[B,M1];
+    cd:=C--(A+B+C)/3;
+    M1:=cd intersectionpoint (cc shifted C);
+    trace 9/10[C,M1]--11/10[C,M1];
+    fi;
+    fi;
+    if Rectangle:
+    trace codeperp(A,B,C,5);
+    else:
+    draw (cc shifted B);
+    fi;
+    draw (cc shifted A);
+    draw (cc shifted C);
+    );
+    draw MAngle;
+    clip currentpicture to triangle;
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    % on labelise
+    label(btex #1 etex,1.2[O,A]);
+    label(btex #2 etex,1.2[O,B]);
+    label(btex #3 etex,1.2[O,C]);
+    % Codage
+    if Isocele:
+    marque_s:=marque_s/2;
+    if Rectangle:
+    draw Codelongueur(A,B,B,C,2);
+    else:
+    draw Codelongueur(A,B,A,C,2);
+    fi;
+    marque_s:=marque_s*2;
+    fi;
+    % Affichage des angles:
+    if Isocele:
+    if Rectangle:
+    label(btex ? etex,A+0.95u*unitvector(I-A));
+    else:
+    if #4>#5:%Cas où b est vide donc on affiche la mesure commune
+    label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
+    label(btex ? etex,B+0.95u*unitvector(I-B));
+    else:
+    label(btex $\ang{#5}$ etex,B+0.95u*unitvector(I-B));
+    label(btex ? etex,A+0.95u*unitvector(I-A));
+    fi;
+    fi;
+    else:
+    if Rectangle:
+    if #4>#5:
+    label(btex $\ang{#4}$ etex,C+0.95u*unitvector(I-C));
+    else:
+    label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+    fi;
+    else:
+    label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+    label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+    fi;
+    label(btex ? etex,A+0.95u*unitvector(I-A));
+    fi;
+  \end{mpost}
+  \fi
+}
+
+\xdef\RedactionSomme{}
+
+\newcommand\RedactionSom[4][]{%
+  % #1 : nom du triangle pA pB pC
+  % #2 : mesure de l'angle pApBpC
+  % #3 : mesure de l'angle pBpCpA
+  \useKVdefault[ClesSommeAngle]%
+  \setKV[ClesSommeAngle]{#1}%
+  % On r\'ecup\`ere les noms des sommets.
+  \StrMid{#2}{1}{1}[\NomA]%
+  \StrMid{#2}{2}{2}[\NomB]%
+  \StrMid{#2}{3}{3}[\NomC]%
+  \xdef\NomTriangle{\NomA\NomB\NomC}%
+  \xdef\NomSommetB{\NomB}%
+  \xdef\NomSommetA{\NomA}%
+  \xdef\NomSommetC{\NomC}%
+  % On r\'edige
+  \ifboolKV[ClesSommeAngle]{Perso}{\RedactionSomme}{Dans le triangle $\NomA\NomB\NomC$, \ifboolKV[ClesSommeAngle]{Rectangle}{ rectangle \ifboolKV[ClesSommeAngle]{Isocele}{isocèle }{}en $\NomB$, }{\ifboolKV[ClesSommeAngle]{Isocele}{ isoc\`ele en $\NomA$, }}%
+    on a :}%
+  \ifboolKV[ClesSommeAngle]{Rectangle}{%
+    \ifboolKV[ClesSommeAngle]{Isocele}{%
+      \ifx\bla#3\bla%
+      \begin{align*}
+        2\times\widehat{\NomB\NomA\NomC}&=\ang{90}\\%
+        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\frac{\ang{90}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{45}}%
+      \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{45}}{}%
+      \end{align*}
+      \fi
+    }{%
+      \ifx\bla#3\bla%
+      \begin{align*}
+        \widehat{\NomB\NomA\NomC}+\widehat{\NomB\NomC\NomA}&=\ang{90}\\%
+        \widehat{\NomB\NomA\NomC}+\ang{#4}&=\ang{90}\\%
+        \xdef\totalangle{\fpeval{90-#4}}\ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{90}-\ang{#4}\\}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}%
+      \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}{}%
+      \end{align*}
+      \fi
+    }%
+  }{%
+    \ifboolKV[ClesSommeAngle]{Isocele}{%
+      \ifx\bla#4\bla%
+      \begin{align*}%
+        \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        2\times\ang{#3}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        \xdef\sommeangle{\fpeval{2*#3}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%
+                                                                                                                               \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}%
+      \end{align*}%
+      \xdef\ResultatAngle{\totalangle}%
+      \else%
+      \begin{align*}%
+        \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        2\times\widehat{\NomA\NomB\NomC}+\ang{#4}&=\ang{180}\\%
+        \xdef\totalangle{\fpeval{180-#4}}%
+        \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{180}-\ang{#4}\\}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}%
+        \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}%
+        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}}%\\
+        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}\\}{}%
+      \end{align*}%
+      \xdef\ResultatAngle{\fpeval{0.5*(180-#4)}}%
+      \fi%
+    }{%
+      \begin{align*}%
+        \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        \ang{#3}+\ang{#4}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        \xdef\sommeangle{\fpeval{#3+#4}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%\\
+        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}%
+      \end{align*}%
+      \xdef\ResultatAngle{\totalangle}%
+    }%
+  }%
+}%
+
+\newcommand\SommeAngles[4][]{% Macro calculant la mesure de l'angle pCpApB
+  % #1 : nom du triangle pA pB pC
+  % #2 : mesure de l'angle pApBpC
+  % #3 : mesure de l'angle pBpCpA
+  \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe.
+  \setKV[ClesSommeAngle]{#1}%lit les arguments optionnels
+  % On r\'ecup\`ere les noms des sommets.
+  \StrMid{#2}{1}{1}[\NomA]%
+  \StrMid{#2}{2}{2}[\NomB]%
+  \StrMid{#2}{3}{3}[\NomC]%
+  % Figure ou pas ?
+  \ifboolKV[ClesSommeAngle]{FigureSeule}{%
+    \ifx\bla#3\bla%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}%
+    \else%
+    \ifx\bla#4\bla%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}%
+    \else%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}%
+    \fi%
+    \fi%
+  }{%
+    \ifboolKV[ClesSommeAngle]{Figure}{%
+      \begin{multicols}{2}%
+        {\em La figure est donn\'ee \`a titre indicatif.}%
+        \ifx\bla#3\bla%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}\]%
+        \else%
+        \ifx\bla#4\bla%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}\]%
+        \else%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}\]%
+        \fi%
+        \fi%
+        \par\columnbreak\par%
+        \RedactionSom[#1]{#2}{#3}{#4}%
+      \end{multicols}%
+    }{% on r\'edige
+      \RedactionSom[#1]{#2}{#3}{#4}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSommeAngles.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSquaro.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCSquaro.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCSquaro.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,107 @@
+%%%
+% Squaro
+%%%
+\setKVdefault[Squaro]{Solution=false,Longueur=8,Largeur=8,Echelle=8mm,Nom=Jeu1,Graines=false}
+\defKV[Squaro]{Graine=\setKV[Squaro]{Graines}}%
+
+\NewDocumentCommand\SquarO{o}{%
+  \useKVdefault[Squaro]%
+  \setKVdefault[Squaro]{#1}%
+  \ifboolKV[Squaro]{Solution}{\BuildSquaroSolution}{\BuildSquaro}%
+}
+
+\NewDocumentCommand\BuildSquaro{}{%
+  \ifluatex
+    \mplibforcehmode
+  \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}%
+  \begin{mplibcode}[\PfCSquaroNom]
+    numeric Longueur,Largeur;
+    Longueur=\useKV[Squaro]{Longueur};
+    Largeur=\useKV[Squaro]{Largeur};
+    boolean Solution,Graines;
+    Solution=\useKV[Squaro]{Solution};
+    Graines:=\useKV[Squaro]{Graines};
+    if Graines:
+    randomseed:=\useKV[Squaro]{Graine};
+    fi;
+    
+    u:=\useKV[Squaro]{Echelle};
+    
+    p:=0;
+    pair A[];%centre des carrés.
+    boolean Allume[][];
+    
+    for k=0 upto Longueur-1:
+    for l=0 upto Largeur-1:
+    p:=p+1;
+    A[p]=u*(k,-l);
+    trace (unitsquare scaled u) shifted A[p];
+    endfor;
+    endfor;
+
+    for k=0 upto Largeur:
+    for l=0 upto Longueur:
+    m:=uniformdeviate(1);
+    if m<0.5:
+    Allume[k][l]=true;
+    fill cercles(u*(l,-k+1),1mm) if Solution=false:withcolor white fi;
+    else:
+    Allume[k][l]=false;
+    fill cercles(u*(l,-k+1),1mm) withcolor white;
+    fi;
+    trace cercles(u*(l,-k+1),1mm);
+    endfor;
+    endfor;
+
+    for k=0 upto Largeur-1:
+    for l=0 upto Longueur-1:
+    Retiens:=0;
+    if Allume[k][l]:Retiens:=Retiens+1 fi;
+    if Allume[k][l+1]:Retiens:=Retiens+1 fi;
+    if Allume[k+1][l]:Retiens:=Retiens+1 fi;
+    if Allume[k+1][l+1]:Retiens:=Retiens+1 fi;
+    label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5));
+    endfor;
+    endfor;
+ \end{mplibcode}
+ \fi
+}
+
+\NewDocumentCommand\BuildSquaroSolution{}{%
+  \ifluatex
+  \mplibforcehmode
+  \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}%
+  \begin{mplibcode}[\PfCSquaroNom]
+    u:=\useKV[Squaro]{Echelle};
+    p:=0;
+    for k=0 upto Longueur-1:
+    for l=0 upto Largeur-1:
+    p:=p+1;
+    trace (unitsquare scaled u) shifted A[p];
+    endfor;
+    endfor;
+
+    for k=0 upto Largeur:
+    for l=0 upto Longueur:
+    if Allume[k][l]=true:
+    fill cercles(u*(l,-k+1),1mm);
+    else:
+    fill cercles(u*(l,-k+1),1mm) withcolor white;
+    fi;
+    trace cercles(u*(l,-k+1),1mm);
+    endfor;
+    endfor;
+
+    for k=0 upto Largeur-1:
+    for l=0 upto Longueur-1:
+    Retiens:=0;
+    if Allume[k][l]:Retiens:=Retiens+1 fi;
+    if Allume[k][l+1]:Retiens:=Retiens+1 fi;
+    if Allume[k+1][l]:Retiens:=Retiens+1 fi;
+    if Allume[k+1][l+1]:Retiens:=Retiens+1 fi;
+    label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5));
+    endfor;
+    endfor;
+ \end{mplibcode}
+ \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCSquaro.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,1719 @@
+%%%
+% Statistiques
+%%%
+\newcommand\NbDonnees{}%
+\newcommand\SommeDonnees{}%
+\newcommand\EffectifTotal{}%
+\newcommand\Moyenne{}%
+\newcommand\Etendue{}%
+\newcommand\Mediane{}%
+\newcommand\DonneeMax{}%
+\newcommand\DonneeMin{}%
+\newcommand\EffectifMax{}%
+
+\setKVdefault[ClesStat]{ColVide=0,CaseVide=false,EffVide=false,%
+FreqVide=false,AngVide=false,ECCVide=false,TotalVide=false,Sondage=false,Liste=false,%
+Tableau=false,Stretch=1,Frequence=false,EffectifTotal=false,%
+Etendue=false,Moyenne=false,SET=false,ValeurExacte=false,Mediane=false,QuartileUn=false,QuartileTrois=false,Total=false,Concret=false,%
+Unite={},Largeur=1cm,Precision=2,PrecisionF=0,Donnee=Valeurs,Effectif=Effectif,Grille=false,Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,ECC=false,Coupure=10,CouleurTab=gray!15,Graphique=false,Batons=true,%
+% Pour les diags batons
+EpaisseurBatons=1,ListeCouleursB={a},Lecture=false,LectureFine=false,AideLecture=false,Reponses=false,DonneesSup=false,AbscisseRotation=false,Tiret=false,AngleRotationAbscisse=0,Pasx=1,Pasy=1,Unitex=0.5,Unitey=0.5,Depart=0,CouleurDefaut=black,%
+% Pour les diags circulaires
+Rayon=3cm,AffichageAngle=false,AffichageDonnee=false,ListeCouleurs={white},Hachures=false,LectureInverse=false,EcartHachures=0.25,EpaisseurHachures=1,Legende,LegendeVide=false,ACompleter=false,%
+%Pour les représentations
+Representation=false,%
+%Pour les barres horizontales
+Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dispo
+}%
+%compl\'ements
+\defKV[ClesStat]{AngleRotationAbscisse=\setKV[ClesStat]{AbscisseRotation}}%
+\defKV[ClesStat]{AffichageDonnees=\setKV[ClesStat]{AffichageAngle=false}\setKV[ClesStat]{AffichageDonnee}}%
+\defKV[ClesStat]{CasesVides=\setKV[ClesStat]{CaseVide}}%
+\defKV[ClesStat]{LegendesVides=\setKV[ClesStat]{LegendeVide}}%
+% La construction du tableau
+\def\addtotok#1#2{#1\expandafter{\the#1#2}}%
+\newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc%
+\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{\ifboolKV[ClesStat]{Qualitatif}{&#1}{&\num{#1}}}\addtotok\tabtoksb{&\num{#2}}}%
+%
+\newcounter{PfCCompteLignes}%
+%
+\def\BuildtabStat{% %%Tableau sans total
+  \setcounter{PfCCompteLignes}{0}%
+  \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
+  \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}%
+  \ifboolKV[ClesStat]{Total}{%
+    \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}%
+    \begin{NiceTabular}{c*{\fpeval{\ListeCompletelen+1}}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}}}%
+      \CodeBefore%
+      \rowcolor{\useKV[ClesStat]{CouleurTab}}{1}%
+      \columncolor{\useKV[ClesStat]{CouleurTab}}{1}%
+      \Body%
+      \the\tabtoksa&Total\\%
+      \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb&\num{\EffectifTotal}}\\%
+      \ifboolKV[ClesStat]{Frequence}{\stepcounter{PfCCompteLignes}Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\num{\CalculFrequence{##1}}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}\\}{}%
+      \ifboolKV[ClesStat]{Angle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}\\}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}\\}{}%
+      \ifboolKV[ClesStat]{ECC}{\stepcounter{PfCCompteLignes}E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}\\}{}%
+      \CodeAfter%
+      % On crée la liste des colonnes à vider
+      \xintifboolexpr{\useKV[ClesStat]{ColVide}>0}{%
+        \xdef\FooStat{\useKV[ClesStat]{ColVide}}%
+        \setsepchar{,}%
+        \readlist*\ListeColonnesAVider{\FooStat}%
+        \foreachitem\compteur\in\ListeColonnesAVider{%
+          \tikz\fill[white] (row-2-|col-\fpeval{\compteur+1}) rectangle (last-|col-\fpeval{\compteur+2});%
+        }%
+      }{}%
+      % On crée la liste des cases à vider
+      \ifboolKV[ClesStat]{CaseVide}{%
+        \xdef\FooStatCases{\useKV[ClesStat]{CasesVides}}%
+        \setsepchar[*]{,*/}%
+        \readlist*\ListeCasesAVider{\FooStatCases}%
+        \foreachitem\compteur\in\ListeCasesAVider{%
+          \tikz\fill[white] (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+1}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+1}) rectangle (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+2}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+2});%
+        }%
+      }{}%
+      % On retrace le tableau
+      %Les colonnes
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{\ListeCompletelen+3}}}\do{%
+        \tikz\draw (row-1-|col-##1) -- (last-|col-##1);%
+      }%
+      % Les lignes
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{\thePfCCompteLignes+3}}}\do{%
+        \tikz\draw (row-##1-|col-1) -- (row-##1-|last);%
+      }%
+    \end{NiceTabular}%
+  }{%
+    \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}%
+    \begin{NiceTabular}{c*{\fpeval{\ListeCompletelen}}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}}}%
+      \CodeBefore%
+      \rowcolor{\useKV[ClesStat]{CouleurTab}}{1}%
+      \columncolor{\useKV[ClesStat]{CouleurTab}}{1}%
+      \Body%
+      \the\tabtoksa\\%
+      \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb}\\%
+      \ifboolKV[ClesStat]{Frequence}{\stepcounter{PfCCompteLignes}Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\num{\CalculFrequence{##1}}}}}\\}{}%
+      \ifboolKV[ClesStat]{Angle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\}{}%
+      \ifboolKV[ClesStat]{ECC}{\stepcounter{PfCCompteLignes}E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\}{}%
+      \CodeAfter%
+      % On crée la liste des colonnes à vider
+      \xintifboolexpr{\useKV[ClesStat]{ColVide}>0}{%
+        \xdef\FooStat{\useKV[ClesStat]{ColVide}}%
+        \setsepchar{,}%
+        \readlist*\ListeColonnesAVider{\FooStat}%
+        \foreachitem\compteur\in\ListeColonnesAVider{%
+          \tikz\fill[white] (row-2-|col-\fpeval{\compteur+1}) rectangle (last-|col-\fpeval{\compteur+2});%
+        }%
+      }{}%
+      % On crée la liste des cases à vider
+      \ifboolKV[ClesStat]{CaseVide}{%
+        \xdef\FooStatCases{\useKV[ClesStat]{CasesVides}}%
+        \setsepchar[*]{,*/}%
+        \readlist*\ListeCasesAVider{\FooStatCases}%
+        \foreachitem\compteur\in\ListeCasesAVider{%
+          \tikz\fill[white] (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+1}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+1}) rectangle (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+2}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+2});%
+        }%
+      }{}%
+      % On retrace le tableau
+      %Les colonnes
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{\ListeCompletelen+2}}}\do{%
+        \tikz\draw (row-1-|col-##1) -- (last-|col-##1);%
+      }%
+      % Les lignes
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{\thePfCCompteLignes+3}}}\do{%
+        \tikz\draw (row-##1-|col-1) -- (row-##1-|last);%
+      }%
+    \end{NiceTabular}%
+  }%
+}%
+
+% Pour construire le diagramme en barres horizontales
+\def\UpdatetoksHor#1/#2/#3\nil{\addtotok\toklistenomhor{"#1",}\addtotok\toklistedonhor{#3,}\addtotok\toklisteaffhor{"#2",}}%
+
+\newcommand\buildgraphbarhor{%
+  \newtoks\toklistenomhor%
+  \newtoks\toklistedonhor%
+  \newtoks\toklisteaffhor%
+  \newtoks\toklistecouleur%
+  \xdef\PfCfooStat{}%
+  \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+    \xdef\PfCfooStat{\PfCfooStat \ListeComplete[##1,2],}%
+  }%
+  \xdef\DivMax{\fpeval{max(\PfCfooStat)}}%
+  \xdef\ExposantDivMax{\fpeval{round(ln(\DivMax)/ln(10))}}%
+  \xdef\DivMax{\fpeval{10**\ExposantDivMax}}%
+  \xdef\PfCfooStat{}%
+  \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+    \xdef\PfCfooStat{\PfCfooStat \ListeComplete[##1,1]/\ListeComplete[##1,2]/\fpeval{\ListeComplete[##1,2]/\DivMax},}%
+  }%
+  \readlist*\ListeCompleteDiagHor{\PfCfooStat}%
+  \foreachitem\compteur\in\ListeCompleteDiagHor{\expandafter\UpdatetoksHor\compteur\nil}%
+  \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}%
+  \readlist*\ListeCouleur{\ListeAvantCouleurs}%
+  \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
+  \NewMPDiagBarreHor{\the\toklistenomhor}{\the\toklistedonhor}{\the\toklisteaffhor}{\the\toklistecouleur}%
+}%
+
+% Pour construire le diagramme en bâtons
+\def\Updatetoks#1/#2\nil{\addtotok\toklistepoint{(#1,#2),}}%
+\newcommand\buildgraph[1][]{%
+  \newtoks\toklistepoint%
+  \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoks\compteur\nil}%
+  \newtoks\toklistecouleur%
+  \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleursB}}%
+  \readlist*\ListeCouleur{\ListeAvantCouleurs}%
+  \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
+  \MPStatNew{\the\toklistepoint}{\the\toklistecouleur}%
+}%
+
+% Pour construire le diagramme en bâtons qualitatif
+\def\Updatetoksq#1/#2\nil{\addtotok\toklistepointq{"#1",#2,}}%
+\newcommand\buildgraphq[1][]{%
+  \newtoks\toklistepointq%
+  \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}%
+  \newtoks\toklistecouleur%
+  \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleursB}}%
+  \readlist*\ListeCouleur{\ListeAvantCouleurs}%
+  \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
+  \MPStatNew{\the\toklistepointq}{\the\toklistecouleur}%
+}%
+
+\def\UpdateCoul#1\nil{\addtotok\toklistecouleur{#1,}}%
+\def\UpdateLegende#1\nil{\addtotok\toklistelegende{#1,}}%
+
+% Pour construire le diagramme circulaire qualitatif
+\def\buildgraphcq#1{%
+  \newtoks\toklistepointq\toklistepointq{}%
+  \newtoks\toklistecouleur\toklistecouleur{}%
+  \newtoks\toklistelegende\toklistelegende{}%
+  \ifboolKV[ClesStat]{LegendeVide}{%
+    \xdef\foo{\useKV[ClesStat]{LegendesVides}}%
+    \readlist*\ListeLegendesAEffacer{\foo}%
+  }{\xdef\foo{0}\readlist*\ListeLegendesAEffacer{\foo}%
+  }%
+  \foreachitem\compteur\in\ListeLegendesAEffacer{\expandafter\UpdateLegende\compteur\nil}%
+  %
+  \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}%
+  \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}%
+  \readlist*\ListeCouleur{\ListeAvantCouleurs}%
+  \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
+  \NewMPStatCirculaireQ{\the\toklistepointq}{#1}{\the\toklistecouleur}{\the\toklistelegende}%
+}%
+
+%% calcul des fr\'equences
+\newcommand\CalculFrequence[1]{%
+  \fpeval{round(\ListeComplete[#1,2]*100/\EffectifTotal,\useKV[ClesStat]{PrecisionF})}
+}
+
+%% calcul des angles
+\newcommand\CalculAngle[1]{%
+  \fpeval{round(\ListeComplete[#1,2]*360/\EffectifTotal,0)}
+}
+\newcommand\CalculSemiAngle[1]{%
+  \fpeval{round(\ListeComplete[#1,2]*180/\EffectifTotal,0)}
+}
+
+%% calcul des ECC
+\newcount\CompteurECC%
+\newcount\CompteurECCTotal%
+
+\newcommand\CalculECC[1]{%
+  \xdef\TotalECC{0}%
+  \CompteurECC=1%
+  \CompteurECCTotal=\numexpr#1+1%
+  \whiledo{\CompteurECC < \CompteurECCTotal}{%
+    \xdef\TotalECC{\fpeval{\TotalECC+\ListeComplete[\the\CompteurECC,2]}}%
+    \CompteurECC=\numexpr\CompteurECC+1%
+  }%
+  \num{\TotalECC}%
+}
+
+% Construction d'un diagramme en barres horizontal
+\newcommand\NewMPDiagBarreHor[4]{%
+  % #1 Liste des noms
+  % #2 Liste des valeurs associées
+  % #3 Liste des valeurs à afficher (si pb calcul MP)
+  % #4 Liste des couleurs
+  \ifluatex%
+  \mplibforcehmode%
+  \begin{mplibcode}%
+    Longueur:=\useKV[ClesStat]{Longueur};
+    Hauteur:=\useKV[ClesStat]{Hauteur};
+    Ecart:=\useKV[ClesStat]{EcartBarre};
+    ExposantDivMax:=\ExposantDivMax;
+    ecarthachures=\useKV[ClesStat]{EcartHachures};
+    epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
+    boolean Hachures;
+    Hachures=\useKV[ClesStat]{Hachures};
+    boolean Bicolore;
+    Bicolore=\useKV[ClesStat]{Bicolore};
+    boolean Grille;
+    Grille=\useKV[ClesStat]{Grille};
+    boolean AffichageDonnee;
+    AffichageDonnee=\useKV[ClesStat]{AffichageDonnee};
+    boolean LegendeVide;
+    LegendeVide=\useKV[ClesStat]{LegendeVide};
+    vardef CalculNombreDonneesEtDonneeMax(text t)=
+    nbdon:=0;%nombre de données
+    DonneeMax:=0;%donnée DonneeMaximale
+    for p_=t:
+    nbdon:=nbdon+1;
+    if p_>DonneeMax:
+    DonneeMax:=p_;
+    fi;
+    endfor;
+    enddef;
+    vardef ListeDonnees(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    Donnees[n]:=p_;
+    endfor;
+    enddef;
+    vardef RecuperationCouleurs(text t)=
+    color Col[];
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    Col[n]=p_;
+    endfor;
+    enddef;
+    vardef TraceDiag=
+    if Grille:
+    pair Zz[];%Pour déterminer "le dernier point"
+    Zz0=(0,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
+    Zz2=(0,(Hauteur+Ecart));
+    Zz1=((1/DonneeMax)*Longueur,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
+    Zz3=if ExposantDivMax=0 : (DonneeMax+1)[Zz0,Zz1] else: ((floor(DonneeMax*10+2))/10)[Zz0,Zz1];fi;
+    if ExposantDivMax=0:
+    for k=1 upto DonneeMax+1:
+    trace (Zz0--Zz2) shifted (k*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
+    endfor;
+    else:
+    for k=1 upto (floor(DonneeMax*10+2)):
+    trace (Zz0--Zz2) shifted ((k/10)*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
+    endfor;
+    fi;
+    if ExposantDivMax=0:
+    for k=1 upto (DonneeMax+1):
+    label.bot(TEX("\num{"&decimal(k)&"}"),Zz0+k*(Zz1-Zz0));
+    endfor;
+    else:
+    if ExposantDivMax<5:
+    for k=1 upto (floor(DonneeMax*10+2)):
+    label.bot(TEX("\num{\fpeval{"&decimal(k)&"*(10**"&decimal(ExposantDivMax-1)&")}}"),Zz0+(k/10)*(Zz1-Zz0));
+    endfor;
+    else:
+    dotlabel.bot(TEX("\num{\fpeval{10**"&decimal(ExposantDivMax)&"}}"),Zz1);
+    fi;
+    fi;
+    fi;
+    for k=0 upto nbdon-1:
+    path RectangleDonnee;
+    RectangleDonnee=(unitsquare xscaled ((Donnees[k+1]/DonneeMax)*Longueur) yscaled Hauteur) shifted(0,-k*(Hauteur+Ecart));
+    if Hachures:
+    fill RectangleDonnee withcolor white;
+    trace Hachurage(RectangleDonnee,60 if
+    (k mod 2)=0: +90 fi,ecarthachures,if (k mod 2)=0 : 0 else: 1 fi)
+    withpen pencircle scaled epaisseurhachures;
+    else:
+    remplis RectangleDonnee withcolor if unknown Col[k+1]: if Bicolore:Col[(k mod 2)+1] else: white fi; else:if Bicolore:Col[(k mod 2)+1] else: Col[k+1] fi; fi;
+    fi;
+    trace RectangleDonnee;
+    endfor;
+    if Grille:
+    drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(0,(Hauteur+Ecart)) withpen pencircle scaled 1.5;
+    drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(Zz3+u*(0.25,0)) withpen pencircle scaled 1.5;
+    fi;
+    enddef;
+    vardef AffichageNom(text t)=
+    k:=0;
+    for p_=t:
+    label.lft(TEX(p_),0.5[(0,0),(0,Hauteur)] shifted (0,-k*(Hauteur+Ecart)));
+    k:=k+1;
+    endfor;
+    enddef;
+    vardef AffichageDonnees(text t)=
+    k:=0;
+    for p_=t:
+    label.rt(TEX("\num{"&p_&"}"),0.5[(0,0),(0,Hauteur)] shifted (((Donnees[k+1]/DonneeMax)*Longueur),-k*(Hauteur+Ecart)));
+    k:=k+1;
+    endfor;
+    enddef;
+    CalculNombreDonneesEtDonneeMax(#2);
+    ListeDonnees(#2);
+    RecuperationCouleurs(#4);
+    TraceDiag;
+    if LegendeVide=false:
+    AffichageNom(#1);
+    fi;
+    if AffichageDonnee:
+    AffichageDonnees(#3);
+    fi;
+  \end{mplibcode}
+  \else%
+  \begin{mpost}[mpsettings={%
+      Longueur:=\useKV[ClesStat]{Longueur};
+      Hauteur:=\useKV[ClesStat]{Hauteur};
+      Ecart:=\useKV[ClesStat]{EcartBarre};
+      ExposantDivMax:=\ExposantDivMax;
+      ecarthachures=\useKV[ClesStat]{EcartHachures};
+      epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
+      boolean Hachures;
+      Hachures=\useKV[ClesStat]{Hachures};
+      boolean Bicolore;
+      Bicolore=\useKV[ClesStat]{Bicolore};
+      boolean Grille;
+      Grille=\useKV[ClesStat]{Grille};
+      boolean AffichageDonnee;
+      AffichageDonnee=\useKV[ClesStat]{AffichageDonnee};
+      boolean LegendeVide;
+      LegendeVide=\useKV[ClesStat]{LegendeVide};
+    }]
+    vardef CalculNombreDonneesEtDonneeMax(text t)=
+    nbdon:=0;%nombre de données
+    DonneeMax:=0;%donnée DonneeMaximale
+    for p_=t:
+    nbdon:=nbdon+1;
+    if p_>DonneeMax:
+    DonneeMax:=p_;
+    fi;
+    endfor;
+    enddef;
+    vardef ListeDonnees(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    Donnees[n]:=p_;
+    endfor;
+    enddef;
+    vardef RecuperationCouleurs(text t)=
+    color Col[];
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    Col[n]=p_;
+    endfor;
+    enddef;
+    vardef TraceDiag=
+    if Grille:
+    pair Zz[];%Pour déterminer "le dernier point"
+    Zz0=(0,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
+    Zz2=(0,(Hauteur+Ecart));
+    Zz1=((1/DonneeMax)*Longueur,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
+    Zz3=if ExposantDivMax=0 : (DonneeMax+1)[Zz0,Zz1] else: ((floor(DonneeMax*10+2))/10)[Zz0,Zz1];fi;
+    if ExposantDivMax=0:
+    for k=1 upto DonneeMax+1:
+    trace (Zz0--Zz2) shifted (k*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
+    endfor;
+    else:
+    for k=1 upto (floor(DonneeMax*10+2)):
+    trace (Zz0--Zz2) shifted ((k/10)*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
+    endfor;
+    fi;
+    if ExposantDivMax=0:
+    for k=1 upto (DonneeMax+1):
+    label.bot(LATEX("\num{"&decimal(k)&"}"),Zz0+k*(Zz1-Zz0));
+    endfor;
+    else:
+    if ExposantDivMax<5:
+    for k=1 upto (floor(DonneeMax*10+2)):
+    label.bot(LATEX("\num{\noexpand\fpeval{"&decimal(k)&"*(10**"&decimal(ExposantDivMax-1)&")}}"),Zz0+(k/10)*(Zz1-Zz0));
+    endfor;
+    else:
+    dotlabel.bot(LATEX("\num{\noexpand\fpeval{10**"&decimal(ExposantDivMax)&"}}"),Zz1);
+    fi;
+    fi;
+    fi;
+    for k=0 upto nbdon-1:
+    path RectangleDonnee;
+    RectangleDonnee=(unitsquare xscaled ((Donnees[k+1]/DonneeMax)*Longueur) yscaled Hauteur) shifted(0,-k*(Hauteur+Ecart));
+    if Hachures:
+    fill RectangleDonnee withcolor white;
+    trace Hachurage(RectangleDonnee,60 if
+    (k mod 2)=0: +90 fi,ecarthachures,if (k mod 2)=0 : 0 else: 1 fi)
+    withpen pencircle scaled epaisseurhachures;
+    else:
+    remplis RectangleDonnee withcolor if unknown Col[k+1]: if Bicolore:Col[(k mod 2)+1] else: white fi; else:if Bicolore:Col[(k mod 2)+1] else: Col[k+1] fi; fi;
+    fi;
+    trace RectangleDonnee;
+    endfor;
+    if Grille:
+    drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(0,(Hauteur+Ecart)) withpen pencircle scaled 1.5;
+    drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(Zz3+u*(0.25,0)) withpen pencircle scaled 1.5;
+    fi;
+    enddef;
+    vardef AffichageNom(text t)=
+    k:=0;
+    for p_=t:
+    label.lft(LATEX(p_),0.5[(0,0),(0,Hauteur)] shifted (0,-k*(Hauteur+Ecart)));
+    k:=k+1;
+    endfor;
+    enddef;
+    vardef AffichageDonnees(text t)=
+    k:=0;
+    for p_=t:
+    label.rt(LATEX("\num{"&p_&"}"),0.5[(0,0),(0,Hauteur)] shifted (((Donnees[k+1]/DonneeMax)*Longueur),-k*(Hauteur+Ecart)));
+    k:=k+1;
+    endfor;
+    enddef;
+    CalculNombreDonneesEtDonneeMax(#2);
+    ListeDonnees(#2);
+    RecuperationCouleurs(#4);
+    TraceDiag;
+    if LegendeVide=false:
+    AffichageNom(#1);
+    fi;
+    if AffichageDonnee:
+    AffichageDonnees(#3);
+    fi;
+  \end{mpost}
+  \fi%
+}%
+
+% Construction du graphique en bâtons
+\newcommand\MPStatNew[2]{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    maxx:=0;
+    maxy:=0;
+    unitex:=\useKV[ClesStat]{Unitex}*cm;
+    unitey:=\useKV[ClesStat]{Unitey}*cm;
+    xpartorigine:=\useKV[ClesStat]{Origine};
+    AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse};
+    boolean Rotation;
+    Rotation=\useKV[ClesStat]{AbscisseRotation};
+    boolean Lecture;
+    Lecture:=\useKV[ClesStat]{Lecture};
+    boolean LectureFine;
+    LectureFine:=\useKV[ClesStat]{LectureFine};
+    boolean AideLecture;
+    AideLecture:=\useKV[ClesStat]{AideLecture};
+    boolean DonneesSup;
+    DonneesSup:=\useKV[ClesStat]{DonneesSup};
+    boolean Reponses;
+    Reponses:=\useKV[ClesStat]{Reponses};
+    epaisseurbatons=\useKV[ClesStat]{EpaisseurBatons};
+    boolean Qualitatif;
+    Qualitatif=\useKV[ClesStat]{Qualitatif};
+    boolean Tiret;
+    Tiret=\useKV[ClesStat]{Tiret};
+    color CoulDefaut;
+    CoulDefaut=\useKV[ClesStat]{CouleurDefaut};
+    Depart=\useKV[ClesStat]{Depart};
+    % on r\'ecup\`ere les couleurs
+    color Col[];
+    n:=0;
+    for p_=#2:
+    n:=n+1;
+    if color p_:
+    Col[n]=p_;
+    else:
+    Col[n]=CoulDefaut;
+    fi;
+    endfor;
+    % 
+    pair A[],B[],P[];
+    vardef toto(text t)=%points quantitatif
+    n:=0;
+    for p_=t:
+    if pair p_:
+    n:=n+1;
+    P[n]=((xpart(p_)-(xpartorigine))*unitex,ypart(p_)*unitey);
+    if xpart(p_)>maxx:
+    maxx:=xpart(p_)-(xpartorigine);
+    fi;
+    if ypart(p_)>maxy:
+    maxy:=ypart(p_);
+    fi;
+    A[n]=unitex*(xpart(p_)-(xpartorigine),0);
+    B[n]=unitey*(0,ypart(p_));
+    fi;
+    endfor;
+    enddef;
+    vardef tutu(text t)=%points qualitatif
+    n:=0;
+    for p_=t:
+    if numeric p_:
+    P[n]=((n)*unitex,unitey*(p_-Depart));
+    B[n]=(0,unitey*(p_-Depart));
+    if p_>maxy:
+    maxy:=p_;
+    fi;
+    else:
+    n:=n+1;
+    A[n]=unitex*(n,0);
+    fi;
+    endfor;
+    maxy:=maxy-Depart;
+    maxx:=n;
+    enddef;
+    vardef tata(text t)=%affichage quantitatif
+    l=0;
+    for p_=t:
+    if pair p_:
+    l:=l+1;
+    if Rotation:
+    label.bot(TEX("\num{"&decimal(xpart(p_))&"}") rotated AngleRotation,A[l]);
+    else :
+    label.bot(TEX("\num{"&decimal(xpart(p_))&"}"),A[l]);
+    fi;
+    if Reponses:
+    if DonneesSup:
+    label.top(TEX("\num{"&decimal(ypart(p_))&"}"),P[l]);
+    else:
+    if Tiret:
+    trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
+    label.lft(TEX("\num{"&decimal(p_)&"}"),B[l]);
+    else:
+    dotlabel.lft(TEX("\num{"&decimal(ypart(p_))&"}"),B[l]);
+    fi;
+    fi;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    vardef titi(text t)=%affichage qualitatif
+    l:=0;
+    for p_=t:
+    if numeric p_:
+    if Reponses:
+    if DonneesSup:
+    label.top(TEX("\num{"&decimal(p_)&"}"),P[l]);
+    else:
+    if Tiret:
+    trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
+    label.lft(TEX("\num{"&decimal(p_)&"}"),B[l]);
+    else:
+    dotlabel.lft(TEX("\num{"&decimal(p_)&"}"),B[l]);
+    fi;
+    fi;
+    fi;
+    else:
+    l:=l+1;
+    if Rotation:
+    if AngleRotation<>0:
+    picture TEXTELABEL;
+    TEXTELABEL=image(
+    labeloffset:=labeloffset*2;
+    label.lft(TEX(p_),A[l]);
+    labeloffset:=labeloffset/2;
+    );
+    trace rotation(TEXTELABEL,A[l],AngleRotation);
+    else :
+    label.bot(TEX(p_),A[l]);
+    fi;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    if Qualitatif: tutu(#1); else: toto(#1); fi;
+    boolean Grille;
+    Grille:=\useKV[ClesStat]{Grille};
+    Pasx:=\useKV[ClesStat]{Pasx};
+    Pasy:=\useKV[ClesStat]{Pasy};
+    if Grille:
+    drawoptions(withcolor 0.75white);
+    for k=0 step Pasx until ((maxx+1)):
+    trace (k*unitex,0)--(k*unitex,unitey*(maxy+2*Pasy));
+    endfor;
+    for k=0 step Pasy until ((maxy+2*Pasy)):
+    trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
+    endfor;
+    drawoptions();
+    fi;
+    if epaisseurbatons<>0:
+    for k=1 upto n:
+    fill polygone(A[k]-(epaisseurbatons*1pt,0),A[k]+(epaisseurbatons*1pt,0),P[k]+(epaisseurbatons*1pt,0),P[k]-(epaisseurbatons*1pt,0)) withcolor if unknown Col[k]: CoulDefaut else:Col[k] fi;
+    if AideLecture:
+    draw B[k]--P[k] dashed evenly;
+    fi;
+    endfor;
+    fi;
+    if LectureFine:
+    for k=0 step Pasy until ((maxy+1*Pasy)):
+    if Tiret:
+    trace (1pt,k*unitey)--(-1pt,k*unitey);
+    label.lft(TEX("\num{"&decimal(k+Depart)&"}"),(0,k*unitey));
+    else:
+    dotlabel.lft(TEX("\num{"&decimal(k+Depart)&"}"),(0,k*unitey));
+    fi;
+    endfor;
+    fi;
+    if Lecture:
+    for k=0 step Pasy until Pasy:
+    if Tiret:
+    trace (1pt,k*unitey)--(-1pt,k*unitey);
+    label.lft(TEX("\num{"&decimal(k)&"}"),(0,k*unitey));
+    else:
+    dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    endfor;
+    fi;
+    drawarrow (0,0)--unitex*(maxx+1,0);
+    drawarrow (0,0)--unitey*(0,maxy+2*Pasy);
+    label.lrt(btex \useKV[ClesStat]{Donnee} etex,unitex*(maxx+1,0));
+    label.urt(btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+2*Pasy));
+    if Qualitatif: titi(#1); else:tata(#1); fi;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+      unitex:=\useKV[ClesStat]{Unitex}*cm;
+      unitey:=\useKV[ClesStat]{Unitey}*cm;
+      xpartorigine:=\useKV[ClesStat]{Origine};
+      AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse};
+      boolean Rotation;
+      Rotation=\useKV[ClesStat]{AbscisseRotation};
+      boolean Lecture;
+      Lecture:=\useKV[ClesStat]{Lecture};
+      boolean LectureFine;
+      LectureFine:=\useKV[ClesStat]{LectureFine};
+      boolean AideLecture;
+      AideLecture:=\useKV[ClesStat]{AideLecture};
+      boolean DonneesSup;
+      DonneesSup:=\useKV[ClesStat]{DonneesSup};
+      boolean Reponses;
+      Reponses:=\useKV[ClesStat]{Reponses};
+      epaisseurbatons=\useKV[ClesStat]{EpaisseurBatons};
+      boolean Qualitatif;
+      Qualitatif=\useKV[ClesStat]{Qualitatif};
+      boolean Tiret;
+      Tiret=\useKV[ClesStat]{Tiret};
+      color CoulDefaut;
+      CoulDefaut=\useKV[ClesStat]{CouleurDefaut};}
+    Depart=\useKV[ClesStat]{Depart};
+    ]
+    maxx:=0;
+    maxy:=0;
+    % on r\'ecup\`ere les couleurs
+    color Col[];
+    n:=0;
+    for p_=#2:
+    n:=n+1;
+    if color p_:
+    Col[n]=p_;
+    else:
+    Col[n]=CoulDefaut;
+    fi;
+    endfor;
+    % 
+    pair A[],B[],P[];
+    vardef toto(text t)=%points quantitatif
+    n:=0;
+    for p_=t:
+    if pair p_:
+    n:=n+1;
+    P[n]=((xpart(p_)-(xpartorigine))*unitex,ypart(p_)*unitey);
+    if xpart(p_)>maxx:
+    maxx:=xpart(p_)-(xpartorigine);
+    fi;
+    if ypart(p_)>maxy:
+    maxy:=ypart(p_);
+    fi;
+    A[n]=unitex*(xpart(p_)-(xpartorigine),0);
+    B[n]=unitey*(0,ypart(p_));
+    fi;
+    endfor;
+    enddef;
+    vardef tata(text t)=%affichage quantitatif
+    l=0;
+    for p_=t:
+    if pair p_:
+    l:=l+1;
+    if Rotation:
+    label.bot(LATEX("\num{"&decimal(xpart(p_))&"}") rotated AngleRotation,A[l]);
+    else :
+    label.bot(LATEX("\num{"&decimal(xpart(p_))&"}"),A[l]);
+    fi;
+    if Reponses:
+    if DonneesSup:
+    label.top(LATEX("\num{"&decimal(ypart(p_))&"}"),P[l]);
+    else:
+    if Tiret:
+    trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
+    label.lft(LATEX("\num{"&decimal(p_)&"}"),B[l]);
+    else:
+    dotlabel.lft(LATEX("\num{"&decimal(ypart(p_))&"}"),B[l]);
+    fi;
+    fi;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    vardef tutu(text t)=%points qualitatif
+    n:=0;
+    for p_=t:
+    if numeric p_:
+    P[n]=((n)*unitex,unitey*p_);
+    B[n]=(0,unitey*p_);
+    if p_>maxy:
+    maxy:=p_;
+    fi;
+    else:
+    n:=n+1;
+    A[n]=unitex*(n,0);
+    fi;
+    endfor;
+    maxx:=n;
+    enddef;
+    vardef titi(text t)=%affichage qualitatif
+    l:=0;
+    for p_=t:
+    if numeric p_:
+    if Reponses:
+    if DonneesSup:
+    label.top(LATEX("\num{"&decimal(p_)&"}"),P[l]);
+    else:
+    if Tiret:
+    trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
+    label.lft(LATEX("\num{"&decimal(p_)&"}"),B[l]);
+    else:
+    dotlabel.lft(LATEX("\num{"&decimal(p_)&"}"),B[l]);
+    fi;
+    fi;
+    fi;
+    else:
+    l:=l+1;
+    if Rotation:
+    if AngleRotation<>0:
+    picture TEXTELABEL;
+    TEXTELABEL=image(
+    labeloffset:=labeloffset*2;
+    label.lft(LATEX(p_),A[l]);
+    labeloffset:=labeloffset/2;
+    );
+    trace rotation(TEXTELABEL,A[l],AngleRotation);
+    else :
+    label.bot(LATEX(p_),A[l]);
+    fi;
+    fi;
+    fi;
+    endfor;
+    enddef;
+    if Qualitatif: tutu(#1); else: toto(#1); fi;
+    boolean Grille;
+    Grille:=\useKV[ClesStat]{Grille};
+    Pasx:=\useKV[ClesStat]{Pasx};
+    Pasy:=\useKV[ClesStat]{Pasy};    
+    if Grille:
+    drawoptions(withcolor 0.75white);
+    for k=0 step Pasx until ((maxx+1)):
+    trace (k*unitex,0)--(k*unitex,unitey*(maxy+2*Pasy));
+    endfor;
+    for k=0 step Pasy until ((maxy+2*Pasy)):
+    trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
+    endfor;
+    drawoptions();
+    fi;
+    if epaisseurbatons<>0:
+    for k=1 upto n:
+    fill polygone(A[k]-(epaisseurbatons*1pt,0),A[k]+(epaisseurbatons*1pt,0),P[k]+(epaisseurbatons*1pt,0),P[k]-(epaisseurbatons*1pt,0)) withcolor if unknown Col[k]: CoulDefaut else:Col[k] fi;
+    if AideLecture:
+    draw B[k]--P[k] dashed evenly;
+    fi;
+    endfor;
+    fi;
+    if LectureFine:
+    for k=0 step Pasy until ((maxy+1*Pasy)):
+    if Tiret:
+    trace (1pt,k*unitey)--(-1pt,k*unitey);
+    label.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
+    else:
+    dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    endfor;
+    fi;
+    if Lecture:
+    for k=0 step Pasy until Pasy:
+    if Tiret:
+    trace (1pt,k*unitey)--(-1pt,k*unitey);
+    label.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
+    else:
+    dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    endfor;
+    fi;
+    drawarrow (0,0)--unitex*(maxx+1,0);
+    drawarrow (0,0)--unitey*(0,maxy+2*Pasy);
+    label.lrt(btex \useKV[ClesStat]{Donnee} etex,unitex*(maxx+1,0));
+    label.urt(btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+2*Pasy));
+    if Qualitatif: titi(#1); else:tata(#1); fi;
+  \end{mpost}
+  \fi
+}
+
+% la construction du graphique qualitatif
+\def\NewMPStatCirculaireQ#1#2#3#4{%
+  %#1 : la liste des données
+  %#2 : 360 ou 180
+  %#3 : liste des couleurs
+  %#4 : liste des légendes à effacer.
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    Rayon:=\useKV[ClesStat]{Rayon};
+    ecarthachures=\useKV[ClesStat]{EcartHachures};
+    epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
+    boolean AffichageAngle;
+    AffichageAngle=\useKV[ClesStat]{AffichageAngle};
+    boolean AffichageDonnee;
+    AffichageDonnee=\useKV[ClesStat]{AffichageDonnee};
+    boolean Hachures;
+    Hachures=\useKV[ClesStat]{Hachures};
+    boolean Inverse;
+    Inverse=\useKV[ClesStat]{LectureInverse};
+    boolean Legende;
+    Legende=\useKV[ClesStat]{Legende};
+    boolean LegendeVide;
+    LegendeVide=\useKV[ClesStat]{LegendeVide};
+    boolean Retour;
+    Retour=false;
+    boolean ACompleter;
+    ACompleter=\useKV[ClesStat]{ACompleter};
+    pair A[],O,B[],C[],D[];
+    O=(0,0);
+    n:=0;
+    numeric total[],ang[];
+    total[0]=0;
+    ang[0]:=0;
+    path cc;
+    cc=(fullcircle scaled (2*Rayon));
+    % on r\'ecup\`ere les couleurs
+    color Col[];
+    n:=0;
+    for p_=#3:
+    n:=n+1;
+    Col[n]=p_;
+    endfor;
+    if Inverse=false:
+    A[0]=point(0) of cc;
+    else:
+    A[0]=point(180) of cc;
+    fi;
+    vardef toto(text t)=
+    n:=0;
+    for p_=t:
+    if numeric p_:
+    n:=n+1;
+    total[n]:=total[n-1]+p_;
+    fi;
+    endfor;
+    N=n;
+    for k=1 upto N:
+    ang[k]=(#2/total[N])*total[k];
+    endfor;
+    n:=0;
+    for p_=t:
+    if numeric p_:
+    n:=n+1;
+    if Inverse=false:
+    A[n]=A[n-1] rotatedabout(O,p_*(#2/total[N]));
+    else:
+    A[n]=A[n-1] rotatedabout(O,-p_*(#2/total[N]));
+    fi;
+    %hachure ou pas ?
+    if Hachures=false:
+    fill (O--if Inverse=false:arccercle(A[n-1],A[n],O) else:
+    arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi;
+    else:
+    draw
+    Hachurage((O--if Inverse=false:arccercle(A[n-1],A[n],O)
+    else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#2/total[N]) if
+    (n mod 2)=0: +90 else: -90 fi,ecarthachures,if (n mod 2)=0 : 0 else: 1 fi)
+    withpen pencircle scaled epaisseurhachures if AffichageAngle: withcolor 0.5white fi;
+    fi;
+    if ACompleter=false:
+    draw A[n-1]--O--A[n] if Hachures: withpen pencircle scaled2 fi;
+    fi;
+    % Affichage des angles associ\'es
+    if AffichageAngle:
+    if round(p_*(#2/total[N]))>15:
+    if (n mod 2)=0:
+    marque_a:=20*0.75*Rayon/cm;
+    else:
+    marque_a:=20*0.5*Rayon/cm;
+    fi;
+    if Hachures:
+    if Inverse=false:
+    undraw
+    Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    else:
+    undraw
+    Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    fi;
+    fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
+    blanc;
+    fi;
+    if Inverse=false:
+    draw
+    Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    else:
+    draw
+    Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    fi;
+    fi;
+    elseif AffichageDonnee:
+    if round(p_*(#2/total[N]))>15:
+    if (n mod 2)=0:
+    marque_a:=20*0.75*Rayon/cm;
+    else:
+    marque_a:=20*0.5*Rayon/cm;
+    fi;
+    if Hachures:
+    if Inverse=false:
+    undraw
+    Codeangle(A[n-1],O,A[n],0,TEX(""&decimal(p_)&""));
+    else:
+    undraw
+    Codeangle(A[n],O,A[n-1],0,(((TEX(""&decimal(p_)&"")))));
+    fi;
+    fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
+    blanc;
+    fi;
+    if Inverse=false:
+    draw
+    Codeangle(A[n-1],O,A[n],0,(((TEX(""&decimal(p_)&"")))));
+    else:
+    draw
+    Codeangle(A[n],O,A[n-1],0,(((TEX(""&decimal(p_)&"")))));
+    fi;
+    fi;
+    fi;
+    %
+    fi;
+    endfor;
+    if #2=360:
+    draw cc if Hachures: withpen pencircle scaled2 fi;
+    else:
+    draw (subpath(0,length cc/2) of cc)--cycle if Hachures: withpen pencircle scaled2 fi;;
+    fi;
+    n:=0;
+    if Legende:
+    for p_=t:
+    if string p_:
+    n:=n+1;
+    C[n]=A[n-1] rotatedabout(O,if Inverse:-1* fi(ang[n]-ang[n-1])/2);
+    draw 0.95[O,C[n]]--1.05[O,C[n]];
+    C[n]:=1.05[O,C[n]];
+    Test(n);
+    if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)):
+    D[n]=C[n]+(0.5cm,0);
+    draw C[n]--D[n];
+    if Retour=false:label.urt(TEX(p_),D[n]);fi;
+    fi;
+    if (xpart(C[n])<xpart(O)) and (ypart(C[n])>ypart(O)):
+    D[n]=C[n]-(0.5cm,0);
+    draw C[n]--D[n];
+    if Retour=false:label.ulft(TEX(p_),D[n]);fi;
+    fi;
+    if (xpart(C[n])<xpart(O)) and (ypart(C[n])<ypart(O)):
+    D[n]=C[n]-(0.5cm,0);
+    draw C[n]--D[n];
+    if Retour=false:label.llft(TEX(p_),D[n]);fi;
+    fi;
+    if (xpart(C[n])>xpart(O)) and (ypart(C[n])<ypart(O)):
+    D[n]=C[n]+(0.5cm,0);
+    draw C[n]--D[n];
+    if Retour=false:label.lrt(TEX(p_),D[n]);fi;
+    fi;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    vardef Test(expr nb)=
+    Retour:=false;
+    op:=0;
+    for l_=#4:
+    if l_=nb:
+    op:=op+1;
+    fi;
+    endfor;
+    if op>0:
+    Retour:=true;
+    fi;
+    enddef;    
+    Figure(-10u,-10u,10u,10u);
+    toto(#1);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={%
+      Rayon:=\useKV[ClesStat]{Rayon};
+      ecarthachures=\useKV[ClesStat]{EcartHachures};
+      epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
+      boolean AffichageAngle;
+      AffichageAngle=\useKV[ClesStat]{AffichageAngle};
+      boolean AffichageDonnee;
+      AffichageDonnee=\useKV[ClesStat]{AffichageDonnee};
+      boolean Hachures;
+      Hachures=\useKV[ClesStat]{Hachures};
+      boolean Inverse;
+      Inverse=\useKV[ClesStat]{LectureInverse};
+      boolean Legende;
+      Legende=\useKV[ClesStat]{Legende};
+      boolean LegendeVide;
+      LegendeVide=\useKV[ClesStat]{LegendeVide};
+      boolean ACompleter;
+      ACompleter=\useKV[ClesStat]{ACompleter};
+    }]
+    boolean Retour;
+    Retour=false;
+    pair A[],O,B[],C[],D[];
+    O=(0,0);
+    n:=0;
+    numeric total[],ang[];
+    total[0]=0;
+    ang[0]:=0;
+    path cc;
+    cc=(fullcircle scaled (2*Rayon));
+    % on r\'ecup\`ere les couleurs
+    color Col[];
+    n:=0;
+    for p_=#3:
+    n:=n+1;
+    Col[n]=p_;
+    endfor;
+    if Inverse=false:
+    A[0]=point(0) of cc;
+    else:
+    A[0]=point(180) of cc;
+    fi;
+    vardef toto(text t)=
+    n:=0;
+    for p_=t:
+    if numeric p_:
+    n:=n+1;
+    total[n]:=total[n-1]+p_;
+    fi;
+    endfor;
+    N=n;
+    for k=1 upto N:
+    ang[k]=(#2/total[N])*total[k];
+    endfor;
+    n:=0;
+    for p_=t:
+    if numeric p_:
+    n:=n+1;
+    if Inverse=false:
+    A[n]=A[n-1] rotatedabout(O,p_*(#2/total[N]));
+    else:
+    A[n]=A[n-1] rotatedabout(O,-p_*(#2/total[N]));
+    fi;
+    %hachure ou pas ?
+    if Hachures=false:
+    fill (O--if Inverse=false:arccercle(A[n-1],A[n],O) else:
+    arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi;
+    else:
+    draw
+    Hachurage((O--if Inverse=false:arccercle(A[n-1],A[n],O)
+    else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#2/total[N]) if
+    (n mod 2)=0: +90 else: -90 fi,ecarthachures,if (n mod 2)=0 : 0 else: 1 fi)
+    withpen pencircle scaled epaisseurhachures if AffichageAngle: withcolor 0.5white fi;
+    fi;
+    if ACompleter=false:
+    draw A[n-1]--O--A[n] if Hachures: withpen pencircle scaled2 fi;
+    fi;
+    % Affichage des angles associ\'es
+    if AffichageAngle:
+    if round(p_*(#2/total[N]))>15:
+    if (n mod 2)=0:
+    marque_a:=20*0.75*Rayon/cm;
+    else:
+    marque_a:=20*0.5*Rayon/cm;
+    fi;
+    if Hachures:
+    if Inverse=false:
+    undraw
+    Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    else:
+    undraw
+    Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    fi;
+    fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
+    blanc;
+    fi;
+    if Inverse=false:
+    draw
+    Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    else:
+    draw
+    Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
+    fi;
+    fi;
+    elseif AffichageDonnee:
+    if round(p_*(#2/total[N]))>15:
+    if (n mod 2)=0:
+    marque_a:=20*0.75*Rayon/cm;
+    else:
+    marque_a:=20*0.5*Rayon/cm;
+    fi;
+    if Hachures:
+    if Inverse=false:
+    undraw
+    Codeangle(A[n-1],O,A[n],0,LATEX(""&decimal(p_)&""));
+    else:
+    undraw
+    Codeangle(A[n],O,A[n-1],0,(((LATEX(""&decimal(p_)&"")))));
+    fi;
+    fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
+    blanc;
+    fi;
+    if Inverse=false:
+    draw
+    Codeangle(A[n-1],O,A[n],0,(((LATEX(""&decimal(p_)&"")))));
+    else:
+    draw
+    Codeangle(A[n],O,A[n-1],0,(((LATEX(""&decimal(p_)&"")))));
+    fi;
+    fi;
+    fi;
+    %
+    fi;
+    endfor;
+    if #2=360:
+    draw cc if Hachures: withpen pencircle scaled2 fi;
+    else:
+    draw (subpath(0,length cc/2) of cc)--cycle if Hachures: withpen pencircle scaled2 fi;;
+    fi;
+    n:=0;
+    if Legende:
+    for p_=t:
+    if string p_:
+    n:=n+1;
+    C[n]=A[n-1] rotatedabout(O,if Inverse:-1* fi(ang[n]-ang[n-1])/2);
+    draw 0.95[O,C[n]]--1.05[O,C[n]];
+    C[n]:=1.05[O,C[n]];
+    Test(n);
+    if Retour=false:
+    if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)):
+    D[n]=C[n]+(0.5cm,0);
+    draw C[n]--D[n];
+    label.urt(LATEX(p_),D[n]);
+    fi;
+    if (xpart(C[n])<xpart(O)) and (ypart(C[n])>ypart(O)):
+    D[n]=C[n]-(0.5cm,0);
+    draw C[n]--D[n];
+    label.ulft(LATEX(p_),D[n]);
+    fi;
+    if (xpart(C[n])<xpart(O)) and (ypart(C[n])<ypart(O)):
+    D[n]=C[n]-(0.5cm,0);
+    draw C[n]--D[n];
+    label.llft(LATEX(p_),D[n]);
+    fi;
+    if (xpart(C[n])>xpart(O)) and (ypart(C[n])<ypart(O)):
+    D[n]=C[n]+(0.5cm,0);
+    draw C[n]--D[n];
+    label.lrt(LATEX(p_),D[n]);
+    fi;
+    fi;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    vardef Test(expr nb)=
+    Retour:=false;
+    op:=0;
+    for l_=#4:
+    if l_=nb:
+    op:=op+1;
+    fi;
+    endfor;
+    if op>0:
+    Retour:=true;
+    fi;
+    enddef;    
+    Figure(-10u,-10u,10u,10u);
+    toto(#1);
+  \end{mpost}
+  \fi
+}%
+
+%Pour la m\'ediane.
+\DTLgnewdb{mtdb}%
+\dtlexpandnewvalue%
+\newcount\nbdonnees%
+% 
+\def\AjoutListEEaa#1\nil{\addtotok\tabtoksEEa{#1,}}%
+\def\AjoutListEEab#1\nil{\addtotok\tabtoksEEa{#1/}}%
+\def\AjoutListEEb#1\nil{\addtotok\tabtoksEEb{#1,}}%
+\def\AjoutListEEx#1\nil{\addtotok\tabtoksEE{#1,}}%
+\def\AjoutListEEy#1\nil{\addtotok\tabtoksEE{#1/}}%
+
+\DTLgnewdb{mtdbEE}%
+\DTLgnewdb{mtdbEEqual}%
+%
+\newcommand\Stat[2][]{%
+  \useKVdefault[ClesStat]%
+  \setKV[ClesStat]{#1}%
+  \ifboolKV[ClesStat]{Representation}{%
+    \setKV[TraceG]{Xmin=0,Ymin=0}%
+    \setKV[TraceG]{#1}%
+    \readlist*\ListePointsPlaces{#2}%
+    \newtoks\toklistepoint%
+    \foreachitem\compteur\in\ListePointsPlaces{\expandafter\Updatetoks\compteur\nil}%
+    \MPPlacePoint[#1]{\the\toklistepoint}%
+  }{%
+    \ifboolKV[ClesStat]{Liste}{%
+      \setsepchar{,}\ignoreemptyitems%
+      \readlist*\Liste{#2}%
+      \xdef\foo{}%
+      \setsepchar[*]{,*/}\ignoreemptyitems%
+      \xintFor* ##1 in {\xintSeq {1}{\Listelen}}\do{%
+        \xdef\foo{\foo 1/\Liste[##1],}%
+      }%
+      \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*\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}%
+          }%
+          \DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%  
+            \expandafter\AjoutListEEy\Val\nil%
+            \expandafter\AjoutListEEx\Eff\nil%
+          }%
+          \xdef\listEE{\the\tabtoksEE}
+          \ignoreemptyitems%
+          \setsepchar[*]{,*/}%
+          \readlist*\ListeComplete\listEE%
+        }{% 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}%
+          }%
+          \dtlsort{Val}{mtdbEEqual}{\dtlicompare}%
+          \DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%  
+            \expandafter\AjoutListEEy\Val\nil%
+            \expandafter\AjoutListEEx\Eff\nil%
+          }%
+          \xdef\listEE{\the\tabtoksEE}
+          \ignoreemptyitems%
+          \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
+    \foreachitem\x\in\ListeComplete{%
+      \DTLnewrow{mtdb}%
+      \itemtomacro\ListeComplete[\xcnt,2]\y%
+      \DTLnewdbentry{mtdb}{Numeric}{\y}%
+    }%
+    \dtlsort{Numeric}{mtdb}{\dtlicompare}%
+    %  % on r\'einitialise les valeurs des crit\`eres de position et de
+    % dispersion
+    \renewcommand\NbDonnees{}%
+    \renewcommand\SommeDonnees{}%
+    \renewcommand\EffectifTotal{}%
+    \renewcommand\Moyenne{}%
+    \renewcommand\Etendue{}%
+    \renewcommand\Mediane{}%
+    \renewcommand\DonneeMax{0}%
+    \renewcommand\EffectifMax{0}%
+    \renewcommand\DonneeMin{999999999}%
+    \ifboolKV[ClesStat]{Qualitatif}{%D\'ebut qualitatif
+      % Calculs
+      %  %% celui de la somme des donn\'ees
+      \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,2]}}}%
+      %  %% celui de l'effectif total
+      \ifboolKV[ClesStat]{EffectifTotal}{%
+        \ifboolKV[ClesStat]{Liste}{L'effectif total de la s\'erie est
+          \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{%
+              +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]}
+      }{}%
+      \ifboolKV[ClesStat]{Liste}{\xdef\EffectifTotal{\ListeCompletelen}}{\xdef\EffectifTotal{\SommeDonnees}}%
+      %  %% 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}
+            \ifboolKV[ClesStat]{ValeurExacte}{}{%
+              \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}{%
+          \xdef\DonneeMax{\ListeComplete[##1,2]}%
+        }{}%
+        \xintifboolexpr{\ListeComplete[##1,2]<\DonneeMin}{%
+          \xdef\DonneeMin{\ListeComplete[##1,2]}%
+        }{}%
+      }%
+      \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.}}{}%
+      % celui de la mediane
+      %%% Recuperation de la mediane %%%%%%%%%%%%%%%%%%%%% 
+      \newcount\Recapmed%
+      \newcount\Recapmeda%
+      \ifodd\number\ListeCompletelen%odd impair
+      \Recapmed=\fpeval{(\ListeCompletelen+1)/2}\relax%
+      \else%
+      \Recapmed=\fpeval{\ListeCompletelen/2}\relax%
+      \Recapmeda=\numexpr\Recapmed+1\relax%
+      \fi%
+      \newcount\Recapk%
+      \Recapk=0%
+      \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\Recapk=\numexpr\Recapk+1\relax%
+        \ifnum\Recapk=\Recapmed%
+        \ifodd\number\ListeCompletelen%
+        \xdef\Mediane{\numeroDonnee}%
+        \else%
+        \xdef\Mediane{\numeroDonnee}%
+        \fi%
+        \fi%
+        \ifnum\Recapk=\Recapmeda%
+        \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}%
+        \fi%
+      }%
+      %%% 
+      \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%
+          }%
+          \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}.}{.}%
+            \xdef\Mediane{\numeroDonnee}%
+            \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.}}{}
+      %%% Quartile un
+      \newcount\PfCQuartileUn%
+      \modulo{\ListeCompletelen}{4}\relax%
+      \ifnum\remainder=0%
+      \PfCQuartileUn=\fpeval{\ListeCompletelen/4}%
+      \else%
+      \PfCQuartileUn=\fpeval{ceil(\ListeCompletelen/4)}%
+      \fi%
+      \newcount\PfCQunk%
+      \PfCQunk=0%
+      \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\PfCQunk=\numexpr\PfCQunk+1\relax%
+        \ifnum\PfCQunk=\PfCQuartileUn%
+        \xdef\QuartileUn{\numeroDonnee}%
+        \fi%
+      }%
+      %%% Quartile trois
+      \newcount\PfCQuartileTrois%
+      \modulo{\ListeCompletelen}{4}\relax%
+      \ifnum\remainder=0%
+      \PfCQuartileTrois=\fpeval{3*\ListeCompletelen/4}%
+      \else%
+      \PfCQuartileTrois=\fpeval{ceil(3*\ListeCompletelen/4)}%
+      \fi%
+      \newcount\PfCQtroisk%
+      \PfCQtroisk=0%
+      \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\PfCQtroisk=\numexpr\PfCQtroisk+1\relax%
+        \ifnum\PfCQtroisk=\PfCQuartileTrois%La m\'ediane vaut \numeroDonnee\fi
+        \xdef\QuartileTrois{\numeroDonnee}%
+        \fi%
+      }%
+      % 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.}{\BuildtabStat}}{}%
+      % 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]{Barre}{%
+            \buildgraphbarhor%
+          }{\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
+          {\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}}%
+          \ifboolKV[ClesStat]{ValeurExacte}{}{%
+            \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
+      %%% Recuperation Mediane
+      \newcount\Recupmed%
+      \newcount\Recupmeda%
+      \ifodd\number\EffectifTotal%odd impair
+      \Recupmed=\fpeval{(\EffectifTotal+1)/2}\relax%
+      \else% pair
+      \Recupmed=\fpeval{\EffectifTotal/2}\relax%
+      \Recupmeda=\numexpr\Recupmed+1\relax%
+      \fi%
+      \newcount\Recupk%
+      \Recupk=0%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+        \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
+          \Recupk=\numexpr\Recupk+1\relax%
+          \ifnum\Recupk=\Recupmed%
+          \ifodd\number\EffectifTotal%
+          \xdef\Mediane{\ListeComplete[##1,1]}%
+          \else%
+          \xdef\Mediane{\ListeComplete[##1,1]}%
+          \fi%
+          \fi%
+          \ifnum\Recupk=\Recupmeda%
+          \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}%
+          \fi%
+        }%
+      }%
+      %%% 
+      \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{} donn\'ee 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%
+          }%
+        }%
+      }{}%
+      %%% Quartile un
+      \newcount\PfCQuartileUn%
+      \modulo{\EffectifTotal}{4}\relax%
+      \ifnum\remainder=0%
+      \PfCQuartileUn=\fpeval{\EffectifTotal/4}%
+      \else%
+      \PfCQuartileUn=\fpeval{ceil(\EffectifTotal/4)}%
+      \fi%
+      \newcount\PfCQunk%
+      \PfCQunk=0%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+        \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
+          \PfCQunk=\numexpr\PfCQunk+1\relax%
+          \ifnum\PfCQunk=\PfCQuartileUn%
+          \xdef\QuartileUn{\ListeComplete[##1,1]}%
+          \fi%
+        }%
+      }%
+      %%% Quartile trois
+      \newcount\PfCQuartileTrois%
+      \modulo{\EffectifTotal}{4}\relax%
+      \ifnum\remainder=0%
+      \PfCQuartileTrois=\fpeval{3*\EffectifTotal/4}%
+      \else%
+      \PfCQuartileTrois=\fpeval{ceil(3*\EffectifTotal/4)}%
+      \fi%
+      \newcount\PfCQtroisk%
+      \PfCQtroisk=0%
+      \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+        \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
+          \PfCQtroisk=\numexpr\PfCQtroisk+1\relax%
+          \ifnum\PfCQtroisk=\PfCQuartileTrois%
+          \xdef\QuartileTrois{\ListeComplete[##1,1]}%
+          \fi%
+        }%
+      }%
+      % Construction de tableau
+      \ifboolKV[ClesStat]{Tableau}{\BuildtabStat}{}%
+      % Construction du graphique ??
+      \ifboolKV[ClesStat]{Graphique}{%
+        \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraph[#1]}}
+      }{}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCStatistiques.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTableauxUnites.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTableauxUnites.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTableauxUnites.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,1389 @@
+%%%
+% Tableaux d'unit\'es
+%%%
+\setKVdefault[ClesTableaux]{Virgule=true,Incline=false,Entiers=false,Decimaux=false,Milliards=false,Millions=false,Micro=false,Nano=false,Partie=false,CouleurG=gray!15,CouleurM=gray!15,Couleurm=gray!15,Couleuru=gray!15,Couleurd=gray!15,Classes=false,Nombres=false,Puissances=false,NbLignes=2,Metre=false,Are=false,Capacite=false,Carre=false,Cube=false,Litre=false,Gramme=false,Fleches=false,FlechesB=false,FlechesH=false,Colonnes=false,Prefixes=false,Escalier=false,Taille=5,Largeur=4.75em,Nom=PfCTableau,CodeAfter={},PuissancesSeules=false,Colonne=-1,Octet=false}
+
+\newcommand\PfCTBstrut{\rule[-1.2ex]{0pt}{3.8ex}}% Top and Bottom strut
+\newcommand\PfCTstrut{\rule{0pt}{3.8ex}}% Top strut
+\newcommand\PfCBstrut{\rule[-1.2ex]{0pt}{0ex}}% Bottom strut
+
+\newlength\PfCTableauPuissances%
+
+\newcommand\Tableau[2][]{%
+  \useKVdefault[ClesTableaux]%
+  \setKV[ClesTableaux]{#1}%
+  \ifboolKV[ClesTableaux]{Escalier}{%
+    \ifboolKV[ClesTableaux]{Metre}{%
+      \xdef\PfCTableauUnite{\meter}%
+      \xdef\PfCCoefConversion{10}%
+    }{}%
+    \ifboolKV[ClesTableaux]{Carre}{%
+      \xdef\PfCTableauUnite{\square\meter}%
+      \xdef\PfCCoefConversion{100}%
+    }{}%
+    \ifboolKV[ClesTableaux]{Cube}{%
+      \xdef\PfCTableauUnite{\cubic\meter}%
+      \xdef\PfCCoefConversion{1000}%
+    }{}%
+    \ifboolKV[ClesTableaux]{Gramme}{%
+      \xdef\PfCTableauUnite{\gram}%
+      \xdef\PfCCoefConversion{10}%
+    }{}%
+    \PfCTableauIncline%
+  }{%
+    %
+    %%% Clé Octet
+    %
+    \ifboolKV[ClesTableaux]{Octet}{%
+    \[\renewcommand{\arraystretch}{1.15}%
+      \setlength{\tabcolsep}{0.275\tabcolsep}%
+      \xdef\DecalageLigne{0}
+      \begin{NiceTabular}{*{5}{wc{15pt}wc{15pt}wc{15pt}}}
+        \Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}\\
+        \hline
+        \ifboolKV[ClesTableaux]{Classes}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}\Block[borders={left,top,right}]{1-3}{téraoctet\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{gigaoctet\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{mégaoctet\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{kilooctet\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{octet\PfCTBstrut}&&\\
+          \hline
+        }{}%
+        \Block[borders={left,top,right}]{1-3}{To\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{Go\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{Mo\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{ko\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{o\PfCTBstrut}&&\\
+        \hline
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        &&&&&&&&&&&&&&\\
+        }%
+        \Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}\\
+        \CodeAfter
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+          \tikz\draw (3-|\fpeval{3*(##1-1)+1})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*(##1-1)+1});
+        }%
+        \xintifboolexpr{\useKV[ClesTableaux]{Colonnes}}{%
+          \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
+            \tikz\draw[gray!50] (3-|\fpeval{3*(##1-1)+2})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*(##1-1)+2});
+            \tikz\draw[gray!50] (3-|\fpeval{3*##1})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*##1});
+          }%
+        }{}%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{%
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{\DecalageLigne+##2+2.5}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};%
+          }%
+        }%
+        \fi%
+        % on trace les flèches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+        \ifboolKV[ClesTableaux]{FlechesH}{%
+          \xintFor* ##1 in {\xintSeq{1}{4}}\do{%
+            \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{2.5+3*(##1-1)}) to node[above, midway]{\small$\times\num{1000}$}(1.5-|\fpeval{2.5+3*##1});%
+          }%
+        }{}%
+        \ifboolKV[ClesTableaux]{Classes}{\xdef\PfCTableauDepart{4}}{\xdef\PfCTableauDepart{3}}%
+        \ifboolKV[ClesTableaux]{FlechesB}{%
+          \xintFor* ##1 in {\xintSeq{1}{4}}\do{%
+            \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{\PfCTableauDepart+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{2.5+3*##1}) to node[below,midway]{\small$\div\num{1000}$}(\fpeval{\PfCTableauDepart+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{2.5+3*(##1-1)});%
+          }%
+        }{}%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}
+    \]%
+  }{}%
+  %
+  %%% Cl\'e Prefixes
+  %
+  \ifboolKV[ClesTableaux]{Prefixes}{%
+    \xdef\DecalageLigne{0}%
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      %
+      %%% Definition du tableau
+      %
+      \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonne{16}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonne{13}}{\xdef\PfCDerniereColonne{10}}}%
+      \ifboolKV[ClesTableaux]{Nano}{\xdef\PfCDerniereColonne{\fpeval{\PfCDerniereColonne+6}}}{\ifboolKV[ClesTableaux]{Micro}{\xdef\PfCDerniereColonne{\fpeval{\PfCDerniereColonne+3}}}{}}
+      \begin{NiceTabular}{*{\ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }}{m{3.25em}}>{\columncolor{gray!15}}{c}*{%
+            \ifboolKV[ClesTableaux]{Micro}{6}{%
+              \ifboolKV[ClesTableaux]{Nano}{9}{3}%
+            }}%
+          {m{3.25em}}}%
+        %
+      	%%% Prise en compte de la cl\'e Partie
+      	%
+        \ifboolKV[ClesTableaux]{Partie}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \Block[]{1-%
+            \ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }}{\bfseries Partie enti\`ere}\ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&%
+          }{%
+            \ifboolKV[ClesTableaux]{Millions}{%
+              &&&%
+            }{%
+            }}%
+          &&&&&
+          &\Block[fill=gray!15]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[]{1-%
+            \ifboolKV[ClesTableaux]{Micro}{6}{%
+              \ifboolKV[ClesTableaux]{Nano}{9}{3}%
+            }}{\bfseries Partie d\'ecimale}
+          &&%
+          \ifboolKV[ClesTableaux]{Micro}{&&&}{%
+            \ifboolKV[ClesTableaux]{Nano}{&&&&&&}{}%
+          }%
+          \\
+        }{}%
+        %
+      	%%% Prise en compte de la cl\'e Classes
+      	%
+        \ifboolKV[ClesTableaux]{Classes}{%
+          %\hline
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}\ifboolKV[ClesTableaux]{Milliards}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurG}}]{1-3}{Classe des milliards}&&&\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}
+          \ifboolKV[ClesTableaux]{Millions}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}
+          \Block[draw,fill={\useKV[ClesTableaux]{Couleurm}}]{1-3}{Classe des milliers}&&%
+          &\Block[draw,fill={\useKV[ClesTableaux]{Couleuru}}]{1-3}{Classe des unités}&&
+          &\Block[draw,fill=gray!15]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[draw]{1-%
+            \ifboolKV[ClesTableaux]{Micro}{6}{%
+              \ifboolKV[ClesTableaux]{Nano}{9}{3}%
+            }}{}
+          &&%
+          \ifboolKV[ClesTableaux]{Micro}{&&&}{%
+            \ifboolKV[ClesTableaux]{Nano}{&&&&&&}{}%
+          }%
+          \\
+        }{}%
+      	%
+      	%%% Valeurs par d\'efaut
+      	%
+        \hline%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \Block[borders={left,right}]{}{}&\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont giga}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont m\'ega}%
+        &\Block[borders={right}]{}{}%
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \Block[borders={left,right}]{}{}&\Block[borders={right}]{}{}%
+        &\Block[]{}{\fontsize{8}{8}\selectfont m\'ega}%
+        &%
+        }{%
+        }}%
+        \Block[borders={left,right}]{}{}&\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont kilo}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont hecto}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont d\'eca}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont unit\'es}%
+        &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont deci}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont centi}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont milli}%
+      	\ifboolKV[ClesTableaux]{Micro}{&\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont micro}\\}{%
+      	\ifboolKV[ClesTableaux]{Nano}{&\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont micro}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{8}{8}\selectfont nano}\\}{\\}%
+      	}%
+        %
+      	%%% Prise en compte de la cl\'e Nombres
+      	%
+        \ifboolKV[ClesTableaux]{Nombres}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont\num{100000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont\num{10000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont\num{1000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{100000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000000}}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont \num{1000000}}%
+            &%
+          }{}
+          \ifboolKV[ClesTableaux]{Millions}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont \num{100000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000000}}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont \num{1000000}}%
+            &%
+          }{}
+          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont \num{100000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{1000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{100}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{1}}%
+          &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$}%
+          \ifboolKV[ClesTableaux]{Micro}{%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,0001} ou $\dfrac{\strut1}{\strut\num{10000}}$}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,00001} ou $\dfrac{\strut1}{\strut\num{100000}}$}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,000001} ou $\dfrac{\strut1}{\strut\num{1000000}}$}%
+          }{%
+            \ifboolKV[ClesTableaux]{Nano}{%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,0001} ou $\dfrac{\strut1}{\strut\num{10000}}$}%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,00001} ou $\dfrac{\strut1}{\strut\num{100000}}$}%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,000001} ou $\dfrac{\strut1}{\strut\num{1000000}}$}%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,0000001} ou $\dfrac{\strut1}{\strut\num{10000000}}$}%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,00000001} ou $\dfrac{\strut1}{\strut\num{100000000}}$}%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,000000001} ou $\dfrac{\strut1}{\strut\num{1000000000}}$}%
+            }{}%
+          }{}\\%
+        }{}%
+      	%%% Prise en compte de la cl\'e Puissances
+        \ifboolKV[ClesTableaux]{Puissances}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+          \Block[borders={left,right}]{}{}&%
+          \Block[borders={right}]{}{}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^{9}$}%
+          &\Block[borders={right}]{}{}%
+          &\Block[borders={right}]{}{}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^{6}$}%
+          &\Block[borders={right}]{}{}%
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+          \Block[borders={left,right}]{}{}&%
+          \Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^{6}$}%
+        &%
+        }{%
+        }}%
+        \Block[borders={left,right}]{}{}&\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^3$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^2$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^1$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{1}$}%
+        &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-1}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-2}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-3}$}%
+        \ifboolKV[ClesTableaux]{Micro}{&%
+          \Block[borders={right}]{}{}&%
+          \Block[borders={right}]{}{}&
+          \Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-6}$}}{%
+      	\ifboolKV[ClesTableaux]{Nano}{&%
+          \Block[borders={right}]{}{}&%
+        \Block[borders={right}]{}{}&%
+        \Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-6}$}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-9}$}}{}%
+      	}%
+        \\%
+        }{}%
+        %
+      	%%% Lignes vierges
+      	%
+        \hline%
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&%
+          }{%
+            \ifboolKV[ClesTableaux]{Millions}{%
+              &&&%
+            }{%
+            }}%
+          &&&&&&,&&&%
+          \ifboolKV[ClesTableaux]{Micro}{&&&}{%
+            \ifboolKV[ClesTableaux]{Nano}{&&&&&&}{}%
+          }%
+          \\}%
+        \CodeAfter%
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCDerniereColonne+1}}}\do{%
+          \tikz\draw (\fpeval{\DecalageLigne+2}-|##1)--(\fpeval{\DecalageLigne+2+\useKV[ClesTableaux]{NbLignes}}-|##1);%
+        }%
+        %% On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonneEntiere{13}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonneEntiere{10}}{\xdef\PfCDerniereColonneEntiere{7}}}%
+        \xdef\PfCPremiereColonneDecimale{\fpeval{\PfCDerniereColonneEntiere+2}}%
+        \setsepchar[*]{,*.}%
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{%
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {\TabLongueurNombre}{1}}\do{%
+            \tikz\node at (\fpeval{\DecalageLigne+##2+1.5}-|\fpeval{\PfCDerniereColonneEntiere-0.5-\TabLongueurNombre+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};%
+          }%
+          \StrLen{\ListeNombreAPlacer[##2,2]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{\DecalageLigne+##2+1.5}-|\fpeval{\PfCPremiereColonneDecimale-1.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,2]}{##1}{##1}};%
+          }%
+        }%
+        \fi%
+      \end{NiceTabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
+  }{}%
+  %
+  %%% Puissances seules
+  %
+  \ifboolKV[ClesTableaux]{PuissancesSeules}{%
+    \setlength{\PfCTableauPuissances}{3em}%
+    \xdef\DecalageLigne{0}%
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      % 
+      %%% Definition du tableau
+      % 
+      \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonne{16}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonne{13}}{\xdef\PfCDerniereColonne{10}}}%
+      \begin{NiceTabular}{*{\ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }}{m{\PfCTableauPuissances}}>{\columncolor{gray!15}}{c}*{3}{m{\PfCTableauPuissances}}}%
+        \CodeBefore
+        \xintifboolexpr{\useKV[ClesTableaux]{Colonne}>0}{%
+          \tikz\fill[gray!15] (1-|\fpeval{\useKV[ClesTableaux]{Colonne}}) rectangle (last-|\fpeval{\useKV[ClesTableaux]{Colonne}+1});
+        }{}
+        \Body
+        \hline
+      	% 
+      	%%% Prise en compte de la cl\'e Partie
+%      	% 
+%        \ifboolKV[ClesTableaux]{Partie}{%
+%          \Block[]{1-%
+%            \ifboolKV[ClesTableaux]{Milliards}{12}{%
+%              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+%            }}{\bfseries Partie enti\`ere}\ifboolKV[ClesTableaux]{Milliards}{%
+%            &&&&&&%
+%          }{%
+%            \ifboolKV[ClesTableaux]{Millions}{%
+%              &&&%
+%            }{%
+%            }}%
+%          &&&&&%
+%          &\Block[fill=gray!15]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}\xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%%
+%          &\Block[]{1-3}{\bfseries Partie d\'ecimale}%
+%          &&\\
+%        }{}%
+%        %
+%      	%%% Prise en compte de la cl\'e Classes
+%      	%
+%        \ifboolKV[ClesTableaux]{Classes}{%
+%          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}\ifboolKV[ClesTableaux]{Milliards}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurG}}]{1-3}{Classe des milliards}&&&\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}%
+%          \ifboolKV[ClesTableaux]{Millions}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}%
+%          \Block[draw,fill={\useKV[ClesTableaux]{Couleurm}}]{1-3}{Classe des milliers}&&%
+%          &\Block[draw,fill={\useKV[ClesTableaux]{Couleuru}}]{1-3}{Classe des unités}&&
+%          &\Block[draw,fill=gray!15]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+%          &\Block[draw]{1-3}{}&&%
+%          \\
+%        }{}%
+        % 
+        %%% Valeurs ci-dessous par d\'efaut
+        %
+        %Affichage ou pas des noms ?
+%        \hline
+%        \ifboolKV[ClesTableaux]{Milliards}{%
+%          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont centaines de milliards}%
+%          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de milliards}%
+%          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont unit\'es de milliards}%
+%          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont centaines de millions}%
+%          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de millions}%
+%          &\Block[]{}{\fontsize{5}{5}\selectfont unit\'es de millions}%
+%          &
+%        }{}%
+%        \ifboolKV[ClesTableaux]{Millions}{%
+%          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont centaines de millions}%
+%          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de millions}%
+%          &\Block[]{}{\fontsize{5}{5}\selectfont unit\'es de millions}%
+%          &
+%        }{}%
+%        \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont centaines de milliers}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de milliers}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont unit\'es de milliers}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont centaines}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont unit\'es}%
+%        &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dixi\`emes}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont centi\`emes}%
+%        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont milli\`emes}\\
+%        %
+      	%%% Prise en compte de la cl\'e Nombres
+      	%
+        \ifboolKV[ClesTableaux]{Nombres}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont\num{100000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont\num{10000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont\num{1000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{100000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000000}}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont \num{1000000}}%
+            &%
+          }{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont \num{100000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000000}}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont \num{1000000}}%
+            &%
+          }{}%
+          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont \num{100000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{1000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{100}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{1}}%
+          &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$}%
+          \\
+        }{}%
+        %%% Prise en compte de la cl\'e Puissances
+        \ifboolKV[ClesTableaux]{Milliards}{%
+          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont $10^{11}$}&%
+          \Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^{10}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^{9}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^{8}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^{7}$}%
+          &\Block[borders={}]{}{\fontsize{5}{5}\selectfont $10^{6}$}%
+          &%
+        }{%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont $10^{8}$}&%
+            \Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^{7}$}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont $10^{6}$}%
+            &%
+          }{%
+          }}%
+        \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont $10^{5}$}
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^{4}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $10^3$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\num{d2}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\num{d1}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\num{10}^0$}%
+        &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\num{10}^{-1}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\num{10}^{-2}$}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\num{10}^{-3}$}%
+        \\%
+        %%% Lignes vierges
+        \hline%
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&}{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            &&&}{}%
+          &&&&&&\ifboolKV[ClesTableaux]{Virgule}{,}{\phantom{,}}&&&\\}%
+        \CodeAfter%
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCDerniereColonne+1}}}\do{%
+          \tikz\draw (\fpeval{\DecalageLigne+2}-|##1)--(\fpeval{\DecalageLigne+2+\useKV[ClesTableaux]{NbLignes}}-|##1);%
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}%
+        \readlist*\ListeNombreAPlacer{#2}%
+        \setsepchar{,}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{##2+1.5}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
+          }%
+        }
+        \fi%
+      \end{NiceTabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
+  }{}%
+  %
+  %%% Cl\'e Entiers
+  %
+  \ifboolKV[ClesTableaux]{Entiers}{%
+    \xdef\DecalageLigne{0}%
+    \xdef\TailleFonte{\useKV[ClesTableaux]{Taille}}%
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      % 
+      %%% Definition du tableau
+      % 
+      \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonne{13}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonne{10}}{\xdef\PfCDerniereColonne{7}}}%
+      \begin{NiceTabular}{*{%
+            \ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }%
+          }{m{\useKV[ClesTableaux]{Largeur}}}}%
+        \ifboolKV[ClesTableaux]{Classes}{%
+          \hline
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}\ifboolKV[ClesTableaux]{Milliards}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurG}}]{1-3}{Classe des milliards}&&&\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&%
+          }{}
+          \ifboolKV[ClesTableaux]{Millions}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}
+          \Block[draw,fill={\useKV[ClesTableaux]{Couleurm}}]{1-3}{Classe des milliers}&&%
+          &\Block[draw,fill={\useKV[ClesTableaux]{Couleuru}}]{1-3}{Classe des unités}&&\\}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            \Block[]{}{}&\Block[]{}{}&\Block[]{}{}&\Block[]{}{}&\Block[]{}{}&\Block[]{}{}&}{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            \Block[]{}{}&\Block[]{}{}&\Block[]{}{}&}{}%
+          \Block[]{}{}
+          &\Block[]{}{}
+          &\Block[]{}{}
+          &\Block[]{}{}
+          &\Block[]{}{}
+          &\Block[]{}{}\\
+        }%ok
+        \hline
+        \ifboolKV[ClesTableaux]{Milliards}{%
+          \Block[draw]{}{\fontsize{\TailleFonte}{\TailleFonte}\selectfont centaines de milliards}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont dizaines de milliards}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont unit\'es de milliards}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont centaines de millions}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont dizaines de millions}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont unit\'es de millions}%
+          &
+        }{}
+        \ifboolKV[ClesTableaux]{Millions}{%
+          \Block[draw]{}{\fontsize{5}{5}\selectfont centaines de millions}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont dizaines de millions}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont unit\'es de millions}%
+          &
+        }{}
+        \Block[draw]{}{\fontsize{5}{5}\selectfont centaines de milliers}%
+        &\Block[draw]{}{\fontsize{5}{5}\selectfont dizaines de milliers}%
+        &\Block[draw]{}{\fontsize{5}{5}\selectfont unit\'es de milliers}%
+        &\Block[draw]{}{\fontsize{5}{5}\selectfont centaines}%
+        &\Block[draw]{}{\fontsize{5}{5}\selectfont dizaines}%
+        &\Block[draw]{}{\fontsize{5}{5}\selectfont unit\'es}\\%
+        \ifboolKV[ClesTableaux]{Nombres}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            \Block[draw]{}{\fontsize{5}{5}\selectfont\num{100000000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{10000000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{1000000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{100000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{10000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{1000000}}%
+            &%
+          }{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            \Block[draw]{}{\fontsize{5}{5}\selectfont\num{100000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{10000000}}%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{1000000}}%
+            &%
+          }{}%
+          \Block[draw]{}{\fontsize{5}{5}\selectfont\num{100000}}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{10000}}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{1000}}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{100}}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{10}}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont\num{1}}%
+          \\
+        }{}%
+        % 
+        %%% Prise en compte de la cl\'e Puissances
+        % 
+        \ifboolKV[ClesTableaux]{Puissances}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times10^{9}$}%
+            &%
+            &%
+            &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times10^{6}$}%
+            &%
+          }{%
+            \ifboolKV[ClesTableaux]{Millions}{%
+              &%
+              &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times10^{6}$}%
+              &%
+            }{%
+            }}%
+          &%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times10^3$}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times\num{10}^2$}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times\num{10}^1$}%
+          &\Block[draw]{}{\fontsize{5}{5}\selectfont $\times\num{1}$}%
+          \\%
+        }{}%
+        % 
+        %%% Lignes vierges
+        % 
+        \hline%
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&}{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            &&&}{}%
+          &&&&&\\}%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+          \Block[]{}{\tikz[remember picture,overlay]{\coordinate (L1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (K1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (J1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (I1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (H1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (G1);}}&}{}%
+        \ifboolKV[ClesTableaux]{Millions}{%
+          \Block[]{}{\tikz[remember picture,overlay]{\coordinate (I1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (H1);}}&\Block[]{}{\tikz[remember picture,overlay]{\coordinate (G1);}}&}{}%
+        \Block[]{}{\tikz[remember picture,overlay]{\coordinate (F1);}}
+        &\Block[]{}{\tikz[remember picture,overlay]{\coordinate (E1);}}
+        &\Block[]{}{\tikz[remember picture,overlay]{\coordinate (D1);}}
+        &\Block[]{}{\tikz[remember picture,overlay]{\coordinate (C1);}}
+        &\Block[]{}{\tikz[remember picture,overlay]{\coordinate (B1);}}
+        &\Block[]{}{\tikz[remember picture,overlay]{\coordinate (A1);}}\\
+        \CodeAfter%
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{\PfCDerniereColonne}}\do{%
+          \tikz\draw (\fpeval{\DecalageLigne+1}-|##1)--(\fpeval{\DecalageLigne+1+\useKV[ClesTableaux]{NbLignes}+1}-|##1);%
+        }%
+        %% On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar{,}%
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{%
+          \StrLen{\ListeNombreAPlacer[##2]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {\TabLongueurNombre}{1}}\do{%
+            \tikz\node at (\fpeval{\DecalageLigne+##2+1.5}-|\fpeval{\PfCDerniereColonne-0.5-\TabLongueurNombre+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2]}{##1}{##1}};%
+          }%
+        }%
+        \fi%
+        % On trace les éventuelles fleches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%%
+        \ifboolKV[ClesTableaux]{Classes}{}{%
+          \ifboolKV[ClesTableaux]{FlechesB}{%
+            \ifboolKV[ClesTableaux]{Milliards}{%
+              \xintFor* ##1 in {\xintSeq{1}{11}}\do{%
+                \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{1.5+##1}) to node[below, midway]{\small$\div\num{10}$}(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{0.5+##1});%
+              }%
+            }{%
+              \ifboolKV[ClesTableaux]{Millions}{%
+                \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+                  \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{1.5+##1}) to node[below, midway]{\small$\div\num{10}$}(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{0.5+##1});%
+                }%
+              }{%
+                \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
+                  \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{1.5+##1}) to node[below, midway]{\small$\div\num{10}$}(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{0.5+##1});%
+                }%
+              }%
+            }%
+          }{}%
+          \ifboolKV[ClesTableaux]{FlechesH}{%
+            \ifboolKV[ClesTableaux]{Milliards}{%
+              \xintFor* ##1 in {\xintSeq{1}{11}}\do{%
+                \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{0.5+##1}) to node[above, midway]{\small$\times\num{10}$}(1.5-|\fpeval{1.5+##1});%
+              }%
+            }{%
+              \ifboolKV[ClesTableaux]{Millions}{%
+                \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+                  \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{0.5+##1}) to node[above, midway]{\small$\times\num{10}$}(1.5-|\fpeval{1.5+##1});%
+                }%
+              }{%
+                \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
+                  \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{0.5+##1}) to node[above, midway]{\small$\times\num{10}$}(1.5-|\fpeval{1.5+##1});%
+                }%
+              }%
+            }%
+          }{}%
+        }%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
+  }{}%
+  % 
+  %%% Cl\'e Decimaux
+  % 
+  \ifboolKV[ClesTableaux]{Decimaux}{%
+    \xdef\DecalageLigne{0}%
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      % 
+      %%% Definition du tableau
+      % 
+      \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonne{16}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonne{13}}{\xdef\PfCDerniereColonne{10}}}%
+      \begin{NiceTabular}{*{\ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }}{m{4.75em}}>{\columncolor{gray!15}}{c}*{3}{m{4.75em}}}%
+      	% 
+      	%%% Prise en compte de la cl\'e Partie
+      	% 
+        \ifboolKV[ClesTableaux]{Partie}{%
+          \Block[]{1-%
+            \ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }}{\bfseries Partie enti\`ere}\ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&%
+          }{%
+            \ifboolKV[ClesTableaux]{Millions}{%
+              &&&%
+            }{%
+            }}%
+          &&&&&%
+          &\Block[fill=gray!15]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}\xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%%
+          &\Block[]{1-3}{\bfseries Partie d\'ecimale}%
+          &&\\
+        }{}%
+        %
+      	%%% Prise en compte de la cl\'e Classes
+      	%
+        \ifboolKV[ClesTableaux]{Classes}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}\ifboolKV[ClesTableaux]{Milliards}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurG}}]{1-3}{Classe des milliards}&&&\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}%
+          \ifboolKV[ClesTableaux]{Millions}{\Block[draw,fill={\useKV[ClesTableaux]{CouleurM}}]{1-3}{Classe des millions}&&&}{}%
+          \Block[draw,fill={\useKV[ClesTableaux]{Couleurm}}]{1-3}{Classe des milliers}&&%
+          &\Block[draw,fill={\useKV[ClesTableaux]{Couleuru}}]{1-3}{Classe des unités}&&
+          &\Block[draw,fill=gray!15]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[draw]{1-3}{}&&%
+          \\
+        }{}%
+        % 
+        %%% Valeurs ci-dessous par d\'efaut
+        % 
+        \hline
+        \ifboolKV[ClesTableaux]{Milliards}{%
+          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont centaines de milliards}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de milliards}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont unit\'es de milliards}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont centaines de millions}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de millions}%
+          &\Block[]{}{\fontsize{5}{5}\selectfont unit\'es de millions}%
+          &
+        }{}%
+        \ifboolKV[ClesTableaux]{Millions}{%
+          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont centaines de millions}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de millions}%
+          &\Block[]{}{\fontsize{5}{5}\selectfont unit\'es de millions}%
+          &
+        }{}%
+        \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont centaines de milliers}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines de milliers}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont unit\'es de milliers}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont centaines}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dizaines}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont unit\'es}%
+        &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont dixi\`emes}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont centi\`emes}%
+        &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont milli\`emes}\\
+        %
+      	%%% Prise en compte de la cl\'e Nombres
+      	%
+        \ifboolKV[ClesTableaux]{Nombres}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont\num{100000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont\num{10000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont\num{1000000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{100000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000000}}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont \num{1000000}}%
+            &%
+          }{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont \num{100000000}}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000000}}%
+            &\Block[borders={}]{}{\fontsize{5}{5}\selectfont \num{1000000}}%
+            &%
+          }{}%
+          \Block[borders={left,right}]{}{\fontsize{5}{5}\selectfont \num{100000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{1000}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{100}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{10}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{1}}%
+          &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$}%
+          \\
+        }{}%
+        %
+        %%% Prise en compte de la cl\'e Puissances
+        %
+        \ifboolKV[ClesTableaux]{Puissances}{%
+          \xdef\DecalageLigne{\fpeval{\DecalageLigne+1}}%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            \Block[borders={left,right}]{}{}&%
+            \Block[borders={right}]{}{}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^{9}$}%
+            &\Block[borders={right}]{}{}%
+            &\Block[borders={right}]{}{}%
+            &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^{6}$}%
+            &\Block[borders={right}]{}{}%
+          }{%
+            \ifboolKV[ClesTableaux]{Millions}{%
+              \Block[borders={left,right}]{}{}&%
+              \Block[borders={right}]{}{}%
+              &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^{6}$}%
+              &%
+            }{%
+            }}%
+          \Block[borders={left,right}]{}{}&\Block[borders={right}]{}{}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times10^3$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^2$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^1$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{1}$}%
+          &\Block[borders={right}]{}{\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-1}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-2}$}%
+          &\Block[borders={right}]{}{\fontsize{5}{5}\selectfont $\times\num{10}^{-3}$}%
+          \\%
+        }{}%
+        %
+        %%% Lignes vierges
+        %
+        \hline%
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&}{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            &&&}{}%
+          &&&&&&,&&&\\}%
+        \CodeAfter%
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCDerniereColonne+1}}}\do{%
+          \tikz\draw (\fpeval{\DecalageLigne+2}-|##1)--(\fpeval{\DecalageLigne+2+\useKV[ClesTableaux]{NbLignes}}-|##1);%
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonneEntiere{13}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonneEntiere{10}}{\xdef\PfCDerniereColonneEntiere{7}}}%
+        \xdef\PfCPremiereColonneDecimale{\fpeval{\PfCDerniereColonneEntiere+2}}%
+        \setsepchar[*]{,*.}%
+        \ignoreemptyitems%
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{%
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {\TabLongueurNombre}{1}}\do{%
+            \tikz\node at (\fpeval{\DecalageLigne+##2+1.5}-|\fpeval{\PfCDerniereColonneEntiere-0.5-\TabLongueurNombre+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};%
+          }%
+          \StrLen{\ListeNombreAPlacer[##2,2]}[\TabLongueurNombre]%
+          \xintifboolexpr{\ListeNombreAPlacer[##2,2]==0}{}{%
+            \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+              \tikz\node at (\fpeval{\DecalageLigne+##2+1.5}-|\fpeval{\PfCPremiereColonneDecimale-1.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,2]}{##1}{##1}};%
+            }%
+          }%
+        }%
+        \fi%
+      \end{NiceTabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
+  }{}%
+  % Décimal version inclinée
+  \ifboolKV[ClesTableaux]{Incline}{%
+    \colorlet{PfCCouleurd}{\useKV[ClesTableaux]{Couleurd}}%
+    \xdef\DecalageLigne{0}%
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      %
+      %%% Definition du tableau
+      %
+      \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonne{17}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonne{14}}{\xdef\PfCDerniereColonne{11}}}%
+      \begin{NiceTabular}{*{\ifboolKV[ClesTableaux]{Milliards}{12}{%
+              \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+            }}{wc{1cm}}*{5}{wc{1cm}}}%
+        %
+        \CodeBefore%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurG}}] (1|-5)--(2|-1)--(3|-1)--(2|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurG}}] (2|-5)--(3|-1)--(4|-1)--(3|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurG}}] (3|-5)--(4|-1)--(5|-1)--(4|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurM}}] (4|-5)--(5|-1)--(6|-1)--(5|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurM}}] (5|-5)--(6|-1)--(7|-1)--(6|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurM}}] (6|-5)--(7|-1)--(8|-1)--(7|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (7|-5)--(8|-1)--(9|-1)--(8|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (8|-5)--(9|-1)--(10|-1)--(9|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (9|-5)--(10|-1)--(11|-1)--(10|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (10|-5)--(11|-1)--(12|-1)--(11|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (11|-5)--(12|-1)--(13|-1)--(12|-5)--cycle;
+          \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (12|-5)--(13|-1)--(14|-1)--(13|-5)--cycle;
+          \tikz\draw[draw=black,fill=PfCCouleurd!50] (13|-5)--(14|-1)--(15|-1)--(14|-5)--cycle;
+          \tikz\draw[draw=black,fill=PfCCouleurd!40] (14|-5)--(15|-1)--(16|-1)--(15|-5)--cycle;
+          \tikz\draw[draw=black,fill=PfCCouleurd!30] (15|-5)--(16|-1)--(17|-1)--(16|-5)--cycle;
+          \tikz\draw[draw=black,fill=PfCCouleurd!20] (16|-5)--(17|-1)--(18|-1)--(17|-5)--cycle;
+        }{\ifboolKV[ClesTableaux]{Millions}{%
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurM}}] (1|-5)--(2|-1)--(3|-1)--(2|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurM}}] (2|-5)--(3|-1)--(4|-1)--(3|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{CouleurM}}] (3|-5)--(4|-1)--(5|-1)--(4|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (4|-5)--(5|-1)--(6|-1)--(5|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (5|-5)--(6|-1)--(7|-1)--(6|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (6|-5)--(7|-1)--(8|-1)--(7|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (7|-5)--(8|-1)--(9|-1)--(8|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (8|-5)--(9|-1)--(10|-1)--(9|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (9|-5)--(10|-1)--(11|-1)--(10|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!50] (10|-5)--(11|-1)--(12|-1)--(11|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!40] (11|-5)--(12|-1)--(13|-1)--(12|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!30] (12|-5)--(13|-1)--(14|-1)--(13|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!20] (13|-5)--(14|-1)--(15|-1)--(14|-5)--cycle;
+          }{%
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (1|-5)--(2|-1)--(3|-1)--(2|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (2|-5)--(3|-1)--(4|-1)--(3|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleurm}}] (3|-5)--(4|-1)--(5|-1)--(4|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (4|-5)--(5|-1)--(6|-1)--(5|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (5|-5)--(6|-1)--(7|-1)--(6|-5)--cycle;
+            \tikz\draw[draw=black,fill={\useKV[ClesTableaux]{Couleuru}}] (6|-5)--(7|-1)--(8|-1)--(7|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!50] (7|-5)--(8|-1)--(9|-1)--(8|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!40] (8|-5)--(9|-1)--(10|-1)--(9|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!30] (9|-5)--(10|-1)--(11|-1)--(10|-5)--cycle;
+            \tikz\draw[draw=black,fill=PfCCouleurd!20] (10|-5)--(11|-1)--(12|-1)--(11|-5)--cycle;
+          }%
+        }%
+        \Body
+        %% Pour décaler et laisser la place nécessaire
+        \xintFor* ##1 in {\xintSeq{1}{4}}\do{%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&}{}%
+          \ifboolKV[ClesTableaux]{Millions}{%
+            &&&}{}%
+          &&&&&&&&&&\\}%
+        %%% Lignes vierges       
+        %
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          \ifboolKV[ClesTableaux]{Milliards}{%
+            &&&&&&}{}%                         
+          \ifboolKV[ClesTableaux]{Millions}{%
+            &&&}{}%
+          &&&&&&&&&&\\}%
+        \CodeAfter%%
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{2}{\fpeval{\PfCDerniereColonne-1}}}\do{%
+          \tikz\draw[dashed] (\fpeval{\DecalageLigne+5}-|##1)--(\fpeval{\DecalageLigne+5+\useKV[ClesTableaux]{NbLignes}}-|##1);%
+        }%
+        \tikz\draw (\fpeval{\DecalageLigne+5}-|1)--(\fpeval{\DecalageLigne+5+\useKV[ClesTableaux]{NbLignes}}-|1);%
+        \tikz\draw (\fpeval{\DecalageLigne+5}-|\fpeval{\PfCDerniereColonne})--(\fpeval{\DecalageLigne+5+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{\PfCDerniereColonne});%
+        %% On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \ifboolKV[ClesTableaux]{Milliards}{\xdef\PfCDerniereColonneEntiere{13}}{\ifboolKV[ClesTableaux]{Millions}{\xdef\PfCDerniereColonneEntiere{10}}{\xdef\PfCDerniereColonneEntiere{7}}}%
+        \xdef\PfCPremiereColonneDecimale{\fpeval{\PfCDerniereColonneEntiere+1}}%
+        \setsepchar[*]{,*.}%
+        \ignoreemptyitems%
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{%
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {\TabLongueurNombre}{1}}\do{%
+            \tikz\node at (\fpeval{\DecalageLigne+##2+4.5}-|\fpeval{\PfCDerniereColonneEntiere-0.5-\TabLongueurNombre+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};%
+          }%
+          \StrLen{\ListeNombreAPlacer[##2,2]}[\TabLongueurNombre]%
+          \xintifboolexpr{\ListeNombreAPlacer[##2,2]==0}{}{%
+            %On place la virgule
+            \tikz\node[xshift=1em] at (\fpeval{\DecalageLigne+##2+4.5}-|\fpeval{\PfCDerniereColonneEntiere-0.5-\TabLongueurNombre+1}) {\PfCTBstrut,};%
+            %on écrit la partie décimale
+            \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+              \tikz\node at (\fpeval{\DecalageLigne+##2+4.5}-|\fpeval{\PfCPremiereColonneDecimale-1.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,2]}{##1}{##1}};%
+            }%
+          }%
+        }%
+        \fi%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+          \tikz\node[rotate=58] at (2|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\\de milliards\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (3|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\\de milliards\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (4|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Milliards\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (5|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\\de millions\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (6|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\\de millions\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (7|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Millions\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (8|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\\de milliers\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (9|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\\de milliers\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (10|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Milliers\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (11|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (12|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (13|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Unités\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (14|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dixièmes\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (15|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centièmes\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (16|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Millièmes\end{center}\end{minipage}};
+          \tikz\node[rotate=58] at (17|-3) {\begin{minipage}{2cm}\begin{center}\scriptsize Dix-millièmes\end{center}\end{minipage}};
+        }{\ifboolKV[ClesTableaux]{Millions}{%
+            \tikz\node[rotate=58] at (2|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\\de millions\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (3|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\\de millions\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (4|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Millions\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (5|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\\de milliers\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (6|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\\de milliers\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (7|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Milliers\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (8|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (9|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (10|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Unités\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (11|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dixièmes\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (12|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centièmes\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (13|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Millièmes\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (14|-3) {\begin{minipage}{2cm}\begin{center}\scriptsize Dix-millièmes\end{center}\end{minipage}};
+          }{%
+            \tikz\node[rotate=58] at (2|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\\de milliers\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (3|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\\de milliers\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (4|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Milliers\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (5|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centaines\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (6|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dizaines\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (7|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Unités\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (8|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Dixièmes\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (9|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Centièmes\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (10|-3) {\begin{minipage}{1.5cm}\begin{center}\scriptsize Millièmes\end{center}\end{minipage}};
+            \tikz\node[rotate=58] at (11|-3) {\begin{minipage}{2cm}\begin{center}\scriptsize Dix-millièmes\end{center}\end{minipage}};
+          }%
+        }%
+      \end{NiceTabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
+  }{}%  
+  %
+  %%% Prise en compte de la cl\'e Metre
+  %
+  \ifboolKV[ClesTableaux]{Metre}{%
+    \[\renewcommand{\arraystretch}{1.15}%
+      \begin{NiceTabular}{*{7}{wc{7.5mm}}}%
+        \Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}\\
+        \Block[draw]{}{km\PfCTBstrut}&\Block[draw]{1-1}{hm\PfCTBstrut}&\Block[draw]{1-1}{dam\PfCTBstrut}&\Block[draw]{1-1}{m\PfCTBstrut}&\Block[draw]{1-1}{dm\PfCTBstrut}&\Block[draw]{1-1}{cm\PfCTBstrut}&\Block[draw]{1-1}{mm\PfCTBstrut}\\
+        \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          &&&&&&\\
+        }%
+        \Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}\\
+        \CodeAfter
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+          \tikz\draw (3-|##1)--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|##1);
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{##2+2.5}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
+          }%
+        }
+        \fi%
+        % on trace les flèches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+        \ifboolKV[ClesTableaux]{FlechesH}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{0.5+##1}) to node[above, midway]{\small$\times\num{10}$}(1.5-|\fpeval{1.5+##1});%
+          }%
+        }{}%
+        \ifboolKV[ClesTableaux]{FlechesB}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{3+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{1.5+##1}) to node[below,midway]{\small$\div\num{10}$}(\fpeval{3+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{0.5+##1});%
+          }%
+        }{}%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}%
+    \]%
+  }%
+  {}%
+  %
+  %%% Prise en compte de la cl\'e Carre
+  %
+  \ifboolKV[ClesTableaux]{Carre}{%
+    \[\renewcommand{\arraystretch}{1.15}%
+      \begin{NiceTabular}{*{7}{wc{3.5mm}wc{3.5mm}}}%
+        \Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}\\
+        \Block[borders={left,top,right}]{1-2}{km$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{hm$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{dam$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{m$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{dm$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{cm$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{mm$^2$\PfCTBstrut}&\\
+        \ifboolKV[ClesTableaux]{Are}{%
+          \Block[borders={left,right,bottom}]{1-2}{}&&\Block[draw=gray!50,borders={left,top,bottom}]{}{~}&\Block[borders={top,right,bottom}]{}{\scriptsize ha}&\Block[draw=gray!50,borders={left,top,bottom}]{}{~}&\Block[borders={top,right,bottom}]{}{\scriptsize a}&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&\\
+        }{\hline}%
+        \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          &&&&&&&&&&&&&\\
+        }%
+        \Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}%
+        &&\Block[]{1-2}{}\\
+        \CodeAfter
+        % on trace les lignes verticales
+        \xintifboolexpr{\useKV[ClesTableaux]{Are}}{%
+          \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+            \tikz\draw (4-|\fpeval{2*(##1-1)+1})--(\fpeval{4+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{2*(##1-1)+1});
+          }%
+          \xintFor* ##1 in {\xintSeq{1}{7}}\do{%
+            \tikz\draw[gray!50] (4-|\fpeval{2*(##1-1)+2})--(\fpeval{4+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{2*(##1-1)+2});
+          }%
+        }{%
+          \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+            \tikz\draw (3-|\fpeval{2*(##1-1)+1})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{2*(##1-1)+1});
+          }%
+          \xintifboolexpr{\useKV[ClesTableaux]{Colonnes}}{%
+            \xintFor* ##1 in {\xintSeq{1}{7}}\do{%
+              \tikz\draw[gray!50] (3-|\fpeval{2*(##1-1)+2})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{2*(##1-1)+2});
+            }%
+          }{}%
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{##2+\ifboolKV[ClesTableaux]{Are}{3.5}{2.5}}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
+          }%
+        }
+        \fi%
+        % on trace les flèches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+        \ifboolKV[ClesTableaux]{Are}{\xdef\PfCTableauDepart{4}}{\xdef\PfCTableauDepart{3}}%
+        \ifboolKV[ClesTableaux]{FlechesH}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{2*##1}) to node[above, midway]{\small$\times\num{100}$}(1.5-|\fpeval{2*(##1+1)});%
+          }%
+        }{}%
+        \ifboolKV[ClesTableaux]{FlechesB}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{\PfCTableauDepart+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{2*(##1+1)}) to node[below,midway]{\small$\div\num{100}$}(\fpeval{\PfCTableauDepart+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{2*##1});%
+          }%
+        }{}%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}
+    \]%
+  }{}%
+  %
+  %%% Prise en compte de la cl\'e Cube
+  %
+  \ifboolKV[ClesTableaux]{Cube}{%
+    \[\renewcommand{\arraystretch}{1.15}%
+%      \setlength{\tabcolsep}{0.625\tabcolsep}%
+%      \begin{NiceTabular}{*{7}{wc{3.5mm}wc{3.5mm}wc{3.5mm}}}
+      \setlength{\tabcolsep}{0.275\tabcolsep}%
+      \begin{NiceTabular}{*{7}{wc{15pt}wc{15pt}wc{15pt}}}
+        \Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}\\
+        \Block[borders={left,top,right}]{1-3}{km$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{hm$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{dam$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{m$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{dm$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{cm$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{mm$^3$\PfCTBstrut}&&\\
+        \ifboolKV[ClesTableaux]{Capacite}{%
+          \Block[borders={left,right,bottom}]{1-3}{}&&&\Block[borders={right,bottom}]{1-3}{}&&&\Block[borders={right,bottom}]{1-3}{}&&&\Block[borders={right,bottom}]{1-3}{}&&&\Block[draw=gray!50,borders={top,left,bottom}]{}{\scriptsize hL}&\Block[draw=gray!50,borders={top,bottom}]{}{\scriptsize daL}&\Block[draw=gray!50,borders={top,right,bottom}]{}{\scriptsize L}&\Block[draw=gray!50,borders={top,left,bottom}]{}{\scriptsize dL}&\Block[draw=gray!50,borders={top,bottom}]{}{\scriptsize cL}&\Block[draw=gray!50,borders={top,right,bottom}]{}{\scriptsize mL}&\Block[borders={right,bottom}]{1-3}{}&&\\
+        }{\hline}%
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        &&&&&&&&&&&&&&&&&&&&\\
+        }%
+        \Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}%
+        &&&\Block[]{1-3}{}\\
+        \CodeAfter
+        % on trace les lignes verticales
+        \xintifboolexpr{\useKV[ClesTableaux]{Capacite}}{%
+          \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+            \tikz\draw (4-|\fpeval{3*(##1-1)+1})--(\fpeval{4+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*(##1-1)+1});
+          }%
+          \xintFor* ##1 in {\xintSeq{1}{7}}\do{%
+            \tikz\draw[gray!50] (4-|\fpeval{3*(##1-1)+2})--(\fpeval{4+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*(##1-1)+2});
+            \tikz\draw[gray!50] (4-|\fpeval{3*##1})--(\fpeval{4+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*##1});
+          }%
+        }{%
+          \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+            \tikz\draw (3-|\fpeval{3*(##1-1)+1})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*(##1-1)+1});
+          }%
+          \xintifboolexpr{\useKV[ClesTableaux]{Colonnes}}{%
+            \xintFor* ##1 in {\xintSeq{1}{7}}\do{%
+              \tikz\draw[gray!50] (3-|\fpeval{3*(##1-1)+2})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*(##1-1)+2});
+              \tikz\draw[gray!50] (3-|\fpeval{3*##1})--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|\fpeval{3*##1});
+            }%
+          }{}%
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{##2+\ifboolKV[ClesTableaux]{Capacite}{3.5}{2.5}}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
+          }%
+        }%
+        \fi%
+        % on trace les flèches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+        \ifboolKV[ClesTableaux]{Capacite}{\xdef\PfCTableauDepart{4}}{\xdef\PfCTableauDepart{3}}%
+        \ifboolKV[ClesTableaux]{FlechesH}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{2.5+3*(##1-1)}) to node[above, midway]{\small$\times\num{1000}$}(1.5-|\fpeval{2.5+3*##1});%
+          }%
+        }{}%
+        \ifboolKV[ClesTableaux]{FlechesB}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{\PfCTableauDepart+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{2.5+3*##1}) to node[below,midway]{\small$\div\num{1000}$}(\fpeval{\PfCTableauDepart+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{2.5+3*(##1-1)});%
+          }%
+        }{}%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}
+    \]%
+  }{}%
+  %
+  %%% Prise en compte de la cl\'e Litre
+  %
+  \ifboolKV[ClesTableaux]{Litre}{%
+    \[\renewcommand{\arraystretch}{1.15}%
+      \begin{NiceTabular}{*{6}{wc{7.5mm}}}%
+        \Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}\\
+        \Block[draw]{}{hL\PfCTBstrut}&\Block[draw]{}{daL\PfCTBstrut}&\Block[draw]{}{L\PfCTBstrut}&\Block[draw]{}{dL\PfCTBstrut}&\Block[draw]{}{cL\PfCTBstrut}&\Block[draw]{}{mL\PfCTBstrut}\\
+        \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          &&&&&\\
+        }
+        \Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}
+        &\Block[]{1-1}{}\\
+        \CodeAfter
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{7}}\do{%
+          \tikz\draw (3-|##1)--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|##1);
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{##2+2.5}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
+          }%
+        }%
+        \fi%
+        % on trace les flèches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+        \ifboolKV[ClesTableaux]{FlechesH}{%
+          \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
+            \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{0.5+##1}) to node[above, midway]{\small$\times\num{10}$}(1.5-|\fpeval{1.5+##1});%
+          }%
+        }{}%
+        \ifboolKV[ClesTableaux]{FlechesB}{%
+          \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
+            \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{3+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{1.5+##1}) to node[below,midway]{\small$\div\num{10}$}(\fpeval{3+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{0.5+##1});%
+          }%
+        }{}%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}%
+    \]%
+  }{}%
+  % 
+  %%% Prise en compte de la cl\'e Gramme
+  % 
+  \ifboolKV[ClesTableaux]{Gramme}{%
+    \[\renewcommand{\arraystretch}{1.15}%
+      \begin{NiceTabular}{*{7}{wc{7.5mm}}}%
+        \Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}\\
+        \Block[draw]{}{kg\PfCTBstrut}&\Block[draw]{1-1}{hg\PfCTBstrut}&\Block[draw]{1-1}{dag\PfCTBstrut}&\Block[draw]{1-1}{g\PfCTBstrut}&\Block[draw]{1-1}{dg\PfCTBstrut}&\Block[draw]{1-1}{cg\PfCTBstrut}&\Block[draw]{1-1}{mg\PfCTBstrut}\\
+        \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+          &&&&&&\\
+        }%
+        \Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}
+        &\Block[]{}{}\\
+        \CodeAfter
+        % on trace les lignes verticales
+        \xintFor* ##1 in {\xintSeq{1}{8}}\do{%
+          \tikz\draw (3-|##1)--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|##1);
+        }%
+        % On place le nombre éventuel
+        \ifx\bla#2\bla%
+        \else%
+        \setsepchar[*]{,*/}
+        \readlist*\ListeNombreAPlacer{#2}%
+        \xintFor* ##2 in{\xintSeq {1}{\ListeNombreAPlacerlen}}\do{
+          \StrLen{\ListeNombreAPlacer[##2,1]}[\TabLongueurNombre]%
+          \xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
+            \tikz\node at (\fpeval{##2+2.5}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
+          }%
+        }
+        \fi%
+        % on trace les flèches
+        \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+        \ifboolKV[ClesTableaux]{FlechesH}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=30,in=150] (1.5-|\fpeval{0.5+##1}) to node[above, midway]{\small$\times\num{10}$}(1.5-|\fpeval{1.5+##1});%
+          }%
+        }{}%
+        \ifboolKV[ClesTableaux]{FlechesB}{%
+          \xintFor* ##1 in {\xintSeq{1}{6}}\do{%
+            \tikz\draw[gray,->,>=latex,out=-150,in=-30] (\fpeval{3+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{1.5+##1}) to node[below,midway]{\small$\div\num{10}$}(\fpeval{3+\useKV[ClesTableaux]{NbLignes}+0.5}-|\fpeval{0.5+##1});%
+          }%
+        }{}%
+        \useKV[ClesTableaux]{CodeAfter}%
+      \end{NiceTabular}%
+    \]%
+  }{}%
+}%
+}%
+
+\newcommand\PfCTableauIncline{%
+\begin{NiceTabular}{wc{30pt}wc{30pt}wc{30pt}wc{30pt}wc{30pt}wc{30pt}wc{30pt}}
+  &&&&&&\\
+  \Block[borders={bottom}]{}{\si{\kilo\PfCTableauUnite}}&\\
+  &\Block[borders={left}]{}{}&\\
+  &\Block[borders={left,bottom}]{}{\si{\hecto\PfCTableauUnite}}&\\
+  &&\Block[borders={left}]{}{}&\\
+  &&\Block[borders={left,bottom}]{}{\si{\deca\PfCTableauUnite}}&\\
+  &&&\Block[borders={left}]{}{}&\\
+  &&&\Block[borders={left,bottom}]{}{\si{\PfCTableauUnite}}&\\
+  &&&&\Block[borders={left}]{}{}&\\
+  &&&&\Block[borders={left,bottom}]{}{\si{\deci\PfCTableauUnite}}&\\
+  &&&&&\Block[borders={left}]{}{}&\\
+  &&&&&\Block[borders={left,bottom}]{}{\si{\centi\PfCTableauUnite}}&\\
+  &&&&&&\Block[borders={left}]{}{}\\
+  &&&&&&\Block[borders={left,bottom}]{}{\si{\milli\PfCTableauUnite}}\\
+  &&&&&&
+  \CodeAfter
+  \tikz\draw[out=35,in=90,-stealth,gray] (2-|1.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(4-|2.5);
+  \tikz\draw[out=35,in=90,-stealth,gray] (4-|2.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(6-|3.5);
+  \tikz\draw[out=35,in=90,-stealth,gray] (6-|3.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(8-|4.5);
+  \tikz\draw[out=35,in=90,-stealth,gray] (8-|4.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(10-|5.5);
+  \tikz\draw[out=35,in=90,-stealth,gray] (10-|5.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(12-|6.5);
+  \tikz\draw[out=35,in=90,-stealth,gray] (12-|6.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(14-|7.5);
+  % bas
+  \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (15-|7.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(13-|6.5);
+  \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (13-|6.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(11-|5.5);
+  \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (11-|5.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(9-|4.5);
+  \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (9-|4.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(7-|3.5);
+  \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (7-|3.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(5-|2.5);
+  \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (5-|2.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(3-|1.5);
+\end{NiceTabular}%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTableauxUnites.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTablesOperations.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTablesOperations.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTablesOperations.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,103 @@
+%%%
+% Tables Addition-Multiplication
+%%%
+\setKVdefault[Tables]{Addition=false,Multiplication=true,Seul=false,Debut=0,Fin=10,Couleur=white}
+
+% pour m\'emoire
+\newcommand\TableMultiplicationComplete{%
+  \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
+  \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}%
+    \hline
+    $\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+    &\cellcolor{gray!15}\fpeval{##1}
+      }
+    \\
+    \hline
+    \xintFor* ##1 in {\xintSeq {0}{10}}\do{%
+    ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+    &\fpeval{##2*##1}
+      }
+    \\
+    \hline
+    }
+  \end{tabular}%
+}
+%%%%
+
+\newcommand\TableMultiplicationCompleteColore{%
+  \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
+  \begin{tabular}{|>{\columncolor{gray!15}\centering}p{15pt}|*{\NbColTabMul}{>{\centering\arraybackslash}p{15pt}|}}%
+    \hline
+    $\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+    &\cellcolor{gray!15}\fpeval{##1}%
+      }
+    \\
+    \hline
+    \xintFor* ##1 in {\xintSeq {0}{10}}\do{%
+    ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+    &\xintifboolexpr{##2<##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##1*10}}}{\xintifboolexpr{##2>##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##2*10}}}{}}\fpeval{##2*##1}%
+      }%
+    \\
+    \hline
+    }%
+  \end{tabular}%
+}%
+
+\newcommand\TableAdditionComplete{%
+  \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
+  \begin{tabular}{|>{\columncolor{gray!15}\centering}p{15pt}|*{\NbColTabMul}{>{\centering\arraybackslash}p{15pt}|}}%
+    \hline
+    $+$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+    &\cellcolor{gray!15}\fpeval{##1}
+      }
+    \\
+    \hline
+    \xintFor* ##1 in {\xintSeq {0}{10}}\do{%
+    ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+    &\fpeval{##2+##1}
+      }
+    \\
+    \hline
+    }
+  \end{tabular}%
+}
+
+\newcommand\TableMultiplicationSeule[1]{%
+  \ensuremath{%
+    \begin{array}{ccccc}%
+      \xintFor* ##1 in {\xintSeq
+      {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{
+      ##1&\times&#1&=&\fpeval{##1*#1}\\
+      }
+    \end{array}
+  }%
+}%
+
+\newcommand\TableAdditionSeule[1]{%
+  \ensuremath{%
+    \begin{array}{ccccc}
+      \xintFor* ##1 in {\xintSeq
+      {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{
+      ##1&+&#1&=&\fpeval{##1+#1}\\
+      }
+    \end{array}
+  }%
+}%
+
+\newcommand\Tables[2][]{%
+  \useKVdefault[Tables]%
+  \setKV[Tables]{#1}%
+  \ifboolKV[Tables]{Seul}{%
+    \ifboolKV[Tables]{Addition}{%
+      \TableAdditionSeule{#2}%
+    }{%
+      \TableMultiplicationSeule{#2}%
+    }%
+  }{%
+    \ifboolKV[Tables]{Addition}{%
+      \TableAdditionComplete%
+    }{%
+      \TableMultiplicationCompleteColore%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTablesOperations.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTectonic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTectonic.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTectonic.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,108 @@
+%%%
+% Tectonic
+%%%
+\setKVdefault[ClesTectonic]{CouleurCase=LightGray,TLargeur=5,THauteur=5,Solution=false,Largeur=25pt,CouleurSolution=black,Tailles=false,Aide=false}%
+\defKV[ClesTectonic]{Taille=\setKV[ClesTectonic]{Tailles}}%
+\defKV[ClesTectonic]{ListeNombres=\setKV[ClesTectonic]{Aide}}%
+
+\newlength\PfCTectonic
+
+\NewDocumentCommand\Tectonic{o m}{%
+  \useKVdefault[ClesTectonic]%
+  \setKV[ClesTectonic]{#1}%
+  \ifboolKV[ClesTectonic]{Tailles}{%
+    \setKV[ClesTectonic]{THauteur=\useKV[ClesTectonic]{Taille}}%
+    \setKV[ClesTectonic]{TLargeur=\useKV[ClesTectonic]{Taille}}%
+  }{}%
+  \setlength{\PfCTectonic}{\useKV[ClesTectonic]{Largeur}+\tabcolsep}%
+  \setsepchar[*]{,*/}%
+  \readlist*\ListeCasesTectonic{#2}%
+  \savecomparemode%
+  \comparestrict%
+  \begin{NiceTabular}{*{\useKV[ClesTectonic]{TLargeur}}{m{\useKV[ClesTectonic]{Largeur}}}}%
+    \CodeBefore%
+    \xintFor* ##1 in {\xintSeq{2}{\fpeval{\useKV[ClesTectonic]{THauteur}}}}\do{%
+      \tikz\draw[gray] (##1-|1) -- (##1-|last);%
+    }%
+    \xintFor* ##1 in {\xintSeq{2}{\fpeval{\useKV[ClesTectonic]{TLargeur}}}}\do{%
+      \tikz\draw[gray] (1-|##1) -- (last-|##1);%
+    }%
+    \Body%
+    \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[ClesTectonic]{THauteur}-1}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[ClesTectonic]{TLargeur}}}\do{%
+        \rule{0pt}{\PfCTectonic}%
+        \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},1]}{b}[\PfCTestb]%\PfCTestb
+        \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},1]}{l}[\PfCTestl]%\PfCTestr
+        \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},1]}{lb}[\PfCTestlb]%\PfCTestbr
+        \xintifboolexpr{\PfCTestb==0}{%
+          \Block[borders={bottom},line-width=2pt]{1-1}{%
+            \ifboolKV[ClesTectonic]{Solution}{%
+              \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},2]}{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}[\PfCTestMeme]
+                \xintifboolexpr{\PfCTestMeme>0}{\color{\useKV[ClesTectonic]{CouleurSolution}}}{}%
+              \Large\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]%
+            }{%
+              \ifboolKV[ClesTectonic]{Aide}{%
+                \xintifboolexpr{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]==\useKV[ClesTectonic]{Nombre}}{%
+                  \cellcolor{LightGray}\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]%
+                }{}%
+              }{}%
+            }%
+          }%
+        }{%
+          \xintifboolexpr{\PfCTestl==0}{%
+            \Block[borders={left},line-width=2pt]{1-1}{\ifboolKV[ClesTectonic]{Solution}{%
+                \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},2]}{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}[\PfCTestMeme]
+                \xintifboolexpr{\PfCTestMeme>0}{\color{\useKV[ClesTectonic]{CouleurSolution}}}{}%
+                \Large\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}{%
+                \ifboolKV[ClesTectonic]{Aide}{%
+                  \xintifboolexpr{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]==\useKV[ClesTectonic]{Nombre}}{%
+                    \cellcolor{LightGray}\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]%
+                  }{}%
+                }{}%
+              }%
+            }%
+          }{%
+            \xintifboolexpr{\PfCTestlb==0}{%
+              \Block[borders={bottom,left},line-width=2pt]{1-1}{\ifboolKV[ClesTectonic]{Solution}{%
+                  \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},2]}{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}[\PfCTestMeme]
+                  \xintifboolexpr{\PfCTestMeme>0}{\color{\useKV[ClesTectonic]{CouleurSolution}}}{}
+                  \Large\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}{%
+                  \ifboolKV[ClesTectonic]{Aide}{%
+                    \xintifboolexpr{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]==\useKV[ClesTectonic]{Nombre}}{%
+                      \cellcolor{LightGray}\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]%
+                    }{}%
+                  }{}%
+                }%
+              }%
+            }{%
+              \Block{1-1}{\ifboolKV[ClesTectonic]{Solution}{%
+                  \StrCompare{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},2]}{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}[\PfCTestMeme]
+                  \xintifboolexpr{\PfCTestMeme>0}{\color{\useKV[ClesTectonic]{CouleurSolution}}}{}
+                  \Large\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]}{%
+                  \ifboolKV[ClesTectonic]{Aide}{%
+                    \xintifboolexpr{\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]==\useKV[ClesTectonic]{Nombre}}{%
+                      \cellcolor{LightGray}\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*##1+##2},3]%
+                    }{}%
+                  }{}%
+                }%
+              }%
+            }%
+          }%
+        }%
+        \xintifForLast{\\}{&}%
+      }%
+    }%
+    \CodeAfter%
+    \tikz\draw[line width=2pt] (1-|1) rectangle (last-|last);%
+    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesTectonic]{THauteur}}}}\do{%
+      \xintFor* ##2 in {\xintSeq{1}{\useKV[ClesTectonic]{TLargeur}}}\do{%
+        \ifboolKV[ClesTectonic]{Solution}{%
+          %\tikz\node[fill=white] at (\fpeval{##1+0.5} -|\fpeval{##2+0.5}) {\Large$\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*(##1-1)+##2},2]$};%
+        }{%
+          \tikz\node at (\fpeval{##1+0.5} -|\fpeval{##2+0.5}) {\Large$\ListeCasesTectonic[\fpeval{\useKV[ClesTectonic]{TLargeur}*(##1-1)+##2},2]$};%
+        }%
+      }%
+    }%
+  \end{NiceTabular}%
+  \restorecomparemode%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTectonic.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,1331 @@
+%%%
+% Thales
+%%%
+\newcount\ppcm%
+
+\newcommand\PPCM[2]{%
+  \PGCD{#1}{#2}%
+  \ppcm=\numexpr#1*#2/\pgcd\relax%
+}%
+
+\setKVdefault[ClesThales]{Calcul=true,Droites=false,Propor=false,Segment=false,Figure=false,FigureSeule=false,Figurecroisee=false,FigurecroiseeSeule=false,Angle=0,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false,Echelle=1cm,Perso=false,CalculsPerso=false,IntroCalculs,CouleursNum=false,CouleursDen=false}
+\defKV[ClesThales]{CouleurNum=\setKV[ClesThales]{CouleursNum}}
+\defKV[ClesThales]{CouleurDen=\setKV[ClesThales]{CouleursDen}}
+
+\DeclareSIUnit{\PfCThalesUnit}{\useKV[ClesThales]{Unite}}%
+
+%On d\'efinit la figure \`a utiliser
+\def\MPFigThales#1#2#3#4#5#6{
+    % #1 Premier sommet
+    % #2 Deuxi\`eme sommet
+    % #3 Troisi\`eme sommet
+    % #4 point sur le segment #1#2
+    % #5 point sur le segment #1#3
+    % #6 angle de rotation
+  \ifluatex
+%  \mplibcodeinherit{enable}
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesThales]{Echelle};
+    boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;
+    pair A,B,C,M,N,O;%
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=u*(1,1);
+    B-A=u*(4,0);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On d\'efinit le centre du cercle circonscrit
+    O - .5[A,B] = whatever * (B-A) rotated 90;
+    O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    M=point(0.4*length cotes1) of cotes1;
+    N=point(0.6*length cotes3) of cotes3;
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    path triangle;
+    triangle=cotes1--cotes2--cotes3--cycle;
+    draw triangle;
+    draw cotes4;
+    if CouleursDen:
+    draw triangle dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen;
+    fi;
+    if CouleursNum:
+    draw (cotes1 cutafter cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes4 cutbefore cotes1 cutafter cotes3) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes3 cutbefore cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    fi;
+    %on labelise
+    label(btex #1 etex,1.15[O,A]);
+    label(btex #2 etex,1.15[O,B]);
+    label(btex #3 etex,1.15[O,C]);
+    label(btex #4 etex,1.1[C,M]);
+    label(btex #5 etex,1.1[B,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+    pair I,J,K;
+    I=1/2[M,N];
+    J=1/2[B,C];
+    K=1/2[I,J];
+    path cd;
+    cd=(fullcircle scaled 6mm) shifted K;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+    drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,K);
+    drawoptions();
+  \end{mplibcode}
+%  \mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;}]
+    pair A,B,C,M,N,O;%
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=u*(1,1);
+    B-A=u*(4,0);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On d\'efinit le centre du cercle circonscrit
+    O - .5[A,B] = whatever * (B-A) rotated 90;
+    O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    M=point(0.4*length cotes1) of cotes1;
+    N=point(0.6*length cotes3) of cotes3;
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    path triangle;
+    triangle=cotes1--cotes2--cotes3--cycle;
+    draw triangle;
+    draw cotes4;
+        if CouleursDen:
+    draw triangle dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen;
+    fi;
+    if CouleursNum:
+    draw (cotes1 cutafter cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes4 cutbefore cotes1 cutafter cotes3) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    draw (cotes3 cutbefore cotes4) dashed dashpattern(off 3 on 3) withpen pencircle scaled 1.5 withcolor CouleurNum;
+    fi;
+    %on labelise
+    label(btex #1 etex,1.15[O,A]);
+    label(btex #2 etex,1.15[O,B]);
+    label(btex #3 etex,1.15[O,C]);
+    label(btex #4 etex,1.1[C,M]);
+    label(btex #5 etex,1.1[B,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+    pair I,J,K;
+    I=1/2[M,N];
+    J=1/2[B,C];
+    K=1/2[I,J];
+    path cd;
+    cd=(fullcircle scaled 6mm) shifted K;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+    drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,K);
+    drawoptions();
+  \end{mpost}
+  \fi
+}
+
+%On d\'efinit la figure \`a utiliser
+\def\MPFigReciThales#1#2#3#4#5#6{
+    % #1 Premier sommet
+    % #2 Deuxi\`eme sommet
+    % #3 Troisi\`eme sommet
+    % #4 point sur le segment #1#2
+    % #5 point sur le segment #1#3
+  \ifluatex
+  \mplibcodeinherit{enable}
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesThales]{Echelle};
+    pair A,B,C,M,N,O;%
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=u*(1,1);
+    B-A=u*(4,0);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On d\'efinit le centre du cercle circonscrit
+    O - .5[A,B] = whatever * (B-A) rotated 90;
+    O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    M=point(0.4*length cotes1) of cotes1;
+    N=point(0.6*length cotes3) of cotes3;
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    path triangle;
+    triangle=cotes1--cotes2--cotes3--cycle;
+    draw triangle;
+    draw cotes4;
+    %on labelise
+    label(btex #1 etex,1.15[O,A]);
+    label(btex #2 etex,1.15[O,B]);
+    label(btex #3 etex,1.15[O,C]);
+    label(btex #4 etex,1.1[C,M]);
+    label(btex #5 etex,1.1[B,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+  \end{mplibcode}
+  \mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}]
+    pair A,B,C,M,N,O;%
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=u*(1,1);
+    B-A=u*(4,0);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On d\'efinit le centre du cercle circonscrit
+    O - .5[A,B] = whatever * (B-A) rotated 90;
+    O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    M=point(0.4*length cotes1) of cotes1;
+    N=point(0.6*length cotes3) of cotes3;
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    path triangle;
+    triangle=cotes1--cotes2--cotes3--cycle;
+    draw triangle;
+    draw cotes4;
+    %on labelise
+    label(btex #1 etex,1.15[O,A]);
+    label(btex #2 etex,1.15[O,B]);
+    label(btex #3 etex,1.15[O,C]);
+    label(btex #4 etex,1.1[C,M]);
+    label(btex #5 etex,1.1[B,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+  \end{mpost}
+  \fi
+}
+
+%On d\'efinit la deuxi\`eme figure \`a utiliser
+\def\MPFigThalesCroisee#1#2#3#4#5#6{%
+    % #1 Premier sommet
+    % #2 Deuxi\`eme sommet
+    % #3 Troisi\`eme sommet
+    % #4 point sur la droite #1#2
+    % #5 point sur la droite #1#3
+  \ifluatex
+  \mplibforcehmode
+  \mplibcodeinherit{enable}
+  \begin{mplibcode}
+    u:=\useKV[ClesThales]{Echelle};
+    boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;
+    pair A,B,C,M,N,O;%
+    O=(2.5u,2.5u);
+    path cc;
+    cc=(fullcircle scaled 3u) shifted O;
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.1*length cc) of cc;
+    B=A rotatedabout(O,130);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    M=1.4[B,A];
+    N=1.4[C,A];
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+    cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+    cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+    cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+    for k=1 upto 6:
+    draw cotes[k];
+    endfor;
+    if CouleursDen:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen);
+    draw (cotes[1] cutafter cotes[2]);
+    draw (cotes[2] cutbefore cotes[1] cutafter cotes[3]);
+    draw (cotes[3] cutbefore cotes[2]);
+    drawoptions();
+    fi;
+    if CouleursNum:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurNum);
+    draw (cotes[5] cutafter cotes[4]);
+    draw (cotes[4] cutbefore cotes[5] cutafter cotes[6]);
+    draw (cotes[6] cutafter cotes[4]);
+    drawoptions();
+    fi;
+    pair I;
+    % On d\'efinit le centre du cercle inscrit \`a AMC
+    (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+    (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+    %on labelise
+    label(btex #1 etex,I);
+    label(btex #2 etex,1.2[M,B]);
+    label(btex #3 etex,1.2[N,C]);
+    label(btex #4 etex,1.1[B,M]);
+    label(btex #5 etex,1.1[C,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+    pair I,J,K;
+    I=1.1[N,M];
+    J=1.1[B,C];
+    K=1/2[I,J];
+    path cd;
+    cd=(fullcircle scaled 6mm) shifted K;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+    drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,K);
+    drawoptions();
+  \end{mplibcode}
+  \mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};boolean CouleursNum,CouleursDen;
+    CouleursNum=\useKV[ClesThales]{CouleursNum};
+    CouleursDen=\useKV[ClesThales]{CouleursDen};
+    color CouleurNum,CouleurDen;
+    if CouleursNum:
+    CouleurNum=\useKV[ClesThales]{CouleurNum}
+    else:
+    CouleurNum=black
+    fi;
+    if CouleursDen:
+    CouleurDen=\useKV[ClesThales]{CouleurDen}
+    else:
+    CouleurDen=black
+    fi;}]
+    pair A,B,C,M,N,O;%
+    O=(2.5u,2.5u);
+    path cc;
+    cc=(fullcircle scaled 3u) shifted O;
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.1*length cc) of cc;
+    B=A rotatedabout(O,130);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    M=1.4[B,A];
+    N=1.4[C,A];
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+    cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+    cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+    cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+    for k=1 upto 6:
+    draw cotes[k];
+    endfor;
+    if CouleursDen:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurDen);
+    draw (cotes[1] cutafter cotes[2]);
+    draw (cotes[2] cutbefore cotes[1] cutafter cotes[3]);
+    draw (cotes[3] cutbefore cotes[2]);
+    drawoptions();
+    fi;
+    if CouleursNum:
+    drawoptions(dashed evenly withpen pencircle scaled 1.5 withcolor CouleurNum);
+    draw (cotes[5] cutafter cotes[4]);
+    draw (cotes[4] cutbefore cotes[5] cutafter cotes[6]);
+    draw (cotes[6] cutafter cotes[4]);
+    drawoptions();
+    fi;
+    pair I;
+    % On d\'efinit le centre du cercle inscrit \`a AMC
+    (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+    (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+    %on labelise
+    label(btex #1 etex,I);
+    label(btex #2 etex,1.2[M,B]);
+    label(btex #3 etex,1.2[N,C]);
+    label(btex #4 etex,1.1[B,M]);
+    label(btex #5 etex,1.1[C,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+    pair I,J,K;
+    I=1.1[N,M];
+    J=1.1[B,C];
+    K=1/2[I,J];
+    path cd;
+    cd=(fullcircle scaled 6mm) shifted K;
+    drawoptions(withcolor 0.75*white);
+    drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+    drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+    draw cd;
+    label(btex $//$ etex ,K);
+    drawoptions();
+  \end{mpost}
+  \fi
+}
+
+%On d\'efinit la deuxi\`eme figure \`a utiliser
+\def\MPFigReciThalesCroisee#1#2#3#4#5#6{%
+  % #1 Premier sommet
+    % #2 Deuxi\`eme sommet
+    % #3 Troisi\`eme sommet
+    % #4 point sur la droite #1#2
+    % #5 point sur la droite #1#3
+  \ifluatex
+  \mplibforcehmode
+  \mplibcodeinherit{enable}
+  \begin{mplibcode}
+    u:=\useKV[ClesThales]{Echelle};
+    pair A,B,C,M,N,O;%
+    O=(2.5u,2.5u);
+    path cc;
+    cc=(fullcircle scaled 3u) shifted O;
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.1*length cc) of cc;
+    B=A rotatedabout(O,130);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    M=1.4[B,A];
+    N=1.4[C,A];
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+    cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+    cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+    cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+    for k=1 upto 6:
+    draw cotes[k];
+    endfor;
+    pair I;
+    % On d\'efinit le centre du cercle inscrit \`a AMC
+    (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+    (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+    %on labelise
+    label(btex #1 etex,I);
+    label(btex #2 etex,1.2[M,B]);
+    label(btex #3 etex,1.2[N,C]);
+    label(btex #4 etex,1.1[B,M]);
+    label(btex #5 etex,1.1[C,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes2);
+    fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes2);
+  \end{mplibcode}
+  \mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}]
+    pair A,B,C,M,N,O;%
+    O=(2.5u,2.5u);
+    path cc;
+    cc=(fullcircle scaled 3u) shifted O;
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=point(0.1*length cc) of cc;
+    B=A rotatedabout(O,130);
+    C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine \`a main lev\'ee :)
+    M=1.4[B,A];
+    N=1.4[C,A];
+    path cotes[];
+    cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+    cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+    cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+    cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+    cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+    for k=1 upto 6:
+    draw cotes[k];
+    endfor;
+    pair I;
+    % On d\'efinit le centre du cercle inscrit \`a AMC
+    (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+    (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+    %on labelise
+    label(btex #1 etex,I);
+    label(btex #2 etex,1.2[M,B]);
+    label(btex #3 etex,1.2[N,C]);
+    label(btex #4 etex,1.1[B,M]);
+    label(btex #5 etex,1.1[C,N]);
+    fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+    fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes2);
+    fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes2);
+  \end{mpost}
+  \fi
+}
+
+\newcommand\RedactionThales{}%
+\newcommand\EcritureCalculs{}%
+\newcommand\EcritureQuotients{}%
+
+%%%
+\newcommand\TTThales[6][]{%
+  \useKVdefault[ClesThales]%
+  \setKV[ClesThales]{#1}%
+  \ifboolKV[ClesThales]{Perso}{\RedactionThales}{%
+    \ifboolKV[ClesThales]{Droites}{%
+      Les droites \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#3#5)$} et \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#4#6)$} sont s\'ecantes en \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2$}.%
+    }{%
+      Dans le triangle \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2#3#4$}, \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#5$} est un point \ifboolKV[ClesThales]{Segment}{du segment}{de la
+        droite}
+      \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{\ifboolKV[ClesThales]{Segment}{$[#2#3]$}{$(#2#3)$}},
+      \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#6$} est un
+      point \ifboolKV[ClesThales]{Segment}{du segment}{de la droite}
+      \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{\ifboolKV[ClesThales]{Segment}{$[#2#4]$}{$(#2#4)$}}.%
+    }
+    \\Comme les droites \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#5#6)$} et \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#3#4)$} sont parall\`eles, alors \ifboolKV[ClesThales]{Propor}{le tableau%
+      \[\begin{array}{c|c|c}
+          \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#5}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#6}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#5#6}\\
+          \hline
+          \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#3}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#4}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#3#4}\\
+        \end{array}
+      \]
+      est un tableau de proportionnalit\'e\ifboolKV[ClesThales]{Segment}{.}{ d'apr\`es le th\'eor\`eme de Thal\`es.}%
+    }{%
+      \ifboolKV[ClesThales]{Segment}{on a :}{le th\'eor\`eme de Thal\`es permet d'\'ecrire :}%
+      \[\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursNum}{\mathcolor{\useKV[ClesThales]{CouleurNum}}{#2#5}}{#2#5}}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursDen}{\mathcolor{\useKV[ClesThales]{CouleurDen}}{#2#3}}{#2#3}}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursNum}{\mathcolor{\useKV[ClesThales]{CouleurNum}}{#2#6}}{#2#6}}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursDen}{\mathcolor{\useKV[ClesThales]{CouleurDen}}{#2#4}}{#2#4}}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursNum}{\mathcolor{\useKV[ClesThales]{CouleurNum}}{#5#6}}{#5#6}}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{\ifboolKV[ClesThales]{CouleursDen}{\mathcolor{\useKV[ClesThales]{CouleurDen}}{#3#4}}{#3#4}}}\]%
+    }%
+  }%
+}%
+
+\newcommand\TThalesCalculsD[8][]{%
+  \setKV[ClesThales]{#1}%
+  \newcount\zzz\newcount\yyy\newcount\xxx%Pour se rappeller des calculs \`a faire et combien en faire%
+  \def\Nomx{}%
+  \def\Nomy{}%
+  \def\Nomz{}%
+  \zzz=0\yyy=0\xxx=0%
+  \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+\IfDecimal{#3}{%
+  \IfDecimal{#6}{}{%
+    \IfDecimal{#4}{%
+        \IfDecimal{#7}{%
+          \xxx=5263%#6&=\frac{#3\times#7}{#4}\\
+          \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#7}{Valx}\opcopy{#4}{denox}%
+          \xdef\ResultatThalesx{\fpeval{round(#3*#7/#4,\useKV[ClesThales]{Precision})}}%
+        }{%
+          \IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+              \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#8}{Valx}\opcopy{#5}{denox}%
+              \xdef\ResultatThalesx{\fpeval{round(#3*#8/#5,\useKV[ClesThales]{Precision})}}%
+          }{}}{}
+        }
+      }{\IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+            \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#8}{Valx}\opcopy{#5}{denox}%
+            \xdef\ResultatThalesx{\fpeval{round(#3*#8/#5,\useKV[ClesThales]{Precision})}}%
+          }{}}{}
+      }
+    }
+  }{%
+    \IfDecimal{#6}{%
+      \IfDecimal{#4}{%
+        \IfDecimal{#7}{%
+          \xxx=2536%\[#3=\frac{#6\times#4}{#7}\]%
+          \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#4}{Valx}\opcopy{#7}{denox}%
+          \xdef\ResultatThalesx{\fpeval{round(#6*#4/#7,\useKV[ClesThales]{Precision})}}%
+        }{%
+          \IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+              \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#5}{Valx}\opcopy{#8}{denox}%\[#3=\frac{#6\times#5}{#8}\]
+              \xdef\ResultatThalesx{\fpeval{round(#6*#5/#8,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+        }
+      }{\IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+            \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#5}{Valx}\opcopy{#8}{denox}%\[#3=\frac{#6\times#5}{#8}\]
+            \xdef\ResultatThalesx{\fpeval{round(#6*#5/#8,\useKV[ClesThales]{Precision})}}%
+          }{}}{}
+      }
+    }{}
+  }%
+  % 
+  \IfDecimal{#4}{%
+    \IfDecimal{#7}{}{%
+      \IfDecimal{#5}{%
+        \IfDecimal{#8}{%
+          \yyy=6374%\[#7=\frac{#4\times#8}{#5}\]%
+          \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#8}{Valy}\opcopy{#5}{denoy}%
+          \xdef\ResultatThalesy{\fpeval{round(#4*#8/#5,\useKV[ClesThales]{Precision})}}%
+        }{%
+          \IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+              \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#6}{Valy}\opcopy{#3}{denoy}%
+              \xdef\ResultatThalesy{\fpeval{round(#4*#6/#3,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+        }
+      }{\IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+            \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#6}{Valy}\opcopy{#3}{denoy}%
+            \xdef\ResultatThalesy{\fpeval{round(#4*#6/#3,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+      }
+    }
+  }{%
+    \IfDecimal{#7}{%
+      \IfDecimal{#5}{%
+        \IfDecimal{#8}{%
+          \yyy=3647%\[#4=\frac{#7\times#5}{#8}\]%
+          \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#5}{Valy}\opcopy{#8}{denoy}%
+          \xdef\ResultatThalesy{\fpeval{round(#7*#5/#8,\useKV[ClesThales]{Precision})}}%
+        }{%
+          \IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+              \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#3}{Valy}\opcopy{#6}{denoy}%
+              \xdef\ResultatThalesy{\fpeval{round(#7*#3/#6,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+        }
+      }{\IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+            \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#3}{Valy}\opcopy{#6}{denoy}%
+            \xdef\ResultatThalesy{\fpeval{round(#7*#3/#6,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+      }}{}}%
+  % 
+  \IfDecimal{#5}{%
+    \IfDecimal{#8}{}{%
+      \IfDecimal{#4}{
+        \IfDecimal{#7}{
+          \zzz=7463%\[#8=\frac{#5\times#7}{#4}\]%
+          \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#7}{Valz}\opcopy{#4}{denoz}%
+          \xdef\ResultatThalesz{\fpeval{round(#5*#7/#4,\useKV[ClesThales]{Precision})}}%
+        }{%
+          \IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+              \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#6}{Valz}\opcopy{#3}{denoz}%
+              \xdef\ResultatThalesz{\fpeval{round(#5*#6/#3,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+        }
+      }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+            \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#6}{Valz}\opcopy{#3}{denoz}%
+            \xdef\ResultatThalesz{\fpeval{round(#5*#6/#3,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+      }
+    }
+  }{%
+    \IfDecimal{#8}{%
+      \IfDecimal{#4}{%
+        \IfDecimal{#7}{%
+          \zzz=4736% \[#5=\frac{#8\times#4}{#7}\]%
+          \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#4}{Valz}\opcopy{#7}{denoz}%
+          \xdef\ResultatThalesz{\fpeval{round(#8*#4/#7,\useKV[ClesThales]{Precision})}}%
+        }{%
+          \IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+              \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#3}{Valz}\opcopy{#6}{denoz}%
+              \xdef\ResultatThalesz{\fpeval{round(#8*#3/#6,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+        }
+      }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+            \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#3}{Valz}\opcopy{#6}{denoz}%
+            \xdef\ResultatThalesz{\fpeval{round(#8*#3/#6,\useKV[ClesThales]{Precision})}}%
+            }{}}{}
+      }}{}
+  }%  
+  %%
+  \StrMid{\the\zzz}{1}{1}[\cmza]%
+  \StrMid{\the\yyy}{1}{1}[\cmya]%
+  \StrMid{\the\xxx}{1}{1}[\cmxa]%
+  \ifboolKV[ClesThales]{Calcul}{%
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%
+  \ifboolKV[ClesThales]{IntroCalculs}{On remplace par les longueurs connues :}{}%
+  \ifboolKV[ClesThales]{CalculsPerso}{%
+    \EcritureQuotients%
+  }{%
+    \ifboolKV[ClesThales]{Propor}{%
+      \[\begin{array}{c|c|c}
+          \IfDecimal{#3}{\num{#3}}{#3}&\IfDecimal{#4}{\num{#4}}{#4}&\IfDecimal{#5}{\num{#5}}{#5}\\
+          \hline
+          \IfDecimal{#6}{\num{#6}}{#6}&\IfDecimal{#7}{\num{#7}}{#7}&\IfDecimal{#8}{\num{#8}}{#8}
+        \end{array}
+      \]
+    }{%
+      \[\frac{\IfDecimal{#3}{\num{#3}}{#3}}{\IfDecimal{#6}{\num{#6}}{#6}}=\frac{\IfDecimal{#4}{\num{#4}}{#4}}{\IfDecimal{#7}{\num{#7}}{#7}}=\frac{\IfDecimal{#5}{\num{#5}}{#5}}{\IfDecimal{#8}{\num{#8}}{#8}}\]
+    }%
+  }%
+  % On choisit \'eventuellement le calcul \`a faire s'il y en a plusieurs.
+  \xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}%
+  \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul==1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul==2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}{}%
+  %% on fait les calculs
+  \ifboolKV[ClesThales]{CalculsPerso}{%
+    \EcritureCalculs%
+  }{%
+    \begin{align*}
+      % Premier compteur \xxx
+      \ifnum\cmxa>0
+      \Nomx\uppercase{&}=\frac{\opexport{valx}{\valx}\num{\valx}\times\opexport{Valx}{\Valx}\num{\Valx}}{\opexport{denox}{\denox}\num{\denox}}\relax%\global\numx=\numexpr\opprint{valx}*\opprint{Valx}\relax
+    \fi
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \ifnum\cmxa=0
+      \else
+        \uppercase{&}
+      \fi%
+      \Nomy\uppercase{&}=\frac{\opexport{valy}{\valy}\num{\valy}\times\opexport{Valy}{\Valy}\num{\Valy}}{\opexport{denoy}{\denoy}\num{\denoy}}\relax%\global\numy=\numexpr\opprint{valy}*\opprint{Valy}\relax
+    \fi
+    % Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \ifnum\cmxa=0
+        \ifnum\cmya=0                           
+          %
+        \else
+          \uppercase{&}
+        \fi
+        \Nomz\uppercase{&}=\frac{\opexport{valz}{\valz}\num{\valz}\times\opexport{Valz}{\Valz}\num{\Valz}}{\opexport{denoz}{\denoz}\num{\denoz}}\relax%\global\numz=\numexpr\opprint{valz}*\opprint{Valz}\relax
+      \else
+        \uppercase{&}\Nomz\uppercase{&}=\frac{\opexport{valz}{\valz}\num{\valz}\times\opexport{Valz}{\Valz}\num{\Valz}}{\opexport{denoz}{\denoz}\num{\denoz}}\relax%\global\numz=\numexpr\opprint{valz}*\opprint{Valz}\relax
+      \fi
+    \fi
+    \\
+%    % 2eme ligne du tableau : calcul des num\'erateurs
+%        %Premier compteur \xxx
+    \ifnum\cmxa>0
+      \Nomx\uppercase{&}=\frac{\opmul*{valx}{Valx}{numx}\opexport{numx}{\numx}\num{\numx}}{\opexport{denox}{\denox}\num{\denox}}
+    \fi
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \ifnum\cmxa=0
+        %
+      \else
+        \uppercase{&}
+      \fi
+      \Nomy\uppercase{&}=\frac{\opmul*{valy}{Valy}{numy}\opexport{numy}{\numy}\num{\numy}}{\opexport{denoy}{\denoy}\num{\denoy}}%
+    \fi
+%    %Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \ifnum\cmxa=0
+        \ifnum\cmya=0                           
+          %
+        \else
+          \uppercase{&}
+        \fi
+        \Nomz\uppercase{&}=\frac{\opmul*{valz}{Valz}{numz}\opexport{numz}{\numz}\num{\numz}}{\opexport{denoz}{\denoz}\num{\denoz}}
+      \else
+        \uppercase{&}\Nomz\uppercase{&}=\frac{\opmul*{valz}{Valz}{numz}\opexport{numz}{\numz}\num{\numz}}{\opexport{denoz}{\denoz}\num{\denoz}}
+      \fi
+    \fi
+    \\
+%    % 3eme ligne : Calculs
+    \ifnum\cmxa>0
+      \Nomx\uppercase{&}\opdiv*{numx}{denox}{resultatx}{restex}\opcmp{restex}{0}\ifopeq=\SI{\ResultatThalesx}{\PfCThalesUnit}\else\approx\SI{\fpeval{round(\ResultatThalesx,\useKV[ClesThales]{Precision})}}{\PfCThalesUnit}\fi%
+    \fi
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \ifnum\cmxa=0
+        %
+      \else
+        \uppercase{&}
+      \fi
+      \Nomy\uppercase{&}\opdiv*{numy}{denoy}{resultaty}{restey}\opcmp{restey}{0}\ifopeq=\SI{\ResultatThalesy}{\PfCThalesUnit}\else\approx\SI{\fpeval{round(\ResultatThalesy,\useKV[ClesThales]{Precision})}}{\PfCThalesUnit}\fi%
+    \fi
+%    %Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \ifnum\cmxa=0
+        \ifnum\cmya=0                           
+          %
+        \else
+          \uppercase{&}
+        \fi
+        \Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\SI{\ResultatThalesz}{\PfCThalesUnit}\else\approx\SI{\fpeval{round(\ResultatThalesz,\useKV[ClesThales]{Precision})}}{\PfCThalesUnit}\fi%
+      \else
+        \uppercase{&}\Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\SI{\ResultatThalesz}{\PfCThalesUnit}\else\approx\SI{\fpeval{round(\ResultatThalesz,\useKV[ClesThales]{Precision})}}{\PfCThalesUnit}\fi%
+      \fi
+    \fi
+    \end{align*}
+    }
+}{}
+}
+
+\newcommand\TThalesCalculsE[8][]{%
+  \setKV[ClesThales]{#1}%
+  \newcount\zzz\newcount\yyy\newcount\xxx%Pour se rappeller des calculs \`a faire et combien en faire%
+  \newcount\valx\newcount\Valx%
+  \newcount\valy\newcount\Valy%
+  \newcount\valz\newcount\Valz%
+  \newcount\numx\newcount\numy\newcount\numz%
+  \newcount\denox\newcount\denoy\newcount\denoz%
+  \def\Nomx{}%
+  \def\Nomy{}%
+  \def\Nomz{}%
+  \zzz=0\yyy=0\xxx=0%
+  \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par%
+\IfDecimal{#3}{%
+  \IfDecimal{#6}{}{%
+    \IfDecimal{#4}{%
+        \IfDecimal{#7}{%
+          \xxx=5263%#6&=\frac{#3\times#7}{#4}\\
+          \edef\Nomx{#6}\valx=#3\Valx=#7\denox=#4%
+        }{%
+          \IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+            \edef\Nomx{#6}\valx=#3\Valx=#8\denox=#5%
+          }{}}{}
+        }
+      }{\IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+            \edef\Nomx{#6}\valx=#3\Valx=#8\denox=#5%
+          }{}}{}
+      }
+    }
+  }{%
+    \IfDecimal{#6}{%
+      \IfDecimal{#4}{%
+        \IfDecimal{#7}{%
+          \xxx=2536%\[#3=\frac{#6\times#4}{#7}\]%
+          \edef\Nomx{#3}\valx=#6\Valx=#4\denox=#7%
+        }{%
+          \IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+            \edef\Nomx{#3}\valx=#6\Valx=#5\denox=#8%\[#3=\frac{#6\times#5}{#8}\]
+            }{}}{}
+        }
+      }{\IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+            \edef\Nomx{#3}\valx=#6\Valx=#5\denox=#8%\[#3=\frac{#6\times#5}{#8}\]
+            }{}}{}
+      }
+    }{}
+  }%
+  % 
+  \IfDecimal{#4}{%
+    \IfDecimal{#7}{}{%
+      \IfDecimal{#5}{%
+        \IfDecimal{#8}{%
+          \yyy=6374%\[#7=\frac{#4\times#8}{#5}\]%
+          \edef\Nomy{#7}\valy=#4\Valy=#8\denoy=#5%
+        }{%
+          \IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+            \edef\Nomy{#7}\valy=#4\Valy=#6\denoy=#3%
+            }{}}{}
+        }
+      }{\IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+            \edef\Nomy{#7}\valy=#4\Valy=#6\denoy=#3%
+            }{}}{}
+      }
+    }
+  }{%
+    \IfDecimal{#7}{%
+      \IfDecimal{#5}{%
+        \IfDecimal{#8}{%
+          \yyy=3647%\[#4=\frac{#7\times#5}{#8}\]%
+          \edef\Nomy{#4}\valy=#7\Valy=#5\denoy=#8%
+        }{%
+          \IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+            \edef\Nomy{#4}\valy=#7\Valy=#3\denoy=#6%
+            }{}}{}
+        }
+      }{\IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+            \edef\Nomy{#4}\valy=#7\Valy=#3\denoy=#6%
+            }{}}{}
+      }}{}}%
+  % 
+  \IfDecimal{#5}{%
+    \IfDecimal{#8}{}{%
+      \IfDecimal{#4}{
+        \IfDecimal{#7}{
+          \zzz=7463%\[#8=\frac{#5\times#7}{#4}\]%
+          \edef\Nomz{#8}\valz=#5\Valz=#7\denoz=#4%
+        }{%
+          \IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+            \edef\Nomz{#8}\valz=#5\Valz=#6\denoz=#3%
+            }{}}{}
+        }
+      }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+            \edef\Nomz{#8}\valz=#5\Valz=#6\denoz=#3%
+            }{}}{}
+      }
+    }
+  }{%
+    \IfDecimal{#8}{%
+      \IfDecimal{#4}{%
+        \IfDecimal{#7}{%
+          \zzz=4736% \[#5=\frac{#8\times#4}{#7}\]%
+          \edef\Nomz{#5}\valz=#8\Valz=#4\denoz=#7%
+        }{%
+          \IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+            \edef\Nomz{#5}\valz=#8\Valz=#3\denoz=#6%
+            }{}}{}
+        }
+      }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+            \edef\Nomz{#5}\valz=#8\Valz=#3\denoz=#6%
+            }{}}{}
+      }}{}
+  }%  
+  %%
+\StrMid{\the\zzz}{1}{1}[\cmza]%
+\StrMid{\the\yyy}{1}{1}[\cmya]%
+\StrMid{\the\xxx}{1}{1}[\cmxa]%
+\ifboolKV[ClesThales]{Calcul}{%
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%
+  On remplace par les longueurs connues :
+  \ifboolKV[ClesThales]{Propor}{%
+    \[\begin{array}{c|c|c}
+        \IfDecimal{#3}{\num{#3}}{#3}&\IfDecimal{#4}{\num{#4}}{#4}&\IfDecimal{#5}{\num{#5}}{#5}\\
+        \hline
+        \IfDecimal{#6}{\num{#6}}{#6}&\IfDecimal{#7}{\num{#7}}{#7}&\IfDecimal{#8}{\num{#8}}{#8}\\
+      \end{array}
+    \]
+  }{%
+    \[\frac{\IfDecimal{#3}{\num{#3}}{#3}}{\IfDecimal{#6}{\num{#6}}{#6}}=\frac{\IfDecimal{#4}{\num{#4}}{#4}}{\IfDecimal{#7}{\num{#7}}{#7}}=\frac{\IfDecimal{#5}{\num{#5}}{#5}}{\IfDecimal{#8}{\num{#8}}{#8}}\]
+  }%
+  % On choisit \'eventuellement le calcul \`a faire s'il y en a plusieurs.
+  \xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}%
+  \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul==1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul==2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}%
+  %%on fait les calculs
+\begin{align*}
+    %Premier compteur \xxx
+    \ifnum\cmxa>0
+      \Nomx\uppercase{&}=\frac{\the\valx\times\the\Valx}{\the\denox}\global\numx=\numexpr\the\valx*\the\Valx\relax
+    \fi
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \ifnum\cmxa=0
+      \else
+        \uppercase{&}
+      \fi%
+      \Nomy\uppercase{&}=\frac{\the\valy\times\the\Valy}{\the\denoy}\global\numy=\numexpr\the\valy*\the\Valy\relax
+     % \else
+     %   \uppercase{&}\Nomy\uppercase{&}=\frac{\the\valy\times\the\Valy}{\the\denoy}\global\numy=\numexpr\the\valy*\the\Valy\relax
+     % \fi
+    \fi
+    % Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \ifnum\cmxa=0
+        \ifnum\cmya=0                           
+          %\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+        \else
+          \uppercase{&}%\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+        \fi
+        \Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+      \else
+        \uppercase{&}\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+      \fi
+    \fi
+    \\
+    % 2eme ligne du tableau : calcul des num\'erateurs
+        %Premier compteur \xxx
+    \ifnum\cmxa>0
+      \Nomx\uppercase{&}=\frac{\num{\the\numx}}{\num{\the\denox}}
+    \fi
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \ifnum\cmxa=0
+        %\Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}
+      \else
+        \uppercase{&}%\Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}
+      \fi
+      \Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}%
+    \fi
+    %Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \ifnum\cmxa=0
+        \ifnum\cmya=0                           
+          %\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+        \else
+          \uppercase{&}%\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+        \fi
+        \Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+      \else
+        \uppercase{&}\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+      \fi
+    \fi
+    \\
+    % 3eme ligne : faire les simplifications ou pas ?
+    %Premier compteur \xxx
+    \ifnum\cmxa>0
+      \PGCD{\the\numx}{\the\denox}
+      \ifnum\pgcd>1
+        \Nomx\uppercase{&}=\SSimpli{\the\numx}{\the\denox}
+      \else
+        \uppercase{&}
+      \fi
+    \fi                    
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \PGCD{\the\numy}{\the\denoy}
+      \ifnum\cmxa=0
+         \ifnum\pgcd>1
+           \Nomy\uppercase{&}=\SSimpli{\the\numy}{\the\denoy}
+         \else
+           \uppercase{&}
+         \fi
+      \else
+        \ifnum\pgcd>1
+          \uppercase{&}\Nomy\uppercase{&}=\SSimpli{\the\numy}{\the\denoy}
+        \else
+          \uppercase{&&}
+        \fi
+      \fi
+    \fi
+    %Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \PGCD{\the\numz}{\the\denoz}
+      \ifnum\cmxa=0
+        \ifnum\cmya=0
+          \ifnum\pgcd>1
+            \Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz}
+          \else
+            \uppercase{&}
+          \fi
+        \else
+          \ifnum\pgcd>1
+            \uppercase{&}\Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz}
+          \else
+            \uppercase{&&}
+          \fi
+        \fi
+      \else
+        \ifnum\pgcd>1
+          \uppercase{&}\Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz}
+        \else
+          \uppercase{&&}
+        \fi
+      \fi
+    \fi
+    \\
+    % 4eme ligne : Terminer les simplifications ?
+    %Premier compteur \xxx
+    \ifnum\cmxa>0
+      \PGCD{\the\numx}{\the\denox}
+      \ifnum\pgcd>1
+        \ifnum\pgcd<\the\denox
+          \Nomx\uppercase{&}=\SSimplifie{\the\numx}{\the\denox}
+        \else
+          \uppercase{&}
+        \fi
+      \else
+        \uppercase{&}
+      \fi
+    \fi                    
+    %    % Deuxi\`eme compteur \yyy
+    \ifnum\cmya>0
+      \PGCD{\the\numy}{\the\denoy}
+      \ifnum\cmxa=0
+        \ifnum\pgcd>1
+          \ifnum\pgcd<\the\denoy
+            \Nomy\uppercase{&}=\SSimplifie{\the\numy}{\the\denoy}
+          \else
+            \uppercase{&}
+          \fi
+         \else
+           \uppercase{&}
+         \fi
+      \else
+        \ifnum\pgcd>1
+          \ifnum\pgcd<\the\denoy
+            \uppercase{&}\Nomy\uppercase{&}=\SSimplifie{\the\numy}{\the\denoy}
+          \else
+            \uppercase{&&}
+          \fi
+        \else
+          \uppercase{&&}
+        \fi
+      \fi
+    \fi
+    %Troisi\`eme compteur \zzz
+    \ifnum\cmza>0
+      \PGCD{\the\numz}{\the\denoz}
+      \ifnum\cmxa=0
+        \ifnum\cmya=0
+          \ifnum\pgcd>1
+            \ifnum\pgcd<\the\denoz
+              \Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz}
+            \else
+              \uppercase{&}
+            \fi
+          \else
+            \uppercase{&}
+          \fi
+        \else
+          \ifnum\pgcd>1
+            \ifnum\pgcd<\the\denoz
+              \uppercase{&}\Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz}
+            \else
+              \uppercase{&&}
+            \fi
+          \else
+            \uppercase{&&}
+          \fi
+        \fi
+      \else
+        \ifnum\pgcd>1
+          \ifnum\pgcd<\the\denoz
+            \uppercase{&}\Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz}
+          \else
+            \uppercase{&&}
+          \fi
+        \else
+          \uppercase{&&}
+        \fi
+      \fi
+    \fi%\\
+\end{align*}
+}{}%
+}
+
+\newcommand\TThales[8][]{%
+  \setKV[ClesThales]{#1}%
+  \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+  \ifboolKV[ClesThales]{FigureSeule}{%
+    \MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+  }{\ifboolKV[ClesThales]{FigurecroiseeSeule}{%
+      \MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+    }{%
+      \ifboolKV[ClesThales]{Figure}{%
+        \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+        \begin{multicols}{2}%
+          {\em La figure est donn\'ee \`a titre indicatif.}%
+          \[\MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+          \par\columnbreak\par%
+          \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+        \end{multicols}%
+      }{\ifboolKV[ClesThales]{Figurecroisee}{%
+          \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+          \begin{multicols}{2}%
+            {\em La figure est donn\'ee \`a titre indicatif.}%
+            \[\MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+            \par\columnbreak\par%
+            \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+          \end{multicols}%
+        }{\ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+      }%
+    }%
+  }%
+}%
+%%%%
+
+\newcommand\ReciThales[6][]{%
+  \ifboolKV[ClesThales]{Droites}{%
+    Les droites $(#3#5)$ et $(#4#6)$ sont s\'ecantes en $#2$.
+  }{%
+    Dans le triangle $#2#3#4$, $#5$ est un point
+    \ifboolKV[ClesThales]{Segment}{du segment $[#2#3]$}{de la
+      droite $(#2#3)$}, $#6$ est un point
+    \ifboolKV[ClesThales]{Segment}{du segment $[#2#4]$}{de la droite
+      $(#2#4)$}.
+  } %
+  \ifboolKV[ClesThales]{Propor}{Le tableau $\begin{array}{c|c}
+        #2#5&#2#6\\
+        \hline
+        #2#3&#2#4\\
+      \end{array}
+    $ est-il un tableau de proportionnalit\'e ?
+  }{%
+  }
+}
+
+\newcommand\ReciThalesCalculs[8][]{%
+  \StrMid{#2}{1}{1}[\NomA]%
+  \StrMid{#2}{2}{2}[\NomB]%
+  \StrMid{#2}{3}{3}[\NomC]%
+  \StrMid{#2}{4}{4}[\NomM]%
+  \StrMid{#2}{5}{5}[\NomN]%
+  \ifboolKV[ClesThales]{Produit}{%
+    \begin{align*}
+      \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}&&\dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}}
+    \end{align*}
+    Effectuons les produits en croix :\xdef\NumA{\fpeval{#3*#6}}\xdef\NumB{\fpeval{#4*#5}}
+    \begin{align*}
+      \num{#3}\times\num{#6}&=\num{\fpeval{#3*#6}}&&&\num{#4}\times\num{#5}&=\num{\fpeval{#4*#5}}
+    \end{align*}
+    \xintifboolexpr{\NumA == \NumB}{Comme les produits en croix sont
+      \'egaux, alors
+      $\dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\[0.5em]%
+    }{%
+      Comme les produits en croix sont diff\'erents, alors
+      $\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\%
+    }%
+  }{%
+    \[\left.
+        \begin{array}{l}
+          \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}\ifx\bla#7\bla\ifboolKV[ClesThales]{Simplification}{\PGCD{#3}{#4}\xintifboolexpr{\pgcd==1}{%il faut regarder si on doit continuer avec le PPCM...
+          \PGCD{#5}{#6}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#6/\pgcd}}\PPCM{#4}{\DenomSimpaa}\xintifboolexpr{\ppcm==#4}{}{=\dfrac{#3\times\num{\fpeval{\ppcm/#4}}}{#4\times\num{\fpeval{\ppcm/#4}}}=\dfrac{\num{\fpeval{#3*\ppcm/#4}}}{\num{\fpeval{\ppcm}}}}}{}%
+          }{=\displaystyle\Simplification[All]{#3}{#4}\PGCD{#3}{#4}\xdef\NumSimp{\fpeval{#3/\pgcd}}\xdef\DenomSimp{\fpeval{#4/\pgcd}}\PGCD{#5}{#6}\xdef\NumSimpa{\fpeval{#5/\pgcd}}\xdef\DenomSimpa{\fpeval{#6/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}==1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#4}==1}{}{=\dfrac{\num{#3}\times\num{\fpeval{\the\ppcm/#4}}}{\num{#4}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#4}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#3*\the\ppcm/#4}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#6}}\else%
+         \xintifboolexpr{#7==1}{}{=\dfrac{\num{#3}\times\num{#7}}{\num{#4}\times\num{#7}}=\dfrac{\num{\fpeval{#3*#7}}}{\num{\fpeval{#4*#7}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm==\fpeval{#4*#7}}{}{=\dfrac{\num{\fpeval{#3*#7}}\times\num{\fpeval{\the\ppcm/(#4*#7)}}}{\num{\fpeval{#4*#7}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#4*#7)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#3*\the\ppcm/#4}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#7*#6*#8}}
+          \fi
+          \\
+          \\
+          \dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}}%
+          \ifx\bla#8\bla%
+          \ifboolKV[ClesThales]{Simplification}{\PGCD{#5}{#6}\xintifboolexpr{\pgcd==1}{%il faut regarder si on doit continuer avec le PPCM...
+          \PGCD{#3}{#4}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#4/\pgcd}}\PPCM{#6}{\DenomSimpaa}\xintifboolexpr{\ppcm==#6}{}{=\dfrac{#5\times\num{\fpeval{\ppcm/#6}}}{#6\times\num{\fpeval{\ppcm/#6}}}=\dfrac{\num{\fpeval{#5*\ppcm/#6}}}{\num{\fpeval{\ppcm}}}}}{}%
+          }{=\displaystyle\Simplification[All]{#5}{#6}\PGCD{#5}{#6}\xdef\NumSimp{\fpeval{#5/\pgcd}}\xdef\DenomSimp{\fpeval{#6/\pgcd}}\PGCD{#3}{#4}\xdef\NumSimpa{\fpeval{#3/\pgcd}}\xdef\DenomSimpa{\fpeval{#4/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}==1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#6}==1}{}{=\dfrac{\num{#5}\times\num{\fpeval{\the\ppcm/#6}}}{\num{#6}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#6}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#5*\the\ppcm/#6}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumB{\fpeval{#5*#4}}%
+          \else%
+          \xintifboolexpr{#8==1}{}{=\dfrac{\num{#5}\times\num{#8}}{\num{#6}\times\num{#8}}=\dfrac{\num{\fpeval{#5*#8}}}{\num{\fpeval{#6*#8}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm==\fpeval{#6*#8}}{}{=\dfrac{\num{\fpeval{#5*#8}}\times\num{\fpeval{\the\ppcm/(#6*#8)}}}{\num{\fpeval{#6*#8}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#6*#8)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#5*\the\ppcm/#6}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}
+          }\xdef\NumB{\fpeval{#5*#8*#4*#7}}
+          \fi\\
+        \end{array}
+      \right\}\ifnum\NumA=\NumB \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}\else\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}\fi
+    \]
+  }
+  \ifboolKV[ClesThales]{Propor}{%
+    \ifnum\NumA=\NumB Donc le tableau $\begin{array}{c|c}
+        \NomA\NomM&\NomA\NomN\\
+        \hline
+        \NomA\NomB&\NomA\NomC\\
+      \end{array}
+    $ est bien un tableau de proportionnalit\'e.\\De plus, les points
+    $\NomA$, $\NomM$, $\NomB$ sont align\'es dans le m\^eme ordre que les
+    points $\NomA$, $\NomN$, $\NomC$. Donc les droites $(\NomM\NomN)$
+    et $(\NomB\NomC)$ sont parall\`eles d'apr\`es la r\'eciproque du
+    th\'eor\`eme de Thal\`es.\else%
+    Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parall\`eles.\fi
+  }{%
+    \xintifboolexpr{\NumA==\NumB}{%
+      De plus, les points $\NomA$, $\NomM$, $\NomB$ sont align\'es dans
+      le m\^eme ordre que les points $\NomA$, $\NomN$, $\NomC$. Donc les
+      droites $(\NomM\NomN)$ et $(\NomB\NomC)$ sont parall\`eles d'apr\`es
+      la r\'eciproque du th\'eor\`eme de Thal\`es.}{%
+      Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas
+      parall\`eles.}
+  }
+}
+
+\newcommand\ReciproqueThales[8][]{%
+  % #1 Cl\'es
+  % #2 NomTriangle + Points ABCEF pour droite (BC)//(EF)
+  % #3 longueur AE
+  % #4 longueur AB
+  % #5 longueur AF
+  % #6 longueur AC
+  \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+  \ifboolKV[ClesThales]{FigureSeule}{%
+%    \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+    \MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+  }{\ifboolKV[ClesThales]{FigurecroiseeSeule}{%
+%      \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+      \MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+    }{%
+      \ifboolKV[ClesThales]{Figure}{%
+%        \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+        \begin{multicols}{2}
+          {\em La figure est donn\'ee \`a titre indicatif.}
+          \[\MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]
+          \par\columnbreak\par        
+          \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+          \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+        \end{multicols}
+      }{\ifboolKV[ClesThales]{Figurecroisee}{%
+%          \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]
+          \begin{minipage}{0.4\linewidth}%
+            {\em La figure est donn\'ee \`a titre indicatif.}%
+            \[\MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+          \end{minipage}
+          \hfill
+          \begin{minipage}{0.55\linewidth}%
+            \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+            \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+          \end{minipage}%
+        }{\ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+          \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\Thales[8][]{%
+  \useKVdefault[ClesThales]%
+  \setKV[ClesThales]{#1}%
+  %Définir les points pour une utilisation perso
+  \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+  \xdef\NomPointA{\NomA}%
+  \xdef\NomPointB{\NomB}%
+  \xdef\NomPointC{\NomC}%
+  \xdef\NomTriangle{\NomA\NomB\NomC}%
+  \xdef\NomPointM{\NomM}%
+  \xdef\NomPointN{\NomN}%
+  %
+  \ifboolKV[ClesThales]{Reciproque}{%
+    \ReciproqueThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+  }{%
+    \ifboolKV[ClesThales]{FigureSeule}{%
+      \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+      \MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+    }{%
+      \ifboolKV[ClesThales]{FigurecroiseeSeule}{%
+        \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+        \MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+      }{%
+        \ifboolKV[ClesThales]{Redaction}{%
+          \ifboolKV[ClesThales]{Figure}{%
+            \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+            \begin{multicols}{2}
+              {\em La figure est donn\'ee \`a titre indicatif.}%
+              \[\MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+              \par\columnbreak\par%
+              \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+            \end{multicols}%
+          }{%
+            \ifboolKV[ClesThales]{Figurecroisee}{%
+              \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+              \begin{multicols}{2}
+                {\em La figure est donn\'ee \`a titre indicatif.}%
+                \[\MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+                \par\columnbreak\par%
+                \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+              \end{multicols}
+            }{%
+              \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+            }
+          }    
+        }{%
+          \TThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+        }%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCThales.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,214 @@
+%%%
+% Tortue
+%%%
+\setKVdefault[Tortue]{%
+  Pas=0.2mm,%Déplacement,
+  Etapes=false,%Pour arrêter la construction à une étape particulière
+  Nom=\jobname,%Pour la sauvegarde du fichier mp
+  Grille=false,%Pour faire apparaître une grille
+  LargeurG=10,%Largeur Grille
+  HauteurG=10,%Hauteur Grille
+  TortueD=false,%Affiche la tortue au départ
+  TortueF=false,%Affiche la tortue à l'arrivée
+  Epaisseur=1,%Epaisseur du tracé
+  Angle=0,%Angle de départ de la tortue
+  Debut=false,%Pour indiquer que rien n'est fait (utile ?)
+  Depart={(0,0)},%Point de départ de la tortue
+  Axes=false,%Affichage des axes ou pas
+  Origine={(0,0)},%Origine des axes
+  Cases=false,%Se déplace-t-on sur des cases ?
+}
+\defKV[Tortue]{Etape=\setKV[Tortue]{Etapes}}%choix de l'étape d'arrêt
+
+\newcounter{PfCTortue}
+\setcounter{PfCTortue}{0}
+
+\makeatletter
+\NewDocumentCommand\TortueCreationFichier{o m}{%
+  \stepcounter{PfCTortue}%
+  \useKVdefault[Tortue]%
+  \setKV[Tortue]{#1}%
+  \setKV[Tortue]{Nom=\jobname+t\thePfCTortue}%
+  \setsepchar[*]{,* }%
+  \readlist*\PfCListeCmdTortue{#2}%
+  \setsepchar{,}%
+  \xdef\PfCNbRep{0}%
+  \savecomparemode%
+  \newwrite\turtle at out%
+  \immediate\openout\turtle at out \jobname+t\thePfCTortue.turtle%
+  \immediate\write\turtle at out{%
+    numeric ut;
+    ut=\useKV[Tortue]{Pas};
+    pair OrigineAxes;OrigineAxes=\useKV[Tortue]{Origine};
+    Etapes=\useKV[Tortue]{Etapes};
+    if Etapes:Total=\useKV[Tortue]{Etape};fi;
+  }%
+  \ifboolKV[Tortue]{Grille}{%
+    \immediate\write\turtle at out{%
+      larg=\useKV[Tortue]{LargeurG}; haut=\useKV[Tortue]{HauteurG};
+      for k=-larg upto larg:
+      draw 3*ut*(10k,-10haut)--3*ut*(10k,10haut) withcolor 0.75white;
+      endfor;
+      for k=-haut upto haut:
+      draw 3*ut*(-10larg,10k)--3*ut*(10larg,10k) withcolor 0.75white;
+      endfor;
+      %dotlabel("",ut*OrigineAxes);
+      if \useKV[Tortue]{Axes}:
+      drawarrow (3*ut*(-10larg,0)--3*ut*(10larg,0)) shifted(ut*(0,ypart(OrigineAxes-(0,0))));
+      drawarrow (3*ut*(0,-10haut)--3*ut*(0,10haut)) shifted(ut*(xpart(OrigineAxes-(0,0)),0));
+      %label.llft(btex O etex,(0,0));
+      dotlabel.lrt(btex 30 etex,(30*ut,0)+ut*(OrigineAxes-(0,0)));
+      dotlabel.ulft(btex 30 etex,(0,30*ut)+ut*(OrigineAxes-(0,0)));
+      fi;
+      if \useKV[Tortue]{Cases}:
+      string T[];
+      T1="A";
+      T2="B";
+      T3="C";
+      T4="D";
+      T5="E";
+      T6="F";
+      T7="G";
+      T8="H";
+      T9="I";
+      T10="J";
+      T11="K";
+      T12="L";
+      T13="M";
+      T14="N";
+      T15="O";
+      T16="P";
+      T17="Q";
+      T18="R";
+      T19="S";
+      T20="T";
+      T21="U";
+      T22="V";
+      T23="W";
+      T24="X";
+      T25="Y";
+      T26="Z";
+      for k=-larg upto larg-1:
+      label(TEX(T[k+larg+1]),3*ut*(10k+5,10haut+5));
+      endfor;
+      for k=haut downto -haut+1:
+      label(TEX(decimal(haut-k+1)),3*ut*(-10larg-5,10k-5));
+      endfor;
+      fi;
+      Epaisseur:=1.5;
+    }%
+  }{}%
+  \ifboolKV[Tortue]{Debut}{}{%
+    \foreachitem\compteur\in\PfCListeCmdTortue{%
+      \comparestrict%
+      \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{MP}[\PfCTestMP]%
+      \xintifboolexpr{\PfCTestMP==0}{%
+        \immediate\write\turtle at out{\PfCListeCmdTortue[\compteurcnt,2]}%
+      }{%
+        \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{[}[\PfCTestCrochetO]%
+        \xintifboolexpr{\PfCTestCrochetO==0}{}{%
+          \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{]}[\PfCTestCrochetF]%
+          \xintifboolexpr{\PfCTestCrochetF==0}{%
+            \immediate\write\turtle at out{TotalRemplis:=tt-1; remplis for l=1 upto TotalRemplis:B[l]--endfor cycle withcolor CouleurRemplis;}%
+          }{%
+            \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Remplis}[\PfCTestRemplis]%
+            \xintifboolexpr{\PfCTestRemplis==0}{%
+              \immediate\write\turtle at out{tt:=0;
+                TotalRemplis:=0; CouleurRemplis:=\PfCListeCmdTortue[\compteurcnt,2];}%
+            }{%
+              \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Fin}[\PfCTestFinPour]%
+              \xintifboolexpr{\PfCTestFinPour==0}{%
+                \immediate\write\turtle at out{enddef;k:=0;}%
+                \xdef\PfCNbRep{\fpeval{\PfCNbRep+1}}%
+              }{%
+                \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Pour}[\PfCTestPour]%
+                \xintifboolexpr{\PfCTestPour==0}{%
+                  \immediate\write\turtle at out{vardef \PfCListeCmdTortue[\compteurcnt,2](expr \PfCListeCmdTortue[\compteurcnt,3])=}%
+                }{%
+                  \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Rep}[\PfCTestRep]%
+                  \xintifboolexpr{\PfCTestRep==0}{%
+                    \xdef\PfCNbRep{\fpeval{\PfCNbRep+1}}%
+                    \immediate\write\turtle at out{nb[\PfCNbRep]:=0;}%
+                    \immediate\write\turtle at out{forever:}%
+                    \immediate\write\turtle at out{nb[\PfCNbRep]:=nb[\PfCNbRep]+1;}%
+                    % \immediate\write\turtle at out{nbcomp:=nbcomp+1;}
+                  }{%
+                    \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{)}[\PfCTestParaF]%
+                    \xintifboolexpr{\PfCTestParaF==0}{%
+                      \immediate\write\turtle at out{exitif nb[\PfCNbRep]=\PfCListeCmdTortue[\compteurcnt,2];}%
+                      \immediate\write\turtle at out{endfor;}%
+                      \xdef\PfCNbRep{\fpeval{\PfCNbRep-1}}%
+                    }{%
+                      \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{(}[\PfCTestParaO]%
+                      \xintifboolexpr{\PfCTestParaO==0}{%
+                      }{%
+                        \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Bc}[\PfCTestBc]%
+                        \xintifboolexpr{\PfCTestBc==0}{%
+                          \immediate\write\turtle at out{Bc;}%
+                        }{%
+                          \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Lc}[\PfCTestLc]%
+                          \xintifboolexpr{\PfCTestLc==0}{%
+                            \immediate\write\turtle at out{Lc;}%
+                          }{%
+                            \StrCompare{\PfCListeCmdTortue[\compteurcnt,1]}{Tlp}[\PfCTestTlp]%
+                            \xintifboolexpr{\PfCTestTlp==0}{%
+                              \immediate\write\turtle at out{Teleporter(\PfCListeCmdTortue[\compteurcnt,2],\PfCListeCmdTortue[\compteurcnt,3]);}%
+                            }{%
+                              \immediate\write\turtle at out{\PfCListeCmdTortue[\compteurcnt,1](\PfCListeCmdTortue[\compteurcnt,2]);}%
+                            }%
+                          }%
+                        }%
+                      }%
+                    }%
+                  }%
+                }%
+              }%
+            }%
+          }%
+        }%
+      }%
+    }%
+  }%
+  % \immediate\write\turtle at out{Tortue:=currentpicture;Tortue enddef;}%
+  % \immediate\write\turtle at out{draw Dessin;}%
+  \ifboolKV[Tortue]{TortueD}{%
+    \immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[0] scaled 1.5,A[0]);}%
+  }{}%
+  \ifboolKV[Tortue]{Etapes}{%
+    \immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[Total] scaled 1.5,A[Total]);}%
+  }{\ifboolKV[Tortue]{TortueF}{\immediate\write\turtle at out{drawoptions(withcolor DarkGreen);label(btex \noexpand\Large\noexpand\ding{40} etex rotated RetiensAngle[k] scaled 1.5,A[k]);}}{}}%
+  \immediate\closeout\turtle at out%
+  \restorecomparemode%
+}%
+\makeatother
+
+\NewDocumentCommand\Tortue{o m}{%
+  \useKVdefault[Tortue]%
+  \setKV[Tortue]{#1}%
+  \TortueCreationFichier[#1]{#2}%
+  \TortueDessinFinal%
+}
+
+\NewDocumentCommand\TortueDessinFinal{}{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    input PfCTurtleTestRemplis.mp;
+
+    pair Depart;
+    Depart=\useKV[Tortue]{Depart} if \useKV[Tortue]{Cases}:+(15,15)fi;
+    pair A[],B[];
+    A[0]=\useKV[Tortue]{Pas}*(xpart(Depart),ypart(Depart));
+    B[0]=A[0];
+    Epaisseur:=\useKV[Tortue]{Epaisseur};
+    Angle:=0;
+    numeric RetiensAngle[];
+    RetiensAngle[0]=\useKV[Tortue]{Angle};
+    
+    pair VecteurDpt;
+    VecteurDpt=(1,0) rotated RetiensAngle[0];
+    input \useKV[Tortue]{Nom}.turtle;
+  \end{mplibcode}
+  \else
+  \fi
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTortueBase.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,663 @@
+%%%
+% Trigonom\'etrie
+%%%
+\def\MPFigTrigo#1#2#3#4#5#6#7#8{%
+  \ifluatex
+  \mplibcodeinherit{enable}
+   \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesTrigo]{Echelle};
+    pair A,B,C,O,I,D,E,F;%
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=u*(1,1);
+    B-A=u*(3,0);
+    C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+    % On d\'efinit le centre du cercle circonscrit
+    O - .5[A,B] = whatever * (B-A) rotated 90;
+    O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#8);
+    B:=B rotatedabout(O,#8);
+    C:=C rotatedabout(O,#8);
+    % On d\'efinit le centre du cercle inscrit
+    (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+    (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+    % on dessine \`a main lev\'ee :)
+    path triangle;
+    triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+    % on d\'efinit l'angle droit
+    D-B=7*unitvector(C-B);
+    F-B=7*unitvector(A-B);
+    E-D=F-B;
+    draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+    % L'angle :)
+    path cc;
+    cc=fullcircle scaled 1u;
+    % on marque les angles
+    picture MAngle;
+    MAngle=image(
+    draw (cc shifted A);
+    );
+    draw MAngle;
+    clip currentpicture to triangle;
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    % on labelise
+    picture z;
+    label(btex #1 etex,1.15[O,A]);
+    label(btex #2 etex,1.15[O,B]);
+    label(btex #3 etex,1.15[O,C]);
+    label(btex \ang{#7} etex,A+0.95u*unitvector(I-A));
+    decalage:=3mm;
+    if #6<0:
+    else:
+    if angle(1/2[A,C]-B)>0:
+      if #6=0:
+        label(btex ? etex,1.1[B,1/2[A,C]]);
+      else:
+        label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
+      fi;
+    else:
+      if #6=0:
+        label(btex ? etex,1.1[B,1/2[A,C]]);
+      else:
+        label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
+      fi;
+    fi;
+  fi;   
+  if #4<0:
+  else:
+    if angle(1/2[B,C]-A)>0:
+      if #4=0:
+        label(btex ? etex,1/2[B,C]-decalage*(unitvector(A-B)));
+      else:
+        label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
+      fi;
+    else:
+      if #4=0:
+        label(btex ? etex,1/2[B,C]-decalage*(unitvector(A-B)));
+      else:
+        label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
+      fi;
+    fi;
+  fi;
+  if #5<0:
+  else:
+    if angle(1/2[A,B]-C)>0:
+      if #5=0:
+        label(btex ? etex,1/2[A,B]-decalage*(unitvector(C-B)));
+      else:
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+      fi;
+    else:
+      if #5=0:
+        label(btex ? etex,1/2[A,B]-decalage*(unitvector(C-B)));
+      else:
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+      fi;
+    fi;
+    fi;
+  \end{mplibcode}
+  \mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesTrigo]{Echelle};}]
+    pair A,B,C,O,I,D,E,F;%
+    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    A=u*(1,1);
+    B-A=u*(3,0);
+    C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+    % On d\'efinit le centre du cercle circonscrit
+    O - .5[A,B] = whatever * (B-A) rotated 90;
+    O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+    A:=A rotatedabout(O,#8);
+    B:=B rotatedabout(O,#8);
+    C:=C rotatedabout(O,#8);
+    % On d\'efinit le centre du cercle inscrit
+    (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+    (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+    % on dessine \`a main lev\'ee :)
+    path triangle;
+    triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+    % on d\'efinit l'angle droit
+    D-B=7*unitvector(C-B);
+    F-B=7*unitvector(A-B);
+    E-D=F-B;
+    draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+    % L'angle :)
+    path cc;
+    cc=fullcircle scaled 1u;
+    % on marque les angles
+    picture MAngle;
+    MAngle=image(
+    draw (cc shifted A);
+    % draw (cc shifted B);
+    % draw (cc shifted C);
+    );
+    draw MAngle;
+    clip currentpicture to triangle;
+    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    % on labelise
+    picture z;
+    label(btex #1 etex,1.15[O,A]);
+    label(btex #2 etex,1.15[O,B]);
+    label(btex #3 etex,1.15[O,C]);
+    label(btex \ang{#7} etex,A+0.95u*unitvector(I-A));
+    decalage:=3mm;
+    if #6<0:
+    else:
+    if angle(1/2[A,C]-B)>0:
+      if #6=0:
+        label(btex ? etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+      else:
+        label(btex \num{#6} etex rotated angle(C-A),1.2[B,1/2[A,C]]);
+      fi;
+    else:
+      if #6=0:
+        label(btex ? etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+      else:
+        label(btex \num{#6} etex rotated angle(A-C),1.2[B,1/2[A,C]]);
+      fi;
+    fi;
+  fi;   
+  if #4<0:
+  else:
+    if angle(1/2[B,C]-A)>0:
+      if #4=0:
+        label(btex ? etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+      else:
+        label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+      fi;
+    else:
+      if #4=0:
+        label(btex ? etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+      else:
+        label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+      fi;
+    fi;
+  fi;
+  if #5<0:
+  else:
+    if angle(1/2[A,B]-C)>0:
+      if #5=0:
+        label(btex ? etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+      else:
+        label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+      fi;
+    else:
+      if #5=0:
+        label(btex ? etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+      else:
+        label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+      fi;
+    fi;
+  fi;
+\end{mpost}
+\fi
+}
+
+\def\MPFigTrigoAngle#1#2#3#4#5#6#7{%
+  % #1 A
+  % #2 B
+  % #3 C
+  % #4 opp
+  % #5 adj
+  % #6 hyp
+  % #7 angle de rotation
+  \ifluatex
+  \mplibcodeinherit{enable}
+   \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesTrigo]{Echelle};
+  pair A,B,C,O,I,D,E,F;%
+  % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+  A=u*(1,1);
+  B-A=u*(3,0);
+  C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+    % On d\'efinit le centre du cercle circonscrit
+  O - .5[A,B] = whatever * (B-A) rotated 90;
+  O - .5[B,C] = whatever * (C-B) rotated 90;
+  % On tourne pour \'eventuellement moins de lassitude :)
+  A:=A rotatedabout(O,#7);
+  B:=B rotatedabout(O,#7);
+  C:=C rotatedabout(O,#7);
+  % On d\'efinit le centre du cercle inscrit
+  (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+  (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+    %on dessine \`a main lev\'ee :)
+  path triangle;
+  triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+  %on d\'efinit l'angle droit
+  D-B=7*unitvector(C-B);
+  F-B=7*unitvector(A-B);
+  E-D=F-B;
+  draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+  %L'angle :)
+  path cc;
+  cc=fullcircle scaled 1u;
+  % on marque les angles
+  picture MAngle;
+  MAngle=image(
+  draw (cc shifted A);
+  );
+  draw MAngle;
+  clip currentpicture to triangle;
+  draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+  draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+  draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+  % on labelise
+  label(btex #1 etex,1.15[O,A]);
+  label(btex #2 etex,1.15[O,B]);
+  label(btex #3 etex,1.15[O,C]);
+  label(btex ? etex,A+0.95u*unitvector(I-A));
+  decalage:=3mm;
+  if #6>0:
+  if angle(1/2[A,C]-B)>0:
+    label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
+  else:
+  label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
+  fi;
+  fi;
+  if #4>0:
+  if angle(1/2[B,C]-A)>0:
+   label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
+  else:
+    label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
+    fi;
+    fi;
+    if #5>0:
+  if angle(1/2[A,B]-C)>0:
+    label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+  else:
+  label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+  fi;
+  fi;
+\end{mplibcode}
+\mplibcodeinherit{disable}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesTrigo]{Echelle};}]
+      u:=1cm;
+  pair A,B,C,O,I,D,E,F;%
+    %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+  A=u*(1,1);
+  B-A=u*(3,0);
+  C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+    % On d\'efinit le centre du cercle circonscrit
+  O - .5[A,B] = whatever * (B-A) rotated 90;
+  O - .5[B,C] = whatever * (C-B) rotated 90;
+    % On tourne pour \'eventuellement moins de lassitude :)
+  A:=A rotatedabout(O,#7);
+  B:=B rotatedabout(O,#7);
+  C:=C rotatedabout(O,#7);
+    % On d\'efinit le centre du cercle inscrit
+  (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+  (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+    %on dessine \`a main lev\'ee :)
+  path triangle;
+  triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+  %on d\'efinit l'angle droit
+  D-B=7*unitvector(C-B);
+  F-B=7*unitvector(A-B);
+  E-D=F-B;
+  draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+  %L'angle :)
+  path cc;
+  cc=fullcircle scaled 1u;
+    % on marque les angles
+  picture MAngle;
+  MAngle=image(
+      draw (cc shifted A);
+    );
+  draw MAngle;
+  clip currentpicture to triangle;
+  draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+  draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+  draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+    %on labelise
+  label(btex #1 etex,1.15[O,A]);
+  label(btex #2 etex,1.15[O,B]);
+  label(btex #3 etex,1.15[O,C]);
+  label(btex ? etex,A+0.95u*unitvector(I-A));
+  decalage:=3mm;
+  if #6>0:
+  if angle(1/2[A,C]-B)>0:
+    label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
+  else:
+  label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
+  fi;
+  fi;
+  if #4>0:
+  if angle(1/2[B,C]-A)>0:
+   label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
+  else:
+    label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
+    fi;
+    fi;
+    if #5>0:
+  if angle(1/2[A,B]-C)>0:
+    label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+  else:
+  label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+  fi;
+  fi;
+\end{mpost}
+\fi
+}
+
+\setKVdefault[ClesTrigo]{Angle=0,Propor=false,Figure=false,FigureSeule=false,ValeurExacte=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false,Perso=false,Echelle=1cm}%
+
+\newcommand\RedactionTrigo{}%
+
+\newcommand\TrigoCalculs[5][]{%
+  \setKV[ClesTrigo]{#1}%
+  % #1 Cl\'es
+  % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC
+  % #3 Longueur #4 Longueur #5 angle
+  % On d\'efinit les points
+  \DeclareSIUnit{\PfCTrigoUnit}{\useKV[ClesTrigo]{Unite}}%
+  \StrMid{#2}{1}{1}[\NomA]%
+  \StrMid{#2}{2}{2}[\NomB]%
+  \StrMid{#2}{3}{3}[\NomC]%
+  \xdef\NomTriangle{\NomA\NomB\NomC}%
+  \xdef\NomAngleDroit{\NomB}%
+  \xdef\NomSommetA{\NomA}%
+  \xdef\NomSommetB{\NomB}%
+  \xdef\NomSommetC{\NomC}%
+  \ifboolKV[ClesTrigo]{Perso}{%
+    \RedactionTrigo%
+  }{%
+    Dans le triangle $\NomA\NomB\NomC$, rectangle en $\NomB$, on a :%
+  }%
+  \ifboolKV[ClesTrigo]{Cosinus}{%
+    \ifx\bla#3\bla%on calcule le c\^ot\'e adjacent
+    \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%\\
+       \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\
+       \SI{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB}
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \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%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \SI{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\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(#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})}%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
+      \end{align*}
+    }{%
+      \begin{align*}
+        \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})}%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
+      \end{align*}%
+    }%
+    \else%on calcule l'angle
+    \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(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(acosd(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+      \end{align*}%
+    }%
+    \fi%
+    \fi%
+  }{}%
+  \ifboolKV[ClesTrigo]{Sinus}{%
+    \ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e
+    \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%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \SI{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC}%
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \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%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \SI{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\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(#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})}%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \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})}%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
+      \end{align*}%
+    }%
+    \else%on calcule l'angle
+    \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(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(asind(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+      \end{align*}%
+    }%
+    \fi%
+    \fi%
+  }{}%
+  \ifboolKV[ClesTrigo]{Tangente}{%
+    \ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e
+    \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%\\%
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \SI{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC}%
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \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%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \SI{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\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(#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})}%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \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})}%\\
+        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
+        \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
+      \end{align*}%
+    }%
+    \else%on calcule l'angle
+    \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(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(atand(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+      \end{align*}%
+    }%
+    \fi%
+    \fi%
+  }{}%
+}%
+
+\newcommand\Trigo[5][]{%
+  \useKVdefault[ClesTrigo]%
+  \setKV[ClesTrigo]{#1}%
+  % #1 Cl\'es
+  % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC
+  % #3 Longueur #4 Longueur #5 angle
+  % On d\'efinit les points
+  \StrMid{#2}{1}{1}[\NomA]%
+  \StrMid{#2}{2}{2}[\NomB]%
+  \StrMid{#2}{3}{3}[\NomC]%
+  % On r\'edige
+  \ifboolKV[ClesTrigo]{FigureSeule}{%
+    \ifx\bla#5\bla%
+    \ifboolKV[ClesTrigo]{Cosinus}{%
+      \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{-1}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
+    }{}%
+    \ifboolKV[ClesTrigo]{Sinus}{%
+      \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{-1}{#4}{\useKV[ClesTrigo]{Angle}}
+    }{}%
+    \ifboolKV[ClesTrigo]{Tangente}{%
+      \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{-1}{\useKV[ClesTrigo]{Angle}}
+    }{}%
+    \else%}{%figure pour calculer une longueur
+    \ifboolKV[ClesTrigo]{Cosinus}{%
+      \ifx\bla#3\bla%adjacent inconnu
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
+      \else
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}{\useKV[ClesTrigo]{Angle}}
+      \fi
+    }{}%
+    \ifboolKV[ClesTrigo]{Sinus}{%
+      \ifx\bla#3\bla%adjacent inconnu
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
+      \else
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}{\useKV[ClesTrigo]{Angle}}
+      \fi
+    }{}%
+    \ifboolKV[ClesTrigo]{Tangente}{%
+      \ifx\bla#3\bla%adjacent inconnu
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
+      \else%
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
+      \fi%
+    }{}%
+    \fi%
+  }{%
+    \ifboolKV[ClesTrigo]{Figure}{%
+      \begin{multicols}{2}%
+        {\em La figure est donn\'ee \`a titre indicatif.}%
+        \ifx\bla#5\bla%
+        \ifboolKV[ClesTrigo]{Cosinus}{%
+          \begin{center}
+            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{-1}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+        }{}%
+        \ifboolKV[ClesTrigo]{Sinus}{%
+          \begin{center}
+            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{-1}{#4}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+        }{}%
+        \ifboolKV[ClesTrigo]{Tangente}{%
+          \begin{center}
+            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{-1}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+        }{}%
+        \else%}{%figure pour calculer une longueur
+        \ifboolKV[ClesTrigo]{Cosinus}{%
+          \ifx\bla#3\bla%adjacent inconnu
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+          \else
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+          \fi
+        }{}%
+        \ifboolKV[ClesTrigo]{Sinus}{%
+          \ifx\bla#3\bla%adjacent inconnu
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+          \else
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+          \fi
+        }{}%
+        \ifboolKV[ClesTrigo]{Tangente}{%
+          \ifx\bla#3\bla%adjacent inconnu
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+          \else%
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+          \fi%
+        }{}%
+        \fi%
+        \par\columnbreak\par
+        \TrigoCalculs[#1]{#2}{#3}{#4}{#5}%
+      \end{multicols}
+    }{%
+      \TrigoCalculs[#1]{#2}{#3}{#4}{#5}%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTrigonometrie.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTriominos.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCTriominos.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCTriominos.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,378 @@
+%%%
+% Triominos
+%%%
+\setKVdefault[ClesTriomino]{Longueur=5cm,Etages=3,Ecart=0.6,AffichagePiece=false,Hexagone=false,Recapitulatif=false,Colonnes=2}%
+\defKV[ClesTriomino]{Piece=\setKV[ClesTriomino]{AffichagePiece=true}}%
+
+\def\TraceTriomino#1{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesTriomino]{Longueur};
+    Rayon:=0.75*u*sqrt(3)/6;
+    Etages:=\useKV[ClesTriomino]{Etages};
+    pair A,B,C,D,E,F;
+    A=(0,0);
+    B-A=Etages*u*(1,0);
+    C=rotation(B,A,60);
+    D=(1/Etages)[C,A];
+    E=(1/Etages)[C,B];
+    F=C;
+    trace polygone(A,B,C);
+    for k=1 upto Etages-1:
+    trace (k/Etages)[C,A]--(k/Etages)[C,B];
+    trace (k/Etages)[A,C]--(k/Etages)[A,B];
+    trace (k/Etages)[B,A]--(k/Etages)[B,C];
+    endfor;
+    pair G[];color H[];%Couleur pour garder l'orientation des textes...
+    G[1]=iso(D,E,F);
+    H1=blue;
+    n=1;
+    for k=1 upto Etages-1:
+    for l=0 upto (2*k):
+    n:=n+1;
+    if (l mod 2=0):
+    G[n]=G[1] shifted(k*(D-F)+(l div 2)*(E-D));
+    H[n]=blue;
+    else:
+    G[n]=symetrie(G[1],D,E) shifted((k-1)*(D-F)+(l div 2)*(E-D));
+    H[n]=green;
+    fi;
+    endfor;
+    endfor;
+    % affichage des textes
+    nba=0;
+    for p_=#1:
+    if (nba mod 3)=1:
+    if H[(nba div 3)+1]=blue:
+    label(TEX(p_) rotated 120,pointarc(cercles(G[(nba div 3)+1],Rayon),30));
+    else:
+    label(TEX(p_) rotated 180,pointarc(cercles(G[(nba div 3)+1],Rayon),90));
+    fi;
+    elseif (nba mod 3)=2:
+    if H[(nba div 3)+1]=blue:
+    label(TEX(p_),pointarc(cercles(G[(nba div 3)+1],Rayon),270));
+    else:
+    label(TEX(p_) rotated 60,pointarc(cercles(G[(nba div 3)+1],Rayon),330));
+    fi;
+    else:
+    if H[(nba div 3)+1]=blue:
+    label(TEX(p_) rotated 240,pointarc(cercles(G[(nba div 3)+1],Rayon),150));
+    else:
+    label(TEX(p_) rotated 300,pointarc(cercles(G[(nba div 3)+1],Rayon),210));
+    fi;
+    fi;
+    nba:=nba+1;
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={u:=\useKV[ClesTriomino]{Longueur}; Etages:=\useKV[ClesTriomino]{Etages};}]
+    Rayon:=0.75*u*sqrt(3)/6;
+    pair A,B,C,D,E,F;
+    A=(0,0);
+    B-A=Etages*u*(1,0);
+    C=rotation(B,A,60);
+    D=(1/Etages)[C,A];
+    E=(1/Etages)[C,B];
+    F=C;
+    trace polygone(A,B,C);
+    for k=1 upto Etages-1:
+    trace (k/Etages)[C,A]--(k/Etages)[C,B];
+    trace (k/Etages)[A,C]--(k/Etages)[A,B];
+    trace (k/Etages)[B,A]--(k/Etages)[B,C];
+    endfor;
+    pair G[];color H[];%Couleur pour garder l'orientation des textes...
+    G[1]=iso(D,E,F);
+    H1=blue;
+    n=1;
+    for k=1 upto Etages-1:
+    for l=0 upto (2*k):
+    n:=n+1;
+    if (l mod 2=0):
+    G[n]=G[1] shifted(k*(D-F)+(l div 2)*(E-D));
+    H[n]=blue;
+    else:
+    G[n]=symetrie(G[1],D,E) shifted((k-1)*(D-F)+(l div 2)*(E-D));
+    H[n]=green;
+    fi;
+    endfor;
+    endfor;
+    % affichage des textes
+    nba=0;
+    for p_=#1:
+    if (nba mod 3)=1:
+    if H[(nba div 3)+1]=blue:
+    label(LATEX(p_) rotated 120,pointarc(cercles(G[(nba div 3)+1],Rayon),30));
+    else:
+    label(LATEX(p_) rotated 180,pointarc(cercles(G[(nba div 3)+1],Rayon),90));
+    fi;
+    elseif (nba mod 3)=2:
+    if H[(nba div 3)+1]=blue:
+    label(LATEX(p_),pointarc(cercles(G[(nba div 3)+1],Rayon),270));
+    else:
+    label(LATEX(p_) rotated 60,pointarc(cercles(G[(nba div 3)+1],Rayon),330));
+    fi;
+    else:
+    if H[(nba div 3)+1]=blue:
+    label(LATEX(p_) rotated 240,pointarc(cercles(G[(nba div 3)+1],Rayon),150));
+    else:
+    label(LATEX(p_) rotated 300,pointarc(cercles(G[(nba div 3)+1],Rayon),210));
+    fi;
+    fi;
+    nba:=nba+1;
+    endfor;    
+  \end{mpost}
+  \fi
+}
+
+\def\TraceTriominoHexa#1{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=\useKV[ClesTriomino]{Longueur};
+    RayonCercle:=u;
+    Rayon:=\useKV[ClesTriomino]{Ecart}*0.5*u*sqrt(3)/6;
+    pair O,A,B,C,D,E,F,G,H[],I[];
+    O=(0,0);
+    path cc;
+    cc=cercles(O,RayonCercle);
+    A=pointarc(cc,0);
+    B=rotation(A,O,60);
+    C=rotation(B,O,60);
+    D=rotation(C,O,60);
+    E=rotation(D,O,60);
+    F=rotation(E,O,60);
+    G=rotation(F,O,60);
+    H1=iso(A,B);
+    H2=iso(B,C);
+    H3=iso(C,D);
+    H4=iso(D,E);
+    H5=iso(E,F);
+    H6=iso(F,A);
+    I1=iso(C,1/2[C,D],rotation(1/2[C,D],C,60));
+    I2=symetrie(I1,C,F);
+    I3=symetrie(I2,1/2[B,C],1/2[D,E]);
+    I4=symetrie(I3,1/2[B,C],1/2[F,A]);
+    I5=symetrie(I4,B,E);
+    I6-I1=0.5*(D-C);
+    I7-I2=0.5*(D-C);
+    I8-I3=0.5*(D-C);
+    I9-I4=0.5*(D-C);
+    I10-I5=0.5*(D-C);
+    I11=symetrie(I10,1/2[C,B],1/2[F,A]);
+    I12=symetrie(I11,1/2[A,B],1/2[E,F]);
+    I13=symetrie(I6,A,D);
+    I14=symetrie(I7,A,D);
+    I15=symetrie(I8,A,D);
+    I16=symetrie(I9,A,D);
+    I17=symetrie(I10,A,D);
+    I18=symetrie(I11,A,D);
+    I19=symetrie(I12,A,D);
+    I20=symetrie(I1,A,D);
+    I21=symetrie(I2,A,D);
+    I22=symetrie(I3,A,D);
+    I23=symetrie(I4,A,D);
+    I24=symetrie(I5,A,D);
+    trace polygone(A,B,C,D,E,F);
+    trace polygone(H1,H3,H5);
+    trace polygone(H2,H4,H6);
+    trace segment(A,D);
+    trace segment(B,E);
+    trace segment(C,F);
+    color N[];%Couleur pour garder l'orientation des textes...
+    N1=blue;
+    for l=2 upto 5:
+    if (l mod 2=0):
+    N[l]=green;
+    else:
+    N[l]=blue;
+    fi;
+    endfor;
+    for l=6 upto 12:
+    if (l mod 2=0):
+    N[l]=blue;
+    else:
+    N[l]=green;
+    fi;
+    endfor;
+    for l=13 upto 19:
+    if (l mod 2=0):
+    N[l]=blue;
+    else:
+    N[l]=green;
+    fi;
+    endfor;
+    for l=20 upto 24:
+    if (l mod 2=0):
+    N[l]=green;
+    else:
+    N[l]=blue;
+    fi;
+    endfor;
+    % affichage des textes
+    nba=0;
+    for p_=#1:
+    if (nba mod 3)=1:
+    if N[(nba div 3)+1]=blue:
+    label(TEX(p_) rotated 120,pointarc(cercles(I[(nba div 3)+1],Rayon),30));
+    else:
+    label(TEX(p_) rotated 180,pointarc(cercles(I[(nba div 3)+1],Rayon),90));
+    fi;
+    elseif (nba mod 3)=2:
+    if N[(nba div 3)+1]=blue:
+    label(TEX(p_),pointarc(cercles(I[(nba div 3)+1],Rayon),270));
+    else:
+    label(TEX(p_) rotated 60,pointarc(cercles(I[(nba div 3)+1],Rayon),330));
+    fi;
+    else:
+    if N[(nba div 3)+1]=blue:
+    label(TEX(p_) rotated 240,pointarc(cercles(I[(nba div 3)+1],Rayon),150));
+    else:
+    label(TEX(p_) rotated 300,pointarc(cercles(I[(nba div 3)+1],Rayon),210));
+    fi;
+    fi;
+    nba:=nba+1;
+    endfor;
+  \end{mplibcode}
+  \else
+    \begin{mpost}[mpsettings={u:=\useKV[ClesTriomino]{Longueur};RayonCercle:=u; Rayon:=\useKV[ClesTriomino]{Ecart}*0.5*u*sqrt(3)/6;}]
+    pair O,A,B,C,D,E,F,G,H[],I[];
+    O=(0,0);
+    path cc;
+    cc=cercles(O,RayonCercle);
+    A=pointarc(cc,0);
+    B=rotation(A,O,60);
+    C=rotation(B,O,60);
+    D=rotation(C,O,60);
+    E=rotation(D,O,60);
+    F=rotation(E,O,60);
+    G=rotation(F,O,60);
+    H1=iso(A,B);
+    H2=iso(B,C);
+    H3=iso(C,D);
+    H4=iso(D,E);
+    H5=iso(E,F);
+    H6=iso(F,A);
+    I1=iso(C,1/2[C,D],rotation(1/2[C,D],C,60));
+    I2=symetrie(I1,C,F);
+    I3=symetrie(I2,1/2[B,C],1/2[D,E]);
+    I4=symetrie(I3,1/2[B,C],1/2[F,A]);
+    I5=symetrie(I4,B,E);
+    I6-I1=0.5*(D-C);
+    I7-I2=0.5*(D-C);
+    I8-I3=0.5*(D-C);
+    I9-I4=0.5*(D-C);
+    I10-I5=0.5*(D-C);
+    I11=symetrie(I10,1/2[C,B],1/2[F,A]);
+    I12=symetrie(I11,1/2[A,B],1/2[E,F]);
+    I13=symetrie(I6,A,D);
+    I14=symetrie(I7,A,D);
+    I15=symetrie(I8,A,D);
+    I16=symetrie(I9,A,D);
+    I17=symetrie(I10,A,D);
+    I18=symetrie(I11,A,D);
+    I19=symetrie(I12,A,D);
+    I20=symetrie(I1,A,D);
+    I21=symetrie(I2,A,D);
+    I22=symetrie(I3,A,D);
+    I23=symetrie(I4,A,D);
+    I24=symetrie(I5,A,D);
+    trace polygone(A,B,C,D,E,F);
+    trace polygone(H1,H3,H5);
+    trace polygone(H2,H4,H6);
+    trace segment(A,D);
+    trace segment(B,E);
+    trace segment(C,F);
+    color N[];%Couleur pour garder l'orientation des textes...
+    N1=blue;
+    for l=2 upto 5:
+    if (l mod 2=0):
+    N[l]=green;
+    else:
+    N[l]=blue;
+    fi;
+    endfor;
+    for l=6 upto 12:
+    if (l mod 2=0):
+    N[l]=blue;
+    else:
+    N[l]=green;
+    fi;
+    endfor;
+    for l=13 upto 19:
+    if (l mod 2=0):
+    N[l]=blue;
+    else:
+    N[l]=green;
+    fi;
+    endfor;
+    for l=20 upto 24:
+    if (l mod 2=0):
+    N[l]=green;
+    else:
+    N[l]=blue;
+    fi;
+    endfor;
+    % affichage des textes
+    nba=0;
+    for p_=#1:
+    if (nba mod 3)=1:
+    if N[(nba div 3)+1]=blue:
+    label(LATEX(p_) rotated 120,pointarc(cercles(I[(nba div 3)+1],Rayon),30));
+    else:
+    label(LATEX(p_) rotated 180,pointarc(cercles(I[(nba div 3)+1],Rayon),90));
+    fi;
+    elseif (nba mod 3)=2:
+    if N[(nba div 3)+1]=blue:
+    label(LATEX(p_),pointarc(cercles(I[(nba div 3)+1],Rayon),270));
+    else:
+    label(LATEX(p_) rotated 60,pointarc(cercles(I[(nba div 3)+1],Rayon),330));
+    fi;
+    else:
+    if N[(nba div 3)+1]=blue:
+    label(LATEX(p_) rotated 240,pointarc(cercles(I[(nba div 3)+1],Rayon),150));
+    else:
+    label(LATEX(p_) rotated 300,pointarc(cercles(I[(nba div 3)+1],Rayon),210));
+    fi;
+    fi;
+    nba:=nba+1;
+    endfor;
+  \end{mpost}
+  \fi
+}
+
+\newtoks\toklisteTriomino%
+\def\UpdatetoksTriomino#1\nil{\addtotok\toklisteTriomino{"#1",}}%
+  
+\newcommand\Triomino[2][]{%
+  \useKVdefault[ClesTriomino]%
+  \setKV[ClesTriomino]{#1}%
+  \setsepchar{§}%\ignoreemptyitems%
+  \readlist*\ListeTriominos{#2}%
+  \toklisteTriomino{}%
+  \ifboolKV[ClesTriomino]{Recapitulatif}{%
+    %\begin{longtable}{|>{\centering}p{0.45\linewidth}|p{0.45\linewidth}|}
+    %  \hline
+    %  \xintFor* ##1 in {\xintSeq{1}{\ListeTriominoslen}}\do{
+    %    &\\
+    %    &\\
+    %    \ListeTriominos[##1]&\\
+    %    &\\
+    %    &\\
+    %    \hline
+    %  }%
+    %\end{longtable}
+  }{%
+    \ifboolKV[ClesTriomino]{AffichagePiece}{%
+      \setKV[ClesTriomino]{Etages=1}%
+      \TraceTriomino{"\ListeTriominos[\fpeval{3*\useKV[ClesTriomino]{Piece}-2}]","\ListeTriominos[\fpeval{3*\useKV[ClesTriomino]{Piece}-1}]","\ListeTriominos[\fpeval{3*\useKV[ClesTriomino]{Piece}}]"}%
+    }{%
+      \foreachitem\compteur\in\ListeTriominos{\expandafter\UpdatetoksTriomino\compteur\nil}%
+      \ifboolKV[ClesTriomino]{Hexagone}{%
+        \TraceTriominoHexa{\the\toklisteTriomino}%
+      }{%
+        \TraceTriomino{\the\toklisteTriomino}%
+      }%
+    }%
+  }%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCTriominos.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,344 @@
+%%%
+% Vue Cubes
+%%%
+\setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false}
+
+\newtoks\toklisteVueCube%
+\def\UpdatetoksVueCube#1\nil{\addtotok\toklisteVueCube{#1,}}%
+
+\NewDocumentCommand\VueCubes{o m}{%
+  \useKVdefault[VueCubes]%
+  \setKV[VueCubes]{#1}
+  \ifboolKV[VueCubes]{Solution}{%
+    \BuildVueCubesSolution%
+  }{%
+    \ifboolKV[VueCubes]{Creation}{%Le nombre de données doit être compatible avec le "volume du pavé droit"
+      \ignoreemptyitems%
+      \readlist*\PfCListeHauteursCubes{#2}%
+      \reademptyitems%
+      \toklisteVueCube{}%
+      \foreachitem\compteur\in\PfCListeHauteursCubes{\expandafter\UpdatetoksVueCube\compteur\nil}%
+      \BuildVueCubes{\useKV[VueCubes]{Angle}}{\the\toklisteVueCube}%
+    }{%
+      \BuildVueCubes{\useKV[VueCubes]{Angle}}{}%
+    }%
+  }%
+}%
+
+\NewDocumentCommand\BuildVueCubes{m m}{%
+  \ifluatex
+  \mplibforcehmode
+  \xdef\PfCVueCubeNom{\useKV[VueCubes]{Nom}}%
+  \begin{mplibcode}[\PfCVueCubeNom]
+    input PfCSolid;
+
+    intensite:=1.5;
+
+    Ferme[0]:=false;
+    outcolor:=\useKV[VueCubes]{CouleurCube};
+    incolor:=white;
+    nb:=1;subh:=1;
+    creux:=true;
+
+    Profondeur:=\useKV[VueCubes]{Profondeur};
+    Largeur:=\useKV[VueCubes]{Largeur};
+    Hauteur:=\useKV[VueCubes]{Hauteur};
+    Phi:=#1;
+    Echelle:=\useKV[VueCubes]{Echelle};
+
+    color CouleurFleche;
+    CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+    
+    boolean Trou,FaceVue,Creation,Grille;
+    Trou:=\useKV[VueCubes]{Trou};
+    FaceVue:=\useKV[VueCubes]{Face};
+    Creation:=\useKV[VueCubes]{Creation};
+    Grille:=\useKV[VueCubes]{Grilles};
+    
+    TotalObj:=0;
+
+    vardef CreationSolide(text t)=
+    PfCnbcubes:=0;
+    for p_=t:
+    m:=(PfCnbcubes div Profondeur);
+    k:=(PfCnbcubes mod Profondeur);
+    hauteurtour[m+1][k+1]:=p_;
+    for l=1 upto hauteurtour[m+1][k+1]:
+    TotalObj:=incr TotalObj;
+    TR:=(-Echelle*k,(m+1)*Echelle,Echelle*l-Echelle/2);
+    ObjetDeplacement[TotalObj](0);
+    endfor;
+    PfCnbcubes:=incr PfCnbcubes;
+    endfor;
+    enddef;
+
+    Initialisation(2500,Phi,20,50);
+    Objetcube0("a="&decimal(Echelle));
+    
+    if Creation:
+    CreationSolide(#2);
+    else:
+    for k=1 upto Profondeur:%4 profondeur
+    hauteurtour[0][k]:=Hauteur;%5 hauteur totale
+    endfor;
+    for m=1 upto Largeur:%3 largeur
+    for k=1 upto Profondeur:%4 profondeur
+    if Trou:
+    if m>1:
+    hauteurtour[m][k]:=floor(uniformdeviate(hauteurtour[m-1][k]+1));%5 hauteur totale
+    else:
+    hauteurtour[m][k]:=1+floor(uniformdeviate(hauteurtour[m-1][k]));%5 hauteur totale
+    fi;
+    else:
+    hauteurtour[m][k]:=1+floor(uniformdeviate(hauteurtour[m-1][k]));%5 hauteur totale
+    fi;
+    for l=1 upto hauteurtour[m][k]:
+    TotalObj:=incr TotalObj;
+    TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);
+    ObjetDeplacement[TotalObj](0);
+    endfor;
+    endfor;
+    endfor;
+    fi;
+
+    % Pour la fleche
+    path Fleche;
+    color A[];
+    if FaceVue:
+    A0=Echelle*(1,Largeur/2,0);
+    A1-A0=0.25*(2,2,0);
+    A2-A1=0.25*(0,-1,0);
+    A3-A2=0.25*(2,0,0);
+    A4-A3=0.25*(0,-2,0);
+    A5-A4=A2-A3;
+    A6-A5=A2-A1;
+    Fleche=Projette(A0)--Projette(A1)--Projette(A2)--Projette(A3)--Projette(A4)--Projette(A5)--Projette(A6)--cycle;
+    fill Fleche withcolor CouleurFleche;
+    draw Fleche;
+    fi;    
+    
+    nbobj:=TotalObj;
+    DessineFusion;
+
+    if Grille:
+    % dessus
+    color Ad[];
+    Ad0=(0.5Echelle,0.5*Echelle,-0.5);
+    Ad1-Ad0=(0,Largeur*Echelle,0);
+    Ad2-Ad1=(-Profondeur*Echelle,0,0);
+    Ad3-Ad2=Ad0-Ad1;
+    draw Projette(Ad0) for k=1 upto 3: --Projette(Ad[k]) endfor --cycle;
+    for k=1 upto Largeur-1:
+    draw Projette((k/Largeur)[Ad0,Ad1])--Projette((k/Largeur)[Ad3,Ad2]);
+    endfor;
+    for k=1 upto Profondeur-1:
+    draw Projette((k/Profondeur)[Ad0,Ad3])--Projette((k/Profondeur)[Ad1,Ad2]);
+    endfor;
+    % face
+    color Af[];
+    Af0=(-1-Profondeur*Echelle,0.5*Echelle,0);
+    Af1-Af0=(0,Largeur*Echelle,0);
+    Af2-Af1=(0,0,Hauteur*Echelle);
+    Af3-Af2=Af0-Af1;
+    draw Projette(Af0) for k=1 upto 3: --Projette(Af[k]) endfor --cycle;
+    for k=1 upto Largeur-1:
+    draw Projette((k/Largeur)[Af0,Af1])--Projette((k/Largeur)[Af3,Af2]);
+    endfor;
+    for k=1 upto Hauteur-1:
+    draw Projette((k/Hauteur)[Af0,Af3])--Projette((k/Hauteur)[Af1,Af2]);
+    endfor;
+    % droite
+    color Adg[];
+    Adg0=(0.5Echelle,-Largeur*Echelle-1,0);
+    Adg1-Adg0=(-Profondeur*Echelle,0,0);
+    Adg2-Adg1=(0,0,Hauteur*Echelle);
+    Adg3-Adg2=Adg0-Adg1;
+    draw Projette(Adg0) for k=1 upto 3: --Projette(Adg[k]) endfor --cycle;
+    for k=1 upto Profondeur-1:
+    draw Projette((k/Profondeur)[Adg0,Adg1])--Projette((k/Profondeur)[Adg3,Adg2]);
+    endfor;
+    for k=1 upto Hauteur-1:
+    draw Projette((k/Hauteur)[Adg0,Adg3])--Projette((k/Hauteur)[Adg1,Adg2]);
+    endfor;
+    fi;
+    
+    %draw (llcorner currentpicture)--(lrcorner currentpicture)--(urcorner currentpicture)--(ulcorner currentpicture)--cycle;
+  \end{mplibcode}
+  \ifboolKV[VueCubes]{Grilles}{}{%
+    \hspace*{1.5cm}
+    \begin{mplibcode}[\PfCVueCubeNom]
+      input PfCSolid;
+      
+      intensite:=1.5;
+      
+      Ferme[0]:=false;
+      outcolor:=\useKV[VueCubes]{CouleurCube};
+      incolor:=white;
+      nb:=1;subh:=1;
+      creux:=true;
+      
+      Profondeur:=\useKV[VueCubes]{Profondeur};
+      Largeur:=\useKV[VueCubes]{Largeur};
+      Hauteur:=\useKV[VueCubes]{Hauteur};
+      Phi:=#1;
+      Echelle:=\useKV[VueCubes]{Echelle};
+      
+      color CouleurFleche;
+      CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+      
+      TotalObj:=0;
+      
+      Initialisation(2500,Phi+90,30,50);
+      Objetcube0("a="&decimal(Echelle));
+      
+      for m=1 upto Largeur:%3 largeur
+      for k=1 upto Profondeur:%4 profondeur
+      for l=1 upto hauteurtour[m][k]:
+      TotalObj:=incr TotalObj;
+      TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+      ObjetDeplacement[TotalObj](0);
+      endfor;
+      endfor;
+      endfor;
+      
+      if Grille:
+      undraw Projette(Ad0) for k=1 upto 3: --Projette(Ad[k]) endfor --cycle;
+      undraw Projette(Af0) for k=1 upto 3: --Projette(Af[k]) endfor --cycle;
+      undraw Projette(Adg0) for k=1 upto 3: --Projette(Adg[k]) endfor --cycle;
+      fi;
+      
+      path Fleche;
+      if FaceVue:
+      Fleche=Projette(A0)--Projette(A1)--Projette(A2)--Projette(A3)--Projette(A4)--Projette(A5)--Projette(A6)--cycle;
+      fill Fleche withcolor CouleurFleche;
+      draw Fleche;
+      fi;
+      
+      nbobj:=TotalObj;
+      DessineFusion;
+    \end{mplibcode}
+  }%
+  \fi
+}%
+
+\NewDocumentCommand\BuildVueCubesSolution{}{%
+  \ifluatex%
+  \xdef\PfCVueCubeNom{\useKV[VueCubes]{Nom}}%
+  \begin{NiceTabular}{ccc}%
+    Vue de face&Vue de dessus&Vue de gauche\\
+    {\begin{mplibcode}[\PfCVueCubeNom]
+        input PfCSolid;
+        
+        intensite:=1.5;
+        
+        Ferme[0]:=false;
+        outcolor:=\useKV[VueCubes]{CouleurCube};
+        incolor:=white;
+        nb:=1;subh:=1;
+        creux:=true;
+        
+        Profondeur:=\useKV[VueCubes]{Profondeur};
+        Largeur:=\useKV[VueCubes]{Largeur};
+        Hauteur:=\useKV[VueCubes]{Hauteur};
+        Phi:=0;
+        Echelle:=\useKV[VueCubes]{Echelle};
+
+        color CouleurFleche;
+        CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+        
+        TotalObj:=0;
+        
+        Initialisation(2500,Phi,0,50);
+        Objetcube0("a="&decimal(Echelle));
+        
+        for m=1 upto Largeur:%3 largeur
+        for k=1 upto Profondeur:%4 profondeur
+        for l=1 upto hauteurtour[m][k]:
+        TotalObj:=incr TotalObj;
+        TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+        ObjetDeplacement[TotalObj](0);
+        endfor;
+        endfor;
+        endfor;
+        
+        nbobj:=TotalObj;
+        DessineFusion;
+      \end{mplibcode}}&
+    {\begin{mplibcode}[\PfCVueCubeNom]
+    input PfCSolid;
+    
+    intensite:=1.5;
+    
+    Ferme[0]:=false;
+    outcolor:=\useKV[VueCubes]{CouleurCube};
+    incolor:=white;
+    nb:=1;subh:=1;
+    creux:=true;
+    
+    Profondeur:=\useKV[VueCubes]{Profondeur};
+    Largeur:=\useKV[VueCubes]{Largeur};
+    Hauteur:=\useKV[VueCubes]{Hauteur};
+    Phi:=0;
+    Echelle:=\useKV[VueCubes]{Echelle};
+
+    color CouleurFleche;
+    CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+    
+    TotalObj:=0;
+    
+    Initialisation(2500,Phi,90,50);
+    Objetcube0("a="&decimal(Echelle));
+    
+    for m=1 upto Largeur:%3 largeur
+    for k=1 upto Profondeur:%4 profondeur
+    for l=1 upto hauteurtour[m][k]:
+    TotalObj:=incr TotalObj;
+    TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+    ObjetDeplacement[TotalObj](0);
+    endfor;
+    endfor;
+    endfor;
+
+    nbobj:=TotalObj;
+    DessineFusion;
+  \end{mplibcode}}&{\begin{mplibcode}[\PfCVueCubeNom]
+    input PfCSolid;
+    
+    intensite:=1.5;
+    
+    Ferme[0]:=false;
+    outcolor:=\useKV[VueCubes]{CouleurCube};
+    incolor:=white;
+    nb:=1;subh:=1;
+    creux:=true;
+    
+    Profondeur:=\useKV[VueCubes]{Profondeur};
+    Largeur:=\useKV[VueCubes]{Largeur};
+    Hauteur:=\useKV[VueCubes]{Hauteur};
+    Phi:=-90;
+    Echelle:=\useKV[VueCubes]{Echelle};
+
+    color CouleurFleche;
+    CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+    
+    TotalObj:=0;
+    
+    Initialisation(2500,Phi,0,50);
+    Objetcube0("a="&decimal(Echelle));
+    
+    for m=1 upto Largeur:%3 largeur
+    for k=1 upto Profondeur:%4 profondeur
+    for l=1 upto hauteurtour[m][k]:
+    TotalObj:=incr TotalObj;
+    TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+    ObjetDeplacement[TotalObj](0);
+    endfor;
+    endfor;
+    endfor;
+
+    nbobj:=TotalObj;
+    DessineFusion;
+  \end{mplibcode}}\\
+  \end{NiceTabular}%
+  \fi%
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCVueCubes.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/profcollege/PfCYohaku.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/PfCYohaku.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/PfCYohaku.tex	2023-03-24 21:18:33 UTC (rev 66660)
@@ -0,0 +1,187 @@
+%%%
+% Yohaku
+%%%
+\setKVdefault[Yohaku]{Taille=2,Largeur=1cm,Hauteur=1cm,Addition,Multiplication=false,Perso=false,Limite=50,Relatif=false,Negatif=false,Pair=false,Impair=false,Premier=false,Solution=false,Visible=false,Bordure=false,CouleurResultat=gray!15,Ligne=0,Colonne=0,PasL=0,PasC=0,CouleurZone=gray!25}%
+\defKV[Yohaku]{Case=\setKV[Yohaku]{Visible}}%
+
+\newlength\PfCYohaku%
+
+\xdef\PfCYHKpremier{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}%
+
+\NewDocumentCommand\Yohaku{o m}{%
+  \useKVdefault[Yohaku]%
+  \setKV[Yohaku]{#1}%
+  \xdef\PfCYHKlast{\fpeval{\useKV[Yohaku]{Taille}+1}}%
+  \xdef\PfCYHKnombre{1}%
+  \xdef\PfCYHKpair{2}%
+  \xdef\PfCYHKimpair{1}%
+  \xdef\PfCYHKnegatif{}%
+  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{%
+    \xdef\PfCYHKnegatif{\PfCYHKnegatif -##1,}%
+  }%
+  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{%
+    \xdef\PfCYHKnombre{\PfCYHKnombre,##1}%
+  }%
+  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{%
+    \xdef\PfCYHKpair{\PfCYHKpair,\fpeval{##1*2}}%
+  }%
+  \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{%
+    \xdef\PfCYHKimpair{\PfCYHKimpair,\fpeval{##1*2+1}}%
+  }%
+  %
+  \ifboolKV[Yohaku]{Perso}{%
+    \setsepchar[*]{,*/}\ignoreemptyitems%
+    \readlist*\PfCYHKListe{#2}%
+    \setsepchar{,}%
+    \xdef\PfCYHKListeFoo{}%
+    \foreachitem\compteur\in\PfCYHKListe[1]{%
+      \xdef\PfCYHKListeFoo{\PfCYHKListeFoo \PfCYHKListe[1,\compteurcnt],}%
+    }%
+    \ignoreemptyitems\readlist*\PfCYHKListeNA{\PfCYHKListeFoo}%
+    \xdef\PfCYHKListeFoo{}%
+    \foreachitem\compteur\in\PfCYHKListe[2]{%
+      \xdef\PfCYHKListeFoo{\PfCYHKListeFoo \PfCYHKListe[2,\compteurcnt],}%
+    }%
+    \ignoreemptyitems\readlist*\PfCYHKListeP{\PfCYHKListeFoo}%
+  }{%
+    \ifboolKV[Yohaku]{Negatif}{%
+      \xdef\PfCYHKListe{\PfCYHKnegatif}%
+    }{%
+      \ifboolKV[Yohaku]{Premier}{%
+        \xdef\PfCYHKListe{\PfCYHKpremier}%
+      }{%
+        \ifboolKV[Yohaku]{Impair}{%
+          \xdef\PfCYHKListe{\PfCYHKimpair}%
+        }{%
+          \ifboolKV[Yohaku]{Pair}{%
+            \xdef\PfCYHKListe{\PfCYHKpair}%
+          }{%
+            \xdef\PfCYHKListe{\PfCYHKnombre}%
+          }%
+        }%
+      }%
+    }%
+    \ifboolKV[Yohaku]{Relatif}{%
+      \xdef\PfCMoitieCase{\fpeval{floor((\useKV[Yohaku]{Taille}**2)/2)}}%
+      \xdef\PfCAutreMoitieCase{\fpeval{\useKV[Yohaku]{Taille}**2-\PfCMoitieCase}}%
+      \xdef\PfCFooRelatifYohaku{}%
+      \xdef\PfCYohakuAlea{\fpeval{randint(1,2)}}%
+      \xintifboolexpr{\PfCYohakuAlea==1}{% on choisit M1 négatifs, M2 positifs
+        \MelangeListe{\PfCYHKnegatif}{\PfCMoitieCase}%
+        \xdef\PfCYohakuInter{\faa}%
+        \MelangeListe{\PfCYHKnombre}{\PfCAutreMoitieCase}%
+        \xdef\PfCYohakuInter{\PfCYohakuInter,\faa}%
+      }{% on choisit M1 positifs, M2 négatifs
+        \MelangeListe{\PfCYHKnombre}{\PfCMoitieCase}%
+        \xdef\PfCYohakuInter{\faa}%
+        \MelangeListe{\PfCYHKnegatif}{\PfCAutreMoitieCase}%
+        \xdef\PfCYohakuInter{\PfCYohakuInter,\faa}%
+      }%
+      \MelangeListe{\PfCYohakuInter}{\fpeval{\useKV[Yohaku]{Taille}**2}}%
+    }{%
+      \MelangeListe{\PfCYHKListe}{\fpeval{\useKV[Yohaku]{Taille}**2}}%
+    }%
+    \ignoreemptyitems\readlist*\PfCYHKListeNA{\faa}%
+    %Sommes/Produits
+    \xdef\PfCYHKListeProduit{}%
+    %verticaux
+    \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+      \ifboolKV[Yohaku]{Multiplication}{%
+        \xdef\PfCYHKTampon{1}%
+        \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Yohaku]{Taille}-1}}}\do{%
+          \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon*\PfCYHKListeNA[\fpeval{##2+##1*\useKV[Yohaku]{Taille}}]}}%
+        }%
+      }{%
+        \xdef\PfCYHKTampon{0}%
+        \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Yohaku]{Taille}-1}}}\do{%
+          \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon+\PfCYHKListeNA[\fpeval{##2+##1*\useKV[Yohaku]{Taille}}]}}%
+        }%
+      }%
+      \xdef\PfCYHKListeProduit{\PfCYHKListeProduit,\PfCYHKTampon}%
+    }%
+    % horizontaux
+    \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+      \ifboolKV[Yohaku]{Multiplication}{%
+        \xdef\PfCYHKTampon{1}%
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+          \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon*\PfCYHKListeNA[\fpeval{(\useKV[Yohaku]{Taille}-##2)*\useKV[Yohaku]{Taille}+##1}]}}%
+        }%
+      }{%
+        \xdef\PfCYHKTampon{0}%
+        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+          \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon+\PfCYHKListeNA[\fpeval{(\useKV[Yohaku]{Taille}-##2)*\useKV[Yohaku]{Taille}+##1}]}}%
+        }%
+      }%
+      \xdef\PfCYHKListeProduit{\PfCYHKListeProduit,\PfCYHKTampon}%
+    }%
+    \readlist*\PfCYHKListeP{\PfCYHKListeProduit}%
+  }%
+  \setlength{\PfCYohaku}{\useKV[Yohaku]{Largeur}-\tabcolsep}%
+  \colorlet{PfCFondYohaku}{\useKV[Yohaku]{CouleurResultat}}%
+  \colorlet{PfCZoneYohaku}{\useKV[Yohaku]{CouleurZone}}%
+  \begin{NiceTabular}{*{\fpeval{\useKV[Yohaku]{Taille}+1}}{m{\PfCYohaku}}}[hvlines-except-borders]
+    \CodeBefore
+    \xintifboolexpr{\useKV[Yohaku]{Ligne}==0 || \useKV[Yohaku]{Colonne}==0}{}{%
+      \tikz\draw[fill=PfCZoneYohaku](row-\fpeval{\useKV[Yohaku]{Ligne}}-|col-\fpeval{\useKV[Yohaku]{Colonne}}) rectangle (row-\fpeval{\useKV[Yohaku]{Ligne}+\useKV[Yohaku]{PasL}}-|col-\fpeval{\useKV[Yohaku]{Colonne}+\useKV[Yohaku]{PasC}});%
+    }%
+    \ifboolKV[Yohaku]{Bordure}{%
+      \tikz\fill[PfCFondYohaku] (last-|1)--(last-|last)--(1-|last)--(1-|\fpeval{\useKV[Yohaku]{Taille}+1})--(\fpeval{\useKV[Yohaku]{Taille}+1}-|\fpeval{\useKV[Yohaku]{Taille}+1})--(\fpeval{\useKV[Yohaku]{Taille}+1}-|1)--cycle;
+    }{}
+    \Body
+    \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}+1}}}\do{%
+      \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}+1}}}\do{%
+        \xintifForFirst{\rule{0pt}{\useKV[Yohaku]{Hauteur}}}{&}
+      }\\%
+    }%
+    \CodeAfter
+    \ifboolKV[Yohaku]{Bordure}{%
+      \tikz\draw (last-|1)--(last-|last)--(1-|last);
+    }{}%
+    \tikz\draw (1-|1)--(1-|last);
+    \tikz\draw (1-|1)--(last-|1);
+    \tikz\draw[line width=2pt] (1-|1)--(\fpeval{\useKV[Yohaku]{Taille}+1}-|1)--(\fpeval{\useKV[Yohaku]{Taille}+1}-|\fpeval{\useKV[Yohaku]{Taille}+1})--(1-|\fpeval{\useKV[Yohaku]{Taille}+1})--cycle;
+    \tikz\node at (\fpeval{\PfCYHKlast+0.5}-|\fpeval{\PfCYHKlast+0.5}) {\Huge\ifboolKV[Yohaku]{Multiplication}{$\times$}{$+$}};
+    % Affichage des termes/facteurs
+    \ifboolKV[Yohaku]{Solution}{%
+      \ifboolKV[Yohaku]{Perso}{%
+        \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+            \tikz\node at (\fpeval{##2+0.5}-|\fpeval{##1+0.5}) {\PfCYHKListeNA[\fpeval{(##2-1)*\useKV[Yohaku]{Taille}+##1}]};
+          }%
+        }%
+      }{%
+        \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{
+          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{
+            \tikz\node at (\fpeval{##2+0.5}-|\fpeval{##1+0.5}) {\num{\PfCYHKListeNA[\fpeval{(##2-1)*\useKV[Yohaku]{Taille}+##1}]}};
+          }%
+        }%
+      }%
+    }{}%
+    % Affichage d'un terme/facteur
+    \ifboolKV[Yohaku]{Visible}{%
+      \xdef\PfCYohakuCaseAFL{\fpeval{floor((\useKV[Yohaku]{Case}-1)/\useKV[Yohaku]{Taille})}}%
+      \xdef\PfCYohakuCaseAFC{\fpeval{\useKV[Yohaku]{Case}-\useKV[Yohaku]{Taille}*\PfCYohakuCaseAFL}}%
+      \ifboolKV[Yohaku]{Perso}{%
+        \tikz\node at (\fpeval{\PfCYohakuCaseAFL+1+0.5}-|\fpeval{\PfCYohakuCaseAFC+0.5}) {\PfCYHKListeNA[\fpeval{\useKV[Yohaku]{Case}}]};
+      }{%
+        \tikz\node at (\fpeval{\PfCYohakuCaseAFL+1+0.5}-|\fpeval{\PfCYohakuCaseAFC+0.5}) {\num{\PfCYHKListeNA[\fpeval{\useKV[Yohaku]{Case}}]}};
+      }%
+    }{}%
+    %% Affichage des sommes/produits horizontalement
+    \ifboolKV[Yohaku]{Perso}{%
+      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+        \tikz\node at (\fpeval{\PfCYHKlast+0.5}-|\fpeval{##2+0.5}) {\PfCYHKListeP[##2]};
+      }%
+      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+        \tikz\node at (\fpeval{\useKV[Yohaku]{Taille}+1-##2+0.5}-|\fpeval{\PfCYHKlast+0.5}) {\PfCYHKListeP[\fpeval{\useKV[Yohaku]{Taille}+##2}]};
+      }%
+    }{%
+      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+        \tikz\node at (\fpeval{\PfCYHKlast+0.5}-|\fpeval{##2+0.5}) {\num{\PfCYHKListeP[##2]}};
+      }%
+      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{%
+        \tikz\node at (\fpeval{\useKV[Yohaku]{Taille}+1-##2+0.5}-|\fpeval{\PfCYHKlast+0.5}) {\num{\PfCYHKListeP[\fpeval{\useKV[Yohaku]{Taille}+##2}]}};
+      }%
+    }%
+  \end{NiceTabular}
+}%
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/profcollege/PfCYohaku.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2023-03-24 21:17:27 UTC (rev 66659)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2023-03-24 21:18:33 UTC (rev 66660)
@@ -2,30 +2,28 @@
 % licence    : Released under the LaTeX Project Public License v1.3c
 % or later, see http://www.latex-project.org/lppl.txtf
 \NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2023/03/06}%
+\def\filedate{2023/03/24}%
 \let\PfCfiledate\filedate%
-\def\fileversion{0.99-z-f}%
+\def\fileversion{0.99-z-g}%
 \let\PfCfileversion\fileversion%
-\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]
+\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
 
-\RequirePackage{verbatim}
+\RequirePackage{verbatim}%
 
-\RequirePackage{mathtools}
+\RequirePackage{mathtools}%
 
-\newif\if at shellescape \@shellescapetrue
-\newif\if at amssymb \@amssymbtrue
-\DeclareOption{nonshellescape}{\@shellescapefalse}
-\DeclareOption{nonamssymb}{\@amssymbfalse}
-\ProcessOptions\relax
+\newif\if at shellescape \@shellescapetrue%
+\newif\if at amssymb \@amssymbtrue%
+\DeclareOption{nonshellescape}{\@shellescapefalse}%
+\DeclareOption{nonamssymb}{\@amssymbfalse}%
+\ProcessOptions\relax%
 
-%\ProcessOptions\relax
+\if at amssymb%
+\RequirePackage{amssymb}%
+\fi%
 
-\if at amssymb
-\RequirePackage{amssymb}
-\fi
-
 % mathématiques
-\RequirePackage{siunitx}
+\RequirePackage{siunitx}%
 \sisetup{%
   locale=FR,%
   mode = match, propagate-math-font = true,%
@@ -35,97 +33,98 @@
   output-decimal-marker={,},%
   group-minimum-digits=4%
 }%
-\DeclareSIUnit{\kmh}{\km\per\hour}
-\newcommand\speed[1]{\SI{#1}{\kmh}}
-\newcommand\Speed[1]{\SI[per-mode=symbol]{#1}{\kmh}}
+\DeclareSIUnit{\kmh}{\km\per\hour}%
+\newcommand\speed[1]{\SI{#1}{\kmh}}%
+\newcommand\Speed[1]{\SI[per-mode=symbol]{#1}{\kmh}}%
 
-\DeclareSIUnit{\are}{a}
-\DeclareSIUnit{\annee}{an}
-\DeclareSIUnit{\mois}{mois}
-\DeclareSIUnit{\jour}{j}
-\DeclareSIUnit{\quintal}{q}
-\DeclareSIUnit{\octet}{o}
-\DeclareSIUnit{\fahrenheit}{\text{\textdegree}F}
-\DeclareSIUnit{\EuRo}{€}
+\DeclareSIUnit{\are}{a}%
+\DeclareSIUnit{\annee}{an}%
+\DeclareSIUnit{\mois}{mois}%
+\DeclareSIUnit{\jour}{j}%
+\DeclareSIUnit{\quintal}{q}%
+\DeclareSIUnit{\octet}{o}%
+\DeclareSIUnit{\fahrenheit}{\text{\textdegree}F}%
+\DeclareSIUnit{\EuRo}{€}%
 
 \RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
 \RequirePackage{xstring}%Gestion de chaines de caractères
 \RequirePackage{simplekv}%Gestion de paramètres sous forme de clés
-\RequirePackage{ifthen}
+\RequirePackage{ifthen}%
 \RequirePackage{modulus}%Pour certains calculs arithmétiques.
 \RequirePackage{xinttools}%Pour la création dynamique d'un tableau
 
-\RequirePackage{iftex}
+\RequirePackage{iftex}%
 
-\ifluatex
-\RequirePackage{luacas}
-\RequirePackage{luamplib}
-\everymplib{input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur; beginfig(1);}
-\everyendmplib{endfig;}
-\else
-\if at shellescape
+\ifluatex%
+\RequirePackage{luacas}%
+\RequirePackage{luamplib}%
+\everymplib{input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur; beginfig(1);}%
+\everyendmplib{endfig;}%
+\else%
+\if at shellescape%
 \RequirePackage[shellescape,latex]{gmp}%inclusion de figures metapost "à la volée"%
-\gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}}
-\usempxclass{article}
-\usempxpackage{ProfCollege}
-%\usempxpackage[locale=FR,mode = match, propagate-math-font = true,reset-math-version = false, reset-text-family = false,reset-text-series = false, reset-text-shape = false,text-family-to-math = true, text-series-to-math = true, output-decimal-marker={,},group-minimum-digits=4]{siunitx}
-\usempxpackage[utf8]{inputenc}
-\usempxpackage[T1]{fontenc}
-\usempxpackage{fourier}
-\usempxpackage[french]{babel}
-\usempxpackage{pifont}
-\else
+\gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}}%
+\usempxclass{article}%
+\usempxpackage{ProfCollege}%
+\usempxpackage[utf8]{inputenc}%
+\usempxpackage[T1]{fontenc}%
+\usempxpackage{fourier}%
+\usempxpackage[french]{babel}%
+\usempxpackage{pifont}%
+\else%
 \RequirePackage[latex]{gmp}%inclusion de figures metapost "à la volée"%
-\gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}}
-\usempxclass{article}
-\usempxpackage{ProfCollege}
-%\usempxpackage[locale=FR,mode = match, propagate-math-font = true,reset-math-version = false, reset-text-family = false,reset-text-series = false, reset-text-shape = false,text-family-to-math = true, text-series-to-math = true, output-decimal-marker={,},group-minimum-digits=4]{siunitx}
-\usempxpackage[utf8]{inputenc}
-\usempxpackage[T1]{fontenc}
-\usempxpackage{fourier}
-\usempxpackage[french]{babel}
-\usempxpackage{pifont}
-\fi
-\fi
+\gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}}%
+\usempxclass{article}%
+\usempxpackage{ProfCollege}%
+\usempxpackage[utf8]{inputenc}%
+\usempxpackage[T1]{fontenc}%
+\usempxpackage{fourier}%
+\usempxpackage[french]{babel}%
+\usempxpackage{pifont}%
+\fi%
+\fi%
 
-\RequirePackage{xintexpr}
-\RequirePackage{listofitems}
-\RequirePackage{datatool}
-\RequirePackage{multido}
+\RequirePackage{xintexpr}%
+\RequirePackage{listofitems}%
+\RequirePackage{datatool}%
+\RequirePackage{multido}%
 
-\RequirePackage{xlop}
-\RequirePackage{xfp}
+\RequirePackage{xlop}%
+\RequirePackage{xfp}%
 
-\RequirePackage[most]{tcolorbox}
+\RequirePackage[most]{tcolorbox}%
 
-\RequirePackage{tikz}
+\RequirePackage{tikz}%
 % https://tex.stackexchange.com/questions/349259/curved-arrow-describing-a-step-in-a-equation-derivation
 %https://tex.stackexchange.com/questions/58656/best-way-to-draw-a-chevron-diagram-using-tikz
-\usetikzlibrary{calc,shapes,arrows,tikzmark,chains,positioning,shapes.symbols,babel,fit}
-\usetikzlibrary{backgrounds}
+\usetikzlibrary{calc,shapes,arrows,tikzmark,chains,positioning,shapes.symbols,babel,fit}%
+\usetikzlibrary{backgrounds}%
 
 \RequirePackage{suffix}%pour la commande étoilée
 
-\RequirePackage{multicol}
+\RequirePackage{multicol}%
 
-\RequirePackage{hhline}
+\RequirePackage{hhline}%
 
-\RequirePackage{stackengine}
-\RequirePackage[thicklines]{cancel}
+\RequirePackage{stackengine}%
+\RequirePackage[thicklines]{cancel}%
 
 \RequirePackage{fontawesome5}%Pour l'environnement Twitter
 \RequirePackage{pifont}%Pour la commande \Autonomie
 \RequirePackage{nicematrix}%
-\NiceMatrixOptions{allow-duplicate-names}
+\NiceMatrixOptions{allow-duplicate-names}%
 
-\let\myoldmulticolumn\multicolumn
-\AtBeginEnvironment{tabular}{\let\multicolumn\myoldmulticolumn}
+\let\myoldmulticolumn\multicolumn%
+\AtBeginEnvironment{tabular}{\let\multicolumn\myoldmulticolumn}%
 
-\RequirePackage{fmtcount}
-\FCloadlang{french}
+\RequirePackage{multirow}%
+\RequirePackage{longtable}
 
+\RequirePackage{fmtcount}%
+\FCloadlang{french}%
+
 % https://stackoverflow.com/questions/3391103/how-to-make-the-grayed-round-box-using-tiks
-\RequirePackage{environ}
+\RequirePackage{environ}%
 
 %%%%% Quelques besoins particuliers
 
@@ -133,55 +132,55 @@
 
 %% Colorer en mode mathématique. \color ne gère pas les espaces propres au mode mathématique. Donc besoin de changer
 % https://tex.stackexchange.com/questions/21598/how-to-color-math-symbols
-\makeatletter
-\def\mathcolor#1#{\@mathcolor{#1}}
+\makeatletter%
+\def\mathcolor#1#{\@mathcolor{#1}}%
 \def\@mathcolor#1#2#3{%
-  \protect\leavevmode
-  \begingroup
+  \protect\leavevmode%
+  \begingroup%
     \color#1{#2}#3%
-  \endgroup
-}
-\makeatother
+  \endgroup%
+}%
+\makeatother%
 
 % Pb ProfCollege<->Chinois soulev\'e par Denis
 % Solution by egreg :)
 \newcommand\getstrut[1]{%
   \the\expandafter#1\expanded{\strutbox}%
-}
+}%
 
 % Colorer uniquement la barre de soulignement
 % https://tex.stackexchange.com/questions/9466/color-underline-a-formula/153884
-\def\mathunderline#1#2{\color{#1}\underline{{\color{black}#2}}\color{black}}
+\def\mathunderline#1#2{\color{#1}\underline{{\color{black}#2}}\color{black}}%
 
 % Ecrire des lignes d'équations
-\catcode`\@=11
-\def\Eqalign#1{\null\,\vcenter{\openup\jot\m at th\ialign{
-      \strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
-      &&\quad\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$
-      \hfil\crcr #1\crcr}}\,}
-\catcode`\@=12
+\catcode`\@=11%
+\def\Eqalign#1{\null\,\vcenter{\openup\jot\m at th\ialign{%
+      \strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil%
+      &&\quad\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$%
+      \hfil\crcr #1\crcr}}\,}%
+\catcode`\@=12%
 
 %%%
 % Commandes "utiles"
 %%%
 %encadrer avec des "sommets arrondis"
-\newsavebox{\logobox}
+\newsavebox{\logobox}%
 
 \newcommand\Logo[2]{%
-\setbox1=\hbox{\includegraphics[scale=#2]{#1}}
+\setbox1=\hbox{\includegraphics[scale=#2]{#1}}%
 \begin{tikzpicture}%
-\clip[rounded corners=5mm] (0,0) rectangle (\wd1,\ht1);
+\clip[rounded corners=5mm] (0,0) rectangle (\wd1,\ht1);%
 \node[xshift=0.5\wd1, yshift=0.5\ht1, inner xsep=0pt, inner ysep=0pt] (box) {%
 \includegraphics[scale=#2]{#1}%
 };%
 \end{tikzpicture}%
-}
+}%
 
 \newcommand\LogoTW[2]{%
 \setbox1=\hbox{\includegraphics[scale=#2]{#1}}%
 \begin{tikzpicture}%
-  \clip (0,0) circle (4mm);
-  \draw (0,0) circle (4mm);
+  \clip (0,0) circle (4mm);%
+  \draw (0,0) circle (4mm);%
   \node[xshift=0mm, yshift=0mm, inner xsep=0pt, inner ysep=0pt] (0,0) {%
     \includegraphics[scale=#2]{#1}%
   };%
@@ -194,7 +193,7 @@
 \cleaders\hb at xt@.44em{\hss\xleaders\hrule width0.33em\hss}\hfill%
 \kern\z@}%
 
-\NewDocumentCommand\PfCdotover{}{\leavevmode\cleaders\hb at xt@ .22em{\hss $\cdot$\hss}\hfill\kern\z@}
+\NewDocumentCommand\PfCdotover{}{\leavevmode\cleaders\hb at xt@ .22em{\hss $\cdot$\hss}\hfill\kern\z@}%
 
 \makeatother%
 
@@ -212,9 +211,9 @@
 
 %https://tex.stackexchange.com/questions/128991/frac-or-inference-rule-with-dotted-line
 \newcommand\PfCfrac[2]{%
-\ooalign{$\genfrac{}{}{0pt}{0}{#1}{#2}$\cr\PfCdotover\cr}
+\ooalign{$\genfrac{}{}{0pt}{0}{#1}{#2}$\cr\PfCdotover\cr}%
 }%
-\makeatother
+\makeatother%
 
 \newcommand\MultiCol[2]{%
   \setsepchar[*]{/}%
@@ -222,14 +221,14 @@
   \setsepchar[*]{§}%
   \readlist*\ListeContenuCol{#2}%
   \xintFor* ##1 in {\xintSeq {1}{\ListeNombreCollen}}\do{%
-    \begin{minipage}{\ListeNombreCol[##1]\linewidth}
-      \ListeContenuCol[##1]
+    \begin{minipage}{\ListeNombreCol[##1]\linewidth}%
+      \ListeContenuCol[##1]%
     \end{minipage}%
     \xintifboolexpr{##1<\ListeNombreCollen}{\hfill}{}%
   }%
 }%
 
-\newcount\PfCrappeljour
+\newcount\PfCrappeljour%
 
 \newcommand\Demain{%
   \PfCrappeljour=\day\relax%
@@ -357,7090 +356,34 @@
   \day=\the\PfCrappeljour\relax%
 }
 
-%%%
-% Kakurasu
-%%%
-\setKVdefault[Kakurasu]{Solution=false,Longueur=6,Largeur=6,Echelle=8mm,Graines=false,Trace=false}
-\defKV[Kakurasu]{Graine=\setKV[Kakurasu]{Graines}}
-\defKV[Kakurasu]{Traces=\setKV[Kakurasu]{Trace}}
-
-\NewDocumentCommand\Kakurasu{o}{%
-  \useKVdefault[Kakurasu]%
-  \setKVdefault[Kakurasu]{#1}%
-  \BuildKakurasu%
-}
-
-\NewDocumentCommand\BuildKakurasu{}{%
-  \ifluatex
-  \mplibforcehmode
-  \begin{mplibcode}
-    boolean Graines,Solution,Trace;
-    Graines=\useKV[Kakurasu]{Graines};
-    Solution=\useKV[Kakurasu]{Solution};
-    Trace=\useKV[Kakurasu]{Trace};
-    
-    if Graines:
-    randomseed:=\useKV[Kakurasu]{Graine};
-    fi;
-    
-    numeric Longueur,Largeur;
-    Longueur=\useKV[Kakurasu]{Longueur};
-    Largeur=\useKV[Kakurasu]{Largeur};
-    
-    u:=\useKV[Kakurasu]{Echelle};
-    
-    pair A[][];%centre des carrés.
-    boolean Allume[][];
-    numeric NombreLigne[][],NombreColonne[][];
-    
-    for k=-1 upto Largeur+1:
-    for l=-1 upto Longueur+1:
-    Allume[k][l]=false;
-    endfor;
-    endfor;
-    
-    for k=0 upto Largeur-1:
-    for l=0 upto Longueur-1:
-    A[k][l]=u*(l,-k);
-    trace (unitsquare scaled u) shifted A[k][l];
-    endfor;
-    endfor;
-
-    for k=0 upto Largeur-1:
-    for l=0 upto Longueur-1:
-    if Allume[k][l]:
-    else:
-    Allume[k][l]:=true;
-    m:=uniformdeviate(1);
-    if m<0.5:
-    % on ne met pas de case noire
-    else:
-    % on met une case noire
-    NombreLigne[k][l]=l+1;
-    NombreColonne[k][l]=k+1;
-    if Solution:
-    fill (unitsquare scaled 0.9u) shifted (A[k][l]+0.05*u*(1,1));
-    fi;
-    fi;
-    fi;
-    endfor;
-    endfor;
-    
-    % on compte le nombre de chiffres dans les lignes et on les ajoute
-    for k=0 upto Largeur-1:
-    Somme:=0;
-    for l=0 upto Longueur-1:
-    if unknown NombreLigne[k][l]:
-    else:
-    Somme:=Somme+NombreLigne[k][l];
-    fi;
-    endfor;
-    label(TEX(decimal(Somme)),u*(-0.5,-k+0.5));
-    endfor;
-
-    % on compte le nombre de chiffres dans les colonnes et on les ajoute
-    for k=0 upto Longueur-1:
-    Somme:=0;
-    for l=0 upto Largeur-1:
-    if unknown NombreColonne[l][k]:
-    else:
-    Somme:=Somme+NombreColonne[l][k];
-    fi;
-    endfor;
-    label(TEX(decimal(Somme)),u*(k+0.5,1.5));
-    endfor;
-
-    % On affiche les valeurs des cases noires.
-    drawoptions(withcolor 0.5white);
-    for k=0 upto Longueur-1:
-    label(TEX("\footnotesize"&decimal(k+1)),u*(k+0.5,-Largeur+0.5));
-    endfor;
-    for k=0 upto Largeur-1:
-    label(TEX("\footnotesize"&decimal(k+1)),u*(Longueur+0.5,-k+0.5));
-    endfor;
-    drawoptions();
-    if Trace:
-    \useKV[Kakurasu]{Traces};
-    fi;
-  \end{mplibcode}
- \fi
-}%
-
-%%%
-% Midpoint
-%%%
-\setKVdefault[MidPoint]{Solution=false,Graines=false,Hard=false}
-\defKV[MidPoint]{Graine=\setKV[MidPoint]{Graines}}
-
-\NewDocumentCommand\MidPoint{o}{%
-  \useKVdefault[MidPoint]%
-  \setKV[MidPoint]{#1}%
-  \BuildMidPoint
-}
-
-\NewDocumentCommand\BuildMidPoint{}{%
-  \ifluatex
-  \mplibforcehmode
-  \begin{mplibcode}
-    numeric Longueur,Largeur;
-    Longueur=8;
-    Largeur=4;
-    boolean Horizontal,Vertical,RetiensSens;
-    Horizontal=false;
-    Vertical=false;
-    
-    boolean Solution,Hard,Graines;
-    Solution:=\useKV[MidPoint]{Solution};
-    Hard:=\useKV[MidPoint]{Hard};
-    Graines:=\useKV[MidPoint]{Graines};
-    if Graines:
-    randomseed:=\useKV[MidPoint]{Graine}
-    fi;
-  
-  u:=8mm;
-  
-  pair A[][];%centre des carrés.
-
-  vardef CherchePoint(expr basek,basel)=
-      % Si le déplacement précédent est horizontal, il faut passer en vertical
-      % Si le déplacement précédent est vertical, il faut passer en horizontal
-    p:=p+1;
-    if basel=ColonneArrivee:
-      RP[p]:=Arrivee;
-    else:
-      if Vertical:
-    %deplacement horizontal
-	ecart:=ColonneArrivee-basel;
-	if ecart=1:
-	  Basel:=ColonneArrivee;
-	  RP[p]:=A[basek][ColonneArrivee];
-	else:
-	  Basel:=ceiling(basel+uniformdeviate(ecart));
-	  RP[p]:=A[basek][Basel];
-	fi;
-	Basek:=basek;
-	Horizontal:=true;
-	Vertical:=false;
-      else:
-	%on vérifie qu'on peut se déplacer dans les deux sens.
-    % on choisit vertical positif ou vertical négatif
-	if basek=1:
-	  choix:=0.75;
-	elseif basek=Largeur:
-	  choix:=0.25;
-	else:
-	  choix:=uniformdeviate(1);
-	fi;
-	if choix<0.5:
-	  ecart:=basek-1;
-	  if ecart=1:
-	    Basek:=1;
-	    RP[p]:=A[1][basel];
-	  else:
-	    Basek:=ceiling(uniformdeviate(ecart));
-	    RP[p]:=A[Basek][basel];
-	  fi;
-	  Basel:=basel;
-	else:
-	  ecart:=Largeur-basek;
-	  if ecart=1:
-	    Basek:=Largeur;
-	    RP[p]:=A[Largeur][basel];
-	  else:
-	    Basek:=basek+ceiling(uniformdeviate(ecart));
-	    RP[p]:=A[Basek][basel];
-	fi;
-	Basel:=basel;
-      fi;
-      Horizontal:=false;
-      Vertical:=true;
-    fi;
-  fi;
-enddef;
-
-vardef MidPoint(expr Aa,Bb)=
-  save $;
-  picture $;
-  $=image(
-      if Solution:
-      trace Aa--Bb withpen pencircle scaled 1.5;
-    fi;
-    if Hard:
-      NbMid:=NbMid+1;
-      if NbMid mod 2=0:
-	remplis cercles(1/2[Aa,Bb],1mm);
-      fi;
-    else:
-      remplis cercles(1/2[Aa,Bb],1mm);
-    fi;
-    );
-  $
-enddef;
-  
-  % tracé de la grille
-  for k=1 upto 2*Largeur:
-    for l=-3 upto Largeur+Longueur-4:
-      trace (unitsquare scaled u) shifted (u*(l,-k)-center (unitsquare scaled u)) withcolor 0.5*white;
-    endfor;
-  endfor;
-  
-  for k=1 upto Largeur:
-    for l=1 upto Longueur:
-      A[k][l]=u*(l,-k);
-      %trace (unitsquare scaled u) shifted (A[k][l]-center (unitsquare scaled u)) withcolor 0.5*white;
-    endfor;
-  endfor;
-  
-%On choisit le premier déplacement
-  choix:=uniformdeviate(1);
-  if choix<0.5:
-    Horizontal:=true;
-  else:
-    Vertical:=true;
-  fi;
-  
-  p:=0;
-  NbMid=ceiling(uniformdeviate(2));%Pour le niveau Hard
-
-  %1er rectangle
-LigneDepart:=2;%2;
-ColonneDepart:=1;
-LigneArrivee:=4;%4;
-ColonneArrivee:=8;
-pair Depart,Arrivee;
-Depart=A[LigneDepart][ColonneDepart];
-Arrivee=A[LigneArrivee][ColonneArrivee];
-
-pair RP[];%RetiensPoints
-RP[0]=Depart;
-  
-Basek:=LigneDepart;
-Basel:=ColonneDepart;
-forever:
-  CherchePoint(Basek,Basel);
-  exitif RP[p]=Arrivee;
-endfor;
-
-if ypart(RP[p])=ypart(RP[p-1]):
-  RetiensSens:=true;
-else:
-  RetiensSens:=false;
-  p:=p-1;
-fi;
-
-%2eme rectangle
-for k=1 upto Largeur:
-  for l=1 upto Longueur:
-    A[k][l]:=u*(Longueur+l,-k);
-  endfor;
-endfor;
-
-LigneDepart:=4;
-ColonneDepart:=1;
-LigneArrivee:=2;
-ColonneArrivee:=8;
-Depart:=A[LigneDepart][ColonneDepart];
-Arrivee:=A[LigneArrivee][ColonneArrivee];
-
-Basek:=LigneDepart;
-Basel:=ColonneDepart;
-Retiens:=p;
-RP[p+1]:=Depart;
-
-forever:
-  CherchePoint(Basek,Basel);
-  exitif RP[p]=Arrivee;
-endfor;
-
-if ypart(RP[p])=ypart(RP[p-1]):
-  RetiensSens:=true;
-    p:=p-1;
-else:
-  RetiensSens:=false;
-fi;
-
-for h=(Retiens+1) upto p:
-  RP[h]:=symetrie(RP[h],u*(Longueur+0.5,-Largeur-0.5));
-endfor;
-%3eme Rectangle
-for k=1 upto Largeur:
-  for l=1 upto Longueur:
-    A[k][l]:=u*(2*Longueur+l,-k);
-  endfor;
-endfor;
-
-LigneDepart:=4;
-ColonneDepart:=2;
-LigneArrivee:=1;
-ColonneArrivee:=4;
-Depart:=A[LigneDepart][ColonneDepart];
-Arrivee:=A[LigneArrivee][ColonneArrivee];
-
-
-Basek:=LigneDepart;
-Basel:=ColonneDepart;
-Retiens:=p;
-RP[p+1]:=Depart;
-forever:
-  CherchePoint(Basek,Basel);
-  exitif RP[p]=Arrivee;
-endfor;
-for h=(Retiens+1) upto p:
-  RP[h]:=rotation(RP[h],u*(2*Longueur+0.5,-Largeur-0.5),90) shifted(u*(-2*Longueur,-Largeur));
-endfor;
-%4eme rectangle. On termine la boucle ?
-for k=1 upto Largeur:
-  for l=1 upto Longueur:
-    A[k][l]:=u*(3*Longueur+l,-k);
-  endfor;
-endfor;
-
-LigneDepart:=4;
-ColonneDepart:=1;
-LigneArrivee:=2;
-ColonneArrivee:=4;
-Depart:=A[LigneDepart][ColonneDepart];
-Arrivee:=A[LigneArrivee][ColonneArrivee];
-
-Basek:=LigneDepart;
-Basel:=ColonneDepart;
-Retiens:=p;
-RP[p+1]:=Depart;
-forever:
-  CherchePoint(Basek,Basel);
-  exitif RP[p]=Arrivee;
-endfor;
-
-if ypart(RP[p])=ypart(RP[p-1]):
-  p:=p-1;
-fi;
-
-if ypart(RP[0])=ypart(RP[1]):
-  RetiensSens:=true;
-else:
-  RetiensSens:=false;
-fi;
-
-for h=(Retiens+1) upto p:
-  RP[h]:=RP[h] shifted(u*(-3.5*Longueur,0));
-endfor;
-
-if RetiensSens:
-  RP[p+1]:=RP[1];
-  go:=1;
-else:
-  RP[p+1]:=RP[0];
-  go:=0;
-fi;
-
-for h=go upto p:
-  draw MidPoint(RP[h],RP[h+1]);
-endfor;
-\end{mplibcode}
-\fi
-}
-
-%%%
-% Grades
-%%%
-\setKVdefault[Grades]{Solution=false,Longueur=9,Largeur=9,Echelle=8mm,Graines=false}
-\defKV[Grades]{Graine=\setKV[Grades]{Graines}}
-
-\NewDocumentCommand\Grades{o}{%
-  \useKVdefault[Grades]%
-  \setKVdefault[Grades]{#1}%
-  \BuildGrades%
-}
-
-\NewDocumentCommand\BuildGrades{}{%
-  \ifluatex
-  \mplibforcehmode
-  \begin{mplibcode}
-    boolean Graines,Solution;
-    Graines=\useKV[Grades]{Graines};
-    Solution=\useKV[Grades]{Solution};
-    
-    if Graines:
-    randomseed:=\useKV[Grades]{Graine};
-    fi;
-    
-    numeric Longueur,Largeur;
-    Longueur=\useKV[Grades]{Longueur};
-    Largeur=\useKV[Grades]{Largeur};
-    
-    u:=\useKV[Grades]{Echelle};
-    
-    p:=0;
-    pair A[];%centre des carrés.
-    boolean Allume[][];
-    numeric Nombre[][];
-    
-    for k=-1 upto Largeur+1:
-    for l=-1 upto Longueur+1:
-    Allume[k][l]=false;
-    endfor;
-    endfor;
-    
-    for k=0 upto Longueur-1:
-    for l=0 upto Largeur-1:
-    p:=p+1;
-    A[p]=u*(k,-l);
-    trace (unitsquare scaled u) shifted A[p];
-    endfor;
-    endfor;
-
-    for k=0 upto Largeur-1:
-    for l=0 upto Longueur-1:
-    if Allume[k][l]:
-    else:
-    Allume[k][l]:=true;
-    m:=uniformdeviate(1);
-    if m<0.5:
-    % on ne met pas de nombre
-    else:
-    % on met un nombre
-    Nombre[k][l]=floor(1+uniformdeviate(9));
-    Allume[k][l+1]:=true;
-    Allume[k+1][l-1]:=true;
-    Allume[k+1][l]:=true;
-    Allume[k+1][l+1]:=true;
-    if Solution:
-    label(TEX(decimal(Nombre[k][l])),u*(l+0.5,-k+0.5));
-    fi;
-    fi;
-    fi;
-    endfor;
-    endfor;
-
-    % on compte le nombre de chiffres dans les lignes et on les ajoute
-    for k=0 upto Largeur-1:
-    p:=0;
-    Somme:=0;
-    for l=0 upto Longueur-1:
-    if unknown Nombre[k][l]:
-    else:
-    p:=p+1;
-    Somme:=Somme+Nombre[k][l];
-    fi;
-    endfor;
-    label(TEX(decimal(p)),u*(-0.5,-k+0.5));
-    label(TEX(decimal(Somme)),u*(Longueur+0.5,-k+0.5));
-    endfor;
-
-    % on compte le nombre de chiffres dans les colonnes et on les ajoute
-    for k=0 upto Longueur-1:
-    p:=0;
-    Somme:=0;
-    for l=0 upto Largeur-1:
-    if unknown Nombre[l][k]:
-    else:
-    p:=p+1;
-    Somme:=Somme+Nombre[l][k];
-    fi;
-    endfor;
-    label(TEX(decimal(p)),u*(k+0.5,1.5));
-    label(TEX(decimal(Somme)),u*(k+0.5,-Largeur+0.5));
-    endfor;
-  \end{mplibcode}
- \fi
-}%
-
-%%%
-% Squaro
-%%%
-\setKVdefault[Squaro]{Solution=false,Longueur=8,Largeur=8,Echelle=8mm,Nom=Jeu1,Graines=false}
-\defKV[Squaro]{Graine=\setKV[Squaro]{Graines}}%
-
-\NewDocumentCommand\SquarO{o}{%
-  \useKVdefault[Squaro]%
-  \setKVdefault[Squaro]{#1}%
-  \ifboolKV[Squaro]{Solution}{\BuildSquaroSolution}{\BuildSquaro}%
-}
-
-\NewDocumentCommand\BuildSquaro{}{%
-  \ifluatex
-    \mplibforcehmode
-  \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}%
-  \begin{mplibcode}[\PfCSquaroNom]
-    numeric Longueur,Largeur;
-    Longueur=\useKV[Squaro]{Longueur};
-    Largeur=\useKV[Squaro]{Largeur};
-    boolean Solution,Graines;
-    Solution=\useKV[Squaro]{Solution};
-    Graines:=\useKV[Squaro]{Graines};
-    if Graines:
-    randomseed:=\useKV[Squaro]{Graine};
-    fi;
-    
-    u:=\useKV[Squaro]{Echelle};
-    
-    p:=0;
-    pair A[];%centre des carrés.
-    boolean Allume[][];
-    
-    for k=0 upto Longueur-1:
-    for l=0 upto Largeur-1:
-    p:=p+1;
-    A[p]=u*(k,-l);
-    trace (unitsquare scaled u) shifted A[p];
-    endfor;
-    endfor;
-
-    for k=0 upto Largeur:
-    for l=0 upto Longueur:
-    m:=uniformdeviate(1);
-    if m<0.5:
-    Allume[k][l]=true;
-    fill cercles(u*(l,-k+1),1mm) if Solution=false:withcolor white fi;
-    else:
-    Allume[k][l]=false;
-    fill cercles(u*(l,-k+1),1mm) withcolor white;
-    fi;
-    trace cercles(u*(l,-k+1),1mm);
-    endfor;
-    endfor;
-
-    for k=0 upto Largeur-1:
-    for l=0 upto Longueur-1:
-    Retiens:=0;
-    if Allume[k][l]:Retiens:=Retiens+1 fi;
-    if Allume[k][l+1]:Retiens:=Retiens+1 fi;
-    if Allume[k+1][l]:Retiens:=Retiens+1 fi;
-    if Allume[k+1][l+1]:Retiens:=Retiens+1 fi;
-    label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5));
-    endfor;
-    endfor;
- \end{mplibcode}
- \fi
-}
-
-\NewDocumentCommand\BuildSquaroSolution{}{%
-  \ifluatex
-  \mplibforcehmode
-  \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}%
-  \begin{mplibcode}[\PfCSquaroNom]
-    u:=\useKV[Squaro]{Echelle};
-    p:=0;
-    for k=0 upto Longueur-1:
-    for l=0 upto Largeur-1:
-    p:=p+1;
-    trace (unitsquare scaled u) shifted A[p];
-    endfor;
-    endfor;
-
-    for k=0 upto Largeur:
-    for l=0 upto Longueur:
-    if Allume[k][l]=true:
-    fill cercles(u*(l,-k+1),1mm);
-    else:
-    fill cercles(u*(l,-k+1),1mm) withcolor white;
-    fi;
-    trace cercles(u*(l,-k+1),1mm);
-    endfor;
-    endfor;
-
-    for k=0 upto Largeur-1:
-    for l=0 upto Longueur-1:
-    Retiens:=0;
-    if Allume[k][l]:Retiens:=Retiens+1 fi;
-    if Allume[k][l+1]:Retiens:=Retiens+1 fi;
-    if Allume[k+1][l]:Retiens:=Retiens+1 fi;
-    if Allume[k+1][l+1]:Retiens:=Retiens+1 fi;
-    label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5));
-    endfor;
-    endfor;
- \end{mplibcode}
- \fi
-}
-
-%%%
-% Garam
-%%%
-\setKVdefault[Garam]{Taille=7,Largeur=15pt,Solution=false,CouleurSolution=Black}
-\newlength\PfCGaramHeight
-
-\NewDocumentCommand\Garam{o m}{%
-  \useKVdefault[Garam]
-  \setKV[Garam]{#1}%
-  \setlength{\PfCGaramHeight}{\useKV[Garam]{Largeur}+\tabcolsep}%
-  \reademptyitems%
-  \setsepchar[*]{§*,*/}%
-  \readlist*\PfCListeGaram{#2}%
-  \colorlet{PfCGaramCoulSol}{\useKV[Garam]{CouleurSolution}}%
-  \begin{NiceTabular}{*{\useKV[Garam]{Taille}}{m{\useKV[Garam]{Largeur}}}}
-    \CodeBefore
-    \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Garam]{Taille}}}}\do{%
-      \tikz{\draw[dashed,LightGray] (1-|##1)--(last-|##1);}%
-    }%
-    \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCListeGaramlen-1}}}\do{%
-      \tikz{\draw[dashed,LightGray] (##1-|1)--(##1-|last);}%
-    }%
-    \tikz{\draw (1-|1) rectangle (last-|last);}%
-    \Body
-    \xintFor* ##1 in{\xintSeq{1}{\PfCListeGaramlen}}\do{%
-      \rule{0pt}{\PfCGaramHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Garam]{Taille}}}\do{%
-        \xintifForFirst{}{&}\StrChar{\PfCListeGaram[##1,##2,1]}{1}[\PfCCaracGaram]%
-        \IfStrEq{\PfCCaracGaram}{*}{\Block[draw,fill=black]{1-1}{}}{%
-          \IfStrEq{\PfCCaracGaram}{!}{\Block{}{\ifboolKV[Garam]{Solution}{\StrGobbleLeft{\PfCListeGaram[##1,##2,1]}{1}}{}}}{\Block{}{\color{PfCGaramCoulSol}\PfCListeGaram[##1,##2,1]}}%
-        }%
-      }\\
-    }%
-    \CodeAfter
-    % On place les symboles
-    \xintFor* ##1 in{\xintSeq{1}{\PfCListeGaramlen}}\do{%
-      \xintFor* ##2 in {\xintSeq{1}{\useKV[Garam]{Taille}}}\do{%
-        \StrChar{\PfCListeGaram[##1,##2,1]}{1}[\PfCCaracGaram]%
-        \IfStrEq{\PfCCaracGaram}{*}{}{%
-          \tikz{%
-            \StrSubstitute{\PfCListeGaram[##1,##2,2]}{x}{\times}[\PfCGaramUn]%
-            \StrSubstitute{\PfCGaramUn}{:}{\div}[\PfCGaramUn]%
-            \StrSubstitute{\PfCListeGaram[##1,##2,3]}{x}{\times}[\PfCGaramDeux]%
-            \StrSubstitute{\PfCGaramDeux}{:}{\div}[\PfCGaramDeux]%
-            \xintifForLast{}{\node at (\fpeval{##1+0.5}-|\fpeval{##2+1}) {$\PfCGaramUn$};}
-            \node at (\fpeval{##1+1}-|\fpeval{##2+0.5}) {$\PfCGaramDeux$};
-          }%
-        }%
-      }%
-    }%
-  \end{NiceTabular}
-}%
-
-%%%
-% Futoshiki
-%%%
-\setKVdefault[Futo]{Largeur=15pt,Solution=false,CouleurSolution=Black,CouleurCase=Cornsilk,StyleTexte={}}
-
-\newlength\PfCFutoHeight
-
-\NewDocumentCommand\Futoshiki{o m}{%
-  \useKVdefault[Futo]
-  \setKV[Futo]{#1}%
-  \setlength{\PfCFutoHeight}{\useKV[Futo]{Largeur}+\tabcolsep}%
-  \setsepchar{\\/,}%
-  \readlist\ListeFuto{#2}%
-  \xdef\PfCTailleFuto{\ListeFutolen}%
-  \def\PfCFutoStyleTexte{\useKV[Futo]{StyleTexte}}%
-  \colorlet{PfCFutoCase}{\useKV[Futo]{CouleurCase}}%
-  \begin{NiceTabular}{*{\fpeval{\PfCTailleFuto-1}}{m{\useKV[Futo]{Largeur}}m{5pt}}m{\useKV[Futo]{Largeur}}}%[hvlines]
-    \xintFor* ##1 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
-      \xintFor* ##2 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
-        \rule{0pt}{\PfCFutoHeight}%
-        \StrChar{\ListeFuto[##1,\fpeval{2*##2-1}]}{1}[\PfCCaracFuto]%
-        \IfStrEq{\PfCCaracFuto}{*}{%
-          \StrGobbleLeft{\ListeFuto[##1,\fpeval{2*##2-1}]}{1}[\PfCResteFuto]%
-          \Block[draw]{}{\PfCFutoStyleTexte\PfCResteFuto}%
+\newcommand\MelangeListe[2]{%
+  % #1 Liste à mélanger
+  % #2 Nombre d'éléments à conserver
+  \setsepchar{,}\ignoreemptyitems%
+  \readlist*\ListeInter{#1}%
+  \xdef\faa{}% Liste construite
+  \xdef\fii{}% Liste détruite
+  % on crée les #2 premieres solutions.
+  \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
+    \xintifboolexpr{\ListeInterlen>1}{%
+      \xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
+      \xdef\faa{\faa \ListeInter[\Alea],}%
+      \xdef\fii{}%
+      \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
+        \xintifboolexpr{##2 == \Alea}{%
         }{%
-          \IfStrEq{\PfCCaracFuto}{!}{%
-            \StrGobbleLeft{\ListeFuto[##1,\fpeval{2*##2-1}]}{1}[\PfCResteFuto]%
-            \Block[draw,fill=PfCFutoCase]{}{\PfCFutoStyleTexte\PfCResteFuto}%
-          }{%
-            \ifboolKV[Futo]{Solution}{\Block[draw]{}{\PfCFutoStyleTexte\color{\useKV[Futo]{CouleurSolution}}\ListeFuto[##1,\fpeval{2*##2-1}]}}{\Block[draw]{}{}}%
-          }%
+          \xdef\fii{\fii \ListeInter[##2],}%
         }%
-        \xintifForLast{}{&&}%
-      }\\
-      \rule{0pt}{\fpeval{5pt+\tabcolsep}pt}\Block[]{}{}\\
-    }%
-    \CodeAfter%Pour écrire les symboles
-    \xintFor* ##1 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
-      \xintFor* ##2 in{\xintSeq{1}{\PfCTailleFuto}}\do{%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{>}{%
-          \tikz{%
-            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1}-|\fpeval{2*##2});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{<}{%
-          \tikz{%
-            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2})--(\fpeval{2*##1}-|\fpeval{2*##2+0.5});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{v}{%
-          \tikz{%
-            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1.5}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{A}{%
-          \tikz{%
-            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1}-|\fpeval{2*##2});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{>A}{%
-          \tikz{%
-            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1}-|\fpeval{2*##2});
-            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1}-|\fpeval{2*##2});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{>v}{%
-          \tikz{%
-            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1}-|\fpeval{2*##2});
-            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1.5}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{<A}{%
-          \tikz{%
-            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2})--(\fpeval{2*##1}-|\fpeval{2*##2+0.5});
-            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1}-|\fpeval{2*##2});
-          }%
-        }{}%
-        \IfStrEq{\ListeFuto[##1,2*##2]}{<v}{%
-          \tikz{%
-            \draw[transform canvas={xshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1}-|\fpeval{2*##2+0.5})--(\fpeval{2*##1-0.5}-|\fpeval{2*##2})--(\fpeval{2*##1}-|\fpeval{2*##2+0.5});
-            \draw[transform canvas={yshift=\fpeval{2pt+0.5\tabcolsep}pt}] (\fpeval{2*##1-1.5}-|\fpeval{2*##2-1})--(\fpeval{2*##1-1}-|\fpeval{2*##2-0.5})--(\fpeval{2*##1-1.5}-|\fpeval{2*##2});
-          }%
-        }{}%
       }%
-    }%
-  \end{NiceTabular}
-}%
-
-%%%
-% Ronde infernale
-%%%
-\newcommand\TestNombrePremier[1]{%
-  % #1 le nombre \`a tester
-  \newcount\anp\newcount\bnp\newcount\cnp%
-  \anp=#1\relax
-  \bnp=2\relax
-  \premier=-1\relax
-  \whiledo{\anp > 1}{%
-    \modulo{\the\anp}{\the\bnp}
-    \ifnum\remainder=0\relax%
-      \global\premier=\numexpr\premier+1\relax%
-      \cnp=\numexpr\anp/\bnp\relax%
-      \anp=\cnp\relax%
-    \else%
-      \bnp=\numexpr\bnp+1\relax%
-    \fi%
-  }%
-}%
-
-\newcommand\PfCRIListeDiviseur[1]{%#1 : nombre entier
-  \newcount\anp\newcount\bnp%
-  \anp=\fpeval{abs(#1)}%
-  \bnp=2\relax%
-  \xdef\PfCRIRetiensListeDiviseurs{}%
-  \ifnum#1=0%
-  \xdef\PfCRIRetiensListeDiviseurs{\fpeval{randint(2,5)},\fpeval{randint(6,9)}}%
-  \else
-  \whiledo{\bnp<\anp}{%
-    \modulo{\the\anp}{\the\bnp}{}%
-    \ifnum\remainder=0%
-    \ifnum#1>0
-    \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,}%
-    \else
-    \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,-\the\bnp,}%
-    \fi
-    \fi%
-    \bnp=\numexpr\bnp+1%
-  }%
-  \ifnum#1>0
-  \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,1}
-  \else
-  \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,-\the\anp}
-  \fi
-  \fi
-}
-
-\setKVdefault[RondeInfernale]{Solution=false,Relatifs=false,Etapes=4,Perso=false,Cles=false,Vide,Rayon=2.5cm,Graines=false,Rectangle=false}%
-\defKV[RondeInfernale]{Graine=\setKV[RondeInfernale]{Graines}}%
-\defKV[RondeInfernale]{Cle=\setKV[RondeInfernale]{Cles}\setKV[RondeInfernale]{Vide=false}}%
-\defKV[RondeInfernale]{ListeOperations=\setKV[RondeInfernale]{Perso}}%
-\defKV[RondeInfernale]{ListeNombres=\setKV[RondeInfernale]{Perso}}%
-% 
-\NewDocumentCommand\RondeInfernale{o}{%
-  \useKVdefault[RondeInfernale]%
-  \setKV[RondeInfernale]{#1}%
-  % Graine
-  \ifboolKV[RondeInfernale]{Graines}{\PfCGraineAlea{\useKV[RondeInfernale]{Graine}}}{}%
-  % Nombre clé
-  \ifboolKV[RondeInfernale]{Cles}{%
-    \xdef\PfCRINombreCle{\useKV[RondeInfernale]{Cle}}%
-  }{%
-    \ifboolKV[RondeInfernale]{Relatifs}{%
-      \xdef\PfCRIListeNegatifs{-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10}
-      \MelangeListe{\PfCRIListeNegatifs}{1}
-      \readlist*\PfCRIListeCle{\faa}
-      \xdef\PfCRINombreCle{\PfCRIListeCle[1]}%
     }{%
-      \xdef\PfCRINombreCle{\fpeval{randint(2,9)}}%
+      \xdef\faa{\faa \ListeInter[1]}%
     }%
+    \readlist*\ListeInter{\fii}%
   }%
-  \ifboolKV[RondeInfernale]{Perso}{%
-    \xdef\PfCRIRecupOperations{\useKV[RondeInfernale]{ListeOperations}}%
-    \xdef\PfCRIRecupNombres{\useKV[RondeInfernale]{ListeNombres}}%
-  }{%
-    % On définit les éléments nécessaires
-    \xdef\PfCRIListeToutesOperations{+,-,*,/}%
-    \xdef\PfCRIListeOperationsSansDiv{+,-,*}%
-    \xdef\PfCRIListeOperationsSansMul{+,-,/}%
-    \xdef\PfCRIListeOperationsSimple{+,-}%
-    \xdef\PfCRIRecupOperations{}%
-    \xdef\PfCRIRecupNombres{}%
-    \xdef\PfCRIRecupResultats{}%
-    \xdef\PfCRINombreATester{\PfCRINombreCle}%
-    \xdef\PfCRIRetiensNbEtapes{\useKV[RondeInfernale]{Etapes}}%
-    \setsepchar{,}\ignoreemptyitems%
-    % Liste des opérations jusqu'à l'étape n-1
-    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[RondeInfernale]{Etapes}-1}}}\do{%
-      \TestNombrePremier{\PfCRINombreATester}\relax%
-      \xintifboolexpr{\premier==0}{%
-        % Définition des opérations
-        \MelangeListe{\PfCRIListeOperationsSansDiv}{1}%
-        \readlist*\PfCRIRetiensLoperation{\faa}%
-        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-        \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
-        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
-        \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
-        \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
-        \xdef\PfCRINombreATester{\PfCRIResultat}%
-      }{%
-        \MelangeListe{\PfCRIListeToutesOperations}{1}%
-        \readlist*\PfCRIRetiensLoperation{\faa}%
-        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-        \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
-          \PfCRIListeDiviseur{\PfCRINombreATester}%
-          \MelangeListe{\PfCRIRetiensListeDiviseurs}{1}%
-          \readlist*\PfCRIRetiensLeDiviseur{\faa}%
-          \xdef\PfCRIOperateur{\PfCRIRetiensLeDiviseur[1]}%
-        }{%
-          \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
-        }%
-        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
-        \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
-        \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
-        \xdef\PfCRINombreATester{\PfCRIResultat}%
-      }%
-    }%
-    % Dernière opération
-    \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}>0}{%
-      \modulo{\PfCRINombreATester}{\PfCRINombreCle}{}%
-      \xintifboolexpr{\remainder==0}{%
-        \MelangeListe{\PfCRIListeOperationsSansMul}{1}%
-        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-        \ignoreemptyitems%
-        \readlist*\PfCRIRetiensLoperation{\faa}%
-        \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
-          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester/\PfCRINombreCle}}%
-        }{%
-          \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
-            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
-          }{%
-            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
-          }%
-        }%
-        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
-      }{%
-        \MelangeListe{\PfCRIListeOperationsSimple}{1}%
-        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-        \ignoreemptyitems%
-        \readlist*\PfCRIRetiensLoperation{\faa}%
-        \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
-          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
-        }{%
-          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
-        }%
-        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
-      }%
-    }{%
-      \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}==0}{%
-        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations *}%
-        \ignoreemptyitems%
-        \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
-        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres 1}%
-      }{%
-        \xintifboolexpr{\PfCRINombreATester==0}{%
-          \MelangeListe{\PfCRIListeOperationsSimple}{1}%
-          \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-          \ignoreemptyitems%
-          \readlist*\PfCRIRetiensLoperation{\faa}%
-          \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
-            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
-          }{%
-            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
-          }%
-          \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
-        }{%
-          \modulo{\PfCRINombreCle}{\PfCRINombreATester}{}%
-          \xintifboolexpr{\remainder==0}{%-1
-            \MelangeListe{\PfCRIListeToutesOperations}{1}%
-            \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-            \readlist*\PfCRIRetiensLoperation{\faa}%
-            \ignoreemptyitems%
-            \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
-            \IfStrEq{\PfCRIRetiensLoperation[1]}{*}{%
-              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle/\PfCRINombreATester}}%
-              \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
-            }{
-              \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
-                \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
-              }{%
-                \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
-              }%
-              \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
-            }%
-          }{%
-            \MelangeListe{\PfCRIListeOperationsSimple}{1}%
-            \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
-            \ignoreemptyitems%
-            \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
-            \IfStrEq{\PfCRIRIListeOperations[\PfCRIRetiensNbEtapes]}{-}{%
-              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
-            }{%
-              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
-            }%
-            \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
-          }%
-        }%
-      }%
-    }%
-  }%
-  \ignoreemptyitems%
-  \readlist*\PfCRIRIOperations{\PfCRIRecupOperations}%
-  \readlist*\PfCRIRINombres{\PfCRIRecupNombres}%
   \reademptyitems%
-  % On prépare le dessin
-  \xdef\PfCRINombresDessin{}%
-  \xdef\PfCRIOperationsDessin{}%
-  \foreachitem\compteur\in\PfCRIRINombres{%
-    \xintifboolexpr{\PfCRIRINombres[\compteurcnt]<0}{%
-      \xdef\PfCRINombresDessin{\PfCRINombresDessin "(\num{\PfCRIRINombres[\compteurcnt]})",}%
-    }{%
-      \xdef\PfCRINombresDessin{\PfCRINombresDessin "\num{\PfCRIRINombres[\compteurcnt]}",}%
-    }%
-  }%
-  \foreachitem\compteur\in\PfCRIRIOperations{%
-    \xdef\PfCRIOperationsDessin{\PfCRIOperationsDessin "\PfCRIRIOperations[\compteurcnt]",}%
-  }%
-  % On dessine
-  \BuildRondeInfernale{\PfCRINombresDessin}{\PfCRIOperationsDessin}%
 }%
 
-\NewDocumentCommand\BuildRondeInfernale{m m}{%
-  \ifluatex
-  \mplibforcehmode
-  \begin{mplibcode}
-    boolean Vide,Rectangle,Perso;
-    Vide=\useKV[RondeInfernale]{Vide};
-    Rectangle=\useKV[RondeInfernale]{Rectangle};
-    Perso=\useKV[RondeInfernale]{Perso};
-    if Perso:
-    string Depart;
-    Depart=\useKV[RondeInfernale]{Cle};
-    else:
-    numeric Depart;
-    Depart=\PfCRINombreCle;
-    fi;
-
-    numeric Rayon;
-    Rayon=\useKV[RondeInfernale]{Rayon};
-
-    string Nombre[];
-    
-    vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
-    nbcase:=0;
-    for p_=t:
-    nbcase:=nbcase+1;
-    Nombre[nbcase]=p_;
-    endfor;
-    enddef;
-
-    vardef AfficheRonde(text t)=%On fait l'affichage des opérations
-    n:=0;
-    for k=1 upto nbcase:
-    fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
-    endfor;
-    for p_=t:
-    n:=n+1;
-    if p_="*":
-    label(TEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
-    elseif p_="/":
-    label(TEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
-    else:
-    label(TEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
-        fi;
-    endfor;
-    enddef;
-
-    vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
-    n:=0;
-    for p_=t:
-    n:=n+1;
-    if n=nbcase:
-    if p_="*":
-    label.bot(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
-    elseif p_="/":
-    label.bot(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
-    else:
-    label.bot(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
-    fi;
-    else:
-    if p_="*":
-    label.top(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
-    elseif p_="/":
-    label.top(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
-    else:
-    label.top(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
-    fi;
-    fi;
-    endfor;
-    enddef;
-
-    vardef BaseRonde=
-    pair O,A[];
-    O=(0,0);
-    path cc;
-    cc=cercles(O,Rayon);
-    A[0]=pointarc(cc,0);
-    A[nbcase+1]=A[0];
-    for k=1 upto nbcase:
-    A[k]=rotation(A[0],O,k*(360/nbcase));
-    endfor;
-    for k=0 upto nbcase:
-    drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
-    endfor;
-    for k=0 upto nbcase:
-    fill cercles(A[k],5mm) withcolor white;
-    trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
-    endfor;
-    enddef;
-
-    vardef BoiteRectangle=
-    save $;
-    path $;
-    $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
-    $
-    enddef;
-    
-    vardef BaseRectangle=
-    pair O,A[];
-    O=(0,0);
-    A[0]=O;
-    for k=1 upto nbcase:
-    A[k]-A[k-1]=(Rayon+2cm,0);
-    endfor;
-    for k=0 upto nbcase-2:
-    drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
-    endfor;
-    drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
-    for k=0 upto nbcase-1:
-    trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
-    endfor;
-    enddef;
-    
-    Compte(#1);
-    
-    if Rectangle:
-    BaseRectangle;
-    AfficheRectangle(#2);
-    else:
-    BaseRonde;
-    AfficheRonde(#2);
-    fi;
-    if Vide=false:
-    if Perso:
-    label(TEX("$"&Depart&"$"),A[0]);
-    else:
-    label(TEX("$"&decimal(Depart)&"$"),A[0]);
-    fi;
-    fi;
-  \end{mplibcode}
-  \else
-  \begin{mpost}[mpsettings={%
-      boolean Vide,Rectangle,Perso;Vide=\useKV[RondeInfernale]{Vide};Rectangle=\useKV[RondeInfernale]{Rectangle};Perso=\useKV[RondeInfernale]{Perso};if Perso:string Depart;Depart=\useKV[RondeInfernale]{Cle};else:numeric Depart;Depart=\PfCRINombreCle;fi;numeric Rayon;Rayon=\useKV[RondeInfernale]{Rayon};}]
-    string Nombre[];
-    
-    vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
-    nbcase:=0;
-    for p_=t:
-    nbcase:=nbcase+1;
-    Nombre[nbcase]=p_;
-    endfor;
-    enddef;
-
-    vardef AfficheRonde(text t)=%On fait l'affichage des opérations
-    n:=0;
-    for k=1 upto nbcase:
-    fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
-    endfor;
-    for p_=t:
-    n:=n+1;
-    if p_="*":
-    label(LATEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
-    elseif p_="/":
-    label(LATEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
-    else:
-    label(LATEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
-    fi;
-    endfor;
-    enddef;
-
-    vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
-    n:=0;
-    for p_=t:
-    n:=n+1;
-    if n=nbcase:
-    if p_="*":
-    label.bot(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
-    elseif p_="/":
-    label.bot(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
-    else:
-    label.bot(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
-    fi;
-    else:
-    if p_="*":
-    label.top(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
-    elseif p_="/":
-    label.top(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
-    else:
-    label.top(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
-    fi;
-    fi;
-    endfor;
-    enddef;
-
-    vardef BaseRonde=
-    pair O,A[];
-    O=(0,0);
-    path cc;
-    cc=cercles(O,Rayon);
-    A[0]=pointarc(cc,0);
-    A[nbcase+1]=A[0];
-    for k=1 upto nbcase:
-    A[k]=rotation(A[0],O,k*(360/nbcase));
-    endfor;
-    for k=0 upto nbcase:
-    drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
-    endfor;
-    for k=0 upto nbcase:
-    fill cercles(A[k],5mm) withcolor white;
-    trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
-    endfor;
-    enddef;
-
-    vardef BoiteRectangle=
-    save $;
-    path $;
-    $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
-    $
-    enddef;
-    
-    vardef BaseRectangle=
-    pair O,A[];
-    O=(0,0);
-    A[0]=O;
-    for k=1 upto nbcase:
-    A[k]-A[k-1]=(Rayon+2cm,0);
-    endfor;
-    for k=0 upto nbcase-2:
-    drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
-    endfor;
-    drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
-    for k=0 upto nbcase-1:
-    trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
-    endfor;
-    enddef;
-    
-    Compte(#1);
-    
-    if Rectangle:
-    BaseRectangle;
-    AfficheRectangle(#2);
-    else:
-    BaseRonde;
-    AfficheRonde(#2);
-    fi;
-    if Vide=false:
-    if Perso:
-    label(LATEX("$"&Depart&"$"),A[0]);
-    else:
-    label(LATEX("$"&decimal(Depart)&"$"),A[0]);
-    fi;
-    fi;
-  \end{mpost}
-  \fi
-}%
-
-
 %%%
-% Message caché
-%%%
-\setKVdefault[Hidden]{TLargeur=5,THauteur=3,Solution=false,Hauteur=70pt,Largeur=120pt,Jeu=false,Solution}
-\defKV[Hidden]{Plateau=\setKV[Hidden]{Jeu}\setKV[Hidden]{Solution=false}}
-
-\newlength\PfCHiddenHeight%
-\newlength\PfCHiddenWidth%
-
-\NewDocumentCommand\MessageCache{o m m}{%1 options 2 questions/réponses 3 message
-  % on récupère les options
-  \useKVdefault[Hidden]%
-  \setKV[Hidden]{#1}%
-  % on définit les dimensions des cases
-  \setlength{\PfCHiddenHeight}{\useKV[Hidden]{Hauteur}+\tabcolsep}%
-  \setlength{\PfCHiddenWidth}{\useKV[Hidden]{Largeur}}%
-  % On récupère les questions
-  \setsepchar[*]{§*/}%
-  \readlist*\PfCHiddenQuestions{#2}%
-  \setsepchar{,}
-  \ifboolKV[Hidden]{Solution}{%
-    % On donne les questions et la phrase
-    \begin{center}
-      \begin{NiceTabular}{*{\useKV[Hidden]{TLargeur}}{m{\PfCHiddenWidth}}}%[hvlines]
-        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
-          \rule{0pt}{\PfCHiddenHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Hidden]{TLargeur}}}\do{%
-            \Block[draw]{1-1}{\PfCHiddenQuestions[\fpeval{\useKV[Hidden]{THauteur}*(##1-1)+##2},1]}\xintifForLast{}{&}
-          }\\
-        }%
-        \CodeAfter%
-        \StrGobbleLeft{#3}{0}[\PhraseCorrection]%
-        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
-          \xintFor* ##2 in{\xintSeq{1}{\fpeval{\useKV[Hidden]{TLargeur}-1}}}\do{%
-            \StrLeft{\PhraseCorrection}{1}[\LettreAAfficher]\StrGobbleLeft{\PhraseCorrection}{1}[\PhraseCorrection]%
-            \tikz{\node[anchor=south] at (\fpeval{##1+1}-|\fpeval{##2+1}) {\huge\bfseries\LettreAAfficher};}%
-          }%
-        }%
-      \end{NiceTabular}
-    \end{center}
-  }{%
-    % On donne le plateau des solutions
-    \begin{center}
-      \begin{NiceTabular}{*{\useKV[Hidden]{TLargeur}}{m{\PfCHiddenWidth}}}%[hvlines]
-        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
-          \rule{0pt}{\PfCHiddenHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Hidden]{TLargeur}}}\do{%
-            \Block[draw]{1-1}{\PfCHiddenQuestions[\fpeval{\useKV[Hidden]{THauteur}*(##1-1)+##2},2]}\xintifForLast{}{&}
-          }\\
-        }%
-      \end{NiceTabular}
-    \end{center}
-  }
-}%
-
-%%%
-% Puzzle Somme Pyramide
-%%%
-\setKVdefault[ClesPuzzleP]{Largeur=40pt,Etages=4,Graines=false,Solutions=false,Jeu,EnonceQuestion=false,NbLignes=7}
-\defKV[ClesPuzzleP]{Graine=\setKV[ClesPuzzleP]{Graines}}%
-\defKV[ClesPuzzleP]{Solution=\setKV[ClesPuzzleP]{Solutions}\setKV[ClesPuzzleP]{Jeu=false}}%
-\defKV[ClesPuzzleP]{Questions=\setKV[ClesPuzzleP]{EnonceQuestion}\setKV[ClesPuzzleP]{Jeu=false}}%
-\newcounter{PfCPuzzlePcpt}
-\newcounter{PfCPuzzlePavcpt}
-\newlength{\PfCPuzzleP}
-
-\NewDocumentCommand\PuzzlePyramideListeLettres{}{%
-  \setcounter{PfCPuzzlePcpt}{0}%
-  \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[1]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[2]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[3]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[4]}\Alph{PfCPuzzlePavcpt} et \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[5]}\Alph{PfCPuzzlePavcpt}%
-}
-
-\NewDocumentCommand\PuzzlePyramide{o m}{%
-  \useKVdefault[ClesPuzzleP]%
-  \setKV[ClesPuzzleP]{#1}%
-  \ifboolKV[ClesPuzzleP]{Graines}{\PfCGraineAlea{\useKV[ClesPuzzleP]{Graine}}}{}%
-  \setsepchar{§}
-  \readlist*\PfCPuzzlePQuestions{#2}%
-  \setsepchar{,}
-  \setlength{\PfCPuzzleP}{\useKV[ClesPuzzleP]{Largeur}}%
-  \xdef\PfCPuzzlePLettres{1}%
-  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[ClesPuzzleP]{Etages}*(\useKV[ClesPuzzleP]{Etages}+1)/2}}}\do{%
-    \xdef\PfCPuzzlePLettres{\PfCPuzzlePLettres,##1}%
-  }%
-  \MelangeListe{\PfCPuzzlePLettres}{\fpeval{\useKV[ClesPuzzleP]{Etages}*(\useKV[ClesPuzzleP]{Etages}+1)/2}}%
-  \readlist*{\PfCPuzzlePCptLettre}{\faa}%
-  \xdef\PuzzlePyramideLettres{\PuzzlePyramideListeLettres}%
-  \setcounter{PfCPuzzlePcpt}{0}%
-  \ifboolKV[ClesPuzzleP]{Solutions}{%
-%    % Plateau de jeu
-    \begin{center}
-      \begin{NiceTabular}{*{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}{m{\PfCPuzzleP}}}%[hvlines]
-        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}}}}\do{%
-          \xintifForLast{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&}{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&&}
-        }\\%
-        \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
-          \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
-            \xintifForLast{\\}{&}
-          }%
-        }%
-        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-1}}}\do{%
-          \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
-            \xintifForFirst{}{&}
-          }\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-##1}}}\do{%
-            &\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&
-          }%
-          \\
-          \xintFor* ##3 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
-            \xintFor* ##4 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
-              \xintifForLast{\\}{&}
-            }%
-          }%
-        }%
-      \end{NiceTabular}
-    \end{center}
-  }{%
-    \ifboolKV[ClesPuzzleP]{EnonceQuestion}{%
-      % Plateau des questions
-      \setcounter{PfCPuzzlePcpt}{0}%
-      \begin{center}
-        \begin{NiceTabular}{*{10}{m{\PfCPuzzleP}}}%[hvlines]
-          \xintFor* ##3 in {\xintSeq{1}{\fpeval{ceil(\PfCPuzzlePQuestionslen/5)}}}\do{%
-            \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
-              \xintifForLast{%
-                \Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{%
-                  \stepcounter{PfCPuzzlePcpt}%
-                  \xintifboolexpr{\thePfCPuzzlePcpt>\PfCPuzzlePQuestionslen}{}{%
-                    \xintFor* ##4 in{\xintSeq{1}{\PfCPuzzlePQuestionslen}}\do{%
-                      \xintifboolexpr{\thePfCPuzzlePcpt==\PfCPuzzlePCptLettre[##4]}{\PfCPuzzlePQuestions[##4]}{}%
-                    }%
-                  }%
-                }&%
-              }{%
-                \Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{%
-                  \stepcounter{PfCPuzzlePcpt}%
-                  \xintifboolexpr{\thePfCPuzzlePcpt>\PfCPuzzlePQuestionslen}{}{%
-                    \xintFor* ##4 in{\xintSeq{1}{\PfCPuzzlePQuestionslen}}\do{%
-                      \xintifboolexpr{\thePfCPuzzlePcpt==\PfCPuzzlePCptLettre[##4]}{\PfCPuzzlePQuestions[##4]}{}%
-                    }%
-                  }%
-                }%
-                &&%
-              }%
-            }\\%
-            \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
-              \xintFor* ##2 in {\xintSeq{1}{10}}\do{%
-                \xintifForLast{\\}{&}
-              }%
-            }%
-          }%
-          \CodeAfter
-          \setcounter{PfCPuzzlePcpt}{0}%
-          \xintFor* ##1 in {\xintSeq{1}{\fpeval{ceil(\PfCPuzzlePQuestionslen/5)}}}\do{%
-            \xintFor* ##2 in {\xintSeq{1}{5}}\do{%
-              \tikz{\node[anchor={north west},xshift=1mm,yshift=-1mm] at (\fpeval{(##1-1)*\useKV[ClesPuzzleP]{NbLignes}+1}-|\fpeval{2*##2-1}) {\stepcounter{PfCPuzzlePcpt}\Large\bfseries\Alph{PfCPuzzlePcpt}};}%
-              \tikz{\node[anchor={south east},xshift=-2mm,yshift=-2mm,rectangle,draw] at (\fpeval{##1*\useKV[ClesPuzzleP]{NbLignes}}-|\fpeval{2*##2+1}) {\large\bfseries\hbox to 1.2\PfCPuzzleP{\rule{0pt}{1.8ex}}};}%
-            }%
-          }%
-        \end{NiceTabular}
-      \end{center}%
-    }{%
-      % Plateau de jeu
-      \begin{center}
-        \begin{NiceTabular}{*{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}{m{\PfCPuzzleP}}}%[hvlines]
-          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}}}}\do{%
-            \xintifForLast{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&}{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&&}
-          }\\%
-          \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
-            \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
-              \xintifForLast{\\}{&}
-            }%
-          }%
-          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-1}}}\do{%
-            \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
-              \xintifForFirst{}{&}
-            }\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-##1}}}\do{%
-              &\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{}&
-            }%
-            \\
-            \xintFor* ##3 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
-              \xintFor* ##4 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
-                \xintifForLast{\\}{&}
-              }%
-            }%
-          }%
-        \end{NiceTabular}
-      \end{center}
-    }%
-  }%
-}%
-
-%%%
-% Calisson
-%%%
-\setKVdefault[Calisson]{Taille=3,Solution=false,Rayon=5cm,Couleur=red}%
-
-\def\UpdatetoksCalissong#1\nil{\addtotok\tokcalissonlistetracesg{,"#1"}}%
-\def\UpdatetoksCalissongDepart#1\nil{\addtotok\tokcalissonlistetracesg{"#1"}}%
-\def\UpdatetoksCalissond#1\nil{\addtotok\tokcalissonlistetracesd{,"#1"}}%
-\def\UpdatetoksCalissondDepart#1\nil{\addtotok\tokcalissonlistetracesd{"#1"}}%
-
-\newtoks\tokcalissonlistetracesg
-\newtoks\tokcalissonlistetracesd
-
-\NewDocumentCommand\Calisson{o m}{%
-  \useKVdefault[Calisson]%
-  \setKV[Calisson]{#1}%
-  % Essai de cassage du code
-  \tokcalissonlistetracesg{}%
-  \tokcalissonlistetracesd{}%
-  %Partie Gauche -> ok
-  \StrLeft{0#2}{2}[\Depart]%
-  \StrGobbleLeft{0#2}{2}[\Reste]%

@@ Diff output truncated at 1234567 characters. @@


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