diff options
author | Norbert Preining <norbert@preining.info> | 2022-07-14 03:00:55 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-07-14 03:00:55 +0000 |
commit | 247e399be12f89ba7ad8f79d3c582512e4913abf (patch) | |
tree | 181b0286a261db710a9c599e2d0ba1e930f17a2e /macros | |
parent | d6c082314db045e788a1bb06d0752edf054d4dee (diff) |
CTAN sync 202207140300
Diffstat (limited to 'macros')
-rw-r--r-- | macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf | bin | 8577548 -> 8600450 bytes | |||
-rw-r--r-- | macros/latex/contrib/profcollege/latex/ProfCollege.sty | 463 | ||||
-rw-r--r-- | macros/latex/contrib/profcollege/metapost/PfCPseudo.mp | 2551 | ||||
-rw-r--r-- | macros/latex/contrib/profcollege/metapost/PfCScratch.mp | 42 | ||||
-rw-r--r-- | macros/latex/contrib/profcollege/metapost/PfCScratchpdf.mp | 2 | ||||
-rw-r--r-- | macros/xetex/latex/bidi/README | 4 | ||||
-rw-r--r-- | macros/xetex/latex/bidi/bidi-doc-intro.ltx | 2 | ||||
-rw-r--r-- | macros/xetex/latex/bidi/bidi-doc-title.ltx | 4 | ||||
-rw-r--r-- | macros/xetex/latex/bidi/bidi-doc.ltx | 2 | ||||
-rw-r--r-- | macros/xetex/latex/bidi/bidi-doc.pdf | bin | 176525 -> 176531 bytes | |||
-rw-r--r-- | macros/xetex/latex/bidi/bidi.dtx | 36 | ||||
-rw-r--r-- | macros/xetex/latex/bidi/bidi.pdf | bin | 3467906 -> 3469880 bytes |
12 files changed, 2836 insertions, 270 deletions
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf Binary files differindex f2aa966d0e..1ca04525cd 100644 --- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf +++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty index 5221eebaa9..65eb19125d 100644 --- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty +++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty @@ -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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. %%% %% 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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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,46 +6670,57 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. %%% % 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; % pour marquer les angles path cc; cc=fullcircle scaled 1u; - % on marque les angles picture MAngle; - MAngle=image(% - if #6=0:%Pour l'isocèle 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]; @@ -6707,8 +6728,13 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. M1:=cd intersectionpoint (cc shifted C); trace 9/10[C,M1]--11/10[C,M1]; fi; - draw (cc shifted A); + fi; + if Rectangle: + trace codeperp(A,B,C,5); + else: draw (cc shifted B); + fi; + draw (cc shifted A); draw (cc shifted C); ); draw MAngle; @@ -6720,56 +6746,95 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. 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; % pour marquer les angles path cc; cc=fullcircle scaled 1u; - % on marque les angles picture MAngle; - MAngle=image( - draw (cc shifted A); + path cd; pair M[]; + MAngle=image(% + if Isocele:% + if Rectangle: + trace codeperp(A,B,C,5); + cd=A--(A+B+C)/3; + M1=cd intersectionpoint (cc shifted A); + trace 9/10[A,M1]--11/10[A,M1]; + cd:=C--(A+B+C)/3; + M1:=cd intersectionpoint (cc shifted C); + trace 9/10[C,M1]--11/10[C,M1]; + else: + cd=B--(A+B+C)/3; + M1=cd intersectionpoint (cc shifted B); + trace 9/10[B,M1]--11/10[B,M1]; + cd:=C--(A+B+C)/3; + M1:=cd intersectionpoint (cc shifted C); + trace 9/10[C,M1]--11/10[C,M1]; + fi; + fi; + if Rectangle: + trace codeperp(A,B,C,5); + else: draw (cc shifted B); + fi; + draw (cc shifted A); draw (cc shifted C); ); draw MAngle; @@ -6781,26 +6846,42 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. 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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. % #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,30 +6903,51 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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}\\% @@ -6856,15 +6957,15 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. % 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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. % #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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. } \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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,33 +8780,7 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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% - \anp=#1\relax - \bnp=2\relax - \premier=-1\relax - % Pour d\'eterminer le nombre d'\'etapes - \whiledo{\anp > 1}{% - \modulo{\the\anp}{\the\bnp} - \ifnum\remainder=0\relax - \global\premier=\numexpr\premier+1\relax - \cnp=\numexpr\anp/\bnp\relax - \anp=\cnp\relax - \else% - \bnp=\numexpr\bnp+1\relax% - \fi% - } - \ifnum\premier=0 - Le nombre \num{#1} est un nombre premier. - \else - \begin{align*} - \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\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% + \newcount\anp\newcount\bnp\newcount\cnp% \anp=#1\relax \bnp=2\relax \premier=-1\relax @@ -8727,7 +8799,7 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. 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}{\\}{}}% + \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 } @@ -8735,11 +8807,11 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. } } -\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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. %%% % 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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \\ % % 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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \xdef\NomAngleDroit{\NomB}% \xdef\NomSommetA{\NomA}% \xdef\NomSommetB{\NomB}% - \xdef\NomSommetC{\NomC}% + \xdef\NomSommetC{\NomC}% \ifboolKV[ClesTrigo]{Perso}{% \RedactionTrigo% }{% @@ -11003,7 +11015,7 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \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 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis +\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,17 +21552,18 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \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}{% \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 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \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;% diff --git a/macros/latex/contrib/profcollege/metapost/PfCPseudo.mp b/macros/latex/contrib/profcollege/metapost/PfCPseudo.mp new file mode 100644 index 0000000000..e53e8f87f0 --- /dev/null +++ b/macros/latex/contrib/profcollege/metapost/PfCPseudo.mp @@ -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; diff --git a/macros/latex/contrib/profcollege/metapost/PfCScratch.mp b/macros/latex/contrib/profcollege/metapost/PfCScratch.mp index d8b2a0a851..2f1b2ffa49 100644 --- a/macros/latex/contrib/profcollege/metapost/PfCScratch.mp +++ b/macros/latex/contrib/profcollege/metapost/PfCScratch.mp @@ -287,7 +287,7 @@ 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}"; + 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 @@ 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}" + 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 @@ 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}"; + 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 @@ 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}"; + 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 @@ 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}"; + 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 @@ vardef OvalStylo(expr ar)= 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 @@ 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}"; + 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 @@ enddef; 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 @@ 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}"; + 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 @@ 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}"; + 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 @@ 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; + 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 @@ 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}"; + 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 @@ 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}"; + 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 @@ 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}"; + 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 @@ 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}"; + 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 @@ vardef FinBlocRepeter= 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 @@ vardef Stop(expr nbpas)= 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 @@ vardef TestOpContient(expr pasun,pasdeux)= 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; diff --git a/macros/latex/contrib/profcollege/metapost/PfCScratchpdf.mp b/macros/latex/contrib/profcollege/metapost/PfCScratchpdf.mp index 94a37beccc..87a59ce750 100644 --- a/macros/latex/contrib/profcollege/metapost/PfCScratchpdf.mp +++ b/macros/latex/contrib/profcollege/metapost/PfCScratchpdf.mp @@ -3170,7 +3170,7 @@ vardef TestOpContient(expr pasun,pasdeux)= 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; diff --git a/macros/xetex/latex/bidi/README b/macros/xetex/latex/bidi/README index 54530a724a..ab648c0b69 100644 --- a/macros/xetex/latex/bidi/README +++ b/macros/xetex/latex/bidi/README @@ -1,6 +1,6 @@ ___________________ The bidi package -v39.1 +v39.2 This package provides a convenient interface for typesetting bidirectional texts in Plain TeX and LaTeX, using XeTeX engine. @@ -25,7 +25,7 @@ The announcements for the new releases of the package will also appear in the Discussions space under the Announcements category. -Current version release date: 2022/07/12 +Current version release date: 2022/07/14 ___________________________________________ Vafa Khalighi diff --git a/macros/xetex/latex/bidi/bidi-doc-intro.ltx b/macros/xetex/latex/bidi/bidi-doc-intro.ltx index 7449154097..a6bee87f2d 100644 --- a/macros/xetex/latex/bidi/bidi-doc-intro.ltx +++ b/macros/xetex/latex/bidi/bidi-doc-intro.ltx @@ -20,7 +20,7 @@ If you use \textsf{bidi} package to write any input \TeX\ document, and then run * Copyright (c) 2007--2022 Vafa Khalighi * Copyright (c) 2018--2020 bidi-tex GitHub Organization * -* v39.1, 2022/07/12 +* v39.2, 2022/07/14 * * License: LaTeX Project Public License, version * 1.3c or higher (your choice) diff --git a/macros/xetex/latex/bidi/bidi-doc-title.ltx b/macros/xetex/latex/bidi/bidi-doc-title.ltx index 3a16e32ccb..ad34f84a5a 100644 --- a/macros/xetex/latex/bidi/bidi-doc-title.ltx +++ b/macros/xetex/latex/bidi/bidi-doc-title.ltx @@ -3,7 +3,7 @@ \begin{document} \title{\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}}\\ \LARGE Bidirectional typesetting in plain \TeX{} and \LaTeX, using \XeTeX{} engine\\[5pt] -\large User documentation for \textcolor{blue!65!black}{version 39.1}} +\large User documentation for \textcolor{blue!65!black}{version 39.2}} \author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}} \setcounter{page}{0} \thispagestyle{empty} @@ -13,7 +13,7 @@ \textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}} \Large -User documentation for \textcolor{blue!65!black}{version 39.1}} +User documentation for \textcolor{blue!65!black}{version 39.2}} \vskip 0pt plus 3fill \textit{\large to my Master, \textbf{Ferdowsi The Great}} diff --git a/macros/xetex/latex/bidi/bidi-doc.ltx b/macros/xetex/latex/bidi/bidi-doc.ltx index 4157cb16de..1be314e57d 100644 --- a/macros/xetex/latex/bidi/bidi-doc.ltx +++ b/macros/xetex/latex/bidi/bidi-doc.ltx @@ -1,7 +1,7 @@ \documentclass{ltxdoc} \input{bidi-doc-preamble.ltx} \hypersetup{% - pdftitle={User documentation for version 39.1 of the bidi + pdftitle={User documentation for version 39.2 of the bidi package}% } \begin{document} diff --git a/macros/xetex/latex/bidi/bidi-doc.pdf b/macros/xetex/latex/bidi/bidi-doc.pdf Binary files differindex 9f7026185c..8d74fcbb4a 100644 --- a/macros/xetex/latex/bidi/bidi-doc.pdf +++ b/macros/xetex/latex/bidi/bidi-doc.pdf diff --git a/macros/xetex/latex/bidi/bidi.dtx b/macros/xetex/latex/bidi/bidi.dtx index d081d45275..f1f596823c 100644 --- a/macros/xetex/latex/bidi/bidi.dtx +++ b/macros/xetex/latex/bidi/bidi.dtx @@ -5,7 +5,7 @@ %<*readme> ___________________ The bidi package -v39.1 +v39.2 This package provides a convenient interface for typesetting bidirectional texts in Plain TeX and LaTeX, using XeTeX engine. @@ -30,7 +30,7 @@ The announcements for the new releases of the package will also appear in the Discussions space under the Announcements category. -Current version release date: 2022/07/12 +Current version release date: 2022/07/14 ___________________________________________ Vafa Khalighi @@ -267,7 +267,7 @@ by Vafa Khalighi. \documentclass{ltxdoc} \input{bidi-doc-preamble.ltx} \hypersetup{% - pdftitle={Source documentation for version 39.1 of the bidi + pdftitle={Source documentation for version 39.2 of the bidi package}% } \EnableCrossrefs @@ -286,7 +286,7 @@ by Vafa Khalighi. % \GetFileInfo{\jobname.dtx} % \title{\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}}\\ %\LARGE Bidirectional typesetting in plain \TeX{} and \LaTeX, using \XeTeX{} engine\\[5pt] -%\large Source documentation for \textcolor{blue!65!black}{version 39.1}} +%\large Source documentation for \textcolor{blue!65!black}{version 39.2}} % \author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}} %\setcounter{page}{0} %\thispagestyle{empty} @@ -296,7 +296,7 @@ by Vafa Khalighi. %\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}} % %\Large -%Source documentation for \textcolor{blue!65!black}{version 39.1}} +%Source documentation for \textcolor{blue!65!black}{version 39.2}} % %\vskip 0pt plus 3fill %\textit{\large to my Master, \textbf{Ferdowsi The Great}} @@ -345,7 +345,7 @@ by Vafa Khalighi. %\iffalse %<*table> %\fi -%% \CheckSum{55408} +%% \CheckSum{55413} %% \CharacterTable %% {Upper-case \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 %% Lower-case \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 @@ -4589,8 +4589,8 @@ by Vafa Khalighi. % \section{File \texttt{bidi.sty}} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\def\bididate{2022/07/12} -\def\bidi@version{39.1} +\def\bididate{2022/07/14} +\def\bidi@version{39.2} \ProvidesPackage{bidi}[\bididate\space v\bidi@version\space Bidirectional typesetting in plain TeX and LaTeX] \edef\@bidi@info{****************************************************^^J% @@ -4677,7 +4677,7 @@ Bidirectional typesetting in plain TeX and LaTeX] } \newcommand*{\@bidi@pdfcustomproperties}{% This is the bidi package, Version \bidi@version, - Released July 12, 2022. + Released July 14, 2022. } \newcommand*{\bidi@beamer@ragged}{} \@RTLmainfalse @@ -4921,9 +4921,9 @@ Bidirectional typesetting in plain TeX and LaTeX] %\fi % \section{File \texttt{bidi.tex}} % \begin{macrocode} -\def\bididate{2022/07/12} +\def\bididate{2022/07/14} \catcode`@=11 -\def\bidi@version{39.1} +\def\bidi@version{39.2} \let \protect \relax \newlinechar`\^^J \edef\@bidi@info{****************************************************^^J% @@ -5025,7 +5025,7 @@ Bidirectional typesetting in plain TeX and LaTeX] } \def\@bidi@pdfcustomproperties{% This is the bidi package, Version \bidi@version, - Released July 12, 2022. + Released July 14, 2022. } \def\bidi@pdfm@mark{% \special{pdf:% @@ -12541,7 +12541,7 @@ bidi implementation of tufte title] %\fi % \section{File \texttt{extrafootnotefeatures-xetex-bidi.def}} % \begin{macrocode} -\ProvidesFile{extrafootnotefeatures-xetex-bidi.def}[2022/07/12 v2.3 bidi extra footnote features for XeTeX engine] +\ProvidesFile{extrafootnotefeatures-xetex-bidi.def}[2022/07/14 v2.4 bidi extra footnote features for XeTeX engine] \newdimen\bidi@columnwidth \def\bidi@floathook{% \bidi@columnwidth\columnwidth @@ -12877,8 +12877,8 @@ bidi implementation of tufte title] \@@line{\beginR\splittopskip=\m@m@h \vbadness=\@M \hfilneg \valign{##\vfill\cr\m@mdosplits}\endR}} \newcommand*{\bidi@LTRrigidbalance}[3]{\setbox0=\box#1 \m@m@k=#2 \m@m@h=#3 - \@@line{\splittopskip=\m@m@h \vbadness=\@M \hfilneg - \valign{##\vfill\cr\m@mdosplits}}} + \@@line{\beginL\splittopskip=\m@m@h \vbadness=\@M \hfilneg + \valign{##\vfill\cr\m@mdosplits}\endL}} \bidi@ensure@newcommand*{\m@mdosplits}{\ifnum\m@m@k>0 \noalign{\hfil}\m@msplitoff \global\advance\m@m@k-1\cr\m@mdosplits\fi} \bidi@ensure@newcommand*{\m@msplitoff}{\dimen0=\ht0 @@ -18007,7 +18007,7 @@ bidi implementation of tufte title] %\fi % \section{File \texttt{lscape-xetex-bidi.def}} % \begin{macrocode} -\ProvidesFile{lscape-xetex-bidi.def}[2022/02/18 v0.1 bidi adaptations for lscape package for XeTeX engine] +\ProvidesFile{lscape-xetex-bidi.def}[2022/07/14 v0.2 bidi adaptations for lscape package for XeTeX engine] \bidi@patchcmd{\LS@rot}{\rotatebox{90}{\box\@outputbox}}{% \if@RTL \rotatebox[origin=br]{-90}{\box\@outputbox}% @@ -18015,7 +18015,11 @@ bidi implementation of tufte title] \rotatebox{90}{\box\@outputbox}% \fi }{}{} + \g@addto@macro{\landscape}{% + \if@bidi@csdef{bidi@columnwidth}{% + \bidi@columnwidth\columnwidth + }{}% \let\bidi@left@footnoterule\left@footnoterule \let\bidi@right@footnoterule\right@footnoterule \def\left@footnoterule{% diff --git a/macros/xetex/latex/bidi/bidi.pdf b/macros/xetex/latex/bidi/bidi.pdf Binary files differindex 152a05a677..45ab62ab87 100644 --- a/macros/xetex/latex/bidi/bidi.pdf +++ b/macros/xetex/latex/bidi/bidi.pdf |