summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-01-07 03:01:57 +0000
committerNorbert Preining <norbert@preining.info>2024-01-07 03:01:57 +0000
commitaba7fb229e902758b312ecec84ab6f485c89ba66 (patch)
treec19cf7164b430c1d344ad913c8dc44f5ace262b7 /macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
parent949a85bb8707bf1aaa2b23b018e24d5001d38e52 (diff)
CTAN sync 202401070301
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex166
1 files changed, 164 insertions, 2 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex b/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
index 38c3915888..a05ae0075b 100644
--- a/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
@@ -1,8 +1,10 @@
%%%
% 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,Multiplicatif=false,MultiplicatifH=false,MultiplicatifB=false}%Separation pour conserver le lien avec les équations.
\defKV[ClesModeleBarre]{Longueur=\setKV[ClesModeleBarre]{Homogene}}%
+\defKV[ClesModeleBarre]{AccoladesH=\setKV[ClesModeleBarre]{MultiplicatifH}\setKV[ClesModeleBarre]{Multiplicatif}}%
+\defKV[ClesModeleBarre]{AccoladesB=\setKV[ClesModeleBarre]{MultiplicatifB}\setKV[ClesModeleBarre]{Multiplicatif}}%
\newtoks\toklistemodelbarresup%
\def\UpdateListeModelBarreSup#1\nil{\addtotok\toklistemodelbarresup{#1,}}%
@@ -10,6 +12,10 @@
\def\UpdateListeModelBarreInf#1\nil{\addtotok\toklistemodelbarreinf{#1,}}%
\newtoks\toklistemodelbarresep%
\def\UpdateListeModelBarreSep#1\nil{\addtotok\toklistemodelbarresep{#1,}}%
+\newtoks\toklistemodelbarreaccosup%
+\def\UpdateListeModelBarreAccoSup#1\nil{\addtotok\toklistemodelbarreaccosup{#1,}}%
+\newtoks\toklistemodelbarreaccoinf%
+\def\UpdateListeModelBarreAccoInf#1\nil{\addtotok\toklistemodelbarreaccoinf{#1,}}%
\newcommand\ModeleBarre[3][]{%
% #1 options
@@ -42,7 +48,36 @@
\ifboolKV[ClesModeleBarre]{Homogene}{%
\PfCMPDessineModelBarre{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}%
}{%
- \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}%
+ \ifboolKV[ClesModeleBarre]{Multiplicatif}{%
+ %
+ \toklistemodelbarreaccosup{}%
+ \toklistemodelbarreaccoinf{}%
+ \ifboolKV[ClesModeleBarre]{MultiplicatifH}{%
+ \xdef\PfCListeAccoladesH{\useKV[ClesModeleBarre]{AccoladesH}}%
+ \setsepchar{\\/ }%
+ \readlist\ListeModeleBarreAccoSup{\PfCListeAccoladesH}%
+ \foreachitem\compteur\in\ListeModeleBarreAccoSup{%
+ \foreachitem\valeur\in\ListeModeleBarreAccoSup[\compteurcnt]{%
+ \expandafter\UpdateListeModelBarreAccoSup\valeur\nil%
+ }%
+ }%
+ % Les accolades hautes sont \the\toklistemodelbarreaccosup.\\
+ }{}%
+ \ifboolKV[ClesModeleBarre]{MultiplicatifB}{%
+ \xdef\PfCListeAccoladesB{\useKV[ClesModeleBarre]{AccoladesB}}%
+ \setsepchar{\\/ }%
+ \readlist\ListeModeleBarreAccoInf{\PfCListeAccoladesB}%
+ \foreachitem\compteur\in\ListeModeleBarreAccoInf{%
+ \foreachitem\valeur\in\ListeModeleBarreAccoInf[\compteurcnt]{%
+ \expandafter\UpdateListeModelBarreAccoInf\valeur\nil%
+ }%
+ }%
+ % Les accolades basses sont \the\toklistemodelbarreaccoinf.\\
+ }{}%
+ \PfCMPDessineModelBarreNonHomogeneMultiplicatif{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}{\the\toklistemodelbarreaccosup}{\the\toklistemodelbarreaccoinf}%
+ }{%
+ \PfCMPDessineModelBarreNonHomogene{\the\toklistemodelbarresup}{\the\toklistemodelbarreinf}{\the\toklistemodelbarresep}%
+ }%
}%
}%
@@ -163,6 +198,133 @@
\end{mplibcode}
}%
+\def\PfCMPDessineModelBarreAccoladeCode{%
+}%
+
+\newcommand\PfCMPDessineModelBarreNonHomogeneMultiplicatif[5]{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \PfCMPDessineModelBarreNHCode
+ \PfCMPDessineModelBarreBriqueCode
+ % \PfCMPDessineModelBarreAccoladeCode
+
+ vardef TraceAccoH(text t)=
+ pair PfCAccoPtH[];
+ numeric etape,ProporHauteur;
+ etape:=0;
+ ProporHauteur:=1;
+ numeric decaetape[][];
+ string toto;
+ numeric n;
+ n=0;
+ for p_=t:
+ n:=n+1;
+ if (n mod 3)=1:
+ etape:=etape+1;
+ decaetape[etape][1]=p_;
+ fi;
+ if (n mod 3)=2:
+ decaetape[etape][2]=p_;
+ fi;
+ if (n mod 3)=0:
+ toto:=p_;
+ if substring(1,2) of toto="*":
+ ltoto=length toto;
+ ProporHauteur:=scantokens(substring(0,1) of toto)+1;
+ toto:=substring(2,ltoto) of toto;
+ else:
+ ProporHauteur:=1;
+ fi;
+ PfCAccoPtH[1]:=(0,ProporHauteur*Hauteur) shifted(VecteurDepla*(decaetape[etape][1]-1));
+ PfCAccoPtH[2]:=PfCAccoPtH[1] shifted(VecteurDepla*decaetape[etape][2]);
+ if ProporHauteur>1:
+ draw PfCAccoPtH[1]--(PfCAccoPtH[1] shifted(0,-(ProporHauteur-1)*Hauteur)) dashed evenly;
+ draw PfCAccoPtH[2]--(PfCAccoPtH[2] shifted(0,-(ProporHauteur-1)*Hauteur)) dashed evenly;
+ fi;
+ label(TEX("$\overbrace{\hbox to"&decimal(abs(PfCAccoPtH[1]-PfCAccoPtH[2]))&"pt{\PfCTBstrut}}^{"&toto&"}$"),1/2[PfCAccoPtH[1],PfCAccoPtH[2]]);
+ fi;
+ endfor;
+ enddef;
+ %
+ vardef TraceAccoB(text t)=
+ pair PfCAccoPtB[];
+ numeric etape,ProporHauteur;
+ etape:=0;
+ ProporHauteur:=1;
+ numeric decaetape[][];
+ string toto;
+ numeric n;
+ n=0;
+ for p_=t:
+ n:=n+1;
+ if (n mod 3)=1:
+ etape:=etape+1;
+ decaetape[etape][1]=p_;
+ fi;
+ if (n mod 3)=2:
+ decaetape[etape][2]=p_;
+ fi;
+ if (n mod 3)=0:
+ toto:=p_;
+ if substring(1,2) of toto="*":
+ ltoto=length toto;
+ ProporHauteur:=scantokens(substring(0,1) of toto)+1;
+ toto:=substring(2,ltoto) of toto;
+ else:
+ ProporHauteur:=1;
+ fi;
+ PfCAccoPtB[1]:=(0,-ProporHauteur*Hauteur) shifted(VecteurDepla*(decaetape[etape][1]-1));
+ PfCAccoPtB[2]:=PfCAccoPtB[1] shifted(VecteurDepla*decaetape[etape][2]);
+ if ProporHauteur>1:
+ draw PfCAccoPtB[1]--(PfCAccoPtB[1] shifted(0,(ProporHauteur-1)*Hauteur)) dashed evenly;
+ draw PfCAccoPtB[2]--(PfCAccoPtB[2] shifted(0,(ProporHauteur-1)*Hauteur)) dashed evenly;
+ fi;
+ label(TEX("$\underbrace{\hbox to"&decimal(abs(PfCAccoPtB[1]-PfCAccoPtB[2]))&"pt{\PfCTBstrut}}_{"&toto&"}$"),1/2[PfCAccoPtB[1],PfCAccoPtB[2]]);
+ fi;
+ endfor;
+ enddef;
+
+ Longueur:=\useKV[ClesModeleBarre]{Largeur};
+ Hauteur:=\useKV[ClesModeleBarre]{Hauteur};
+ u:=Longueur;
+
+ toto(#1);
+ 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;
+
+ Separation(#3);
+
+ TraceAccoH(#4);
+ TraceAccoB(#5);
+ \end{mplibcode}%
+ \fi
+}
+
\def\PfCMPDessineModelBarreNHCode{%
numeric MBnbcolinf;%compte combien de couleurs
MBnbcolinf=0;