diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex b/macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex new file mode 100644 index 0000000000..99024a4358 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex @@ -0,0 +1,139 @@ +%%% +% Visualisation Multiplication Décimaux +%%% +\def\filedateVisuMulDeci{2024/08/04}% +\def\fileversionVisuMulDeci{0.1}% +\message{-- \filedateVisuMulDeci\space v\fileversionVisuMulDeci}% +% +\setKVdefault[VisMulDec]{Couleur=Orange,CouleurUnite=DarkGreen,Dixiemes=false,Unite=2}% + +\newtoks\toksvismuldec% +\def\UpdatetoksVisMulDec#1\nil{\addtotok\toksvismuldec{"#1",#1,}}% + +\NewDocumentCommand\VisualisationMulDecimaux{om}{% + \useKVdefault[VisMulDec]% + \setKV[VisMulDec]{#1}% + \setsepchar{x}\ignoreemptyitems% + \readlist*\PfCVisMulDec{#2}% + \toksvismuldec{}% + \foreachitem\compteur\in\PfCVisMulDec{\expandafter\UpdatetoksVisMulDec\compteur\nil}% + \BuildVisMulDec{\the\toksvismuldec}% + \reademptyitems% +}% + +\NewDocumentCommand\BuildVisMulDec{m}{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + string Nombres[]; + numeric Decimaux[]; + color Coul[]; + boolean Dixiemes; + + Unite=\useKV[VisMulDec]{Unite}*cm; + Coul1=\useKV[VisMulDec]{Couleur}; + Coul2=\useKV[VisMulDec]{CouleurUnite}; + Coul3=0.7[Coul2,white]; + + Dixiemes=\useKV[VisMulDec]{Dixiemes}; + + vardef RecupererDonnees(text t)= + nbs:=0; + nbd:=0; + for p_=t: + if string p_: + nbs:=nbs+1; + Nombres[nbs]=p_; + else: + nbd:=nbd+1; + Decimaux[nbd]=p_; + fi; + endfor; + enddef; + + RecupererDonnees(#1); + + pair A,B,C,D; + A=(0,0); + B-A=Unite*(Decimaux[1],0); + D-A=Unite*(0,Decimaux[2]); + C-D=B-A; + fill polygone(A,Unite*(1,0),Unite*(1,1),Unite*(0,1)) withcolor Coul3; + drawoptions(withcolor Coul1); + pasx=0.1; + pasy=0.1; + if (Dixiemes and ((Decimaux[1]*10) mod 10=0)): + pasy:=1; + fi; + if (Dixiemes and ((Decimaux[2]*10) mod 10=0)): + pasx:=1; + fi; + for k=0 step pasx until Decimaux[1]: + trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0)); + endfor; + for k=0 step pasy until Decimaux[2]: + trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1)); + endfor; + drawoptions(withpen pencircle scaled 1.2 withcolor Coul2); + for k=0 upto Decimaux[1]: + trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0)); + endfor; + for k=0 upto Decimaux[2]: + trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1)); + endfor; + drawoptions(); + trace cotation(A,B,-5mm,-3mm,TEX("\num{"&Nombres[1]&"}")); + trace cotation(A,D,5mm,5mm,TEX("\num{"&Nombres[2]&"}") rotated -90); + \end{mplibcode} + \else + \begin{mpost}[mpsettings={string Nombres[];numeric Decimaux[];color Coul[];boolean Dixiemes;Unite=\useKV[VisMulDec]{Unite}*cm;Coul1=\useKV[VisMulDec]{Couleur};Coul2=\useKV[VisMulDec]{CouleurUnite};Coul3=0.7[Coul2,white];Dixiemes=\useKV[VisMulDec]{Dixiemes};}] + vardef RecupererDonnees(text t)= + nbs:=0; + nbd:=0; + for p_=t: + if string p_: + nbs:=nbs+1; + Nombres[nbs]=p_; + else: + nbd:=nbd+1; + Decimaux[nbd]=p_; + fi; + endfor; + enddef; + + RecupererDonnees(#1); + + pair A,B,C,D; + A=(0,0); + B-A=Unite*(Decimaux[1],0); + D-A=Unite*(0,Decimaux[2]); + C-D=B-A; + fill polygone(A,Unite*(1,0),Unite*(1,1),Unite*(0,1)) withcolor Coul3; + drawoptions(withcolor Coul1); + pasx=0.1; + pasy=0.1; + if (Dixiemes and ((Decimaux[1]*10) mod 10=0)): + pasy:=1; + fi; + if (Dixiemes and ((Decimaux[2]*10) mod 10=0)): + pasx:=1; + fi; + for k=0 step pasx until Decimaux[1]: + trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0)); + endfor; + for k=0 step pasy until Decimaux[2]: + trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1)); + endfor; + drawoptions(withpen pencircle scaled 1.2 withcolor Coul2); + for k=0 upto Decimaux[1]: + trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0)); + endfor; + for k=0 upto Decimaux[2]: + trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1)); + endfor; + drawoptions(); + trace cotation(A,B,-5mm,-3mm,LATEX("\num{"&Nombres[1]&"}")); + trace cotation(A,D,5mm,5mm,LATEX("\num{"&Nombres[2]&"}") rotated -90); + \end{mpost} + \fi +}%
\ No newline at end of file |