%%%
% NumberStick
%%%
\def\filedateNumberStick{2026/10/24}%
\def\fileversionNumberStick{0.1}%
\message{-- \filedateNumberStick\space v\fileversionNumberStick}%
%
\makeatletter
\setKVdefault[NumberStick]{Couleur=Cornsilk,Complete=false,Visibles={},Facteur=10,Vertical=false,Court=false}
\NewDocumentCommand\NumberStick{om}{%
  \useKVdefault[NumberStick]%
  \setKV[NumberStick]{#1}%
  \PfC@BuildNumberStick{#2}{\useKV[NumberStick]{Visibles}}%
}%

\NewDocumentCommand\PfC@BuildNumberStick{mm}{%
  \mplibforcehmode%
  \begin{mplibcode}
    boolean Complete,Vertical,Court;
    Complete=\useKV[NumberStick]{Complete};
    Vertical=\useKV[NumberStick]{Vertical};
    Court=\useKV[NumberStick]{Court};
    if Court:Vertical:=false fi;
    color Couleur;
    Couleur=\useKV[NumberStick]{Couleur};
    numeric Facteur;
    Facteur=\useKV[NumberStick]{Facteur};
    picture Base;
    Base=image(label(TEX(decimal(Facteur*#1)),(0,0)););
    if Court:if Facteur>10:Tabcol=0pt else: Tabcol=2pt fi; else: Tabcol=12pt fi;
    Largeur=Tabcol+ceiling(abs(llcorner Base-lrcorner Base));
    path BaseCadre;
    BaseCadre=if Vertical: unitsquare scaled Largeur else: unitsquare xscaled Largeur yscaled 30pt fi;
    pair A[],Depla;
    if Vertical:
      Depla=Largeur*(0,1);
    else:
      Depla=Largeur*(1,0);
    fi;
    for k=0 upto Facteur:
      A[k]=center BaseCadre shifted(k*Depla);
      fill (BaseCadre  shifted(k*Depla)) withcolor white;
    endfor;
    if Complete:
      for k=0 upto Facteur:
        fill (BaseCadre  shifted(k*Depla)) withcolor Couleur;
        label(TEX(decimal(k*#1)),A[k]);
      endfor;
    else:
      \ifemptyKV[NumberStick]{Visibles}{}{%
        for p_=#2:
          fill (BaseCadre  shifted(p_*Depla)) withcolor Couleur;
          label(TEX(decimal(p_*#1)),A[p_]);
        endfor;
      }%
    fi;
    for k=0 upto Facteur:
      trace (BaseCadre shifted(k*Depla));
      if Vertical:
        label.rt(TEX("\tiny$\times"&decimal(k)&"$"),iso(lrcorner BaseCadre,urcorner BaseCadre) shifted(k*Depla));
      else:
        label.top(TEX("\tiny$\times"&decimal(k)&"$"),iso(ulcorner BaseCadre,urcorner BaseCadre) shifted(k*Depla));
      fi;
    endfor;
    if Vertical:
      label.bot(TEX("\Large\bfseries"&decimal(#1)),iso(llcorner BaseCadre,lrcorner BaseCadre));
    else:
      if Court:
        label.bot(TEX("\Large\bfseries"&decimal(#1)),iso(llcorner BaseCadre,lrcorner BaseCadre) shifted(Facteur*Depla/2));
      else:
        label.lft(TEX("\Large\bfseries"&decimal(#1)),iso(llcorner BaseCadre,ulcorner BaseCadre));
      fi;
    fi;
  \end{mplibcode}
}%
\makeatother