From aba7fb229e902758b312ecec84ab6f485c89ba66 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sun, 7 Jan 2024 03:01:57 +0000 Subject: CTAN sync 202401070301 --- .../contrib/profcollege/latex/PfCModeleBarre.tex | 166 ++++++++++++++++++++- 1 file changed, 164 insertions(+), 2 deletions(-) (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 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; -- cgit v1.2.3