From 809279687ad6a85c7a45c9a469725248da509220 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 2 May 2023 03:04:36 +0000 Subject: CTAN sync 202305020304 --- .../contrib/profcollege/doc/ProfCollege-doc.pdf | Bin 9158838 -> 9283470 bytes .../contrib/profcollege/latex/PfCCalisson.tex | 376 ++---- .../contrib/profcollege/latex/PfCCartesJeux.tex | 107 +- .../latex/contrib/profcollege/latex/PfCDecDeci.tex | 251 ++-- .../contrib/profcollege/latex/PfCDessinGradue.tex | 189 +-- .../profcollege/latex/PfCEngrenagesBase.tex | 164 +-- .../contrib/profcollege/latex/PfCNombreAstral.tex | 49 +- .../latex/contrib/profcollege/latex/PfCPapiers.tex | 559 ++++---- .../latex/contrib/profcollege/latex/PfCPavage.tex | 1216 +++++++++++++++++ .../profcollege/latex/PfCPavageAvecMotifImage.tex | 1040 ++++++++++++++ macros/latex/contrib/profcollege/latex/PfCRLE.tex | 274 ++-- .../profcollege/latex/PfCRappelsFormules.tex | 56 +- .../profcollege/latex/PfCRepresenterFraction.tex | 1412 +++++++------------- .../latex/contrib/profcollege/latex/PfCSquaro.tex | 70 +- .../profcollege/latex/PfCSquaroaprioriold.tex | 107 ++ .../contrib/profcollege/latex/PfCStatistiques.tex | 538 +++----- .../profcollege/latex/PfCTableauxUnites.tex | 97 +- .../contrib/profcollege/latex/PfCTortueBase.tex | 3 +- .../contrib/profcollege/latex/PfCVueCubes.tex | 2 - .../contrib/profcollege/latex/ProfCollege.sty | 6 +- .../contrib/profcollege/metapost/PfCConstantes.mp | 16 + .../contrib/profcollege/metapost/PfCScratch.mp | 5 + 22 files changed, 4115 insertions(+), 2422 deletions(-) create mode 100644 macros/latex/contrib/profcollege/latex/PfCPavage.tex create mode 100644 macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex create mode 100644 macros/latex/contrib/profcollege/latex/PfCSquaroaprioriold.tex (limited to 'macros/latex/contrib/profcollege') diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf index 28279dff29..b4144010b6 100644 Binary files a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf and b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf differ diff --git a/macros/latex/contrib/profcollege/latex/PfCCalisson.tex b/macros/latex/contrib/profcollege/latex/PfCCalisson.tex index 08834c7311..08f3d91521 100644 --- a/macros/latex/contrib/profcollege/latex/PfCCalisson.tex +++ b/macros/latex/contrib/profcollege/latex/PfCCalisson.tex @@ -100,260 +100,144 @@ \BuildCalisson{\the\tokcalissonlistetracesg}{\the\tokcalissonlistetracesd}% }% +\def\BuildCalissonCode{% + boolean Solution; + Solution:=\useKV[Calisson]{Solution}; + % + color CouleurSolution; + CouleurSolution:=\useKV[Calisson]{Couleur}; + % + Rayon=\useKV[Calisson]{Rayon}; + Taille=\useKV[Calisson]{Taille}; + % + pair A,B,C,D,E,F,O; + O=(0,0); + path cc; + cc=cercles(O,Rayon); + D=pointarc(cc,30); + E=pointarc(cc,90); + F=pointarc(cc,150); + A=pointarc(cc,210); + B=pointarc(cc,270); + C=pointarc(cc,330); + path Gauche,Droit,Haut,Bas,TopGauche,BasDroit; + Gauche=F--A--B; + Droit=E--D--C; + Haut=F--E--D; + Bas=A--B--C; + TopGauche=E--F--A; + BasDroit=D--C--B; + % + pair Hor,Ver,Horn; + Hor=(1/Taille)[E,F]; + Ver=rotation(Hor,E,60); + Horn=rotation(Hor,E,120); + % On positionne les points + pair M[]; + n=0; + % Partie Gauche -> ok + for k=0 upto Taille-1: + for l=0 upto Taille: + n:=n+1; + M[n]=E+k*(Ver-E)+l*(Hor-E); + % dotlabel.top(decimal(n),M[n]); + endfor; + endfor; + for k=Taille upto 2*Taille-1: + for l=0 upto (2*Taille-1-k): + n:=n+1; + M[n]=E+k*(Ver-E)+l*(Hor-E); + % dotlabel.top(decimal(n),M[n]); + endfor; + endfor; + % Partie Droite -> ok + for k=1 upto Taille: + n:=n+1; + M[n]=E+k*(Horn-E); + % dotlabel.top(decimal(n),M[n]); + endfor; + for k=1 upto Taille-1: + for l=0 upto Taille: + n:=n+1; + M[n]=E+k*(Ver-E)+l*(Horn-E); + % dotlabel.top(decimal(n),M[n]); + endfor; + endfor; + for k=Taille upto 2*Taille-1: + for l=0 upto (2*Taille-1-k): + n:=n+1; + M[n]=E+k*(Ver-E)+l*(Horn-E); + % dotlabel.top(decimal(n),M[n]); + endfor; + endfor; + % + % + string Retiens; + Retiens=""; + % + pair Depla; + Depla:=Hor; + % + vardef LesTracesg(text t)= + trace polygone(A,B,C,D,E,F) withpen pencircle scaled 2; + for k=1 upto 2*Taille-1: + trace (point(k*length Gauche/(2*Taille)) of Gauche)--(point(k*length Droit/(2*Taille)) of Droit) dashed evenly; + trace (point(k*length Haut/(2*Taille)) of Haut)--(point(k*length Bas/(2*Taille)) of Bas) dashed evenly; + trace (point(k*length TopGauche/(2*Taille)) of TopGauche)--(point(k*length BasDroit/(2*Taille)) of BasDroit) dashed evenly; + endfor; + n:=0; + for p_=t: + n:=n+1; + for d=1 upto 3: + Retiens:=substring(d-1,d) of p_; + if d=1:Depla:=Hor + elseif d=2:Depla:=Ver + else : Depla:=Horn + fi; + if (Retiens="0") or (Retiens="f"): + elseif Retiens="t": + trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2; + elseif Retiens="s": + if Solution: + trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution; + fi; + fi; + endfor; + endfor; + enddef; + % + vardef LesTracesd(text t)= + for p_=t: + n:=n+1; + for d=1 upto 3: + Retiens:=substring(d-1,d) of p_; + if d=1:Depla:=Horn + elseif d=2:Depla:=Ver + else : Depla:=Hor + fi; + if (Retiens="0") or (Retiens="f"): + elseif Retiens="t": + trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2; + elseif Retiens="s": + if Solution: + trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution; + fi; + fi; + endfor; + endfor; + enddef; +} + \NewDocumentCommand\BuildCalisson{m m}{% \ifluatex \mplibforcehmode \begin{mplibcode} - boolean Solution; - Solution:=\useKV[Calisson]{Solution}; - - color CouleurSolution; - CouleurSolution:=\useKV[Calisson]{Couleur}; - - Rayon=\useKV[Calisson]{Rayon}; - Taille=\useKV[Calisson]{Taille}; - - pair A,B,C,D,E,F,O; - O=(0,0); - path cc; - cc=cercles(O,Rayon); - D=pointarc(cc,30); - E=pointarc(cc,90); - F=pointarc(cc,150); - A=pointarc(cc,210); - B=pointarc(cc,270); - C=pointarc(cc,330); - trace polygone(A,B,C,D,E,F) withpen pencircle scaled 2; - path Gauche,Droit,Haut,Bas,TopGauche,BasDroit; - Gauche=F--A--B; - Droit=E--D--C; - Haut=F--E--D; - Bas=A--B--C; - TopGauche=E--F--A; - BasDroit=D--C--B; - for k=1 upto 2*Taille-1: - trace (point(k*length Gauche/(2*Taille)) of Gauche)--(point(k*length Droit/(2*Taille)) of Droit) dashed evenly; - trace (point(k*length Haut/(2*Taille)) of Haut)--(point(k*length Bas/(2*Taille)) of Bas) dashed evenly; - trace (point(k*length TopGauche/(2*Taille)) of TopGauche)--(point(k*length BasDroit/(2*Taille)) of BasDroit) dashed evenly; - endfor; - - pair Hor,Ver,Horn; - Hor=(1/Taille)[E,F]; - Ver=rotation(Hor,E,60); - Horn=rotation(Hor,E,120); - - % On positionne les points - pair M[]; - n=0; - %Partie Gauche -> ok - for k=0 upto Taille-1: - for l=0 upto Taille: - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Hor-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - for k=Taille upto 2*Taille-1: - for l=0 upto (2*Taille-1-k): - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Hor-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - % Partie Droite -> ok - for k=1 upto Taille: - n:=n+1; - M[n]=E+k*(Horn-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - for k=1 upto Taille-1: - for l=0 upto Taille: - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Horn-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - for k=Taille upto 2*Taille-1: - for l=0 upto (2*Taille-1-k): - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Horn-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - % - - string Retiens; - Retiens=""; - - pair Depla; - Depla:=Hor; - - vardef LesTracesg(text t)= - n:=0; - for p_=t: - n:=n+1; - for d=1 upto 3: - Retiens:=substring(d-1,d) of p_; - if d=1:Depla:=Hor - elseif d=2:Depla:=Ver - else : Depla:=Horn - fi; - if (Retiens="0") or (Retiens="f"): - elseif Retiens="t": - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2; - elseif Retiens="s": - if Solution: - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution; - fi; - fi; - endfor; - endfor; - enddef; - - vardef LesTracesd(text t)= - for p_=t: - n:=n+1; - for d=1 upto 3: - Retiens:=substring(d-1,d) of p_; - if d=1:Depla:=Horn - elseif d=2:Depla:=Ver - else : Depla:=Hor - fi; - if (Retiens="0") or (Retiens="f"): - elseif Retiens="t": - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2; - elseif Retiens="s": - if Solution: - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution; - fi; - fi; - endfor; - endfor; - enddef; - + \BuildCalissonCode LesTracesg(#1); LesTracesd(#2); \end{mplibcode} \else - \begin{mpost}[mpsettings={boolean Solution; Solution:=\useKV[Calisson]{Solution}; Rayon=\useKV[Calisson]{Rayon};Taille=\useKV[Calisson]{Taille};color CouleurSolution; CouleurSolution:=\useKV[Calisson]{Couleur};}] - pair A,B,C,D,E,F,O; - O=(0,0); - path cc; - cc=cercles(O,Rayon); - D=pointarc(cc,30); - E=pointarc(cc,90); - F=pointarc(cc,150); - A=pointarc(cc,210); - B=pointarc(cc,270); - C=pointarc(cc,330); - trace polygone(A,B,C,D,E,F) withpen pencircle scaled 2; - path Gauche,Droit,Haut,Bas,TopGauche,BasDroit; - Gauche=F--A--B; - Droit=E--D--C; - Haut=F--E--D; - Bas=A--B--C; - TopGauche=E--F--A; - BasDroit=D--C--B; - for k=1 upto 2*Taille-1: - trace (point(k*length Gauche/(2*Taille)) of Gauche)--(point(k*length Droit/(2*Taille)) of Droit) dashed evenly; - trace (point(k*length Haut/(2*Taille)) of Haut)--(point(k*length Bas/(2*Taille)) of Bas) dashed evenly; - trace (point(k*length TopGauche/(2*Taille)) of TopGauche)--(point(k*length BasDroit/(2*Taille)) of BasDroit) dashed evenly; - endfor; - - pair Hor,Ver,Horn; - Hor=(1/Taille)[E,F]; - Ver=rotation(Hor,E,60); - Horn=rotation(Hor,E,120); - - % On positionne les points - pair M[]; - n=0; - %Partie Gauche -> ok - for k=0 upto Taille-1: - for l=0 upto Taille: - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Hor-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - for k=Taille upto 2*Taille-1: - for l=0 upto (2*Taille-1-k): - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Hor-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - % Partie Droite -> ok - for k=1 upto Taille: - n:=n+1; - M[n]=E+k*(Horn-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - for k=1 upto Taille-1: - for l=0 upto Taille: - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Horn-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - for k=Taille upto 2*Taille-1: - for l=0 upto (2*Taille-1-k): - n:=n+1; - M[n]=E+k*(Ver-E)+l*(Horn-E); - %dotlabel.top(decimal(n),M[n]); - endfor; - endfor; - % - - string Retiens; - Retiens=""; - - pair Depla; - Depla:=Hor; - - vardef LesTracesg(text t)= - n:=0; - for p_=t: - n:=n+1; - for d=1 upto 3: - Retiens:=substring(d-1,d) of p_; - if d=1:Depla:=Hor - elseif d=2:Depla:=Ver - else : Depla:=Horn - fi; - if (Retiens="0") or (Retiens="f"): - elseif Retiens="t": - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2; - elseif Retiens="s": - if Solution: - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution; - fi; - fi; - endfor; - endfor; - enddef; - - vardef LesTracesd(text t)= - for p_=t: - n:=n+1; - for d=1 upto 3: - Retiens:=substring(d-1,d) of p_; - if d=1:Depla:=Horn - elseif d=2:Depla:=Ver - else : Depla:=Hor - fi; - if (Retiens="0") or (Retiens="f"): - elseif Retiens="t": - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2; - elseif Retiens="s": - if Solution: - trace (chemin(Depla,E) shifted (M[n]-E)) withpen pencircle scaled 2 withcolor CouleurSolution; - fi; - fi; - endfor; - endfor; - enddef; - + \begin{mpost}[mpsettings={\BuildCalissonCode}] LesTracesg(#1); LesTracesd(#2); \end{mpost} diff --git a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex index 100807c748..88b2e3a57b 100644 --- a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex +++ b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex @@ -8,7 +8,7 @@ text fill,% width=\largeurcarte,% height=\hauteurcarte,% - arc=5pt,% + arc=\PfCRayonArc,% overlay unbroken and first={% \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west);% \coordinate[yshift=-0.5\hauteurtitre] (B1) at (frame.north east);% @@ -39,6 +39,7 @@ }% \newcommand\PfCTexteJai{J'ai} +\newcommand\PfCTexteJesuis{Je suis\dots} \newcommand\PfCTexteQuia{Qui a ?} \makeatletter @@ -49,7 +50,7 @@ text fill,% width=\largeurcarte,% height=\hauteurcarte,% - arc=5pt,% + arc=\PfCRayonArc,%\useKV[Cards]{RayonArc},% underlay={% \ifboolKV[Cards]{BackgroundAv}{% \begin{tcbclipinterior} @@ -64,19 +65,33 @@ },% overlay unbroken and first={% \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west); - \coordinate[yshift=0\hauteurtitre] (S3) at (frame.center); + \ifboolKV[Cards]{Eleve}{% + \coordinate[yshift=0.1\hauteurcarte] (S3) at (frame.center); + \coordinate[yshift=-0.1\hauteurcarte] (S5) at (frame.center); + }{% + \coordinate (S3) at (frame.center); + \coordinate (S5) at (frame.center); + }% \coordinate[yshift=3mm] (C3) at (frame.south); \coordinate[xshift=\largeurcarte/2] (A3) at (A1); + %Partie Haute \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A3){}; - \node[TexteCouleur] (T1a) at (T1){\Large \PfCTexteJai}; - \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T2) at (S3){}; - \node[TexteCouleur] (T2a) at (T2){\Large \PfCTexteQuia}; + \node[TexteCouleur] at (T1){\Large \PfCTexteJai}; \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte1) at ($(A3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}% \begin{center}% #1% \end{center}% - \end{minipage}}; - \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte2) at ($(C3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}% + \end{minipage}% + }; + % Partie Milieu + \ifboolKV[Cards]{Eleve}{% + \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T3) at (S3){}; + \node[TexteCouleur] at (T3){\Large \PfCTexteJesuis}; + }{} + % Partie Basse + \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T2) at (S5){}; + \node[TexteCouleur] at (T2){\Large \PfCTexteQuia}; + \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte2) at ($(C3)!0.5!(S5)$) {\begin{minipage}{\largeurcarte-6mm}% \begin{center}% #2% \end{center}% @@ -85,16 +100,16 @@ colback=white }% % -\newtcolorbox{MyboxJQAr}{% +\newtcolorbox{MyboxJQAr}[1]{% enhanced,% nobeforeafter,% left=0pt,right=0pt,top=0pt,% text fill,% width=\largeurcarte,% height=\hauteurcarte,% - arc=5pt,% + arc=\PfCRayonArc,% underlay={% - \ifboolKV[Cards]{BackgroundAv}{% + \ifboolKV[Cards]{BackgroundAr}{% \begin{tcbclipinterior} \node[anchor=center,opacity=1] at (interior.center) {% @@ -105,6 +120,18 @@ \end{tcbclipinterior}% }{}% },% + overlay unbroken and first={% + \ifboolKV[Cards]{AfficheTheme}{% + % \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);% + \coordinate[yshift=-2.5mm] (A) at (frame.north);% + \node[anchor=north,rounded corners,draw=black,rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] at (A){\begin{minipage}{\largeurcarte-6mm}% + \begin{center}% + #1% + \end{center}% + \end{minipage} + };% + }{}% + },% colback=white }% \makeatother @@ -118,7 +145,7 @@ text fill,% width=\largeurcarte,% height=\hauteurcarte,% - arc=5pt,% + arc=\PfCRayonArc,% colback=white,% underlay={% \ifboolKV[Cards]{BackgroundAv}{% @@ -151,7 +178,7 @@ text fill,% width=\largeurcarte,% height=\hauteurcarte,% - arc=5pt,% + arc=\PfCRayonArc,% colback=white,% underlay={% \ifboolKV[Cards]{BackgroundAr}{% @@ -183,7 +210,7 @@ text fill,% width=\largeurcarte,% height=\hauteurcarte,% - arc=5pt,% + arc=\PfCRayonArc,% colback=white,% #1 }% @@ -197,6 +224,7 @@ \newlength{\margeh}% \newlength{\margev}% +\newlength{\PfCRayonArc}% \newlength{\PfCCardsH}%pour retenir en cas de décalage sur une page paire \newlength{\PfCCardsEcartH}%Pour décaler sur une page paire @@ -233,6 +261,7 @@ \coordinate[xshift=\largeurcards] (D2) at (D1);% \coordinate[xshift=\largeurcards] (C3) at (C2);% \coordinate[xshift=\largeurcards] (D3) at (D2);% + \ifboolKV[Cards]{TrameVisible}{% \draw (A)--(B);% \draw (A1)--(B1);% \draw (A2)--(B2);% @@ -242,6 +271,7 @@ \draw (C1)--(D1);% \draw (C2)--(D2);% \draw (C3)--(D3);% + }{} % point pour placer les cartes \coordinate[xshift=\margeh+0.5\PfCCardsH,yshift=-0.5\PfCCardsV] (Carte1) at (A);% \coordinate[xshift=\largeurcards,yshift=0mm] (Carte2) at (Carte1);% @@ -301,11 +331,12 @@ }{}% \setKVdefault[Cards]{Largeur=59,Hauteur=89,HauteurTheme=15,Marge=4,Landscape=false,Couleur=Cornsilk,Theme=Th\'eor\`eme\\de - Pythagore,ThemeSol=Solution,Trame=false,Titre=false,NomTitre=Jeu 1,Loop,JaiQuia=false,BackgroundAv=false,BackgroundAr=false,ImageAv=4813762.jpg,ImageAr=4813762.jpg,AffichageSolution=true,SolutionSeule=false,% + Pythagore,ThemeSol=Solution,AfficheTheme=false,Trame=false,Jointes=false,TrameVisible=false,RayonArc=5pt,Titre=false,NomTitre=Jeu 1,Loop,JaiQuia=false,Eleve=false,BackgroundAv=false,BackgroundAr=false,ImageAv=4813762.jpg,ImageAr=4813762.jpg,AffichageSolution=true,SolutionSeule=false,% % Pour le trivial Trivial=false,Symboles={\faInfinity,\faSignal,\faProjectDiagram,\faHiking,\faRuler,\faLockOpen} }% - +\defKV[Cards]{ThemeJaiQuiA=\setKV[Cards]{AfficheTheme}} +% \NewDocumentCommand\Cartes{o +m}{%[2][]{% \useKVdefault[Cards]% \setKV[Cards]{#1}% @@ -322,15 +353,16 @@ }{% \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}% \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}% - \setlength{\largeurcards}{65mm}% - \setlength{\hauteurcards}{95mm}% + \ifboolKV[Cards]{Jointes}{\setlength{\largeurcards}{\largeurcarte}}{\setlength{\largeurcards}{65mm}}% + \ifboolKV[Cards]{Jointes}{\setlength{\hauteurcards}{\hauteurcarte}}{\setlength{\hauteurcards}{95mm}}% \setlength{\margeh}{(210mm-3\largeurcards)/2}% - \setlength{\margev}{(297mm-3\hauteurcards)/2}% + \setlength{\margev}{(297mm-3\hauteurcards)/2} }% \setlength{\hauteurtitre}{\fpeval{\useKV[Cards]{HauteurTheme}}mm}% \setlength{\largeurtitre}{\fpeval{(\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}-9)/2}mm}% \colorlet{TexteCouleur}{black}% \colorlet{TrameCouleur}{\useKV[Cards]{Couleur}}% + \setlength{\PfCRayonArc}{\useKV[Cards]{RayonArc}}% \ifboolKV[Cards]{Trivial}{% \xdef\PfCListeSymbolTrivial{\useKV[Cards]{Symboles}}% \setsepchar{,}\readlist*\ListeSymbolesTrivial{\PfCListeSymbolTrivial}% @@ -442,20 +474,35 @@ \begin{Trame} \multido{\i=1+1}{3}{% \node at (Carte\i) {% - \begin{MyboxJQAr}% - \end{MyboxJQAr}% + \ifboolKV[Cards]{AfficheTheme}{% + \begin{MyboxJQAr}{\useKV[Cards]{ThemeJaiQuiA}}% + \end{MyboxJQAr}% + }{% + \begin{MyboxJQAr}{}% + \end{MyboxJQAr}% + }% };% }% \multido{\i=4+1}{3}{% \node at (Carte\i) {% - \begin{MyboxJQAr}% - \end{MyboxJQAr}% + \ifboolKV[Cards]{AfficheTheme}{% + \begin{MyboxJQAr}{\useKV[Cards]{ThemeJaiQuiA}}% + \end{MyboxJQAr}% + }{% + \begin{MyboxJQAr}{}% + \end{MyboxJQAr}% + }% };% }% \multido{\i=7+1}{3}{% \node at (Carte\i) {% - \begin{MyboxJQAr}% - \end{MyboxJQAr}% + \ifboolKV[Cards]{AfficheTheme}{% + \begin{MyboxJQAr}{\useKV[Cards]{ThemeJaiQuiA}}% + \end{MyboxJQAr}% + }{% + \begin{MyboxJQAr}{}% + \end{MyboxJQAr}% + }% };% }% \end{Trame}% @@ -466,9 +513,13 @@ %% \end{MyboxJQ}% \ifboolKV[Cards]{AffichageSolution}{% - \begin{MyboxJQAr}% - %% - \end{MyboxJQAr}% + \ifboolKV[Cards]{AfficheTheme}{% + \begin{MyboxJQAr}{\useKV[Cards]{ThemeJaiQuiA}}% + \end{MyboxJQAr}% + }{% + \begin{MyboxJQAr}{}% + \end{MyboxJQAr}% + }% }{}% }% }{% diff --git a/macros/latex/contrib/profcollege/latex/PfCDecDeci.tex b/macros/latex/contrib/profcollege/latex/PfCDecDeci.tex index 3e9cc7d1c8..31daba08fc 100644 --- a/macros/latex/contrib/profcollege/latex/PfCDecDeci.tex +++ b/macros/latex/contrib/profcollege/latex/PfCDecDeci.tex @@ -1,7 +1,7 @@ %%% % Décomposition décimale %% -\setKVdefault[DecompDeci]{Parentheses,Colore=false,CouleurU=Blue,CouleurD=Red,CouleurC=Green,Fleches=false,Details=false} +\setKVdefault[DecompDeci]{Parentheses,Colore=false,CouleurU=Blue,CouleurD=Red,CouleurC=Green,Fleches=false,Details=false,ResultatSeul=false,SansMul=false} \newcounter{PfCNbDecDeci} \setcounter{PfCNbDecDeci}{0} @@ -26,125 +26,146 @@ \modulo{\fpeval{\PfCNombrePuisMax}}{3}% \xintifboolexpr{\remainder==0}{% \xdef\PfCDecDeciEcart{0} - }{\xintifboolexpr{\remainder==1}{\xdef\PfCDecDeciEcart{1}}{\xdef\PfCDecDeciEcart{2}}} - \ifboolKV[DecompDeci]{Fleches}{% - \colorlet{oldcolor}{black}% - % On affiche - \begin{center} - \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax}}}\do{% - \StrChar{#2}{##1}[\PfCNombreChiffre]% + }{\xintifboolexpr{\remainder==1}{\xdef\PfCDecDeciEcart{1}}{\xdef\PfCDecDeciEcart{2}}}% + %%%% + \ifboolKV[DecompDeci]{SansMul}{% + \ensuremath{% + \ifboolKV[DecompDeci]{ResultatSeul}{}{\num{#2}=}% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% + \StrChar{#2}{##1}[\PfCNombreChiffre] \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% - \xintifboolexpr{\remainder==0}{% - \color{\useKV[DecompDeci]{CouleurU}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}\xintifForLast{}{\,\color{oldcolor}}}{% - \xintifboolexpr{\remainder==1}{% - \color{\useKV[DecompDeci]{CouleurC}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}}{% - \color{\useKV[DecompDeci]{CouleurD}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}% - }% + % \colorlet{oldcolor}{.} + %\xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% + % \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{% + % \color{\useKV[DecompDeci]{CouleurD}}% + % }% + %}% + \xintifboolexpr{\PfCNombreChiffre==0}{}{% + \num{\fpeval{\PfCNombreChiffre*10^(\PfCNombrePuisMax-##1)}}%\color{oldcolor}% + \xintifForLast{}{+}% }% - }\color{oldcolor}% - - \vspace*{3em} - - \ifboolKV[DecompDeci]{Details}{% + }% + }% + }{% + \ifboolKV[DecompDeci]{Fleches}{% + \colorlet{oldcolor}{black}% + % On affiche + \begin{center} + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax}}}\do{% + \StrChar{#2}{##1}[\PfCNombreChiffre]% + \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% + \xintifboolexpr{\remainder==0}{% + \color{\useKV[DecompDeci]{CouleurU}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}\xintifForLast{}{\,\color{oldcolor}}}{% + \xintifboolexpr{\remainder==1}{% + \color{\useKV[DecompDeci]{CouleurC}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}}{% + \color{\useKV[DecompDeci]{CouleurD}}\tikzmarknode[anchor=south,inner ysep=2pt]{DDA-\thePfCNbDecDeci-##1}{\PfCNombreChiffre}{}% + }% + }% + }\color{oldcolor}% + + \vspace*{3em} + + \ifboolKV[DecompDeci]{Details}{% + \ensuremath{% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% + \StrChar{#2}{##1}[\PfCNombreChiffre] + \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% + \colorlet{oldcolor}{.} + \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% + \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{% + \color{\useKV[DecompDeci]{CouleurD}}% + }% + }% + \xintifboolexpr{\PfCNombreChiffre==0}{}{% + \tikzmarknode[anchor=north,inner ysep=2pt]{DDC-\thePfCNbDecDeci-##1}{\boxed{\num{\fpeval{\PfCNombreChiffre*10^(\PfCNombrePuisMax-##1)}}}}\color{oldcolor}% + \xintifForLast{}{+}% + }% + }% + }% + + \vspace*{3em} + + }{}% + \ensuremath{% \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% \StrChar{#2}{##1}[\PfCNombreChiffre] - \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% - \colorlet{oldcolor}{.} - \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% - \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{% - \color{\useKV[DecompDeci]{CouleurD}}% - }% - }% \xintifboolexpr{\PfCNombreChiffre==0}{}{% - \tikzmarknode[anchor=north,inner ysep=2pt]{DDC-\thePfCNbDecDeci-##1}{\boxed{\num{\fpeval{\PfCNombreChiffre*10^(\PfCNombrePuisMax-##1)}}}}\color{oldcolor}% + \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% + \colorlet{oldcolor}{.} + \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% + \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{% + \color{\useKV[DecompDeci]{CouleurD}}% + }% + }% + \tikzmarknode[anchor=north,inner ysep=2pt]{DDB-\thePfCNbDecDeci-##1}{\boxed{\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}}}{}\color{oldcolor}% \xintifForLast{}{+}% }% }% }% - - \vspace*{3em} - - }{}% - - \ensuremath{% + \end{center} + \begin{tikzpicture}[remember picture,overlay] \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% - \StrChar{#2}{##1}[\PfCNombreChiffre] - \xintifboolexpr{\PfCNombreChiffre==0}{}{% - \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% - \colorlet{oldcolor}{.} - \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% - \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}}{% - \color{\useKV[DecompDeci]{CouleurD}}% - }% + \StrChar{#2}{##1}[\PfCNombreChiffre]% + \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% + \xintifboolexpr{\remainder==0}{% + \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurU}}}{% + \xintifboolexpr{\remainder==1}{% + \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurC}}}{% + \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurD}}% }% - \tikzmarknode[anchor=north,inner ysep=2pt]{DDB-\thePfCNbDecDeci-##1}{\boxed{\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}}}{}\color{oldcolor}% - \xintifForLast{}{+}% }% - }% - }% - \end{center} - \begin{tikzpicture}[remember picture,overlay] - \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% - \StrChar{#2}{##1}[\PfCNombreChiffre]% - \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% - \xintifboolexpr{\remainder==0}{% - \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurU}}}{% - \xintifboolexpr{\remainder==1}{% - \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurC}}}{% - \colorlet{PfCDecDeciColor}{\useKV[DecompDeci]{CouleurD}}% + \ifboolKV[DecompDeci]{Details}{% + \xintifboolexpr{\PfCNombreChiffre>0}{% + \draw[-stealth,PfCDecDeciColor] (pic cs:DDA-\thePfCNbDecDeci-##1) to (pic cs:DDC-\thePfCNbDecDeci-##1); + \node (DDD-\thePfCNbDecDeci-##1) at ($(pic cs:DDC-\thePfCNbDecDeci-##1)!0.35!(pic cs:DDB-\thePfCNbDecDeci-##1)$) {}; + \draw[-stealth,PfCDecDeciColor] (DDD-\thePfCNbDecDeci-##1) to (pic cs:DDB-\thePfCNbDecDeci-##1); + }{}% + }{% + \xintifboolexpr{\PfCNombreChiffre>0}{% + \draw[-stealth,PfCDecDeciColor] (pic cs:DDA-\thePfCNbDecDeci-##1) to (pic cs:DDB-\thePfCNbDecDeci-##1); + }{}% }% }% - \ifboolKV[DecompDeci]{Details}{% - \xintifboolexpr{\PfCNombreChiffre>0}{% - \draw[-stealth,PfCDecDeciColor] (pic cs:DDA-\thePfCNbDecDeci-##1) to (pic cs:DDC-\thePfCNbDecDeci-##1); - \node (DDD-\thePfCNbDecDeci-##1) at ($(pic cs:DDC-\thePfCNbDecDeci-##1)!0.35!(pic cs:DDB-\thePfCNbDecDeci-##1)$) {}; - \draw[-stealth,PfCDecDeciColor] (DDD-\thePfCNbDecDeci-##1) to (pic cs:DDB-\thePfCNbDecDeci-##1); - }{}% - }{% - \xintifboolexpr{\PfCNombreChiffre>0}{% - \draw[-stealth,PfCDecDeciColor] (pic cs:DDA-\thePfCNbDecDeci-##1) to (pic cs:DDB-\thePfCNbDecDeci-##1); - }{}% - }% - }% - \end{tikzpicture} - }{% - \ifboolKV[DecompDeci]{Colore}{% - \colorlet{oldcolor}{black}% - \ensuremath{% - \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax}}}\do{% - \StrChar{#2}{##1}[\PfCNombreChiffre]% - \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% - \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}\PfCNombreChiffre\xintifForLast{}{\,\color{oldcolor}}}{% - \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}\PfCNombreChiffre}{% - \color{\useKV[DecompDeci]{CouleurD}}\PfCNombreChiffre% + \end{tikzpicture} + }{% + \ifboolKV[DecompDeci]{Colore}{% + \colorlet{oldcolor}{black}% + \ensuremath{% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax}}}\do{% + \StrChar{#2}{##1}[\PfCNombreChiffre]% + \modulo{\fpeval{\PfCNombrePuisMax+\PfCDecDeciEcart--##1}}{3}% + \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}\PfCNombreChiffre\xintifForLast{}{\,\color{oldcolor}}}{% + \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurC}}\PfCNombreChiffre}{% + \color{\useKV[DecompDeci]{CouleurD}}\PfCNombreChiffre% + }% }% - }% - }\color{oldcolor}% - = - \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% - \StrChar{#2}{##1}[\PfCNombreChiffre] - \xintifboolexpr{\PfCNombreChiffre==0}{}{% - \modulo{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis-##1}}{3} - \colorlet{oldcolor}{.} - \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% - \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurD}}}{% - \color{\useKV[DecompDeci]{CouleurC}}% + }\color{oldcolor}% + = + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% + \StrChar{#2}{##1}[\PfCNombreChiffre] + \xintifboolexpr{\PfCNombreChiffre==0}{}{% + \modulo{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis-##1}}{3} + \colorlet{oldcolor}{.} + \xintifboolexpr{\remainder==0}{\color{\useKV[DecompDeci]{CouleurU}}}{% + \xintifboolexpr{\remainder==1}{\color{\useKV[DecompDeci]{CouleurD}}}{% + \color{\useKV[DecompDeci]{CouleurC}}% + }% }% + \boxed{\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}}\color{oldcolor}% + \xintifForLast{}{+}% }% - \boxed{\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}}\color{oldcolor}% - \xintifForLast{}{+}% }% - }% - } - }{% - \ensuremath{% - \num{#2}= - \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% - \StrChar{#2}{##1}[\PfCNombreChiffre] - \xintifboolexpr{\PfCNombreChiffre==0}{}{% - \ifboolKV[DecompDeci]{Parentheses}{\left(}{}\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}\ifboolKV[DecompDeci]{Parentheses}{\right)}{}% - \xintifForLast{}{+}% + } + }{% + \ensuremath{% + \ifboolKV[DecompDeci]{ResultatSeul}{}{\num{#2}=}% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNombrePuisMax-\PfCRetiensPuis}}}\do{% + \StrChar{#2}{##1}[\PfCNombreChiffre] + \xintifboolexpr{\PfCNombreChiffre==0}{}{% + \ifboolKV[DecompDeci]{Parentheses}{\left(}{}\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1)}}\ifboolKV[DecompDeci]{Parentheses}{\right)}{}% + \xintifForLast{}{+}% + }% }% }% }% @@ -163,13 +184,27 @@ \xdef\PfCRetiensPuis{\fpeval{\PfCRetiensPuis+1}}% }{}% }% - \ensuremath{% - \num{#2}= - \xintFor* ##1 in {\xintSeq{1}{\PfCNombrePuisMax-\PfCRetiensPuis}}\do{% - \StrChar{\PfCRetiensNombreEntier}{##1}[\PfCNombreChiffre] - \xintifboolexpr{\PfCNombreChiffre==0}{}{% - \ifboolKV[DecompDeci]{Parentheses}{\left(}{}\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1-\PfCPuisDeci-1)}}\ifboolKV[DecompDeci]{Parentheses}{\right)}{}% - \xintifForLast{}{+}% + %% + \ifboolKV[DecompDeci]{SansMul}{% + \ensuremath{% + \ifboolKV[DecompDeci]{ResultatSeul}{}{\num{#2}=}% + \xintFor* ##1 in {\xintSeq{1}{\PfCNombrePuisMax-\PfCRetiensPuis}}\do{% + \StrChar{\PfCRetiensNombreEntier}{##1}[\PfCNombreChiffre] + \xintifboolexpr{\PfCNombreChiffre==0}{}{% + \num{\fpeval{\PfCNombreChiffre*10^(\PfCNombrePuisMax-##1-\PfCPuisDeci-1)}}% + \xintifForLast{}{+}% + }% + }% + }% + }{% + \ensuremath{% + \ifboolKV[DecompDeci]{ResultatSeul}{}{\num{#2}=}% + \xintFor* ##1 in {\xintSeq{1}{\PfCNombrePuisMax-\PfCRetiensPuis}}\do{% + \StrChar{\PfCRetiensNombreEntier}{##1}[\PfCNombreChiffre] + \xintifboolexpr{\PfCNombreChiffre==0}{}{% + \ifboolKV[DecompDeci]{Parentheses}{\left(}{}\PfCNombreChiffre\times\num{\fpeval{10^(\PfCNombrePuisMax-##1-\PfCPuisDeci-1)}}\ifboolKV[DecompDeci]{Parentheses}{\right)}{}% + \xintifForLast{}{+}% + }% }% }% }% diff --git a/macros/latex/contrib/profcollege/latex/PfCDessinGradue.tex b/macros/latex/contrib/profcollege/latex/PfCDessinGradue.tex index 682572bfc1..3bfacac68c 100644 --- a/macros/latex/contrib/profcollege/latex/PfCDessinGradue.tex +++ b/macros/latex/contrib/profcollege/latex/PfCDessinGradue.tex @@ -4,69 +4,76 @@ \setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1,Droites=false,DemiDroites=false,OrigineVariable=false,Code=false} \defKV[DessinGradue]{Traces=\setKV[DessinGradue]{Code}}% +\def\TraceDessinGradueCompletCode{% + % Paramètres + LongueurLigne=\useKV[DessinGradue]{Longueur}; + EcartVertical=\useKV[DessinGradue]{EcartVertical}; + Pas:=\useKV[DessinGradue]{Pas}; + NbLignes=\useKV[DessinGradue]{Lignes}; + Echelle=\useKV[DessinGradue]{Echelle}; + Debut:=\useKV[DessinGradue]{Debut}; + Fin:=\useKV[DessinGradue]{Fin}; + % + boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code; + Solution=\useKV[DessinGradue]{Solution}; + LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques}; + OrigineVariable:=\useKV[DessinGradue]{OrigineVariable}; + Droites=\useKV[DessinGradue]{Droites}; + DemiDroites=\useKV[DessinGradue]{DemiDroites}; + Code=\useKV[DessinGradue]{Code}; + vardef EffectuerLesTraces= + if Code: + \useKV[DessinGradue]{Traces}; + fi; + enddef; + % + pair La,Lb,Lab[]; + pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; + % + La=(0,0); + Lb-La=u*(LongueurLigne,0); + % + % On définit une fonction pour tracer les lignes en fonction du pas "Partage" + vardef TraceLignes(expr Partage)= + save RecupLigne; + picture RecupLigne; + RecupLigne=image( + if Droites: + drawarrow 1.05[Lb,La]--1.05[La,Lb]; + elseif DemiDroites: + drawarrow La--1.05[La,Lb]; + else: + trace segment(La,Lb); + fi; + for kl=0 upto Partage: + Lab[kl]:=(kl/Partage)[La,Lb]; + trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1)); + endfor; + ); + RecupLigne + enddef; + % On définit une fonction pour nommer les points nécessaires. + vardef DefinirPoints(text t)= + numeric nblignes,nbpas; + n:=0; + for p_=t: + n:=n+1; + if (n mod 3)=1: + nblignes:=p_; + elseif (n mod 3)=2: + nbpas:=p_; + elseif (n mod 3)=0: + p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical))); + fi; + endfor; + enddef; +} + \def\TraceDessinGradueComplet#1#2#3{% \ifluatex \mplibforcehmode \begin{mplibcode} - % Paramètres - LongueurLigne=\useKV[DessinGradue]{Longueur}; - EcartVertical=\useKV[DessinGradue]{EcartVertical}; - Pas:=\useKV[DessinGradue]{Pas}; - NbLignes=\useKV[DessinGradue]{Lignes}; - Echelle=\useKV[DessinGradue]{Echelle}; - Debut:=\useKV[DessinGradue]{Debut}; - Fin:=\useKV[DessinGradue]{Fin}; - - boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code; - Solution=\useKV[DessinGradue]{Solution}; - LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques}; - OrigineVariable:=\useKV[DessinGradue]{OrigineVariable}; - Droites=\useKV[DessinGradue]{Droites}; - DemiDroites=\useKV[DessinGradue]{DemiDroites}; - Code=\useKV[DessinGradue]{Code}; - - pair La,Lb,Lab[]; - pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; - - La=(0,0); - Lb-La=u*(\useKV[DessinGradue]{Longueur},0); - - % On définit une fonction pour tracer les lignes en fonction du pas "Partage" - vardef TraceLignes(expr Partage)= - save RecupLigne; - picture RecupLigne; - RecupLigne=image( - if \useKV[DessinGradue]{Droites}: - drawarrow 1.05[Lb,La]--1.05[La,Lb]; - elseif \useKV[DessinGradue]{DemiDroites}: - drawarrow La--1.05[La,Lb]; - else: - trace segment(La,Lb); - fi; - for kl=0 upto Partage: - Lab[kl]:=(kl/Partage)[La,Lb]; - trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1)); - endfor; - ); - RecupLigne - enddef; - - % On définit une fonction pour nommer les points nécessaires. - vardef DefinirPoints(text t)= - numeric nblignes,nbpas; - n:=0; - for p_=t: - n:=n+1; - if (n mod 3)=1: - nblignes:=p_; - elseif (n mod 3)=2: - nbpas:=p_; - elseif (n mod 3)=0: - p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical))); - fi; - endfor; - enddef; - + \TraceDessinGradueCompletCode% % On détermine le nombre de lignes et les origines particulières pair OrigA[],OrigB[]; if LignesIdentiques: @@ -141,69 +148,7 @@ trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else - \begin{mpost}[mpsettings={% - LongueurLigne=\useKV[DessinGradue]{Longueur}; - EcartVertical=\useKV[DessinGradue]{EcartVertical}; - Pas:=\useKV[DessinGradue]{Pas}; - NbLignes=\useKV[DessinGradue]{Lignes}; - Echelle=\useKV[DessinGradue]{Echelle}; - Debut:=\useKV[DessinGradue]{Debut}; - Fin:=\useKV[DessinGradue]{Fin}; - boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code; - Solution=\useKV[DessinGradue]{Solution}; - LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques}; - OrigineVariable:=\useKV[DessinGradue]{OrigineVariable}; - Droites=\useKV[DessinGradue]{Droites}; - DemiDroites=\useKV[DessinGradue]{DemiDroites}; - Code=\useKV[DessinGradue]{Code}; - vardef EffectuerLesTraces= - if Code: - \useKV[DessinGradue]{Traces}; - fi; - enddef; - }] - pair La,Lb,Lab[]; - pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; - - La=(0,0); - Lb-La=u*(\useKV[DessinGradue]{Longueur},0); - - % On définit une fonction pour tracer les lignes en fonction du pas "Partage" - vardef TraceLignes(expr Partage)= - save RecupLigne; - picture RecupLigne; - RecupLigne=image( - if \useKV[DessinGradue]{Droites}: - drawarrow 1.05[Lb,La]--1.05[La,Lb]; - elseif \useKV[DessinGradue]{DemiDroites}: - drawarrow La--1.05[La,Lb]; - else: - trace segment(La,Lb); - fi; - for kl=0 upto Partage: - Lab[kl]:=(kl/Partage)[La,Lb]; - trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1)); - endfor; - ); - RecupLigne - enddef; - - % On définit une fonction pour nommer les points nécessaires. - vardef DefinirPoints(text t)= - numeric nblignes,nbpas; - n:=0; - for p_=t: - n:=n+1; - if (n mod 3)=1: - nblignes:=p_; - elseif (n mod 3)=2: - nbpas:=p_; - elseif (n mod 3)=0: - p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical))); - fi; - endfor; - enddef; - + \begin{mpost}[mpsettings={\TraceDessinGradueCompletCode}] % On détermine le nombre de lignes et les origines particulières pair OrigA[],OrigB[]; if LignesIdentiques: diff --git a/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex b/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex index 17846d9d54..68e7bdbea4 100644 --- a/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex +++ b/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex @@ -15,121 +15,79 @@ \readlist*\ListePfCEngrenages{#2}% \setsepchar{,} \xdef\PfCFooEngrenages{} - % \foreachitem\compteur\in\ListePfCEngrenages{\expandafter\UpdatetoksEngrenages\compteur\nil}% \foreachitem\compteur\in\ListePfCEngrenages{% \xdef\PfCFooEngrenages{\PfCFooEngrenages \ListePfCEngrenages[\compteurcnt,1],\ListePfCEngrenages[\compteurcnt,2],}% }% \BuildEngrenages{\PfCFooEngrenages}% }% +\def\BuildEngrenagesCode#1{% + u:=\useKV[Engrenages]{Unite}; + CouleurEngrenage=\useKV[Engrenages]{Couleur}; + % + vardef LectureDonnees(text t)= + n:=0;k=0;l=0; + for p_=t: + n:=n+1; + if (n mod 2)=0: + l:=l+1; + Zz[l]=p_; + else: + k:=k+1; + Mm[k]=p_; + fi; + endfor; + enddef; + % + LectureDonnees(#1); + % + pair K; + K=(0,0); + picture EngrenageFinal; + EngrenageFinal=image( + trace Engrenage(Mm[1],Zz[1],(0,0)); + % + Signe=1; + % + for w=2 upto (n div 2): + K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0); + AngleRot[w]:=360/(2*Zz[w]); + if w=2: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + if (Zz[w] mod 2)=0: + Signe:=Signe*(-1); + fi; + else: + if (Zz[w] mod 2)=1: + if Signe=-1: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); + else: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + fi; + else: + Signe:=Signe*(-1); + if Signe=1: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); + else: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + fi; + fi; + fi; + endfor; + ); +} + \NewDocumentCommand\BuildEngrenages{m}{% \ifluatex \mplibforcehmode \begin{mplibcode} input PfCEngrenages; - - u:=\useKV[Engrenages]{Unite}; - CouleurEngrenage=\useKV[Engrenages]{Couleur}; - - vardef LectureDonnees(text t)= - n:=0;k=0;l=0; - for p_=t: - n:=n+1; - if (n mod 2)=0: - l:=l+1; - Zz[l]=p_; - else: - k:=k+1; - Mm[k]=p_; - fi; - endfor; - enddef; - - LectureDonnees(#1); - - pair K; - K=(0,0); - - trace Engrenage(Mm[1],Zz[1],(0,0)); - - Signe=1; - - for w=2 upto (n div 2): - K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0); - AngleRot[w]:=360/(2*Zz[w]); - if w=2: - trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); - if (Zz[w] mod 2)=0: - Signe:=Signe*(-1); - fi; - else: - if (Zz[w] mod 2)=1: - if Signe=-1: - trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); - else: - trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); - fi; - else: - Signe:=Signe*(-1); - if Signe=1: -trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); - else: -trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); - fi; - fi; - fi; - endfor; + \BuildEngrenagesCode{#1} + trace EngrenageFinal; \end{mplibcode} \else - \begin{mpost}[mpsettings={input PfCEngrenages;u:=\useKV[Engrenages]{Unite};CouleurEngrenage=\useKV[Engrenages]{Couleur};}] - vardef LectureDonnees(text t)= - n:=0;k=0;l=0; - for p_=t: - n:=n+1; - if (n mod 2)=0: - l:=l+1; - Zz[l]=p_; - else: - k:=k+1; - Mm[k]=p_; - fi; - endfor; - enddef; - - LectureDonnees(#1); - - pair K; - K=(0,0); - - trace Engrenage(Mm[1],Zz[1],(0,0)); - - Signe=1; - - for w=2 upto (n div 2): - K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0); - AngleRot[w]:=360/(2*Zz[w]); - if w=2: - trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); - if (Zz[w] mod 2)=0: - Signe:=Signe*(-1); - fi; - else: - if (Zz[w] mod 2)=1: - if Signe=-1: - trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); - else: - trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); - fi; - else: - Signe:=Signe*(-1); - if Signe=1: -trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); - else: -trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); - fi; - fi; - fi; - endfor; + \begin{mpost}[mpsettings={input PfCEngrenages;\BuildEngrenagesCode{#1}}] + trace EngrenageFinal; \end{mpost} \fi -} \ No newline at end of file +}% \ No newline at end of file diff --git a/macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex b/macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex index ea30623503..f1142bcdcf 100644 --- a/macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex +++ b/macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex @@ -1,7 +1,7 @@ %%% % Nombre Astral %%% -\setKVdefault[NombreAstral]{Solution=false,Graines=false,Echelle=1} +\setKVdefault[NombreAstral]{Solution=false,Graines=false,Echelle=1,Couleur=LightSteelBlue} \defKV[NombreAstral]{Graine=\setKV[NombreAstral]{Graines}}% \newtoks\toklisteNANombres% @@ -51,9 +51,12 @@ \mplibforcehmode \begin{mplibcode} Cible=\PfCNACible; + + color MiseEnValeurSol; + MiseEnValeurSol=\useKV[NombreAstral]{Couleur}; boolean Solution; - Solution:=\useKV[NombreAstral]{Solution}; + Solution=\useKV[NombreAstral]{Solution}; Echelle:=\useKV[NombreAstral]{Echelle}; @@ -102,11 +105,19 @@ fill ca[k] withcolor white; trace ca[k]; endfor; - vardef Affichage(text t)= + + vardef DefinirRappel(text t)= n:=0; for p_=t: n:=n+1; Rappel[n]=p_; + endfor; + enddef; + + vardef Affichage(text t)= + n:=0; + for p_=t: + n:=n+1; label(TEX("\Large"&p_),A[n]); endfor; enddef; @@ -115,16 +126,20 @@ k:=0; for p_=t: k:=k+1; - fill ca[p_] withcolor white; + fill ca[p_] withcolor if Solution=false: white else: MiseEnValeurSol fi; trace ca[p_]; label(TEX("\Large"&Rappel[p_]),u*(-7,5.6-1.5k)); trace cercles(u*(-7,5.6-1.5k),0.6u); endfor; enddef; - - Affichage(#1); + + DefinirRappel(#1); if Solution=false: + Affichage(#1); + Suppression(#2); + else: Suppression(#2); + Affichage(#1); fi; picture recap;% recap:=currentpicture scaled Echelle;% @@ -134,6 +149,8 @@ \else \begin{mpost}[mpsettings={% Echelle:=\useKV[NombreAstral]{Echelle}; + color MiseEnValeurSol; + MiseEnValeurSol=\useKV[NombreAstral]{Couleur}; Cible=\PfCNACible;boolean Solution;Solution:=\useKV[NombreAstral]{Solution}; string Rappel[]; n:=0; @@ -187,11 +204,20 @@ fill ca[k] withcolor white; trace ca[k]; endfor; + + vardef DefinirRappel(text t)= + n:=0; + for p_=t: + n:=n+1; + Rappel[n]=p_; + endfor; + enddef; + vardef Affichage(text t)= n:=0; for p_=t: n:=n+1; - label(LATEX("\noexpand\Large"&Rappel[n]),A[n]); + label(LATEX("\noexpand\Large"&p_),A[n]); endfor; enddef; @@ -199,18 +225,21 @@ k:=0; for p_=t: k:=k+1; - fill ca[p_] withcolor white; + fill ca[p_] withcolor if Solution=false: white else: MiseEnValeurSol fi; trace ca[p_]; label(LATEX("\noexpand\Large"&Rappel[p_]),u*(-7,5.6-1.5k)); trace cercles(u*(-7,5.6-1.5k),0.6u); endfor; enddef; - Affichage(#1); + DefinirRappel(#1); if Solution=false: + Affichage(#1); Suppression(#2); + else: + Suppression(#2); + Affichage(#1); fi; - picture recap;% recap:=currentpicture scaled Echelle;% currentpicture:=nullpicture;% diff --git a/macros/latex/contrib/profcollege/latex/PfCPapiers.tex b/macros/latex/contrib/profcollege/latex/PfCPapiers.tex index 8196c4d557..0bb41363ec 100644 --- a/macros/latex/contrib/profcollege/latex/PfCPapiers.tex +++ b/macros/latex/contrib/profcollege/latex/PfCPapiers.tex @@ -27,306 +27,264 @@ % \fi %} -\def\MPGrille#1#2#3#4{% - \ifluatex% - \mplibforcehmode% - \begin{mplibcode}% - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step (#4*100) until (#1*100): - draw verticon shifted(((k/100)*cm,0)); - endfor; - for k=0 step (#4*100) until (#2*100): - draw horizon shifted((0,(k/100)*cm)); - endfor; - \end{mplibcode}% - \else% - \begin{mpost}% - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step 0.5 until #1: - draw verticon shifted((k*cm,0)); - endfor; - for k=0 step 0.5 until #2: - draw horizon shifted((0,k*cm)); - endfor; - \end{mpost}% - \fi% +\def\MPGrilleCode{% + PapierLargeur=\PapierLargeur; + PapierHauteur=\PapierHauteur; + PapierGrille=\PapierGrille; + PapierGrillePointe=\PapierGrillePointe; + color PapierCouleur; + PapierCouleur=\useKV[Papiers]{Couleur}; + % + path horizon,verticon; + horizon=(0,0)--(PapierLargeur*cm,0); + verticon=(0,0)--(0,PapierHauteur*cm); + vardef Papier= + picture Papiers; + Papiers=image( + drawoptions(withcolor PapierCouleur); + if PapierGrillePointe>0: + for k=0 step (PapierGrillePointe*100) until (PapierLargeur*100): + for l=0 step (PapierGrillePointe*100) until (PapierHauteur*100): + fill (cercles((0,0),1pt) shifted(((k/100)*cm,(l/100)*cm))); + endfor; + endfor; + else: + for k=0 step (PapierGrille*100) until (PapierLargeur*100): + draw verticon shifted(((k/100)*cm,0)); + endfor; + for k=0 step (PapierGrille*100) until (PapierHauteur*100): + draw horizon shifted((0,(k/100)*cm)); + endfor; + fi; + ); + Papiers + enddef; }% -\def\MPGrillePointe#1#2#3#4{% +\def\MPGrille{% \ifluatex% \mplibforcehmode% \begin{mplibcode}% - drawoptions(withcolor #3); - for k=0 step (#4*100) until (#1*100): - for l=0 step (#4*100) until (#2*100): - fill (cercles((0,0),1pt) shifted(((k/100)*cm,(l/100)*cm))); - endfor; - endfor; + \MPGrilleCode + trace Papier; \end{mplibcode}% \else% - \begin{mpost}% - drawoptions(withcolor #3); - for k=0 step (#4*100) until (#1*100): - for l=0 step (#4*100) until (#2*100): - fill (cercles((0,0),0.5pt) shifted(((k/100)*cm,(l/100)*cm))); - endfor; - endfor; + \begin{mpost}[mpsettings={\MPGrilleCode}] + trace Papier; \end{mpost}% \fi% }% -\def\MPCinq#1#2#3{% - \ifluatex% - \mplibforcehmode% - \begin{mplibcode}% - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step 0.5 until #1: - draw verticon shifted((k*cm,0)); - endfor; - for k=0 step 0.5 until #2: - draw horizon shifted((0,k*cm)); - endfor; - if \useKV[Papiers]{CodeAfter}: - \useKV[Papiers]{Traces}; - fi; - \end{mplibcode}% - \else% - \begin{mpost} - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step 0.5 until #1: - draw verticon shifted((k*cm,0)); - endfor; - for k=0 step 0.5 until #2: - draw horizon shifted((0,k*cm)); - endfor; - \end{mpost}% - \fi% +\def\MPCinq{% + \xdef\PapierGrille{0.5}% + \MPGrille }% -\def\MPSeyes#1#2#3{% +\def\MPSeyesCode{% + PapierLargeur=\PapierLargeur; + PapierHauteur=\PapierHauteur; + color PapierCouleur; + PapierCouleur=\useKV[Papiers]{Couleur}; + u:=\useKV[Papiers]{Echelle}; + path horizon,verticon; + horizon=(0,0)--(PapierLargeur*cm,0); + verticon=(0,0)--(0,PapierHauteur*cm); + vardef Seyes= + picture PapierSeyes; + PapierSeyes=image( + drawoptions(withcolor PapierCouleur); + for k=0 step u until (PapierLargeur*10): + draw verticon shifted(((k/10)*cm,0)); + endfor; + for k=0 step (u/4) until (PapierHauteur*10): + draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; + endfor; + for k=0 step u until (PapierHauteur*10): + draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25; + endfor; + ); + PapierSeyes + enddef; +} + +\def\MPSeyes{% \ifluatex% \mplibforcehmode% \begin{mplibcode}% - u:=\useKV[Papiers]{Echelle}; - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step u until (#1*10): - draw verticon shifted(((k/10)*cm,0)); - endfor; - for k=0 step (u/4) until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; - endfor; - for k=0 step u until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25; - endfor; + \MPSeyesCode + trace Seyes; \end{mplibcode}% \else% - \begin{mpost}[mpsettings={u:=\useKV[Papiers]{Echelle};}]% - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step u until (#1*10): - draw verticon shifted(((k/10)*cm,0)); - endfor; - for k=0 step (u/4) until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; - endfor; - for k=0 step u until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25; - endfor; + \begin{mpost}[mpsettings={\MPSeyesCode}]% + trace Seyes; \end{mpost} \fi% }% -\def\MPMillimetre#1#2#3{% +\def\MPMillimetreCode{% + PapierLargeur=\PapierLargeur; + PapierHauteur=\PapierHauteur; + color PapierCouleur; + PapierCouleur=\useKV[Papiers]{Couleur}; + path horizon,verticon; + horizon=(0,0)--(PapierLargeur*cm,0); + verticon=(0,0)--(0,PapierHauteur*cm); + vardef MPMilli= + picture MPMillimetre; + MPMillimetre=image( + drawoptions(withcolor PapierCouleur); + for k=0 step 1 until (PapierLargeur*10): + draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2; + endfor; + for k=0 step 5 until (PapierLargeur*10): + draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5; + endfor; + for k=0 step 1 until (PapierLargeur): + draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25; + endfor; + for k=0 step 1 until (PapierHauteur*10): + draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2; + endfor; + for k=0 step 5 until (PapierHauteur*10): + draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; + endfor; + for k=0 step 1 until (PapierHauteur): + draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25; + endfor; + ); + MPMillimetre + enddef; +} + +\def\MPMillimetre{% \ifluatex% \mplibforcehmode% \begin{mplibcode}% - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step 1 until (#1*10): - draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2; - endfor; - for k=0 step 5 until (#1*10): - draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5; - endfor; - for k=0 step 1 until (#1): - draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25; - endfor; - for k=0 step 1 until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2; - endfor; - for k=0 step 5 until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; - endfor; - for k=0 step 1 until (#2): - draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25; - endfor; + \MPMillimetreCode + trace MPMilli; \end{mplibcode}% \else% - \begin{mpost}% - path horizon,verticon; - horizon=(0,0)--(#1*cm,0); - verticon=(0,0)--(0,#2*cm); - drawoptions(withcolor #3); - for k=0 step 1 until (#1*10): - draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2; - endfor; - for k=0 step 5 until (#1*10): - draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5; - endfor; - for k=0 step 1 until (#1): - draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25; - endfor; - for k=0 step 1 until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2; - endfor; - for k=0 step 5 until (#2*10): - draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; - endfor; - for k=0 step 1 until (#2): - draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25; - endfor; + \begin{mpost}[mpsettings={\MPMillimetreCode}] + trace MPMilli; \end{mpost}% \fi% }% -\def\MPIsometrique#1#2#3{% +\def\MPIsometriqueCode{% + PapierLargeur=\PapierLargeur; + PapierHauteur=\PapierHauteur; + color PapierCouleur; + PapierCouleur=\useKV[Papiers]{Couleur}; + path diagon,antidiagon; + diagon=(0,0)--PapierHauteur*cm*(sqrt(3),1); + antidiagon=(0,0)--PapierHauteur*cm*(-sqrt(3),1); + vardef MPIso= + picture MPIsom; + MPIsom=image( + drawoptions(withcolor PapierCouleur); + for k=0 upto 2*(PapierLargeur+PapierHauteur): + draw antidiagon shifted((k*cm,0)); + endfor; + for k=-(2*ceiling(PapierLargeur+PapierHauteur)) upto (2*ceiling(PapierLargeur+PapierHauteur)): + draw diagon shifted((k*cm,0)); + endfor; + clip currentpicture to polygone((0,0),(PapierLargeur*cm,0),(PapierLargeur*cm,PapierHauteur*cm),(0,PapierHauteur*cm)); + ); + MPIsom + enddef; +} + +\def\MPIsometrique{% \ifluatex% \mplibforcehmode% \begin{mplibcode}% - path diagon,antidiagon; - diagon=(0,0)--#2*(sqrt(3)*cm,1*cm); - antidiagon=(0,0)--#2*(-sqrt(3)*cm,1*cm); - drawoptions(withcolor #3); - for k=0 step 1 until (#1): - draw diagon shifted((k*cm,0)); - draw antidiagon shifted((k*cm,0)); - endfor; - for k=0 step (sqrt(3)/3) until (#2): - draw diagon shifted((0,k*cm)); - draw antidiagon shifted((#1*cm,k*cm)); - endfor; - clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); + \MPIsometriqueCode + trace MPIso; \end{mplibcode}% \else% - \begin{mpost}% - path diagon,antidiagon; - diagon=(0,0)--#2*(sqrt(3)*cm,1*cm); - antidiagon=(0,0)--#2*(-sqrt(3)*cm,1*cm); - drawoptions(withcolor #3); - for k=0 step 1 until (#1): - draw diagon shifted((k*cm,0)); - draw antidiagon shifted((k*cm,0)); - endfor; - for k=0 step (sqrt(3)/3) until (#2): - draw diagon shifted((0,k*cm)); - draw antidiagon shifted((#1*cm,k*cm)); - endfor; - clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); + \begin{mpost}[mpsettings={\MPIsometriqueCode}] + trace MPIso; \end{mpost}% \fi% }% -\def\MPIsometriquePointe#1#2#3{% +\def\MPIsometriquePointeCode{% + PapierLargeur=\PapierLargeur; + PapierHauteur=\PapierHauteur; + color PapierCouleur; + PapierCouleur=\useKV[Papiers]{Couleur}; + pair diagon,antidiagon; + diagon=(1pt,1pt); + antidiagon=(1pt+0.5cm,1pt+0.5*(sqrt(3)*1cm/3)); + vardef TraceIsoPointe= + picture PapierIsoPointe; + PapierIsoPointe=image( + drawoptions(withcolor PapierCouleur); + for k=0 step (sqrt(3)/3) until (PapierHauteur): + for l=0 step 1 until (PapierLargeur): + fill (cercles(diagon,1pt) shifted((l*cm,k*cm))); + fill (cercles(antidiagon,1pt) shifted((l*cm,k*cm))); + endfor; + endfor; + clip currentpicture to polygone((0,0),(PapierLargeur*cm+2pt,0),(PapierLargeur*cm+2pt,PapierHauteur*cm+1pt),(0,PapierHauteur*cm+1pt)); + ); + PapierIsoPointe + enddef; +} + +\def\MPIsometriquePointe{% \ifluatex% \mplibforcehmode% \begin{mplibcode}% - pair diagon,antidiagon; - diagon=(1pt,1pt); - antidiagon=(1pt+0.5cm,1pt+0.5*(sqrt(3)*1cm/3)); - drawoptions(withcolor #3); - for k=0 step (sqrt(3)/3) until (#2): - for l=0 step 1 until (#1): - fill (cercles(diagon,1pt) shifted((l*cm,k*cm))); - fill (cercles(antidiagon,1pt) shifted((l*cm,k*cm))); - endfor; - endfor; - clip currentpicture to polygone((0,0),(#1*cm+2pt,0),(#1*cm+2pt,#2*cm+1pt),(0,#2*cm+1pt)); + \MPIsometriquePointeCode + trace TraceIsoPointe; \end{mplibcode}% \else% - \begin{mpost}% - pair diagon,antidiagon; - diagon=(1pt,1pt); - antidiagon=(1pt+0.5cm,1pt+0.5*(sqrt(3)*1cm/3)); - drawoptions(withcolor #3); - for k=0 step (sqrt(3)/3) until (#2): - for l=0 step 1 until (#1): - fill (cercles(diagon,1pt) shifted((l*cm,k*cm))); - fill (cercles(antidiagon,1pt) shifted((l*cm,k*cm))); - endfor; - endfor; - clip currentpicture to polygone((0,0),(#1*cm+2pt,0),(#1*cm+2pt,#2*cm+1pt),(0,#2*cm+1pt)); + \begin{mpost}[mpsettings={\MPIsometriquePointeCode}] + trace TraceIsoPointe; \end{mpost}% \fi% }% -\def\MPTriangulaire#1#2#3{% +\def\MPTriangulaireCode{% + PapierLargeur=\PapierLargeur; + PapierHauteur=\PapierHauteur; + color PapierCouleur; + PapierCouleur=\useKV[Papiers]{Couleur}; + path horizon,diagon,antidiagon; + horizon=(0,0)--(PapierLargeur*cm,0); + diagon=(0,0)--PapierHauteur*cm*(sqrt(3)/3,1); + antidiagon=(0,0)--PapierHauteur*cm*(-sqrt(3)/3,1); + vardef PapierTri= + picture PapierTriangle; + PapierTriangle=image( + drawoptions(withcolor PapierCouleur); + for k=0 upto 2*ceiling(PapierLargeur): + draw diagon shifted((k*cm,0)); + draw antidiagon shifted((k*cm,0)); + endfor; + for k=sqrt(3) step (sqrt(3)) until (PapierHauteur): + draw diagon shifted((0,k*cm)); + endfor; + for k=0 step (sqrt(3)/2) until (PapierHauteur): + draw horizon shifted((0,k*cm)); + endfor; + clip currentpicture to polygone((0,0),(PapierLargeur*cm,0),(PapierLargeur*cm,PapierHauteur*cm),(0,PapierHauteur*cm)); + ); + PapierTriangle + enddef; +} + +\def\MPTriangulaire{% \ifluatex% \mplibforcehmode% \begin{mplibcode}% - path horizon,diagon,antidiagon; - horizon=(0,0)--(#1*cm,0); - diagon=(0,0)--#2*(sqrt(3)*cm/3,1*cm); - antidiagon=(0,0)--#2*(-sqrt(3)*cm/3,1*cm); - drawoptions(withcolor #3); - for k=0 step 1 until #1: - draw diagon shifted((k*cm,0)); - endfor; - for k=0 step (sqrt(3)) until (#2): - draw diagon shifted((0,k*cm)); - endfor; - for k=0 step 1 until (#1): - draw antidiagon shifted((k*cm,0)); - endfor; - for k=0 step (sqrt(3)) until (#2): - draw antidiagon shifted((#1*cm,k*cm)); - endfor; - for k=0 step (sqrt(3)/2) until (#2): - draw horizon shifted((0,k*cm)); - endfor; - clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); + \MPTriangulaireCode + trace PapierTri; \end{mplibcode}% \else% - \begin{mpost}% - path horizon,diagon,antidiagon; - horizon=(0,0)--(#1*cm,0); - diagon=(0,0)--#2*(sqrt(3)*cm/3,1*cm); - antidiagon=(0,0)--#2*(-sqrt(3)*cm/3,1*cm); - drawoptions(withcolor #3); - for k=0 step 1 until #1: - draw diagon shifted((k*cm,0)); - endfor; - for k=0 step (sqrt(3)) until (#2): - draw diagon shifted((0,k*cm)); - endfor; - for k=0 step 1 until (#1): - draw antidiagon shifted((k*cm,0)); - endfor; - for k=0 step (sqrt(3)) until (#2): - draw antidiagon shifted((#1*cm,k*cm)); - endfor; - for k=0 step (sqrt(3)/2) until (#2): - draw horizon shifted((0,k*cm)); - endfor; - clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); + \begin{mpost}[mpsettings={\MPTriangulaireCode}] + trace PapierTri; \end{mpost}% \fi% }% @@ -335,6 +293,33 @@ \newlength{\PapierLeftCurrent} +\def\PfCPapierTest{% + \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0 || \useKV[Papiers]{Grille}>0}{% + \MPGrille% + }{\ifboolKV[Papiers]{Baseline}{% + \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% + }{% + \ifboolKV[Papiers]{IsometriquePointe}{% + \MPIsometriquePointe% + }{% + \ifboolKV[Papiers]{Triangle}{% + \MPTriangulaire% + }{\ifboolKV[Papiers]{Millimetre}{% + \MPMillimetre% + }{\ifboolKV[Papiers]{Isometrique}{% + \MPIsometrique% + }{\ifboolKV[Papiers]{Seyes}{% + \MPSeyes% + }{\MPCinq% + }% + }% + }% + }% + }% + }% + }% +}% + \newcommand\Papiers[1][]{% \useKVdefault[Papiers]% \setKV[Papiers]{#1}% @@ -355,34 +340,7 @@ \xdef\PapierLargeur{\fpeval{\textwidth/1cm}}% \begin{tikzpicture}[remember picture,overlay]% \node[anchor=south west,inner sep=0pt,transform canvas={xshift=\PapierLeft,yshift=\PapierBottom}] at (current page.south west) {% - \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0}{% - \MPGrillePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrillePointe}% - }{% - \xintifboolexpr{\useKV[Papiers]{Grille}>0}{% - \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}% - }{\ifboolKV[Papiers]{Baseline}{% - \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{% - \ifboolKV[Papiers]{IsometriquePointe}{% - \MPIsometriquePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{% - \ifboolKV[Papiers]{Triangle}{% - \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Millimetre}{% - \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Isometrique}{% - \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Seyes}{% - \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }% - }% - }% - }% - }% - }% - }% - }% + \PfCPapierTest% };% \end{tikzpicture}% }{% @@ -398,60 +356,11 @@ \xdef\PapierLargeur{\fpeval{\paperwidth/1cm}}% \begin{tikzpicture}[remember picture,overlay]% \node[anchor=south west,inner sep=0pt] at (current page.south west) {% - \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0}{% - \MPGrillePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrillePointe}% - }{% - \xintifboolexpr{\useKV[Papiers]{Grille}>0}{% - \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}% - }{\ifboolKV[Papiers]{IsometriquePointe}{% - \MPIsometriquePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Triangle}{% - \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Millimetre}{% - \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Isometrique}{% - \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Seyes}{% - \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }% - }% - }% - }% - }% - }% - }% + \PfCPapierTest% };% \end{tikzpicture}% }{% - \xintifboolexpr{\useKV[Papiers]{GrillePointe}>0}{% - \MPGrillePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrillePointe}% - }{% - \xintifboolexpr{\useKV[Papiers]{Grille}>0}{% - \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}% - }{\ifboolKV[Papiers]{Baseline}{% - \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{% - \ifboolKV[Papiers]{IsometriquePointe}{% - \MPIsometriquePointe{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{% - \ifboolKV[Papiers]{Triangle}{% - \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Millimetre}{% - \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Isometrique}{% - \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\ifboolKV[Papiers]{Seyes}{% - \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% - }% - }% - }% - }% - }% - }% - }% - }% + \PfCPapierTest }% }% }% \ No newline at end of file diff --git a/macros/latex/contrib/profcollege/latex/PfCPavage.tex b/macros/latex/contrib/profcollege/latex/PfCPavage.tex new file mode 100644 index 0000000000..245afb0593 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCPavage.tex @@ -0,0 +1,1216 @@ +%%% +% Pavage +%%% +\setKVdefault[Pavage]{% + Before=false, + Niveau=3, + Couleur=white, + Backgrounds=false, + Numerotation=false, + Depart=0, + Complete=false, + After=false, + Demo=false, + Regulier=false, + Cote=1, + Lignes=4, + Colonnes=4, + SemiRegulier=false, + Reseau=false, + Basei={u*(0.75,0)}, + Basej={u*(0,0.5)}, + Quadrilatere=false, + Escher=false, + Rayon=1, + Epaisseur=1, + Position=0.5, + Ecart=10, + Colore=false, + CouleurUn=white, + CouleurDeux=white, + CouleurTrois=white, + CouleurQuatre=white +}% +\defKV[Pavage]{Motif=\setKV[Pavage]{Before}}% +\defKV[Pavage]{Traces=\setKV[Pavage]{After}}% +\defKV[Pavage]{ArrierePlan=\setKV[Pavage]{Backgrounds}}% +\defKV[Pavage]{CouleurUn=\setKV[Pavage]{Colore}}% +\defKV[Pavage]{CouleurDeux=\setKV[Pavage]{Colore}}% +\defKV[Pavage]{CouleurTrois=\setKV[Pavage]{Colore}}% +\defKV[Pavage]{CouleurQuatre=\setKV[Pavage]{Colore}}% + +\def\MPPavageBase{% + boolean Before,Numerote,Complete,Backgrounds,After,Demo; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Complete=\useKV[Pavage]{Complete}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + Demo=\useKV[Pavage]{Demo}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + Epaisseur=\useKV[Pavage]{Epaisseur}; + vardef pavages(expr chemin,tour,coul)= + if Backgrounds: + fill CadrePavage withcolor ColArrierePlan; + fi; + save Base; + picture Base; + pair A,B,C,D; + A=u*(0,0); + B=u*(1,0); + C=u*(1,1); + D=u*(0,1); + path especes; + especes=chemin--rotation(chemin,B,-90)--reverse(rotation(symetrie(chemin,B,C),B,-90))--rotation(chemin,B,90)--cycle; + if tour=0: + Base=image( + trace chemin; + ); + elseif tour=1: + Base=image( + fill especes withcolor coul; + trace especes; + A:=A shifted(u*(0,-1)); + B:=B shifted(u*(1,-1)); + C:=C shifted(u*(1,0)); + ); + elseif tour>=2: + Base=pavages(chemin,tour-1,coul); + Base:=image( + trace Base; + trace symetrie(Base,B,C); + trace rotation(symetrie(Base,B,C),B,-90); + trace rotation(Base,B,90); + A:=A shifted(u*(0,-(2**(tour-1)))); + B:=B shifted(u*(2**(tour-1),-(2**(tour-1)))); + C:=C shifted(u*(2**(tour-1),0)); + ); + fi; + Base +enddef; +% +vardef pavagescar(expr chemin,tour,coul)= + save BaseCar; + picture BaseCar; + pair A,B,C,D; + A=u*(0,0); + B=u*(1,0); + C=u*(1,1); + D=u*(0,1); + if tour=0: + BaseCar=image( + trace chemin; + trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + ); + elseif tour=1: + BaseCar=image( + trace chemin; + drawoptions(dashed evenly); + trace rotation(chemin,B,-90); + trace reverse(rotation(symetrie(chemin,B,C),B,-90)); + trace rotation(chemin,B,90); + drawoptions(); + A:=A shifted(u*(0,-1)); + B:=B shifted(u*(1,-1)); + C:=C shifted(u*(1,0)); + trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + trace iso(A,D)--iso(B,C) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + trace iso(A,B)--iso(C,D) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + ); + elseif tour>=2: + BaseCar=image( + trace pavages(chemin,tour-1,coul); + trace symetrie(pavages(chemin,tour-1,coul),B,C);%coul+0.5blanc + trace rotation(symetrie(pavages(chemin,tour-1,coul),B,C),B,-90); + trace rotation(pavages(chemin,tour-1,coul),B,90); + A:=A shifted(u*(0,-(2**(tour-1)))); + B:=B shifted(u*(2**(tour-1),-(2**(tour-1)))); + C:=C shifted(u*(2**(tour-1),0)); + ); + fi; + BaseCar + enddef; + % + vardef CadrePavage= + u*(0,1)--u*(0,-(2**Niveau-1))--u*(2**Niveau,-(2**Niveau-1))--u*(2**(Niveau),1)--cycle + enddef; + % + vardef Numerotation= + n:=Depart; + pair B; + B=u*(1,0); + if Complete: + for k=0 upto 2**(Niveau)-2: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + if (k mod 2)=0: + label(TEX(decimal(n)),B+u*(2l,-k)); + else: + if l<(2**(Niveau-1))-1: + label(TEX(decimal(n)),B+u*(2l+1,-k)); + else: + n:=n-1; + fi; + fi; + endfor; + endfor; + else: + for k=0 upto (2**(Niveau-1))-1: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + label(TEX(decimal(n)),B+2u*(l,-k)); + endfor; + endfor; + fi; + enddef; + % + vardef NumerotationPDF= + n:=Depart; + pair B; + B=u*(1,0); + if Complete: + for k=0 upto 2**(Niveau)-2: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + if (k mod 2)=0: + label(TEX(decimal(n)),B+u*(2l,-k)); + else: + if l<(2**(Niveau-1))-1: + label(LATEX(decimal(n)),B+u*(2l+1,-k)); + fi; + fi; + endfor; + endfor; + else: + for k=0 upto (2**(Niveau-1))-1: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + label(LATEX(decimal(n)),B+2u*(l,-k)); + endfor; + endfor; + fi; + enddef; + % + vardef PlacePointSupport= + n:=Depart; + pair K[],L[],M[],N[]; + K[0]=u*(0,0); + M[0]=u*(1,1); + if Complete: + for k=0 upto 2**(Niveau)-2: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + if (k mod 2)=0: + K[n]:=K0+u*(2l,-k); + M[n]:=M0+u*(2l,-k); + else: + if l<(2**(Niveau-1))-1: + K[n]:=K0+u*(2l+1,-k); + M[n]:=M0+u*(2l+1,-k); + else: + n:=n-1; + fi; + fi; + endfor; + endfor; + else: + for k=0 upto (2**(Niveau-1))-1: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + K[n]=K[0]+2u*(l,-k); + M[n]=M[0]+2u*(l,-k); + endfor; + endfor; + fi; + enddef; + vardef EffectuerTraces= + \useKV[Pavage]{Traces} + enddef; +}% + +\def\MPReseauRegulier{% + boolean Before,Numerote,Backgrounds,After; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Cote=\useKV[Pavage]{Cote}; + Lignes=\useKV[Pavage]{Lignes}; + Colonnes=\useKV[Pavage]{Colonnes}; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + Epaisseur=\useKV[Pavage]{Epaisseur}; + pair A[]; + A1=(0,0); + A2-A1=u*Cote*(1,0); + vardef PavageRegulier(expr Niv)= + picture Retour; + if Niv=3: + A3=rotation(A2,A1,60); + path TriBase,CadrePavage; + TriBase=polygone(A1,A2,A3); + CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,0.5*sqrt(3)*Lignes),Cote*cm*(0,0.5*sqrt(3)*Lignes)); + Retour=image( + fill CadrePavage withcolor ColPavage; + for k=0 upto Lignes: + for l=-1 upto Colonnes+1: + if k mod 2=0: + trace TriBase shifted (Cote*cm*(l,0.5*sqrt(3)*k)); + else: + trace TriBase shifted (Cote*cm*(l+0.5,0.5*sqrt(3)*k)); + fi; + endfor; + endfor; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled Epaisseur; + ); + elseif Niv=4: + A3=rotation(A1,A2,-90); + A4-A3=A1-A2; + path QuadriBase,CadrePavage; + QuadriBase=polygone(A1,A2,A3,A4); + CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,Lignes),Cote*cm*(0,Lignes)); + Retour=image( + fill CadrePavage withcolor ColPavage; + for k=0 upto Lignes-1: + for l=0 upto Colonnes-1: + trace QuadriBase shifted (Cote*cm*(l,k)); + endfor; + endfor; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled Epaisseur; + ); + elseif Niv=6: + A3=rotation(A1,A2,-120); + A4=rotation(A2,A3,-120); + A5=rotation(A3,A4,-120); + A6=rotation(A4,A5,-120); + path HexaBase,CadrePavage; + HexaBase=polygone(A1,A2,A3,A4,A5,A6); + CadrePavage=polygone(Cote*cm*(1,0),Cote*cm*(3*Colonnes,0),Cote*cm*(3*Colonnes,sqrt(3)*(Lignes-1)),Cote*cm*(1,sqrt(3)*(Lignes-1))); + Retour=image(% + fill CadrePavage withcolor ColPavage; + for k=-1 upto 2*Lignes+1: + for l=-1 upto Colonnes+1: + if k mod 2=1: + trace HexaBase shifted (Cote*cm*(3*l,0.5*sqrt(3)*k)); + else: + trace HexaBase shifted (Cote*cm*(1.5+3*l,sqrt(3)+0.5*sqrt(3)*k)); + fi; + endfor; + endfor; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled Epaisseur; + ); + fi; + Retour + enddef; + % + vardef PlacePointSupport= + n:=Depart; + pair B;pair C;pair vdepla; + pair Hexa[],Hexb[],Hexc[],Hexd[],Hexe[],Hexf[]; + pair Cara[],Carb[],Carc[],Card[]; + pair Tria[],Trib[],Tric[]; + path Maille[]; + if Niveau=3: + B=iso(A1,A2,A3); + C=symetrie(B,A2,A3); + for k=1 upto Lignes: + for l=1 upto 2*Colonnes-1: + n:=n+1; + if k mod 2=1: + nbv:=(k-1)*1.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + else: + nbv:=(k-1)*1.5+0.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B)); + fi; + fi; + if (n mod 2)=0: + Tria[n]=rotation(A1,B,180) shifted vdepla; + Trib[n]=rotation(A2,B,180) shifted vdepla; + Tric[n]=rotation(A3,B,180) shifted vdepla; + else: + Tria[n]-A1=vdepla; + Trib[n]-A2=vdepla; + Tric[n]-A3=vdepla; + fi; + Maille[n]=polygone(Tria[n],Trib[n],Tric[n]); + endfor; + endfor; + elseif Niveau=4: + B=iso(A1,A2,A3,A4); + for k=1 upto Lignes: + for l=1 upto Colonnes: + n:=n+1; + vdepla:=Cote*cm*((l-1),(k-1)); + Cara[n]-A1=vdepla; + Carb[n]-A2=vdepla; + Carc[n]-A3=vdepla; + Card[n]-A4=vdepla; + Maille[n]=polygone(Cara[n],Carb[n],Carc[n],Card[n]); + endfor; + endfor; + elseif Niveau=6: + B=iso(A1,A2,A3,A4,A5,A6); + C=symetrie(B,A3,A4); + for k=1 upto Lignes-1: + for l=1 upto 2*Colonnes-1: + n:=n+1; + nbv:=(k-1)*3; + if l mod 2=1: + vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + if k=Lignes-1: + if l mod 2=1: + Hexa[n]-A1=vdepla; + Hexb[n]-A2=vdepla; + Hexc[n]-A3=vdepla; + Hexd[n]-A4=vdepla; + Hexe[n]-A5=vdepla; + Hexf[n]-A6=vdepla; + else: + n:=n-1; + fi; + else: + Hexa[n]-A1=vdepla; + Hexb[n]-A2=vdepla; + Hexc[n]-A3=vdepla; + Hexd[n]-A4=vdepla; + Hexe[n]-A5=vdepla; + Hexf[n]-A6=vdepla; + fi; + Maille[n]:=polygone(Hexa[n],Hexb[n],Hexc[n],Hexd[n],Hexe[n],Hexf[n]); + endfor; + endfor; + fi; + enddef; + % + vardef Numerotation= + n:=Depart; + pair B;pair C;pair vdepla; + if Niveau=3: + B=iso(A1,A2,A3); + C=symetrie(B,A2,A3); + for k=1 upto Lignes: + for l=1 upto 2*Colonnes-1: + n:=n+1; + if k mod 2=1: + nbv:=(k-1)*1.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + else: + nbv:=(k-1)*1.5+0.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B)); + fi; + fi; + label(TEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=4: + B=iso(A1,A2,A3,A4); + for k=1 upto Lignes: + for l=1 upto Colonnes: + n:=n+1; + vdepla:=Cote*cm*((l-1),(k-1)); + label(TEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=6: + B=iso(A1,A2,A3,A4,A5,A6); + C=symetrie(B,A3,A4); + for k=1 upto Lignes-1: + for l=1 upto 2*Colonnes-1: + n:=n+1; + nbv:=(k-1)*3; + if l mod 2=1: + vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + if k=Lignes-1: + if l mod 2=1: + label(TEX(decimal(n)),B shifted vdepla); + else: + n:=n-1; + fi; + else: + label(TEX(decimal(n)),B shifted vdepla); + fi; + endfor; + endfor; + fi; + enddef; + % + vardef NumerotationPDF= + n:=Depart; + pair B;pair C;pair vdepla; + if Niveau=3: + B=iso(A1,A2,A3); + C=symetrie(B,A2,A3); + for k=1 upto Lignes: + for l=1 upto 2*Colonnes-1: + n:=n+1; + if k mod 2=1: + nbv:=(k-1)*1.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + else: + nbv:=(k-1)*1.5+0.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B)); + fi; + fi; + label(LATEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=4: + B=iso(A1,A2,A3,A4); + for k=1 upto Lignes: + for l=1 upto Colonnes: + n:=n+1; + vdepla:=Cote*cm*((l-1),(k-1)); + label(LATEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=6: + B=iso(A1,A2,A3,A4,A5,A6); + C=symetrie(B,A3,A4); + for k=1 upto Lignes-1: + for l=1 upto 2*Colonnes-1: + n:=n+1; + nbv:=(k-1)*3; + if l mod 2=1: + vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + if k=Lignes-1: + if l mod 2=1: + label(LATEX(decimal(n)),B shifted vdepla); + else: + n:=n-1; + fi; + else: + label(LATEX(decimal(n)),B shifted vdepla); + fi; + endfor; + endfor; + fi; + enddef; + vardef EffectuerTraces= + \useKV[Pavage]{Traces} + enddef; +}% + +\def\MPReseauCode{% + boolean Before,Numerote,Backgrounds,After; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Cote=\useKV[Pavage]{Cote}; + Lignes=\useKV[Pavage]{Lignes}; + Colonnes=\useKV[Pavage]{Colonnes}; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + Epaisseur=\useKV[Pavage]{Epaisseur}; + pair basei,basej; + basei=\useKV[Pavage]{Basei}; + basej=\useKV[Pavage]{Basej}; + vardef PavageReseau= + for k=0 upto Lignes-1: + for l=0 upto Colonnes -1: + trace Motif shifted (k*basei+l*basej); + endfor; + endfor; + enddef; + vardef Numerotation= + n:=Depart; + k:=0; + pair A[],B[]; + A[0]=point(0) of Motif; + B[0]=A[0]; + forever: + k:=k+1; + A[k]=point(k) of Motif; + B[0]:=B[0]+A[k]; + exitif A[k]=A[0]; + endfor; + B[0]:=B[0]/k; + for k=0 upto Lignes-1: + for l=0 upto Colonnes -1: + n:=n+1; + label(decimal(n),B[0] shifted(k*basei+l*basej)); + endfor; + endfor; + enddef; + vardef PlacePointSupport= + pair M[][]; + path Maille[]; + n:=Depart; + k:=0; + pair A[],B[]; + A[0]=point(0) of Motif; + forever: + k:=k+1; + A[k]=point(k) of Motif; + B[0]:=B[0]+A[k]; + exitif A[k]=A[0]; + endfor; + B[0]:=B[0]/k; + NbSommet:=k; + for k=0 upto Lignes-1: + for l=0 upto Colonnes -1: + n:=n+1; + for m=1 upto NbSommet: + M[n][m]=A[m] shifted (k*basei+l*basej); + endfor; + Maille[n]=polygone(M[n][1] for r=2 upto NbSommet:,M[n][r] endfor); + endfor; + endfor; + enddef; + vardef EffectuerTraces= + \useKV[Pavage]{Traces} + enddef; +}% + +\def\MPPeriodiqueCode{% + boolean Before,Numerote,Backgrounds,After; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Cote=\useKV[Pavage]{Cote}; + Lignes=\useKV[Pavage]{Lignes}; + Colonnes=\useKV[Pavage]{Colonnes}; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + Epaisseur=\useKV[Pavage]{Epaisseur}; + pair basei,basej; + vardef PavagePeriodique= + basei=iso(A1,A2)-iso(A1,A0); + basej=iso(A0,A3)-iso(A1,A0); + path CadrePavage; + pair Cpa[]; + Cpa1=(0,ypart(-2*basej)); + Cpa2=(xpart(2*Colonnes*basei),ypart(-2*basej)); + Cpa3=(xpart(2*Colonnes*basei),ypart(2*Lignes*basej)); + Cpa4=(0,ypart(2*Lignes*basej)); + CadrePavage=Cpa1--Cpa2--Cpa3--Cpa4--cycle; + picture BlocContour,BlocPavage; + BlocContour=image( + for k=-Lignes upto Lignes+1: + for l=-1 upto Colonnes+1: + if ColPavage<>white: + fill Motif shifted (2*l*basei+2*k*basej) withcolor ColPavage; + fill symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej) withcolor ColPavage; + fi; + trace Motif shifted (2*l*basei+2*k*basej); + trace symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej); + endfor; + endfor; + drawoptions(); + ); + BlocPavage=image( + trace BlocContour; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled Epaisseur; + ); + BlocPavage + enddef; + vardef Numerotation= + n:=-1; + pair ISO; + for k=-Lignes upto Lignes+1: + for l=-1 upto Colonnes+1: + n:=n+2; + ISO:=B[0] shifted (2*l*basei+2*k*basej); + if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0,0.2))) and (ypart(ISO)xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0,0.2))) and (ypart(ISO)xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0,0.2))) and (ypart(ISO)3: + PointE[nbpt][7]=rotation(O7,O1,aanngg) shifted (ll*basei+kk*basej); + PointE[nbpt][8]=rotation(O8,O1,aanngg) shifted (ll*basei+kk*basej); + fi; + if Niveau>4: + PointE[nbpt][9]=rotation(O9,O1,aanngg) shifted (ll*basei+kk*basej); + PointE[nbpt][10]=rotation(O10,O1,aanngg) shifted (ll*basei+kk*basej); + PointE[nbpt][11]=rotation(O11,O1,aanngg) shifted (ll*basei+kk*basej); + PointE[nbpt][12]=rotation(O12,O1,aanngg) shifted (ll*basei+kk*basej); + fi; + enddef; + vardef AssocierMaille(expr nbpt)= + Maille[nbpt]=if Niveau=3: + polygone(PointE[nbpt][1],PointE[nbpt][2],PointE[nbpt][3],PointE[nbpt][4],PointE[nbpt][5],PointE[nbpt][6]) + elseif Niveau=4: + polygone(PointE[nbpt][1],PointE[nbpt][2],PointE[nbpt][3],PointE[nbpt][4],PointE[nbpt][5],PointE[nbpt][6],PointE[nbpt][7],PointE[nbpt][8]) + elseif Niveau=6: + polygone(PointE[nbpt][1],PointE[nbpt][2],PointE[nbpt][3],PointE[nbpt][4],PointE[nbpt][5],PointE[nbpt][6],PointE[nbpt][7],PointE[nbpt][8],PointE[nbpt][9],PointE[nbpt][10],PointE[nbpt][11],PointE[nbpt][12]) + fi; + enddef; + vardef PlacePointSupport= + pair PointE[][]; + path Maille[]; + pair ISO[]; + if Niveau=3: + ISO1:=(0,0); + ISO2=rotation(ISO1,O1,120); + ISO3=rotation(ISO1,O1,-120); + basei=(rotation(O2,O1,-120)-O4); + basej:=(rotation(O5,O1,-120)-O5); + elseif Niveau=4: + ISO1=(0,0); + ISO2=rotation(ISO1,O1,90); + ISO3=rotation(ISO1,O1,180); + ISO4=rotation(ISO1,O1,270); + basei=(rotation(O5,O1,180)-O5); + basej:=(rotation(O5,O1,-90)-O5); + elseif Niveau=6: + ISO1=(0,0); + ISO2=rotation(ISO1,O1,120); + ISO3=rotation(ISO1,O1,-120); + basei=(rotation(O4,O1,-120)-O6); + basej:=(rotation(O9,O1,-120)-O9); + fi; + n:=0; + pair ISORetiens; + for k=-2*Lignes upto 2*Lignes: + for l=-2*Colonnes upto 2*Colonnes: + n:=n+1; + ISORetiens:=ISO1 shifted (l*basei+k*basej); + if (xpart(ISORetiens)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)=2: + Base=pavages(chemin,tour-1,coul); + Base:=image( + trace Base; + trace symetrie(Base,B,C); + trace rotation(symetrie(Base,B,C),B,-90); + trace rotation(Base,B,90); + A:=A shifted(u*(0,-(2**(tour-1)))); + B:=B shifted(u*(2**(tour-1),-(2**(tour-1)))); + C:=C shifted(u*(2**(tour-1),0)); + ); + fi; + Base +enddef; +% +vardef pavagescar(expr chemin,tour,coul)= + save BaseCar; + picture BaseCar; + pair A,B,C,D; + A=u*(0,0); + B=u*(1,0); + C=u*(1,1); + D=u*(0,1); + if tour=0: + BaseCar=image( + trace chemin; + trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + ); + elseif tour=1: + BaseCar=image( + trace chemin; + drawoptions(dashed evenly); + trace rotation(chemin,B,-90); + trace reverse(rotation(symetrie(chemin,B,C),B,-90)); + trace rotation(chemin,B,90); + drawoptions(); + A:=A shifted(u*(0,-1)); + B:=B shifted(u*(1,-1)); + C:=C shifted(u*(1,0)); + trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + trace iso(A,D)--iso(B,C) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + trace iso(A,B)--iso(C,D) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris; + ); + elseif tour>=2: + BaseCar=image( + trace pavages(chemin,tour-1,coul); + trace symetrie(pavages(chemin,tour-1,coul),B,C);%coul+0.5blanc + trace rotation(symetrie(pavages(chemin,tour-1,coul),B,C),B,-90); + trace rotation(pavages(chemin,tour-1,coul),B,90); + A:=A shifted(u*(0,-(2**(tour-1)))); + B:=B shifted(u*(2**(tour-1),-(2**(tour-1)))); + C:=C shifted(u*(2**(tour-1),0)); + ); + fi; + BaseCar + enddef; + % + vardef CadrePavage= + u*(0,1)--u*(0,-(2**Niveau-1))--u*(2**Niveau,-(2**Niveau-1))--u*(2**(Niveau),1)--cycle + enddef; + % + vardef Numerotation= + n:=Depart; + pair B; + B=u*(1,0); + if Complete: + for k=0 upto 2**(Niveau)-2: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + if (k mod 2)=0: + label(TEX(decimal(n)),B+u*(2l,-k)); + else: + if l<(2**(Niveau-1))-1: + label(TEX(decimal(n)),B+u*(2l+1,-k)); + else: + n:=n-1; + fi; + fi; + endfor; + endfor; + else: + for k=0 upto (2**(Niveau-1))-1: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + label(TEX(decimal(n)),B+2u*(l,-k)); + endfor; + endfor; + fi; + enddef; + % + vardef NumerotationPDF= + n:=Depart; + pair B; + B=u*(1,0); + if Complete: + for k=0 upto 2**(Niveau)-2: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + if (k mod 2)=0: + label(TEX(decimal(n)),B+u*(2l,-k)); + else: + if l<(2**(Niveau-1))-1: + label(LATEX(decimal(n)),B+u*(2l+1,-k)); + fi; + fi; + endfor; + endfor; + else: + for k=0 upto (2**(Niveau-1))-1: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + label(LATEX(decimal(n)),B+2u*(l,-k)); + endfor; + endfor; + fi; + enddef; + % + vardef PlacePointSupport= + n:=Depart; + pair K[],L[],M[],N[]; + K[0]=u*(0,0); + M[0]=u*(1,1); + if Complete: + for k=0 upto 2**(Niveau)-2: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + if (k mod 2)=0: + K[n]:=K0+u*(2l,-k); + M[n]:=M0+u*(2l,-k); + else: + if l<(2**(Niveau-1))-1: + K[n]:=K0+u*(2l+1,-k); + M[n]:=M0+u*(2l+1,-k); + else: + n:=n-1; + fi; + fi; + endfor; + endfor; + else: + for k=0 upto (2**(Niveau-1))-1: + for l=0 upto (2**(Niveau-1))-1: + n:=n+1; + K[n]=K[0]+2u*(l,-k); + M[n]=M[0]+2u*(l,-k); + endfor; + endfor; + fi; + enddef; + vardef EffectuerTraces= + \useKV[Pavage]{Traces} + enddef; +} + +\def\MPReseauRegulier{ + boolean Before,Numerote,Backgrounds,After; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Cote=\useKV[Pavage]{Cote}; + Lignes=\useKV[Pavage]{Lignes}; + Colonnes=\useKV[Pavage]{Colonnes}; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + pair A[]; + A1=(0,0); + A2-A1=u*Cote*(1,0); + vardef PavageRegulier(expr Niv)= + picture Retour; + if Niv=3: + A3=rotation(A2,A1,60); + path TriBase,CadrePavage; + TriBase=polygone(A1,A2,A3); + CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,0.5*sqrt(3)*Lignes),Cote*cm*(0,0.5*sqrt(3)*Lignes)); + Retour=image( + fill CadrePavage withcolor ColPavage; + for k=0 upto Lignes: + for l=-1 upto Colonnes+1: + if k mod 2=0: + trace TriBase shifted (Cote*cm*(l,0.5*sqrt(3)*k)); + else: + trace TriBase shifted (Cote*cm*(l+0.5,0.5*sqrt(3)*k)); + fi; + endfor; + endfor; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled 1.5; + ); + elseif Niv=4: + A3=rotation(A1,A2,-90); + A4-A3=A1-A2; + path QuadriBase,CadrePavage; + QuadriBase=polygone(A1,A2,A3,A4); + CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,Lignes),Cote*cm*(0,Lignes)); + Retour=image( + fill CadrePavage withcolor ColPavage; + for k=0 upto Lignes-1: + for l=0 upto Colonnes-1: + trace QuadriBase shifted (Cote*cm*(l,k)); + endfor; + endfor; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled 1.5; + ); + elseif Niv=6: + A3=rotation(A1,A2,-120); + A4=rotation(A2,A3,-120); + A5=rotation(A3,A4,-120); + A6=rotation(A4,A5,-120); + path HexaBase,CadrePavage; + HexaBase=polygone(A1,A2,A3,A4,A5,A6); + CadrePavage=polygone(Cote*cm*(1,0),Cote*cm*(3*Colonnes,0),Cote*cm*(3*Colonnes,sqrt(3)*(Lignes-1)),Cote*cm*(1,sqrt(3)*(Lignes-1))); + Retour=image(% + fill CadrePavage withcolor ColPavage; + for k=-1 upto 2*Lignes+1: + for l=-1 upto Colonnes+1: + if k mod 2=1: + trace HexaBase shifted (Cote*cm*(3*l,0.5*sqrt(3)*k)); + else: + trace HexaBase shifted (Cote*cm*(1.5+3*l,sqrt(3)+0.5*sqrt(3)*k)); + fi; + endfor; + endfor; + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled 1.5; + ); + fi; + Retour + enddef; + % + vardef PlacePointSupport= + n:=Depart; + pair B;pair C;pair vdepla; + pair Hexa[],Hexb[],Hexc[],Hexd[],Hexe[],Hexf[]; + pair Cara[],Carb[],Carc[],Card[]; + pair Tria[],Trib[],Tric[]; + if Niveau=3: + B=iso(A1,A2,A3); + C=symetrie(B,A2,A3); + for k=1 upto Lignes: + for l=1 upto 2*Colonnes-1: + n:=n+1; + if k mod 2=1: + nbv:=(k-1)*1.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + else: + nbv:=(k-1)*1.5+0.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B)); + fi; + fi; + if (n mod 2)=0: + Tria[n]=rotation(A1,B,180) shifted vdepla; + Trib[n]=rotation(A2,B,180) shifted vdepla; + Tric[n]=rotation(A3,B,180) shifted vdepla; + else: + Tria[n]-A1=vdepla; + Trib[n]-A2=vdepla; + Tric[n]-A3=vdepla; + fi; + endfor; + endfor; + elseif Niveau=4: + B=iso(A1,A2,A3,A4); + for k=1 upto Lignes: + for l=1 upto Colonnes: + n:=n+1; + vdepla:=Cote*cm*((l-1),(k-1)); + Cara[n]-A1=vdepla; + Carb[n]-A2=vdepla; + Carc[n]-A3=vdepla; + Card[n]-A4=vdepla; + endfor; + endfor; + elseif Niveau=6: + B=iso(A1,A2,A3,A4,A5,A6); + C=symetrie(B,A3,A4); + for k=1 upto Lignes-1: + for l=1 upto 2*Colonnes-1: + n:=n+1; + nbv:=(k-1)*3; + if l mod 2=1: + vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + if k=Lignes-1: + if l mod 2=1: + Hexa[n]-A1=vdepla; + Hexb[n]-A2=vdepla; + Hexc[n]-A3=vdepla; + Hexd[n]-A4=vdepla; + Hexe[n]-A5=vdepla; + Hexf[n]-A6=vdepla; + else: + n:=n-1; + fi; + else: + Hexa[n]-A1=vdepla; + Hexb[n]-A2=vdepla; + Hexc[n]-A3=vdepla; + Hexd[n]-A4=vdepla; + Hexe[n]-A5=vdepla; + Hexf[n]-A6=vdepla; + fi; + endfor; + endfor; + fi; + enddef; + % + vardef Numerotation= + n:=Depart; + pair B;pair C;pair vdepla; + if Niveau=3: + B=iso(A1,A2,A3); + C=symetrie(B,A2,A3); + for k=1 upto Lignes: + for l=1 upto 2*Colonnes-1: + n:=n+1; + if k mod 2=1: + nbv:=(k-1)*1.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + else: + nbv:=(k-1)*1.5+0.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B)); + fi; + fi; + label(TEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=4: + B=iso(A1,A2,A3,A4); + for k=1 upto Lignes: + for l=1 upto Colonnes: + n:=n+1; + vdepla:=Cote*cm*((l-1),(k-1)); + label(TEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=6: + B=iso(A1,A2,A3,A4,A5,A6); + C=symetrie(B,A3,A4); + for k=1 upto Lignes-1: + for l=1 upto 2*Colonnes-1: + n:=n+1; + nbv:=(k-1)*3; + if l mod 2=1: + vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + if k=Lignes-1: + if l mod 2=1: + label(TEX(decimal(n)),B shifted vdepla); + else: + n:=n-1; + fi; + else: + label(TEX(decimal(n)),B shifted vdepla); + fi; + endfor; + endfor; + fi; + enddef; + % + vardef NumerotationPDF= + n:=Depart; + pair B;pair C;pair vdepla; + if Niveau=3: + B=iso(A1,A2,A3); + C=symetrie(B,A2,A3); + for k=1 upto Lignes: + for l=1 upto 2*Colonnes-1: + n:=n+1; + if k mod 2=1: + nbv:=(k-1)*1.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + else: + nbv:=(k-1)*1.5+0.5; + if l mod 2=1: + vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B)); + fi; + fi; + label(LATEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=4: + B=iso(A1,A2,A3,A4); + for k=1 upto Lignes: + for l=1 upto Colonnes: + n:=n+1; + vdepla:=Cote*cm*((l-1),(k-1)); + label(LATEX(decimal(n)),B shifted vdepla); + endfor; + endfor; + elseif Niveau=6: + B=iso(A1,A2,A3,A4,A5,A6); + C=symetrie(B,A3,A4); + for k=1 upto Lignes-1: + for l=1 upto 2*Colonnes-1: + n:=n+1; + nbv:=(k-1)*3; + if l mod 2=1: + vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3); + else: + vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B); + fi; + if k=Lignes-1: + if l mod 2=1: + label(LATEX(decimal(n)),B shifted vdepla); + else: + n:=n-1; + fi; + else: + label(LATEX(decimal(n)),B shifted vdepla); + fi; + endfor; + endfor; + fi; + enddef; + vardef EffectuerTraces= + \useKV[Pavage]{Traces} + enddef; +} + +\def\MPReseauCode{% + boolean Before,Numerote,Backgrounds,After; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Cote=\useKV[Pavage]{Cote}; + Lignes=\useKV[Pavage]{Lignes}; + Colonnes=\useKV[Pavage]{Colonnes}; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + pair basei,basej; + basei=\useKV[Pavage]{Basei}; + basej=\useKV[Pavage]{Basej}; + vardef PavageReseau= + for k=0 upto Lignes-1: + for l=0 upto Colonnes -1: + trace Motif shifted (k*basei+l*basej); + endfor; + endfor; + enddef; + vardef Numerotation= + n:=0; + k:=0; + pair A[],B[]; + A[0]=point(0) of Motif; + B[0]=A[0]; + forever: + k:=k+1; + A[k]=point(k) of Motif; + B[0]:=B[0]+A[k]; + exitif A[k]=A[0]; + endfor; + B[0]:=B[0]/k; + for k=0 upto Lignes-1: + for l=0 upto Colonnes -1: + n:=n+1; + label(decimal(n),B[0] shifted(k*basei+l*basej)); + endfor; + endfor; + enddef; + vardef PlacePointSupport= + pair M[][]; + n:=0; + k:=0; + pair A[],B[]; + A[0]=point(0) of Motif; + forever: + k:=k+1; + A[k]=point(k) of Motif; + B[0]:=B[0]+A[k]; + exitif A[k]=A[0]; + endfor; + B[0]:=B[0]/k; + NbSommet:=k; + for k=0 upto Lignes-1: + for l=0 upto Colonnes -1: + n:=n+1; + for m=1 upto NbSommet: + M[n][m]=A[m] shifted (k*basei+l*basej); + endfor; + endfor; + endfor; + enddef; + vardef EffectuerTraces= + \useKV[Pavage]{Traces} + enddef; +} + +\def\MPPeriodiqueCode{% + boolean Before,Numerote,Backgrounds,After; + Before=\useKV[Pavage]{Before}; + After=\useKV[Pavage]{After}; + Numerote=\useKV[Pavage]{Numerotation}; + Backgrounds=\useKV[Pavage]{Backgrounds}; + color ColPavage,ColArrierePlan; + ColPavage=\useKV[Pavage]{Couleur}; + ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi; + Cote=\useKV[Pavage]{Cote}; + Lignes=\useKV[Pavage]{Lignes}; + Colonnes=\useKV[Pavage]{Colonnes}; + Niveau=\useKV[Pavage]{Niveau}; + Depart=\useKV[Pavage]{Depart}; + pair basei,basej; + vardef PavagePeriodique= + basei=iso(A1,A2)-iso(A1,A0); + basej=iso(A0,A3)-iso(A1,A0); + path CadrePavage; + pair Cpa[]; + Cpa1=(0,ypart(-2*basej)); + Cpa2=(xpart(2*Colonnes*basei),ypart(-2*basej)); + Cpa3=(xpart(2*Colonnes*basei),ypart(2*Lignes*basej)); + Cpa4=(0,ypart(2*Lignes*basej)); + CadrePavage=Cpa1--Cpa2--Cpa3--Cpa4--cycle; + %drawarrow iso(A1,A0)--(iso(A1,A0)+basei); + %drawarrow iso(A1,A0)--(iso(A1,A0)+basej); + picture BlocContour,BlocPavage; + BlocContour=image( + for k=-Lignes upto Lignes+1: + for l=-1 upto Colonnes+1: + fill Motif shifted (2*l*basei+2*k*basej) withcolor ColPavage; + fill symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej) withcolor ColPavage; + trace Motif shifted (2*l*basei+2*k*basej); + trace symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej); + endfor; + endfor; + drawoptions(); + ); + BlocPavage=image( + trace BlocContour; + %trace BlocContour shifted(4*basei+2*basej); + clip currentpicture to CadrePavage; + trace CadrePavage withpen pencircle scaled 2; + ); + BlocPavage + enddef; + vardef Numerotation= + n:=-1; + pair ISO; + for k=-Lignes upto Lignes+1: + for l=-1 upto Colonnes+1: + n:=n+2; + ISO:=B[0] shifted (2*l*basei+2*k*basej); + if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)xpart(Cpa1)) and (xpart(ISO)ypart(Cpa1)) and (ypart(ISO)xpart(Cpa1+u*(0.1,0))) and (xpart(ISO)ypart(Cpa1)) and (ypart(ISO)xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0.2,0))%) and (ypart(ISO)xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)xpart(Cpa1)) and (xpart(ISO)ypart(Cpa1)) and (ypart(ISO)xpart(Cpa1+u*(0.1,0))) and (xpart(ISO)ypart(Cpa1)) and (ypart(ISO)0: - for l=0 upto (m-1): - fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5; - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; - \end{mplibcode} - \else - \begin{mpost} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image( - remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5; - clip currentpicture to cd; - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5; - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; - \end{mpost} - \fi +\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Eprouvette=false,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1} + +\def\MPFractionEprouvetteCode{% + Hauteur=\useKV[ClesFraction]{Longueur}; + color ColEprou; + ColEprou=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + vardef eprouvette(expr deno,nume)= + picture PfCEprou,PfCEprouGrad; + path Cc; + Cc=cercles((0,0),1u) yscaled 0.2; + PfCEprouGrad=image( + trace Cc shifted((0,Hauteur)); + trace subpath(0,length Cc/2) of Cc dashed evenly; + trace subpath(length Cc/2,length Cc) of Cc; + trace segment(point(0) of Cc,point(0) of Cc shifted((0,Hauteur))); + trace segment(point(length Cc/2) of Cc,point(length Cc/2) of (Cc shifted((0,Hauteur)))); + for k=1 upto (deno-1): + trace (subpath(length Cc/2,length Cc*0.7) of Cc) shifted ((k/deno)*(0,Hauteur)); + endfor; + ); + m=nume div deno; + if (nume mod deno)=0:m:=m-1; fi; + PfCEprou=image(% + path Volume,VolumeComplet; + Volume=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,Hauteur)))--(point(length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,Hauteur)))--(subpath(length Cc/2,length Cc) of Cc)--cycle; + VolumeComplet=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted((0,Hauteur)))--(point(length Cc/2) of Cc)--(subpath(length Cc/2,length Cc) of Cc)--cycle; + if m>0: + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(VolumeComplet shifted(l*(3u,0)),60,0.2,0) withcolor ColEprou; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (VolumeComplet shifted(l*(3u,0))) withcolor ColEprou; + fi; + fi; + endfor; + fi; + if (nume mod deno)<>0: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(Volume shifted(m*(3u,0)),60,0.2,0) withcolor ColEprou; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (Volume shifted(m*(3u,0))) withcolor ColEprou; + fi; + trace (Cc shifted(((nume mod deno)/deno)*(0,Hauteur))) shifted(m*(3u,0)); + fi; + else: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(VolumeComplet shifted(m*(3u,0)),60,0.2,0) withcolor ColEprou; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (VolumeComplet shifted(m*(3u,0))) withcolor ColEprou; + fi; + fi; + fi; + for k=0 upto m: + trace PfCEprouGrad shifted((3u*k,0)); + endfor; + ); + PfCEprou + enddef; } - -\def\MPFractionRegulierH#1#2#3#4#5#6{% - % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur, #6 épaisseur + +\def\MPFractionEprouvette#1#2{% + % #1 num + % #2 d\'eno \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image(% - drawoptions(withpen pencircle scaled #6); - trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5; - clip currentpicture to cd; - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled #6); - trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled #6); - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - drawoptions(withpen pencircle scaled #6); - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - drawoptions(withpen pencircle scaled #6); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; + \MPFractionEprouvetteCode + trace eprouvette(#2,#1); \end{mplibcode} \else -\begin{mpost} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image(% - drawoptions(withpen pencircle scaled #6); - trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5; - clip currentpicture to cd; - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled #6); - trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled #6); - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - drawoptions(withpen pencircle scaled #6); - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - drawoptions(withpen pencircle scaled #6); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; + \begin{mpost}[mpsettings={\MPFractionEprouvetteCode}] + trace eprouvette(#2,#1); \end{mpost} \fi } -\def\MPFractionRectangle#1#2#3#4#5#6{% - % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple +\def\MPFractionRegulierCode{% + Rayon=\useKV[ClesFraction]{Rayon}; + Cotes=\useKV[ClesFraction]{Cotes}; + color ColPolyReg; + ColPolyReg=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + pair O,A[],B[]; + O=u*(0,0); + path cc,cd; + cc=cercles(O,Rayon); + for k=0 upto Cotes: + A[k]=pointarc(cc,k*(360/Cotes)); + endfor; + cd=polygone(A0 for k=1 upto Cotes-1:,A[k] endfor); + vardef FractionPolyReg(expr nume,deno)= + for k=0 upto deno-1: + B[k]=point(k*(Cotes/deno)) of cd; + endfor; + picture fondcolore,FractionPoly; + fondcolore=image( + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(O--arccercle(B[0],B[nume mod deno],O)--cycle,1.5*360/Cotes,0.25,0) withcolor ColPolyReg; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis O--arccercle(B[0],B[nume mod deno],O)--cycle withcolor ColPolyReg; + fi; + clip currentpicture to cd; + for k=0 upto deno-1: + draw segment(O,B[k]) cutafter cd; + endfor; + trace cd; + ); + currentpicture:=nullpicture; + m=nume div deno; + if (nume mod deno)=0:m:=m-1; fi; + FractionPoly=image( + if m>0: + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(cd shifted(l*(Rayon*2+0.5cm,0)),1.5*360/Cotes,0.25,0) withcolor ColPolyReg; + drawoptions(withpen pencircle scaled Epaisseur); + else: + fill cd shifted(l*(Rayon*2+0.5cm,0)) withcolor ColPolyReg; + fi; + fi; + trace cd shifted(l*(Rayon*2+0.5cm,0)); + if deno>1: + for k=0 upto deno-1: + draw (segment(O,B[k]) cutafter cd) shifted(l*(Rayon*2+0.5cm,0)); + endfor; + fi; + endfor; + fi; + if Reponse: + draw fondcolore shifted(m*(Rayon*2+0.5cm,0)); + fi; + draw cd shifted(m*(Rayon*2+0.5cm,0)); + if deno>1: + for k=0 upto deno-1: + draw (segment(O,B[k]) cutafter cd) shifted(m*(Rayon*2+0.5cm,0)); + endfor; + fi; + ); + FractionPoly + enddef; +}% + +\def\MPFractionRegulier#1#2{% + % #1 num, #2 deno \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - picture FondRectangle; - FondRectangle=image(% - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - fi; - ); - picture FondRectangleColorie; - FondRectangleColorie=image(% - if #6=1: - remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5; - else: - DDiv=(#3 mod #4) div parts; - MMod=(#3 mod #4) mod parts; - remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5; - remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5; - fi; - ); - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto m-1: - remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5; - trace FondRectangle shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#3 mod #4)<>0: - trace FondRectangleColorie shifted(m*(#1+1cm,0)); - else: - remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5; - fi; - trace FondRectangle shifted(m*(#1+1cm,0)); + \MPFractionRegulierCode + trace FractionPolyReg(#1,#2); \end{mplibcode} \else -\begin{mpost} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - picture FondRectangle; - FondRectangle=image(% - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - fi; - ); - picture FondRectangleColorie; - FondRectangleColorie=image(% - if #6=1: - remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5; - else: - DDiv=(#3 mod #4) div parts; - MMod=(#3 mod #4) mod parts; - remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5; - remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5; - fi; - ); - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto m-1: - remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5; - trace FondRectangle shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#3 mod #4)<>0: - trace FondRectangleColorie shifted(m*(#1+1cm,0)); - else: - remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5; - fi; - trace FondRectangle shifted(m*(#1+1cm,0)); + \begin{mpost}[mpsettings={\MPFractionRegulierCode}] + trace FractionPolyReg(#1,#2); \end{mpost} \fi -} - -\def\MPFractionRectangleH#1#2#3#4#5#6#7{% - % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple +}% + +\def\MPFractionTriangleCode{% + Longueur:=\useKV[ClesFraction]{Longueur}; + nbparts:=\useKV[ClesFraction]{Parts}; + color ColTriangle; + ColTriangle=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + nbtriangle=0; + % + vardef Ligne(expr longueur)= + for k=0 upto 2*(longueur-1): + nbtriangle:=nbtriangle+1; + if (k mod 2)=0: + M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); + else: + M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); + fi; + endfor; + enddef; + % + pair A,B,C; + A=u*(0.5,0.5); + B-A=(Longueur,0); + C=rotation(B,A,60); + % + path Tria,Trir,M[]; + Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); + Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); + % + for k=nbparts downto 1: + Ligne(k); + endfor; + % + vardef FractionTriangle(expr nume,deno)= + m:=nume div deno; + picture RetourFraction; + RetourFraction=image( + for l=1 upto (nume mod deno): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(M[l] shifted(m*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + fill (M[l] shifted(m*(Longueur+1cm,0))) withcolor ColTriangle; + fi; + fi; + for k=1 upto nbparts: + trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(Longueur+1cm,0)); + trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(Longueur+1cm,0)); + trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(Longueur+1cm,0)); + endfor; + endfor; + % + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,B,C) shifted(l*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis polygone(A,B,C) withcolor ColRectangle; + fi; + fi; + for k=1 upto nbparts: + trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(l*(Longueur+1cm,0)); + trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(l*(Longueur+1cm,0)); + trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(l*(Longueur+1cm,0)); + endfor; + endfor; + ); + RetourFraction + enddef; +}% + +\def\MPFractionTriangle#1#2{% + % #1 num #2 d\'eno (attention : = partage^2) \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - picture FondRectangle; - FondRectangle=image(% - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - fi; - ); - picture FondRectangleColorie; - FondRectangleColorie=image(% - if #6=1: - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,M[#3 mod #4],N[#3 mod #4],D),45,0.25,0) withcolor #5; - else: - DDiv=(#3 mod #4) div parts; - MMod=(#3 mod #4) mod parts; - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5; - fi; - ); - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto m-1: - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,B,C,D) shifted(l*(#1+1cm,0)),45,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled#7); - trace FondRectangle shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#3 mod #4)<>0: - drawoptions(withpen pencircle scaled#7); - trace FondRectangleColorie shifted(m*(#1+1cm,0)); - else: - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,B,C,D) shifted(m*(#1+1cm,0)),45,0.25,0) withcolor #5; - fi; - drawoptions(withpen pencircle scaled#7); - trace FondRectangle shifted(m*(#1+1cm,0)); + \MPFractionTriangleCode + draw FractionTriangle(#1,#2); \end{mplibcode} \else -\begin{mpost} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - if #6=1: - drawoptions(withpen pencircle scaled#7); - draw hachurage(polygone(A,M[#3],N[#3],D),45,0.25,0) withcolor #5; - else: - DDiv=#3 div parts; - MMod=#3 mod parts; - drawoptions(withpen pencircle scaled#7); - draw hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled#7); - draw hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5; - fi; - drawoptions(withpen pencircle scaled#7); - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - drawoptions(); - fi; + \begin{mpost}[mpsettings={\MPFractionTriangleCode}] + draw FractionTriangle(#1,#2); \end{mpost} \fi -} - -\def\MPFractionDisque#1#2#3#4{% - \ifluatex - \mplibforcehmode +}% + +\def\MPFractionRectangleCode{% + Longueur=\useKV[ClesFraction]{Longueur}; + Largeur=\useKV[ClesFraction]{Largeur}; + color ColRectangle; + ColRectangle=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + Multiple=\useKV[ClesFraction]{Multiple}; + % + pair A,B,C,D,M[],N[],R[],S[]; + A=(1,1); + B-A=(Longueur,0); + C-B=(0,Largeur); + D-C=A-B; + vardef FractionRectangle(expr nume,deno)= + m=nume div deno; + if (nume mod deno)=0:m:=m-1; fi; + numeric parts; + parts=(deno div Multiple); + for k=0 upto parts: + M[k]=(k/parts)[A,B]; + N[k]=(k/parts)[D,C]; + endfor; + if Multiple>1: + for k=0 upto Multiple: + R[k]=(k/Multiple)[A,D]; + S[k]=(k/Multiple)[B,C]; + endfor; + fi; + picture FondRectangle; + FondRectangle=image(% + draw polygone(A,B,C,D); + for k=1 upto (parts-1): + draw segment(M[k],N[k]); + endfor; + if Multiple>1: + for k=1 upto (Multiple-1): + draw segment(R[k],S[k]); + endfor; + fi; + ); + picture FondRectangleColorie; + FondRectangleColorie=image(% + if Multiple=1: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,M[nume mod deno],N[nume mod deno],D),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis polygone(A,M[nume mod deno],N[nume mod deno],D) withcolor ColRectangle; + fi; + else: + DDiv=(nume mod deno) div parts; + MMod=(nume mod deno) mod parts; + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor ColRectangle; + remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor ColRectangle; + fi; + fi; + ); + picture RetourRectangle; + RetourRectangle=image( + if m>0: + for l=0 upto m-1: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,B,C,D) shifted(l*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (polygone(A,B,C,D) shifted(l*(Longueur+1cm,0))) withcolor ColRectangle; + fi; + fi; + trace FondRectangle shifted(l*(Longueur+1cm,0)); + endfor; + fi; + if (nume mod deno)<>0: + if Reponse: + trace FondRectangleColorie shifted(m*(Longueur+1cm,0)); + fi; + else: + if Reponse: + if Hachures: + trace hachurage(polygone(A,B,C,D) shifted(m*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle; + else: + remplis (polygone(A,B,C,D) shifted(m*(Longueur+1cm,0))) withcolor ColRectangle; + fi; + fi; + fi; + trace FondRectangle shifted(m*(Longueur+1cm,0)); + ); + RetourRectangle + enddef; +}% + +\def\MPFractionRectangle#1#2{% + % #1 num, #2 deno + \ifluatex% + \mplibforcehmode% \begin{mplibcode} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=(#2 div #3); - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cc shifted(l*(2*#1+1cm,0)) withcolor #4; - endfor; - fi; - fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4; - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \MPFractionRectangleCode + trace FractionRectangle(#1,#2); \end{mplibcode} - \else - \begin{mpost} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=#2 div #3; - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cc shifted(l*(2*#1+1cm,0)) withcolor #4; - endfor; - fi; - fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4; - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \else% + \begin{mpost}[mpsettings={\MPFractionRectangleCode}] + trace FractionRectangle(#1,#2); \end{mpost} - \fi -} - -\def\MPFractionDisqueH#1#2#3#4#5{% + \fi% +}% + +\def\MPFractionDisqueCode{% + Rayon=\useKV[ClesFraction]{Rayon}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + color ColDisque; + ColDisque=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Hachures=\useKV[ClesFraction]{Hachures}; + Reponse:=\useKV[ClesFraction]{Reponse}; + % + pair A,B[]; + A=(0,0); + path cc; + cc=cercles(A,Rayon); + vardef FractionDisque(expr nume,deno)= + for k=0 upto deno: + B[k]=pointarc(cc,(360/deno)*k); + endfor; + m=(nume div deno); + if (nume mod deno)=0:m:=m-1; fi; + picture RetourFraction; + RetourFraction=image(% + if Reponse: + if m>0: + for l=0 upto (m-1): + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage(cc shifted(l*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque; + else: + fill cc shifted(l*(2*Rayon+1cm,0)) withcolor ColDisque; + fi; + endfor; + fi; + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted(m*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque; + else: + fill ((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted (m*(2*Rayon+1cm,0))) withcolor ColDisque; + fi; + fi; + for l=0 upto m: + draw cc shifted(l*(2*Rayon+1cm,0)); + for k=0 upto (deno-1): + draw segment(A,B[k]) shifted(l*(2*Rayon+1cm,0)); + endfor; + endfor; + ); + RetourFraction + enddef; +}% + +\NewDocumentCommand\MPFractionDisque{mm}{% \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=#2 div #3; - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - endfor; - fi; - drawoptions(withpen pencircle scaled#5); - draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \MPFractionDisqueCode + trace FractionDisque(#1,#2); \end{mplibcode} \else - \begin{mpost} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=#2 div #3; - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - endfor; - fi; - drawoptions(withpen pencircle scaled#5); - draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \begin{mpost}[mpsettings={\MPFractionDisqueCode}] + trace FractionDisque(#1,#2); \end{mpost} \fi } -\def\MPFractionSegment#1#2#3#4{ - \ifluatex - \mplibforcehmode - \begin{mplibcode} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - endfor; - fi; - if (#2 mod #3)<>0: - draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; - \end{mplibcode} - \else - \begin{mpost} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - endfor; - fi; - if (#2 mod #3)<>0: - draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; - \end{mpost} - \fi +\def\MPFractionSegmentCode{% + Longueur=\useKV[ClesFraction]{Longueur}; + color ColSegment; + ColSegment=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + % + pair A,C,B[]; + A=(0,0); + C-A=(Longueur,0); + % + vardef FractionSegment(expr nume,deno)= + for k=0 upto deno: + B[k]=(k/deno)[A,C]; + endfor; + m=nume div deno; + picture RetourFraction; + RetourFraction=image( + if m>0: + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage(polygone(B[0]+u*(0,-0.15),B[deno]+u*(0,-0.15),B[deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment; + drawoptions(); + else: + draw (segment(B[0],B[deno]) shifted(l*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment; + fi; + fi; + draw (segment(B[0],B[deno]) shifted(l*(Longueur+1cm,0))); + endfor; + fi; + if (nume mod deno)<>0: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage(polygone(B[0]+u*(0,-0.15),B[nume mod deno]+u*(0,-0.15),B[nume mod deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment; + drawoptions(); + else: + draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment; + draw segment(A,C) shifted(m*(Longueur+1cm,0)); + fi; + fi; + draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0))); + draw segment(A,C) shifted(m*(Longueur+1cm,0)); + fi; + marque_p:="tiretv"; + for l=0 upto m-1: + for k=0 upto deno: + pointe(B[k] shifted(l*(Longueur+1cm,0))); + endfor; + endfor; + if (nume mod deno)<>0: + for k=0 upto deno: + pointe(B[k] shifted(m*(Longueur+1cm,0))); + endfor; + fi; + ); + RetourFraction + enddef; } -\def\MPFractionSegmentH#1#2#3#4#5{% +\NewDocumentCommand\MPFractionSegment{mm}{% \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#2 mod #3)<>0: - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; + \MPFractionSegmentCode + trace FractionSegment(#1,#2); \end{mplibcode} \else - \begin{mpost} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#2 mod #3)<>0: - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; + \begin{mpost}[mpsettings={\MPFractionSegmentCode}] + trace FractionSegment(#1,#2); \end{mpost} \fi } -\newcommand\Fraction[2][]{% +\NewDocumentCommand\Fraction{o m}{% \useKVdefault[ClesFraction]% \setKV[ClesFraction]{#1}% \setsepchar[*]{/}% \readlist*\ListeFraction{#2}% - \ifboolKV[ClesFraction]{Triangle}{% - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionTriangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionTriangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% - }% + \ifboolKV[ClesFraction]{Eprouvette}{% + \MPFractionEprouvette{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \ifboolKV[ClesFraction]{Regulier}{% - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionRegulierH{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% - }% + \ifboolKV[ClesFraction]{Triangle}{% + \MPFractionTriangle{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \ifboolKV[ClesFraction]{Segment}{% - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionSegmentH{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% - }% + \ifboolKV[ClesFraction]{Regulier}{% + \MPFractionRegulier{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \ifboolKV[ClesFraction]{Rectangle}{%rectangle - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionRectangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}% - }% - }{%disque - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionDisqueH{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% + \ifboolKV[ClesFraction]{Segment}{% + \MPFractionSegment{\ListeFraction[1]}{\ListeFraction[2]}% + }{% + \ifboolKV[ClesFraction]{Rectangle}{% + \MPFractionRectangle{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% + \MPFractionDisque{\ListeFraction[1]}{\ListeFraction[2]}% }% }% }% diff --git a/macros/latex/contrib/profcollege/latex/PfCSquaro.tex b/macros/latex/contrib/profcollege/latex/PfCSquaro.tex index f6b67bdb52..9de4a7afdf 100644 --- a/macros/latex/contrib/profcollege/latex/PfCSquaro.tex +++ b/macros/latex/contrib/profcollege/latex/PfCSquaro.tex @@ -6,31 +6,33 @@ \NewDocumentCommand\SquarO{o}{% \useKVdefault[Squaro]% - \setKVdefault[Squaro]{#1}% - \ifboolKV[Squaro]{Solution}{\BuildSquaroSolution}{\BuildSquaro}% + \setKV[Squaro]{#1}% + \BuildSquaro% +}% + +\def\BuildSquarobase{% + numeric Longueur,Largeur; + Longueur=\useKV[Squaro]{Longueur}; + Largeur=\useKV[Squaro]{Largeur}; + boolean Solution,Graines; + Solution=\useKV[Squaro]{Solution}; + Graines=\useKV[Squaro]{Graines}; + if Graines: + randomseed:=\useKV[Squaro]{Graine}; + fi; + % + u:=\useKV[Squaro]{Echelle}; + % + p:=0; + pair A[];%centre des carrés. + boolean Allume[][]; } \NewDocumentCommand\BuildSquaro{}{% \ifluatex - \mplibforcehmode - \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}% - \begin{mplibcode}[\PfCSquaroNom] - numeric Longueur,Largeur; - Longueur=\useKV[Squaro]{Longueur}; - Largeur=\useKV[Squaro]{Largeur}; - boolean Solution,Graines; - Solution=\useKV[Squaro]{Solution}; - Graines:=\useKV[Squaro]{Graines}; - if Graines: - randomseed:=\useKV[Squaro]{Graine}; - fi; - - u:=\useKV[Squaro]{Echelle}; - - p:=0; - pair A[];%centre des carrés. - boolean Allume[][]; - + \mplibforcehmode + \begin{mplibcode} + \BuildSquarobase for k=0 upto Longueur-1: for l=0 upto Largeur-1: p:=p+1; @@ -63,29 +65,25 @@ label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5)); endfor; endfor; - \end{mplibcode} - \fi -} - -\NewDocumentCommand\BuildSquaroSolution{}{% - \ifluatex - \mplibforcehmode - \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}% - \begin{mplibcode}[\PfCSquaroNom] - u:=\useKV[Squaro]{Echelle}; - p:=0; + \end{mplibcode} + \else + \begin{mpost}[mpsettings={\BuildSquarobase}] for k=0 upto Longueur-1: for l=0 upto Largeur-1: p:=p+1; + A[p]=u*(k,-l); trace (unitsquare scaled u) shifted A[p]; endfor; endfor; for k=0 upto Largeur: for l=0 upto Longueur: - if Allume[k][l]=true: - fill cercles(u*(l,-k+1),1mm); + m:=uniformdeviate(1); + if m<0.5: + Allume[k][l]=true; + fill cercles(u*(l,-k+1),1mm) if Solution=false:withcolor white fi; else: + Allume[k][l]=false; fill cercles(u*(l,-k+1),1mm) withcolor white; fi; trace cercles(u*(l,-k+1),1mm); @@ -99,9 +97,9 @@ if Allume[k][l+1]:Retiens:=Retiens+1 fi; if Allume[k+1][l]:Retiens:=Retiens+1 fi; if Allume[k+1][l+1]:Retiens:=Retiens+1 fi; - label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5)); + label(LATEX(decimal(Retiens)),u*(l+0.5,-k+0.5)); endfor; endfor; - \end{mplibcode} + \end{mpost} \fi }% \ No newline at end of file diff --git a/macros/latex/contrib/profcollege/latex/PfCSquaroaprioriold.tex b/macros/latex/contrib/profcollege/latex/PfCSquaroaprioriold.tex new file mode 100644 index 0000000000..ec3717b9c6 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCSquaroaprioriold.tex @@ -0,0 +1,107 @@ +%%% +% Squaro +%%% +\setKVdefault[Squaro]{Solution=false,Longueur=8,Largeur=8,Echelle=8mm,Nom=Jeu1,Graines=false} +\defKV[Squaro]{Graine=\setKV[Squaro]{Graines}}% + +\NewDocumentCommand\SquarO{o}{% + \useKVdefault[Squaro]% + \setKVdefault[Squaro]{#1}% + \ifboolKV[Squaro]{Solution}{\BuildSquaroSolution}{\BuildSquaro}% +} + +\NewDocumentCommand\BuildSquaro{}{% + \ifluatex + \mplibforcehmode + \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}% + \begin{mplibcode}[\PfCSquaroNom] + numeric Longueur,Largeur; + Longueur=\useKV[Squaro]{Longueur}; + Largeur=\useKV[Squaro]{Largeur}; + boolean Solution,Graines; + Solution=\useKV[Squaro]{Solution}; + Graines:=\useKV[Squaro]{Graines}; + if Graines: + randomseed:=\useKV[Squaro]{Graine}; + fi; + + u:=\useKV[Squaro]{Echelle}; + + p:=0; + pair A[];%centre des carrés. + boolean Allume[][]; + + for k=0 upto Longueur-1: + for l=0 upto Largeur-1: + p:=p+1; + A[p]=u*(k,-l); + trace (unitsquare scaled u) shifted A[p]; + endfor; + endfor; + + for k=0 upto Largeur: + for l=0 upto Longueur: + m:=uniformdeviate(1); + if m<0.5: + Allume[k][l]=true; + fill cercles(u*(l,-k+1),1mm) if Solution=false:withcolor white fi; + else: + Allume[k][l]=false; + fill cercles(u*(l,-k+1),1mm) withcolor white; + fi; + trace cercles(u*(l,-k+1),1mm); + endfor; + endfor; + + for k=0 upto Largeur-1: + for l=0 upto Longueur-1: + Retiens:=0; + if Allume[k][l]:Retiens:=Retiens+1 fi; + if Allume[k][l+1]:Retiens:=Retiens+1 fi; + if Allume[k+1][l]:Retiens:=Retiens+1 fi; + if Allume[k+1][l+1]:Retiens:=Retiens+1 fi; + label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5)); + endfor; + endfor; + \end{mplibcode} + \fi +} + +\NewDocumentCommand\BuildSquaroSolution{}{% + \ifluatex + \mplibforcehmode + \xdef\PfCSquaroNom{\useKV[Squaro]{Nom}}% + \begin{mplibcode}[\PfCSquaroNom] + u:=\useKV[Squaro]{Echelle}; + p:=0; + for k=0 upto Longueur-1: + for l=0 upto Largeur-1: + p:=p+1; + trace (unitsquare scaled u) shifted A[p]; + endfor; + endfor; + + for k=0 upto Largeur: + for l=0 upto Longueur: + if Allume[k][l]=true: + fill cercles(u*(l,-k+1),1mm); + else: + fill cercles(u*(l,-k+1),1mm) withcolor white; + fi; + trace cercles(u*(l,-k+1),1mm); + endfor; + endfor; + + for k=0 upto Largeur-1: + for l=0 upto Longueur-1: + Retiens:=0; + if Allume[k][l]:Retiens:=Retiens+1 fi; + if Allume[k][l+1]:Retiens:=Retiens+1 fi; + if Allume[k+1][l]:Retiens:=Retiens+1 fi; + if Allume[k+1][l+1]:Retiens:=Retiens+1 fi; + label(TEX(decimal(Retiens)),u*(l+0.5,-k+0.5)); + endfor; + endfor; + \end{mplibcode} + \fi +}% \ No newline at end of file diff --git a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex index 03fb0f7ec6..6be4545dee 100644 --- a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex +++ b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex @@ -229,6 +229,46 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \num{\TotalECC}% } +\def\NewMPDiagBarreHorCode{% + Longueur:=\useKV[ClesStat]{Longueur}; + Hauteur:=\useKV[ClesStat]{Hauteur}; + Ecart:=\useKV[ClesStat]{EcartBarre}; + ExposantDivMax:=\ExposantDivMax; + ecarthachures=\useKV[ClesStat]{EcartHachures}; + epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures}; + boolean Hachures,Bicolore,Grille,AffichageDonnee,LegendeVide; + Hachures=\useKV[ClesStat]{Hachures}; + Bicolore=\useKV[ClesStat]{Bicolore}; + Grille=\useKV[ClesStat]{Grille}; + AffichageDonnee=\useKV[ClesStat]{AffichageDonnee}; + LegendeVide=\useKV[ClesStat]{LegendeVide}; + vardef CalculNombreDonneesEtDonneeMax(text t)= + nbdon:=0;%nombre de données + DonneeMax:=0;%donnée DonneeMaximale + for p_=t: + nbdon:=nbdon+1; + if p_>DonneeMax: + DonneeMax:=p_; + fi; + endfor; + enddef; + vardef ListeDonnees(text t)= + n:=0; + for p_=t: + n:=n+1; + Donnees[n]:=p_; + endfor; + enddef; + vardef RecuperationCouleurs(text t)= + color Col[]; + n:=0; + for p_=t: + n:=n+1; + Col[n]=p_; + endfor; + enddef; +} + % Construction d'un diagramme en barres horizontal \newcommand\NewMPDiagBarreHor[4]{% % #1 Liste des noms @@ -238,47 +278,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \ifluatex% \mplibforcehmode% \begin{mplibcode}% - Longueur:=\useKV[ClesStat]{Longueur}; - Hauteur:=\useKV[ClesStat]{Hauteur}; - Ecart:=\useKV[ClesStat]{EcartBarre}; - ExposantDivMax:=\ExposantDivMax; - ecarthachures=\useKV[ClesStat]{EcartHachures}; - epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures}; - boolean Hachures; - Hachures=\useKV[ClesStat]{Hachures}; - boolean Bicolore; - Bicolore=\useKV[ClesStat]{Bicolore}; - boolean Grille; - Grille=\useKV[ClesStat]{Grille}; - boolean AffichageDonnee; - AffichageDonnee=\useKV[ClesStat]{AffichageDonnee}; - boolean LegendeVide; - LegendeVide=\useKV[ClesStat]{LegendeVide}; - vardef CalculNombreDonneesEtDonneeMax(text t)= - nbdon:=0;%nombre de données - DonneeMax:=0;%donnée DonneeMaximale - for p_=t: - nbdon:=nbdon+1; - if p_>DonneeMax: - DonneeMax:=p_; - fi; - endfor; - enddef; - vardef ListeDonnees(text t)= - n:=0; - for p_=t: - n:=n+1; - Donnees[n]:=p_; - endfor; - enddef; - vardef RecuperationCouleurs(text t)= - color Col[]; - n:=0; - for p_=t: - n:=n+1; - Col[n]=p_; - endfor; - enddef; + \NewMPDiagBarreHorCode% vardef TraceDiag= if Grille: pair Zz[];%Pour déterminer "le dernier point" @@ -353,49 +353,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis fi; \end{mplibcode} \else% - \begin{mpost}[mpsettings={% - Longueur:=\useKV[ClesStat]{Longueur}; - Hauteur:=\useKV[ClesStat]{Hauteur}; - Ecart:=\useKV[ClesStat]{EcartBarre}; - ExposantDivMax:=\ExposantDivMax; - ecarthachures=\useKV[ClesStat]{EcartHachures}; - epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures}; - boolean Hachures; - Hachures=\useKV[ClesStat]{Hachures}; - boolean Bicolore; - Bicolore=\useKV[ClesStat]{Bicolore}; - boolean Grille; - Grille=\useKV[ClesStat]{Grille}; - boolean AffichageDonnee; - AffichageDonnee=\useKV[ClesStat]{AffichageDonnee}; - boolean LegendeVide; - LegendeVide=\useKV[ClesStat]{LegendeVide}; - }] - vardef CalculNombreDonneesEtDonneeMax(text t)= - nbdon:=0;%nombre de données - DonneeMax:=0;%donnée DonneeMaximale - for p_=t: - nbdon:=nbdon+1; - if p_>DonneeMax: - DonneeMax:=p_; - fi; - endfor; - enddef; - vardef ListeDonnees(text t)= - n:=0; - for p_=t: - n:=n+1; - Donnees[n]:=p_; - endfor; - enddef; - vardef RecuperationCouleurs(text t)= - color Col[]; - n:=0; - for p_=t: - n:=n+1; - Col[n]=p_; - endfor; - enddef; + \begin{mpost}[mpsettings={\NewMPDiagBarreHorCode}] vardef TraceDiag= if Grille: pair Zz[];%Pour déterminer "le dernier point" @@ -472,37 +430,70 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \fi% }% +\def\MPStatNewCode{% + maxx:=0; + maxy:=0; + unitex:=\useKV[ClesStat]{Unitex}*cm; + unitey:=\useKV[ClesStat]{Unitey}*cm; + xpartorigine:=\useKV[ClesStat]{Origine}; + AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse}; + boolean Rotation,Lecture,LectureFine,AideLecture,DonneesSup,Reponses,Qualitatif,Tiret; + Rotation=\useKV[ClesStat]{AbscisseRotation}; + Lecture:=\useKV[ClesStat]{Lecture}; + LectureFine:=\useKV[ClesStat]{LectureFine}; + AideLecture:=\useKV[ClesStat]{AideLecture}; + DonneesSup:=\useKV[ClesStat]{DonneesSup}; + Reponses:=\useKV[ClesStat]{Reponses}; + epaisseurbatons=\useKV[ClesStat]{EpaisseurBatons}; + Qualitatif=\useKV[ClesStat]{Qualitatif}; + Tiret=\useKV[ClesStat]{Tiret}; + color CoulDefaut; + CoulDefaut=\useKV[ClesStat]{CouleurDefaut}; + Depart=\useKV[ClesStat]{Depart}; + % + pair A[],B[],P[]; + vardef toto(text t)=%points quantitatif + n:=0; + for p_=t: + if pair p_: + n:=n+1; + P[n]=((xpart(p_)-(xpartorigine))*unitex,ypart(p_)*unitey); + if xpart(p_)>maxx: + maxx:=xpart(p_)-(xpartorigine); + fi; + if ypart(p_)>maxy: + maxy:=ypart(p_); + fi; + A[n]=unitex*(xpart(p_)-(xpartorigine),0); + B[n]=unitey*(0,ypart(p_)); + fi; + endfor; + enddef; + vardef tutu(text t)=%points qualitatif + n:=0; + for p_=t: + if numeric p_: + P[n]=((n)*unitex,unitey*(p_-Depart)); + B[n]=(0,unitey*(p_-Depart)); + if p_>maxy: + maxy:=p_; + fi; + else: + n:=n+1; + A[n]=unitex*(n,0); + fi; + endfor; + maxy:=maxy-Depart; + maxx:=n; + enddef; +} + % Construction du graphique en bâtons \newcommand\MPStatNew[2]{% \ifluatex \mplibforcehmode \begin{mplibcode} - maxx:=0; - maxy:=0; - unitex:=\useKV[ClesStat]{Unitex}*cm; - unitey:=\useKV[ClesStat]{Unitey}*cm; - xpartorigine:=\useKV[ClesStat]{Origine}; - AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse}; - boolean Rotation; - Rotation=\useKV[ClesStat]{AbscisseRotation}; - boolean Lecture; - Lecture:=\useKV[ClesStat]{Lecture}; - boolean LectureFine; - LectureFine:=\useKV[ClesStat]{LectureFine}; - boolean AideLecture; - AideLecture:=\useKV[ClesStat]{AideLecture}; - boolean DonneesSup; - DonneesSup:=\useKV[ClesStat]{DonneesSup}; - boolean Reponses; - Reponses:=\useKV[ClesStat]{Reponses}; - epaisseurbatons=\useKV[ClesStat]{EpaisseurBatons}; - boolean Qualitatif; - Qualitatif=\useKV[ClesStat]{Qualitatif}; - boolean Tiret; - Tiret=\useKV[ClesStat]{Tiret}; - color CoulDefaut; - CoulDefaut=\useKV[ClesStat]{CouleurDefaut}; - Depart=\useKV[ClesStat]{Depart}; + \MPStatNewCode % on r\'ecup\`ere les couleurs color Col[]; n:=0; @@ -514,42 +505,6 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis Col[n]=CoulDefaut; fi; endfor; - % - pair A[],B[],P[]; - vardef toto(text t)=%points quantitatif - n:=0; - for p_=t: - if pair p_: - n:=n+1; - P[n]=((xpart(p_)-(xpartorigine))*unitex,ypart(p_)*unitey); - if xpart(p_)>maxx: - maxx:=xpart(p_)-(xpartorigine); - fi; - if ypart(p_)>maxy: - maxy:=ypart(p_); - fi; - A[n]=unitex*(xpart(p_)-(xpartorigine),0); - B[n]=unitey*(0,ypart(p_)); - fi; - endfor; - enddef; - vardef tutu(text t)=%points qualitatif - n:=0; - for p_=t: - if numeric p_: - P[n]=((n)*unitex,unitey*(p_-Depart)); - B[n]=(0,unitey*(p_-Depart)); - if p_>maxy: - maxy:=p_; - fi; - else: - n:=n+1; - A[n]=unitex*(n,0); - fi; - endfor; - maxy:=maxy-Depart; - maxx:=n; - enddef; vardef tata(text t)=%affichage quantitatif l=0; for p_=t: @@ -659,33 +614,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis if Qualitatif: titi(#1); else:tata(#1); fi; \end{mplibcode} \else - \begin{mpost}[mpsettings={% - unitex:=\useKV[ClesStat]{Unitex}*cm; - unitey:=\useKV[ClesStat]{Unitey}*cm; - xpartorigine:=\useKV[ClesStat]{Origine}; - AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse}; - boolean Rotation,Lecture; - Rotation=\useKV[ClesStat]{AbscisseRotation}; -% boolean Lecture; - Lecture:=\useKV[ClesStat]{Lecture}; - boolean LectureFine; - LectureFine:=\useKV[ClesStat]{LectureFine}; - boolean AideLecture; - AideLecture:=\useKV[ClesStat]{AideLecture}; - boolean DonneesSup; - DonneesSup:=\useKV[ClesStat]{DonneesSup}; - boolean Reponses; - Reponses:=\useKV[ClesStat]{Reponses}; - epaisseurbatons=\useKV[ClesStat]{EpaisseurBatons}; - boolean Qualitatif; - Qualitatif=\useKV[ClesStat]{Qualitatif}; - boolean Tiret; - Tiret=\useKV[ClesStat]{Tiret}; - color CoulDefaut; - CoulDefaut=\useKV[ClesStat]{CouleurDefaut}; - Depart=\useKV[ClesStat]{Depart};}] - maxx:=0; - maxy:=0; + \begin{mpost}[mpsettings={\MPStatNewCode}] % on r\'ecup\`ere les couleurs color Col[]; n:=0; @@ -698,24 +627,6 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis fi; endfor; % - pair A[],B[],P[]; - vardef toto(text t)=%points quantitatif - n:=0; - for p_=t: - if pair p_: - n:=n+1; - P[n]=((xpart(p_)-(xpartorigine))*unitex,ypart(p_)*unitey); - if xpart(p_)>maxx: - maxx:=xpart(p_)-(xpartorigine); - fi; - if ypart(p_)>maxy: - maxy:=ypart(p_); - fi; - A[n]=unitex*(xpart(p_)-(xpartorigine),0); - B[n]=unitey*(0,ypart(p_)); - fi; - endfor; - enddef; vardef tata(text t)=%affichage quantitatif l=0; for p_=t: @@ -741,22 +652,6 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis fi; endfor; enddef; - vardef tutu(text t)=%points qualitatif - n:=0; - for p_=t: - if numeric p_: - P[n]=((n)*unitex,unitey*p_); - B[n]=(0,unitey*p_); - if p_>maxy: - maxy:=p_; - fi; - else: - n:=n+1; - A[n]=unitex*(n,0); - fi; - endfor; - maxx:=n; - enddef; vardef titi(text t)=%affichage qualitatif l:=0; for p_=t: @@ -843,6 +738,102 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \fi } +\def\NewMPStatCirculaireCodeQ{% + Rayon:=\useKV[ClesStat]{Rayon}; + ecarthachures=\useKV[ClesStat]{EcartHachures}; + epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures}; + boolean AffichageAngle,AffichageDonnee,Hachures,Inverse,Legende,LegendeVide,Retour,ACompleter; + AffichageAngle=\useKV[ClesStat]{AffichageAngle}; + AffichageDonnee=\useKV[ClesStat]{AffichageDonnee}; + Hachures=\useKV[ClesStat]{Hachures}; + Inverse=\useKV[ClesStat]{LectureInverse}; + Legende=\useKV[ClesStat]{Legende}; + LegendeVide=\useKV[ClesStat]{LegendeVide}; + Retour=false; + ACompleter=\useKV[ClesStat]{ACompleter}; + % + pair A[],O,B[],C[],D[]; + O=(0,0); + n:=0; + numeric total[],ang[]; + total[0]=0; + ang[0]:=0; + path cc; + cc=(fullcircle scaled (2*Rayon)); + vardef AfficheLegende(text t)= + picture ResultatLegende; + ResultatLegende=image( + for p_=t: + if string p_: + n:=n+1; + C[n]=A[n-1] rotatedabout(O,if Inverse:-1* fi(ang[n]-ang[n-1])/2); + draw 0.95[O,C[n]]--1.05[O,C[n]]; + C[n]:=1.05[O,C[n]]; + Test(n); + if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)): + D[n]=C[n]+(0.5cm,0); + draw C[n]--D[n]; + if Retour=false:label.urt(TEX(p_),D[n]);fi; + fi; + if (xpart(C[n])ypart(O)): + D[n]=C[n]-(0.5cm,0); + draw C[n]--D[n]; + if Retour=false:label.ulft(TEX(p_),D[n]);fi; + fi; + if (xpart(C[n])xpart(O)) and (ypart(C[n])xpart(O)) and (ypart(C[n])>ypart(O)): + D[n]=C[n]+(0.5cm,0); + draw C[n]--D[n]; + if Retour=false:label.urt(LATEX(p_),D[n]);fi; + fi; + if (xpart(C[n])ypart(O)): + D[n]=C[n]-(0.5cm,0); + draw C[n]--D[n]; + if Retour=false:label.ulft(LATEX(p_),D[n]);fi; + fi; + if (xpart(C[n])xpart(O)) and (ypart(C[n])xpart(O)) and (ypart(C[n])>ypart(O)): - D[n]=C[n]+(0.5cm,0); - draw C[n]--D[n]; - if Retour=false:label.urt(TEX(p_),D[n]);fi; - fi; - if (xpart(C[n])ypart(O)): - D[n]=C[n]-(0.5cm,0); - draw C[n]--D[n]; - if Retour=false:label.ulft(TEX(p_),D[n]);fi; - fi; - if (xpart(C[n])xpart(O)) and (ypart(C[n])xpart(O)) and (ypart(C[n])>ypart(O)): - D[n]=C[n]+(0.5cm,0); - draw C[n]--D[n]; - label.urt(LATEX(p_),D[n]); - fi; - if (xpart(C[n])ypart(O)): - D[n]=C[n]-(0.5cm,0); - draw C[n]--D[n]; - label.ulft(LATEX(p_),D[n]); - fi; - if (xpart(C[n])xpart(O)) and (ypart(C[n])A + \tikz\draw[draw=black,fill=PfCCouleurB] (3|-5)--(4|-1)--(5|-1)--++(20pt,0)--(4|-5)--cycle;%m->B + \tikz\draw[draw=black,fill=PfCCouleurB] (5|-5)--(6|-1)--(7|-1)--++(20pt,0)--(6|-5)--cycle;%m->B + \tikz\draw[draw=black,fill=PfCCouleurC] (7|-5)--(8|-1)--(9|-1)--++(20pt,0)--(8|-5)--cycle;%u->C + \tikz\draw[draw=black,fill=PfCCouleurD] (9|-5)--(10|-1)--(11|-1)--++(20pt,0)--(10|-5)--cycle;%u->D + \tikz\draw[draw=black,fill=PfCCouleurD] (11|-5)--(12|-1)--(13|-1)--++(20pt,0)--(12|-5)--cycle;%u->D + \tikz\draw[draw=black,fill=PfCCouleurE] (13|-5)--(14|-1)--(15|-1)--++(20pt,0)--(14|-5)--cycle;%d->E + \tikz\draw[draw=black,fill=PfCCouleurF] (15|-5)--(16|-1)--(17|-1)--++(20pt,0)--(16|-5)--cycle;%d->F + \tikz\draw[draw=black,fill=PfCCouleurF] (17|-5)--(18|-1)--(19|-1)--++(20pt,0)--(18|-5)--cycle;%d->F + \tikz\draw[draw=black,fill=PfCCouleurF] (19|-5)--(20|-1)--(21|-1)--++(20pt,0)--(20|-5)--cycle;%d->F + % + \Body + %% Pour décaler et laisser la place nécessaire + \xintFor* ##1 in {\xintSeq{1}{4}}\do{% + &&&&&&&&&&&&&&&&&&&&\\ + }% + %% Lignes vierges + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesTableaux]{NbLignes}-2}}}\do{% + &&&&&&&&&&&&&&&&&&&&\\ + }% + &&&&&&&&&&&\ifboolKV[ClesTableaux]{Entiers}{}{\Huge\bfseries ,}&&&&&&&&&\\ + &&&&&&&&&&&&&&&&&&&&\\ + \CodeAfter + \tikz\draw (last-|1)--(last-|\fpeval{2*\PfCDerniereColonne-2}); + \xintFor* ##1 in {\xintSeq{1}{\fpeval{2*\PfCDerniereColonne-2}}}\do{% + \tikz\draw[dashed] (5-|##1)--(\fpeval{5+\useKV[ClesTableaux]{NbLignes}}-|##1);% + \tikz\draw (5-|##1)--(\fpeval{7}-|##1);% + \tikz\draw (\fpeval{5+\useKV[ClesTableaux]{NbLignes}}-|##1)--(\fpeval{3+\useKV[ClesTableaux]{NbLignes}}-|##1);% + }% + % + \tikz\node[rotate=60] at (2|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[1]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (4|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[2]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (6|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[3]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (8|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[4]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (10|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[5]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (12|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[6]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (14|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[7]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (16|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[8]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (18|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[9]\end{center}\end{minipage}};% + \tikz\node[rotate=60] at (20|-3) {\begin{minipage}{60pt}\begin{center}\scriptsize \PfCNomUnites[10]\end{center}\end{minipage}};% + \end{NiceTabular}% + \end{center}% + \setlength{\tabcolsep}{100\tabcolsep}% + \end{minipage}% + }% + \end{center} + \begin{center} + \begin{NiceTabular}{m{0.97\linewidth}}% + \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[ClesTableaux]{NbLignes}-4}}}\do{% + \Block[fill=PfCCouleurFondGN]{}{\phantom{A}}\\ + }% + \CodeAfter% + \tikz\draw (1-|1) rectangle (last-|last);% + \end{NiceTabular} + \end{center} }% \ No newline at end of file diff --git a/macros/latex/contrib/profcollege/latex/PfCTortueBase.tex b/macros/latex/contrib/profcollege/latex/PfCTortueBase.tex index e5f99c7f4a..949c781ce7 100644 --- a/macros/latex/contrib/profcollege/latex/PfCTortueBase.tex +++ b/macros/latex/contrib/profcollege/latex/PfCTortueBase.tex @@ -6,6 +6,7 @@ Etapes=false,%Pour arrêter la construction à une étape particulière Nom=\jobname,%Pour la sauvegarde du fichier mp Grille=false,%Pour faire apparaître une grille + Couleur=black,%Couleur du tracé LargeurG=10,%Largeur Grille HauteurG=10,%Hauteur Grille TortueD=false,%Affiche la tortue au départ @@ -194,7 +195,7 @@ \mplibforcehmode \begin{mplibcode} input PfCTurtleTestRemplis.mp; - + drawoptions(withcolor \useKV[Tortue]{Couleur}); pair Depart; Depart=\useKV[Tortue]{Depart} if \useKV[Tortue]{Cases}:+(15,15)fi; pair A[],B[]; diff --git a/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex b/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex index 5afdcfecaa..91f90c96d2 100644 --- a/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex +++ b/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex @@ -161,8 +161,6 @@ draw Projette((k/Hauteur)[Adg0,Adg3])--Projette((k/Hauteur)[Adg1,Adg2]); endfor; fi; - - %draw (llcorner currentpicture)--(lrcorner currentpicture)--(urcorner currentpicture)--(ulcorner currentpicture)--cycle; \end{mplibcode} \ifboolKV[VueCubes]{Grilles}{}{% \hspace*{1.5cm} diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty index 1b4f7c5a7b..80dca0a8df 100644 --- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty +++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty @@ -2,9 +2,9 @@ % licence : Released under the LaTeX Project Public License v1.3c % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e}% -\def\filedate{2023/04/17}% +\def\filedate{2023/05/01}% \let\PfCfiledate\filedate% -\def\fileversion{0.99-z-j}% +\def\fileversion{0.99-z-k}% \let\PfCfileversion\fileversion% \ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]% @@ -569,7 +569,7 @@ }%\emoticon }%\raisebox } - +\input{PfCPavage} \input{PfCNonogramme} \input{PfCJeuRangement} \input{PfCTrio} diff --git a/macros/latex/contrib/profcollege/metapost/PfCConstantes.mp b/macros/latex/contrib/profcollege/metapost/PfCConstantes.mp index 02895dcf8c..bdef5781f1 100644 --- a/macros/latex/contrib/profcollege/metapost/PfCConstantes.mp +++ b/macros/latex/contrib/profcollege/metapost/PfCConstantes.mp @@ -18,3 +18,19 @@ orangevif=(1,0.25,0.1); vert=(0,1,0); jaune=rouge+vert; gris=0.8*white; + +%coloriage et lumière +vardef Hsv(expr CC)=%CC couleur donnée en hsv d'après http://en.wikipedia.org/wiki/HSL_color_space + save $; + color $; + SSw:=floor(redpart(CC)/60); + SSh:=SSw mod 6; + SSf:=(redpart(CC)/60)-floor(SSw); + SSs:=greenpart((CC)); + SSv:=bluepart((CC)); + SSp:=SSv*(1-SSs); + SSq:=SSv*(1-SSf*SSs); + SSt:=SSv*(1-(1-SSf)*SSs); + if SSh=0: $=(SSv,SSt,SSp) elseif SSh=1:$=(SSq,SSv,SSp) elseif SSh=2:$=(SSp,SSv,SSt) elseif SSh=3:$=(SSp,SSq,SSv) elseif SSh=4:$=(SSt,SSp,SSv) elseif SSh=5:$=(SSv,SSp,SSq) fi; + $ +enddef; diff --git a/macros/latex/contrib/profcollege/metapost/PfCScratch.mp b/macros/latex/contrib/profcollege/metapost/PfCScratch.mp index 3c6826777a..b3edc8af1f 100644 --- a/macros/latex/contrib/profcollege/metapost/PfCScratch.mp +++ b/macros/latex/contrib/profcollege/metapost/PfCScratch.mp @@ -14,6 +14,7 @@ pair _coinnum;%milieu côté gauche pour placer la numérotation des lignes numeric Nblignes; Nblignes:=1; pair DebutListe; DebutListe=(0,0); boolean NumeroteLignes; NumeroteLignes=false; +boolean NumeroteFinBloc; NumeroteFinBloc=false; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% couleurs color CoulLignes; CoulLignes:=black; @@ -1711,6 +1712,10 @@ $=image( _coinprec:=(llcorner $); _coinprec:=_coinprec+(0,eb); numblocrep:=numblocrep-1; +if NumeroteFinBloc=true: + label(TEX("\footnotesize"&decimal(Nblignes)&""),_coinprec+(-3*eb,2*eb)); + Nblignes:=Nblignes+1; +fi; $ enddef; -- cgit v1.2.3