%%%
% Multiplication par jalousie
%%%
\def\filedateMulJal{2025/12/21}%
\def\fileversionMulJal{0.1b}%
\message{-- \filedateMulJal\space v\fileversionMulJal}%
%
\setKVdefault[MulJal]{CouleurTab=gray!15,CouleurSolution={}}%
%
\makeatletter  
\NewDocumentCommand\MulJalousie{om}{%
  \useKVdefault[MulJal]%
  \setKV[MulJal]{#1}%
  \setsepchar{x}\ignoreemptyitems%
  \readlist*\PfC@MulJal{#2}%
  \reademptyitems%
  \ifemptyKV[MulJal]{CouleurSolution}{\colorlet{CouleurSolution}{black}}{\colorlet{CouleurSolution}{\useKV[MulJal]{CouleurSolution}}}%
 \BuildTabMulJal%
}%

\NewDocumentCommand\BuildTabMulJal{}{%
  \StrLen{\PfC@MulJal[1]}[\PremierFacteurlen]%
  \StrLen{\PfC@MulJal[2]}[\DeuxiemeFacteurlen]%
  \edef\PfC@MulJalPdt{\fpeval{\PfC@MulJal[1]*\PfC@MulJal[2]}}%
  \StrLen{\PfC@MulJalPdt}[\Produitlen]%
  \StrChar{\PfC@MulJal[1]}{1}[\PfCMulA]%
  \StrChar{\PfC@MulJal[2]}{1}[\PfCMulB]%
  \edef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
  \quotient{\PfCMulC}{10}\relax%
  \edef\Report{\the\intquotient/}%
  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PremierFacteurlen+\DeuxiemeFacteurlen}}}\do{%
    \xintFor* ##2 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
      \xintFor* ##3 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
        \xintifboolexpr{##2+##3==##1}{%
          \ifnum##2=1%
            \ifnum##3<\PremierFacteurlen%
              \StrChar{\PfC@MulJal[1]}{\fpeval{##3+1}}[\PfCMulA]%
              \StrChar{\PfC@MulJal[2]}{##2}[\PfCMulB]%
              \edef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
              \quotient{\PfCMulC}{10}\relax%
              \edef\Report{\Report \the\intquotient}%
            \fi%
          \fi%
          \StrChar{\PfC@MulJal[1]}{##3}[\PfCMulA]%
          \StrChar{\PfC@MulJal[2]}{##2}[\PfCMulB]%
          \edef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
          \modulo{\PfCMulC}{10}\relax%
          \ifnum##3=\PremierFacteurlen%
            \edef\Report{\Report \the\remainder}%
          \else%
            \edef\Report{\Report,\the\remainder}%
          \fi%
          \ifnum##2<\DeuxiemeFacteurlen%
            \StrChar{\PfC@MulJal[1]}{##3}[\PfCMulA]%
            \StrChar{\PfC@MulJal[2]}{\fpeval{##2+1}}[\PfCMulB]%
            \edef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
            \quotient{\PfCMulC}{10}\relax%
            \edef\Report{\Report,\the\intquotient}%
          \fi%
        }{}%
      }%
    }%
    \edef\Report{\Report/}%
  }%
  \setsepchar[*]{/*,}\ignoreemptyitems%
  \readlist*\Lesdiagonales{\Report}%
  %Calculs les sommes en diagonales.
  \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PremierFacteurlen+\DeuxiemeFacteurlen}}}\do{%
    \edef\PfCFoo{\Lesdiagonales[##1]}%
    \setsepchar{,}\ignoreemptyitems%
    \readlist*\LaDiagonale{\PfCFoo}%
    \edef\LaSomme{0}%
    \foreachitem\compteur\in\LaDiagonale{\edef\LaSomme{\fpeval{\LaSomme+\LaDiagonale[\compteurcnt]}}}%
  }%
  %
  \colorlet{PfCFondTab}{\useKV[MulJal]{CouleurTab}}%
  \begin{NiceTabular}{*{1}{p{25pt}}*{\PremierFacteurlen}{p{25pt}}c}%
    \rule{0pt}{25pt}\xintFor* ##1 in{\xintSeq{1}{1}}\do{%
      &}\xintFor* ##1 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
      \Block[fill=PfCFondTab,draw,v-center]{}{\StrChar{\PfC@MulJal[1]}{##1}}&%
    }\Block[fill=PfCFondTab,draw,v-center]{}{$\times$}\\%
    \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
      \rule{0pt}{25pt}%
      \xintFor* ##3 in{\xintSeq{1}{1}}\do{%
        &}\xintFor* ##2 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
        &}\Block[fill=PfCFondTab,draw,v-center]{}{\StrChar{\PfC@MulJal[2]}{##1}}\\%
    }%
    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PremierFacteurlen+2}}}\do{%
      \rule{0pt}{25pt}\xintifForLast{}{&}%
    }\\%
    \CodeAfter%
    \ifemptyKV[MulJal]{CouleurSolution}{}{%
      \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
        \xintFor* ##2 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
          \StrChar{\PfC@MulJal[1]}{##2}[\PfCMulA]%
          \StrChar{\PfC@MulJal[2]}{##1}[\PfCMulB]%
          \edef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
          \xintifboolexpr{\PfCMulC>9}{%
            \tikz{\node[anchor=north west] at (\fpeval{##1+1}-|\fpeval{##2+1}) {\StrChar{\PfCMulC}{1}};}%
            \tikz{\node[anchor=south east] at (\fpeval{##1+2}-|\fpeval{##2+2}) {\StrChar{\PfCMulC}{2}};}%
          }{%
            \tikz{\node[anchor=north west] at (\fpeval{##1+1}-|\fpeval{##2+1}) {0};}%
            \tikz{\node[anchor=south east] at (\fpeval{##1+2}-|\fpeval{##2+2}) {\PfCMulC};}%
          }%
        }%
      }%
    }%
    % Affichage des diagonales
    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\DeuxiemeFacteurlen+1}}}\do{%
      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\PremierFacteurlen+1}}}\do{%
        \tikz{\draw (\fpeval{##1+1}-|\fpeval{##2+1})--(\fpeval{##1+2}-|##2);}%
      }%
    }%
    % affichage du quadrillage interieur
    \xintFor* ##1 in {\xintSeq{1}{\PremierFacteurlen}}\do{%
      \tikz{\draw (2-|\fpeval{##1+1}) -- (\fpeval{\DeuxiemeFacteurlen+2}-|\fpeval{##1+1});}%
    }%
    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\DeuxiemeFacteurlen+1}}}\do{%
      \tikz{\draw (\fpeval{##1+1}-|2)--(\fpeval{##1+1}-|last);}%
    }%
    % Affichage du produit
    \ifemptyKV[MulJal]{CouleurSolution}{}{%
      \xintFor* ##1 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
        \StrChar{\PfC@MulJalPdt}{\fpeval{\Produitlen+1-##1}}[\PfC@MulJalChiffre]%
        \tikz{\node[CouleurSolution] at (\fpeval{\DeuxiemeFacteurlen+2+0.5}-|\fpeval{\PremierFacteurlen+2-##1}) {\PfC@MulJalChiffre};}%
      }%
      \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
        \StrChar{\PfC@MulJalPdt}{\fpeval{\Produitlen+1-\PremierFacteurlen-##1}}[\PfC@MulJalChiffre]%
        \tikz{\node[CouleurSolution] at (\fpeval{\DeuxiemeFacteurlen+3-##1}-|\fpeval{1.5}) {\PfC@MulJalChiffre};}%
      }%
      % Affichage des retenues
      \edef\Retenue{0}%
      \xintFor* ##1 in{\xintSeq{2}{\fpeval{\DeuxiemeFacteurlen+\PremierFacteurlen}}}\do{%
        \edef\PfCFoo{\Lesdiagonales[\fpeval{\DeuxiemeFacteurlen+\PremierFacteurlen+1-##1}]}%
        \setsepchar{,}\ignoreemptyitems%
        \readlist*\LaDiagonale{\PfCFoo}%
        \edef\LaSomme{0}%
        \foreachitem\compteur\in\LaDiagonale{\edef\LaSomme{\fpeval{\LaSomme+\LaDiagonale[\compteurcnt]}}}%
        \edef\LaSomme{\fpeval{\LaSomme+\Retenue}}%
        \ifnum\LaSomme>9%
          \quotient{\LaSomme}{10}%
          \edef\Retenue{\the\intquotient}%
          \ifnum##1<\PremierFacteurlen%
            \tikz{\node[anchor=north,inner sep=1pt] at (\fpeval{\DeuxiemeFacteurlen+2}-|\fpeval{\PremierFacteurlen+1.5-##1}) {\tiny$+\the\intquotient$};}%
          \else%
            \tikz{\node[anchor=east,inner sep=1pt] at (\fpeval{\DeuxiemeFacteurlen+1.5-(##1-\PremierFacteurlen)}-|2) {\tiny$\the\intquotient+$};}%
          \fi%
        \fi%
      }%
    }%
  \end{NiceTabular}%
}%
\makeatother