%%% % Bande numérique %%% \def\filedateBandeNumerique{2025/05/26}% \def\fileversionBandeNumerique{0.1d}% \message{-- \filedateBandeNumerique\space v\fileversionBandeNumerique}% % \setKVdefault[BandeNum]{Elements={1,1,10},Largeur=\mpdim{2em},Hauteur=\mpdim{1.5em},Invisibles={0},Cibles=false,CouleurCible=LightGray,Logos=false,Solution=false,Codes=false,Dys=false,CouleurSolution={},Cible={},Logo={},Traces={}}% \defKV[BandeNum]{CouleurSolution=\ifempty{#1}{\setKV[BandeNum]{Solution=false}}{\setKV[BandeNum]{Solution}}}% \defKV[BandeNum]{Cible=\ifempty{#1}{\setKV[BandeNum]{Cibles=false}}{\setKV[BandeNum]{Cibles}}}% \defKV[BandeNum]{Logo=\ifempty{#1}{\setKV[BandeNum]{Logos=false}}{\setKV[BandeNum]{Logos}}}% \defKV[BandeNum]{Traces=\ifempty{#1}{\setKV[BandeNum]{Codes=false}}{\setKV[BandeNum]{Codes}}}% %\defKV[BandeNum]{Cible=\setKV[BandeNum]{Cibles}}% %\defKV[BandeNum]{Logo=\setKV[BandeNum]{Logos}}% %\defKV[BandeNum]{CouleurSolution=\setKV[BandeNum]{Solution}}% %\defKV[BandeNum]{Traces=\setKV[BandeNum]{Codes}}% \NewDocumentCommand\BandeNumerique{o}{% \useKVdefault[BandeNum]% \setKV[BandeNum]{#1}% \ifPfCPfMScratchDys\relax\setKV[BandeNum]{Dys}\fi \xdef\PfCBandeNumElementsAv{\useKV[BandeNum]{Elements}}% \setsepchar{,}\ignoreemptyitems% \readlist*\ListeBandeNumElmts{\PfCBandeNumElementsAv}% \reademptyitems% \ifboolKV[BandeNum]{Cibles}{\xdef\PfCBandeNumCible{\useKV[BandeNum]{Cible}}}{\xdef\PfCBandeNumCible{-1}}% \xdef\PfCRetiensListeInvisible{\useKV[BandeNum]{Invisibles}}% \PfCBandeNum{\PfCRetiensListeInvisible}% }% \NewDocumentCommand\PfCBandeNum{m}{% \ifluatex \mplibforcehmode \begin{mplibcode} Depart=\ListeBandeNumElmts[1]; Pas=\ListeBandeNumElmts[2]; Longueur=\ListeBandeNumElmts[3]; LargeurCase=\useKV[BandeNum]{Largeur}; HauteurCase=\useKV[BandeNum]{Hauteur}; color CouleurCible,CouleurSolution; CouleurCible=\useKV[BandeNum]{CouleurCible}; boolean Cibles,Logos,Solution,Codes,Dys; Cibles=\useKV[BandeNum]{Cibles}; Logos=\useKV[BandeNum]{Logos}; Codes=\useKV[BandeNum]{Codes}; Solution=\useKV[BandeNum]{Solution}; Dys=\useKV[BandeNum]{Dys}; if Dys: LargeurCase:=1.25*LargeurCase; HauteurCase:=1.25*HauteurCase; fi; if Solution: CouleurSolution=\useKV[BandeNum]{CouleurSolution}; fi; if Cibles: Cible=\PfCBandeNumCible; fi; vardef AffichageBande(text t)= path case[]; case[0]=(unitsquare xscaled LargeurCase yscaled HauteurCase) shifted (0*(LargeurCase,0)); for k=1 upto Longueur: case[k]=(unitsquare xscaled LargeurCase yscaled HauteurCase) shifted (k*(LargeurCase,0)); label(TEX(decimal(Depart+(k-1)*Pas)),center case[k]); endfor; if Cibles: if Logos: fill case[Cible] withcolor white; if Solution: drawoptions(withcolor CouleurSolution); label(TEX(decimal(Depart+(Cible-1)*Pas)),center case[Cible]); drawoptions(); else: label(TEX(\useKV[BandeNum]{Logo}),center case[Cible]); fi; else: fill case[Cible] withcolor CouleurCible; if Solution: drawoptions(withcolor CouleurSolution); label(TEX(decimal(Depart+(Cible-1)*Pas)),center case[Cible]); drawoptions(); fi; fi; for p_=t: if p_>0: fill case[p_] withcolor white; if Solution: drawoptions(withcolor CouleurSolution); label(TEX(decimal(Depart+(p_-1)*Pas)),center case[p_]); drawoptions(); fi; fi; endfor; else: for p_=t: if p_>0: fill case[p_] withcolor white; if Solution: drawoptions(withcolor CouleurSolution); label(TEX(decimal(Depart+(p_-1)*Pas)),center case[p_]); drawoptions(); else: label.bot(TEX("$\ldots$"),center case[p_]); fi; fi; endfor; fi; for k=1 upto Longueur: trace case[k] withpen pencircle scaled 1.05; endfor; enddef; AffichageBande(#1); if Codes: \useKV[BandeNum]{Traces}; fi; \end{mplibcode} \fi }%