diff options
author | Norbert Preining <norbert@preining.info> | 2023-05-20 03:02:47 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-05-20 03:02:47 +0000 |
commit | 9cdcfcf8d9333b1d9b34b61ddc21910bbcc04491 (patch) | |
tree | f9143b5812837ab74ec819d0be97721594863346 /macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex | |
parent | dd54bf2a9c9e985917ceb5ced412213cd44eaeae (diff) |
CTAN sync 202305200302
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex | 252 |
1 files changed, 106 insertions, 146 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex b/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex index fea78f1102..38c3915888 100644 --- a/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex +++ b/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex @@ -1,15 +1,15 @@ %%% % Modele en barre %%% -\setKVdefault[ClesModeleBarre]{Hauteur=0.5cm,Largeur=1cm,Separation=0,Homogene=false}%Separation pour conserver le lien avec les équations. +\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,}}% +\newtoks\toklistemodelbarresep% +\def\UpdateListeModelBarreSep#1\nil{\addtotok\toklistemodelbarresep{#1,}}% \newcommand\ModeleBarre[3][]{% % #1 options @@ -20,6 +20,9 @@ \setsepchar{\\/ }% \readlist\ListeModelBarreSup{#2}% \readlist\ListeModelBarreInf{#3}% + \setsepchar{,}% + \xdef\fooSeparation{\useKV[ClesModeleBarre]{Separation}} + \readlist\ListeModelBarreSep{\fooSeparation}% \toklistemodelbarresup{}% \foreachitem\compteur\in\ListeModelBarreSup{% \foreachitem\valeur\in\ListeModelBarreSup[\compteurcnt]{% @@ -32,10 +35,14 @@ \expandafter\UpdateListeModelBarreInf\valeur\nil% }% }% + \toklistemodelbarresep{}% + \foreachitem\compteur\in\ListeModelBarreSep{% + \expandafter\UpdateListeModelBarreSep\compteur\nil% + }% \ifboolKV[ClesModeleBarre]{Homogene}{% \PfCMPDessineModelBarre{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}% }{% - \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}% + \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}% }% }% @@ -156,37 +163,42 @@ \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 +\def\PfCMPDessineModelBarreNHCode{% + 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; + % + vardef Separation(text t)= + for p_=t: + if p_>0: + nbdecal:=p_; + draw (u*nbdecal,-1.5Hauteur)--(u*nbdecal,1.5Hauteur) withpen pencircle scaled 1.5 dashed evenly withcolor red; + fi; + endfor; + 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. @@ -211,35 +223,64 @@ 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; +\def\PfCMPDessineModelBarreBriqueCode{% + vardef Brique(expr col,nbfois)(text t)= + save $; + picture $; + $=image( + 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; + ); + $ + enddef; +}% + +\def\PfCMPDessineModelBarreBriqueCodePDF{% + vardef Brique(expr col,nbfois)(text t)= + save $; + picture $; + $=image( + 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(LATEX(t),iso((0,0),(u*abs(nbfois),Hauteur))); + else: + label.bot(LATEX(t),iso((0,0),(u*abs(nbfois),-Hauteur))); + drawdblarrow (0,-0.5*Hauteur)--(u*abs(nbfois),-0.5*Hauteur); + fi; + ); + $ + enddef; +}% + +\newcommand\PfCMPDessineModelBarreNonHomogene[3]{% + \ifluatex% + \mplibforcehmode% + \begin{mplibcode} + \PfCMPDessineModelBarreNHCode + \PfCMPDessineModelBarreBriqueCode + Longueur:=\useKV[ClesModeleBarre]{Largeur}; + Hauteur:=\useKV[ClesModeleBarre]{Hauteur}; + u:=Longueur; + + toto(#1); tata(#2); pair VecteurDepla; @@ -267,89 +308,11 @@ endfor; endfor; - if Separation>0: - draw (u*Separation,-1.5Hauteur)--(u*Separation,1.5Hauteur) withpen pencircle scaled 1.5 dashed evenly withcolor red; - fi; - + Separation(#3); \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; - + \begin{mpost}[mpsettings={\PfCMPDessineModelBarreNHCode;\PfCMPDessineModelBarreBriqueCodePDF;Longueur:=\useKV[ClesModeleBarre]{Largeur};Hauteur:=\useKV[ClesModeleBarre]{Hauteur};u:=Longueur;}] 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; @@ -377,10 +340,7 @@ endfor; endfor; - if Separation>0: - draw u*(Separation,-0.75)--u*(Separation,0.75) withpen pencircle scaled 1.5 dashed evenly withcolor red; - fi; - + Separation(#3); \end{mpost} \fi }%
\ No newline at end of file |