summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-05-20 03:02:47 +0000
committerNorbert Preining <norbert@preining.info>2023-05-20 03:02:47 +0000
commit9cdcfcf8d9333b1d9b34b61ddc21910bbcc04491 (patch)
treef9143b5812837ab74ec819d0be97721594863346 /macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
parentdd54bf2a9c9e985917ceb5ced412213cd44eaeae (diff)
CTAN sync 202305200302
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex252
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