summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCMosaique.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCMosaique.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCMosaique.tex138
1 files changed, 138 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCMosaique.tex b/macros/latex/contrib/profcollege/latex/PfCMosaique.tex
new file mode 100644
index 0000000000..91936d597b
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCMosaique.tex
@@ -0,0 +1,138 @@
+%%%
+% Mosaique
+%%%
+\setKVdefault[ClesMosaique]{Largeur=2,Hauteur=2,Solution=false,Type=1,Label,Echelle=1cm}
+
+\newcommand\DessineMosaique[2][]{%
+ \useKVdefault[ClesMosaique]%
+ \setKV[ClesMosaique]{#1}%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ u:=\useKV[ClesMosaique]{Echelle};
+ Type:=\useKV[ClesMosaique]{Type};
+ input PfCMosaique;
+ trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi;
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}[mpsettings={u:=\useKV[ClesMosaique]{Echelle};Type:=\useKV[ClesMosaique]{Type};}]%
+ input PfCMosaique;
+ trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi;
+ \end{mpost}%
+ \fi%
+}%
+
+\newcommand\DessineMosaiqueComplet[1]{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ input PfCMosaique;
+ Largeur=\useKV[ClesMosaique]{Largeur};
+ Hauteur=\useKV[ClesMosaique]{Hauteur};
+ Type=\useKV[ClesMosaique]{Type};
+ boolean Solution,Label;
+ Solution=\useKV[ClesMosaique]{Solution};
+ Label=\useKV[ClesMosaique]{Label};
+ pair A,B,C,D;
+ A=u*(0,1);
+ B-A=u*(Largeur,0);
+ C-B=u*(0,-Hauteur);
+ D-C=A-B;
+ picture mosaique;
+ path case;
+ case=unitsquare scaled 1cm;
+ if Type=1:
+ mosaique=image(
+ trace case withcolor 0.5white;
+ trace (point(0) of case)--(point(2) of case) withcolor 0.75white;
+ trace (point(1) of case)--(point(3) of case) withcolor 0.75white;
+ trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+ trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+ );
+ else:
+ mosaique=image(
+ trace case withcolor 0.5white;
+ trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+ trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+ trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white;
+ );
+ fi;
+ if Solution:
+ nbmos:=0;
+ for p_=#1:
+ trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+ nbmos:=nbmos+1;
+ endfor;
+ else:
+ nbmos:=0;
+ for p_=#1:
+ trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+ if Label:
+ label(TEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)))));
+ fi;
+ nbmos:=nbmos+1;
+ endfor;
+ fi;
+ trace polygone(A,B,C,D);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={Largeur=\useKV[ClesMosaique]{Largeur};Hauteur=\useKV[ClesMosaique]{Hauteur};Type=\useKV[ClesMosaique]{Type};boolean Solution,Label;Solution=\useKV[ClesMosaique]{Solution};}]
+ Label=\useKV[ClesMosaique]{Label};
+ input PfCMosaique;
+ pair A,B,C,D;
+ A=u*(0,1);
+ B-A=u*(Largeur,0);
+ C-B=u*(0,-Hauteur);
+ D-C=A-B;
+ picture mosaique;
+ path case;
+ case=unitsquare scaled 1cm;
+ if Type=1:
+ mosaique=image(
+ trace case withcolor 0.5white;
+ trace (point(0) of case)--(point(2) of case) withcolor 0.75white;
+ trace (point(1) of case)--(point(3) of case) withcolor 0.75white;
+ trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+ trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+ );
+ else:
+ mosaique=image(
+ trace case withcolor 0.5white;
+ trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white;
+ trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white;
+ trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white;
+ );
+ fi;
+ if Solution:
+ nbmos:=0;
+ for p_=#1:
+ trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+ nbmos:=nbmos+1;
+ endfor;
+ else:
+ nbmos:=0;
+ for p_=#1:
+ trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)));
+ if Label:
+ label(LATEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur)))));
+ fi;
+ nbmos:=nbmos+1;
+ endfor;
+ fi;
+ trace polygone(A,B,C,D);
+ \end{mpost}
+ \fi
+}%
+
+\newtoks\toklistecaseM%
+\def\UpdatetoksMosaique#1/#2\nil{\addtotok\toklistecaseM{(#1,#2),}}%
+
+\newcommand\Mosaique[2][]{%
+ \useKVdefault[ClesMosaique]%
+ \setKV[ClesMosaique]{#1}%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeMosaique{#2}%
+ \toklistecaseM{}%
+ \foreachitem\compteur\in\ListeMosaique{\expandafter\UpdatetoksMosaique\compteur\nil}%
+ \DessineMosaiqueComplet{\the\toklistecaseM}%
+}% \ No newline at end of file