From aba7fb229e902758b312ecec84ab6f485c89ba66 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
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

