From 85fda71ebb01e4a5b0ce50edf3dda43f45ebb55a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 24 Mar 2023 03:01:34 +0000 Subject: CTAN sync 202303240301 --- .../contrib/profcollege/latex/PfCModeleBarre.tex | 386 +++++++++++++++++++++ 1 file changed, 386 insertions(+) create mode 100644 macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex (limited to 'macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex') diff --git a/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex b/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex new file mode 100644 index 0000000000..fea78f1102 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex @@ -0,0 +1,386 @@ +%%% +% Modele en barre +%%% +\setKVdefault[ClesModeleBarre]{Hauteur=0.5cm,Largeur=1cm,Separation=0,Homogene=false}%Separation pour conserver le lien avec les équations. +\defKV[ClesModeleBarre]{Longueur=\setKV[ClesModeleBarre]{Homogene}}% + +\newtoks\toklistemodelbarresup% +\toklistemodelbarresup{}% +\def\UpdateListeModelBarreSup#1\nil{\addtotok\toklistemodelbarresup{#1,}}% +\newtoks\toklistemodelbarreinf% +\toklistemodelbarreinf{}% +\def\UpdateListeModelBarreInf#1\nil{\addtotok\toklistemodelbarreinf{#1,}}% + +\newcommand\ModeleBarre[3][]{% + % #1 options + % #2 éléments de la barre supérieure C1 2 $x$ 1 3/C2 1 1x/ + % #3 éléments de la barre inférieure (même lecture) + \useKVdefault[ClesModeleBarre]% + \setKV[ClesModeleBarre]{#1}% + \setsepchar{\\/ }% + \readlist\ListeModelBarreSup{#2}% + \readlist\ListeModelBarreInf{#3}% + \toklistemodelbarresup{}% + \foreachitem\compteur\in\ListeModelBarreSup{% + \foreachitem\valeur\in\ListeModelBarreSup[\compteurcnt]{% + \expandafter\UpdateListeModelBarreSup\valeur\nil% + }% + }% + \toklistemodelbarreinf{}% + \foreachitem\compteur\in\ListeModelBarreInf{% + \foreachitem\valeur\in\ListeModelBarreInf[\compteurcnt]{% + \expandafter\UpdateListeModelBarreInf\valeur\nil% + }% + }% + \ifboolKV[ClesModeleBarre]{Homogene}{% + \PfCMPDessineModelBarre{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}% + }{% + \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}% + }% +}% + +\newcommand\PfCMPDessineModelBarre[2]{% + \begin{mplibcode}% + Longueur:=\useKV[ClesModeleBarre]{Longueur}; + Hauteur:=\useKV[ClesModeleBarre]{Hauteur}; + + vardef Briquesup(expr col)(text t)= + save $; + picture $; + $=image( + u:=Longueur/MBnbcasessuptotal; + remplis polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur)) withcolor col; + draw polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur)); + label(TEX(t),iso((0,0),(u,Hauteur))); + u:=1cm; + ); + $ + enddef; + + vardef Briqueinf(expr col)(text t)= + save $; + picture $; + $=image( + u:=Longueur/MBnbcasesinftotal; + remplis polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur)) withcolor col; + draw polygone((0,0),(u,0),(u,Hauteur),(0,Hauteur)); + label(TEX(t),iso((0,0),(u,Hauteur))); + u:=1cm; + ); + $ + enddef; + + numeric MBnbcolsup;%compte combien de couleurs + MBnbcolsup=0; + color MBColSup[];%Sauvegarde les couleurs de la barre sup + numeric MBnbinfosup[];%compte combien d'infos par couleurs. + numeric MBnbcasessup[][]; + numeric MBnbcasessuptotal; + MBnbcasessuptotal=0; + string MBTextcasessup[][]; + vardef toto(text t)= + for p_=t: + if color p_: + MBnbcolsup:=MBnbcolsup+1;% on incrémente le nombre de couleurs + MBColSup[MBnbcolsup]:=p_;% on définit la couleur de la série de cases + MBnbinfosup[MBnbcolsup]:=0; + else: + if numeric p_: + MBnbinfosup[MBnbcolsup]:=MBnbinfosup[MBnbcolsup]+1; + MBnbcasessuptotal:=MBnbcasessuptotal+p_; + MBnbcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_; + else: + MBTextcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_; + fi; + fi; + endfor; + enddef; + + toto(#1); + + numeric MBnbcolinf;%compte combien de couleurs + MBnbcolinf=0; + color MBColInf[];%Sauvegarde les couleurs de la barre inf + numeric MBnbinfoinf[];%compte combien d'infos par couleurs. + numeric MBnbcasesinf[][]; + numeric MBnbcasesinftotal; + MBnbcasesinftotal=0; + string MBTextcasesinf[][]; + vardef tata(text t)= + for p_=t: + if color p_: + MBnbcolinf:=MBnbcolinf+1;% on incrémente le nombre de couleurs + MBColInf[MBnbcolinf]:=p_;% on définit la couleur de la série de cases + MBnbinfoinf[MBnbcolinf]:=0; + else: + if numeric p_: + MBnbinfoinf[MBnbcolinf]:=MBnbinfoinf[MBnbcolinf]+1; + MBnbcasesinftotal:=MBnbcasesinftotal+p_; + MBnbcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_; + else: + MBTextcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_; + fi; + fi; + endfor; + enddef; + + tata(#2); + + pair VecteurDeplasup; + VecteurDeplasup=(Longueur/MBnbcasessuptotal,0); + + numeric MBnbdepla; + MBnbdepla=0; + for k=1 upto MBnbcolsup: + for l=1 upto MBnbinfosup[k]: + for j=1 upto MBnbcasessup[k][l]: + trace Briquesup(MBColSup[k])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDeplasup); + MBnbdepla:=MBnbdepla+1; + endfor; + endfor; + endfor; + + pair VecteurDeplainf; + VecteurDeplainf=(Longueur/MBnbcasesinftotal,0); + + numeric MBnbdepla; + MBnbdepla=0; + for k=1 upto MBnbcolinf: + for l=1 upto MBnbinfoinf[k]: + for j=1 upto MBnbcasesinf[k][l]: + trace Briqueinf(MBColInf[k])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDeplainf+(0,-Hauteur)); + MBnbdepla:=MBnbdepla+1; + endfor; + endfor; + endfor; + \end{mplibcode} +}% + +\newcommand\PfCMPDessineModelBarreNonHomogene[2]{% + \ifluatex% + \mplibforcehmode% + \begin{mplibcode} + Longueur:=\useKV[ClesModeleBarre]{Largeur}; + Hauteur:=\useKV[ClesModeleBarre]{Hauteur}; + Separation:=\useKV[ClesModeleBarre]{Separation}; + + vardef Brique(expr col,nbfois)(text t)= + save $; + picture $; + $=image( + u:=Longueur; + if t="?": + draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) dashed evenly; + else: + remplis polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) withcolor col; + draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)); + fi; + if nbfois>0: + label(TEX(t),iso((0,0),(u*abs(nbfois),Hauteur))); + else: + label.bot(TEX(t),iso((0,0),(u*abs(nbfois),-Hauteur))); + drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur); + fi; + u:=1cm; + ); + $ + enddef; + + numeric MBnbcolsup;%compte combien de couleurs + MBnbcolsup=0; + color MBColSup[];%Sauvegarde les couleurs de la barre sup + numeric MBnbinfosup[];%compte combien d'infos par couleurs. + numeric MBnbcasessup[][]; + numeric MBnbcasessuptotal; + MBnbcasessuptotal=0; + string MBTextcasessup[][]; + vardef toto(text t)= + for p_=t: + if color p_: + MBnbcolsup:=MBnbcolsup+1;% on incrémente le nombre de couleurs + MBColSup[MBnbcolsup]:=p_;% on définit la couleur de la série de cases + MBnbinfosup[MBnbcolsup]:=0; + else: + if numeric p_: + MBnbinfosup[MBnbcolsup]:=MBnbinfosup[MBnbcolsup]+1; + MBnbcasessuptotal:=MBnbcasessuptotal+p_; + MBnbcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_; + else: + MBTextcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_; + fi; + fi; + endfor; + enddef; + + toto(#1); + + numeric MBnbcolinf;%compte combien de couleurs + MBnbcolinf=0; + color MBColInf[];%Sauvegarde les couleurs de la barre inf + numeric MBnbinfoinf[];%compte combien d'infos par couleurs. + numeric MBnbcasesinf[][]; + numeric MBnbcasesinftotal; + MBnbcasesinftotal=0; + string MBTextcasesinf[][]; + vardef tata(text t)= + for p_=t: + if color p_: + MBnbcolinf:=MBnbcolinf+1;% on incrémente le nombre de couleurs + MBColInf[MBnbcolinf]:=p_;% on définit la couleur de la série de cases + MBnbinfoinf[MBnbcolinf]:=0; + else: + if numeric p_: + MBnbinfoinf[MBnbcolinf]:=MBnbinfoinf[MBnbcolinf]+1; + MBnbcasesinftotal:=MBnbcasesinftotal+p_; + MBnbcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_; + else: + MBTextcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_; + fi; + fi; + endfor; + enddef; + + tata(#2); + + pair VecteurDepla; + VecteurDepla=(Longueur,0); + + numeric MBnbdepla; + MBnbdepla=0; + for k=1 upto MBnbcolsup: + for l=1 upto MBnbinfosup[k]: + trace Brique(MBColSup[k],MBnbcasessup[k][l])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDepla); + MBnbdepla:=MBnbdepla+MBnbcasessup[k][l]; + endfor; + endfor; + + MBnbdepla:=0; + for k=1 upto MBnbcolinf: + for l=1 upto MBnbinfoinf[k]: + trace Brique(MBColInf[k],MBnbcasesinf[k][l])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDepla+(0,-Hauteur)); + if MBnbcasesinf[k][l]<0: + for j=1 upto (abs(MBnbcasesinf[k][l])-1): + trace ((0,0)--(0,Hauteur)) shifted((MBnbdepla+j)*VecteurDepla+(0,-Hauteur)) withcolor black; + endfor; + fi; + MBnbdepla:=MBnbdepla+abs(MBnbcasesinf[k][l]); + endfor; + endfor; + + if Separation>0: + draw (u*Separation,-1.5Hauteur)--(u*Separation,1.5Hauteur) withpen pencircle scaled 1.5 dashed evenly withcolor red; + fi; + + \end{mplibcode}% + \else + \begin{mpost}[mpsettings={Longueur:=\useKV[ClesModeleBarre]{Largeur};Hauteur:=\useKV[ClesModeleBarre]{Hauteur};Separation:=\useKV[ClesModeleBarre]{Separation};}] + vardef Brique(expr col,nbfois)(text t)= + save $; + picture $; + $=image( + u:=Longueur; + if t="?": + draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) dashed evenly; + else: + remplis polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)) withcolor col; + draw polygone((0,0),(u*abs(nbfois),0),(u*abs(nbfois),Hauteur),(0,Hauteur)); + fi; + if nbfois>0: + label(LATEXProf(t),iso((0,0),(u*abs(nbfois),Hauteur))); + else: + label.bot(LATEXProf(t),iso((0,0),(u*abs(nbfois),-Hauteur))); + drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur); + fi; + u:=1cm; + ); + $ + enddef; + + numeric MBnbcolsup;%compte combien de couleurs + MBnbcolsup=0; + color MBColSup[];%Sauvegarde les couleurs de la barre sup + numeric MBnbinfosup[];%compte combien d'infos par couleurs. + numeric MBnbcasessup[][]; + numeric MBnbcasessuptotal; + MBnbcasessuptotal=0; + string MBTextcasessup[][]; + vardef toto(text t)= + for p_=t: + if color p_: + MBnbcolsup:=MBnbcolsup+1;% on incrémente le nombre de couleurs + MBColSup[MBnbcolsup]:=p_;% on définit la couleur de la série de cases + MBnbinfosup[MBnbcolsup]:=0; + else: + if numeric p_: + MBnbinfosup[MBnbcolsup]:=MBnbinfosup[MBnbcolsup]+1; + MBnbcasessuptotal:=MBnbcasessuptotal+p_; + MBnbcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_; + else: + MBTextcasessup[MBnbcolsup][MBnbinfosup[MBnbcolsup]]:=p_; + fi; + fi; + endfor; + enddef; + + toto(#1); + + numeric MBnbcolinf;%compte combien de couleurs + MBnbcolinf=0; + color MBColInf[];%Sauvegarde les couleurs de la barre inf + numeric MBnbinfoinf[];%compte combien d'infos par couleurs. + numeric MBnbcasesinf[][]; + numeric MBnbcasesinftotal; + MBnbcasesinftotal=0; + string MBTextcasesinf[][]; + vardef tata(text t)= + for p_=t: + if color p_: + MBnbcolinf:=MBnbcolinf+1;% on incrémente le nombre de couleurs + MBColInf[MBnbcolinf]:=p_;% on définit la couleur de la série de cases + MBnbinfoinf[MBnbcolinf]:=0; + else: + if numeric p_: + MBnbinfoinf[MBnbcolinf]:=MBnbinfoinf[MBnbcolinf]+1; + MBnbcasesinftotal:=MBnbcasesinftotal+p_; + MBnbcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_; + else: + MBTextcasesinf[MBnbcolinf][MBnbinfoinf[MBnbcolinf]]:=p_; + fi; + fi; + endfor; + enddef; + + tata(#2); + + pair VecteurDepla; + VecteurDepla=(Longueur,0); + + numeric MBnbdepla; + MBnbdepla=0; + for k=1 upto MBnbcolsup: + for l=1 upto MBnbinfosup[k]: + trace Brique(MBColSup[k],MBnbcasessup[k][l])(MBTextcasessup[k][l]) shifted(MBnbdepla*VecteurDepla); + MBnbdepla:=MBnbdepla+MBnbcasessup[k][l]; + endfor; + endfor; + + MBnbdepla:=0; + for k=1 upto MBnbcolinf: + for l=1 upto MBnbinfoinf[k]: + trace Brique(MBColInf[k],MBnbcasesinf[k][l])(MBTextcasesinf[k][l]) shifted(MBnbdepla*VecteurDepla+u*(0,-0.5)); + if MBnbcasesinf[k][l]<0: + for j=1 upto (abs(MBnbcasesinf[k][l])-1): + trace ((0,0)--(0,Hauteur)) shifted((MBnbdepla+j)*VecteurDepla+u*(0,-0.5)) withcolor black; + endfor; + fi; + MBnbdepla:=MBnbdepla+abs(MBnbcasesinf[k][l]); + endfor; + endfor; + + if Separation>0: + draw u*(Separation,-0.75)--u*(Separation,0.75) withpen pencircle scaled 1.5 dashed evenly withcolor red; + fi; + + \end{mpost} + \fi +}% \ No newline at end of file -- cgit v1.2.3