texlive[63895] Master/texmf-dist: profcollege (14jul22)

commits+karl at tug.org commits+karl at tug.org
Thu Jul 14 22:20:19 CEST 2022


Revision: 63895
          http://tug.org/svn/texlive?view=revision&revision=63895
Author:   karl
Date:     2022-07-14 22:20:19 +0200 (Thu, 14 Jul 2022)
Log Message:
-----------
profcollege (14jul22)

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

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

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

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

Added: trunk/Master/texmf-dist/metapost/profcollege/PfCPseudo.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCPseudo.mp	                        (rev 0)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCPseudo.mp	2022-07-14 20:20:19 UTC (rev 63895)
@@ -0,0 +1,2551 @@
+%%%%% epaisseur de tracés %%%%%%%%
+numeric eppen;
+eppen=0.25;
+
+pickup pencircle scaled eppen;
+defaultpen := savepen;
+
+%points pour placer les différents éléments
+pair _coinprec;%coinbasgauche de la boite précédente
+pair _coincom;%coinbasdroite de la boite afin d'y mettre des commentaires
+pair _coinnum;%milieu côté gauche pour placer la numérotation des lignes
+
+%paramètres
+numeric Nblignes; Nblignes:=1;
+pair DebutListe; DebutListe=(0,0);
+boolean NumeroteLignes; NumeroteLignes=false;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% couleurs
+color CoulLignes; CoulLignes:=white;
+color ColBloc; % alias des couleurs de bloc
+
+%Version3
+color BleuMouvTrois,dBleuMouvTrois,VioletAppTrois,dVioletAppTrois,OrangeConTrois,OrangeTrois,OrangeListTrois,SonTrois,DSonTrois,EvenementTrois,CapteurTrois,StyloTrois,BlocTrois,BlocDefTrois,BlocDefLigneTrois,MessageTrois,ControleTrois,CapFonceTrois,CloneTrois,FondSonTrois,OvalStyloTrois,FondOvalOp;
+BleuMouvTrois=(76/255,151/255,255/255);
+dBleuMouvTrois=(66/255,128/255,215/255);
+VioletAppTrois=(153/255,102/255,255/255);
+dVioletAppTrois=(133/255,92/255,214/255);
+OrangeConTrois=(255/255,171/255,25/255);
+OrangeTrois=(255/255,140/255,26/255);
+OrangeListTrois=(255/255,102/255,26/255);
+SonTrois=(207/255,99/255,207/255);
+DSonTrois=(201/255,79/255,201/255);
+FondSonTrois=(15/255,189/255,140/255);
+EvenementTrois=(255/255,191/255,0);
+MessageTrois=(230/255,172/255,0);
+CapteurTrois=(92/255,177/255,214/255);
+CapFonceTrois=(71/255,168/255,209/255);
+StyloTrois=(15/255,189/255,140/255);
+OvalStyloTrois=(13/255,165/255,122/255);
+BlocTrois=(255/255,102/255,128/255);
+BlocDefTrois=(255/255,77/255,106/255);
+BlocDefLigneTrois=(255/255,51/255,85/255);
+ControleTrois=(255/255,171/255,25/255);
+CloneTrois=(236/255,156/255,19/255);
+FondOvalOp=(89/255,192/255,89/255);
+
+vardef FondOvalAppMenu=
+  save $; color $;
+  $=dVioletAppTrois;
+  $
+enddef;
+
+%%%%Alias
+def Place expr o =
+    if path o: draw o else: draw o fi
+enddef;
+
+%impression
+boolean print;
+print=false;
+
+numeric coefprint;
+coefprint:=0.95;
+
+%texte ou symbole droite gauche
+boolean symbole;
+symbole=true;
+
+%divers
+numeric eb;%ecart boite-texte
+eb:=3pt;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Création des boites
+ecrt:=eb/2;%largeur de la bordure de départ des boites Box, OValBox...
+
+vardef Box(text t)=
+  save $; path $;
+  picture ox;
+  ox=image(
+      if string t:
+      string demitt;
+      demitt=t&"\barre";
+      label(TEX(demitt),(0,0));
+    else:
+      draw t;
+    fi;
+    );
+  $=(llcorner ox+(0,-ecrt))--(lrcorner ox+(0,-ecrt))--(urcorner ox+(0,ecrt))--(ulcorner ox+(0,ecrt))--cycle;
+  $
+enddef;
+
+vardef RecBox(text t)=
+  save $; path $; path xo;
+  if string t:
+    string demit;
+    demit=t&"\demibarre";
+    xo=Box(demit);%on crée la boite contenant le texte
+  else:
+    xo=Box(t);
+  fi;
+    $=(llcorner xo+(-eb,eb)){dir-90}..{dir0}(llcorner xo)--(lrcorner xo){dir0}..{dir90}(lrcorner xo+(eb,eb))--(urcorner xo+(eb,-eb)){dir90}..{dir180}(urcorner xo)--(ulcorner xo){dir180}..{dir-90}(ulcorner xo+(-eb,-eb))--cycle;
+  $
+enddef;
+
+%%%%%%%%%%%%%%
+
+%%%%%%% Boites Ovales %%%%%%%%
+vardef OvalBox(text t)=
+  save $; path $; path xo;
+  if string t:
+    string demit;
+    demit=t&"\barre";
+    xo=Box(demit);%on crée la boite contenant le texte
+  else:
+    xo=Box(t);
+  fi;
+  $=(llcorner xo+(eb,0))--(lrcorner xo-(eb,0)){dir0}..{dir180}(urcorner xo+(-eb,0))--(ulcorner xo+(eb,0)){dir180}..{dir0}cycle;%on "arrondit" la boite
+  $
+enddef;
+
+vardef OvalVar(expr ar)=
+  save Ovar; picture Ovar;
+  save TAvar; path TAvar;
+  string TTv;
+  TTv="\barre "&ar;%
+  TAvar=OvalBox(TTv);
+  Ovar=image(
+    %  fill TAvar if print=false : withcolor OrangeTrois else : withcolor white fi;
+    %draw TAvar;% if print=false : withcolor coefprint*white fi;
+    label(TEX("\sffamily\barre "&ar),(0,0)) if print=false : withcolor white fi;
+    );
+  Ovar:=Ovar shifted(-center Ovar);
+  Ovar
+enddef;
+
+vardef OvalList(text listelist)=
+  save CList;  picture CList;
+  path TAlist; picture LOCMt;
+  LOCMt=ColleBoxNew(listelist);
+  TAlist=OvalBox(LOCMt);
+  CList=image(
+    fill TAlist if print=false : withcolor OrangeListTrois else : withcolor white fi;
+    draw LOCMt;
+    draw TAlist if print=false : withcolor coefprint*white fi;
+    );
+  CList:=CList shifted(-center CList);
+  CList
+enddef;
+
+vardef OvalBloc(expr ar)=
+  save $;  picture $;
+  path tabloc;
+  tabloc=OvalBox(ar);
+  $=image(
+    %fill tabloc if print=false : withcolor BlocTrois else: withcolor white fi;
+    %draw tabloc if print=true : withcolor black else: withcolor BlocDefLigneTrois fi;
+    label(TEX("\sffamily\barre "&ar),(0,0)) if print=false : withcolor blanc fi;
+    );
+  $
+enddef;
+
+vardef OvalMiniBox(text t)=
+  save $; path $; path xo;
+  if string t:
+    string demit;
+    demit=t&"\barre";
+    xo=Box(demit);%on crée la boite contenant le texte
+  else:
+    xo=Box(t);
+  fi;
+  $=(llcorner xo+(eb/2,0))--(lrcorner xo-(eb/2,0)){dir0}..{dir180}(urcorner xo+(-eb/2,0))--(ulcorner xo+(eb/2,0)){dir180}..{dir0}cycle;%on "arrondit" la boite
+  $
+enddef;
+
+vardef DiamondBox(text t)=
+  save $; path $; path xo;
+  xo=Box(t);%on crée la boite contenant le texte
+  $=(llcorner xo-(eb,0))--(lrcorner xo+(eb,0))--(1/2[lrcorner xo,urcorner xo]+(4eb,0))--(urcorner xo+(eb,0))--(ulcorner xo-(eb,0))--(1/2[llcorner xo,ulcorner xo]+(-4eb,0))--cycle;
+  $
+enddef;
+
+vardef OvalNb(expr ar)=
+  save Onb;  picture Onb;
+  path tanb;
+  tanb=OvalBox(ar);
+  Onb=image(
+    fill tanb withcolor white;
+    draw tanb if print=false : withcolor coefprint*white fi;
+    label(TEX("\barre "&ar),(0,0));
+    );
+  Onb
+enddef;
+
+vardef OvalText(expr ar)=
+  save $; save TA;
+  picture $;
+  path TA;
+  TA=OvalBox(ar);
+  $=image(%
+    fill TA withcolor white;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX("\barre "&ar),(0,0));
+    );
+    $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef OvalOp(text listeop)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew(listeop);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+      fill TAao if print=false : withcolor FondOvalOp else : withcolor coefprint*white fi;
+    draw LOPop;
+    draw TAao if print=false : withcolor coefprint*white fi;
+    );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef OvalApp(text listop)=
+  save $;  picture $;
+  save ta; path ta;
+  save TTap; picture TTap;
+  TTap=ColleBoxNew(listop);
+  ta=OvalBox(TTap);
+  $=image(
+      %fill ta if print=false : withcolor VioletAppTrois else: withcolor white fi;
+    %draw ta ;%if print=false : withcolor coefprint*white fi;
+    draw TTap;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef OvalSon(text listop)=
+  save $;  picture $;
+  save ta; path ta;
+  save TTap; picture TTap;
+  TTap=ColleBoxNew(listop);
+  ta=OvalBox(TTap);
+  $=image(
+      %fill ta if print=false : withcolor SonTrois else: withcolor white fi;
+    %draw ta if print=false : withcolor coefprint*white fi;
+    draw TTap;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef OvalMusique(expr ar)=
+  save $; save TA;
+  picture $;
+  if string ar:
+    picture TT;
+    TT=ColleBoxNew("tempo");
+    path TA;
+    TA=OvalBox(TT);
+    $=image(
+	fill TA if print : withcolor white else : withcolor StyloTrois fi;
+      draw TT if print=true : withcolor coefprint*white fi;
+      );
+  else:
+    message("La commande --OvalStylo-- n'accepte qu'un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef OvalMouv(expr ar)=
+  save $;  picture $;
+  path ta; string TTm;
+  TTm=ar&"\longbarre";
+  ta=OvalBox(TTm);
+  $=image(
+    %fill ta if print=false : withcolor BleuMouvTrois else: withcolor white fi;
+    %draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX("\longbarre "&ar),center ta) if print=false : withcolor blanc fi;
+    );
+  $
+enddef;
+
+vardef OvalMenuCap(expr art)=OvalCapMenu(art) enddef;
+
+vardef OvalCapMenu(expr ar)=
+  save $; picture $;
+  string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TAMC;
+  TAMC=OvalBox(TTm);
+  $=image(
+      fill TAMC if print : withcolor white else : withcolor CapFonceTrois fi;
+    draw TAMC if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center TAMC);
+    );
+  $
+enddef;
+
+vardef OvalCap(text listecap)=
+  save Cap;  picture Cap;
+  save TAcap; path TAcap;
+  save LOCMcap; picture LOCMcap;
+  LOCMcap=ColleBoxNew(listecap);
+  TAcap=OvalBox(LOCMcap);
+  Cap=image(
+%    fill TAcap if print=false : withcolor CapteurTrois else : withcolor white fi;
+    draw LOCMcap;
+%    draw TAcap if print=false : withcolor coefprint*white fi;
+    );
+  Cap:=Cap shifted(-center Cap);
+  Cap
+enddef;
+
+vardef OvalMouvMenu(expr ar)=
+  save $;  picture $;
+  path ta; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else:
+      "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}"
+  fi;
+  ta=OvalBox(TTm);
+  $=image(
+      fill ta if print=false : withcolor dBleuMouvTrois else: withcolor white fi;
+    draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center ta);
+    );
+  $
+enddef;
+
+vardef OvalAppMenu(expr ar)=
+  save $;  picture $;
+  path ta; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  ta=OvalBox(TTm);
+  $=image(
+      fill ta if print=false : withcolor FondOvalAppMenu else: withcolor white fi;
+    draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center ta);
+    );
+  $
+enddef;
+
+vardef OvalSonMenu(expr art)=OvalMenuSon(art) enddef;
+
+vardef OvalMenuSon(expr ar)=
+  save $; save TA;
+  picture $;
+  string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TA;
+  TA=OvalBox(TTm);
+  $=image(%
+    fill TA if print : withcolor white else : withcolor DSonTrois fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center TA);
+    );
+  $
+enddef;
+
+vardef OvalMenuControle(expr ar)=
+  save $; save TA;
+  picture $;
+  string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TA;
+  TA=OvalBox(TTm);
+  $=image(
+      fill TA if print : withcolor white else : withcolor CloneTrois fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm), center TA);
+    );
+  $
+enddef;
+
+vardef OvalStylo(expr ar)=
+  save $; save TA;
+  picture $;
+  string TT,TTI;
+  if string ar:
+    if print:
+      TT=ar&"\hbox to1em{\barre}\blacktriangledown"
+    else:
+      TT=ar&"\hbox to1em{\barre}{\color{white}\blacktriangledown}"
+    fi;
+    TTI=ar&"\hbox to1em{\barre}\phantom{\blacktriangledown}";
+    path TA;
+    TA=OvalBox(TT);
+    $=image(
+	fill TA if print : withcolor white else : withcolor OvalStyloTrois fi;
+      draw TA if print=false : withcolor coefprint*white fi;
+      label(TEX(TT),(0,0)) if print=false : withcolor white fi;
+      );
+  else:
+    message("La commande --OvalStylo-- n'accepte qu'un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef OvalCouleur(expr redcc,greencc,bluecc)=
+  save $; picture $;
+  string TTv;
+  path tacol;
+  TTv="\phantom{10}\barre";
+  tacol=OvalBox(TTv);
+  $=image(
+      fill tacol withcolor (redcc,greencc,bluecc);
+    draw tacol;
+    );
+  $:=$ shifted(-center tacol);
+  $
+enddef;
+
+vardef OvalMenuEvenement(expr ar)=
+  save $; save TA;
+  picture $;
+  string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TA;
+  TA=OvalBox(TTm);
+  $=image(
+      fill TA if print : withcolor white else : withcolor MessageTrois fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm), center TA);
+    );
+  $
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Rectangles
+vardef RecMouvMenu(expr ar)=
+  save $;  picture $;
+  path ta; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}"
+  fi;
+  ta=RecBox(TTm);
+  $=image(
+      fill ta if print=false : withcolor BleuMouvTrois else: withcolor white fi;
+    draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center ta);
+    );
+  $
+enddef;
+
+vardef RecMenuApp(expr ar)=
+  save $;  picture $;
+  save ta; path ta; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  ta=RecBox(TTm);
+  $=image(
+      fill ta if print=false : withcolor VioletAppTrois else: withcolor white fi;
+    draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center ta);
+    );
+  $
+enddef;
+
+vardef RecMenuOp(expr ar)=
+  save $; save TA;
+  picture $; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TA;
+  TA=RecBox(TTm);
+  $=image(
+      fill TA if print : withcolor white else : withcolor FondOvalOp fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm), center TA);
+    );
+  $
+enddef;
+
+vardef RecMenuSon(expr ar)=
+  save $; save TA;
+  picture $; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}" fi;
+  path TA;
+  TA=RecBox(TTm);
+  $=image(
+      fill TA if print : withcolor white else : withcolor SonTrois fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm), center TA);
+    );
+  $
+enddef;
+
+vardef RecEvenementMenu(expr ar)=
+  save $;  picture $;
+  path ta; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  ta=RecBox(TTm);
+  $=image(
+      fill ta if print=false : withcolor EvenementTrois else: withcolor white fi;
+    draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center ta);
+    );
+  $
+enddef;
+
+vardef RecMenuCap(expr ar)=
+    save $;  picture $;
+  path ta; string TTm;
+    TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+    fi;
+  ta=RecBox(TTm);
+  $=image(
+      fill ta if print=false : withcolor CapteurTrois else: withcolor white fi;
+    draw ta if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm),center ta);
+    );
+  $
+enddef;
+
+vardef RecMenuVar(expr ar)=
+  save $; save TA;
+  picture $; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TA;
+  TA=RecBox(TTm);
+  $=image(
+      fill TA if print : withcolor white else : withcolor OrangeTrois fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm), center TA);
+    );
+  $
+enddef;
+
+vardef RecMenuList(expr ar)=
+  save $; save TA;
+  picture $; string TTm;
+  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  path TA;
+  TA=RecBox(TTm);
+  $=image(
+      fill TA if print : withcolor white else : withcolor OrangeListTrois fi;
+    draw TA if print=false : withcolor coefprint*white fi;
+    label(TEX(TTm), center TA);
+    );
+  $
+enddef;
+
+%%%%%%% Affichage Complet %%%%%%%%%%%%%
+vardef PuzzleBox(text t)=
+  save $; path $; path xo;
+  xo=Box(t);%on crée la boite contenant le texte
+  $=(llcorner xo+(-eb,0)){dir-90}..{dir0}(llcorner xo+(0,-eb))--
+    (llcorner xo+(0.375cm,0)+(-eb,-eb)){dir0}..
+    {dir0}(llcorner xo+(0.375cm,0)+(0,-2eb))--
+    (llcorner xo+(0.625cm,0)+(0,-2eb)){dir0}..
+    {dir0}(llcorner xo+(0.625cm,0)+(eb,-eb))--
+    (lrcorner xo+(0,-eb)){dir0}..{dir90}(lrcorner xo+(eb,0))--(urcorner xo+(eb,0)){dir90}..{dir-180}(urcorner xo+(0,eb))--
+    (ulcorner xo+(0.625cm,0)+(eb,eb)){dir180}..
+    {dir180}(ulcorner xo+(0.625cm,0))--
+    (ulcorner xo+(0.375cm,0)){dir180}..
+    {dir180}(ulcorner xo+(0.375cm,0)+(-eb,eb))--
+    (ulcorner xo+(0,eb)){dir-180}..{dir-90}(ulcorner xo+(-eb,0))--cycle;
+  $
+enddef;
+
+vardef BlocPuzzle(text nombloc)=
+  save Bpuzzle; picture Bpuzzle;
+  path TABp;   picture LOCMp;
+  LOCMp=ColleBoxNew(nombloc);
+  TABp=PuzzleBox(LOCMp);
+  Bpuzzle=image(
+    fill TABp if print=false : withcolor BlocDefTrois else : withcolor white fi;
+    draw LOCMp;
+    draw TABp  if print=true : withcolor black else: withcolor BlocDefLigneTrois fi;
+    );
+  Bpuzzle:=Bpuzzle shifted(-center Bpuzzle+(0,-eb/2));
+  Bpuzzle
+enddef;
+
+vardef ColleBoxNew(text t)=%Pour coller plusieurs boites
+  save Colle; picture Colle;
+  Colle=nullpicture;
+  numeric nbcolle;  nbcolle:=0;
+  save NBCOLLE; path NBCOLLE;
+  for p_ = t:
+    nbcolle:=nbcolle+1;
+  endfor;
+  picture HOLD;  HOLD:=nullpicture;
+  if unknown LONG: LONG:=0 fi;
+  if nbcolle=1:%On dessine
+    for p_ = t:
+      if string p_:
+	NBCOLLE:=Box(p_);
+	HOLD:=image(
+	    label(TEX("\sffamily\longbarre "&p_),(0,0)) if print=false : withcolor white fi;%->ok
+	  );
+	HOLD:=(HOLD shifted ((xpart((center HOLD)-(llcorner HOLD))+LONG,0)));
+      else:
+	HOLD:=(p_ shifted ((xpart((center p_)-(llcorner p_))+LONG,0)));
+      fi;
+    endfor;
+    addto Colle also HOLD;
+    LONG:=LONG+abs(lrcorner Colle - llcorner Colle)+eb;
+  else:%il faut coller les boites une à une
+    for p_ = t:
+      addto Colle also (ColleBoxNew(p_));
+    endfor;
+  fi;
+  Colle
+enddef;
+
+vardef CADRE(expr texti)=
+  save $;  path $;
+  $=(llcorner texti+(-eb,0)){dir-90}..{dir0}(llcorner texti+(0,-eb))--
+    (llcorner texti+(0.375cm,0)+(-eb,-eb)){dir0}..
+    {dir0}(llcorner texti+(0.375cm,0)+(0,-2eb))--
+    (llcorner texti+(0.625cm,0)+(0,-2eb)){dir0}..
+    {dir0}(llcorner texti+(0.625cm,0)+(eb,-eb))--
+    (lrcorner texti+(0,-eb)){dir0}..{dir90}(lrcorner texti+(eb,0))--(urcorner texti+(eb,0)){dir90}..{dir-180}(urcorner texti+(0,eb))--
+    (ulcorner texti+(0.625cm,0)+(eb,eb)){dir180}..
+    {dir180}(ulcorner texti+(0.625cm,0))--
+    (ulcorner texti+(0.375cm,0)){dir180}..
+    {dir180}(ulcorner texti+(0.375cm,0)+(-eb,eb))--
+    (ulcorner texti+(0,eb)){dir-180}..{dir-90}(ulcorner texti+(-eb,0))--cycle;
+  $
+enddef;
+
+vardef AFFI(expr texta)=
+  path cadre;
+  cadre=CADRE(texta);
+  picture TEXT;
+  TEXT=image(%
+      draw texta;
+    );
+  TEXT
+enddef;
+
+vardef Affichage(expr textu)=
+  save $;
+  picture $;
+  $=AFFI(textu);
+  $:=$ shifted (if unknown _coinprec:(0,0) else :_coinprec fi - (ulcorner $));
+_coinprec:=(llcorner $)+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+%Pour les blocs de type contrôle
+vardef CADRECONTROLE(expr texti)=
+  save $;  path $;
+  path tracecadre;
+  $=(llcorner texti+(-eb,-eb))--%(llcorner texti+(0,-eb))--
+    (llcorner texti+(0.875cm,0)+(-eb,-eb)){dir0}..
+    {dir0}(llcorner texti+(0.875cm,0)+(0,-2eb))--
+    (llcorner texti+(1.125cm,0)+(0,-2eb)){dir0}..
+    {dir0}(llcorner texti+(1.125cm,0)+(eb,-eb))--
+    (lrcorner texti+(0,-eb)){dir0}..{dir90}(lrcorner texti+(eb,0))--(urcorner texti+(eb,0)){dir90}..{dir180}(urcorner texti+(0,eb))--
+    (ulcorner texti+(0.625cm,0)+(eb,eb)){dir180}..
+    {dir180}(ulcorner texti+(0.625cm,0))--
+    (ulcorner texti+(0.375cm,0)){dir180}..
+    {dir180}(ulcorner texti+(0.375cm,0)+(-eb,eb))--
+    (ulcorner texti+(0,eb)){dir180}..{dir-90}(ulcorner texti+(-eb,0))--cycle;
+  tracecadre=(llcorner texti+(0.5cm,0)+(0,-eb))--(llcorner texti+(0.875cm,0)+(-eb,-eb)){dir0}..
+    {dir0}(llcorner texti+(0.875cm,0)+(0,-2eb))--
+    (llcorner texti+(1.125cm,0)+(0,-2eb)){dir0}..
+    {dir0}(llcorner texti+(1.125cm,0)+(eb,-eb))--
+    (lrcorner texti+(0,-eb)){dir0}..{dir90}(lrcorner texti+(eb,0))--(urcorner texti+(eb,0)){dir90}..{dir180}(urcorner texti+(0,eb))--
+    (ulcorner texti+(0.625cm,0)+(eb,eb)){dir180}..
+    {dir180}(ulcorner texti+(0.625cm,0))--
+    (ulcorner texti+(0.375cm,0)){dir180}..
+    {dir180}(ulcorner texti+(0.375cm,0)+(-eb,eb))--
+    (ulcorner texti+(0,eb)){dir180}..{dir-90}(ulcorner texti+(-eb,0))--
+    (llcorner texti+(-eb,-eb));
+  $
+enddef;
+
+vardef AFFICONTROLE(expr texta)=
+  path cadre;
+  cadre=CADRECONTROLE(texta);
+  picture TEXT;
+  TEXT=image(
+    draw texta;
+    );
+  TEXT
+enddef;
+
+vardef AffichageControle(expr textu)=
+  save $;
+  picture $;
+  $=AFFICONTROLE(textu);
+  $:=$ shifted (if unknown _coinprec:(0,0) else :_coinprec fi - (ulcorner $));
+_coinprec:=llcorner $+(0.5cm,0);
+_coinprec:=_coinprec+(0,eb);
+coindebutbloc[numblocrep]:=(llcorner $)+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+vardef CADREED(expr texti)=
+  save $; path $;
+  $=(llcorner texti+(-eb,0)){dir-90}..{dir0}(llcorner texti+(0,-eb))--
+    (llcorner texti+(0.375cm,0)+(-eb,-eb)){dir0}..
+    {dir0}(llcorner texti+(0.375cm,0)+(0,-2eb))--
+    (llcorner texti+(0.625cm,0)+(0,-2eb)){dir0}..
+    {dir0}(llcorner texti+(0.625cm,0)+(eb,-eb))--
+    (lrcorner texti+(0,-eb)){dir0}..{dir90}(lrcorner texti+(eb,0))--(urcorner texti+(eb,0)){dir90}..{dir-180}(urcorner texti+(0,eb))--
+    1/2[ulcorner texti+(-eb,eb),urcorner texti+(eb,eb)]{dir150}..{dir-150}(ulcorner texti+(-eb,eb))--cycle;
+  $
+enddef;
+
+vardef AFFIED(expr texta)=
+  path cadre;
+  cadre=CADREED(texta);
+  picture TEXT;
+  TEXT=image(
+    draw texta;
+    );
+  TEXT
+enddef;
+
+vardef AffichageED(expr textu)=
+  save $;
+  picture $;
+  $=AFFIED(textu);
+  $:=$ shifted (if unknown _coinprec:(0,0) else :_coinprec fi - (ulcorner $));
+_coinprec:=llcorner $;
+_coinprec:=_coinprec+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+%%% section Mouvement %%%%%%%%%%
+vardef Avancer(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("avancer de",nbpas,"pas");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Tournerd(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("tourner à droite de",nbpas,"degré(s)");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Tournerg(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("tourner à gauche de",nbpas,"degré(s)");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Orienter(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("s'orienter à",nbpas);
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Orienterdirection(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("s'orienter vers",nbpas);
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef OrienterVers(expr nbpass)=Orienterdirection(nbpass) enddef;
+
+vardef Aller(expr xa,ya)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("aller à $x =$",if string xa:xa else: xa fi," et $y =$",if string ya:ya else: ya fi);
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Glisser(expr na,xa,ya)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("glisser en", na ,"seconde(s) à $x =$", xa ,"$y =$", ya);
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Allera(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string nbpas:
+    texto=ColleBoxNew("aller à",nbpas);
+    $=Affichage(texto);
+  else:
+    message("");
+    message("La commande -- Allera -- n'accepte qu'un type string comme argument.");
+    message("");  
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef Glissera(expr na,xa)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string xa:
+    texto=ColleBoxNew("glisser en", na ,"seconde(s) à",xa);
+  $=Affichage(texto);
+else:
+  message("");
+  message("La commande -- Glissera -- n'accepte qu'un type string comme deuxième argument.");
+  message("");  
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef Ajouter(expr nba,xa)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string xa:
+    texto=ColleBoxNew("ajouter",nba,"à","$"&xa&"$");
+  $=Affichage(texto);
+else:
+  message("");
+  message("La commande -- Ajouter -- n'accepte qu'un type string comme deuxième argument.");
+  message("");  
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef Mettre(expr xa,nba)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string xa:
+    texto=ColleBoxNew("mettre","$"&xa&"$","à",nba);
+    $=Affichage(texto);
+  else:
+    message("");
+    message("La commande -- Mettre -- n'accepte qu'un type string comme premier argument.");
+    message("");  
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef Rebondir=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("rebondir si le bord est atteint");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef FixerSensRotation(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string nbpas:
+    texto=ColleBoxNew("fixer le sens de rotation",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande --FixerSensRotation-- admet un seul argument de type string");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+%%%% fin section Mouvement %%%%%%
+
+%%%%% Section Apparence %%%%%%%%%
+vardef DireT(expr na,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("dire",if string na:na else: na fi,"pendant",if string xa : xa else: xa fi,"seconde(s)");
+$=Affichage(texto);
+$
+enddef;
+
+vardef Dire(expr na)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("dire",if string na:na else: na fi);
+$=Affichage(texto);
+$
+enddef;
+
+vardef PenserT(expr na,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("penser à",if string na:na else: na fi,"pendant",if string xa : xa else: xa fi,"seconde(s)");
+$=Affichage(texto);
+$
+enddef;
+
+vardef Penser(expr na)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("penser à",if string na:na else: na fi);
+$=Affichage(texto);
+$
+enddef;
+
+vardef Montrer=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("montrer");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Cacher=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("cacher");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Basculer(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("basculer sur le costume",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande --Basculer-- n'accepte qu'un argument string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef BasculerCostume(expr nbpass)=Basculer(nbpass) enddef;
+
+vardef CostumeSuivant=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("costume suivant");
+  $=Affichage(texto);
+$
+enddef;
+
+vardef ARSuivant=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("arrière-plan suivant");
+  $=Affichage(texto);
+$
+enddef;
+
+vardef BasculerAR(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("basculer sur l'arrière-plan",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande --BasculerAR-- n'accepte qu'un argument string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef BasculerARA(expr nbpas)=%quand la scène est sélectionnée...
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("basculer sur l'arrière-plan",nbpas," et attendre");
+    $=Affichage(texto);
+  else:
+    message("La commande --BasculerARA-- n'accepte qu'un argument string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef AjouterEffet(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa:
+    texto=ColleBoxNew("ajouter",if string nbpas: nbpas else: nbpas fi," à l'effet",xa);
+  $=Affichage(texto);
+else:
+  message("La commande --AjouterEffet-- n'accepte qu'un deuxième argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef MettreEffet(expr xa,nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa:
+    texto=ColleBoxNew("mettre l'effet",xa,"à",if string nbpas:nbpas else: nbpas fi);
+  $=Affichage(texto);
+else:
+  message("La commande --MettreEffet-- n'accepte qu'un premier argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef AnnulerEffet=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("annuler les effets graphiques");
+  $=Affichage(texto);
+$
+enddef;
+
+vardef AnnulerEffets=AnnulerEffet enddef;
+
+vardef AjouterTaille(expr na)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("ajouter",if string na:na else: na fi,"à la taille");
+$=Affichage(texto);
+$
+enddef;
+
+vardef MettreA(expr na)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("mettre la taille à",if string na:na else: na fi,"\% de la taille initiale");
+$=Affichage(texto);
+$
+enddef;
+
+vardef MettreTaille(expr art)=MettreA(art) enddef;
+
+vardef AllerPlan(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("aller à l'",nbpas,"plan");
+    $=Affichage(texto);
+  else:
+    message("La commande --AllerPlan-- n'accepte qu'un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef DeplacerPlan(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa:
+    texto=ColleBoxNew("déplacer de",if string nbpas:nbpas else: nbpas fi,"plan(s) vers l'",xa);
+  $=Affichage(texto);
+else:
+  message("La commande --DeplacerPlan-- n'accepte qu'un deuxième argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+%%%%fin Section Apparance%%%%%%%%%%%%
+
+%%%%%% Section Son%%%%%%%%%%%%
+vardef Jouer(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string nbpas :
+    texto=ColleBoxNew("jouer le son",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande --Jouer-- n'accepte qu'un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef JouerT(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string nbpas:
+    texto=ColleBoxNew("jouer le son",nbpas," jusqu'au bout");
+    $=Affichage(texto);
+  else:
+    message("La commande --Jouer-- n'accepte qu'un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef ArreterSon=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("arrêter tous les sons");
+  ColBloc:=SonTrois;;
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef ArreterSons=ArreterSon enddef;
+
+vardef AjouterVol(expr xa)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("ajouter",if string xa:xa else: xa fi,"au volume");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef MettreVol(expr xa)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("mettre le volume à",if string xa: xa else: xa fi,"~\%");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef AjouterEffetSon(expr nombre, effet)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string effet:
+    texto=ColleBoxNew("ajouter",if string nombre : nombre else: nombre fi," à l'effet",effet);
+  $=Affichage(texto);
+else:
+  message("La commande -- AjouterEffet -- n'accepte qu'un deuxième argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef MettreEffetSon(expr effet,nombre)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string effet:
+    texto=ColleBoxNew("mettre l'effet",effet,"à",if string nombre:nombre else: nombre fi);
+  $=Affichage(texto);
+else:
+  message("La commande -- MettreEffet -- n'accepte qu'un argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef AnnulerEffetSon=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("annuler tous les effets sonores");
+  $=Affichage(texto);
+  $
+enddef;
+
+%Musique
+vardef Tambour(expr na,xa)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string na:
+    texto=ColleBoxNew("jouer du tambour",na,"pendant",if string xa:xa else: xa fi,"temps");
+  $=Affichage(texto);
+else:
+  message("La commande --Tambour-- n'accepte qu'un premier argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef Pause(expr na)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("faire une pause pendant",if string na: na else: na fi," temps");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef JouerNote(expr na,xa)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  texto=ColleBoxNew("jouer la note",if string na:na else: na fi," pendant",if string xa:xa else: xa fi," temps");
+$=Affichage(texto);
+$
+enddef;
+
+vardef ChoisirInstrument(expr na)=
+  LONG:=0;
+  save $;
+  picture $, texto;
+  if string na:
+    texto=ColleBoxNew("choisir l'instrument \no{}",na);
+    $=Affichage(texto);
+  else:
+    message("La commande -- ChoisirInstrument -- n'accepte qu'un argument de type string");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef MettreTempo(expr xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("mettre le tempo à",if string xa:xa else: xa fi);
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef AjouterTempo(expr xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("ajouter",if string xa:xa else: xa fi," au tempo");
+$=Affichage(texto);
+$
+enddef;
+%%%%%% fin Section Son %%%%%%%%%
+
+%%%%%% Section Stylo %%%%%%%%%
+vardef Effacer=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("effacer tout");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef Estampiller=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("estampiller");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef PoserStylo=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("stylo en position d'écriture");
+  $=Affichage(texto);
+$
+enddef;
+
+vardef ReleverStylo=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("relever le stylo");
+  $=Affichage(texto);
+$
+enddef;
+
+vardef MettreCouleur(expr redc,greenc,bluec)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("mettre la couleur du stylo à",OvalCouleur(redc,greenc,bluec));
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef AjouterCS(text t)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  numeric k; k=0;
+  for p_=t:
+    if k=1:string effet; effet=p_ fi;
+    if k=0: if string p_:string nombre; nombre=p_ else: if picture p_: picture nombre; nombre=p_; fi fi fi;
+    k:=k+1;
+  endfor;
+  texto=ColleBoxNew("ajouter",if string nombre:nombre else: nombre fi,"à la",effet,"du stylo");
+$=Affichage(texto);
+$
+enddef;
+
+vardef MettreCS(text t)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  numeric k; k=0;
+  for p_=t:
+    if k=0:string effet; effet=p_ fi;
+    if k=1: if string p_:string nombre; nombre=p_ else: if picture p_: picture nombre; nombre=p_; fi fi fi;
+    k:=k+1;
+  endfor;
+  texto=ColleBoxNew("mettre la",effet,"du stylo à",if string nombre:nombre else: nombre fi);
+$=Affichage(texto);
+$
+enddef;
+
+%taille du stylo
+vardef AjouterTS(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("ajouter",if string nbpas:nbpas else: nbpas fi,"à la taille du stylo");
+$=Affichage(texto);
+$
+enddef;
+
+vardef MettreTS(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("mettre la taille du stylo à",if string nbpas:nbpas else: nbpas fi);
+$=Affichage(texto);
+$
+enddef;
+
+%%%%%% Fin Section Stylo %%%%%%%%
+
+%%%%%% Section Contrôle %%%%%%%%%
+color colControle;
+colControle:=OrangeConTrois;
+
+vardef AffichageStop=
+  path cadre;
+  cadre=(llcorner texto+(-eb,0)){dir-90}..{dir0}(llcorner texto+(0,-eb))--
+    (lrcorner texto+(0,-eb)){dir0}..{dir90}(lrcorner texto+(eb,0))--(urcorner texto+(eb,0)){dir90}..{dir180}(urcorner texto+(0,eb))--
+    (ulcorner texto+(0.625cm,0)+(eb,eb)){dir180}..
+    {dir180}(ulcorner texto+(0.625cm,0))--
+    (ulcorner texto+(0.375cm,0)){dir180}..
+    {dir180}(ulcorner texto+(0.375cm,0)+(-eb,eb))--
+    (ulcorner texto+(0,eb)){dir180}..{dir-90}(ulcorner texto+(-eb,0))--cycle;
+  picture TEXT;
+  TEXT=image(
+    draw texto;
+    );
+  TEXT
+enddef;
+
+pair coindebutbloc[];
+numeric numblocrep;
+numblocrep:=0;
+
+vardef Repeter(expr xa)=
+  LONG:=0;
+  save $;
+  numblocrep:=numblocrep+1;
+  picture $,texto;
+  texto=ColleBoxNew("\textbf{répéter}",xa,"fois");
+  LongRep[numblocrep]:=abs(llcorner texto-lrcorner texto);%afin de conserver la longueur du"répéter..."
+  $=AffichageControle(texto);
+  $
+enddef;
+
+vardef RepeterI=
+  LONG:=0;
+  save $;
+  numblocrep:=numblocrep+1;
+  picture $,texto;
+  texto=ColleBoxNew("\textbf{répéter indéfiniment}");
+  LongRep[numblocrep]:=abs(llcorner texto-lrcorner texto);%afin de conserver la longueur du"répéter..."
+  $=AffichageControle(texto);
+  $
+enddef;
+
+vardef RepeterJ(expr xa)=
+  LONG:=0;
+  save $;
+  numblocrep:=numblocrep+1;
+  picture $,texto;
+  if picture xa:
+    texto=ColleBoxNew("\textbf{répéter jusqu'à ce que}",xa);
+    LongRep[numblocrep]:=abs(llcorner texto-lrcorner texto);%afin de conserver la longueur du"répéter..."
+      $=AffichageControle(texto);
+  else:
+    message("La commande -- RepeterJ -- n'admet qu'un argument de type picture.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef FinBlocRepeter=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  _coinprec:=_coinprec-(0.5cm,0);
+  drawoptions();
+  texto=image(
+      labeloffset:=0;
+    label.lrt(TEX("\hbox to"&decimal(LongRep[numblocrep])&"pt{\barre Titi titi titi tit itit tit it it ti}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+  labeloffset:=3;
+  );
+path cadre;
+cadre=(lrcorner texto+(-eb,0.25cm))--%
+  (llcorner texto+(0.25cm,0.25cm)+(eb,0)){dir180}..
+  {dir90}(llcorner texto+(0.25cm,0.25cm)+(0,eb))--
+  (coindebutbloc[numblocrep]+(0.25cm,0.125));
+$=image(
+    draw cadre withpen pencircle scaled 1.5;
+  );
+_coinprec:=(llcorner $);
+_coinprec:=_coinprec+(-0.25cm,eb-0.25cm);
+numblocrep:=numblocrep-1;
+$
+enddef;
+
+vardef FinBlocRepeterI=FinBlocRepeter enddef;
+
+vardef Si(expr xa)=
+  LONG:=0;
+  save $;
+  numblocrep:=numblocrep+1;
+  picture $,texto;
+  if picture xa:
+    texto=ColleBoxNew("\textbf{si}",xa,"\textbf{alors}");
+    LongRep[numblocrep]:=abs(llcorner texto-lrcorner texto);%afin de conserver la longueur du"répéter..."
+      $=AffichageControle(texto);
+  else:
+    message("La commande -- Si -- n'admet qu'un argument de type picture.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef FinBlocSi=FinBlocRepeter enddef;
+
+vardef Sinon=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  _coinprec:=_coinprec-(0.5cm,0);
+  drawoptions();
+  texto=image(
+      labeloffset:=0;
+    label.lrt(TEX("\hbox to"&decimal(LongRep[numblocrep])&"pt{\sffamily\barre\textbf{sinon}}"),if unknown _coinprec: (0,0) else:_coinprec fi) if print=false : withcolor blanc fi;
+    labeloffset:=3;
+    );
+  path cadre;
+      cadre=(ulcorner texto+(0.25cm+0.125,0))--
+	(coindebutbloc[numblocrep]+(0.25cm+0.125,0));%--
+$=image(
+  draw cadre withpen pencircle scaled 1.5;
+  draw texto;
+    );
+  _coinprec:=(llcorner $)+(0.5cm,0);
+  _coinprec:=_coinprec+(0,eb);
+  coindebutbloc[numblocrep]:=(llcorner $)+(0,eb+0.125);
+  $
+enddef;
+
+vardef Attendre(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("attendre",if string nbpas:nbpas else: nbpas fi,"seconde(s)");
+$=Affichage(texto);
+$
+enddef;
+
+vardef AttendreJ(expr xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if picture xa:
+    texto=ColleBoxNew("attendre jusqu'à ce que",xa);
+    $=Affichage(texto);
+  else:
+    message("La commande -- AttendreJ -- n'admet qu'un argument de type picture.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef Stop(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  string TTm;%Pour sauvegarder le nbpas car en l'utilisant dans les if, il ne permet pas la concaténation...
+  TTm=if print:nbpas else:"{\color{white}"&nbpas&"\hbox to1em{\barre}\blacktriangledown}";
+  fi;
+  texto=image(
+      path ti;
+    ti=Box("stop");
+    label(TEX("\sffamily\barre stop"),center ti) if print=false : withcolor white fi;%_>ok
+    if picture nbpas:
+      picture ta;
+      ta=nbpas;
+      drawoptions(shifted (xpart((lrcorner ti)-(llcorner ta)+(eb,0)),ypart(center ti-center ta)));
+      draw ta;
+      drawoptions();
+    else:
+      path ta;
+      ta=RecBox(TTm);%
+      drawoptions(shifted (xpart((lrcorner ti)-(llcorner ta)+(eb,0)),ypart(center ti-center ta)));
+%      if print=false : fill ta withcolor ControleTrois fi;
+ %     draw ta withcolor 0.95white;
+      label(TEX(TTm),center ta);
+      drawoptions();
+    fi;
+  );
+$=AffichageStop shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageStop);
+_coinprec:=llcorner $;
+_coinprec:=_coinprec;%+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+vardef CommencerClone=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("quand je commence comme un clone");
+  ColBloc:=ControleTrois;
+  $=AffichageED(texto);
+  $
+enddef;
+
+vardef CreerClone(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("créer un clone de",nbpas);
+    ColBloc:=ControleTrois;
+    $=Affichage(texto);
+  else:
+    message("La commande -- CreerClone -- accepte un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef SupprimerClone=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=image(
+      path ti;
+    ti=Box("supprimer ce clone");
+    label(TEX("\sffamily\barre supprimer ce clone"),center ti);%_>ok
+    );
+  $=AffichageStop shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageStop);
+_coinprec:=llcorner $;
+_coinprec:=_coinprec+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+%%fin Section Contrôle%%%
+
+%%%%%%%% Section Evenements %%%%%
+vardef Drapeau=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("quand le drapeau vert est cliqué");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef QPresse(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("quand la touche",nbpas,"est pressée");
+    $=AffichageED(texto);
+  else:
+    message("La commande -- QPresse -- accepte un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef QLutinPresse=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("quand ce sprite est cliqué");
+  $=AffichageED(texto);
+  $
+enddef;
+
+vardef QSpritePresse=QLutinPresse enddef;
+
+vardef QScenePressee=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("quand la scène est cliquée");
+  $=AffichageED(texto);
+  $
+enddef;
+
+vardef QBasculeAR(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("quand l'arrière-plan bascule sur",nbpas);
+      $=AffichageED(texto);
+  else:
+    message("La commande -- QBasculeAR -- accepte un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef QVolumeSup(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("quand le",nbpas,"$>$",if string xa:xa else: xa fi);
+  $=AffichageED(texto);
+else:
+  message("La commande -- QVolumeSup -- accepte un premier argument de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef QRecevoirMessage(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("quand je reçois",nbpas);
+      $=AffichageED(texto);
+  else:
+    message("La commande -- QRecevoirMessage -- accepte un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef EnvoyerMessage(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("envoyer à tous",nbpas);
+      $=Affichage(texto);
+  else:
+    message("La commande -- EnvoyerMessage -- accepte un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef EnvoyerMessageA(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("envoyer à tous",nbpas,"et attendre");
+      $=Affichage(texto);
+  else:
+    message("La commande -- EnvoyerMessageA -- accepte un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+%%Fin section Evenement%%%
+
+%%%% Section Bloc %%%%
+vardef AffichageBlocDef=
+  path cadre;
+  cadre=(llcorner texto+(-eb,0)){dir-90}..{dir0}(llcorner texto+(0,-eb))--
+      (llcorner texto+(0.375cm,0)+(-eb,-eb)){dir0}..
+      {dir0}(llcorner texto+(0.375cm,0)+(0,-2eb))--
+      (llcorner texto+(0.625cm,0)+(0,-2eb)){dir0}..
+      {dir0}(llcorner texto+(0.625cm,0)+(eb,-eb))--
+      (lrcorner texto+(0,-eb)){dir0}..{dir90}(lrcorner texto+(eb,0))--
+      (urcorner texto+(eb,eb)){dir90}..{dir180}(urcorner texto+(0,2eb))--
+      (ulcorner texto+(0,2eb)){dir180}..
+      {dir-90}(ulcorner texto+(-eb,eb))--
+      cycle;
+  picture TEXT;
+  TEXT=image(
+    draw texto;
+    );
+  TEXT
+enddef;
+
+vardef Bloc(text nomblocbloc)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=image(
+      picture CBbloc;
+    CBbloc=ColleBoxNew(nomblocbloc);
+    draw CBbloc;
+    );
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef NouveauBloc(text nbpasbloc)=
+  LONG:=0;
+  save $;
+  numblocrep:=numblocrep+1;
+  picture $,texto;
+  texto=ColleBoxNew("Définir",nbpasbloc);
+  LongRep[numblocrep]:=abs(llcorner texto-lrcorner texto);%afin de conserver la longueur du"répéter..."
+  $=AffichageControle(texto);
+  $
+enddef;
+
+vardef FinNouveauBloc=%
+  LONG:=0;
+  save $;
+  picture $,texto;
+  _coinprec:=_coinprec-(0.5cm,0);
+  drawoptions();
+  texto=image(
+      labeloffset:=0;
+    label.lrt(TEX("\hbox to"&decimal(LongRep[numblocrep])&"pt{\phantom{\barre fin du bloc}}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+  labeloffset:=3;
+  );
+path cadre;
+cadre=(llcorner texto+(0.25cm,0.25cm)+(0,eb))--
+  (coindebutbloc[numblocrep]+(0.25cm,0.125));
+$=image(
+    draw cadre withpen pencircle scaled 1.5;
+  );
+_coinprec:=(llcorner $);
+_coinprec:=_coinprec+(-0.25cm,eb-0.25cm);
+numblocrep:=numblocrep-1;
+$
+enddef;
+%%%% Fin Section Bloc%%%%
+
+%%% Section Divers%%%
+vardef CommandeVide(expr commande)=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  if string commande :
+    texto=image(
+	label.lrt(TEX("\barre \hbox to"&commande&"cm{}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+    );
+else:
+  texto=commande;
+fi;
+ColBloc:=white;
+$=Affichage(texto);
+$
+enddef;
+
+vardef LigneVide=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  texto=image(
+      label.lrt(TEX("\barre \hbox to2cm{}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+  );
+TEXT=image(
+    path cadre;
+  cadre=CADRE(texto);
+  unfill cadre;
+  );
+$=TEXT shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner TEXT);
+_coinprec:=llcorner $;
+_coinprec:=_coinprec+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+vardef LigneVideVar(expr commande)=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  if string texto:
+    texto=image(
+	label.lrt(TEX("\barre \hbox to2cm{}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+    );
+else:
+  texto=commande;
+fi;
+TEXT=image(
+    path cadre;
+  cadre=(llcorner texto+(-eb,0))--(llcorner texto+(0,-eb))--
+    (llcorner texto+(0.375cm,0)+(-eb,-eb))--
+    (llcorner texto+(0.375cm,0)+(0,-2eb))--
+    (llcorner texto+(0.625cm,0)+(0,-2eb))--
+    (llcorner texto+(0.625cm,0)+(eb,-eb))--
+    (lrcorner texto+(0,-eb))--(lrcorner texto+(eb,0))--(urcorner texto+(eb,0))--(urcorner texto+(0,eb))--
+    (ulcorner texto+(0.625cm,0)+(eb,eb))--
+    (ulcorner texto+(0.625cm,0))--
+    (ulcorner texto+(0.375cm,0))--
+    (ulcorner texto+(0.375cm,0)+(-eb,eb))--
+    (ulcorner texto+(0,eb))--(ulcorner texto+(-eb,0))--cycle;
+  fill cadre withcolor white;
+  );
+$=TEXT shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner TEXT);
+_coinprec:=llcorner $;
+_coinprec:=_coinprec+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+vardef LignePointilles=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  texto=image(
+      label.lrt(TEX("\barre\Large \strut\ldots\hbox to1em{}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+  );
+TEXT=image(
+    path cadre;
+  cadre=CADRE(texto);
+  draw texto;
+  );
+$=TEXT shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner TEXT);
+_coinprec:=llcorner $;
+_coinprec:=_coinprec+(0,eb);
+_coincom:=1/2[lrcorner $,urcorner $]+(eb,0);
+_coinnum:=(xpart(DebutListe+(-3*eb,0)),ypart(1/2[llcorner $,ulcorner $]));
+if NumeroteLignes=true:
+  label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinnum);
+  Nblignes:=Nblignes+1;
+fi;
+$
+enddef;
+
+vardef Commentaires(expr commande)=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  texto=image(
+      label.lrt(TEX("\barre "& commande &""),if unknown _coinprec: (0,0) else:_coinprec fi) withcolor 0.5*white;
+  );
+TEXT=image(
+    path cadre;
+  cadre=CADRE(texto);
+  fill cadre withcolor white;
+  draw texto;
+  );
+$=TEXT shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner TEXT);
+_coinprec:=llcorner $;
+_coinprec:=_coinprec+(0,eb);
+$
+enddef;
+
+color colcom;
+colcom=0.5white;
+
+vardef CommentairesLigne(expr commande)=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  TEXT=image(
+      label.rt(TEX(commande), _coincom) withcolor colcom;
+  );
+$=TEXT shifted (_coincom - 1/2[llcorner TEXT,ulcorner TEXT]);
+$
+enddef;
+
+vardef BlocGris(expr ar)=
+  LONG:=0;
+  save $;  picture $;
+  path ta; string TTm;
+  TTm=ar&"\barre";
+  ta=OvalMiniBox(TTm);
+  $=image(
+    fill ta withcolor 0.975white;
+    draw ta withcolor 0.85white;
+    label(TEX(TTm),center ta) if print=false : withcolor blanc fi;
+    );
+$
+enddef;
+
+vardef BlocGrisMulti(text argris)=
+  LONG:=0;
+  save $;  picture $;
+  path ta; picture TTm;
+  TTm=ColleBoxNew(argris);
+  ta=OvalMiniBox(TTm);
+  $=image(
+    draw ta;
+    );
+$
+enddef;
+
+boolean BlocE;
+BlocE:=false;
+
+vardef BlocUser(expr colblocuser)(text textbloc)=
+  LONG:=0;
+  save $;
+  picture $;
+  save TA;  path TA; picture BUTB; picture texto; picture TEXT;
+  BUTB=ColleBoxNew(textbloc);
+  TA=Box(BUTB);
+  texto=image(
+      draw BUTB;
+    );
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef BlocCouleur(expr colblocuser)=
+  LONG:=0;
+  save $;
+  picture $,texto,TEXT;
+  texto=image(
+      label.lrt(TEX("\barre \hbox to4cm{}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+  );
+$=Affichage(texto);
+$
+enddef;
+%% fin Section Divers %%%
+
+%% Section Capteur %%%%
+vardef Demander(expr nbpas)=
+  LONG:=0;
+  save Dem;
+  picture Dem,texto;
+  if string nbpas:
+    texto=ColleBoxNew("demander",nbpas,"et attendre");
+    Dem=Affichage(texto);
+  else:
+    message("La commande -- Demander -- admet un argument de type string.");
+    Dem=nullpicture;
+  fi;
+  Dem
+enddef;
+
+vardef ReinitChrono=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  texto=ColleBoxNew("réinitialiser le chronomètre");
+  $=Affichage(texto);
+  $
+enddef;
+
+vardef MettreGlissement(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("mettre mode de glissement à",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande -- MettreGlissement -- admet un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+%video
+vardef ActiverVideo(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("vidéo",nbpas);
+      $=Affichage(texto);
+  else:
+    message("La commande -- ActiverVideo -- admet un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef TransparenceVideo(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("mettre la transparence vidéo sur",nbpas);
+      $=Affichage(texto);
+  else:
+    message("La commande -- TransparenceVideo -- admet un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef QuandMV(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas:
+    texto=ColleBoxNew("quand mouvement vidéo $>$",nbpas);
+    $=AffichageED(texto);
+  else:
+    message("La commande -- QuandMV -- admet un argument de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef VideoSur(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if (string nbpas) and (string xa):
+    texto=ColleBoxNew("vidéo",nbpas,"sur",xa);
+    path ta;
+    ta=OvalBox(texto);
+    $=image(
+	draw ta withcolor CoulLignes;
+      draw texto;
+      );
+  else:
+    message("La commande -- VideoSur -- admet deux arguments de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+%% fin Section Capteur %%%
+
+%%% Section Variables %%%
+vardef MettreVar(expr nbpas,xa)=
+  LONG:=0;
+  save MV;
+  picture MV,texto;
+  if string nbpas :
+    texto=ColleBoxNew("mettre",nbpas,"à",if string xa:xa else: xa fi);
+    MV=Affichage(texto);
+  else:
+    message("La commande -- MettreVar -- admet un premier paramètre de type string.");
+    MV=nullpicture;
+  fi;
+  MV
+enddef;
+
+vardef AjouterVar(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa :
+    texto=ColleBoxNew("ajouter",if string nbpas:nbpas else: nbpas fi,"à",xa);
+  $=Affichage(texto);
+else:
+  message("La commande -- AjouterVar -- admet un deuxième paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef MontrerVar(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas :
+    texto=ColleBoxNew("montrer la variable",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande -- MontrerVar -- admet un premier paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef CacherVar(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas :
+    texto=ColleBoxNew("cacher la variable",nbpas);
+    $=Affichage(texto);
+  else:
+    message("La commande -- CacherVar -- admet un premier paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+%Liste
+vardef AjouterListe(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa :
+    texto=ColleBoxNew("ajouter",if string nbpas:nbpas else: nbpas fi,"à",xa);
+  $=Affichage(texto);
+else:
+  message("La commande -- AjouterListe -- admet un deuxième paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef SupprimerListe(expr nbpas,xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa :
+    texto=ColleBoxNew("supprimer l'élément",if string nbpas:nbpas else: nbpas fi,"de",xa);
+  $=Affichage(texto);
+else:
+  message("La commande -- SupprimerListe -- admet un deuxième paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef SupprimerListeAll(expr nbpas)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas :
+      texto=ColleBoxNew("supprimer tous les éléments de la liste",nbpas);
+      $=Affichage(texto);
+else:
+  message("La commande -- SupprimerListe -- admet un deuxième paramètre de type string.");
+    $=nullpicture;
+fi;
+$
+enddef;
+
+vardef InsererListe(expr xa,nbpas,ya)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string ya :
+      texto=ColleBoxNew("insérer",if string xa:xa else: xa fi,"en position",if string nbpas:nbpas else: nbpas fi,"de",ya);
+      $=Affichage(texto);
+  else:
+    message("La commande -- InsererListe -- admet un troisième paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef RemplacerListe(expr xa,nbpas,ya)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string nbpas :
+    texto=ColleBoxNew("remplacer l'élément",if string xa:xa else: xa fi,"de la liste",nbpas,"par",if string ya:ya else: ya fi);
+  $=Affichage(texto);
+else:
+  message("La commande -- RemplacerListe -- admet un deuxième paramètre de type string.");
+  $=nullpicture;
+fi;
+$
+enddef;
+
+vardef MontrerListe(expr xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa :
+    texto=ColleBoxNew("montrer la liste",xa);
+      $=Affichage(texto);
+  else:
+    message("La commande -- MontrerListe -- admet un paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+vardef CacherListe(expr xa)=
+  LONG:=0;
+  save $;
+  picture $,texto;
+  if string xa :
+    texto=ColleBoxNew("cacher la liste",xa);
+      $=Affichage(texto);
+  else:
+    message("La commande -- CacherListe -- admet un paramètre de type string.");
+    $=nullpicture;
+  fi;
+  $
+enddef;
+
+%%% Section Operateur %%%
+
+vardef OpRecap(expr pasun,signe,pasdeux)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew(if string pasun : pasun else: pasun fi,signe,if string pasdeux : pasdeux else: pasdeux fi);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+    draw LOPop;
+  );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef OpAdd(expr pasun,pasdeux)=OpRecap(pasun,"$+$",pasdeux) enddef;
+
+vardef OpSous(expr pasun,pasdeux)=OpRecap(pasun,"$-$",pasdeux) enddef;
+
+vardef OpMul(expr pasun,pasdeux)=OpRecap(pasun,"$\times$",pasdeux) enddef;
+
+vardef OpDiv(expr pasun,pasdeux)=OpRecap(pasun,"$\div$",pasdeux) enddef;
+
+vardef OpModulo(expr pasun,pasdeux)=OpRecap(pasun,"modulo",pasdeux) enddef;
+
+vardef OpFonction(expr pasun,pasdeux)=OpRecap(pasun,"de",pasdeux) enddef;
+
+vardef OpAlea(expr pasun,pasdeux)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew("nombre aléatoire entre",if string pasun : pasun else: pasun fi,"et",if string pasdeux : pasdeux else: pasdeux fi);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+    draw LOPop;
+  );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef OpRegrouper(expr pasun,pasdeux)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew("regrouper",if string pasun : pasun else: pasun fi,"et",if string pasdeux : pasdeux else: pasdeux fi);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+    draw LOPop;
+  );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef OpLettre(expr pasun,pasdeux)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew("lettre",if string pasun : pasun else: pasun fi,"de",if string pasdeux : pasdeux else: pasdeux fi);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+    draw LOPop;
+  );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef OpLongueur(expr pasun)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew("longueur de",if string pasun : pasun else: pasun fi);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+    draw LOPop;
+  );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef OpArrondi(expr pasun)=
+  save Oop; picture Oop;
+  save TAao; path TAao;
+  save LOPop; picture LOPop;
+  LOPop=ColleBoxNew("arrondi de",if string pasun : pasun else: pasun fi);
+  TAao=OvalBox(LOPop);
+  Oop=image(
+    draw LOPop;
+  );
+  Oop:=Oop shifted(-center Oop);
+  Oop
+enddef;
+
+vardef TestOpRecap(expr pasun,entredeux,pasdeux)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew(if string pasun : pasun else: pasun fi,entredeux,if string pasdeux : pasdeux else: pasdeux fi);
+  TAa=DiamondBox(LTa);
+  $=image(
+    draw LTa;
+  );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestOpSup(expr pasun, pasdeux)=TestOpRecap(pasun,"$>$",pasdeux) enddef;
+
+vardef TestOpInf(expr pasun, pasdeux)=TestOpRecap(pasun,"$<$",pasdeux) enddef;
+
+vardef TestOpEgal(expr pasun, pasdeux)=TestOpRecap(pasun,"$=$",pasdeux) enddef;
+
+vardef TestOpEt(expr pasun, pasdeux)=TestOpRecap(pasun,"et",pasdeux) enddef;
+
+vardef TestOpOu(expr pasun, pasdeux)=TestOpRecap(pasun,"ou",pasdeux) enddef;
+
+vardef TestOpContient(expr pasun, pasdeux)=TestOpRecap(pasun,"contient",pasdeux) enddef;
+
+vardef TestOpNon(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("non",if string pasun : pasun else: pasun fi);
+  TAa=DiamondBox(LTa);
+  $=image(
+    draw LTa;
+  );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef AppCostume(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew(pasun,"du costume");
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef AppAP(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew(pasun,"de l'arrière-plan");
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef CapDistance(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("distance de",pasun);
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef CapTemps(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew(pasun,"actuelle");
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef CapNumero(expr pasun,pasdeux)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew(pasun,"de",pasdeux);
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestCapToucheObjet(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("touche le",pasun,"?");
+  TAa=DiamondBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestCapCouleur(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("couleur",OvalCouleur(redpart(pasun),greenpart(pasun),bluepart(pasun)),"touchée ?");
+  TAa=DiamondBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestCapCouleurs(expr pasun,pasdeux)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("couleur",OvalCouleur(redpart(pasun),greenpart(pasun),bluepart(pasun)),"touche",OvalCouleur(redpart(pasdeux),greenpart(pasdeux),bluepart(pasdeux)),"?");
+  TAa=DiamondBox(LTa);
+  $=image(
+    draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestCapTouche(expr pasun)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("touche",pasun,"pressée ?");
+  TAa=DiamondBox(LTa);
+  $=image(
+      draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestCapSouris=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("souris pressée ?");
+  TAa=DiamondBox(LTa);
+  $=image(
+      draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef TestListeContient(expr nbpas,nbbas)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew(nbpas,"contient",if string nbbas:nbbas else: nbbas fi);
+  TAa=DiamondBox(LTa);
+  $=image(
+    draw LTa;
+  );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef ListeElement(expr nbpas,nbbas)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("élément",if string nbpas:nbpas else: nbpas fi,"de",nbbas);
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+  );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef ListePosition(expr nbpas,nbbas)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("position de",if string nbpas:nbpas else: nbpas fi,"de",nbbas);
+  TAa=OvalBox(LTa);
+  $=image(
+    draw LTa;
+  );
+  $:=$ shifted(-center $);
+  $
+enddef;
+
+vardef ListeLongueur(expr nbpas)=
+  save $; picture $;
+  save TAa; path TAa;
+  save LTa; picture LTa;
+  LTa=ColleBoxNew("longueur de",nbpas);
+  TAa=OvalBox(LTa);
+  $=image(
+      draw LTa;
+    );
+  $:=$ shifted(-center $);
+  $
+enddef;


Property changes on: trunk/Master/texmf-dist/metapost/profcollege/PfCPseudo.mp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCScratch.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCScratch.mp	2022-07-14 20:19:30 UTC (rev 63894)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCScratch.mp	2022-07-14 20:20:19 UTC (rev 63895)
@@ -287,7 +287,7 @@
 vardef OvalCapMenu(expr ar)=
   save $; picture $;
   string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TAMC;
   TAMC=OvalBox(TTm);
@@ -317,8 +317,8 @@
 vardef OvalMouvMenu(expr ar)=
   save $;  picture $;
   path ta; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else:
-      "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}"
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else:
+      "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}"
   fi;
   ta=OvalBox(TTm);
   $=image(
@@ -332,7 +332,7 @@
 vardef OvalAppMenu(expr ar)=
   save $;  picture $;
   path ta; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   ta=OvalBox(TTm);
   $=image(
@@ -349,7 +349,7 @@
   save $; save TA;
   picture $;
   string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TA;
   TA=OvalBox(TTm);
@@ -365,7 +365,7 @@
   save $; save TA;
   picture $;
   string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TA;
   TA=OvalBox(TTm);
@@ -383,11 +383,11 @@
   string TT,TTI;
   if string ar:
     if print:
-      TT=ar&"\hbox to1em{\barre}\blacktriangledown"
+      TT=ar&"\hbox to1em{}\barre\blacktriangledown"
     else:
-      TT=ar&"\hbox to1em{\barre}{\color{white}\blacktriangledown}"
+      TT=ar&"\hbox to1em{}\barre{\color{white}\blacktriangledown}"
     fi;
-    TTI=ar&"\hbox to1em{\barre}\phantom{\blacktriangledown}";
+    TTI=ar&"\hbox to1em{}\barre\phantom{\blacktriangledown}";
     path TA;
     TA=OvalBox(TT);
     $=image(
@@ -420,7 +420,7 @@
   save $; save TA;
   picture $;
   string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TA;
   TA=OvalBox(TTm);
@@ -436,7 +436,7 @@
 vardef RecMouvMenu(expr ar)=
   save $;  picture $;
   path ta; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}"
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}"
   fi;
   ta=RecBox(TTm);
   $=image(
@@ -450,7 +450,7 @@
 vardef RecMenuApp(expr ar)=
   save $;  picture $;
   save ta; path ta; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   ta=RecBox(TTm);
   $=image(
@@ -464,7 +464,7 @@
 vardef RecMenuOp(expr ar)=
   save $; save TA;
   picture $; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TA;
   TA=RecBox(TTm);
@@ -479,7 +479,7 @@
 vardef RecMenuSon(expr ar)=
   save $; save TA;
   picture $; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}" fi;
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}" fi;
   path TA;
   TA=RecBox(TTm);
   $=image(
@@ -493,7 +493,7 @@
 vardef RecEvenementMenu(expr ar)=
   save $;  picture $;
   path ta; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   ta=RecBox(TTm);
   $=image(
@@ -507,7 +507,7 @@
 vardef RecMenuCap(expr ar)=
     save $;  picture $;
   path ta; string TTm;
-    TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+    TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
     fi;
   ta=RecBox(TTm);
   $=image(
@@ -521,7 +521,7 @@
 vardef RecMenuVar(expr ar)=
   save $; save TA;
   picture $; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TA;
   TA=RecBox(TTm);
@@ -536,7 +536,7 @@
 vardef RecMenuList(expr ar)=
   save $; save TA;
   picture $; string TTm;
-  TTm=if print:ar&"\hbox to1em{\barre}\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:ar&"\hbox to1em{}\barre\blacktriangledown" else: "{\color{white}"&ar&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   path TA;
   TA=RecBox(TTm);
@@ -1654,7 +1654,7 @@
   drawoptions();
   texto=image(
       labeloffset:=0;
-    label.lrt(TEX("\hbox to"&decimal(LongRep[numblocrep])&"pt{\phantom{\barre fin du bloc}}"),if unknown _coinprec: (0,0) else:_coinprec fi);
+    label.lrt(TEX("\barre\hbox to"&decimal(LongRep[numblocrep])&"pt{~~}"),if unknown _coinprec: (0,0) else:_coinprec fi);
   labeloffset:=3;
   );
 path cadre;
@@ -1973,7 +1973,7 @@
   save $;
   picture $,texto;
   string TTm;%Pour sauvegarder le nbpas car en l'utilisant dans les if, il ne permet pas la concaténation...
-  TTm=if print:nbpas&"\hbox to1em{\barre}\blacktriangledown" else:"{\color{white}"&nbpas&"\hbox to1em{\barre}\blacktriangledown}";
+  TTm=if print:nbpas&"\hbox to1em{}\barre\blacktriangledown" else:"{\color{white}"&nbpas&"\hbox to1em{}\barre\blacktriangledown}";
   fi;
   texto=image(
       path ti;
@@ -3138,7 +3138,7 @@
   save $; picture $;
   save TAa; path TAa;
   save LTa; picture LTa;
-  LTa=ColleBoxNew(if string pasun : OvalNb(pasun) else: pasun fi,"contient",if string pasun : OvalNb(pasdeux) else: pasun fi,"?");
+  LTa=ColleBoxNew(if string pasun : OvalNb(pasun) else: pasun fi,"contient",if string pasdeux : OvalNb(pasdeux) else: pasdeux fi,"?");
   TAa=DiamondBox(LTa);
   $=image(
       fill TAa if print=false : withcolor FondOvalOp else : withcolor coefprint*white fi;

Modified: trunk/Master/texmf-dist/metapost/profcollege/PfCScratchpdf.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/profcollege/PfCScratchpdf.mp	2022-07-14 20:19:30 UTC (rev 63894)
+++ trunk/Master/texmf-dist/metapost/profcollege/PfCScratchpdf.mp	2022-07-14 20:20:19 UTC (rev 63895)
@@ -3170,7 +3170,7 @@
   save $; picture $;
   save TAa; path TAa;
   save LTa; picture LTa;
-  LTa=ColleBoxNew(if string pasun : OvalNb(pasun) else: pasun fi,"contient",if string pasun : OvalNb(pasdeux) else: pasun fi,"?");
+  LTa=ColleBoxNew(if string pasun : OvalNb(pasun) else: pasun fi,"contient",if string pasdeux : OvalNb(pasdeux) else: pasdeux fi,"?");
   TAa=DiamondBox(LTa);
   $=image(
       fill TAa if print=false : withcolor FondOvalOp else : withcolor coefprint*white fi;

Modified: trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2022-07-14 20:19:30 UTC (rev 63894)
+++ trunk/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty	2022-07-14 20:20:19 UTC (rev 63895)
@@ -2,7 +2,7 @@
 % licence    : Released under the LaTeX Project Public License v1.3c
 % or later, see http://www.latex-project.org/lppl.txtf
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfCollege}[2022/07/01 v0.99-r Aide pour utiliser LaTeX au college]
+\ProvidesPackage{ProfCollege}[2022/07/15 v0.99-s Aide pour utiliser LaTeX au college]
 
 \RequirePackage{verbatim}
 
@@ -209,10 +209,10 @@
   }%
 }%
 
-\newcount\rappeljour
+\newcount\PfCrappeljour
 
 \newcommand\Demain{%
-  \rappeljour=\day\relax%
+  \PfCrappeljour=\day\relax%
   \advance\day by 1\relax%
   \ifnum\month=1\relax%
   \ifnum\day>31\relax%
@@ -334,7 +334,7 @@
   \today\relax%
   \fi%
   \fi%
-  \day=\the\rappeljour\relax%
+  \day=\the\PfCrappeljour\relax%
 }
 
 %%%
@@ -573,9 +573,19 @@
 \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}
+\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\ExtraitSymboles[1]{%
   \xdef\CANSGFoo{}%
   \foreachitem\compteur\in\ListeObjetsSymbolesCAN{%
@@ -722,7 +732,7 @@
   \useKVdefault[ClesCN]%
   \setKV[ClesCN]{#1}%
   \ifboolKV[ClesCN]{Theme}{\renewcommand\CNTheme[1]{{\ttfamily Thème : ##1}\par}}{}%
-  \ifboolKV[ClesCN]{RAZ}{%\setcounter{CNNumQ}{1}}{}%
+  \ifboolKV[ClesCN]{RAZ}{%
     \setcounter{CNNumQ}{\useKV[ClesCN]{Debut}}%
   }{}%
   \setKV[ClesMathAlea]{NbQ=1}%
@@ -5421,8 +5431,8 @@
 %%%
 %% D'après https://www.facebook.com/groups/994675223903586/user/100017057226847
 %% et une programmation de Laurent Lassale-Carrere
-\newcounter{nexo}
-\newtcolorbox[use counter=nexo,number format=\arabic]{RapidoBox}{%
+\newcounter{PfCnexo}
+\newtcolorbox[use counter=PfCnexo,number format=\arabic]{RapidoBox}{%
   % Titre
   colbacktitle=white,
   fonttitle=\color{black}\Large\bfseries,
@@ -5452,7 +5462,7 @@
 \setKV[ClesRapido]{#1}%
 %
 \ifboolKV[ClesRapido]{Debut}{%
-  \setcounter{nexo}{\fpeval{\useKV[ClesRapido]{Numero}-1}}
+  \setcounter{PfCnexo}{\fpeval{\useKV[ClesRapido]{Numero}-1}}
 }{}%
 \setlength{\WidthRapido}{\useKV[ClesRapido]{Largeur}}%
 %
@@ -6660,35 +6670,38 @@
 %%%
 % Somme des angles
 %%%
-\setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Figure=false,FigureSeule=false,Angle=0,Perso=false,Echelle=1cm}%
+\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#6#7{
+\def\MPFigureSommeAngle#1#2#3#4#5{
     % #1 Premier sommet
     % #2 Deuxi\`eme sommet
     % #3 Troisi\`eme sommet
     % #4 1er angle
     % #5 2eme angle
-    % #6 0 isoc\`ele / 1 pas isoc\`ele
   \ifluatex
   \mplibcodeinherit{enable}
   \mplibforcehmode
   \begin{mplibcode}
-    pair A,B,C,O,I;%
+        pair A,B,C,O,I;%
     u:=\useKV[ClesSommeAngle]{Echelle};
-    % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure
+    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)]);
-    % 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;
+    fi;
+    O=CentreCercleC(A,B,C);
     % On tourne pour \'eventuellement moins de lassitude :)
-    A:=A rotatedabout(O,#7);
-    B:=B rotatedabout(O,#7);
-    C:=C rotatedabout(O,#7);
+    A:=rotation(A,O,Angle);
+    B:=rotation(B,O,Angle);
+    C:=rotation(C,O,Angle);
     % 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];
+    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;
@@ -6695,11 +6708,19 @@
     % pour marquer les angles
     path cc;
     cc=fullcircle scaled 1u;
-    % on marque les angles
     picture MAngle;
+    path cd; pair M[];
     MAngle=image(%
-    if #6=0:%Pour l'isocèle
-    path cd; pair M[];
+    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];
@@ -6707,8 +6728,13 @@
     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 B);
     draw (cc shifted C);
     );
     draw MAngle;
@@ -6720,45 +6746,62 @@
     label(btex #1 etex,1.2[O,A]);
     label(btex #2 etex,1.2[O,B]);
     label(btex #3 etex,1.2[O,C]);
-    if #6=0:
-    if #4=#5:
+    % 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;
-    label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+    fi;
+    % Affichage des angles:
+    if Isocele:
+    if Rectangle:
     label(btex ? etex,A+0.95u*unitvector(I-A));
     else:
-    marque_s:=marque_s/2;
-    draw Codelongueur(A,B,A,C,2);
-    marque_s:=marque_s*2;
+    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;
-    %fi;
   \end{mplibcode}
   \mplibcodeinherit{disable}
   \else
-  \begin{mpost}[mpsettings={u:=\useKV[ClesSommeAngle]{Echelle};}]
+  \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;%
-    % 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);
+    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)]);
-    % 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;
+    fi;
+    O=CentreCercleC(A,B,C);
     % On tourne pour \'eventuellement moins de lassitude :)
-    A:=A rotatedabout(O,#7);
-    B:=B rotatedabout(O,#7);
-    C:=C rotatedabout(O,#7);
+    A:=rotation(A,O,Angle);
+    B:=rotation(B,O,Angle);
+    C:=rotation(C,O,Angle);
     % 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];
+    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;
@@ -6765,11 +6808,33 @@
     % pour marquer les angles
     path cc;
     cc=fullcircle scaled 1u;
-    % on marque les angles
     picture MAngle;
-    MAngle=image(
+    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 B);
     draw (cc shifted C);
     );
     draw MAngle;
@@ -6781,26 +6846,42 @@
     label(btex #1 etex,1.2[O,A]);
     label(btex #2 etex,1.2[O,B]);
     label(btex #3 etex,1.2[O,C]);
-    if #6=0:
-    if #4=#5:
+    % 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;
-    label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+    fi;
+    % Affichage des angles:
+    if Isocele:
+    if Rectangle:
     label(btex ? etex,A+0.95u*unitvector(I-A));
     else:
-    marque_s:=marque_s/2;
-    draw Codelongueur(A,B,A,C,2);
-    marque_s:=marque_s*2;
+    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;
-    %fi;
   \end{mpost}
   \fi
 }
@@ -6811,9 +6892,8 @@
   % #1 : nom du triangle pA pB pC
   % #2 : mesure de l'angle pApBpC
   % #3 : mesure de l'angle pBpCpA
-  % la macro calculant la mesure de l'angle pCpApB
-  \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe.
-  \setKV[ClesSommeAngle]{#1}%On lit les arguments optionnels
+  \useKVdefault[ClesSommeAngle]%
+  \setKV[ClesSommeAngle]{#1}%
   % On r\'ecup\`ere les noms des sommets.
   \StrMid{#2}{1}{1}[\NomA]%
   \StrMid{#2}{2}{2}[\NomB]%
@@ -6823,32 +6903,53 @@
   \xdef\NomSommetA{\NomA}%
   \xdef\NomSommetC{\NomC}%
   % On r\'edige
-  \ifboolKV[ClesSommeAngle]{Perso}{\RedactionSomme}{Dans le triangle $\NomA\NomB\NomC$,\ifboolKV[ClesSommeAngle]{Isocele}{ isoc\`ele en \NomA,}{} on a :}%
-      \ifboolKV[ClesSommeAngle]{Isocele}{%
-        \ifx\bla#4\bla%
-        \begin{align*}%
+  \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%
-      }{%
+                                                                                                                               \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}}%\\
@@ -6856,15 +6957,15 @@
       \end{align*}%
       \xdef\ResultatAngle{\totalangle}%
     }%
+  }%
 }%
 
-\newcommand\SommeAngles[4][]{%
+\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
-  % la macro calculant la mesure de l'angle pCpApB
   \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe.
-  \setKV[ClesSommeAngle]{#1}%On lit les arguments optionnels
+  \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]%
@@ -6872,13 +6973,12 @@
   % Figure ou pas ?
   \ifboolKV[ClesSommeAngle]{FigureSeule}{%
     \ifx\bla#3\bla%
-    \xdef\Intermed{\fpeval{0.5*(180-#4)}}%
-    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}{\useKV[ClesSommeAngle]{Angle}}%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}%
     \else%
     \ifx\bla#4\bla%
-    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}{\useKV[ClesSommeAngle]{Angle}}%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}%
     \else%
-    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}{\useKV[ClesSommeAngle]{Angle}}%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}%
     \fi%
     \fi%
   }{%
@@ -6886,17 +6986,15 @@
       \begin{multicols}{2}%
         {\em La figure est donn\'ee \`a titre indicatif.}%
         \ifx\bla#3\bla%
-        \xdef\Intermed{\fpeval{0.5*(180-#4)}}%
-        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}{\useKV[ClesSommeAngle]{Angle}}\]%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}\]%
         \else%
         \ifx\bla#4\bla%
-        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}{\useKV[ClesSommeAngle]{Angle}}\]%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}\]%
         \else%
-        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}{\useKV[ClesSommeAngle]{Angle}}\]%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}\]%
         \fi%
         \fi%
         \par\columnbreak\par%
-        % on r\'edige
         \RedactionSom[#1]{#2}{#3}{#4}%
       \end{multicols}%
     }{% on r\'edige
@@ -7103,6 +7201,7 @@
   % #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]%
@@ -7255,7 +7354,6 @@
             }
             \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})}}%
               \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}\\
@@ -7263,7 +7361,7 @@
                 \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}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+                                                               \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%
@@ -7276,7 +7374,7 @@
                 \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}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+                                                                 \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%
@@ -7299,7 +7397,7 @@
               \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}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+                                                               \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
@@ -7312,7 +7410,7 @@
                 \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}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+                                                                 \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*}
             }{%
@@ -7324,7 +7422,7 @@
                 \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}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+                                                                 \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*}
             }%
@@ -8343,9 +8441,9 @@
   \useKVdefault[ClesNombrePremier]%
   \setKV[ClesNombrePremier]{#1}%
   \ifboolKV[ClesNombrePremier]{Impose}{\NombrePremierImpose{#2}{\useKV[ClesNombrePremier]{Nombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{Nombre}}}}{}%
-  \ifboolKV[ClesNombrePremier]{ImposeAll}{\NombrePremierImposeAll{#2}{\useKV[ClesNombrePremier]{AllNombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{AllNombre}}}}{}%
+  \ifboolKV[ClesNombrePremier]{ImposeAll}{\NombrePremierImpose{#2}{\useKV[ClesNombrePremier]{AllNombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{AllNombre}}}}{}%
   \ifboolKV[ClesNombrePremier]{Tableau}{\NombrePremier{#2}}{}%
-  \ifboolKV[ClesNombrePremier]{TableauVide}{\NombrePremierVide{#2}}{}%
+  \ifboolKV[ClesNombrePremier]{TableauVide}{\NombrePremier{#2}}{}%
   \ifboolKV[ClesNombrePremier]{Potence}{\NombrePremierPotence{#2}}{}%
   \ifboolKV[ClesNombrePremier]{TableauVertical}{\NombrePremierVertical{#2}}{}%
   \ifboolKV[ClesNombrePremier]{TableauVerticalVide}{\NombrePremierVerticalVide{#2}}{}%
@@ -8682,7 +8780,7 @@
 
 \newcommand\NombrePremier[1]{%\'ecrire la d\'ecomposition compl\`ete
   % #1 le nombre premier \`a tester
-  \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f%
+  \newcount\anp\newcount\bnp\newcount\cnp%
   \anp=#1\relax
   \bnp=2\relax
   \premier=-1\relax
@@ -8701,45 +8799,19 @@
     Le nombre \num{#1} est un nombre premier.
   \else
     \begin{align*}
-      \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\xintifboolexpr{##1<\premier}{\\}{}}%
+      \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
 }
 
-\newcommand\NombrePremierVide[1]{%\'ecrire la d\'ecomposition compl\`ete
-  % #1 le nombre premier \`a tester
-  \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f%
-  \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}&=\phantom{\PremierEtape{#1}{##1}}\xintifboolexpr{##1<\premier}{\\}{}}%
-    \end{align*}
-  \fi
-}
-
 \newcount\premierun
 \newcount\premierdeux
 
-\newcommand\NombrePremierImpose[3]{%\'ecrire la d\'ecomposition compl\`ete
+\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%\newcount\e\newcount\f%
+  \newcount\anp\newcount\bnp\newcount\cnp%
   % Pour d\'eterminer le nombre d'\'etapes pour #1
   \anp=#1\relax
   \bnp=2\relax
@@ -8782,6 +8854,7 @@
       \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
@@ -8791,75 +8864,14 @@
     \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\NombrePremierImposeAll[3]{%\'ecrire la d\'ecomposition compl\`ete
-  % #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%\newcount\e\newcount\f%
-  % 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%
-  }%
-  \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}}\\
-    }%
-    \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%\newcount\e\newcount\f%
+  \newcount\anpv\newcount\bnpv\newcount\cnpv%
   \anpv=#1\relax
   \bnpv=2\relax
   \premier=-1\relax
@@ -8885,9 +8897,9 @@
   \fi
 }
 
-\newcommand\NombrePremierPotence[1]{%\'ecrire la d\'ecomposition compl\`ete
+\newcommand\NombrePremierPotence[1]{%
   % #1 le nombre premier \`a tester
-  \newcount\anpv\newcount\bnpv\newcount\cnpv%\newcount\e\newcount\f%
+  \newcount\anpv\newcount\bnpv\newcount\cnpv%
   \anpv=#1\relax
   \bnpv=2\relax
   \premier=-1\relax
@@ -8978,7 +8990,7 @@
   }
 }
 
-\newcommand\NombrePremierVerticalVide[1]{%\'ecrire la d\'ecomposition compl\`ete
+\newcommand\NombrePremierVerticalVide[1]{%
   % #1 le nombre premier \`a tester
   \newcount\anpv\newcount\bnpv\newcount\cnpv%
   \anpv=#1\relax
@@ -9010,8 +9022,7 @@
   \fi
 }
 
-\newcommand\NombrePremierExposant[1]{%\'ecrire la d\'ecomposition
-  % compl\`ete
+\newcommand\NombrePremierExposant[1]{%
   \newcount\anp\newcount\bnp\newcount\cnp%
   % #1 le nombre premier \`a tester
   \anp=#1\relax%
@@ -9395,15 +9406,17 @@
 %%%
 % Thales
 %%%
-\newcount\ppcm
+\newcount\ppcm%
 
 \newcommand\PPCM[2]{%
-  \PGCD{#1}{#2}
-  \ppcm=\numexpr#1*#2/\pgcd\relax
-}
+  \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}
 
+\DeclareSIUnit{\PfCThalesUnit}{\useKV[ClesThales]{Unite}}%
+
 %On d\'efinit la figure \`a utiliser
 \def\MPFigThales#1#2#3#4#5#6{
     % #1 Premier sommet
@@ -10056,7 +10069,7 @@
     \\
 %    % 3eme ligne : Calculs
     \ifnum\cmxa>0
-      \Nomx\uppercase{&}\opdiv*{numx}{denox}{resultatx}{restex}\opcmp{restex}{0}\ifopeq=\num{\ResultatThalesx}\else\approx\num{\fpeval{round(\ResultatThalesx,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}%
+      \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
@@ -10065,7 +10078,7 @@
       \else
         \uppercase{&}
       \fi
-      \Nomy\uppercase{&}\opdiv*{numy}{denoy}{resultaty}{restey}\opcmp{restey}{0}\ifopeq=\num{\ResultatThalesy}\else\approx\num{\fpeval{round(\ResultatThalesy,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}%
+      \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
@@ -10075,9 +10088,9 @@
         \else
           \uppercase{&}
         \fi
-        \Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\num{\ResultatThalesz}\else\approx\num{\fpeval{round(\ResultatThalesz,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}%
+        \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=\num{\ResultatThalesz}\else\approx\num{\fpeval{round(\ResultatThalesz,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}%
+        \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*}
@@ -10978,10 +10991,9 @@
   \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
+  % #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]%
@@ -10989,7 +11001,7 @@
   \xdef\NomAngleDroit{\NomB}%
   \xdef\NomSommetA{\NomA}%
   \xdef\NomSommetB{\NomB}%
-  \xdef\NomSommetC{\NomC}%  
+  \xdef\NomSommetC{\NomC}%
   \ifboolKV[ClesTrigo]{Perso}{%
     \RedactionTrigo%
   }{%
@@ -11003,7 +11015,7 @@
        \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
        \num{#4}\times\cos(\ang{#5})&=\NomA\NomB%\\
        \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\
-       \num{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB}
+       \SI{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB}
       \end{align*}%
     }{%
       \begin{align*}
@@ -11011,7 +11023,7 @@
         \cos(\ang{#5})&=\frac{\NomA\NomB}{\num{#4}}\\
         \num{#4}\times\cos(\ang{#5})&=\NomA\NomB%\\
         \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
-        \num{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB}%
+        \SI{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB}%
       \end{align*}
     }%
     \else%
@@ -11023,7 +11035,7 @@
         \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}\num{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}}%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
       \end{align*}
     }{%
       \begin{align*}
@@ -11031,7 +11043,7 @@
         \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}\num{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}}%
+        \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
@@ -11063,7 +11075,7 @@
         \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
         \num{#4}\times\sin(\ang{#5})&=\NomB\NomC%\\
         \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
-        \num{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC}%
+        \SI{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC}%
       \end{align*}%
     }{%
       \begin{align*}
@@ -11071,7 +11083,7 @@
         \sin(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
         \num{#4}\times\sin(\ang{#5})&=\NomB\NomC%\\
         \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
-        \num{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC}%
+        \SI{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC}%
       \end{align*}%
     }%
     \else
@@ -11083,7 +11095,7 @@
         \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}\num{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}}%
+        \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
       \end{align*}%
     }{%
       \begin{align*}
@@ -11091,7 +11103,7 @@
         \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}\num{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}}%
+        \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
@@ -11123,7 +11135,7 @@
         \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\%
         \num{#4}\times\tan(\ang{#5})&=\NomB\NomC%\\%
         \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
-        \num{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC}%
+        \SI{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC}%
       \end{align*}%
     }{%
       \begin{align*}
@@ -11131,7 +11143,7 @@
         \tan(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
         \num{#4}\times\tan(\ang{#5})&=\NomB\NomC%\\
         \ifboolKV[ClesTrigo]{ValeurExacte}{}{\\%
-        \num{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC}%
+        \SI{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC}%
       \end{align*}%
     }%
     \else
@@ -11143,7 +11155,7 @@
         \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}\num{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}}%
+        \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\SI{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}{\PfCTrigoUnit}}%
       \end{align*}%
     }{%
       \begin{align*}
@@ -11151,7 +11163,7 @@
         \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}\num{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}}%
+        \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
@@ -11182,9 +11194,7 @@
   \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
+  % #3 Longueur #4 Longueur #5 angle
   % On d\'efinit les points
   \StrMid{#2}{1}{1}[\NomA]%
   \StrMid{#2}{2}{2}[\NomB]%
@@ -12840,7 +12850,7 @@
           +\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{%
@@ -21542,7 +21552,7 @@
 \def\barre{\vrule height2.1ex depth.9ex width0pt}%
 \def\demibarre{\vrule height1.4ex depth.6ex width0pt}%
 
-\setKVdefault[Scratch]{Impression=false,Numerotation=false,Echelle=1}%
+\setKVdefault[Scratch]{Impression=false,Numerotation=false,Echelle=1,Naturel=false}%
 
 \ifluatex
 \NewDocumentEnvironment{Scratch}{o +b}{%
@@ -21549,10 +21559,11 @@
   \useKVdefault[Scratch]%
   \setKV[Scratch]{#1}%
   \mplibforcehmode%
-  \myfontScratch%
+  \ifboolKV[Scratch]{Naturel}{}{\myfontScratch}%
   \begin{mplibcode}%
-    input PfCScratch;%
-    print:=\useKV[Scratch]{Impression};%
+    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;%
@@ -21564,7 +21575,7 @@
 \else%
 \NewDocumentEnvironment{Scratch}{o +b}{%
   \setKV[Scratch]{#1}%
-  \begin{mpost}[mpsettings={input PfCScratchpdf;print:=\useKV[Scratch]{Impression};NumeroteLignes:=\useKV[Scratch]{Numerotation};Echelle:=\useKV[Scratch]{Echelle};}]%
+  \begin{mpost}[mpsettings={boolean Naturel;Naturel=\useKV[Scratch]{Naturel};if Naturel: input PfCPseudo; print:=true; else: input PfCScratch; print:=\useKV[Scratch]{Impression}; fi;NumeroteLignes:=\useKV[Scratch]{Numerotation};Echelle:=\useKV[Scratch]{Echelle};}]%
     #2%
     picture recap;%
     recap:=currentpicture scaled Echelle;%



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