summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-01-18 03:03:11 +0000
committerNorbert Preining <norbert@preining.info>2021-01-18 03:03:11 +0000
commit62b141a25b6f63cb4cc626d1a005ecf67c19e5cd (patch)
treeb7d0b0cdf0cae01fab47cd7deb6f19d4dc04ff1e /macros/latex/contrib/profcollege
parent8591b56496b93eed20f638ee1ce46b11c3f7be58 (diff)
CTAN sync 202101180303
Diffstat (limited to 'macros/latex/contrib/profcollege')
-rw-r--r--macros/latex/contrib/profcollege/README13
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin0 -> 1645335 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/EquationComposition1.tex277
-rw-r--r--macros/latex/contrib/profcollege/latex/EquationLaurent1.tex226
-rw-r--r--macros/latex/contrib/profcollege/latex/EquationPose1.tex246
-rw-r--r--macros/latex/contrib/profcollege/latex/EquationSoustraction1.tex332
-rw-r--r--macros/latex/contrib/profcollege/latex/EquationSymbole1.tex225
-rw-r--r--macros/latex/contrib/profcollege/latex/EquationTerme1.tex276
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty10542
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfC-Calculatrice.mp198
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfC-Constantes.mp23
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfC-Geometrie.mp1195
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfC-LaTeX.mp20
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfC-Svgnames.mp156
14 files changed, 13729 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/README b/macros/latex/contrib/profcollege/README
new file mode 100644
index 0000000000..1c43726c9d
--- /dev/null
+++ b/macros/latex/contrib/profcollege/README
@@ -0,0 +1,13 @@
+Vous êtes un enseignant de mathématiques en collège ?
+profcollege est un package qui vous aidera à utiliser LaTeX au quotidien.
+
+----------------
+
+You are a french mathematics teacher ?
+profcollege is a useful package to daily use of LaTeX.
+
+---------------
+
+Author : Christophe Poulain
+email : chrpoulain@gmail.com
+Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
new file mode 100644
index 0000000000..a95f7c6250
--- /dev/null
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/latex/EquationComposition1.tex b/macros/latex/contrib/profcollege/latex/EquationComposition1.tex
new file mode 100644
index 0000000000..b513a6b116
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/EquationComposition1.tex
@@ -0,0 +1,277 @@
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newcommand{\EquaDeuxComposition}[5][]{%type ax+b=d ou b=cx+d$
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
+ \EquaDeuxComposition[#1]{#4}{#5}{#2}{#3}
+ \else%cas ax+b=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }{%ELSE
+ \xintifboolexpr{#3=0}{%ax+b=d
+ \EquaBase[#1]{#2}{}{}{#5}%
+ }{%ax+b=d$ Ici
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{#5}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#5-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{E-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{%ICI ?
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaTroisComposition}[5][]{%ax+b=cx ou ax=cx+d
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#3\bla%on inverse en faisant attention à la boucle #3<->#5
+ \ifx\bla#5\bla%
+ %% paramètre oublié
+ \else
+ \EquaTroisComposition[#1]{#4}{#5}{#2}{}%
+ \fi
+ \else
+ \xintifboolexpr{#2=0}{%b=cx
+ \EquaBase[#1]{#4}{}{}{#3}
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0
+ \EquaDeuxComposition[#1]{#2}{#3}{}{0}
+ }{%ax+b=cx
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=0}{%ax=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solution.}%
+ {%ax+b=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\mathcolor{Ccompo}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \mathcolor{Ccompo}{\num{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{+\num{#4}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{0}\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{0-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\tikzmark{F-\theNbequa}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#4-#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#2>0}{+\num{#2}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ }%
+ }%
+ }%
+ }%
+ \fi
+ }%
+
+
+\newcommand{\ResolEquationComposition}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#4=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }%
+ {%0x+b=cx+d$
+ \EquaDeuxComposition[#1]{#4}{#5}{#2}{#3}%
+ }%
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \EquaDeuxComposition[#1]{#2}{#3}{}{#5}%
+ }
+ {%ax+b=cx+d$
+ \xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#5=0}{%ax=cx
+ \EquaTroisComposition[#1]{#2}{0}{#4}{}%
+ }%
+ {%ax=cx+d
+ \EquaTroisComposition[#1]{#4}{#5}{#2}{}%
+ }%
+ }%
+ {\xintifboolexpr{#5=0}{%ax+b=cx
+ \EquaTroisComposition[#1]{#2}{#3}{#4}{}%
+ }%
+ {%ax+b=cx+d -- ici
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ }%
+ }{
+ %% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\mathcolor{Ccompo}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \mathcolor{Ccompo}{\num{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{+\num{#4}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{#5}}\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#5-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}%
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#4-#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#2>0}{+\num{#2}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
+ \mathcolor{Ccompo}{\num{\fpeval{#3-#5}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+
diff --git a/macros/latex/contrib/profcollege/latex/EquationLaurent1.tex b/macros/latex/contrib/profcollege/latex/EquationLaurent1.tex
new file mode 100644
index 0000000000..347afc0e8d
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/EquationLaurent1.tex
@@ -0,0 +1,226 @@
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newcommand{\EquaBaseLaurent}[5][]{%type ax=d ou b=cx
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%on teste si le paramètre #2 est vide:
+ % si oui, on est dans le cas b=cx. Eh bien on échange :)
+ % Mais attention si les deux paramètres a et c sont vides...
+ \EquaBase[#1]{#4}{}{}{#3}
+ \else
+ % si non, on est dans le cas ax=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#5=0}{%
+ L'équation $0\useKV[ClesEquation]{ELettre}=0$ a une infinité de solution.}{L'équation $0\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
+ }{%\else
+ \xintifboolexpr{#5=0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{#2}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{#2}}}}&=\xintifboolexpr{#2=1}{\num{#5}}{\color{Cdecomp}\frac{\color{black}\num{#5}}{\num{#2}}}
+ \xintifboolexpr{#2=1}{}{\\\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{#5}{#2}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{#5}{#2}}{}%\\
+ }{}
+ }{}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\useKV[ClesEquation]{Lettre}=\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaDeuxLaurent}[5][]{%type ax+b=d ou b=cx+d$
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
+ \EquaDeuxLaurent[#1]{#4}{#5}{#2}{#3}
+ \else%cas ax+b=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }{%ELSE
+ \xintifboolexpr{#3=0}{%ax+b=d
+ \EquaBaseLaurent[#1]{#2}{}{}{#5}%
+ }{%ax+b=d$ Ici
+ \begin{align*}
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\num{#5}\xintifboolexpr{#3>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
+ \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}%\\
+ \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ }{}
+ }
+ }
+}
+
+\newcommand{\EquaTroisLaurent}[5][]{%ax+b=cx ou ax=cx+d
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#3\bla%on inverse en faisant attention à la boucle #3<->#5
+ \ifx\bla#5\bla%
+ %% paramètre oublié
+ \else
+ \EquaTroisLaurent[#1]{#4}{#5}{#2}{}%
+ \fi
+ \else
+ \xintifboolexpr{#2=0}{%b=cx
+ \EquaBaseLaurent[#1]{#4}{}{}{#3}
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0
+ \EquaDeuxLaurent[#1]{#2}{#3}{}{0}
+ }{%ax+b=cx
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=0}{%ax=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solution.}%
+ {%ax+b=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \begin{align*}
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{0-#3}}%\\
+ \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ }{%ax+b=cx avec a<c % Autre cas délicat
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{0-#3}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=0\xintifboolexpr{#3>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
+ \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ }%
+ }%
+ }%
+ }%
+ \fi
+}%
+
+\newcommand{\ResolEquationLaurent}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#4=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }%
+ {%0x+b=cx+d
+ \EquaDeuxLaurent[#1]{#4}{#5}{}{#3}%
+ }%
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \EquaDeuxLaurent[#1]{#2}{#3}{}{#5}%
+ }
+ {%ax+b=cx+d
+ \xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#5=0}{%ax=cx
+ \EquaTroisLaurent[#1]{#2}{0}{#4}{}%
+ }%
+ {%ax=cx+d
+ \EquaTroisLaurent[#1]{#4}{#5}{#2}{}%
+ }%
+ }%
+ {\xintifboolexpr{#5=0}{%ax+b=cx
+ \EquaTroisLaurent[#1]{#2}{#3}{#4}{}%
+ }%
+ {%ax+b=cx+d -- ici
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+ \begin{align*}
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{#5-#3}}%\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{\Coeffb>0}{+\num{\Coeffb}}{-\num{\fpeval{0-\Coeffb}}}\\
+ \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}} {}}\stackText}%
+ &=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#3}} {}}\stackText}
+ \\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{#5-#3}}%\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{\tiny\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{\tiny\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{\Coeffb>0}{+\num{\Coeffb}}{-\num{\fpeval{0-\Coeffb}}}\\
+ \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/EquationPose1.tex b/macros/latex/contrib/profcollege/latex/EquationPose1.tex
new file mode 100644
index 0000000000..e34d382a58
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/EquationPose1.tex
@@ -0,0 +1,246 @@
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newcommand{\EquaBaseL}[5][]{%type ax=d ou b=cx
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%on teste si le paramètre #2 est vide:
+ % si oui, on est dans le cas b=cx. Eh bien on échange :)
+ % Mais attention si les deux paramètres a et c sont vides...
+ \EquaBaseL[#1]{#4}{}{}{#3}
+ \else
+ % si non, on est dans le cas ax=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#5=0}{%
+ L'équation $0\useKV[ClesEquation]{Lettre}=0$ a une infinité de solution.}{L'équation $0\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
+ }{%\else
+ \xintifboolexpr{#5=0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\num{#2}\useKV[ClesEquation]{Lettre}}&=\num{#5}\\
+ \xintifboolexpr{#2=1}{}{%
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\phantom{\useKV[ClesEquation]{Lettre}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\\}
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{#5}{#2}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{#5}{#2}}{}%\\
+ }{}
+ }{}
+ %\ifboolKV[ClesEquation]{Fleches}{%
+ %\stepcounter{Nbequa}}%
+ %{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}
+ %}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\useKV[ClesEquation]{Lettre}=\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaDeuxL}[5][]{%type ax+b=d ou b=cx+d$
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
+ \EquaDeuxL[#1]{#4}{#5}{#2}{#3}
+ \else%cas ax+b=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }{%ELSE
+ \xintifboolexpr{#3=0}{%ax+b=d
+ \EquaBaseL[#1]{#2}{}{}{#5}%
+ }{%ax+b=d$ Ici
+ \begin{align*}
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
+ \phantom{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&\phantom{\mathrel{=}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\\
+ \useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{%
+ \\\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\SSimplifie{\Coeffb}{\Coeffa}%
+ }{}%\\
+ }{}
+ }{}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaTroisL}[5][]{%ax+b=cx ou ax=cx+d
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#3\bla%on inverse en faisant attention à la boucle #3<->#5
+ \ifx\bla#5\bla%
+ %% paramètre oublié
+ \else
+ \EquaTroisL[#1]{#4}{#5}{#2}{}%
+ \fi
+ \else
+ \xintifboolexpr{#2=0}{%b=cx
+ \EquaBaseL[#1]{#4}{}{}{#3}
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0
+ \EquaDeuxL[#1]{#2}{#3}{}{0}
+ }{%ax+b=cx
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=0}{%ax=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solution.}%
+ {%ax+b=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \begin{align*}
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{{}-{}\num{#4}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
+ \phantom{\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}&\phantom{\mathrel{=}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}\\
+ \xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
+ \useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\%
+ \useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\SSimplifie{\Coeffb}{\Coeffa}%\\
+ }{}
+ }{}
+ }{}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
+ \frac{\num{\Coeffb}}{\num{\Coeffa}}&=\phantom{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\%
+ \SSimplifie{\Coeffb}{\Coeffa}&=\phantom{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
+ }{}
+ }{}
+ }{}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ }%
+ }%
+ }%
+ }%
+ \fi
+ }%\\
+ % \\
+
+\newcommand{\ResolEquationL}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#4=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }%
+ {%0x+b=cx+d$
+ \EquaDeuxL[#1]{#4}{#5}{}{#3}%
+ }%
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \EquaDeuxL[#1]{#2}{#3}{}{#5}%
+ }
+ {%ax+b=cx+d$
+ \xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#5=0}{%ax=cx
+ \EquaTroisL[#1]{#2}{0}{#4}{}%
+ }%
+ {%ax=cx+d
+ \EquaTroisL[#1]{#4}{#5}{#2}{}%
+ }%
+ }%
+ {\xintifboolexpr{#5=0}{%ax+b=cx
+ \EquaTroisL[#1]{#2}{#3}{#4}{}%
+ }%
+ {%ax+b=cx+d -- ici
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ }%
+ }{
+ %% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+ \begin{align*}
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{{}-{}\num{#4}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{{}-{}\num{#4}\useKV[ClesEquation]{Lettre}}{\phantom{{}={}}+{}\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{\phantom{{}+{}}\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}&\phantom{{}={}\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}\\
+ \xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{\Coeffb>0}{\phantom{{}+{}}\num{\Coeffb}}{{}-{}\num{\fpeval{0-\Coeffb}}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
+ \phantom{\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\%
+ \useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\SSimplifie{\Coeffb}{\Coeffa}%\\
+ }{}
+ }{}
+ }{}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\xintifboolexpr{#4<0}{\phantom{={}}}{}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{{}-{}\num{#5}}{{}+{}\num{\fpeval{0-#5}}}}&\phantom{{}={}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}\\
+ \xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}&\xintifboolexpr{\Coeffa<0}{\phantom{{}={}}}{\phantom{=}}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
+ \frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}%\\
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
diff --git a/macros/latex/contrib/profcollege/latex/EquationSoustraction1.tex b/macros/latex/contrib/profcollege/latex/EquationSoustraction1.tex
new file mode 100644
index 0000000000..034aa7e2ed
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/EquationSoustraction1.tex
@@ -0,0 +1,332 @@
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newcommand{\EquaBase}[5][]{%type ax=d ou b=cx
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%on teste si le paramètre #2 est vide:
+ % si oui, on est dans le cas b=cx. Eh bien on échange :)
+ % Mais attention si les deux paramètres a et c sont vides...
+ \EquaBase[#1]{#4}{}{}{#3}
+ \else
+ % si non, on est dans le cas ax=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#5=0}{%
+ L'équation $0\useKV[ClesEquation]{ELettre}=0$ a une infinité de solution.}{L'équation $0\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
+ }{%\else
+ \xintifboolexpr{#5=0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\num{#2}\useKV[ClesEquation]{Lettre}}&=\num{#5}\tikzmark{C-\theNbequa}\\
+ \tikzmark{B-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}\tikzmark{D-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}$}%
+ \rightcomment{C-\theNbequa}{D-\theNbequa}{D-\theNbequa}{$\div\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}$}%
+ }{%
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \Leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}$}%
+ \Rightcomment{C-\theNbequa}{D-\theNbequa}{D-\theNbequa}{$\div\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}$}%
+ }{}%
+ }%%
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{#5}{#2}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{#5}{#2}}{}%\\
+ }{}
+ }{}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \stepcounter{Nbequa}}%
+ {\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}
+ }
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\useKV[ClesEquation]{Lettre}=\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaDeuxSoustraction}[5][]{%type ax+b=d ou b=cx+d$
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
+ \EquaDeuxSoustraction[#1]{#4}{#5}{#2}{#3}
+ \else%cas ax+b=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }{%ELSE
+ \xintifboolexpr{#3=0}{%ax+b=d
+ \EquaBase[#1]{#2}{}{}{#5}%
+ }{%ax+b=d$ Ici
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{E-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=\num{#5}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ }{}%
+ \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{E-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{%ICI ?
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaTroisSoustraction}[5][]{%ax+b=cx ou ax=cx+d
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#3\bla%on inverse en faisant attention à la boucle #3<->#5
+ \ifx\bla#5\bla%
+ %% paramètre oublié
+ \else
+ \EquaTroisSoustraction[#1]{#4}{#5}{#2}{}%
+ \fi
+ \else
+ \xintifboolexpr{#2=0}{%b=cx
+ \EquaBase[#1]{#4}{}{}{#3}
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0
+ \EquaDeuxSoustraction[#1]{#2}{#3}{}{0}
+ }{%ax+b=cx
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=0}{%ax=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solution.}%
+ {%ax+b=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
+ }{}
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\tikzmark{F-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=0\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\tikzmark{F-\theNbequa}\\
+ }{}%
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ }{}
+ \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ }%
+ }%
+ }%
+ }%
+ \fi
+ }%
+
+
+\newcommand{\ResolEquationSoustraction}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#4=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }%
+ {%0x+b=cx+d$
+ \EquaDeuxSoustraction[#1]{#4}{#5}{}{#3}%
+ }%
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \EquaDeuxSoustraction[#1]{#2}{#3}{}{#5}%
+ }
+ {%ax+b=cx+d$
+ \xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#5=0}{%ax=cx
+ \EquaTroisSoustraction[#1]{#2}{0}{#4}{}%
+ }%
+ {%ax=cx+d
+ \EquaTroisSoustraction[#1]{#4}{#5}{#2}{}%
+ }%
+ }%
+ {\xintifboolexpr{#5=0}{%ax+b=cx
+ \EquaTroisSoustraction[#1]{#2}{#3}{#4}{}%
+ }%
+ {%ax+b=cx+d -- ici
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ }%
+ }{
+ %% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ }{}
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{F-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=\num{#5}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ }{}%
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ }{}
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
+ \ifboolKV[ClesEquation]{Decomposition}{%
+ \num{#3}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}\\
+ }{}%
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+
diff --git a/macros/latex/contrib/profcollege/latex/EquationSymbole1.tex b/macros/latex/contrib/profcollege/latex/EquationSymbole1.tex
new file mode 100644
index 0000000000..4faec4767a
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/EquationSymbole1.tex
@@ -0,0 +1,225 @@
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newcommand{\EquaBaseSymbole}[5][]{%type ax=d ou b=cx
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
+ \ifx\bla#2\bla%on teste si le paramètre #2 est vide:
+ % si oui, on est dans le cas b=cx. Eh bien on échange :)
+ % Mais attention si les deux paramètres a et c sont vides...
+ \ifx\bla#4\bla
+ %% il manque un paramètre
+ \else
+ \EquaBaseSymbole[#1]{#4}{}{}{#3}
+ \fi
+ \else
+ % si non, on est dans le cas ax=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#5=0}{%
+ L'équation $0\times\useKV[ClesEquation]{Lettre}=0$ a une infinité de solution.}{L'équation $0\times\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
+ }{%\else
+ \xintifboolexpr{#5=0}{L'équation $\num{#2}\times\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \begin{align*}%
+ \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}&=\num{#5}\\
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{#5}{#2}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{#5}{#2}}{}%\\
+ }{}
+ }{}
+ \end{align*}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaDeuxSymbole}[5][]{%type ax+b=d ou b=cx+d$
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
+ \ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
+ \EquaDeuxSymbole[#1]{#4}{#5}{#2}{#3}
+ \else%cas ax+b=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }{%ELSE
+ \xintifboolexpr{#3=0}{%ax+b=d
+ \EquaBaseSymbole[#1]{#2}{}{}{#5}%
+ }{%ax+b=d$ Ici
+ \begin{align*}
+ \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
+ \ifboolKV[ClesEquation]{Bloc}{\Fdash{$\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}$}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\}{}%
+ \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \\
+ \useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaTroisSymbole}[5][]{%ax+b=cx ou ax=cx+d
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
+ \ifx\bla#3\bla%on inverse en faisant attention à la boucle #3<->#5
+ \ifx\bla#5\bla%
+ %% paramètre oublié
+ \else
+ \EquaTroisSymbole[#1]{#4}{#5}{#2}{}%
+ \fi
+ \else
+ \xintifboolexpr{#2=0}{%b=cx
+ \EquaBaseSymbole[#1]{#4}{}{}{#3}
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0
+ \EquaDeuxSymbole[#1]{#2}{#3}{}{0}
+ }{%ax+b=cx
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=0}{%ax=ax
+ L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}=\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}$ a une infinité de solution.}%
+ {%ax+b=ax
+ L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \begin{align*}
+ \multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\\
+ \mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#4-1}}{+\useKV[ClesEquation]{Lettre}}}\multido{\i=1+1}{\fpeval{#2-#4}}{+\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Csymbole}{\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
+ \ifboolKV[ClesEquation]{Bloc}{\Fdash{\mathcolor{Csymbole!30}{$\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}$}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\}{}
+ \xdef\Coeffb{\fpeval{0-#3}}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \\\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\\
+ \mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#2-1}}{+\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#2-1}}{+\useKV[ClesEquation]{Lettre}}}\multido{\i=1+1}{\fpeval{#4-#2}}{+\useKV[ClesEquation]{Lettre}}\\
+ \xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}% \\
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \\\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ }%
+ }%
+ }%
+ }%
+ \fi
+ }%
+
+
+\newcommand{\ResolEquationSymbole}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#4=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }%
+ {%0x+b=cx+d$
+ \EquaDeuxSymbole[#1]{#4}{#5}{#2}{#3}%
+ }%
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \EquaDeuxSymbole[#1]{#2}{#3}{}{#5}%
+ }
+ {%ax+b=cx+d$
+ \xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#5=0}{%ax=cx
+ \EquaTroisSymbole[#1]{#2}{0}{#4}{}%
+ }%
+ {%ax=cx+d
+ \EquaTroisSymbole[#1]{#4}{#5}{#2}{}%
+ }%
+ }%
+ {\xintifboolexpr{#5=0}{%ax+b=cx
+ \EquaTroisSymbole[#1]{#2}{#3}{#4}{}%
+ }%
+ {%ax+b=cx+d -- ici
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ }%
+ }{
+ %% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+ \begin{align*}
+ \multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#4-1}}{+\useKV[ClesEquation]{Lettre}}}\multido{\i=1+1}{\fpeval{#2-#4}}{+\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Csymbole}{\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
+ \ifboolKV[ClesEquation]{Bloc}{%
+ \Fdash{$\mathcolor{Csymbole!30}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}}$}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
+ }{}%
+ \xdef\Coeffb{\fpeval{#5-#3}}\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \\\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \begin{align*}%
+ \multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Csymbole}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#2-1}}{+\useKV[ClesEquation]{Lettre}}}\multido{\i=1+1}{\fpeval{#4-#2}}{+\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \xdef\Coeffa{\fpeval{#4-#2}}\num{#3}&=\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \ifboolKV[ClesEquation]{Bloc}{%
+ \num{#3}&=\Fdash{$\mathcolor{Csymbole!30}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}}$}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ }{}%
+ \xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}%\\
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \\\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}%\\
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \end{align*}
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+
diff --git a/macros/latex/contrib/profcollege/latex/EquationTerme1.tex b/macros/latex/contrib/profcollege/latex/EquationTerme1.tex
new file mode 100644
index 0000000000..f3930d0408
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/EquationTerme1.tex
@@ -0,0 +1,276 @@
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+\newcommand{\EquaDeuxTerme}[5][]{%type ax+b=d ou b=cx+d$
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
+ \EquaDeuxTerme[#1]{#4}{#5}{#2}{#3}
+ \else%cas ax+b=d
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }{%ELSE
+ \xintifboolexpr{#3=0}{%ax+b=d
+ \EquaBase[#1]{#2}{}{}{#5}%
+ }{%ax+b=d$ Ici
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}&=\num{#5}\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{E-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{%
+ }{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{%ICI ?
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ }{}
+ }
+ }
+ \fi
+}
+
+\newcommand{\EquaTroisTerme}[5][]{%ax+b=cx ou ax=cx+d
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \ifx\bla#3\bla%on inverse en faisant attention à la boucle #3<->#5
+ \ifx\bla#5\bla%
+ %% paramètre oublié
+ \else
+ \EquaTroisTerme[#1]{#4}{#5}{#2}{}%
+ \fi
+ \else
+ \xintifboolexpr{#2=0}{%b=cx
+ \EquaBase[#1]{#4}{}{}{#3}
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0
+ \EquaDeuxTerme[#1]{#2}{#3}{}{0}
+ }{%ax+b=cx
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=0}{%ax=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solution.}%
+ {%ax+b=ax
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=0\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ }%
+ }%
+ }%
+ }%
+ \fi
+ }%
+
+\newcommand{\ResolEquationTerme}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \xintifboolexpr{#2=0}{%
+ \xintifboolexpr{#4=0}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\num{#3}=\num{#5}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
+ }%
+ }%
+ {%0x+b=cx+d$
+ \EquaDeuxTerme[#1]{#4}{#5}{#2}{#3}%
+ }%
+ }{%
+ \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \EquaDeuxTerme[#1]{#2}{#3}{}{#5}%
+ }
+ {%ax+b=cx+d$
+ \xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#5=0}{%ax=cx
+ \EquaTroisTerme[#1]{#2}{0}{#4}{}%
+ }%
+ {%ax=cx+d
+ \EquaTroisTerme[#1]{#4}{#5}{#2}{}%
+ }%
+ }%
+ {\xintifboolexpr{#5=0}{%ax+b=cx
+ \EquaTroisTerme[#1]{#2}{#3}{#4}{}%
+ }%
+ {%ax+b=cx+d -- ici
+ \xintifboolexpr{#2=#4}{%
+ \xintifboolexpr{#3=#5}{%b=d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solution.}%
+ {%b<>d
+ L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ }%
+ }{
+ %% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#5>0}{\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{F-\theNbequa}\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{#5}\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}
+ }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
+ \begin{align*}%
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
+ \num{#3}\mathcolor{Cterme}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa=1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Entier}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}%
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \ifthenelse{\boolean{Simplification}}{\\\SSimplifie{\Coeffb}{\Coeffa}&=\useKV[ClesEquation]{Lettre}}{}%\\
+ }{}
+ }{}
+ }
+ \ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ \end{align*}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
new file mode 100644
index 0000000000..fa057b58b1
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -0,0 +1,10542 @@
+% Author : Christophe Poulain
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+%%%%%%%
+% 87-88 : amélioration \Thales. \Labyrinthe.
+% 85 : passage à lua.
+% 75 : plein de choses que j'ai oubliées :(
+% 71 : Possibilité de choisir les fontes pour les figures MP
+% 70 : Ajout de la commande \calculatrice. Coupure des calculs longs
+% pour la moyenne et médiane. Egalités remarquables pour le
+% développement. Tableau vide pour les stats.
+% 67 : préparation au dépôt sur ctan.org
+% 66 : Ajout de la commande \Ratio.
+% 62 : Refonte des commandes !\Result! - Ajout d'une commande \Result
+% dans SommeAngles. Rectification espace dans \Distri avec Reduction active.
+% 61 : Simplication d'une fraction en version longue :) - Ajout
+% d'options à la commande \lstinline!\Stat!. Ajout d'options à la
+% commande \lstinline!\Thales!.
+% 60 : Nouvelle présentation de la résolution d'une équation. Reprise
+% et ajout d'une clé à la commande \SommeAngles.
+% 59 : amélioration de la macro \Pythagore pour pouvoir enchaîner les
+% calculs. Amélioration de la macro \Reperage pour améliorer
+% la gestion de l'affichage sur les droites graduées.
+% 58 : ajout d'un affichage des angles dans les diagrammes circulaires.
+% 57 : ajout de la commande \Fraction. Ajout d'un VF dans la macro \QCM
+% 56 : ajout de commandes "utiles" :) / Modification de \SommeAngles
+% pour éviter les conflits.
+% 55 : ajout d'une clé \Cle{Longue} dans la commande \Décomposition
+% 54 : adaptations mineures :) à gmp
+% 53 : ajout de la commande \QFlash
+% 52 : ajout de la macro \QCM
+% 51 : ajout de la macro \Relie
+% 50 : Changement des clés.
+% 37 : Reprise de la macro \Distri pour qu'elle accepte des valeurs
+%décimales.
+% 36 : Ajout d'un développement numérique. Reprise de la décomposition
+% des nombres premiers (pour éviter conflit entre \newcount\c et la
+% commande \c... Suppression de "spurious blank"
+% 35 : Ajout d'une quatrième version de présentation de la résolution
+% d'une équation - Nouvelle macro : Puissances. Ajout d'une option
+% \EFacteurs pour les équations produit nul. Amélioration (rédaction)
+% de \FonctionAffine - Ajout de la couleur de fond paramétrable dans
+% les fleches PH et BH de \Propor
+% 34 : Ajout de la commande \ResultatTrigo, \ResultatThalesx... Suppression de spurious blank. Corrections typographiques. Reprise de l'affichage de la moyenne dans la commande \Stat
+% 33 : MAJ Distri : Problème d'espace en utilisant les nombres négatifs (1ere étape).
+% 32 : MAJ Pythagore : Ajout de la clé PUnite - Possibilité de récupérer la valeur numérique obtenue par la macro Pythagore - Justification des textes dans les bulles. Ajout d'un FlecheCoefDebut dans \Propor.
+% 31 : MAJ Pourcentage. Correction quelques bugs. Correction de \og spurious blank\fg. Oubli du RequirePackage{multido} :(
+% 29 : MAJ Trigo (figure reprise pour utiliser \num de siunitx)
+% 28 : Mise à jour de \Propor : flèches inversées \FlechesPH et \FlechesPB, homogénéité des flèches. Pourcentage.
+% 27 : ajout du repérage
+% 26 : ajout des schémas de proba + MAJ avec geometriesyr16 + MAJ Nombre premier.
+% 25 : ajout des formules
+% 24 : ajout d'une option pour les équations $X^2=a$
+% 23 : ajout d'une option pour les équations produit.
+% 22 : ajout d'une option TColonnes dans la macro Tableaux
+% 21 : Ajout d'une vérification dans la macro \ResolEquation - Correction de quelques bugs dans la résolution d'équation.
+% 20: ajout d'une macro simpliste (car pas beaucoup d'utilité) sur les fonctions.
+% 19 : Modification AAntécédent dans Affine + Amélioration Pythagore (Cas des triangles rectangles isocèles, dans le calcul de la longueur d'un côté)
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{ProfCollege}[2021/01/01 v0.88 Aide pour l'utilisation de LaTeX au collège]
+
+\RequirePackage{mathtools}%Amélioration des rendus
+\RequirePackage{amssymb}
+
+% mathématiques
+\RequirePackage{siunitx}%unités SI
+\sisetup{%
+ locale=FR,
+ detect-all,%
+ output-decimal-marker={,},%
+ group-four-digits%
+}
+
+\DeclareSIUnit{\kmh}{\km\per\hour}
+\newcommand\speed[1]{\SI{#1}{\kmh}}
+\newcommand\Speed[1]{\SI[per-mode=symbol]{#1}{\kmh}}
+
+\RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
+\RequirePackage{xstring}%Gestion de chaines de caractères
+\RequirePackage{simplekv}%Gestion de paramètres sous forme de clés
+\RequirePackage{ifthen}
+\RequirePackage{modulus}%Pour certains calculs arithmétiques.
+\RequirePackage{xinttools}%Pour la création dynamique d'un tableau
+
+\newif\if@shellescape \@shellescapetrue
+\DeclareOption{nonshellescape}{\@shellescapefalse}
+\ProcessOptions\relax
+
+\if@shellescape
+\RequirePackage[shellescape,latex]{gmp}%inclusion de figures metapost "à la volée"%
+\gmpoptions{everymp={prologues:=3; input PfC-LaTeX; input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie;}}
+\usempxclass{article}
+\usempxpackage[utf8]{inputenc}
+\usempxpackage[T1]{fontenc}
+\usempxpackage{fourier}
+\usempxpackage[french]{babel}
+\usempxpackage{pifont}
+\usempxpackage[locale=FR]{siunitx}
+\else
+\RequirePackage[latex]{gmp}%inclusion de figures metapost "à la volée"%
+\gmpoptions{everymp={prologues:=3; input PfC-LaTeX; input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie;}}
+\usempxclass{article}
+\usempxpackage[utf8]{inputenc}
+\usempxpackage[T1]{fontenc}
+\usempxpackage{fourier}
+\usempxpackage[french]{babel}
+\usempxpackage{pifont}
+\usempxpackage[locale=FR]{siunitx}
+\fi
+
+\RequirePackage{xintexpr}
+\RequirePackage{listofitems}%pour définir simplement la liste des données.
+\RequirePackage{datatool}
+\RequirePackage{multido}
+
+\RequirePackage{xlop}%Pour effectuer les calculs nécessaires.
+\opset{decimalsepsymbol={,}}%
+
+\RequirePackage{xfp}%Pour les calculs trigonométriques
+
+\RequirePackage[most]{tcolorbox}
+
+\RequirePackage{tikz}
+% https://tex.stackexchange.com/questions/349259/curved-arrow-describing-a-step-in-a-equation-derivation
+%https://tex.stackexchange.com/questions/58656/best-way-to-draw-a-chevron-diagram-using-tikz
+\usetikzlibrary{calc,arrows,tikzmark,chains,positioning,shapes.symbols}
+
+\RequirePackage{suffix}%pour la commande étoilée
+
+\RequirePackage{multicol}
+
+\RequirePackage{hhline}% Pour la cohabitation de cline avec les couleurs
+
+\RequirePackage{iftex}
+
+\RequirePackage{stackengine}
+\RequirePackage[thicklines]{cancel}
+
+\ifpdftex
+\RequirePackage[babel=true,kerning=true]{microtype}%Pour gérer le souci du ; dans tikz avec pdftex...
+\fi
+
+% https://stackoverflow.com/questions/3391103/how-to-make-the-grayed-round-box-using-tiks
+\RequirePackage{environ}
+
+%%% 80
+\ifluatex
+\RequirePackage{luamplib}
+\everymplib{input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie; beginfig(1);}
+\everyendmplib{endfig;}
+\fi
+
+%%%%% Quelques besoins particuliers
+
+\def\bla{}%JCC :) Pour les tests sur arguments vides
+
+%% Colorer en mode mathématique. \color ne gère pas les espaces propres au mode mathématique. Donc besoin de changer
+% https://tex.stackexchange.com/questions/21598/how-to-color-math-symbols
+\makeatletter
+\def\mathcolor#1#{\@mathcolor{#1}}
+\def\@mathcolor#1#2#3{%
+ \protect\leavevmode
+ \begingroup
+ \color#1{#2}#3%
+ \endgroup
+}
+\makeatother
+
+% Colorer uniquement la barre de soulignement
+% https://tex.stackexchange.com/questions/9466/color-underline-a-formula/153884
+\def\mathunderline#1#2{\color{#1}\underline{{\color{black}#2}}\color{black}}
+
+% Ecrire des lignes d'équations
+\catcode`\@=11
+\def\Eqalign#1{\null\,\vcenter{\openup\jot\m@th\ialign{
+ \strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+ &&\quad\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$
+ \hfil\crcr #1\crcr}}\,}
+\catcode`\@=12
+
+%%%%%%%%%%%%%%%%%%%%%
+%% Commandes "utiles"
+%%%%%%%%%%%%%%%%%%%%%
+%encadrer avec des "sommets arrondis"
+\newsavebox{\logobox}
+
+\newcommand{\Logo}[2]{%
+\setbox1=\hbox{\includegraphics[scale=#2]{#1}}
+\begin{tikzpicture}%
+\clip[rounded corners=5mm] (0,0) rectangle (\wd1,\ht1);
+\node[xshift=0.5\wd1, yshift=0.5\ht1, inner xsep=0pt, inner ysep=0pt] (box) {%
+\includegraphics[scale=#2]{#1}%
+};%
+\end{tikzpicture}%
+}
+
+\makeatletter
+\def\Dotfill{%
+\leavevmode
+\cleaders \hb@xt@ .44em{\hss\xleaders\hrule width0.33em\hss}\hfill
+\kern\z@}
+\makeatother
+
+\newcommand\pointilles[1][]{%
+ \ifx\bla#1\bla%
+ \Dotfill%
+ \else%
+ \hbox to#1{\Dotfill}%
+ \fi
+}
+
+\newcommand\Lignespointilles[1]{%
+ \xintFor* ##1 in {\xintSeq {1}{#1}}\do{
+ \pointilles\par%
+ }
+}
+
+%%%%%%%%%%%%%%%%%
+% Tables Addition-Multiplication
+%%%%%%%%%%%%%%%%%
+\setKVdefault[Tables]{Addition=false,Multiplication=true,Seul=false,Debut=0,Fin=10,Couleur=white}
+
+% pour mémoire
+\newcommand\TableMultiplicationComplete{%
+ \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
+ \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}%
+ \hline
+ $\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+ &\cellcolor{gray!15}\fpeval{##1}
+ }
+ \\
+ \hline
+ \xintFor* ##1 in {\xintSeq {0}{10}}\do{%
+ ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+ &\fpeval{##2*##1}
+ }
+ \\
+ \hline
+ }
+ \end{tabular}%
+}
+%%%%
+
+\newcommand\TableMultiplicationCompleteColore{%
+ \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
+ \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}%
+ \hline
+ $\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+ &\cellcolor{gray!15}\fpeval{##1}
+ }
+ \\
+ \hline
+ \xintFor* ##1 in {\xintSeq {0}{10}}\do{%
+ ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+ &\xintifboolexpr{##2<##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##1*10}}}{\xintifboolexpr{##2>##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##2*10}}}{}}\fpeval{##2*##1}
+ }
+ \\
+ \hline
+ }
+ \end{tabular}%
+}
+
+\newcommand\TableAdditionComplete{%
+ \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
+ \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}%
+ \hline
+ $+$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+ &\cellcolor{gray!15}\fpeval{##1}
+ }
+ \\
+ \hline
+ \xintFor* ##1 in {\xintSeq {0}{10}}\do{%
+ ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
+ &\fpeval{##2+##1}
+ }
+ \\
+ \hline
+ }
+ \end{tabular}%
+}
+
+\newcommand\TableMultiplicationSeule[1]{%
+ \ensuremath{%
+ \begin{array}{ccccc}%
+ \xintFor* ##1 in {\xintSeq
+ {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{
+ ##1&\times&#1&=&\fpeval{##1*#1}\\
+ }
+ \end{array}
+ }%
+}%
+
+\newcommand\TableAdditionSeule[1]{%
+ \ensuremath{%
+ \begin{array}{ccccc}
+ \xintFor* ##1 in {\xintSeq
+ {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{
+ ##1&+&#1&=&\fpeval{##1+#1}\\
+ }
+ \end{array}
+ }%
+}%
+
+
+\newcommand\Tables[2][]{%
+ \useKVdefault[Tables]%
+ \setKV[Tables]{#1}%
+ \ifboolKV[Tables]{Seul}{%
+ \ifboolKV[Tables]{Addition}{%
+ \TableAdditionSeule{#2}%
+ }{%
+ \TableMultiplicationSeule{#2}%
+ }%
+ }{
+ \ifboolKV[Tables]{Addition}{%
+ \TableAdditionComplete%
+ }{%
+ \TableMultiplicationCompleteColore%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%%
+% Labyrinthe
+%%%%%%%%%%%%%%
+\setKVdefault[Labyrinthe]{Lignes=6,Colonnes=3,Longueur=4,Hauteur=2,Passages=false,EcartH=1,EcartV=1,CouleurF=gray!50,Texte=\color{black}}
+
+\newcommand\Labyrinthe[3][]{%
+ \useKVdefault[Labyrinthe]%
+ \setKV[Labyrinthe]{#1}%
+ \setsepchar[*]{,*/}%\ignoreemptyitems%
+ \readlist*\ListeLaby{#2}%
+ \ifboolKV[Labyrinthe]{Passages}{%
+ \readlist*\ListeLabySol{#3}%
+ }{}%
+ \xdef\LabyLong{\useKV[Labyrinthe]{Longueur}}%
+ \xdef\LabyHaut{\useKV[Labyrinthe]{Hauteur}}%
+ \xdef\TotalLaby{\fpeval{3*\useKV[Labyrinthe]{Colonnes}-2}}%
+ \xdef\CouleurF{\useKV[Labyrinthe]{CouleurF}}%
+ \xdef\MotifTexte{\useKV[Labyrinthe]{Texte}}%
+ \xintifboolexpr{\ListeLabylen=\fpeval{\useKV[Labyrinthe]{Lignes}*\useKV[Labyrinthe]{Colonnes}}}{%
+ \begin{tikzpicture}[remember picture]
+ % on dessine les cadres
+ \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
+ \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
+ \xdef\ColorFill{\ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},2]}%
+ \node[fill=\ColorFill,draw,minimum height=\LabyHaut*1cm,minimum width=\LabyLong*1cm,name=A-\compteurh-\compteurv] at
+ (\fpeval{\LabyLong+\useKV[Labyrinthe]{EcartH}}*\compteurh,-\fpeval{\LabyHaut+\useKV[Labyrinthe]{EcartV}}*\compteurv) {\ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},1]};%
+ }%
+ }%
+ % on dessine les flèches
+ \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
+ \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
+ \ifboolKV[Labyrinthe]{Passages}{%
+ \xdef\NomNode{\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)}]}%
+ \draw[\CouleurF,line width=1pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\compteurh-\fpeval{\compteurv+1});%
+ }{%
+ \draw[\CouleurF,line width=1pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\compteurh-\fpeval{\compteurv+1});%
+ }%
+ }
+ }
+ \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
+ \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+ \ifboolKV[Labyrinthe]{Passages}{%
+ \xdef\NomNode{\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\compteurh}]}%
+ \draw[\CouleurF,line width=1pt,stealth-stealth]
+ (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv);
+ }{%
+ \draw[\CouleurF,line width=1pt,stealth-stealth]
+ (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\compteurv);
+ }%
+ }
+ }
+ \foreach \compteurv in {2,...,\fpeval{\useKV[Labyrinthe]{Lignes}}}{%
+ \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+ \draw[\CouleurF,line width=1pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1});
+ }
+ }
+ \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
+ \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
+ \ifboolKV[Labyrinthe]{Passages}{%
+ \xdef\NomNode{\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)+1}]}%
+ \draw[\CouleurF,line width=1pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
+ }{%
+ \draw[\CouleurF,line width=1pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
+ }%
+ }%
+ }%
+ \end{tikzpicture}
+ }{\textbf{! Le nombre d'informations n'est pas compatible avec les
+ définitions de {\ttfamily Colonnes} et {\ttfamily Lignes} !}}%
+}
+
+%%%%%%%%%%%%%%%
+% Calculatrice
+%%%%%%%%%%%%%%%
+%https://tex.stackexchange.com/questions/290321/mimicking-a-calculator-inputs-and-screen
+\definecolor{lightorange}{rgb}{0.9,0.4,0}
+\definecolor{lightestorange}{rgb}{1,0.8,0.5}
+\definecolor{darkorange}{rgb}{0.2,0.1,0}
+
+\colorlet{blackened}{black!90!white}
+\colorlet{blackish}{black!70!white}
+\colorlet{greyish}{black!60!white}
+\colorlet{whiteish}{white}
+\colorlet{orangeish}{yellow!90!red}
+\colorlet{greenish}{green!16!gray}
+\colorlet{redish}{red!80!black}
+
+\tcbset{calbackground/.style={
+ enhanced,
+ leftright skip=0.25cm,beforeafter skip=0pt,
+ toptitle=0mm,bottomtitle=0mm,
+ right=2mm,left=2mm,
+ top=1pt,
+ bottom=0.25cm,
+ boxsep=0pt,
+ boxrule=0mm,
+ sharp corners,
+ sidebyside,
+ sidebyside gap=2mm,
+ lefthand ratio=0.6,
+ bicolor,
+ colback=black!10!white,
+ colbacklower=greenish,
+ colframe=white,
+ autoparskip,
+ }}
+
+\newtcbox{\KY}[1][]{
+ enhanced,
+ on line,
+ arc=2pt,outer arc=2pt,
+ boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
+ boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
+ interior style={top color=blackish,bottom color=blackened},
+ colframe=greyish,
+ width=2.5em,
+ tcbox width=forced center,
+ equal height group=K,
+ valign=center,
+ fontupper=\footnotesize\sffamily,
+ coltext=orangeish,
+ before upper=\vrule width 0pt height 2ex depth 1ex\relax,
+}
+
+\newtcbox{\KYm}[1][]{
+ enhanced,
+ on line,
+ arc=2pt,outer arc=2pt,
+ boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
+ boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
+ interior style={top color=blackish,bottom color=blackened},
+ colframe=greyish,
+ width=2.5em,
+ tcbox width=forced center,
+ equal height group=K,
+ valign=center,
+ fontupper=\footnotesize\sffamily,
+ coltext=orangeish,
+ before upper=\vrule width 0pt height 2ex depth 1ex\relax$,
+ after upper=$,
+}
+
+\newtcbox{\KN}{
+ enhanced,
+ on line,
+ arc=2pt,outer arc=2pt,
+ boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
+ boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
+ interior style={top color=blackish,bottom color=blackened},
+ colframe=greyish,
+ width=1.5em,
+ tcbox width=forced center,
+ equal height group=K,
+ valign=center,
+ fontupper=\footnotesize\sffamily,
+ coltext=whiteish,
+ before upper=\vrule width 0pt height 2ex depth 1ex\relax,
+}
+
+\parindent0pt
+
+\newtcolorbox{calc}[1][]{%
+ enhanced,bicolor,
+ boxsep=0pt,
+ boxrule=0pt,
+ top=6pt,bottom=0pt,left=6pt,right=0pt,
+ sharp corners,
+ frame empty,
+ colback=black!10,
+ colbacklower=greenish,
+ sidebyside,
+ sidebyside align=top seam,
+ sidebyside gap=0pt,
+ righthand width=50.7mm,
+ before lower=\begin{tabular}{@{}l@{}},
+ after lower=\end{tabular},
+ overlay={\node[inner sep=0pt, outer sep=0pt, text height=5pt, text
+ depth=1pt, text width=50.7mm, fill=greenish, anchor=north
+ east, font=\sffamily\tiny\bfseries, align=flush right]
+ at (frame.north east) {#1};}
+}
+
+\def\MPCalculatrice#1#2{
+ % #1 Calcul %2 réponse
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ input PfC-Calculatrice;
+ LCD(#1)(#2);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Calculatrice;}]
+ LCD(#1)(#2);
+ \end{mpost}
+ \fi
+}
+
+\setKVdefault[ClesCalculatrice]{Ecran=false}
+
+\newcommand\Calculatrice[2][]{%
+ \setstackgap{L}{0.775\baselineskip}%
+ \useKVdefault[ClesCalculatrice]%
+ \setKV[ClesCalculatrice]{#1}%
+ \ifboolKV[ClesCalculatrice]{Ecran}{%
+ \setsepchar[*]{,*/}%
+ \readlist\ListeCalc{#2}%
+ \MPCalculatrice{\ListeCalc[1,1]}{\ListeCalc[1,2]}%
+ }{%
+ \setsepchar[*]{,*/}%
+ \readlist\ListeCalc{#2}%
+ \foreachitem\compteur\in\ListeCalc{\xintifboolexpr{\listlen\ListeCalc[\compteurcnt]=2}{\Longstack{{\tiny\ListeCalc[\compteurcnt,1]} \KN{\ListeCalc[\compteurcnt,2]}}}{\Longstack{{\tiny\ListeCalc[\compteurcnt,2]} \KY{\ListeCalc[\compteurcnt,3]}}}%
+ }%
+ }%
+ \setstackgap{L}{\baselineskip}%
+}%
+
+
+%%%%%%%%%%%%%%%%
+%%% Questions Flash
+%%%%%%%%%%%%%%%%
+\tcbset{Expression/.style={colback=white,valign=center,left=0mm,right=0mm,top=1mm,bottom=1mm,colframe=white}}%
+\tcbset{ExpressionSerie1/.style={colback=\useKV[ClesFlash]{Couleur1},left=0mm,right=0mm,top=1mm,bottom=1mm}}%
+\tcbset{ExpressionSerie2/.style={colback=\useKV[ClesFlash]{Couleur2},left=0mm,right=0mm,top=1mm,bottom=1mm}}%
+\tcbset{ExpressionSerie3/.style={colback=\useKV[ClesFlash]{Couleur3},left=0mm,right=0mm,top=1mm,bottom=1mm}}
+\tcbset{ExpressionSerie4/.style={colback=\useKV[ClesFlash]{Couleur4},left=0mm,right=0mm,top=1mm,bottom=1mm}}
+\tcbset{BoiteExpression/.style={enhanced,nobeforeafter,tcbox raise
+ base,colback=white,right=3.5mm,left=3.5mm,halign=center,colframe=black}}
+\newtcolorbox{CadreNombre}[1][]{%
+ Expression,#1}
+
+\setKVdefault[ClesFlash]{Hauteur=0.2\textheight,Simple=false,Intrus=false,Kahout=false,Daily=false,Expression=false,Mental=false,Mesure=false,Heure=false,Decimal=false,Operation=Multiplie,Numeration=false,Evaluation=false,Pause=false,Couleur1=blue!10,Couleur2=orange!10,Couleur3=green!10,Couleur4=yellow!10}
+
+\newlength{\HauteurFlash}
+
+\tikzset{
+ arrow/.style={
+ draw,
+ minimum height=1.25cm,
+ inner sep=0.25em,
+ shape=signal,
+ signal from=west,
+ signal to=east,
+ signal pointer angle=150,
+ }
+}
+
+\def\MPHorloge#1#2#3{
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ marque_horloge=1;
+ save Hor;
+ picture Hor;
+ path gdeaig,pteaig,trot;
+ pair centrehorloge;
+ centrehorloge=(0,0);
+ path tourhorloge;
+ tourhorloge=cercles(centrehorloge,marque_horloge*cm);
+ Hor=image(
+ %% dessin de l'horloge
+ draw tourhorloge;
+ for i=0 upto 59:
+ if (i mod 5)=0:
+ if (i mod 15)=0:
+ draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 2bp;
+ else:
+ draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (5*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 1.5bp;
+ fi;
+ else:
+ draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (3*unitvector(centrehorloge-pointarc(tourhorloge,6*i))));
+ fi;
+ endfor;
+ path graduhorloge;
+ graduhorloge=cercles(centrehorloge,marque_horloge*cm+5*abs(unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ %
+ marque_p:="plein";
+ pointe(centrehorloge);
+ marque_p:="rien";
+ %% placement des aiguilles
+ gdeaig=centrehorloge--(pointarc(tourhorloge,0) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ pteaig=centrehorloge--(pointarc(tourhorloge,0) shifted (18*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ trot=centrehorloge--(pointarc(tourhorloge,0) shifted (10*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ draw rotation(trot,centrehorloge,90-6*#3) withpen pencircle scaled0.4;
+ draw rotation(gdeaig,centrehorloge,90-6*#2) withpen pencircle scaled1.25;
+ draw rotation(pteaig,centrehorloge,90-30*(#1+#2/60)) withpen pencircle scaled 2bp;
+ );
+ draw Hor;
+ \end{mplibcode}
+\else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ marque_horloge=1;
+ save Hor;
+ picture Hor;
+ path gdeaig,pteaig,trot;
+ pair centrehorloge;
+ centrehorloge=(0,0);
+ path tourhorloge;
+ tourhorloge=cercles(centrehorloge,marque_horloge*cm);
+ Hor=image(
+ %% dessin de l'horloge
+ draw tourhorloge;
+ for i=0 upto 59:
+ if (i mod 5)=0:
+ if (i mod 15)=0:
+ draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 2bp;
+ else:
+ draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (5*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 1.5bp;
+ fi;
+ else:
+ draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (3*unitvector(centrehorloge-pointarc(tourhorloge,6*i))));
+ fi;
+ endfor;
+ path graduhorloge;
+ graduhorloge=cercles(centrehorloge,marque_horloge*cm+5*abs(unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ %
+ marque_p:="plein";
+ pointe(centrehorloge);
+ marque_p:="rien";
+ %% placement des aiguilles
+ gdeaig=centrehorloge--(pointarc(tourhorloge,0) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ pteaig=centrehorloge--(pointarc(tourhorloge,0) shifted (18*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ trot=centrehorloge--(pointarc(tourhorloge,0) shifted (10*unitvector(centrehorloge-pointarc(tourhorloge,0))));
+ draw rotation(trot,centrehorloge,90-6*#3) withpen pencircle scaled0.4;
+ draw rotation(gdeaig,centrehorloge,90-6*#2) withpen pencircle scaled1.25;
+ draw rotation(pteaig,centrehorloge,90-30*(#1+#2/60)) withpen pencircle scaled 2bp;
+ );
+ draw Hor;
+ \end{mpost}
+ \fi
+}
+
+\newcommand\QFNumeration{%
+ \begin{CadreNombre}
+ {\Large LE NOMBRE DU JOUR est : }
+ \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie1]
+ $\square$ \textbf{Le chiffre des \ListeFlash[1,2] est :}
+ \tcbox[BoiteExpression]{\phantom{1500000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie2]
+ $\square$ \textbf{Le chiffre \ListeFlash[1,3] représente le
+ chiffre des :}
+ \tcbox[BoiteExpression]{\phantom{1500000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie3]
+ $\square$ \textbf{Le nombre de \ListeFlash[1,4] est :}
+ \tcbox[BoiteExpression]{\phantom{1500000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie4]
+ $\square$ \textbf{Le nombre de \ListeFlash[1,5] est :}
+ \tcbox[BoiteExpression]{\phantom{1500000}}
+ \end{tcolorbox}
+ \end{CadreNombre}
+}
+
+\newcommand\QFHeure{%
+ \begin{CadreNombre}
+ {\Large L'HEURE DU JOUR est : }\raisebox{-0.9cm}{\MPHorloge{\NbHeures}{\NbMinutes}{\NbSecondes}}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie1]
+ $\square$ \textbf{\ListeFlash[1,2] :}
+ \tcbox[BoiteExpression]{\phantom{1500000000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie2]
+ $\square$ \textbf{\ListeFlash[1,3] :}
+ \tcbox[BoiteExpression]{\phantom{1500000000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie3]
+ $\square$ \textbf{\ListeFlash[1,4] :}
+ \tcbox[BoiteExpression]{\phantom{\hbox to4.5em{15}}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie4]
+ $\square$ \textbf{\ListeFlash[1,5] :}
+ \tcbox[BoiteExpression]{\phantom{\hbox to4.5em{1500000}}}
+ \end{tcolorbox}
+ \end{CadreNombre}
+}
+
+\newcommand\QFMesure{%
+ \begin{CadreNombre}
+ {\Large LA MESURE DU JOUR est : }
+ \tcbox[BoiteExpression]{\ListeFlash[1,1]}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie1]
+ $\square$ \textbf{Convertis la en \ListeFlash[1,2] :}
+ \tcbox[BoiteExpression]{\phantom{1500000000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie2]
+ $\square$ \textbf{Convertis la en \ListeFlash[1,3] :}
+ \tcbox[BoiteExpression]{\phantom{1500000000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie3]
+ $\square$ \textbf{Ajoute lui \ListeFlash[1,4] :}
+ \tcbox[BoiteExpression]{\phantom{\hbox to5em{1500000}}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie4]
+ $\square$ \textbf{Enlève lui \ListeFlash[1,5] :}
+ \tcbox[BoiteExpression]{\phantom{\hbox to5em{1500000}}}
+ \end{tcolorbox}
+ \end{CadreNombre}
+}
+
+\newcommand\QFDaily{%
+ \begin{tikzpicture}
+ \begin{scope}[start chain=transition going right,node
+ distance=-\pgflinewidth]
+ \foreach \s in {1,...,\ListeFlashlen}{%
+ \xintifboolexpr{\s = 1}{%
+ \node[arrow,on chain] {\Huge\bfseries\ListeFlash[\s]};
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ }{%
+ \xintifboolexpr{\s = \ListeFlashlen}{%
+ \node[arrow,on chain] {\Huge\bfseries?};
+ }{%
+ \node[arrow,on chain] {\ListeFlash[\s]};
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ }
+ }
+ }
+ \end{scope}
+ \end{tikzpicture}
+}
+
+\newcommand\QFDecimal{%
+ \begin{CadreNombre}
+ {\Large LE NOMBRE DU JOUR est : }
+ \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie1]
+ \textbf{\'Ecriture en fraction décimale :}
+ \tcbox[BoiteExpression]{$\dfrac{\phantom{1000000}}{\phantom{1000000}}$}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie2]
+ \begin{tabular}{c}
+ \textbf{Partie}\\
+ \textbf{entière}
+ \end{tabular} \textbf{: }
+ \tcbox[BoiteExpression]{\phantom{100000}}\hfill%
+ \begin{tabular}{c}
+ \textbf{Partie}\\
+ \textbf{décimale}
+ \end{tabular} \textbf{: }
+ \tcbox[BoiteExpression]{\phantom{100000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie3]
+ \textbf{\useKV[ClesFlash]{Operation} le par
+ \ListeFlash[1,2] :} \tcbox[BoiteExpression]{\phantom{1000000000}}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie4]
+ \textbf{Trouve le nombre entier le plus proche :} \tcbox[BoiteExpression]{\phantom{10000000}}
+ \end{tcolorbox}
+ \end{CadreNombre}
+}
+
+\newcommand\QFMental{%
+ \begin{CadreNombre}
+ {\Large LE NOMBRE DU JOUR est : }
+ \tcbox[BoiteExpression]{\ListeFlash[1,1]}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie1]
+ $\square$ \textbf{Ajoute lui}
+ \tcbox[BoiteExpression]{\ListeFlash[1,2]}\hfill$\square$
+ \textbf{Soustrais lui} \tcbox[BoiteExpression]{\ListeFlash[1,3]}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie2]
+ $\square$ \textbf{Multiplie le par }
+ \tcbox[BoiteExpression]{\ListeFlash[1,4]}\hfill$\square$
+ \textbf{Divise le par } \tcbox[BoiteExpression]{\ListeFlash[1,5]}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie3]
+ $\square$ \textbf{Trouve}
+ \tcbox[BoiteExpression]{\ListeFlash[1,6]}
+ \textbf{\% de ce nombre.}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie4]
+ $\square$ \textbf{Trouve } \tcbox[BoiteExpression]{\ListeFlash[1,7]}
+ \textbf{de ce nombre.}
+ \end{tcolorbox}
+ \end{CadreNombre}
+}
+
+\newcommand\QFExpression{%
+ \begin{CadreNombre}
+ {\Large L'EXPRESSION DU JOUR est : }
+ \tcbox[BoiteExpression]{\ListeFlash[1,1]}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie1]
+ $\square$ \textbf{Ajoute lui}
+ \tcbox[BoiteExpression]{\ListeFlash[1,2]}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie2]
+ $\square$ \textbf{Soustrais lui}
+ \tcbox[BoiteExpression]{\ListeFlash[1,3]}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie3]
+ $\square$ \textbf{Multiplie la par}
+ \tcbox[BoiteExpression]{\ListeFlash[1,4]}
+ \end{tcolorbox}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{tcolorbox}[ExpressionSerie4]
+ $\square$ \textbf{\'Evalue la lorsque} \tcbox[BoiteExpression]{\ListeFlash[1,5]}
+ \end{tcolorbox}
+ \end{CadreNombre}
+}
+
+\newcommand\QFlash[2][]{%
+ \useKVdefault[ClesFlash]
+ \setKV[ClesFlash]{#1}
+ \setlength{\HauteurFlash}{\useKV[ClesFlash]{Hauteur}}
+ \colorlet{CouleurUn}{\useKV[ClesFlash]{Couleur1}}
+ \colorlet{CouleurDeux}{\useKV[ClesFlash]{Couleur2}}
+ \colorlet{CouleurTrois}{\useKV[ClesFlash]{Couleur3}}
+ \colorlet{CouleurQuatre}{\useKV[ClesFlash]{Couleur4}}
+ \ifboolKV[ClesFlash]{Evaluation}{%
+ \ifboolKV[ClesFlash]{Numeration}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \QFNumeration%
+ }{%
+ \ifboolKV[ClesFlash]{Heure}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
+ \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
+ \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
+ \QFHeure%
+ }{%
+ \ifboolKV[ClesFlash]{Mesure}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \QFMesure%
+ }{%
+ \ifboolKV[ClesFlash]{Daily}{%
+ \setsepchar[*]{/}%
+ \readlist*\ListeFlash{#2}%
+ \QFDaily%
+ }{%
+ \ifboolKV[ClesFlash]{Decimal}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFDecimal%
+ \end{frame}
+ }{%
+ \ifboolKV[ClesFlash]{Mental}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \QFMental%
+ }{%
+ \ifboolKV[ClesFlash]{Expression}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \QFExpression%
+ }{%
+ \setsepchar[*]{/}%
+ \readlist*\ListeFlash{#2}%
+ \ifboolKV[ClesFlash]{Simple}{%
+ \ListeFlash[1]
+ \begin{tcolorbox}[valign=center]
+ \ListeFlash[2]
+ \end{tcolorbox}
+ }{%
+ \setsepchar[*]{*/}%
+ \readlist*\ListeFlash{#2}%
+ \ifboolKV[ClesFlash]{Kahout}{%
+ \setsepchar[*]{*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{tcolorbox}[halign=center,valign=center]
+ \ListeFlash[1,1]
+ \end{tcolorbox}
+ % \par
+ \begin{multicols}{4}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
+ \ListeFlash[1,2]
+ \end{tcolorbox}
+ % \hfill%
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
+ \ListeFlash[1,3]
+ \end{tcolorbox}
+ % \hfill%
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
+ \ListeFlash[1,4]
+ \end{tcolorbox}
+ % \hfill%
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
+ \ListeFlash[1,5]
+ \end{tcolorbox}
+ \end{multicols}
+ }{%
+ \setsepchar[*]{*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{tcolorbox}[halign=center,valign=center]
+ \ListeFlash[1,1]
+ \end{tcolorbox}
+ \begin{multicols}{4}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
+ \ListeFlash[1,2]
+ \end{tcolorbox}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
+ \ListeFlash[1,3]
+ \end{tcolorbox}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
+ \ListeFlash[1,4]
+ \end{tcolorbox}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
+ \ListeFlash[1,5]
+ \end{tcolorbox}
+ \end{multicols}
+ }%
+ }%
+ }%
+ }%
+ }
+ }%
+ }%
+ }%
+ }%
+ }{%
+ \ifboolKV[ClesFlash]{Numeration}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFNumeration%
+ \end{frame}
+ }{%
+ \ifboolKV[ClesFlash]{Heure}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
+ \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
+ \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
+ \begin{frame}
+ \QFHeure%
+ \end{frame}
+ }{%
+ \ifboolKV[ClesFlash]{Mesure}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFMesure%
+ \end{frame}
+ }{%
+ \ifboolKV[ClesFlash]{Daily}{%
+ \setsepchar[*]{/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFDaily
+ \end{frame}
+ }{%
+ \ifboolKV[ClesFlash]{Decimal}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFDecimal%
+ \end{frame}
+ }{%
+ \ifboolKV[ClesFlash]{Mental}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFMental%
+ \end{frame}
+ }{
+ \ifboolKV[ClesFlash]{Expression}{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \QFExpression%
+ \end{frame}
+ }{%
+ \setsepchar[*]{/}%
+ \readlist*\ListeFlash{#2}%
+ \ifboolKV[ClesFlash]{Simple}{%
+ \begin{frame}
+ \ListeFlash[1]
+ \begin{tcolorbox}[valign=center]
+ \ListeFlash[2]
+ \end{tcolorbox}
+ \end{frame}
+ }{%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeFlash{#2}%
+ \ifboolKV[ClesFlash]{Kahout}{%
+ \setsepchar[*]{*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \begin{tcolorbox}[valign=center]
+ \ListeFlash[1,1]
+ \end{tcolorbox}
+ \vfill
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{columns}[T]
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
+ \ListeFlash[1,2]
+ \end{tcolorbox}
+ \end{column}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
+ \ListeFlash[1,3]
+ \end{tcolorbox}
+ \end{column}
+ \end{columns}
+ \bigskip
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{columns}[T]
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
+ \ListeFlash[1,4]
+ \end{tcolorbox}
+ \end{column}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
+ \ListeFlash[1,5]
+ \end{tcolorbox}
+ \end{column}
+ \end{columns}
+ \end{frame}
+ }{%
+ \setsepchar[*]{*/}%
+ \readlist*\ListeFlash{#2}%
+ \begin{frame}
+ \begin{tcolorbox}[valign=center]
+ \ListeFlash[1,1]
+ \end{tcolorbox}
+ \vfill
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{columns}[T]
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
+ \ListeFlash[1,2]
+ \end{tcolorbox}
+ \end{column}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
+ \ListeFlash[1,3]
+ \end{tcolorbox}
+ \end{column}
+ \end{columns}
+ \bigskip
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{columns}[T]
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
+ \ListeFlash[1,4]
+ \end{tcolorbox}
+ \end{column}
+ \ifboolKV[ClesFlash]{Pause}{\pause}{}
+ \begin{column}{0.45\linewidth}
+ \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
+ \ListeFlash[1,5]
+ \end{tcolorbox}
+ \end{column}
+ \end{columns}
+ \end{frame}
+ }%
+ }%
+ }%
+ }%
+ }
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%
+%%% Fractions
+%%%%%%%%%%%%%
+\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Couleur=green,Reponse=false,Multiple=1}
+
+\def\MPFractionRegulier#1#2#3#4#5{
+ % #1 rayon, #2 nb côtés, #3 num, #4 deno, #5 couleur
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair O,A[],B[];
+ O=u*(0,0);
+ path cc,cd;
+ cc=cercles(O,#1);
+ for k=0 upto #2:
+ A[k]=pointarc(cc,k*(360/#2));
+ endfor;
+ cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor);
+ for k=0 upto #4-1:
+ B[k]=point(k*(#2/#4)) of cd;
+ endfor;
+ remplis O--arccercle(B[0],B[#3],O)--cycle withcolor #5;
+ %fi;
+ clip currentpicture to cd;
+ draw polygone(A0 for k=1 upto #2:,A[k] endfor);
+ if #4>1:
+ for k=0 upto #4-1:
+ draw segment(O,B[k]) cutafter cd;
+ endfor;
+ fi;
+ \end{mplibcode}
+ \else
+\begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair O,A[],B[];
+ O=u*(0,0);
+ path cc,cd;
+ cc=cercles(O,#1);
+ for k=0 upto #2:
+ A[k]=pointarc(cc,k*(360/#2));
+ endfor;
+ cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor);
+ for k=0 upto #4-1:
+ B[k]=point(k*(#2/#4)) of cd;
+ endfor;
+ remplis O--arccercle(B[0],B[#3],O)--cycle withcolor #5;
+ %fi;
+ clip currentpicture to cd;
+ draw polygone(A0 for k=1 upto #2:,A[k] endfor);
+ if #4>1:
+ for k=0 upto #4-1:
+ draw segment(O,B[k]) cutafter cd;
+ endfor;
+ fi;
+ \end{mpost}
+ \fi
+}
+
+\def\MPFractionRectangle#1#2#3#4#5#6{%
+ % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair A,B,C,D,M[],N[],R[],S[];
+ A=(1,1);
+ B-A=(#1,0);
+ C-B=(0,#2);
+ D-C=A-B;
+ numeric parts;
+ parts=(#4 div #6);
+ for k=0 upto parts:
+ M[k]=(k/parts)[A,B];
+ N[k]=(k/parts)[D,C];
+ endfor;
+ if #6>1:
+ for k=0 upto #6:
+ R[k]=(k/#6)[A,D];
+ S[k]=(k/#6)[B,C];
+ endfor;
+ fi;
+ if #6=1:
+ remplis polygone(A,M[#3],N[#3],D) withcolor #5;
+ else:
+ DDiv=#3 div parts;
+ MMod=#3 mod parts;
+ remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
+ remplis
+ polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
+ fi;
+ draw polygone(A,B,C,D);
+ for k=1 upto (parts-1):
+ draw segment(M[k],N[k]);
+ endfor;
+ if #6>1:
+ for k=1 upto (#6-1):
+ draw segment(R[k],S[k]);
+ endfor;
+ fi;
+ \end{mplibcode}
+ \else
+\begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,B,C,D,M[],N[],R[],S[];
+ A=(1,1);
+ B-A=(#1,0);
+ C-B=(0,#2);
+ D-C=A-B;
+ numeric parts;
+ parts=(#4 div #6);
+ for k=0 upto parts:
+ M[k]=(k/parts)[A,B];
+ N[k]=(k/parts)[D,C];
+ endfor;
+ if #6>1:
+ for k=0 upto #6:
+ R[k]=(k/#6)[A,D];
+ S[k]=(k/#6)[B,C];
+ endfor;
+ fi;
+ if #6=1:
+ remplis polygone(A,M[#3],N[#3],D) withcolor #5;
+ else:
+ DDiv=#3 div parts;
+ MMod=#3 mod parts;
+ remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
+ remplis
+ polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
+ fi;
+ draw polygone(A,B,C,D);
+ for k=1 upto (parts-1):
+ draw segment(M[k],N[k]);
+ endfor;
+ if #6>1:
+ for k=1 upto (#6-1):
+ draw segment(R[k],S[k]);
+ endfor;
+ fi;
+ \end{mpost}
+ \fi
+}
+
+\def\MPFractionDisque#1#2#3#4{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair A,B[];
+ A=(0,0);
+ path cc;
+ cc=cercles(A,#1);
+ for k=0 upto (#3-1):
+ B[k]=pointarc(cc,(360/#3)*k);
+ endfor;
+ fill (A--B0--arccercle(B[0],B[#2],A)--cycle) withcolor #4;
+ draw cc;
+ for k=0 upto (#3-1):
+ draw segment(A,B[k]);
+ endfor;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,B[];
+ A=(0,0);
+ path cc;
+ cc=cercles(A,#1);
+ for k=0 upto (#3-1):
+ B[k]=pointarc(cc,(360/#3)*k);
+ endfor;
+ fill (A--B0--arccercle(B[0],B[#2],A)--cycle) withcolor #4;
+ draw cc;
+ for k=0 upto (#3-1):
+ draw segment(A,B[k]);
+ endfor;
+ \end{mpost}
+ \fi
+}
+
+\def\MPFractionSegment#1#2#3#4{
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair A,C,B[];
+ A=(0,0);
+ C-A=(#1,0);
+ for k=0 upto #3:
+ B[k]=(k/#3)[A,C];
+ endfor;
+ draw segment(B[0],B[#2]) withpen pencircle scaled 2 withcolor #4;
+ draw segment(A,C);
+ marque_p:="tiretv";
+ for k=0 upto #3:
+ pointe(B[k]);
+ endfor;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,C,B[];
+ A=(0,0);
+ C-A=(#1,0);
+ for k=0 upto #3:
+ B[k]=(k/#3)[A,C];
+ endfor;
+ draw segment(B[0],B[#2]) withpen pencircle scaled 2 withcolor #4;
+ draw segment(A,C);
+ marque_p:="tiretv";
+ for k=0 upto #3:
+ pointe(B[k]);
+ endfor;
+ \end{mpost}
+ \fi
+}
+
+\newcommand\Fraction[2][]{%
+ \useKVdefault[ClesFraction]%
+ \setKV[ClesFraction]{#1}%
+ \setsepchar[*]{/}%
+ \readlist*\ListeFraction{#2}%
+ %\ListeFractionlen -- Le numérateur est \ListeFraction[1] et le
+ %dénominateur est \ListeFraction[2].
+ \ifboolKV[ClesFraction]{Regulier}{%
+ \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+ \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+ }{%
+ \ifboolKV[ClesFraction]{Segment}{%
+ \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+ \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+ }{
+ \ifboolKV[ClesFraction]{Rectangle}{%rectangle
+ \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+ \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}%
+ }{%disque
+ \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+ \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+ }%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%%%%
+%%% Réponses à relier
+%%%%%%%%%%%%%%%%
+\setKVdefault[ClesRelie]{Solution=false,LargeurG=5cm,LargeurD=2cm,Stretch=1.5,Ecart=2cm}
+
+\newcommand\Relie[2][]{%
+ \useKVdefault[ClesRelie]%
+ \setKV[ClesRelie]{#1}%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeRelie{#2}%
+ \buildtabrelie%
+ \ifboolKV[ClesRelie]{Solution}{%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{%
+ \itemtomacro\ListeRelie[##1,1]\untest
+ \ifx\bla\untest\bla%
+ \else
+ \tikz[remember picture,overlay]{\draw (RelieG-##1) -- (RelieD-\ListeRelie[##1,3]);}%
+ \fi
+ }%
+ }{%
+ }%
+}
+
+\newcounter{NbRelie}
+
+\def\buildtabrelie{%
+ \setcounter{NbRelie}{0}%
+ \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}%
+ \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember
+ picture]{\node[name=RelieD-\theNbRelie,inner
+ sep=0pt]{};\fill[] (RelieD-\theNbRelie) circle[radius=1.5pt]}}cp{\useKV[ClesRelie]{LargeurD}}}%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest%
+\ifx\bla\untest\bla%
+ \uppercase{&}\stepcounter{NbRelie}%
+ \else
+ \uppercase{&}\stepcounter{NbRelie}\tikz[remember
+ picture,overlay]{\node[name=RelieG-\theNbRelie,inner
+ sep=0pt]{};\fill[]
+ (RelieG-\theNbRelie) circle[radius=1.5pt];}
+\fi&&&\ListeRelie[##1,2]\\}%
+ \end{tabular}%
+ \setcounter{NbRelie}{0}%
+}%
+
+\def\buildtabrelieold{%
+ \setcounter{NbRelie}{0}%
+ \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}%
+ \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember
+ picture,baseline]{\node[name=RelieD-\theNbRelie]{\Large\textbullet};}}cp{\useKV[ClesRelie]{LargeurD}}}%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest%
+\ifx\bla\untest\bla%
+ \uppercase{&}\stepcounter{NbRelie}%
+ \else
+ \uppercase{&}\stepcounter{NbRelie}\tikz[remember picture,baseline]{\node[name=RelieG-\theNbRelie]{\Large\textbullet};}
+\fi&&&\ListeRelie[##1,2]\\}%
+ \end{tabular}%
+ \setcounter{NbRelie}{0}%
+}%
+
+%%%%%%%%%%%%%%%%%%
+%% QCM
+%%%%%%%%%%%%%%%%%%
+\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=Réponse,Alph=false,VF=false}
+\newlength{\LargeurQCM}
+\newcounter{QuestionQCM}
+\newcommand\QCM[2][]{%
+ \setcounter{QuestionQCM}{0}
+ \useKVdefault[ClesQCM]%
+ \setKV[ClesQCM]{#1}%
+ \setsepchar[*]{,*&}\ignoreemptyitems%
+ \readlist*\ListeQCM{#2}%
+ \ifboolKV[ClesQCM]{VF}{%
+ \setKV[ClesQCM]{Reponses=2}
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}&Vrai&Faux\\
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+ }\\
+ }%
+ \hline%
+ \end{tabular}
+ }{%
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\useKV[ClesQCM]{Nom} ##2}%
+ \\
+ }{}
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+ }\\
+ }%
+ \hline%
+ \end{tabular}%
+ }%
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%
+%%%% Somme des angles
+%%%%%%%%%%%%%%%%%%%%%
+
+\setKVdefault[ClesSommeAngle]{Detail=true,Figure=false,Isocele=false}%
+
+% On définit la figure à utiliser
+\def\MPFigureSommeAngle#1#2#3#4#5#6{
+ % #1 Premier sommet
+ % #2 Deuxième sommet
+ % #3 Troisième sommet
+ % #4 1er angle
+ % #5 2eme angle
+ % #6 0 isocèle / 1 pas isocèle
+ \ifluatex
+ \mplibcodeinherit{enable}
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair A,B,C,O,I;%
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(4,0);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ % on dessine à main levée :)
+ path triangle;
+ triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+ % pour marquer les angles
+ path cc;
+ cc=fullcircle scaled 1u;
+ % on marque les angles
+ picture MAngle;
+ MAngle=image(
+ draw (cc shifted A);
+ draw (cc shifted B);
+ draw (cc shifted C);
+ );
+ draw MAngle;
+ clip currentpicture to triangle;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ % on labelise
+ label(btex #1 etex,1.2[O,A]);
+ label(btex #2 etex,1.2[O,B]);
+ label(btex #3 etex,1.2[O,C]);
+ if #6=0:
+ if #4=#5:
+ marque_s:=marque_s/2;
+ draw Codelongueur(A,B,A,C,2);
+ marque_s:=marque_s*2;
+ label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+ % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+ label(btex ? etex,A+0.95u*unitvector(I-A));
+ else:
+% if (#4=180-#5-#4) or (#5=180-#5-#4):
+ marque_s:=marque_s/2;
+ draw Codelongueur(A,B,A,C,2);
+ marque_s:=marque_s*2;
+ label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
+ label(btex ? etex,B+0.95u*unitvector(I-B));
+ % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+ fi;
+ else:
+ label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+ label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+ label(btex ? etex,A+0.95u*unitvector(I-A));
+ fi;
+ %fi;
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ input PfC-Geometrie;
+ u:=1cm;
+ pair A,B,C,O,I;%
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(4,0);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ % on dessine à main levée :)
+ path triangle;
+ triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+ % pour marquer les angles
+ path cc;
+ cc=fullcircle scaled 1u;
+ % on marque les angles
+ picture MAngle;
+ MAngle=image(
+ draw (cc shifted A);
+ draw (cc shifted B);
+ draw (cc shifted C);
+ );
+ draw MAngle;
+ clip currentpicture to triangle;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ % on labelise
+ label(btex #1 etex,1.2[O,A]);
+ label(btex #2 etex,1.2[O,B]);
+ label(btex #3 etex,1.2[O,C]);
+ if #6=0:
+ if #4=#5:
+ marque_s:=marque_s/2;
+ draw Codelongueur(A,B,A,C,2);
+ marque_s:=marque_s*2;
+ label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+ % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+ label(btex ? etex,A+0.95u*unitvector(I-A));
+ else:
+ %if (#4=180-#5-#4) or (#5=180-#5-#4):
+ marque_s:=marque_s/2;
+ draw Codelongueur(A,B,A,C,2);
+ marque_s:=marque_s*2;
+ label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
+ label(btex ? etex,B+0.95u*unitvector(I-B));
+ % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+ fi;
+ else:
+ label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
+ label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
+ label(btex ? etex,A+0.95u*unitvector(I-A));
+ fi;
+ %fi;
+ \end{mpost}
+ \fi
+}
+
+\newcommand\RedactionSomme[4][]{%
+ % #1 : nom du triangle pA pB pC
+ % #2 : mesure de l'angle pApBpC
+ % #3 : mesure de l'angle pBpCpA
+ % la macro calculant la mesure de l'angle pCpApB
+ \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe.
+ \setKV[ClesSommeAngle]{#1}%On lit les arguments optionnels
+ % On récupère les noms des sommets.
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ % On rédige
+ Dans le triangle $\NomA\NomB\NomC$,\ifboolKV[ClesSommeAngle]{Isocele}{ isocèle en \NomA,}{} on a :%
+ \ifboolKV[ClesSommeAngle]{Isocele}{%
+ \ifx#4\bla\bla%
+ \begin{align*}%
+ \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ 2\times\ang{#3}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ \xdef\sommeangle{\fpeval{2*#3}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%
+ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}%
+ \end{align*}%
+ \xdef\ResultatAngle{\totalangle}%
+ \else%
+ \begin{align*}%
+ \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ 2\times\widehat{\NomA\NomB\NomC}+\ang{#4}&=\ang{180}\\%
+ \xdef\totalangle{\fpeval{180-#4}}%
+ \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{180}-\ang{#4}\\}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}%
+ \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}%
+ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}}%\\
+ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}\\}{}%
+ \end{align*}%
+ \xdef\ResultatAngle{\fpeval{0.5*(180-#4)}}%
+ \fi%
+ }{%
+ \begin{align*}%
+ \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ \ang{#3}+\ang{#4}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ \xdef\sommeangle{\fpeval{#3+#4}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
+ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%\\
+ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}%
+ \end{align*}%
+ \xdef\ResultatAngle{\totalangle}%
+ }%
+}%
+
+\newcommand\SommeAngles[4][]{%
+ % #1 : nom du triangle pA pB pC
+ % #2 : mesure de l'angle pApBpC
+ % #3 : mesure de l'angle pBpCpA
+ % la macro calculant la mesure de l'angle pCpApB
+ \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe.
+ \setKV[ClesSommeAngle]{#1}%On lit les arguments optionnels
+ % On récupère les noms des sommets.
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ % Figure ou pas ?
+ \ifboolKV[ClesSommeAngle]{Figure}{%
+ \begin{multicols}{2}%
+ {\em La figure est donnée à titre indicatif.}%
+ \ifx#3\bla\bla%
+ \xdef\Intermed{\fpeval{0.5*(180-#4)}}%
+ \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}\]%
+ \else%
+ \ifx#4\bla\bla%
+ \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}\]%
+ \else%
+ \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}\]%
+ \fi%
+ \fi%
+ \par\columnbreak\par%
+ % on rédige
+ \RedactionSomme[#1]{#2}{#3}{#4}%
+ \end{multicols}%
+ }{% on rédige
+ \RedactionSomme[#1]{#2}{#3}{#4}%
+ }%
+}%
+
+%%%%%%%%%%%%%%%%
+%% Le théorème de Pythagore
+%%%%%%%%%%%%%%%%
+% On définit le trousseau de clés optionnelles
+\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,Angle=0,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0}
+
+% On définit les figures à utiliser
+\def\MPFigurePytha#1#2#3#4#5#6{%
+ % #1 Premier sommet
+ % #2 Sommet de l'angle droit
+ % #3 troisième sommet
+ % #4 1ere longueur
+ % #5 2eme longueur
+ % #6 angle de rotation de la figure
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+ O=u*(2.5,2.5);
+ path cc;
+ cc=(fullcircle scaled 4u) shifted O;
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.9*length cc) of cc;
+ B=A rotatedabout(O,-120);
+ C=2[A,O];
+ % On tourne pour éventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#6);
+ B:=B rotatedabout(O,#6);
+ C:=C rotatedabout(O,#6);
+ % On définit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ draw D--E--F;
+ decalage=3mm;
+ if #4<#5 :
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex rotated angle(B-C),1/2[C,B]-decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi
+ else:
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(btex \num{#5} etex rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+ label(btex \num{#5} etex rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+ fi;
+ label(btex #3 etex,1.2[O,A]);
+ label(btex #2 etex,1.2[O,B]);
+ label(btex #1 etex,1.2[O,C]);
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+ O=u*(2.5,2.5);
+ path cc;
+ cc=(fullcircle scaled 4u) shifted O;
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.9*length cc) of cc;
+ B=A rotatedabout(O,-120);
+ C=2[A,O];
+ % On tourne pour éventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#6);
+ B:=B rotatedabout(O,#6);
+ C:=C rotatedabout(O,#6);
+ % On définit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ draw D--E--F;
+ decalage=3mm;
+ if #4<#5 :
+ if ypart(B)>ypart(O) :
+ label(LATEX("\num{"&decimal(#4)&"}") rotated
+ angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
+ label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(LATEX("\num{"&decimal(#4)&"}") rotated angle(B-C),1/2[C,B]-decalage*(unitvector(A-B)));
+ label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi
+ else:
+ if ypart(B)>ypart(O) :
+ label(LATEX("\num{"&decimal(#4)&"}") rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
+ else:
+ label(LATEX("\num{"&decimal(#4)&"}") rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+ label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+ fi;
+ label(btex #3 etex,1.2[O,A]);
+ label(btex #2 etex,1.2[O,B]);
+ label(btex #1 etex,1.2[O,C]);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureReciPytha#1#2#3#4#5#6#7{%
+ % #1 Premier sommet
+ % #2 Sommet de l'angle droit
+ % #3 troisième sommet
+ % #4 1ere longueur
+ % #5 2eme longueur
+ % #6 3eme longueur
+ % #7 angle de rotation de la figure
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+ O=u*(2.5,2.5);
+ path cc;
+ cc=(fullcircle scaled 4u) shifted O;
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.8*length cc) of cc;
+ B=A rotatedabout(O,-100);
+ C=2[A,O];
+ % On tourne pour éventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#7);
+ B:=B rotatedabout(O,#7);
+ C:=C rotatedabout(O,#7);
+ % On définit l'angle droit
+ % D-B=7*unitvector(C-B);
+ % F-B=7*unitvector(A-B);
+ % E-D=F-B;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ % draw D--E--F;
+ decalage=3mm;
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(btex \num{#5} etex rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
+ label(btex \num{#6} etex rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+ label(btex \num{#5} etex rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+ label(btex \num{#6} etex rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
+ fi;
+ label(btex #1 etex,1.2[O,A]);
+ label(btex #2 etex,1.2[O,B]);
+ label(btex #3 etex,1.2[O,C]);
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit
+ O=u*(2.5,2.5);
+ path cc;
+ cc=(fullcircle scaled 4u) shifted O;
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.8*length cc) of cc;
+ B=A rotatedabout(O,-100);
+ C=2[A,O];
+ % On tourne pour éventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#7);
+ B:=B rotatedabout(O,#7);
+ C:=C rotatedabout(O,#7);
+ % On définit l'angle droit
+ % D-B=7*unitvector(C-B);
+ % F-B=7*unitvector(A-B);
+ % E-D=F-B;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ % draw D--E--F;
+ decalage=3mm;
+ if ypart(B)>ypart(O) :
+ label(LATEX("\num{"&decimal(#4)&"}") rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
+ label(LATEX("\num{"&decimal(#6)&"}") rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(LATEX("\num{"&decimal(#4)&"}") rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+ label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+ label(LATEX("\num{"&decimal(#6)&"}") rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
+ fi;
+ label(btex #1 etex,1.2[O,A]);
+ label(btex #2 etex,1.2[O,B]);
+ label(btex #3 etex,1.2[O,C]);
+ \end{mpost}
+ \fi
+}
+
+\newcommand{\Pythagore}[5][]{%
+ % #1 Paramètres sous forme de clés
+ % #2 Nom "complet" du triangle : ABC par exemple
+ % #3 Première longueur
+ % #4 Deuxième longueur
+ % #5 Troisième longueur (éventuellement vide)
+ \useKVdefault[ClesPythagore]%obligatoire car la macro n'est pas dans un groupe.
+ \setKV[ClesPythagore]{#1}%On lit les arguments optionnels
+ \ifboolKV[ClesPythagore]{Reciproque}{%
+ % On retient les noms des sommets
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ % on stocke les valeurs données
+ \opcopy{#3}{A1}%
+ \opcopy{#4}{A2}%
+ \opcopy{#5}{A3}%
+ % On trace une figure ou pas ?
+ \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+ \begin{multicols}{2}
+ {\em La figure est donnée à titre indicatif.}%
+ \[\MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}\]%
+ \par\columnbreak\par%
+ % on rédige
+ Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand côté.%
+ \ifboolKV[ClesPythagore]{ReciColonnes}{%
+ \[
+ \begin{array}{cccc|cccc}
+ \NomA\NomC^2&&&&&\NomA\NomB^2&+&\NomB\NomC^2\\
+ \opexport{A1}{\Aun}\num{\Aun}^2&&&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
+ \opmul*{A1}{A1}{a1}&&&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
+ \opexport{a1}{\Aun}\num{\Aun}&&&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
+ \end{array}
+ \]
+ }{%
+ \[\left.
+ \begin{array}{l}
+ \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\
+ \\
+ \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\
+ \end{array}
+ \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
+ \]
+ }
+ \ifboolKV[ClesPythagore]{Egalite}{%
+ \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore est vérifiée. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
+ \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore n'est pas vérifiée. Donc le triangle $#2$ n'est pas rectangle.\fi%
+ }{%
+ \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle
+ en $\NomB$ d'après la réciproque du théorème de Pythagore.\fi%
+ \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
+ triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'après la contraposée du théorème de Pythagore.}\fi%
+ }
+ \end{multicols}
+ }{%
+ Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand côté.%
+ \ifboolKV[ClesPythagore]{ReciColonnes}{%
+ \[
+ \begin{array}{cccc|cccc}
+ \NomA\NomC^2&&&&&\NomA\NomB^2&+&\NomB\NomC^2\\
+ \opexport{A1}{\Aun}\num{\Aun}^2&&&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
+ \opmul*{A1}{A1}{a1}&&&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
+ \opexport{a1}{\Aun}\num{\Aun}&&&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
+ \end{array}
+ \]
+ }{%
+ \[\left.
+ \begin{array}{l}
+ \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\
+ \\
+ \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\
+ \end{array}
+ \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
+ \]
+ }
+ \ifboolKV[ClesPythagore]{Egalite}{%
+ \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore est vérifiée. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
+ \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore n'est pas vérifiée. Donc le triangle $#2$ n'est pas rectangle.\fi%
+ }{%
+ \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle
+ en $\NomB$ d'après la réciproque du théorème de Pythagore.\fi%
+ \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
+ triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'après la contraposée du théorème de Pythagore.}\fi%
+ }
+ }
+ }{%
+ % [xlop] paramètres de calcul
+ \opcopy{#3}{A1}%
+ \opcopy{#4}{A2}%
+ \opcopy{\useKV[ClesPythagore]{Precision}}{pres}%
+ % On retient les noms des sommets
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ % On trace une figure ou pas ?
+ \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+ \begin{multicols}{2}%
+ {\em La figure est donnée à titre indicatif.}%
+ \[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\]
+ \par\columnbreak\par%
+ % On démarre la résolution
+ \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'égalité de Pythagore est vérifiée :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
+ }%
+ \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
+ \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+ \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+ \begin{align*}
+ \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+ \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+ \\
+ \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
+ \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+ }
+ \end{align*}
+ }{%\else%
+ \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+ \begin{align*}
+ \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+ \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+ \\
+ \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
+ \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+ }
+ \end{align*}
+ }%\fi%
+ \end{multicols}
+ }{%
+ % On démarre la résolution
+ \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'égalité de Pythagore est vérifiée :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
+ }%
+ \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
+ \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+ \begin{align*}
+ \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+ \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+ \\
+ \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
+ \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+ }
+ \end{align*}
+ }{%\else
+ \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+ \ifboolKV[ClesPythagore]{Soustraction}{%
+ \begin{align*}
+ \NomA\NomB^2&=\NomA\NomC^2-\NomB\NomC^2\\
+ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}-\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+ \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+ \\
+ \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
+ \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+ }
+ \end{align*}
+ }{%
+ \begin{align*}
+ \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+ \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+ \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+ \\
+ \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
+ \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+ }
+ \end{align*}
+ }%
+ }%\fi%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%%%%%
+%% Distributivité
+%%%%%%%%%%%%%%%%%
+% https://tex.stackexchange.com/questions/168972/draw-arrows-to-show-multiplication-pattern-distributive-property/169278?noredirect=1
+\newcommand{\Tikzmark}[1]{%
+ \tikz[remember picture,baseline,inner sep=0pt]{%
+ \node[name=Distri-\theNbDistri,anchor=base] {${#1}$};}%
+ \stepcounter{NbDistri}%
+}%
+
+\newcommand{\DrawArrow}{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-2.north);
+ \draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-3.north);
+ \draw[-stealth,out=-50,in=-140,DCFlechesb,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-2.south);
+ \draw[-stealth,out=-50,in=-140,DCFlechesb!50,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-3.south);
+ \end{tikzpicture}
+}
+
+\newcommand{\DrawArrowSimple}[1]{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-2.north);
+ \draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-3.north);
+ \end{tikzpicture}
+}
+
+\newcommand{\DrawArrowSimpleRenverse}[1]{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \draw[-stealth,out=140,in=50,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-0.north);
+ \draw[-stealth,out=140,in=50,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-1.north);
+ \end{tikzpicture}
+}
+
+\newcounter{NbDistri}%
+\setcounter{NbDistri}{0}%
+
+\newcounter{NbCalculDistri}%Pour compter combien de distributivité il
+% y a dans un "seul calcul".
+\setcounter{NbCalculDistri}{0}
+
+\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0}%,AideAdd=false
+ %inutile ?
+
+\newcommand\Affichage[4][]{%
+ \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
+ \ensuremath{%
+ % partie du x^2
+ \xintifboolexpr{#2=0}{}{\xintifboolexpr{#2=1}{}{\xintifboolexpr{#2=-1}{-}{\num{#2}}}\LETTRE^2}%
+ % partie du x
+ \xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}\xintifboolexpr{#3=1}{}{\num{#3}}}{%
+ \xintifboolexpr{#2=0}{\xintifboolexpr{#3=-1}{-}{\num{#3}}}{\xintifboolexpr{#3=-1}{-}{-\num{\fpeval{abs(#3)}}}}%
+ }\LETTRE}%
+ % partie du nombre
+ \xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{}{+}}{+}\num{#4}}{%
+ \xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}%
+ %
+ }%
+}%
+
+\xdef\SommeA{0}%
+\xdef\SommeB{0}%
+\xdef\SommeC{0}%
+
+\newcommand{\Distri}[5][]{%
+ \ensuremath{%
+ \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
+ \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
+ % 80
+ \setcounter{NbCalculDistri}{0}%
+ % fin 80
+ }{}%
+ \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
+ \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
+ \colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
+ \colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
+ \DistriEchange[#1]{#2}{#3}{#4}{#5}%
+ }{%
+ \ifboolKV[ClesDistributivite]{Remarquable}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+ \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
+ }{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ %80
+ \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ \stepcounter{NbCalculDistri}%
+ % fin 80
+ \ifx\bla#4\bla%
+ \xdef\Multi{\fpeval{#2*#2}}%
+ \xdef\Multij{\fpeval{#2*#3}}%
+ \xdef\Multik{\fpeval{#3*#2}}%
+ \xdef\Multil{\fpeval{#3*#3}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ \Affichage{\Multi}{\Multim}{\Multil}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
+ \else%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ \Affichage{\Multi}{\Multim}{\Multil}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
+ \fi%
+ }{}%
+ }{%
+ \ifboolKV[ClesDistributivite]{Numerique}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
+ \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+ }{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
+ \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+ }{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+ }%
+ }%
+ }{%
+ \ifboolKV[ClesDistributivite]{All}{%
+ \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
+ \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
+ \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+ {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
+ \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
+ }{%
+ % Etape 1
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+ \xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
+ %
+ \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
+ \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
+ %
+ \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+ \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+ \ifboolKV[ClesDistributivite]{Fleches}{%
+ \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+ \xintifboolexpr{\Multi=0}{%
+ \xdef\Multij{\fpeval{#2*#3}}%\relax
+ \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
+ }{%
+ \DrawArrow%
+ }%
+ }{}\setcounter{NbDistri}{0}%
+ }{}
+ % Etape 2
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
+ }
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xintifboolexpr{\Multij=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xintifboolexpr{\Multik=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ }{}%
+ % Etape 3
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ %80
+ \stepcounter{NbCalculDistri}%
+ % fin 80
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ %80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
+ %fin 80
+ \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ }%
+ }{%
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ }%
+ \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+ }{}%
+ % Etape 4
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ %80
+ \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ \stepcounter{NbCalculDistri}%
+ %fin 80
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ %80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
+ \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+ }%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%\Affichage{\Multi}{\Multim}{\Multil}%
+ % fin 80
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+\newcommand{\Resultat}[1][]{%
+ \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \ensuremath{%
+ \Affichage{\SommeA}{\SommeB}{\SommeC}
+ }
+}
+
+\newcommand\AffichageEchange[4][]{%
+ \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
+ \ensuremath{%
+ % partie du nombre
+ \xintifboolexpr{#2=0}{}{\num{#2}}%
+ % partie du x
+ \xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}\xintifboolexpr{#3=1}{}{\num{#3}}}{%
+ \xintifboolexpr{#2=0}{\xintifboolexpr{#3=-1}{-}{\num{#3}}}{\xintifboolexpr{#3=-1}{-}{-\num{\fpeval{abs(#3)}}}}
+ }\LETTRE}%
+ % partie du x^2
+ \xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{}{+}}{+}\xintifboolexpr{#4=1}{}{\num{#4}}}{%
+ \xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}\LETTRE^2}%
+ }%
+}%
+
+\newcommand{\DistriEchange}[5][]{%
+ \ensuremath{%
+ \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
+ \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
+ % 80
+ \setcounter{NbCalculDistri}{0}%
+ % fin 80
+ }{}%
+ \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
+ \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
+ \colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
+ \colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
+ \ifboolKV[ClesDistributivite]{Remarquable}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\ifx\bla#4\bla(\AffichageEchange{#2}{#3}{0})^2\else(\AffichageEchange{#2}{#3}{0})(\AffichageEchange{#4}{#5}{0})\fi
+ }{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+ \ifx\bla#4\bla\xintifboolexpr{#3>0}{%
+ \num{#2}^2+2\times\num{#2}\times\xintifboolexpr{#3=1}{}{\num{#3}}\useKV[ClesDistributivite]{Lettre}+
+ \xintifboolexpr{#3=1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3=1}{}{)}^2%
+ }{%
+ \num{#2}^2-2\times\num{#2}\times\xintifboolexpr{#3=-1}{}{\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}+
+ \xintifboolexpr{#3=-1}{}{(\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3=-1}{}{)}^2%
+ }%
+ \else\num{#2}^2-\xintifboolexpr{#3=1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3=1}{}{)}^2%
+ \fi%
+ }{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ \stepcounter{NbCalculDistri}%
+ % fin 80
+ \ifx\bla#4\bla%
+ \xdef\Multi{\fpeval{#2*#2}}%
+ \xdef\Multij{\fpeval{#2*#3}}%
+ \xdef\Multik{\fpeval{#3*#2}}%
+ \xdef\Multil{\fpeval{#3*#3}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ \AffichageEchange{\Multi}{\Multim}{\Multil}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#3*#3}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#2*#2}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#3*#3}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#2*#2}}}{}%
+ \else%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ \AffichageEchange{\Multi}{\Multim}{\Multil}%
+ }
+ % à faire
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#3*#5}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#2*#4}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#3*#5}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#2*#4}}}{}%
+ %
+ \fi%
+ }{}%
+ }{%
+ \ifboolKV[ClesDistributivite]{Numerique}{%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
+ % \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+ % }{%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
+ % \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+ % }{%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
+ % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+ % }%
+ % }%
+ }{%
+ \ifboolKV[ClesDistributivite]{All}{%
+ \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
+ \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
+ \xdef\ValeurEchange{\useKV[ClesDistributivite]{Echange}}
+ \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+ {\NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=##1]{#2}{#3}{#4}{#5}\\}%
+ \NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=\NomFin]{#2}{#3}{#4}{#5}%
+ }{%
+ % Etape 1
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1||\useKV[ClesDistributivite]{Echange}=3}{%
+ \xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#3=0}{%
+ }{(}}\Tikzmark{\Affichage[#1]{0}{0}{#2}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{\fpeval{abs(#3)}}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#3=0}{%
+ }{)}}%
+ }{
+ \xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#3=0}{%
+ }{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#3=0}{%
+ }{)}}%
+ }%
+ %
+ \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
+ \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
+ %
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2||\useKV[ClesDistributivite]{Echange}=3}{%
+ \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+ \Tikzmark{\AffichageEchange[#1]{#4}{0}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{-}{}}\Tikzmark{\AffichageEchange[#1]{0}{\fpeval{abs(#5)}}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+ }{%
+ \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+ \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+ }%
+ \ifboolKV[ClesDistributivite]{Fleches}{%
+ \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+ \xintifboolexpr{\Multi=0}{%
+ \xdef\Multij{\fpeval{#2*#3}}%\relax
+ \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}
+ }{%
+ \DrawArrow
+ }%
+ }{}\setcounter{NbDistri}{0}%
+ }{}%
+ % Etape 2
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xintifboolexpr{\Multij=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xintifboolexpr{\Multik=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ }{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xintifboolexpr{\Multij=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xintifboolexpr{\Multik=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ }{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xintifboolexpr{\Multij=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xintifboolexpr{\Multik=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
+ }%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ }{}
+ }{}
+ % Etape 3
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ % 80
+ \stepcounter{NbCalculDistri}%
+ % fin 80
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
+ %fin 80\AffichageEchange{0}{\Multi}{0}%pas de soulignement de réduction ici
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{\Multij}{0}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{0}{\Multik}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
+ \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%
+ }{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
+ %fin 80\AffichageEchange{0}{\Multi}{0}%pas de soulignement de réduction ici
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{0}{\Multij}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{\Multik}{0}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
+ \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
+ }{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{\Multi}{0}{0})}{\AffichageEchange{\Multi}{0}{0}}}{\AffichageEchange{\Multi}{0}{0}}%
+ %fin 80\AffichageEchange{\Multi}{0}{0}%pas de soulignement de réduction ici
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
+ }{}%
+ }{}%fin etape3
+ % Etape 4
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont redéfinis pour pouvoir envisager la somme de deux
+ %% expressions à développer
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ \stepcounter{NbCalculDistri}%
+ %fin 80
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
+ \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multiko{\fpeval{-\Multik}}%
+ \xdef\Multimo{\fpeval{-\Multim}}%
+ \xdef\Multijo{\fpeval{-\Multij}}%
+ \xintifboolexpr{\Multiko=0}{}{\xintifboolexpr{\Multiko<0}{(}{}\Affichage{\Multiko}{0}{0}\xintifboolexpr{\Multiko<0}{)}{}}%
+ \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+ \xintifboolexpr{\Multijo=0}{}{\xintifboolexpr{\Multijo>0}{+}{+(}\Affichage{0}{0}{\Multijo}\xintifboolexpr{\Multijo<0}{)}{}}%
+ }{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multik<0}{(\Affichage{\Multik}{0}{0})}{\Affichage{\Multik}{0}{0}}}{\Affichage{\Multik}{0}{0}}%
+ \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+ }%
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multij<0}{-\Affichage{0}{0}{\fpeval{-\Multij}}}{+\Affichage{0}{0}{\Multij}}}%
+ % fin 80
+ }%
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%
+ }{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
+ \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multijo{\fpeval{-\Multij}}%
+ \xdef\Multimo{\fpeval{-\Multim}}%
+ \xdef\Multiko{\fpeval{-\Multik}}%
+ \xintifboolexpr{\Multijo=0}{}{\xintifboolexpr{\Multijo<0}{(}{}\Affichage{\Multijo}{0}{0}\xintifboolexpr{\Multijo<0}{)}{}}%
+ \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+ \xintifboolexpr{\Multiko=0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}%
+ }{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{(\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}%
+ \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+ }%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multik<0}{-\Affichage{0}{0}{\fpeval{-\Multik}}}{+\Affichage{0}{0}{\Multik}}}%
+ % fin 80\Affichage{\Multij}{\Multim}{\Multik}%
+ }%
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
+ }{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multilo{\fpeval{-\Multil}}%
+ \xdef\Multimo{\fpeval{-\Multim}}%
+ \xdef\Multio{\fpeval{-\Multi}}%
+ \xintifboolexpr{\Multilo=0}{}{\xintifboolexpr{\Multilo<0}{(}{}\Affichage{\Multilo}{0}{0}\xintifboolexpr{\Multilo<0}{)}{}}%
+ \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+ \xintifboolexpr{\Multio=0}{}{\xintifboolexpr{\Multio>0}{+}{+(}\Affichage{0}{0}{\Multio}\xintifboolexpr{\Multio<0}{)}{}}%
+ }{%
+ % 80
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multil<0}{(\Affichage{\Multil}{0}{0})}{\Affichage{\Multil}{0}{0}}}{\Affichage{\Multil}{0}{0}}%
+ \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+ }%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{-\Affichage{0}{0}{\fpeval{-\Multi}}}{+\Affichage{0}{0}{\Multi}}}%
+ % fin 80\Affichage{\Multil}{\Multim}{\Multi}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
+ }{}%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%%%
+%Nombre Premier
+%%%%%%%%%%%%%%%
+\setKVdefault[ClesNombrePremier]{Tableau=false,TableauVertical=false,TableauVerticalVide=false,Exposant=false,Longue=false,All=false,Arbre=false,ArbreVide=false,ArbreComplet=false,Diviseurs=false}
+
+\newcommand\Decomposition[2][]{%
+ \useKVdefault[ClesNombrePremier]%
+ \setKV[ClesNombrePremier]{#1}%
+ \ifboolKV[ClesNombrePremier]{Tableau}{\NombrePremier{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{TableauVertical}{\NombrePremierVertical{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{TableauVerticalVide}{\NombrePremierVerticalVide{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{Exposant}{\PremierExposant{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{Longue}{\PremierLong{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{All}{\NombrePremierExposant{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{Arbre}{\MPArbre{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{ArbreComplet}{\MPArbreComplet{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{Diviseurs}{\ListeDiviseur{#2}}{}%
+ \ifboolKV[ClesNombrePremier]{ArbreVide}{\MPArbreVide{#2}}{}%
+}
+
+\def\MPArbre#1{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ numeric depart;
+ pair Ancre[];
+ numeric decalage;
+ decalage=10mm;
+
+ vardef PremierSimple(expr NB)=
+ b:=2;
+ depart:=NB;
+ if Estcepremier(depart)=false:
+ forever:
+ if (depart mod b)=0:
+ Ancre[k+1]-Ancre[k]=(-decalage*0.5,-decalage);
+ Ancre[k+2]-Ancre[k+1]=(decalage,0);
+ depart:=depart div b;
+ label(TEX("\num{"&decimal(b)&"}"),Ancre[k+1]);
+ label(TEX("\num{"&decimal(depart)&"}"),Ancre[k+2]);
+ draw 1/5[Ancre[k],Ancre[k+1]]--4/5[Ancre[k],Ancre[k+1]];
+ draw 1/5[Ancre[k],Ancre[k+2]]--4/5[Ancre[k],Ancre[k+2]];
+ k:=k+2;
+ racine:=depart;
+ depart:=1;
+ else:
+ b:=b+1;
+ fi;
+ exitif depart=1;
+ endfor;
+ else:
+ racine:=1;
+ fi;
+enddef;
+
+vardef Estcepremier(expr NBa)=
+ boolean $;
+ c:=2;
+ departa:=NBa;
+ test:=1;
+ $=true;
+ if departa=1:
+ $:=false;
+ else:
+ forever:
+ if (departa mod c)=0:
+ departa:=departa div c;
+ test:=test+1;
+ else:
+ c:=c+1;
+ fi;
+ exitif departa=1;
+ endfor;
+ fi;
+ if test=2:
+ $:=true
+ else:
+ $:=false;
+ fi;
+ $
+ enddef;
+ k:=0;
+ Ancre0:=(0,0);
+ racine:=#1;
+
+ label(btex \num{#1} etex,(0,0));
+ forever:
+ PremierSimple(racine);
+ exitif racine=1;
+ endfor;
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ numeric depart;
+ pair Ancre[];
+ numeric decalage;
+ decalage=10mm;
+
+ vardef PremierSimple(expr NB)=
+ b:=2;
+ depart:=NB;
+ if Estcepremier(depart)=false:
+ forever:
+ if (depart mod b)=0:
+ Ancre[k+1]-Ancre[k]=(-decalage*0.5,-decalage);
+ Ancre[k+2]-Ancre[k+1]=(decalage,0);
+ depart:=depart div b;
+ label(LATEX("\num{"&decimal(b)&"}"),Ancre[k+1]);
+ label(LATEX("\num{"&decimal(depart)&"}"),Ancre[k+2]);
+ draw 1/5[Ancre[k],Ancre[k+1]]--4/5[Ancre[k],Ancre[k+1]];
+ draw 1/5[Ancre[k],Ancre[k+2]]--4/5[Ancre[k],Ancre[k+2]];
+ k:=k+2;
+ racine:=depart;
+ depart:=1;
+ else:
+ b:=b+1;
+ fi;
+ exitif depart=1;
+ endfor;
+ else:
+ racine:=1;
+ fi;
+enddef;
+
+vardef Estcepremier(expr NBa)=
+ boolean $;
+ c:=2;
+ departa:=NBa;
+ test:=1;
+ $=true;
+ if departa=1:
+ $:=false;
+ else:
+ forever:
+ if (departa mod c)=0:
+ departa:=departa div c;
+ test:=test+1;
+ else:
+ c:=c+1;
+ fi;
+ exitif departa=1;
+ endfor;
+ fi;
+ if test=2:
+ $:=true
+ else:
+ $:=false;
+ fi;
+ $
+ enddef;
+
+ k:=0;
+ Ancre0:=(0,0);
+ racine:=#1;
+ label(LATEX("\num{"&decimal(racine)&"}"),(0,0));
+ forever:
+ PremierSimple(racine);
+ exitif racine=1;
+ endfor;
+\end{mpost}
+\fi
+}
+
+\def\MPArbreComplet#1{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ beginfig(1);
+ numeric depart;
+ pair Ancre[];
+ numeric decalage;
+ decalage=7.5mm;
+
+vardef NbEtape(expr nb)=
+ b:=2;
+ depart:=nb;
+ etape:=0;
+ Stock[0][0]=depart;
+ forever:
+ if (depart mod b)=0:
+ etape:=etape+1;
+ if etape=1:
+ Stock[etape][0]=b;
+ Stock[etape][etape]:=depart div b;
+ else:
+ for k=0 upto etape-2:
+ Stock[etape][k]:=Stock[etape-1][k];
+ endfor;
+ Stock[etape][etape-1]:=b;
+ Stock[etape][etape]:=depart div b;
+ fi;
+ depart:=depart div b;
+ else:
+ b:=b+1;
+ fi;
+ exitif depart=1;
+ endfor;
+ etape
+enddef;
+
+dx:=1cm;
+dy:=1cm;
+
+pair N[][];
+
+vardef Positions(expr Step)=
+ for k=0 upto (Step-1):
+ for l=0 upto k:
+ N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy);
+ label(TEX("\num{"&decimal(Stock[k][l])&"}"),N[k][l]);
+ endfor;
+ for l=0 upto k-1:
+ label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]);
+ endfor;
+ endfor;
+ for k=0 upto (Step-1):
+ for l=0 upto (k-1):
+ draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]];
+ endfor;
+ if k>0:
+ draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]];
+ fi;
+ endfor;
+ enddef;
+
+ Positions(NbEtape(#1));
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ numeric depart;
+pair Ancre[];
+numeric decalage;
+decalage=7.5mm;
+
+vardef NbEtape(expr nb)=
+ b:=2;
+ depart:=nb;
+ etape:=0;
+ Stock[0][0]=depart;
+ forever:
+ if (depart mod b)=0:
+ etape:=etape+1;
+ if etape=1:
+ Stock[etape][0]=b;
+ Stock[etape][etape]:=depart div b;
+ else:
+ for k=0 upto etape-2:
+ Stock[etape][k]:=Stock[etape-1][k];
+ endfor;
+ Stock[etape][etape-1]:=b;
+ Stock[etape][etape]:=depart div b;
+ fi;
+ depart:=depart div b;
+ else:
+ b:=b+1;
+ fi;
+ exitif depart=1;
+ endfor;
+ etape
+enddef;
+
+dx:=1cm;
+dy:=1cm;
+
+pair N[][];
+
+vardef Positions(expr Step)=
+ for k=0 upto (Step-1):
+ for l=0 upto k:
+ N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy);
+ label(LATEX("\num{"&decimal(Stock[k][l])&"}"),N[k][l]);
+ endfor;
+ for l=0 upto k-1:
+ label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]);
+ endfor;
+ endfor;
+ for k=0 upto (Step-1):
+ for l=0 upto (k-1):
+ draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]];
+ endfor;
+ if k>0:
+ draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]];
+ fi;
+ endfor;
+ enddef;
+
+ Positions(NbEtape(#1));
+ \end{mpost}
+ \fi
+}
+
+\def\MPArbreVide#1{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ numeric depart;
+ pair Ancre[];
+ numeric decalage;
+ decalage=7.5mm;
+
+vardef NbEtape(expr nb)=
+ b:=2;
+ depart:=nb;
+ etape:=0;
+ Stock[0][0]=depart;
+ forever:
+ if (depart mod b)=0:
+ etape:=etape+1;
+ if etape=1:
+ Stock[etape][0]=b;
+ Stock[etape][etape]:=depart div b;
+ else:
+ for k=0 upto etape-2:
+ Stock[etape][k]:=Stock[etape-1][k];
+ endfor;
+ Stock[etape][etape-1]:=b;
+ Stock[etape][etape]:=depart div b;
+ fi;
+ depart:=depart div b;
+ else:
+ b:=b+1;
+ fi;
+ exitif depart=1;
+ endfor;
+ etape
+enddef;
+
+dx:=1cm;
+dy:=1cm;
+
+pair N[][];
+
+vardef Positions(expr Step)=
+
+ for k=0 upto (Step-1):
+ for l=0 upto k:
+ N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy);
+ endfor;
+ for l=0 upto k-1:
+ label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]);
+ endfor;
+ endfor;
+ for k=0 upto (Step-1):
+ for l=0 upto (k-1):
+ draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]];
+ endfor;
+ if k>0:
+ draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]];
+ fi;
+ endfor;
+ label(TEX("\num{"&decimal(Stock[0][0])&"}"),N[0][0]);
+ enddef;
+
+ Positions(NbEtape(#1));
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ numeric depart;
+ pair Ancre[];
+numeric decalage;
+decalage=7.5mm;
+
+vardef NbEtape(expr nb)=
+ b:=2;
+ depart:=nb;
+ etape:=0;
+ Stock[0][0]=depart;
+ forever:
+ if (depart mod b)=0:
+ etape:=etape+1;
+ if etape=1:
+ Stock[etape][0]=b;
+ Stock[etape][etape]:=depart div b;
+ else:
+ for k=0 upto etape-2:
+ Stock[etape][k]:=Stock[etape-1][k];
+ endfor;
+ Stock[etape][etape-1]:=b;
+ Stock[etape][etape]:=depart div b;
+ fi;
+ depart:=depart div b;
+ else:
+ b:=b+1;
+ fi;
+ exitif depart=1;
+ endfor;
+ etape
+enddef;
+
+dx:=1cm;
+dy:=1cm;
+
+pair N[][];
+
+vardef Positions(expr Step)=
+
+ for k=0 upto (Step-1):
+ for l=0 upto k:
+ N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy);
+ endfor;
+ for l=0 upto k-1:
+ label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]);
+ endfor;
+ endfor;
+ for k=0 upto (Step-1):
+ for l=0 upto (k-1):
+ draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]];
+ endfor;
+ if k>0:
+ draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]];
+ fi;
+ endfor;
+ label(LATEX("\num{"&decimal(Stock[0][0])&"}"),N[0][0]);
+ enddef;
+
+ Positions(NbEtape(#1));
+ \end{mpost}
+ \fi
+}
+
+\newcount\premier
+
+\newcommand{\NombrePremier}[1]{%écrire la décomposition complète
+ % #1 le nombre premier à tester
+ \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f%
+ \anp=#1\relax
+ \bnp=2\relax
+ \premier=-1\relax
+ % Pour déterminer le nombre d'étapes
+ \whiledo{\anp > 1}{%
+ \modulo{\the\anp}{\the\bnp}
+ \ifnum\remainder=0\relax
+ \global\premier=\numexpr\premier+1\relax
+ \cnp=\numexpr\anp/\bnp\relax
+ \anp=\cnp\relax
+ \else%
+ \bnp=\numexpr\bnp+1\relax%
+ \fi%
+ }
+ \ifnum\premier=0
+ Le nombre \num{#1} est un nombre premier.
+ \else
+ \begin{align*}
+ \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\xintifboolexpr{##1<\premier}{\\}{}}%
+ \end{align*}
+ \fi
+}
+
+\newcommand{\NombrePremierVertical}[1]{%écrire la décomposition complète
+ % #1 le nombre premier à tester
+ \newcount\anpv\newcount\bnpv\newcount\cnpv%\newcount\e\newcount\f%
+ \anpv=#1\relax
+ \bnpv=2\relax
+ \premier=-1\relax
+ % Pour déterminer le nombre d'étapes
+ \whiledo{\anpv > 1}{%
+ \modulo{\the\anpv}{\the\bnpv}
+ \ifnum\remainder=0\relax
+ \global\premier=\numexpr\premier+1\relax
+ \cnpv=\numexpr\anpv/\bnpv\relax
+ \anpv=\cnpv\relax
+ \else%
+ \bnpv=\numexpr\bnpv+1\relax%
+ \fi%
+ }
+ \ifnum\premier=0
+ Le nombre \num{#1} est un nombre premier.
+ \else
+ \begin{tabular}{c|c}
+ \xintFor* ##1 in {\xintSeq {0}{\premier}}\do
+ {\PremierMultipleVide{#1}{##1}&\xdef\Etape{\fpeval{##1+1}}\PremierDiviseurVide{#1}{\Etape}
+ \xintifboolexpr{##1<\premier}{\\}{\\1\\}}%
+ \end{tabular}
+ \fi
+}
+
+\newcommand{\PremierDiviseurVide}[2]{%
+ %#1 : le nombre entier à tester
+ %#2 : le nombre d'étapes à effectuer
+ \newcount\anpvv\newcount\bnpvv\newcount\cnpvv\newcount\dnpvv%
+ \ensuremath{%
+ \anpvv=#1\relax
+ \bnpvv=2\relax
+ \dnpvv=0\relax%
+ \whiledo{\anpvv > 1}{%
+ \whiledo{\dnpvv < \number#2}{%
+ \modulo{\the\anpvv}{\the\bnpvv}
+ \ifnum\remainder=0\relax
+ \dnpvv=\numexpr\dnpvv+1\relax
+ \cnpvv=\numexpr\anpvv/\bnpvv\relax
+ \anpvv=\cnpvv\relax
+ %\num{\the\bnpvv}%
+ \else%
+ \bnpvv=\numexpr\bnpvv+1\relax%
+ \fi%
+ }
+ \num{\the\bnpvv}%
+ \anpvv=1%
+ }
+ }
+}
+
+\newcommand{\PremierMultipleVide}[2]{%
+ %#1 : le nombre entier à tester
+ %#2 : le nombre d'étapes à effectuer
+ \newcount\anpmv\newcount\bnpmv\newcount\cnpmv\newcount\dnpmv%
+ \ensuremath{%
+ \anpmv=#1\relax
+ \bnpmv=2\relax
+ \dnpmv=0\relax%
+ \whiledo{\anpmv > 1}{%
+ \whiledo{\dnpmv < \number#2}{%
+ \modulo{\the\anpmv}{\the\bnpmv}
+ \ifnum\remainder=0\relax
+ \dnpmv=\numexpr\dnpmv+1\relax
+ \cnpmv=\numexpr\anpmv/\bnpmv\relax
+ \anpmv=\cnpmv\relax
+ %\num{\the\bnpmv}
+ \else%
+ \bnpmv=\numexpr\bnpmv+1\relax%
+ \fi%
+ }
+ \num{\the\anpmv}%
+ \anpmv=1%
+ }
+ }
+}
+
+\newcommand{\NombrePremierVerticalVide}[1]{%écrire la décomposition complète
+ % #1 le nombre premier à tester
+ \newcount\anpv\newcount\bnpv\newcount\cnpv%\newcount\e\newcount\f%
+ \anpv=#1\relax
+ \bnpv=2\relax
+ \premier=-1\relax
+ % Pour déterminer le nombre d'étapes
+ \whiledo{\anpv > 1}{%
+ \modulo{\the\anpv}{\the\bnpv}
+ \ifnum\remainder=0\relax
+ \global\premier=\numexpr\premier+1\relax
+ \cnpv=\numexpr\anpv/\bnpv\relax
+ \anpv=\cnpv\relax
+ \else%
+ \bnpv=\numexpr\bnpv+1\relax%
+ \fi%
+ }
+ \ifnum\premier=0
+ Le nombre \num{#1} est un nombre premier.
+ \else
+ \renewcommand{\arraystretch}{1.5}
+ \begin{tabular}{c|c}
+ \PremierMultipleVide{#1}{0}&\hbox to1cm{\dotfill}\\
+ \xintFor* ##1 in {\xintSeq {1}{\premier}}\do
+ {\hbox to1cm{\dotfill}&\hbox
+ to1cm{\dotfill}\xintifboolexpr{##1<\premier}{\\}{\\\hbox
+ to1cm{\dotfill}\\}}%
+ \end{tabular}
+ \renewcommand{\arraystretch}{1}
+ \fi
+}
+
+\newcommand{\NombrePremierExposant}[1]{%écrire la décomposition
+ % complète
+ \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f%
+ % #1 le nombre premier à tester
+ \anp=#1\relax%
+ \bnp=2\relax%
+ \premier=-1\relax%
+ % Pour déterminer le nombre d'étapes
+ \whiledo{\anp > 1}{%
+ \modulo{\the\anp}{\the\bnp}
+ \ifnum\remainder=0\relax%
+ \global\premier=\numexpr\premier+1\relax%
+ \cnp=\numexpr\anp/\bnp\relax%
+ \anp=\cnp\relax%
+ \else%
+ \bnp=\numexpr\bnp+1\relax%
+ \fi%
+ }
+ \ifnum\premier=0%
+ Le nombre \num{#1} est un nombre premier.%
+ \else%
+ \begin{align*}
+ \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\\}%
+ \num{#1}&=\PremierExposant{#1}%
+ \end{align*}%
+ \fi%
+}%
+
+\newcommand{\PremierEtape}[2]{%
+ %#1 : le nombre entier à tester
+ %#2 : le nombre d'étapes à effectuer
+ \newcount\anp\newcount\bnp\newcount\cnp\newcount\dnp%
+ \ensuremath{%
+ \anp=#1\relax
+ \bnp=2\relax
+ \dnp=0\relax%
+ \whiledo{\anp > 1}{%
+ \whiledo{\dnp < \number#2}{%
+ \modulo{\the\anp}{\the\bnp}
+ \ifnum\remainder=0\relax
+ \dnp=\numexpr\dnp+1\relax
+ \cnp=\numexpr\anp/\bnp\relax
+ \anp=\cnp\relax
+ \num{\the\bnp}\times%
+ \else%
+ \bnp=\numexpr\bnp+1\relax%
+ \fi%
+ }
+ \num{\the\anp}%
+ \anp=1%
+ }
+ }
+}
+
+\newcommand{\PremierExposant}[1]{%
+ %#1 : le nombre entier à tester
+ \ensuremath{%
+ \newcount\anp\newcount\bnp\newcount\cnp%
+ \newcount\pileb\newcount\exposant%
+ \exposant=0\relax%
+ \anp=#1\relax%
+ \bnp=2\relax%
+ \pileb=2\relax%
+ \whiledo{\the\anp > 1}{%
+ \modulo{\the\anp}{\the\bnp}
+ \ifnum\remainder=0\relax
+ \cnp=\numexpr\anp/\bnp\relax
+ \ifnum\pileb=\bnp
+ \exposant=\numexpr\exposant+1\relax
+ \fi
+ \anp=\cnp\relax
+ \else%
+ \ifnum\exposant>0\relax
+ \num{\the\pileb}\ifnum\exposant>1 ^{\num{\the\exposant}}\fi\times%
+ %\pilea=\anp\relax
+ \fi
+ \bnp=\numexpr\bnp+1\relax%
+ \pileb=\bnp\relax%
+ \exposant=0\relax
+ \fi%
+ }
+ \num{\the\pileb}\ifnum\exposant>1^{\num{\the\exposant}}\fi%
+ }
+}
+
+\newcommand{\PremierLong}[1]{%
+ %#1 : le nombre entier à tester
+ \ensuremath{%
+ \newcount\anpl\newcount\bnpl\newcount\cnpl%
+ \newcount\pilebl
+ \anpl=#1\relax%
+ \bnpl=2\relax%
+ \pilebl=2\relax%
+ \whiledo{\the\anpl > 1}{%
+ \modulo{\the\anpl}{\the\bnpl}
+ \ifnum\remainder=0\relax
+ \cnpl=\numexpr\anpl/\bnpl\relax
+ \num{\the\bnpl}\ifnum\anpl>\bnpl\times\fi%
+ \anpl=\cnpl\relax
+ \else%
+ \bnpl=\numexpr\bnpl+1\relax%
+ \pilebl=\bnpl\relax%
+ \fi%
+ }
+ }
+}
+
+\newcommand{\ListeDiviseur}[1]{%#1 : le nombre entier à tester
+ \newcount\anp\newcount\bnp%
+ \anp=#1%
+ \bnp=2\relax%
+ 1 %
+ \whiledo{\bnp<\anp}{%
+ \modulo{\the\anp}{\the\bnp}{}%
+ \ifnum\remainder=0%
+ ; $\num{\the\bnp}$ %
+ \fi%
+ \bnp=\numexpr\bnp+1%
+ }%
+ et \num{\the\anp}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%
+% Simplification
+%%%%%%%%%%%%%%%%%%%
+\makeatletter%by christian Tellechea
+% Calcul du PGCD de #1 et #2
+\newcount\cnt@a\newcount\cnt@b\newcount\pgcd
+\def\PGCD#1#2{%
+ \ifnum#1>#2\cnt@a#1\cnt@b#2\else\cnt@a#2\cnt@b#1\relax\fi
+ \PGCD@i
+}
+\def\PGCD@i{\edef\PGCD@ii##1{##1{\number\cnt@a}{\number\cnt@b}}\PGCD@ii\PGCD@iii}
+\def\PGCD@iii#1#2{%
+ \cnt@b#1\relax\global\divide\cnt@b#2%
+ \global\cnt@b\numexpr#1-#2*\cnt@b%
+ \global\cnt@a#2\global\pgcd\cnt@a%
+ \ifnum\cnt@b>\z@\expandafter\PGCD@i%
+ \fi}%
+\makeatother
+
+\def\SSimplifie#1#2{%
+ % Simplification d'une écriture #1/#2
+ \ensuremath{
+ \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno
+ \numerateur=\number#1
+ \denominateur=\number#2
+ \ifnum\number#1<0\relax
+ \valabsnum=\numexpr0-\number#1
+ \else
+ \valabsnum=\number#1
+ \fi
+ \ifnum\number#2<0\relax
+ \valabsdeno=\numexpr0-\number#2
+ \else
+ \valabsdeno=\number#2
+ \fi
+ \ifnum\the\numerateur<0\relax
+ \ifnum\the\denominateur<0\relax
+ \numerateur=\valabsnum
+ \denominateur=\valabsdeno
+ \fi
+ \fi
+ \ifnum\number#2=0\relax
+ \text{\bfseries(???)}
+ \else
+ \ifnum\number#1=0\relax
+ 0
+ \else
+ \PGCD{\the\valabsnum}{\the\valabsdeno}%
+ \ifnum\pgcd>1\relax
+ \ifthenelse{\pgcd=\number#2 \OR \pgcd=\the\valabsdeno}{%
+ \divide\numerateur by \denominateur\num{\the\numerateur}
+ }{\divide\numerateur by\pgcd%
+ \divide\denominateur by\pgcd%
+ \frac{\num{\the\numerateur}}{\num{\the\denominateur}}
+ }
+ \else%%%comme on est avec les négatifs, on doit regarder si la valeur absolue est égale à 1
+ \ifnum\valabsdeno=1\relax
+ \divide\numerateur by \denominateur\num{\the\numerateur}
+ \else
+ \frac{\num{\the\numerateur}}{\num{\the\denominateur}}
+ \fi
+ \fi%
+ \fi%
+ \fi%
+ }%
+}
+
+
+\newcommand{\SSimpli}[2]{%
+ % Décomposition d'une simplification de #1/#2
+ \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno%
+ \numerateur=\number#1
+ \denominateur=\number#2
+ \ifnum\number#1<0
+ \valabsnum=\numexpr0-\number#1
+ \else
+ \valabsnum=\number#1
+ \fi
+ \ifnum\number#2<0
+ \valabsdeno=\numexpr0-\number#2
+ \else
+ \valabsdeno=\number#2
+ \fi
+ \ifnum\number#2=0\relax
+ \ensuremath{\text{\bfseries(???)}}
+ \else
+ \ifnum\number#1=0\relax
+ 0
+ \else
+ \PGCD{\the\valabsnum}{\the\valabsdeno}%
+ \ifnum\pgcd>1\relax
+ \ifthenelse{\pgcd=\number#2 \OR \pgcd=\the\valabsdeno}{%
+ \divide\numerateur by \denominateur\num{\the\numerateur}
+ }{%\divide\numerateur by\pgcd%
+ %\divide\denominateur by\pgcd%
+ \ensuremath{\frac{\num{\the\numerateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}{\num{\the\denominateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}}
+ }
+ \else
+ \ifnum\denominateur=1\relax
+ \ensuremath{\frac{\num{\the\numerateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}{\num{\the\denominateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}}
+ \else
+ \ensuremath{\frac{\num{\the\numerateur}}{\num{\the\denominateur}}}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\DiviseurCommun[2]{%
+ % #1 : le premier nombre entier
+ % #2 : le deuxième nombre entier
+ \newcount\anpdc\newcount\bnpdc\newcount\cnpdc%
+ \anpdc=#1%
+ \cnpdc=#2%
+ \bnpdc=2\relax%
+ \whiledo{\bnpdc<\anpdc}{%
+ \modulo{\the\anpdc}{\the\bnpdc}{}%
+ \ifnum\remainder=0%
+ \modulo{\the\cnpdc}{\the\bnpdc}{}
+ \ifnum\remainder=0%
+ \xdef\DivCom{\the\bnpdc}%
+ \bnpdc=\anpdc%
+ \else%
+ \xdef\DivCom{1}%
+ \bnpdc=\numexpr\bnpdc+1%
+ \fi%
+ \else%
+ \xdef\DivCom{1}%
+ \bnpdc=\numexpr\bnpdc+1%
+ \fi
+ }%
+}
+
+\newcommand\LongueSimplification[2]{%
+ \DiviseurCommun{#1}{#2}%
+ \xdef\NumerateurDiv{#1}%
+ \xdef\DenominateurDiv{#2}%
+ \ensuremath{%
+ \whiledo{\DivCom > 1}{%
+ \xdef\DivComa{\DivCom}\xdef\MulComa{\fpeval{\NumerateurDiv/\DivComa}}
+ \xdef\DivComb{\DivCom}\xdef\MulComb{\fpeval{\DenominateurDiv/\DivComb}}
+ \frac{\num{\DivComa}\times\num{\MulComa}}{\num{\DivComb}\times\num{\MulComb}}=\frac{\num{\MulComa}}{\num{\MulComb}}%
+ \xdef\NumerateurDiv{\MulComa}%
+ \xdef\DenominateurDiv{\MulComb}%
+ \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}%
+ \xintifboolexpr{\DivCom>1}{=}{}%
+ }
+ }
+}
+
+\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false}
+
+\newcounter{NbFrac}%
+\setcounter{NbFrac}{0}%
+
+\newcommand\Simplification[3][]{%
+ \stepcounter{NbFrac}%
+ \useKVdefault[ClesSimplification]%
+ \setKV[ClesSimplification]{#1}%
+ \ifboolKV[ClesSimplification]{Fleches}{%
+ \setsepchar[*]{,*/}%\ignoreemptyitems
+ \readlist*\Listea{#2}%
+ \readlist*\Listeb{#3}%
+ \setbox1=\hbox{\Listea[1,1]{}}%
+ \setbox2=\hbox{\Listeb[1,1]}%
+ \setbox3=\hbox{\Listea[1,3]}%
+ \setbox4=\hbox{\Listeb[1,3]}%
+ \ensuremath{%
+ \frac{\tikzmarknode[anchor=north]{A-\theNbFrac}{\Listea[1,1]}{}}{\tikzmarknode[anchor=south]{B-\theNbFrac}{\Listeb[1,1]}{}}=\frac{\tikzmarknode[anchor=north]{C-\theNbFrac}{\Listea[1,3]}{}}{\tikzmarknode[anchor=south]{D-\theNbFrac}{\Listeb[1,3]}{}}%
+ }%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \draw[out=45,in=135,-stealth,transform canvas={yshift=0.25em}]
+ let
+ \p1=(pic cs:A-\theNbFrac),
+ \p2=(pic cs:C-\theNbFrac)
+ in (pic cs:A-\theNbFrac) to node[midway,above]{\Listea[1,2]}(\x2,\y1);
+ \draw[out=-45,in=-135,-stealth,transform canvas={yshift=-0.25em}] (pic cs:B-\theNbFrac) to node[midway,below]{\Listeb[1,2]}(pic cs:D-\theNbFrac);%
+ \end{tikzpicture}%
+ }{%
+ \ifboolKV[ClesSimplification]{Longue}{%
+ \LongueSimplification{#2}{#3}%
+ }{%
+ \ifboolKV[ClesSimplification]{Details}{\SSimpli{#2}{#3}}{\ifboolKV[ClesSimplification]{All}{\ensuremath{\SSimpli{#2}{#3}=\SSimplifie{#2}{#3}}}{\SSimplifie{#2}{#3}}}%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%%%%%%%%%
+%%% Thales
+%%%%%%%%%%%%%%%%%%%%%
+\newcount\ppcm
+
+\newcommand\PPCM[2]{%
+ \PGCD{#1}{#2}
+ \ppcm=\numexpr#1*#2/\pgcd\relax
+}
+
+\setKVdefault[ClesThales]{Calcul=true,Propor=false,Segment=false,Figure=false,Figurecroisee=false,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false}
+
+%On définit la figure à utiliser
+\def\MPFigThales#1#2#3#4#5{
+ % #1 Premier sommet
+ % #2 Deuxième sommet
+ % #3 Troisième sommet
+ % #4 point sur le segment #1#2
+ % #5 point sur le segment #1#3
+ \ifluatex
+ \mplibcodeinherit{enable}
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(4,0);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ %on dessine à main levée :)
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ M=point(0.4*length cotes1) of cotes1;
+ N=point(0.6*length cotes3) of cotes3;
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ path triangle;
+ triangle=cotes1--cotes2--cotes3--cycle;
+ draw triangle;
+ draw cotes4;
+ %on labelise
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex #4 etex,1.1[C,M]);
+ label(btex #5 etex,1.1[B,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+ pair I,J,K;
+ I=1/2[M,N];
+ J=1/2[B,C];
+ K=1/2[I,J];
+ path cd;
+ cd=(fullcircle scaled 6mm) shifted K;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+ drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,K);
+ drawoptions();
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(4,0);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ %on dessine à main levée :)
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ M=point(0.4*length cotes1) of cotes1;
+ N=point(0.6*length cotes3) of cotes3;
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ path triangle;
+ triangle=cotes1--cotes2--cotes3--cycle;
+ draw triangle;
+ draw cotes4;
+ %on labelise
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex #4 etex,1.1[C,M]);
+ label(btex #5 etex,1.1[B,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+ pair I,J,K;
+ I=1/2[M,N];
+ J=1/2[B,C];
+ K=1/2[I,J];
+ path cd;
+ cd=(fullcircle scaled 6mm) shifted K;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+ drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,K);
+ drawoptions();
+ \end{mpost}
+ \fi
+}
+
+%On définit la figure à utiliser
+\def\MPFigReciThales#1#2#3#4#5{
+ % #1 Premier sommet
+ % #2 Deuxième sommet
+ % #3 Troisième sommet
+ % #4 point sur le segment #1#2
+ % #5 point sur le segment #1#3
+ \ifluatex
+ \mplibcodeinherit{enable}
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(4,0);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ %on dessine à main levée :)
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ M=point(0.4*length cotes1) of cotes1;
+ N=point(0.6*length cotes3) of cotes3;
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ path triangle;
+ triangle=cotes1--cotes2--cotes3--cycle;
+ draw triangle;
+ draw cotes4;
+ %on labelise
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex #4 etex,1.1[C,M]);
+ label(btex #5 etex,1.1[B,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(4,0);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ %on dessine à main levée :)
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ M=point(0.4*length cotes1) of cotes1;
+ N=point(0.6*length cotes3) of cotes3;
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ path triangle;
+ triangle=cotes1--cotes2--cotes3--cycle;
+ draw triangle;
+ draw cotes4;
+ %on labelise
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex #4 etex,1.1[C,M]);
+ label(btex #5 etex,1.1[B,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
+% pair I,J,K;
+% I=1/2[M,N];
+% J=1/2[B,C];
+% K=1/2[I,J];
+% path cd;
+% cd=(fullcircle scaled 6mm) shifted K;
+% drawoptions(withcolor 0.75*white);
+% drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+% drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+% draw cd;
+% label(btex $//$ etex ,K);
+% drawoptions();
+ \end{mpost}
+ \fi
+}
+
+%On définit la deuxième figure à utiliser
+\def\MPFigThalesCroisee#1#2#3#4#5{%
+ % #1 Premier sommet
+ % #2 Deuxième sommet
+ % #3 Troisième sommet
+ % #4 point sur la droite #1#2
+ % #5 point sur la droite #1#3
+ \ifluatex
+ \mplibforcehmode
+ \mplibcodeinherit{enable}
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ O=(2.5u,2.5u);
+ path cc;
+ cc=(fullcircle scaled 3u) shifted O;
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.1*length cc) of cc;
+ B=A rotatedabout(O,130);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % on dessine à main levée :)
+ M=1.4[B,A];
+ N=1.4[C,A];
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+ cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+ cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+ cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+ for k=1 upto 6:
+ draw cotes[k];
+ endfor;
+ pair I;
+ % On définit le centre du cercle inscrit à AMC
+ (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+ (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+ %on labelise
+ %label(btex #1 etex,1.15[1/2[B,C],A]);
+ label(btex #1 etex,I);
+ label(btex #2 etex,1.2[M,B]);
+ label(btex #3 etex,1.2[N,C]);
+ label(btex #4 etex,1.1[B,M]);
+ label(btex #5 etex,1.1[C,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+ pair I,J,K;
+ I=1.1[N,M];
+ J=1.1[B,C];
+ K=1/2[I,J];
+ path cd;
+ cd=(fullcircle scaled 6mm) shifted K;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+ drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,K);
+ drawoptions();
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ O=(2.5u,2.5u);
+ path cc;
+ cc=(fullcircle scaled 3u) shifted O;
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.1*length cc) of cc;
+ B=A rotatedabout(O,130);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On tourne pour éventuellement moins de lassitude :)
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % on dessine à main levée :)
+ M=1.4[B,A];
+ N=1.4[C,A];
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+ cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+ cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+ cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+ for k=1 upto 6:
+ draw cotes[k];
+ endfor;
+ pair I;
+ % On définit le centre du cercle inscrit à AMC
+ (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+ (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+ %on labelise
+ %label(btex #1 etex,1.15[1/2[B,C],A]);
+ label(btex #1 etex,I);
+ label(btex #2 etex,1.2[M,B]);
+ label(btex #3 etex,1.2[N,C]);
+ label(btex #4 etex,1.1[B,M]);
+ label(btex #5 etex,1.1[C,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+ pair I,J,K;
+ I=1.1[N,M];
+ J=1.1[B,C];
+ K=1/2[I,J];
+ path cd;
+ cd=(fullcircle scaled 6mm) shifted K;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
+ drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,K);
+ drawoptions();
+ \end{mpost}
+ \fi
+}
+
+%On définit la deuxième figure à utiliser
+\def\MPFigReciThalesCroisee#1#2#3#4#5{%
+ % #1 Premier sommet
+ % #2 Deuxième sommet
+ % #3 Troisième sommet
+ % #4 point sur la droite #1#2
+ % #5 point sur la droite #1#3
+ \ifluatex
+ \mplibforcehmode
+ \mplibcodeinherit{enable}
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ O=(2.5u,2.5u);
+ path cc;
+ cc=(fullcircle scaled 3u) shifted O;
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.1*length cc) of cc;
+ B=A rotatedabout(O,130);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % on dessine à main levée :)
+ M=1.4[B,A];
+ N=1.4[C,A];
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+ cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+ cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+ cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+ for k=1 upto 6:
+ draw cotes[k];
+ endfor;
+ pair I;
+ % On définit le centre du cercle inscrit à AMC
+ (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+ (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+ %on labelise
+ %label(btex #1 etex,1.15[1/2[B,C],A]);
+ label(btex #1 etex,I);
+ label(btex #2 etex,1.2[M,B]);
+ label(btex #3 etex,1.2[N,C]);
+ label(btex #4 etex,1.1[B,M]);
+ label(btex #5 etex,1.1[C,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes2);
+ fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes2);
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,M,N,O;%
+ O=(2.5u,2.5u);
+ path cc;
+ cc=(fullcircle scaled 3u) shifted O;
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=point(0.1*length cc) of cc;
+ B=A rotatedabout(O,130);
+ C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
+ % On tourne pour éventuellement moins de lassitude :)
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % on dessine à main levée :)
+ M=1.4[B,A];
+ N=1.4[C,A];
+ path cotes[];
+ cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)};
+ cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)};
+ cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)};
+ cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)};
+ cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)};
+ for k=1 upto 6:
+ draw cotes[k];
+ endfor;
+ pair I;
+ % On définit le centre du cercle inscrit à AMC
+ (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
+ (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
+ %on labelise
+ %label(btex #1 etex,1.15[1/2[B,C],A]);
+ label(btex #1 etex,I);
+ label(btex #2 etex,1.2[M,B]);
+ label(btex #3 etex,1.2[N,C]);
+ label(btex #4 etex,1.1[B,M]);
+ label(btex #5 etex,1.1[C,N]);
+ fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4);
+ fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes2);
+ fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes2);
+ \end{mpost}
+ \fi
+}
+
+%%%
+\newcommand{\TTThales}[6][]{%
+ \useKVdefault[ClesThales]%
+ \setKV[ClesThales]{#1}%
+ Dans le triangle \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2#3#4$}, \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#5$} est un point \ifboolKV[ClesThales]{Segment}{du segment}{de la
+ droite} \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#2#3)$}, \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#6$} est un point \ifboolKV[ClesThales]{Segment}{du segment}{de la droite} \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#2#4)$}.%
+ \\Comme les droites \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#5#6)$} et \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#3#4)$} sont parallèles, alors \ifboolKV[ClesThales]{Propor}{le tableau%
+ \[\begin{array}{c|c|c}
+ \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#5}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#6}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#5#6}\\
+ \hline
+ \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#3}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#4}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#3#4}\\
+ \end{array}
+ \]
+ est un tableau de proportionnalité d'après le théorème de Thalès.%
+ }{%
+ le théorème de Thalès permet d'écrire :%
+ \[\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#5}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#3}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#6}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#4}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#5#6}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#3#4}}\]%
+ }
+}
+
+\newcommand{\TThalesCalculsD}[8][]{%
+ \setKV[ClesThales]{#1}%
+ \newcount\zzz\newcount\yyy\newcount\xxx%Pour se rappeller des calculs à faire et combien en faire%
+ \def\Nomx{}%
+ \def\Nomy{}%
+ \def\Nomz{}%
+ \zzz=0\yyy=0\xxx=0%
+ \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+\IfDecimal{#3}{%
+ \IfDecimal{#6}{}{%
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{%
+ \xxx=5263%#6&=\frac{#3\times#7}{#4}\\
+ \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#7}{Valx}\opcopy{#4}{denox}%
+ \xdef\ResultatThalesx{\fpeval{round(#3*#7/#4,\useKV[ClesThales]{Precision})}}%
+ }{%
+ \IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+ \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#8}{Valx}\opcopy{#5}{denox}%
+ \xdef\ResultatThalesx{\fpeval{round(#3*#8/#5,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{\IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+ \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#8}{Valx}\opcopy{#5}{denox}%
+ \xdef\ResultatThalesx{\fpeval{round(#3*#8/#5,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }
+ }{%
+ \IfDecimal{#6}{%
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{%
+ \xxx=2536%\[#3=\frac{#6\times#4}{#7}\]%
+ \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#4}{Valx}\opcopy{#7}{denox}%
+ \xdef\ResultatThalesx{\fpeval{round(#6*#4/#7,\useKV[ClesThales]{Precision})}}%
+ }{%
+ \IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+ \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#5}{Valx}\opcopy{#8}{denox}%\[#3=\frac{#6\times#5}{#8}\]
+ \xdef\ResultatThalesx{\fpeval{round(#6*#5/#8,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{\IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+ \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#5}{Valx}\opcopy{#8}{denox}%\[#3=\frac{#6\times#5}{#8}\]
+ \xdef\ResultatThalesx{\fpeval{round(#6*#5/#8,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{}
+ }%
+ %
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{}{%
+ \IfDecimal{#5}{%
+ \IfDecimal{#8}{%
+ \yyy=6374%\[#7=\frac{#4\times#8}{#5}\]%
+ \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#8}{Valy}\opcopy{#5}{denoy}%
+ \xdef\ResultatThalesy{\fpeval{round(#4*#8/#5,\useKV[ClesThales]{Precision})}}%
+ }{%
+ \IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+ \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#6}{Valy}\opcopy{#3}{denoy}%
+ \xdef\ResultatThalesy{\fpeval{round(#4*#6/#3,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{\IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+ \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#6}{Valy}\opcopy{#3}{denoy}%
+ \xdef\ResultatThalesy{\fpeval{round(#4*#6/#3,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }
+ }{%
+ \IfDecimal{#7}{%
+ \IfDecimal{#5}{%
+ \IfDecimal{#8}{%
+ \yyy=3647%\[#4=\frac{#7\times#5}{#8}\]%
+ \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#5}{Valy}\opcopy{#8}{denoy}%
+ \xdef\ResultatThalesy{\fpeval{round(#7*#5/#8,\useKV[ClesThales]{Precision})}}%
+ }{%
+ \IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+ \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#3}{Valy}\opcopy{#6}{denoy}%
+ \xdef\ResultatThalesy{\fpeval{round(#7*#3/#6,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{\IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+ \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#3}{Valy}\opcopy{#6}{denoy}%
+ \xdef\ResultatThalesy{\fpeval{round(#7*#3/#6,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }}{}}%
+ %
+ \IfDecimal{#5}{%
+ \IfDecimal{#8}{}{%
+ \IfDecimal{#4}{
+ \IfDecimal{#7}{
+ \zzz=7463%\[#8=\frac{#5\times#7}{#4}\]%
+ \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#7}{Valz}\opcopy{#4}{denoz}%
+ \xdef\ResultatThalesz{\fpeval{round(#5*#7/#4,\useKV[ClesThales]{Precision})}}%
+ }{%
+ \IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+ \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#6}{Valz}\opcopy{#3}{denoz}%
+ \xdef\ResultatThalesz{\fpeval{round(#5*#6/#3,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+ \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#6}{Valz}\opcopy{#3}{denoz}%
+ \xdef\ResultatThalesz{\fpeval{round(#5*#6/#3,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }
+ }{%
+ \IfDecimal{#8}{%
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{%
+ \zzz=4736% \[#5=\frac{#8\times#4}{#7}\]%
+ \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#4}{Valz}\opcopy{#7}{denoz}%
+ \xdef\ResultatThalesz{\fpeval{round(#8*#4/#7,\useKV[ClesThales]{Precision})}}%
+ }{%
+ \IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+ \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#3}{Valz}\opcopy{#6}{denoz}%
+ \xdef\ResultatThalesz{\fpeval{round(#8*#3/#6,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }
+ }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+ \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#3}{Valz}\opcopy{#6}{denoz}%
+ \xdef\ResultatThalesz{\fpeval{round(#8*#3/#6,\useKV[ClesThales]{Precision})}}%
+ }{}}{}
+ }}{}
+ }%
+ %%
+\StrMid{\the\zzz}{1}{1}[\cmza]%
+\StrMid{\the\yyy}{1}{1}[\cmya]%
+\StrMid{\the\xxx}{1}{1}[\cmxa]%
+\ifboolKV[ClesThales]{Calcul}{%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%
+ On remplace par les longueurs connues :%
+ \ifboolKV[ClesThales]{Propor}{%
+ \[\begin{array}{c|c|c}
+ \IfDecimal{#3}{\num{#3}}{#3}&\IfDecimal{#4}{\num{#4}}{#4}&\IfDecimal{#5}{\num{#5}}{#5}\\
+ \hline
+ \IfDecimal{#6}{\num{#6}}{#6}&\IfDecimal{#7}{\num{#7}}{#7}&\IfDecimal{#8}{\num{#8}}{#8}
+ \end{array}
+ \]
+ }{%
+ \[\frac{\IfDecimal{#3}{\num{#3}}{#3}}{\IfDecimal{#6}{\num{#6}}{#6}}=\frac{\IfDecimal{#4}{\num{#4}}{#4}}{\IfDecimal{#7}{\num{#7}}{#7}}=\frac{\IfDecimal{#5}{\num{#5}}{#5}}{\IfDecimal{#8}{\num{#8}}{#8}}\]
+ }%
+ % On choisit éventuellement le calcul à faire s'il y en a plusieurs.
+ \xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}%
+ \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul=1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul=2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}{}%
+ %%on fait les calculs
+\begin{align*}
+ %Premier compteur \xxx
+ \ifnum\cmxa>0
+ \Nomx\uppercase{&}=\frac{\opexport{valx}{\valx}\num{\valx}\times\opexport{Valx}{\Valx}\num{\Valx}}{\opexport{denox}{\denox}\num{\denox}}\relax%\global\numx=\numexpr\opprint{valx}*\opprint{Valx}\relax
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \ifnum\cmxa=0
+ \else
+ \uppercase{&}
+ \fi%
+ \Nomy\uppercase{&}=\frac{\opexport{valy}{\valy}\num{\valy}\times\opexport{Valy}{\Valy}\num{\Valy}}{\opexport{denoy}{\denoy}\num{\denoy}}\relax%\global\numy=\numexpr\opprint{valy}*\opprint{Valy}\relax
+ \fi
+ % Troisième compteur \zzz
+ \ifnum\cmza>0
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ %
+ \else
+ \uppercase{&}
+ \fi
+ \Nomz\uppercase{&}=\frac{\opexport{valz}{\valz}\num{\valz}\times\opexport{Valz}{\Valz}\num{\Valz}}{\opexport{denoz}{\denoz}\num{\denoz}}\relax%\global\numz=\numexpr\opprint{valz}*\opprint{Valz}\relax
+ \else
+ \uppercase{&}\Nomz\uppercase{&}=\frac{\opexport{valz}{\valz}\num{\valz}\times\opexport{Valz}{\Valz}\num{\Valz}}{\opexport{denoz}{\denoz}\num{\denoz}}\relax%\global\numz=\numexpr\opprint{valz}*\opprint{Valz}\relax
+ \fi
+ \fi
+ \\
+% % 2eme ligne du tableau : calcul des numérateurs
+% %Premier compteur \xxx
+ \ifnum\cmxa>0
+ \Nomx\uppercase{&}=\frac{\opmul*{valx}{Valx}{numx}\opexport{numx}{\numx}\num{\numx}}{\opprint{denox}}
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \ifnum\cmxa=0
+ %
+ \else
+ \uppercase{&}
+ \fi
+ \Nomy\uppercase{&}=\frac{\opmul*{valy}{Valy}{numy}\opexport{numy}{\numy}\num{\numy}}{\opprint{denoy}}%
+ \fi
+% %Troisième compteur \zzz
+ \ifnum\cmza>0
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ %
+ \else
+ \uppercase{&}
+ \fi
+ \Nomz\uppercase{&}=\frac{\opmul*{valz}{Valz}{numz}\opexport{numz}{\numz}\num{\numz}}{\opprint{denoz}}
+ \else
+ \uppercase{&}\Nomz\uppercase{&}=\frac{\opmul*{valz}{Valz}{numz}\opexport{numz}{\numz}\num{\numz}}{\opprint{denoz}}
+ \fi
+ \fi
+ \\
+% % 3eme ligne : Calculs
+ \ifnum\cmxa>0
+ \Nomx\uppercase{&}\opdiv*{numx}{denox}{resultatx}{restex}\opcmp{restex}{0}\ifopeq=\opprint{resultatx}~\text{\useKV[ClesThales]{Unite}}\else\approx\opround{resultatx}{\useKV[ClesThales]{Precision}}{resultatx}\opprint{resultatx}~\text{\useKV[ClesThales]{Unite}}\fi\opexport{resultatx}{\resultatx}%\xdef\ResultatThalesx{\num{\resultatx}}%
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \ifnum\cmxa=0
+ %
+ \else
+ \uppercase{&}
+ \fi
+ \Nomy\uppercase{&}\opdiv*{numy}{denoy}{resultaty}{restey}\opcmp{restey}{0}\ifopeq=\opprint{resultaty}~\text{\useKV[ClesThales]{Unite}}\else\approx\opround{resultaty}{\useKV[ClesThales]{Precision}}{resultaty}\opprint{resultaty}~\text{\useKV[ClesThales]{Unite}}\fi\opexport{resultaty}{\resultaty}%\xdef\ResultatThalesy{\num{\resultaty}}
+ \fi
+% %Troisième compteur \zzz
+ \ifnum\cmza>0
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ %
+ \else
+ \uppercase{&}
+ \fi
+ \Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\opprint{resultatz}~\text{\useKV[ClesThales]{Unite}}\else\approx\opround{resultatz}{\useKV[ClesThales]{Precision}}{resultatz}\opprint{resultatz}~\text{\useKV[ClesThales]{Unite}}\fi\opexport{resultatz}{\resultatz}%\xdef\ResultatThalesz{\num{\resultatz}}
+ \else
+ \uppercase{&}\Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\opprint{resultatz}~\text{\useKV[ClesThales]{Unite}}\else\approx\opround{resultatz}{\useKV[ClesThales]{Precision}}{resultatz}\opprint{resultatz}~\text{\useKV[ClesThales]{Unite}}\fi\opexport{resultatz}{\resultatz}%\xdef\ResultatThalesz{\num{\resultatz}}
+ \fi
+ \fi
+\end{align*}
+}{}
+}
+
+\newcommand{\TThalesCalculsE}[8][]{%
+ \setKV[ClesThales]{#1}%
+ \newcount\zzz\newcount\yyy\newcount\xxx%Pour se rappeller des calculs à faire et combien en faire%
+ \newcount\valx\newcount\Valx%
+ \newcount\valy\newcount\Valy%
+ \newcount\valz\newcount\Valz%
+ \newcount\numx\newcount\numy\newcount\numz%
+ \newcount\denox\newcount\denoy\newcount\denoz%
+ \def\Nomx{}%
+ \def\Nomy{}%
+ \def\Nomz{}%
+ \zzz=0\yyy=0\xxx=0%
+ \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par%
+\IfDecimal{#3}{%
+ \IfDecimal{#6}{}{%
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{%
+ \xxx=5263%#6&=\frac{#3\times#7}{#4}\\
+ \edef\Nomx{#6}\valx=#3\Valx=#7\denox=#4%
+ }{%
+ \IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+ \edef\Nomx{#6}\valx=#3\Valx=#8\denox=#5%
+ }{}}{}
+ }
+ }{\IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\]
+ \edef\Nomx{#6}\valx=#3\Valx=#8\denox=#5%
+ }{}}{}
+ }
+ }
+ }{%
+ \IfDecimal{#6}{%
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{%
+ \xxx=2536%\[#3=\frac{#6\times#4}{#7}\]%
+ \edef\Nomx{#3}\valx=#6\Valx=#4\denox=#7%
+ }{%
+ \IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+ \edef\Nomx{#3}\valx=#6\Valx=#5\denox=#8%\[#3=\frac{#6\times#5}{#8}\]
+ }{}}{}
+ }
+ }{\IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547
+ \edef\Nomx{#3}\valx=#6\Valx=#5\denox=#8%\[#3=\frac{#6\times#5}{#8}\]
+ }{}}{}
+ }
+ }{}
+ }%
+ %
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{}{%
+ \IfDecimal{#5}{%
+ \IfDecimal{#8}{%
+ \yyy=6374%\[#7=\frac{#4\times#8}{#5}\]%
+ \edef\Nomy{#7}\valy=#4\Valy=#8\denoy=#5%
+ }{%
+ \IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+ \edef\Nomy{#7}\valy=#4\Valy=#6\denoy=#3%
+ }{}}{}
+ }
+ }{\IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\]
+ \edef\Nomy{#7}\valy=#4\Valy=#6\denoy=#3%
+ }{}}{}
+ }
+ }
+ }{%
+ \IfDecimal{#7}{%
+ \IfDecimal{#5}{%
+ \IfDecimal{#8}{%
+ \yyy=3647%\[#4=\frac{#7\times#5}{#8}\]%
+ \edef\Nomy{#4}\valy=#7\Valy=#5\denoy=#8%
+ }{%
+ \IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+ \edef\Nomy{#4}\valy=#7\Valy=#3\denoy=#6%
+ }{}}{}
+ }
+ }{\IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\]
+ \edef\Nomy{#4}\valy=#7\Valy=#3\denoy=#6%
+ }{}}{}
+ }}{}}%
+ %
+ \IfDecimal{#5}{%
+ \IfDecimal{#8}{}{%
+ \IfDecimal{#4}{
+ \IfDecimal{#7}{
+ \zzz=7463%\[#8=\frac{#5\times#7}{#4}\]%
+ \edef\Nomz{#8}\valz=#5\Valz=#7\denoz=#4%
+ }{%
+ \IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+ \edef\Nomz{#8}\valz=#5\Valz=#6\denoz=#3%
+ }{}}{}
+ }
+ }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\]
+ \edef\Nomz{#8}\valz=#5\Valz=#6\denoz=#3%
+ }{}}{}
+ }
+ }
+ }{%
+ \IfDecimal{#8}{%
+ \IfDecimal{#4}{%
+ \IfDecimal{#7}{%
+ \zzz=4736% \[#5=\frac{#8\times#4}{#7}\]%
+ \edef\Nomz{#5}\valz=#8\Valz=#4\denoz=#7%
+ }{%
+ \IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+ \edef\Nomz{#5}\valz=#8\Valz=#3\denoz=#6%
+ }{}}{}
+ }
+ }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\]
+ \edef\Nomz{#5}\valz=#8\Valz=#3\denoz=#6%
+ }{}}{}
+ }}{}
+ }%
+ %%
+\StrMid{\the\zzz}{1}{1}[\cmza]%
+\StrMid{\the\yyy}{1}{1}[\cmya]%
+\StrMid{\the\xxx}{1}{1}[\cmxa]%
+\ifboolKV[ClesThales]{Calcul}{%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%
+ On remplace par les longueurs connues :
+ \ifboolKV[ClesThales]{Propor}{%
+ \[\begin{array}{c|c|c}
+ \IfDecimal{#3}{\num{#3}}{#3}&\IfDecimal{#4}{\num{#4}}{#4}&\IfDecimal{#5}{\num{#5}}{#5}\\
+ \hline
+ \IfDecimal{#6}{\num{#6}}{#6}&\IfDecimal{#7}{\num{#7}}{#7}&\IfDecimal{#8}{\num{#8}}{#8}\\
+ \end{array}
+ \]
+ }{%
+ \[\frac{\IfDecimal{#3}{\num{#3}}{#3}}{\IfDecimal{#6}{\num{#6}}{#6}}=\frac{\IfDecimal{#4}{\num{#4}}{#4}}{\IfDecimal{#7}{\num{#7}}{#7}}=\frac{\IfDecimal{#5}{\num{#5}}{#5}}{\IfDecimal{#8}{\num{#8}}{#8}}\]
+ }%
+ % On choisit éventuellement le calcul à faire s'il y en a plusieurs.
+ \xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}%
+ \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul=1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul=2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}%
+ %%on fait les calculs
+\begin{align*}
+ %Premier compteur \xxx
+ \ifnum\cmxa>0
+ \Nomx\uppercase{&}=\frac{\the\valx\times\the\Valx}{\the\denox}\global\numx=\numexpr\the\valx*\the\Valx\relax
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \ifnum\cmxa=0
+ \else
+ \uppercase{&}
+ \fi%
+ \Nomy\uppercase{&}=\frac{\the\valy\times\the\Valy}{\the\denoy}\global\numy=\numexpr\the\valy*\the\Valy\relax
+ % \else
+ % \uppercase{&}\Nomy\uppercase{&}=\frac{\the\valy\times\the\Valy}{\the\denoy}\global\numy=\numexpr\the\valy*\the\Valy\relax
+ % \fi
+ \fi
+ % Troisième compteur \zzz
+ \ifnum\cmza>0
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ %\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+ \else
+ \uppercase{&}%\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+ \fi
+ \Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+ \else
+ \uppercase{&}\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax
+ \fi
+ \fi
+ \\
+ % 2eme ligne du tableau : calcul des numérateurs
+ %Premier compteur \xxx
+ \ifnum\cmxa>0
+ \Nomx\uppercase{&}=\frac{\num{\the\numx}}{\num{\the\denox}}
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \ifnum\cmxa=0
+ %\Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}
+ \else
+ \uppercase{&}%\Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}
+ \fi
+ \Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}%
+ \fi
+ %Troisième compteur \zzz
+ \ifnum\cmza>0
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ %\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+ \else
+ \uppercase{&}%\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+ \fi
+ \Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+ \else
+ \uppercase{&}\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}}
+ \fi
+ \fi
+ \\
+ % 3eme ligne : faire les simplifications ou pas ?
+ %Premier compteur \xxx
+ \ifnum\cmxa>0
+ \PGCD{\the\numx}{\the\denox}
+ \ifnum\pgcd>1
+ \Nomx\uppercase{&}=\SSimpli{\the\numx}{\the\denox}
+ \else
+ \uppercase{&}
+ \fi
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \PGCD{\the\numy}{\the\denoy}
+ \ifnum\cmxa=0
+ \ifnum\pgcd>1
+ \Nomy\uppercase{&}=\SSimpli{\the\numy}{\the\denoy}
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \ifnum\pgcd>1
+ \uppercase{&}\Nomy\uppercase{&}=\SSimpli{\the\numy}{\the\denoy}
+ \else
+ \uppercase{&&}
+ \fi
+ \fi
+ \fi
+ %Troisième compteur \zzz
+ \ifnum\cmza>0
+ \PGCD{\the\numz}{\the\denoz}
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ \ifnum\pgcd>1
+ \Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz}
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \ifnum\pgcd>1
+ \uppercase{&}\Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz}
+ \else
+ \uppercase{&&}
+ \fi
+ \fi
+ \else
+ \ifnum\pgcd>1
+ \uppercase{&}\Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz}
+ \else
+ \uppercase{&&}
+ \fi
+ \fi
+ \fi
+ \\
+ % 4eme ligne : Terminer les simplifications ?
+ %Premier compteur \xxx
+ \ifnum\cmxa>0
+ \PGCD{\the\numx}{\the\denox}
+ \ifnum\pgcd>1
+ \ifnum\pgcd<\the\denox
+ \Nomx\uppercase{&}=\SSimplifie{\the\numx}{\the\denox}
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \uppercase{&}
+ \fi
+ \fi
+ % % Deuxième compteur \yyy
+ \ifnum\cmya>0
+ \PGCD{\the\numy}{\the\denoy}
+ \ifnum\cmxa=0
+ \ifnum\pgcd>1
+ \ifnum\pgcd<\the\denoy
+ \Nomy\uppercase{&}=\SSimplifie{\the\numy}{\the\denoy}
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \ifnum\pgcd>1
+ \ifnum\pgcd<\the\denoy
+ \uppercase{&}\Nomy\uppercase{&}=\SSimplifie{\the\numy}{\the\denoy}
+ \else
+ \uppercase{&&}
+ \fi
+ \else
+ \uppercase{&&}
+ \fi
+ \fi
+ \fi
+ %Troisième compteur \zzz
+ \ifnum\cmza>0
+ \PGCD{\the\numz}{\the\denoz}
+ \ifnum\cmxa=0
+ \ifnum\cmya=0
+ \ifnum\pgcd>1
+ \ifnum\pgcd<\the\denoz
+ \Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz}
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \uppercase{&}
+ \fi
+ \else
+ \ifnum\pgcd>1
+ \ifnum\pgcd<\the\denoz
+ \uppercase{&}\Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz}
+ \else
+ \uppercase{&&}
+ \fi
+ \else
+ \uppercase{&&}
+ \fi
+ \fi
+ \else
+ \ifnum\pgcd>1
+ \ifnum\pgcd<\the\denoz
+ \uppercase{&}\Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz}
+ \else
+ \uppercase{&&}
+ \fi
+ \else
+ \uppercase{&&}
+ \fi
+ \fi
+ \fi%\\
+\end{align*}
+}{}%
+}
+
+\newcommand{\TThales}[8][]{%
+ \setKV[ClesThales]{#1}%
+ \ifboolKV[ClesThales]{Figure}{%
+ \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+ \begin{multicols}{2}%
+ {\em La figure est donnée à titre indicatif.}%
+ \[\MPFigThales\NomA\NomB\NomC\NomM\NomN\]%
+ \par\columnbreak\par%
+ \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+ \end{multicols}%
+ }{\ifboolKV[ClesThales]{Figurecroisee}{%
+ \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+ \begin{multicols}{2}%
+ {\em La figure est donnée à titre indicatif.}%
+ \[\MPFigThalesCroisee\NomA\NomB\NomC\NomM\NomN\]%
+ \par\columnbreak\par%
+ \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+ \end{multicols}%
+ }{\ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+ }%
+}%
+%%%%
+
+\newcommand{\ReciThales}[6][]{%
+ Dans le triangle $#2#3#4$, $#5$ est un point \ifboolKV[ClesThales]{Segment}{du segment $[#2#3]$}{de la
+ droite $(#2#3)$}, $#6$ est un point \ifboolKV[ClesThales]{Segment}{du segment $[#2#4]$}{de la droite $(#2#4)$}.
+ \ifboolKV[ClesThales]{Propor}{Le tableau $\begin{array}{c|c}
+ #2#5&#2#6\\
+ \hline
+ #2#3&#2#4\\
+ \end{array}
+ $ est-il un tableau de proportionnalité ?
+ }{%
+ }
+}
+
+\newcommand{\ReciThalesCalculs}[8][]{%
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ \StrMid{#2}{4}{4}[\NomM]%
+ \StrMid{#2}{5}{5}[\NomN]%
+ \ifboolKV[ClesThales]{Produit}{%
+ \begin{align*}
+ \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}&&\dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}}
+ \end{align*}
+ Effectuons les produits en croix :\xdef\NumA{\fpeval{#3*#6}}\xdef\NumB{\fpeval{#4*#5}}
+ \begin{align*}
+ \num{#3}\times\num{#6}&=\num{\fpeval{#3*#6}}&&&\num{#4}\times\num{#5}&=\num{\fpeval{#4*#5}}
+ \end{align*}
+ \xintifboolexpr{\NumA = \NumB}{Comme les produits en croix sont
+ égaux alors
+ $\dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\[0.5em]%
+ }{%
+ Comme les produits en croix sont différents alors
+ $\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\%
+ }%
+ }{%
+ \[\left.
+ \begin{array}{l}
+ \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}\ifx\bla#7\bla\ifboolKV[ClesThales]{Simplification}{\PGCD{#3}{#4}\xintifboolexpr{\pgcd=1}{%il faut regarder si on doit continuer avec le PPCM...
+ \PGCD{#5}{#6}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#6/\pgcd}}\PPCM{#4}{\DenomSimpaa}\xintifboolexpr{\ppcm=#4}{}{=\dfrac{#3\times\num{\fpeval{\ppcm/#4}}}{#4\times\num{\fpeval{\ppcm/#4}}}=\dfrac{\num{\fpeval{#3*\ppcm/#4}}}{\num{\fpeval{\ppcm}}}}}{}%
+ }{=\displaystyle\Simplification[All]{#3}{#4}\PGCD{#3}{#4}\xdef\NumSimp{\fpeval{#3/\pgcd}}\xdef\DenomSimp{\fpeval{#4/\pgcd}}\PGCD{#5}{#6}\xdef\NumSimpa{\fpeval{#5/\pgcd}}\xdef\DenomSimpa{\fpeval{#6/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}=1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#4}=1}{}{=\dfrac{\num{#3}\times\num{\fpeval{\the\ppcm/#4}}}{\num{#4}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#4}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#3*\the\ppcm/#4}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#6}}\else%
+ \xintifboolexpr{#7=1}{}{=\dfrac{\num{#3}\times\num{#7}}{\num{#4}\times\num{#7}}=\dfrac{\num{\fpeval{#3*#7}}}{\num{\fpeval{#4*#7}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm=\fpeval{#4*#7}}{}{=\dfrac{\num{\fpeval{#3*#7}}\times\num{\fpeval{\the\ppcm/(#4*#7)}}}{\num{\fpeval{#4*#7}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#4*#7)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#3*\the\ppcm/#4}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#7*#6*#8}}
+ \fi
+ \\
+ \\
+ \dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}}%
+ \ifx\bla#8\bla%
+ \ifboolKV[ClesThales]{Simplification}{\PGCD{#5}{#6}\xintifboolexpr{\pgcd=1}{%il faut regarder si on doit continuer avec le PPCM...
+ \PGCD{#3}{#4}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#4/\pgcd}}\PPCM{#6}{\DenomSimpaa}\xintifboolexpr{\ppcm=#6}{}{=\dfrac{#5\times\num{\fpeval{\ppcm/#6}}}{#6\times\num{\fpeval{\ppcm/#6}}}=\dfrac{\num{\fpeval{#5*\ppcm/#6}}}{\num{\fpeval{\ppcm}}}}}{}%
+ }{=\displaystyle\Simplification[All]{#5}{#6}\PGCD{#5}{#6}\xdef\NumSimp{\fpeval{#5/\pgcd}}\xdef\DenomSimp{\fpeval{#6/\pgcd}}\PGCD{#3}{#4}\xdef\NumSimpa{\fpeval{#3/\pgcd}}\xdef\DenomSimpa{\fpeval{#4/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}=1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#6}=1}{}{=\dfrac{\num{#5}\times\num{\fpeval{\the\ppcm/#6}}}{\num{#6}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#6}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#5*\the\ppcm/#6}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumB{\fpeval{#5*#4}}%
+ \else%
+ \xintifboolexpr{#8=1}{}{=\dfrac{\num{#5}\times\num{#8}}{\num{#6}\times\num{#8}}=\dfrac{\num{\fpeval{#5*#8}}}{\num{\fpeval{#6*#8}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm=\fpeval{#6*#8}}{}{=\dfrac{\num{\fpeval{#5*#8}}\times\num{\fpeval{\the\ppcm/(#6*#8)}}}{\num{\fpeval{#6*#8}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#6*#8)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#5*\the\ppcm/#6}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}
+ }\xdef\NumB{\fpeval{#5*#8*#4*#7}}
+ \fi\\
+ \end{array}
+ \right\}\ifnum\NumA=\NumB \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}\else\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}\fi
+ \]
+ }
+ \ifboolKV[ClesThales]{Propor}{%
+ \ifnum\NumA=\NumB Donc le tableau $\begin{array}{c|c}
+ \NomA\NomM&\NomA\NomN\\
+ \hline
+ \NomA\NomB&\NomA\NomC\\
+ \end{array}
+ $ est bien un tableau de proportionnalité.\\De plus, les points
+ $\NomA$, $\NomM$, $\NomB$ sont alignés dans le même ordre que les
+ points $\NomA$, $\NomN$, $\NomC$. Donc les droites $(\NomM\NomN)$
+ et $(\NomB\NomC)$ sont parallèles d'après la réciproque du
+ théorème de Thalès.\else%
+ Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parallèles.\fi
+ }{%
+ \xintifboolexpr{\NumA=\NumB}{%
+ De plus, les points $\NomA$, $\NomM$, $\NomB$ sont alignés dans
+ le même ordre que les points $\NomA$, $\NomN$, $\NomC$. Donc les
+ droites $(\NomM\NomN)$ et $(\NomB\NomC)$ sont parallèles d'après
+ la réciproque du théorème de Thalès.}{%
+ Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas
+ parallèles.}
+ }
+}
+
+\newcommand\ReciproqueThales[8][]{%
+ % #1 Clés
+ % #2 NomTriangle + Points ABCEF pour droite (BC)//(EF)
+ % #3 longueur AE
+ % #4 longueur AB
+ % #5 longueur AF
+ % #6 longueur AC
+ \ifboolKV[ClesThales]{Figure}{%
+ \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+ \begin{multicols}{2}
+ {\em La figure est donnée à titre indicatif.}
+ \[\MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}\]
+ \par\columnbreak\par
+ \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+ \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+ \end{multicols}
+ }{\ifboolKV[ClesThales]{Figurecroisee}{%
+ \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]
+ \begin{minipage}{0.4\linewidth}
+ {\em La figure est donnée à titre indicatif.}
+ \[\MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}\]
+ \end{minipage}
+ \hfill
+ \begin{minipage}{0.55\linewidth}
+ \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+ \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+ \end{minipage}\\%
+ }{\ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+ \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+ }
+ }
+}
+
+\newcommand{\Thales}[8][]{%
+ \useKVdefault[ClesThales]%
+ \setKV[ClesThales]{#1}%
+ \ifboolKV[ClesThales]{Reciproque}{%
+ \ReciproqueThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ }{%
+ \ifboolKV[ClesThales]{Redaction}{%
+ \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+ }{%
+ \TThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ }
+ }%
+}%
+
+%%%%%%%%%%%%%%%%
+%% Trigonométrie
+%%%%%%%%%%%%%%%%
+\def\MPFigTrigo#1#2#3#4#5#6#7{%
+ \ifluatex
+ \mplibcodeinherit{enable}
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,O,I,D,E,F;%
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Angle;
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ % on dessine à main levée :)
+ path triangle;
+ triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+ % on définit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+ % L'angle :)
+ path cc;
+ cc=fullcircle scaled 1u;
+ % on marque les angles
+ picture MAngle;
+ MAngle=image(
+ draw (cc shifted A);
+ % draw (cc shifted B);
+ % draw (cc shifted C);
+ );
+ draw MAngle;
+ clip currentpicture to triangle;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ % on labelise
+ picture z;
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex \ang{#7} etex,A+0.95u*unitvector(I-A));
+ decalage:=3mm;
+ if #6<0:
+ else:
+ if angle(1/2[A,C]-B)>0:
+ if #6=0:
+ label(btex ? etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+ else:
+ label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+ fi;
+ else:
+ if #6=0:
+ label(btex ? etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+ else:
+ label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+ fi;
+ fi;
+ fi;
+ if #4<0:
+ else:
+ if angle(1/2[B,C]-A)>0:
+ if #4=0:
+ label(btex ? etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+ else:
+ label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+ fi;
+ else:
+ if #4=0:
+ label(btex ? etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+ else:
+ label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+ fi;
+ fi;
+ fi;
+ if #5<0:
+ else:
+ if angle(1/2[A,B]-C)>0:
+ if #5=0:
+ label(btex ? etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+ else:
+ if #5=0:
+ label(btex ? etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+ fi;
+ fi;
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,O,I,D,E,F;%
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ % on dessine à main levée :)
+ path triangle;
+ triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+ % on définit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+ % L'angle :)
+ path cc;
+ cc=fullcircle scaled 1u;
+ % on marque les angles
+ picture MAngle;
+ MAngle=image(
+ draw (cc shifted A);
+ % draw (cc shifted B);
+ % draw (cc shifted C);
+ );
+ draw MAngle;
+ clip currentpicture to triangle;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ % on labelise
+ picture z;
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex \ang{#7} etex,A+0.95u*unitvector(I-A));
+ decalage:=3mm;
+ if #6<0:
+ else:
+ if angle(1/2[A,C]-B)>0:
+ if #6=0:
+ label(btex ? etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+ else:
+ label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+ fi;
+ else:
+ if #6=0:
+ label(btex ? etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+ else:
+ label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+ fi;
+ fi;
+ fi;
+ if #4<0:
+ else:
+ if angle(1/2[B,C]-A)>0:
+ if #4=0:
+ label(btex ? etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+ else:
+ label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+ fi;
+ else:
+ if #4=0:
+ label(btex ? etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+ else:
+ label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+ fi;
+ fi;
+ fi;
+ if #5<0:
+ else:
+ if angle(1/2[A,B]-C)>0:
+ if #5=0:
+ label(btex ? etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+ else:
+ if #5=0:
+ label(btex ? etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+ fi;
+ fi;
+\end{mpost}
+\fi
+}
+
+\def\MPFigTrigoAngle#1#2#3#4#5#6{%
+ % #1 A
+ % #2 B
+ % #3 C
+ % #4 opp
+ % #5 adj
+ % #6 hyp
+ \ifluatex
+ \mplibcodeinherit{enable}
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=1cm;
+ pair A,B,C,O,I,D,E,F;%
+ % On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ numeric Anglelua;
+ Anglelua=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Anglelua);
+ B:=B rotatedabout(O,Anglelua);
+ C:=C rotatedabout(O,Anglelua);
+ % On définit le centre du cercle inscrit
+ (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ %on dessine à main levée :)
+ path triangle;
+ triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+ %on définit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+ %L'angle :)
+ path cc;
+ cc=fullcircle scaled 1u;
+ % on marque les angles
+ picture MAngle;
+ MAngle=image(
+ draw (cc shifted A);
+% draw (cc shifted B);
+% draw (cc shifted C);
+ );
+ draw MAngle;
+ clip currentpicture to triangle;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ %on labelise
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex ? etex,A+0.95u*unitvector(I-A));
+ decalage:=3mm;
+ if angle(1/2[A,C]-B)>0:
+ label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+ else:
+ label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+ fi;
+ if angle(1/2[B,C]-A)>0:
+ label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+ else:
+ label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+ fi;
+ if angle(1/2[A,B]-C)>0:
+ label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+\end{mplibcode}
+\mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ u:=1cm;
+ pair A,B,C,O,I,D,E,F;%
+ %On place les points A,B,C sur le cercle de manière à faciliter la rotation de la figure
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]);
+ % On définit le centre du cercle circonscrit
+ O - .5[A,B] = whatever * (B-A) rotated 90;
+ O - .5[B,C] = whatever * (C-B) rotated 90;
+ % On tourne pour éventuellement moins de lassitude :)
+ Angle=uniformdeviate(180);%Caractère aléatoire
+ A:=A rotatedabout(O,Angle);
+ B:=B rotatedabout(O,Angle);
+ C:=C rotatedabout(O,Angle);
+ % On définit le centre du cercle inscrit
+ (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
+ (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
+ %on dessine à main levée :)
+ path triangle;
+ triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
+ %on définit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)};
+ %L'angle :)
+ path cc;
+ cc=fullcircle scaled 1u;
+ % on marque les angles
+ picture MAngle;
+ MAngle=image(
+ draw (cc shifted A);
+% draw (cc shifted B);
+% draw (cc shifted C);
+ );
+ draw MAngle;
+ clip currentpicture to triangle;
+ draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
+ draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
+ draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
+ %on labelise
+ label(btex #1 etex,1.15[O,A]);
+ label(btex #2 etex,1.15[O,B]);
+ label(btex #3 etex,1.15[O,C]);
+ label(btex ? etex,A+0.95u*unitvector(I-A));
+ decalage:=3mm;
+ if angle(1/2[A,C]-B)>0:
+ label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+ else:
+ label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+ fi;
+ if angle(1/2[B,C]-A)>0:
+ label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+ else:
+ label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+ fi;
+ if angle(1/2[A,B]-C)>0:
+ label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+ fi;
+\end{mpost}
+\fi
+}
+
+\setKVdefault[ClesTrigo]{Angle=false,Propor=false,Figure=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false}%
+
+\newcommand\TrigoCalculs[5][]{%
+ \setKV[ClesTrigo]{#1}%
+ % #1 Clés
+ % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC
+ % #3 Longueur
+ % #4 Longueur
+ %#5 angle
+ % On définit les points
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ Dans le triangle $\NomA\NomB\NomC$, rectangle en $\NomB$, on a :
+ \ifboolKV[ClesTrigo]{Cosinus}{%
+ \ifx\bla#3\bla%on calcule le côté adjacent
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
+ \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
+ \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB%
+ \end{align*}%
+ }{%
+ \begin{align*}
+ \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
+ \cos(\ang{#5})&=\frac{\NomA\NomB}{\num{#4}}\\
+ \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
+ \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \else
+ \ifx\bla#4\bla%on calcule l'hypothénuse
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
+ \NomA\NomC\times\cos(\ang{#5})&=\num{#3}\\
+ \NomA\NomC&=\frac{\num{#3}}{\cos(\ang{#5})}\\
+ \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \end{align*}
+ }{%
+ \begin{align*}
+ \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
+ \cos(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
+ \NomA\NomC&=\frac{\num{#3}}{\cos(\ang{#5})}\\
+ \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \end{align*}
+ }
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \else%on calcule l'angle
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
+ \num{#4}\times\cos(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
+ \cos(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+ \end{align*}%
+ }{%
+ \begin{align*}
+ \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
+ \cos(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+ \fi
+ \fi
+ }{}
+ \ifboolKV[ClesTrigo]{Sinus}{%
+ \ifx\bla#3\bla%on calcule le côté opposé
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+ \num{#4}\times\sin(\ang{#5})&=\NomB\NomC\\
+ \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \end{align*}%
+ }{%
+ \begin{align*}
+ \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
+ \sin(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
+ \num{#4}\times\sin(\ang{#5})&=\NomB\NomC\\
+ \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \else
+ \ifx\bla#4\bla%on calcule l'hypothénuse
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+ \NomA\NomC\times\sin(\ang{#5})&=\num{#3}\\
+ \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
+ \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \end{align*}%
+ }{
+ \begin{align*}
+ \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
+ \sin(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
+ \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
+ \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \else%on calcule l'angle
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+ \num{#4}\times\sin(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
+ \sin(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+ \end{align*}%
+ }{
+ \begin{align*}
+ \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
+ \sin(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+ \fi
+ \fi
+ }{}
+ \ifboolKV[ClesTrigo]{Tangente}{%
+ \ifx\bla#3\bla%on calcule le côté opposé
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\%
+ \num{#4}\times\tan(\ang{#5})&=\NomB\NomC\\%
+ \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \end{align*}%
+ }{%
+ \begin{align*}
+ \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
+ \tan(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
+ \num{#4}\times\tan(\ang{#5})&=\NomB\NomC\\
+ \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \else
+ \ifx\bla#4\bla%on calcule l'adjacent
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+ \NomA\NomB\times\tan(\ang{#5})&=\num{#3}\\
+ \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
+ \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \end{align*}%
+ }{
+ \begin{align*}
+ \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
+ \tan(\ang{#5})&=\frac{\num{#3}}{\NomA\NomB}\\
+ \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
+ \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \else%on calcule l'angle
+ \ifboolKV[ClesTrigo]{Propor}{%
+ \begin{align*}
+ \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+ \num{#4}\times\tan(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
+ \tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+ \end{align*}%
+ }{
+ \begin{align*}
+ \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
+ \tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+ \end{align*}%
+ }%
+ \xdef\ResultatTrigo{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+ \fi
+ \fi
+ }{}
+}
+
+\newcommand\Trigo[5][]{%
+ \useKVdefault[ClesTrigo]%
+ \setKV[ClesTrigo]{#1}%
+ % #1 Clés
+ % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC
+ % #3 Longueur
+ % #4 Longueur ou angle en fonction du calcul à faire. Si longueur, #3<#4
+ % On définit les points
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ % On rédige
+ \ifboolKV[ClesTrigo]{Figure}{%
+ \begin{multicols}{2}%
+ {\em La figure est donnée à titre indicatif.}%
+ \ifboolKV[ClesTrigo]{Angle}{%figure pour calculer un angle
+ \ifboolKV[ClesTrigo]{Cosinus}{%
+ \begin{center}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{}{#3}{#4}
+ \end{center}
+ }{}%
+ \ifboolKV[ClesTrigo]{Sinus}{%
+ \begin{center}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{}{#4}
+ \end{center}
+ }{}%
+ \ifboolKV[ClesTrigo]{Tangente}{%
+ \begin{center}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{}
+ \end{center}
+ }{}%
+ }{%figure pour calculer une longueur
+ \ifboolKV[ClesTrigo]{Cosinus}{%
+ \ifx#3\bla\bla%adjacent inconnu
+ \begin{center}
+ \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}
+ \end{center}
+ \else
+ \begin{center}
+ \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}
+ \end{center}
+ \fi
+ }{}%
+ \ifboolKV[ClesTrigo]{Sinus}{%
+ \ifx#3\bla\bla%adjacent inconnu
+ \begin{center}
+ \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}
+ \end{center}
+ \else
+ \begin{center}
+ \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}
+ \end{center}
+ \fi
+ }{}%
+ \ifboolKV[ClesTrigo]{Tangente}{%
+ \ifx#3\bla\bla%adjacent inconnu
+ \begin{center}
+ \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}
+ \end{center}
+ \else%
+ \begin{center}
+ \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}
+ \end{center}
+ \fi%
+ }{}%
+ }%
+ \par\columnbreak\par
+ \TrigoCalculs{#2}{#3}{#4}{#5}%
+ \end{multicols}
+ }{%
+ \TrigoCalculs{#2}{#3}{#4}{#5}%
+ }%
+}%
+
+%%%%%%%%%%%%%%%
+%% Statistiques
+%%%%%%%%%%%%%%%
+\newcommand\NbDonnees{}
+\newcommand\SommeDonnees{}%
+\newcommand\EffectifTotal{}%
+\newcommand\Moyenne{}%
+\newcommand\Etendue{}%
+\newcommand\Mediane{}%
+\newcommand\DonneeMax{}%
+\newcommand\DonneeMin{}%
+\newcommand\EffectifMax{}%
+
+\setKVdefault[ClesStat]{Tableau=false,Frequence=false,EffectifTotal=false,Etendue=false,Moyenne=false,SET=false,Mediane=false,Total=false,Concret=false,Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif(s),Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,Graphique=false,Batons=true,Unitex=0.5,Unitey=0.5,Rayon=3cm,AffichageAngle=false,Liste=false,ECC=false,Coupure=10}
+
+% La construction du tableau
+\def\addtotok#1#2{#1\expandafter{\the#1#2}}
+\newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc
+\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{&\num{#1}}\addtotok\tabtoksb{&\num{#2}}}
+\def\buildtab{%
+ \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
+ \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}%
+ \[%
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeCompletelen}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
+ \hline%
+ \rowcolor{gray!15}\the\tabtoksa\\\hline%
+ \the\tabtoksb\\\hline%
+ \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}\\\hline}{}%
+ \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}\\\hline}{}%
+ \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\CalculSemiAngle{##1}}\\\hline}{}%
+ \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}\\\hline}{}%
+ \end{tabular}
+ \]
+}
+
+\def\buildtabt{%
+ \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
+ \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}%
+ \[%
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeCompletelen+1}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
+ \hline%
+ \rowcolor{gray!15}\the\tabtoksa&Total\\\hline%
+ \the\tabtoksb&\ifboolKV[ClesStat]{TableauVide}{}{\num{\EffectifTotal}}%
+ \\\hline%
+ \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{100}\\\hline}{}%
+ \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{360}\\\hline}{}%
+ \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculSemiAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{180}\\\hline}{}%
+ \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{\num{\EffectifTotal}}\\\hline}{}%
+ \end{tabular}
+ \]
+}
+
+\def\updatetoksq#1/#2\nil{\addtotok\tabtoksa{&#1}\addtotok\tabtoksb{&\num{#2}}}
+\def\buildtabq{%
+ \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
+ \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoksq\compteur\nil}%
+ \[%
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeCompletelen}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
+ \hline%
+ \rowcolor{gray!15}\the\tabtoksa\\\hline%
+ \the\tabtoksb\\\hline%
+ \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}\\\hline}{}%
+ \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}\\\hline}{}%
+ \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculSemiAngle{##1}}}\\\hline}{}%
+ \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}\\\hline}{}%
+ \end{tabular}
+ \]
+}
+
+\def\buildtabqt{%
+ \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
+ \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoksq\compteur\nil}%
+ \[%
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeCompletelen+1}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
+ \hline%
+ \rowcolor{gray!15}\the\tabtoksa&Total\\\hline%
+ \the\tabtoksb&\num{\EffectifTotal}\\\hline%
+ \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{100}\\\hline}{}%
+ \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{360}\\\hline}{}%
+ \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculSemiAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{180}\\\hline}{}%
+ \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{\num{\EffectifTotal}}\\\hline}{}%
+ \end{tabular}
+ \]
+}
+
+% Pour construire le diagramme en bâtons
+\def\Updatetoks#1/#2\nil{\addtotok\toklistepoint{(#1,#2),}}
+\def\buildgraph{%
+ \newtoks\toklistepoint
+ \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoks\compteur\nil}%
+ \[\MPStat{\useKV[ClesStat]{Unitex}}{\useKV[ClesStat]{Unitey}}{\the\toklistepoint}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}\]%
+}%
+
+% Pour construire le diagramme en bâtons qualitatif
+\def\Updatetoksq#1/#2\nil{\addtotok\toklistepointq{"#1",#2,}}
+\def\buildgraphq{%
+ \newtoks\toklistepointq
+ \toklistepointq{}
+ \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}
+ \[\MPStatQ{2*\useKV[ClesStat]{Unitex}}{0.5*\useKV[ClesStat]{Unitey}}{\the\toklistepointq}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}\]
+}
+
+% Pour construire le diagramme circulaire qualitatif
+\def\buildgraphcq#1{%
+ \newtoks\toklistepointq%
+ \toklistepointq{}%
+ \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}%
+ \ifboolKV[ClesStat]{AffichageAngle}{%
+ \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}\]%
+ }{%
+ \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}\]%
+ }%
+}%
+
+%% calcul des fréquences
+\newcommand\CalculFrequence[1]{%
+ \fpeval{round(\ListeComplete[#1,2]*100/\EffectifTotal,0)}
+}
+
+%% calcul des angles
+\newcommand\CalculAngle[1]{%
+ \fpeval{round(\ListeComplete[#1,2]*360/\EffectifTotal,0)}
+}
+\newcommand\CalculSemiAngle[1]{%
+ \fpeval{round(\ListeComplete[#1,2]*180/\EffectifTotal,0)}
+}
+
+%% calcul des ECC
+\newcount\CompteurECC%
+\newcount\CompteurECCTotal%
+
+\newcommand\CalculECC[1]{%
+ \xdef\TotalECC{0}%
+ \CompteurECC=1%
+ \CompteurECCTotal=\numexpr#1+1%
+ \whiledo{\CompteurECC < \CompteurECCTotal}{
+ \xdef\TotalECC{\fpeval{\TotalECC+\ListeComplete[\the\CompteurECC,2]}}%
+ \CompteurECC=\numexpr\CompteurECC+1%
+ }%
+ \num{\TotalECC}%
+}
+
+% la construction du graphique
+\def\MPStat#1#2#3#4#5#6{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ maxx:=0;
+ maxy:=0;
+ unitex:=#1*cm;
+ unitey:=#2*cm;
+ pair A[],B[],P[];
+ n:=0;
+ vardef toto(text t)=
+ for p_=t:
+ if pair p_:
+ n:=n+1;
+ P[n]=((xpart(p_)-(#6))*unitex,ypart(p_)*unitey);
+ if xpart(p_)>maxx:
+ maxx:=xpart(p_)-(#6);
+ fi;
+ if ypart(p_)>maxy:
+ maxy:=ypart(p_);
+ fi;
+ A[n]=unitex*(xpart(p_)-(#6),0);
+ B[n]=unitey*(0,ypart(p_));
+ label.bot(TEX("\num{"&decimal(xpart(p_))&"}"),A[n]);
+ label.lft(TEX("\num{"&decimal(ypart(p_))&"}"),B[n]);
+ fi;
+ endfor;
+ enddef;
+ toto(#3);
+ for k=1 upto n:
+ draw A[k]--P[k] withpen pencircle scaled 2bp;
+ draw B[k]--P[k] dashed evenly;
+ endfor;
+ drawarrow (0,0)--unitex*(maxx+1,0);
+ drawarrow (0,0)--unitey*(0,maxy+1);
+ label.lrt(btex #4 etex,unitex*(maxx+1,0));
+ label.urt(btex #5 etex,unitey*(0,maxy+1));
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ maxx:=0;
+ maxy:=0;
+ unitex:=#1*cm;
+ unitey:=#2*cm;
+ pair A[],B[],P[];
+ n:=0;
+ vardef toto(text t)=
+ for p_=t:
+ if pair p_:
+ n:=n+1;
+ P[n]=((xpart(p_)-(#6))*unitex,ypart(p_)*unitey);
+ if xpart(p_)>maxx:
+ maxx:=xpart(p_)-(#6);
+ fi;
+ if ypart(p_)>maxy:
+ maxy:=ypart(p_);
+ fi;
+ A[n]=unitex*(xpart(p_)-(#6),0);
+ B[n]=unitey*(0,ypart(p_));
+ label.bot(LATEX("\num{"&decimal(xpart(p_))&"}"),A[n]);
+ label.lft(LATEX("\num{"&decimal(ypart(p_))&"}"),B[n]);
+ fi;
+ endfor;
+ enddef;
+ toto(#3);
+ for k=1 upto n:
+ draw A[k]--P[k] withpen pencircle scaled 2bp;
+ draw B[k]--P[k] dashed evenly;
+ endfor;
+ drawarrow (0,0)--unitex*(maxx+1,0);
+ drawarrow (0,0)--unitey*(0,maxy+1);
+ label.lrt(btex #4 etex,unitex*(maxx+1,0));
+ label.urt(btex #5 etex,unitey*(0,maxy+1));
+ \end{mpost}
+ \fi
+}
+
+% la construction du graphique qualitatif
+\def\MPStatQ#1#2#3#4#5#6{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ maxy:=0;
+ unitex:=#1*cm;
+ unitey:=#2*cm;
+ pair A[],B[],P[];
+ n:=0;
+ vardef toto(text t)=
+ for p_=t:
+ if numeric p_:
+ P[n]=((n+1)*unitex,unitey*p_);
+ B[n]=(0,unitey*p_);
+ label.lft(TEX("\num{"&decimal(p_)&"}"),B[n]);
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ n:=n+1;
+ else:
+ A[n]=unitex*(n+1,0);
+ label.bot(TEX(p_) rotated 90,A[n]);
+ fi;
+ endfor;
+ enddef;
+ toto(#3);
+ for k=0 upto n-1:
+ draw A[k]--P[k] withpen pencircle scaled 2bp;
+ draw B[k]--P[k] dashed evenly;
+ endfor;
+ drawarrow (0,0)--unitex*(n+1,0);
+ drawarrow (0,0)--unitey*(0,maxy+1);
+ label.lrt(btex #4 etex,unitex*(n+1,0));
+ label.urt(btex #5 etex,unitey*(0,maxy+1));
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ maxy:=0;
+ unitex:=#1*cm;
+ unitey:=#2*cm;
+ pair A[],B[],P[];
+ n:=0;
+ vardef toto(text t)=
+ for p_=t:
+ if numeric p_:
+ P[n]=((n+1)*unitex,unitey*p_);
+ B[n]=(0,unitey*p_);
+ label.lft(LATEX("\num{"&decimal(p_)&"}"),B[n]);
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ n:=n+1;
+ else:
+ A[n]=unitex*(n+1,0);
+ label.bot(LATEX(p_) rotated 90,A[n]);
+ fi;
+ endfor;
+ enddef;
+ toto(#3);
+ for k=0 upto n-1:
+ draw A[k]--P[k] withpen pencircle scaled 2bp;
+ draw B[k]--P[k] dashed evenly;
+ endfor;
+ drawarrow (0,0)--unitex*(n+1,0);
+ drawarrow (0,0)--unitey*(0,maxy+1);
+ label.lrt(btex #4 etex,unitex*(n+1,0));
+ label.urt(btex #5 etex,unitey*(0,maxy+1));
+ \end{mpost}
+ \fi
+}
+
+% la construction du graphique qualitatif
+\def\MPStatCirculaireQ#1#2#3#4{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair A[],O,B[],C[],D[];
+ O=(0,0);
+ n:=0;
+ numeric total[],ang[];
+ total[0]=0;
+ ang[0]:=0;
+ path cc;
+ cc=(fullcircle scaled (2*#1));
+ if #3=360:
+ draw cc;
+ else:
+ draw (subpath(0,length cc/2) of cc)--cycle;
+ fi;
+ A[0]=point(0) of cc;
+ vardef toto(text t)=
+ for p_=t:
+ if numeric p_:
+ n:=n+1;
+ total[n]:=total[n-1]+p_;
+ fi;
+ endfor;
+ N=n;
+ for k=1 upto N:
+ ang[k]=(#3/total[N])*total[k];
+ endfor;
+ n:=0;
+ for p_=t:
+ if numeric p_:
+ n:=n+1;
+ A[n]=A[n-1] rotatedabout(O,p_*(#3/total[N]));
+ draw A[n-1]--O--A[n];
+ % Affichage des angles associés
+ if #4=1:
+ if round(p_*(#3/total[N]))>15:
+ if (n mod 2)=0:
+ marque_a:=0.9*20
+ else:
+ marque_a:=1.1*20/0.9
+ fi;
+ draw Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")) scaled 0.5)));
+ fi;
+ fi;
+ %
+ fi;
+ endfor;
+ n:=0;
+ path cd[];
+ for p_=t:
+ if string p_:
+ n:=n+1;
+ C[n]=A[n-1] rotatedabout(O,(ang[n]-ang[n-1])/2);
+ draw 0.95[O,C[n]]--1.05[O,C[n]];
+ C[n]:=1.05[O,C[n]];
+ if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)):
+ D[n]=C[n]+(0.5cm,0);
+ draw C[n]--D[n];
+ label.urt(TEX(p_),D[n]);
+ fi;
+ if (xpart(C[n])<xpart(O)) and (ypart(C[n])>ypart(O)):
+ D[n]=C[n]-(0.5cm,0);
+ draw C[n]--D[n];
+ label.ulft(TEX(p_),D[n]);
+ fi;
+ if (xpart(C[n])<xpart(O)) and (ypart(C[n])<ypart(O)):
+ D[n]=C[n]-(0.5cm,0);
+ draw C[n]--D[n];
+ label.llft(TEX(p_),D[n]);
+ fi;
+ if (xpart(C[n])>xpart(O)) and (ypart(C[n])<ypart(O)):
+ D[n]=C[n]+(0.5cm,0);
+ draw C[n]--D[n];
+ label.lrt(TEX(p_),D[n]);
+ fi;
+ fi;
+ endfor;
+ enddef;
+ Figure(-10u,-10u,10u,10u);
+ toto(#2);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A[],O,B[],C[],D[];
+ O=(0,0);
+ n:=0;
+ numeric total[],ang[];
+ total[0]=0;
+ ang[0]:=0;
+ path cc;
+ cc=(fullcircle scaled (2*#1));
+ if #3=360:
+ draw cc;
+ else:
+ draw (subpath(0,length cc/2) of cc)--cycle;
+ fi;
+ A[0]=point(0) of cc;
+ vardef toto(text t)=
+ for p_=t:
+ if numeric p_:
+ n:=n+1;
+ total[n]:=total[n-1]+p_;
+ fi;
+ endfor;
+ N=n;
+ for k=1 upto N:
+ ang[k]=(#3/total[N])*total[k];
+ endfor;
+ n:=0;
+ for p_=t:
+ if numeric p_:
+ n:=n+1;
+ A[n]=A[n-1] rotatedabout(O,p_*(#3/total[N]));
+ draw A[n-1]--O--A[n];
+ % Affichage des angles associés
+ if #4=1:
+ if round(p_*(#3/total[N]))>15:
+ if (n mod 2)=0:
+ marque_a:=0.9*20
+ else:
+ marque_a:=1.1*20/0.9
+ fi;
+ draw Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")) scaled 0.5)));
+ fi;
+ fi;
+ %
+ fi;
+ endfor;
+ n:=0;
+ path cd[];
+ for p_=t:
+ if string p_:
+ n:=n+1;
+ C[n]=A[n-1] rotatedabout(O,(ang[n]-ang[n-1])/2);
+ draw 0.95[O,C[n]]--1.05[O,C[n]];
+ C[n]:=1.05[O,C[n]];
+ if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)):
+ D[n]=C[n]+(0.5cm,0);
+ draw C[n]--D[n];
+ label.urt(LATEX(p_),D[n]);
+ fi;
+ if (xpart(C[n])<xpart(O)) and (ypart(C[n])>ypart(O)):
+ D[n]=C[n]-(0.5cm,0);
+ draw C[n]--D[n];
+ label.ulft(LATEX(p_),D[n]);
+ fi;
+ if (xpart(C[n])<xpart(O)) and (ypart(C[n])<ypart(O)):
+ D[n]=C[n]-(0.5cm,0);
+ draw C[n]--D[n];
+ label.llft(LATEX(p_),D[n]);
+ fi;
+ if (xpart(C[n])>xpart(O)) and (ypart(C[n])<ypart(O)):
+ D[n]=C[n]+(0.5cm,0);
+ draw C[n]--D[n];
+ label.lrt(LATEX(p_),D[n]);
+ fi;
+ fi;
+ endfor;
+ enddef;
+ Figure(-10u,-10u,10u,10u);
+ toto(#2);
+ \end{mpost}
+ \fi
+}
+
+%Pour la médiane.
+\DTLgnewdb{mtdb}%
+\dtlexpandnewvalue%
+\newcount\nbdonnees%
+
+
+\newcommand\Stat[2][]{%
+ \useKVdefault[ClesStat]%
+ \setKV[ClesStat]{#1}%
+ \ifboolKV[ClesStat]{Liste}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\Liste{#2}%
+ \xdef\foo{}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \xintFor* ##1 in {\xintSeq {1}{\Listelen}}\do{%
+ \xdef\foo{\foo 1/\Liste[##1],}%
+ }%
+ \readlist*\ListeComplete{\foo}%
+ \setKV[ClesStat]{Qualitatif}%
+ }{%
+ % % on lit la liste écrite sous la forme valeur/effectif
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeComplete{#2}%
+ }
+ % on crée la base de données des valeurs dans le cas qualitatif
+ \DTLcleardb{mtdb}%
+ % on les trie pour la médiane dans le cas qualitatif % Touhami / Texnique.fr
+ \foreachitem\x\in\ListeComplete{%
+ \DTLnewrow{mtdb}%
+ \itemtomacro\ListeComplete[\xcnt,2]\y%
+ \DTLnewdbentry{mtdb}{Numeric}{\y}%
+ }%
+ \dtlsort{Numeric}{mtdb}{\dtlicompare}%
+ % % on réinitialise les valeurs des critères de position et de
+ % dispersion
+ \renewcommand\NbDonnees{}
+ \renewcommand\SommeDonnees{}%
+ \renewcommand\EffectifTotal{}%
+ \renewcommand\Moyenne{}%
+ \renewcommand\Etendue{}%
+ \renewcommand\Mediane{}%
+ \renewcommand\DonneeMax{0}%
+ \renewcommand\EffectifMax{0}%
+ \renewcommand\DonneeMin{999999999}%
+ \ifboolKV[ClesStat]{Qualitatif}{%Début qualitatif
+ % Calculs
+ % %% celui de la somme des données
+ \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,2]}}}%
+ % %% celui de l'effectif total
+ \xdef\EffectifTotal{\SommeDonnees}%
+ \ifboolKV[ClesStat]{EffectifTotal}{%
+ L'effectif total est \num{\ListeCompletelen}.\par
+ }{}
+ % %% celui de la moyenne
+ \xdef\Moyenne{\fpeval{\SommeDonnees/\ListeCompletelen}}%
+ \ifboolKV[ClesStat]{Moyenne}{%
+ La somme des données est :%
+ \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+ \[
+ \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
+ \]}{%
+ \[
+ \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{3}}\do{%
+ +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
+ +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
+ \]%
+ }%
+ \ifboolKV[ClesStat]{SET}{}{L'effectif total est \num{\ListeCompletelen}.\\}%
+ Donc la moyenne est égale à :%
+ \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
+ \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
+ \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
+ \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
+ \num{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
+ \]%
+ }{}%
+ % % %% celui de l'étendue
+ \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+ \xintifboolexpr{\ListeComplete[##1,2]>\DonneeMax}{%
+ \xdef\DonneeMax{\ListeComplete[##1,2]}%
+ }{}%
+ \xintifboolexpr{\ListeComplete[##1,2]<\DonneeMin}{%
+ \xdef\DonneeMin{\ListeComplete[##1,2]}%
+ }{}%
+ }%
+ \xdef\EffectifMax{\DonneeMax}%
+ \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%
+ \ifboolKV[ClesStat]{Etendue}{L'étendue est égale à $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ }{}%
+ \ifboolKV[ClesStat]{Mediane}{%
+ %%%%%%%%%%%%%%%%%%%%%%%%
+
+ On range les données par ordre croissant :%
+ \nbdonnees=0%
+ \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+ \[\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;}}\]%
+ }{%
+ \medskip%
+ \begin{center}
+ \begin{minipage}{0.9\linewidth}
+ \DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
+ }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder=0}{\\}{}}
+ \end{minipage}
+ \end{center}%
+ \medskip%
+ }%
+ \newcount\med%
+ \newcount\meda%
+ \ifodd\number\ListeCompletelen%odd impair
+ \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
+ L'effectif total est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
+ \else% pair
+ \med=\fpeval{\ListeCompletelen/2}\relax
+ \meda=\numexpr\med+1\relax
+ L'effectif total est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
+ \fi%
+ \newcount\k%
+ \k=0%
+ \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
+ \ifnum\k=\med %La médiane vaut \numeroDonnee\fi
+ \ifodd\number\ListeCompletelen%
+ La médiane est la \the\med\ieme{} donnée.\\Donc la médiane est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \else%
+ La \the\med\ieme{} donnée est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\xdef\Mediane{\numeroDonnee} %
+ \fi
+ \fi
+ \ifnum\k=\meda
+ La \the\meda\ieme{} donnée est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la médiane est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}
+ \fi
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%
+ }{}
+ % construction du tableau
+ \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabqt}{\buildtabq}}{}
+ % Construction du graphique ??
+ \ifboolKV[ClesStat]{Graphique}{%
+ \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{}}
+ \ifboolKV[ClesStat]{Batons}{\buildgraphq}{}
+ }{}
+ }{%%%%%%%%%%%%%%%%%%%%%Début quantitatif
+ % % on effectue les calculs
+ % %% celui de la somme des données
+ \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,1]*\ListeComplete[\doncnt,2]}}}%
+ % %% celui de l'effectif total
+ \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
+ % %% celui de l'étendue
+ \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+ \xintifboolexpr{\ListeComplete[##1,1]>\DonneeMax}{%
+ \xdef\DonneeMax{\ListeComplete[##1,1]}%
+ }{}%
+ \xintifboolexpr{\ListeComplete[##1,1]<\DonneeMin}{%
+ \xdef\DonneeMin{\ListeComplete[##1,1]}%
+ }{}%
+ }%
+% \xdef\EffectifMax{\DonneeMax}%
+ \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%%
+ % %% celui de la moyenne
+ \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
+ \ifboolKV[ClesStat]{EffectifTotal}{%
+ L'effectif total est : \[\ListeComplete[1,2]\xintFor* ##1 in
+ {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]
+ }{}%
+ \ifboolKV[ClesStat]{Moyenne}{%
+ La somme des données est :%
+ \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+ \[
+ \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ \]
+ }{%
+ \[
+ \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{2}}\do{%
+ +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
+ +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ \]
+ }
+ \ifboolKV[ClesStat]{SET}{}{L'effectif total est :%
+ \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
+ \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\num{\ListeComplete[##1,2]}
+ }=\num{\EffectifTotal}
+ \]%
+ }%
+ }
+ Donc la moyenne est égale à :%
+ \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
+ \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
+ \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
+ % Moy=\opprint{resultatmoy}--Moy1=\opprint{resultatmoy1}
+ \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
+ \num{\fpeval{round(\SommeDonnees/\EffectifTotal,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}
+ \]%
+ }{}%
+ % % Affichage des réponses.
+ % %% pour l'étendue
+ \ifboolKV[ClesStat]{Etendue}{L'étendue est égale à $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
+ % %% pour la médiane
+ \ifboolKV[ClesStat]{Mediane}{%
+
+ \newcount\med%
+ \newcount\meda%
+ \ifodd\number\EffectifTotal%odd impair
+ \med=\fpeval{(\EffectifTotal+1)/2}\relax%
+ L'effectif total est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
+ \else% pair
+ \med=\fpeval{\EffectifTotal/2}\relax%
+ \meda=\numexpr\med+1\relax%
+ L'effectif total est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
+ \fi%
+ \newcount\k%
+ \k=0%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+ \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
+ \k=\numexpr\k+1\relax%
+ \ifnum\k=\med%
+ \ifodd\number\EffectifTotal%
+ La médiane est la \the\med\ieme{} donnée. Donc la médiane est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \else%
+ La \the\med\ieme{} donnée est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
+ \fi%
+ \fi%
+ \ifnum\k=\meda%
+ La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la médiane est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \fi%
+ }%
+ }%
+ }{}%
+ % Construction de tableau
+ \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}{}%
+ % Construction du graphique ??
+ \ifboolKV[ClesStat]{Graphique}{\buildgraph}{}%
+ }%
+}%
+
+%%%%%%%%%%%%%
+%%% Radar
+%%%%%%%%%%%%%
+\setKVdefault[ClesRadar]{Rayon=3cm,Reference=20,MoyenneClasse=false,Disciplines=false,Pas=5}
+
+\newtoks\toklisteradara%pour la moyenne de l'élève
+\newtoks\toklisteradarb%pour la discipline
+\newtoks\toklisteradarc%pour la moyenne de classe
+
+\def\UpdateRadara#1/#2/#3\nil{\addtotok\toklisteradara{#1,}}
+\def\UpdateRadarb#1/#2/#3\nil{\addtotok\toklisteradarb{"#2",}}
+\def\UpdateRadarc#1/#2/#3\nil{\addtotok\toklisteradarc{#3,}}
+
+\newcommand\MPRadar[6]{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair O;
+ O=(0,0);
+ path cc;
+ cc=cercles(O,#1);
+ %%etiquettage des disciplines
+ n:=0;%compter le nombre de disciplines
+ for p_=#2:
+ n:=n+1;
+ endfor;
+ for k=1 upto n:
+ N[k]=k*(360/n);
+ trace segment(O,pointarc(cc,N[k]));% dashed evenly;
+ endfor;
+ p:=0;
+ for p_=#2:
+ p:=p+1;
+ if N[p]>180:
+ label(TEX(p_)
+ rotated(90+N[p]),1.15[O,pointarc(cc,N[p])]);
+ else:
+ label(TEX(p_)
+ rotated(-90+N[p]),1.15[O,pointarc(cc,N[p])]);
+ fi;
+ endfor;
+ % tracé des pas:
+ pas=#4/#3;
+ for k=1 upto pas-1:
+ trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor
+ --cycle dashed evenly withcolor 0.5white;
+ endfor;
+ trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
+ --cycle;
+ % etiquettage des pas
+ dotlabel.top(btex \tiny #4 etex rotated -90,pointarc(cc,0));
+ dotlabel.urt(btex \tiny #3 etex,(1/pas)[O,pointarc(cc,0)]);
+ % tracé des résultats élèves
+ pair El[];
+ el=0;
+ for p_=#5:
+ el:=el+1;
+ El[el]=(p_/#4)[O,pointarc(cc,N[el])];
+ endfor;
+ trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen
+ pencircle scaled 1.5 withcolor blue;
+ % tracé des résultats classe
+ pair Cl[];
+ cl=0;
+ for p_=#6:
+ cl:=cl+1;
+ Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])];
+ endfor;
+ trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge;
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ pair O;
+ O=(0,0);
+ path cc;
+ cc=cercles(O,#1);
+ %%etiquettage des disciplines
+ n:=0;%compter le nombre de disciplines
+ for p_=#2:
+ n:=n+1;
+ endfor;
+ for k=1 upto n:
+ N[k]=k*(360/n);
+ trace segment(O,pointarc(cc,N[k]));% dashed evenly;
+ endfor;
+ p:=0;
+ for p_=#2:
+ p:=p+1;
+ if N[p]>180:
+ label(LATEX(p_)
+ rotated(90+N[p]),1.15[O,pointarc(cc,N[p])]);
+ else:
+ label(LATEX(p_)
+ rotated(-90+N[p]),1.15[O,pointarc(cc,N[p])]);
+ fi;
+ endfor;
+ % tracé des pas:
+ pas=#4/#3;
+ for k=1 upto pas-1:
+ trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor
+ --cycle dashed evenly withcolor 0.5white;
+ endfor;
+ trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
+ --cycle;
+ % etiquettage des pas
+ dotlabel.top(LATEX("\noexpand\tiny"&decimal(#4)&"") rotated -90,pointarc(cc,0));
+ dotlabel.urt(LATEX("\noexpand\tiny"&decimal(#3)&""),(1/pas)[O,pointarc(cc,0)]);
+ % tracé des résultats élèves
+ pair El[];
+ el=0;
+ for p_=#5:
+ el:=el+1;
+ El[el]=(p_/#4)[O,pointarc(cc,N[el])];
+ endfor;
+ trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen
+ pencircle scaled 1.5 withcolor blue;
+ % tracé des résultats classe
+ pair Cl[];
+ cl=0;
+ for p_=#6:
+ cl:=cl+1;
+ Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])];
+ endfor;
+ trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge;
+ \end{mpost}
+ \fi
+}
+
+\newcommand\Radar[2][]{%
+ % 1 les paramètres
+ % 2 la répartition des notes
+ \useKVdefault[ClesRadar]%
+ \setKV[ClesRadar]{#1}%
+ \ignoreemptyitems%
+ \readlist*\ListeRadar{#2}%
+ \toklisteradara{}%
+ \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadara\compteur\nil}%
+ \ifboolKV[ClesRadar]{Disciplines}{}{%
+ \toklisteradarb{}%
+ \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarb\compteur\nil}%
+ }
+ \ifboolKV[ClesRadar]{MoyenneClasse}{}{%
+ \toklisteradarc{}%
+ \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarc\compteur\nil}%
+ }
+ \MPRadar{\useKV[ClesRadar]{Rayon}}{\the\toklisteradarb}{\useKV[ClesRadar]{Pas}}{\useKV[ClesRadar]{Reference}}{\the\toklisteradara}{\the\toklisteradarc}%
+}
+
+%%%%%%%%%%%%
+% Barres de niveaux
+%%%%%%%%%%%%
+\setKVdefault[ClesBarre]{Niveau=false,LimiteI=25,LimiteF=50,LimiteS=75,TexteOrigine=0,TexteReference=100,CouleurGraduation=white,CouleurFond=gray!50,CouleurBarre=black,Graduation=false,Nom=Défaut,Pas=10,CouleurI=red,CouleurF=orange,CouleurS=yellow,CouleurM=green}
+
+\newlength{\barrewidth}
+
+\newcommand\Jauge[2][]{%
+ \setlength{\barrewidth}{\linewidth-2\fboxsep}%
+ \useKVdefault[ClesBarre]%
+ \setKV[ClesBarre]{#1}%
+ \xdef\NomComp{\useKV[ClesBarre]{Nom}}%
+ \xdef\TexteOrigine{\useKV[ClesBarre]{Origine}}
+ \xdef\TexteReference{\useKV[ClesBarre]{Reference}}
+ \xdef\CouleurFond{\useKV[ClesBarre]{CouleurFond}}%
+ \xdef\CouleurGrad{\useKV[ClesBarre]{CouleurGraduation}}%
+ \xdef\CouleurBarre{\useKV[ClesBarre]{CouleurBarre}}%
+ \xdef\CouleurI{\useKV[ClesBarre]{CouleurI}}%
+ \xdef\CouleurF{\useKV[ClesBarre]{CouleurF}}%
+ \xdef\CouleurS{\useKV[ClesBarre]{CouleurS}}%
+ \xdef\CouleurM{\useKV[ClesBarre]{CouleurM}}%
+ \ifboolKV[ClesBarre]{Niveau}{%
+ \begin{tikzpicture}[rounded corners=2pt,very thin]
+ \fill [gray!50] (0,0) rectangle (\barrewidth, 0.15);
+ \xintifboolexpr{#2<\useKV[ClesBarre]{LimiteI}}{%
+ \fill [\CouleurI] (0,0) rectangle (#2/100*\barrewidth, 0.15);
+ }{\xintifboolexpr{#2<\useKV[ClesBarre]{LimiteF}}{%
+ \fill [\CouleurF] (0,0) rectangle (#2/100*\barrewidth, 0.15);
+ }{\xintifboolexpr{#2<\useKV[ClesBarre]{LimiteS}}{%
+ \fill [\CouleurS] (0,0) rectangle (#2/100*\barrewidth, 0.15);
+ }{\fill [\CouleurM] (0,0) rectangle (#2/100*\barrewidth, 0.15);}
+ }
+ }
+ \node[anchor=south west] at (0,0.5em) {\NomComp};%
+ \node[anchor=north] at (0,-0.25em) {\TexteOrigine};
+ \node[anchor=north] at (\barrewidth,-0.25em) {\TexteReference};
+ \ifboolKV[ClesBarre]{Graduation}{%
+ \foreach \s in {1,...,\fpeval{\useKV[ClesBarre]{Pas}-1}}%
+ {
+ \draw[\CouleurGrad] (\s/\useKV[ClesBarre]{Pas}*\barrewidth,0)--(\s/\useKV[ClesBarre]{Pas}*\barrewidth,0.15);
+ }
+ }{}
+ \foreach \s in {\useKV[ClesBarre]{LimiteI},\useKV[ClesBarre]{LimiteF},\useKV[ClesBarre]{LimiteS}}%
+ {
+ \draw[black] (\s/100*\barrewidth,-0.1)--(\s/100*\barrewidth,0.2);%
+ }
+ \end{tikzpicture}%
+ }{%
+ \begin{tikzpicture}[rounded corners=2pt,very thin]
+ \fill [\CouleurFond] (0,0) rectangle (\barrewidth, 0.15);%
+ \fill [\CouleurBarre] (0,0) rectangle (#2/100*\barrewidth, 0.15);%
+ \node[anchor=south west] at (0,0.5em) {\NomComp};%
+ \node[anchor=north] at (0,-0.25em) {\useKV[ClesBarre]{TexteOrigine}};%
+ \node[anchor=north] at (\barrewidth,-0.25em) {\useKV[ClesBarre]{TexteReference}};%
+ \ifboolKV[ClesBarre]{Graduation}{%
+ \foreach \s in {1,...,\fpeval{\useKV[ClesBarre]{Pas}-1}}%
+ {
+ \draw[\CouleurGrad] (\s/\useKV[ClesBarre]{Pas}*\barrewidth,0)--(\s/\useKV[ClesBarre]{Pas}*\barrewidth,0.15);
+ }}{}%
+ \end{tikzpicture}%
+ }
+}
+
+%%%%%%%%%%%%%%%
+%%% Equations
+%%%%%%%%%%%%%%%
+\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Entier=false,Lettre=x,Solution=false,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Pose=false,Equivalence=false}
+
+
+\newcommand\rightcomment[4]%
+ {\begin{tikzpicture}[remember picture,overlay]
+ \draw[Cfleches,-stealth]
+ ($({pic cs:#3}|-{pic cs:#1})+(\useKV[ClesEquation]{Ecart},0)$)
+ .. controls +(0.2,-0.05) and +(0.2,0.1) ..
+ node[right,align=left]{#4}
+ ($({pic cs:#3}|-{pic cs:#2})+(\useKV[ClesEquation]{Ecart},0.1)$);
+ \end{tikzpicture}%
+ }
+
+
+ \newcommand\leftcomment[4]%
+ {\begin{tikzpicture}[remember picture,overlay]
+ \draw[Cfleches,-stealth]
+ ($({pic cs:#3}|-{pic cs:#1})-(\useKV[ClesEquation]{Ecart},0)$)
+ .. controls +(-0.2,-0.05) and +(-0.2,0.1) ..
+ node[left,align=right]{#4}
+ ($({pic cs:#3}|-{pic cs:#2})-(\useKV[ClesEquation]{Ecart},-0.1)$);
+ \end{tikzpicture}%
+ }
+
+ \newcommand\Rightcomment[4]%
+ {\begin{tikzpicture}[remember picture,overlay]
+ \draw[Cfleches,-stealth]
+ ($({pic cs:#3}|-{pic cs:#1})+(\useKV[ClesEquation]{Ecart},0)$)
+ .. controls +(0.2,-0.05) and +(0.2,0.1) ..
+ node[right,align=left]{#4}
+ ($({pic cs:#3}|-{pic cs:#2})+(\useKV[ClesEquation]{Ecart},0.1)$);
+ \end{tikzpicture}%
+ }
+ \newcommand\Leftcomment[4]%
+ {\begin{tikzpicture}[remember picture,overlay]
+ \draw[Cfleches,-stealth]
+ ($({pic cs:#3}|-{pic cs:#1})-(\useKV[ClesEquation]{Ecart},0)$)
+ .. controls +(-0.2,-0.05) and +(-0.2,0.1) ..
+ node[left,align=right]{#4}
+ ($({pic cs:#3}|-{pic cs:#2})-(\useKV[ClesEquation]{Ecart},-0.1)$);
+ \end{tikzpicture}%
+ }
+
+ % Pour "oublier" les tikzmarks. En cas de plusieurs utilisations de la macro \ResolEquation
+\newcounter{Nbequa}
+\setcounter{Nbequa}{0}
+
+%CT
+\newdimen\fdashwidth \fdashwidth = 0.8pt % épaisseur traits
+\newdimen\fdashlength \fdashlength = 0.5mm % longueur des pointillés et séparation entre pointillés
+\newdimen\fdashsep \fdashsep = 3pt % séparateur entre contenu et traits
+
+\def\fdash#1{%
+ \leavevmode\begingroup%
+ \setbox0\hbox{#1}%
+ \def\hdash{\vrule height\fdashwidth width\fdashlength\relax}%
+ \def\vdash{\hrule height\fdashlength width\fdashwidth\relax}%
+ \def\dashblank{\kern\fdashlength}%
+ \ifdim\fdashsep>0pt
+ \setbox0\hbox{\vrule width0pt height\dimexpr\ht0+\fdashsep depth\dimexpr\dp0+\fdashsep\kern\fdashsep\unhbox0 \kern\fdashsep}%
+ \fi
+ \edef\hdash{\hbox to\the\wd0{\noexpand\color{Csymbole}\hdash\kern.5\fdashlength\xleaders\hbox{\hdash\dashblank}\hfil\hdash}}%
+ \edef\vdash{\vbox to\the\dimexpr\ht0+\dp0+2\fdashwidth{\noexpand\color{Csymbole}\vdash\kern.5\fdashlength\xleaders\vbox{\vdash\dashblank}\vfil\vdash}}%
+ \hbox{%
+ \vdash
+ \vtop{\vbox{\offinterlineskip\hdash\hbox{\unhbox0 }\hdash}}%
+ \vdash}%
+ \endgroup
+}
+% fin CT
+\def\Fdash#1{\raisebox{-2\fdashsep+\fdashwidth}{\fdash{#1}}}
+
+%Une simplification de a/b est possible ou non ?
+\newboolean{Simplification}
+
+\newcommand{\SSimpliTest}[2]{%
+ % Test d'une simplification possible ou pas de #1/#2
+ \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno%
+ \numerateur=\number#1
+ \denominateur=\number#2
+ \ifnum\number#1<0
+ \valabsnum=\numexpr0-\number#1
+ \else
+ \valabsnum=\number#1
+ \fi
+ \ifnum\number#2<0
+ \valabsdeno=\numexpr0-\number#2
+ \else
+ \valabsdeno=\number#2
+ \fi
+ \ifnum\the\valabsnum=0
+ \setboolean{Simplification}{true}
+ \else
+ \PGCD{\the\valabsnum}{\the\valabsdeno}
+ \ifnum\pgcd>1
+ \setboolean{Simplification}{true}
+ \else
+ \ifnum\the\numerateur<0
+ \ifnum\the\denominateur<0
+ \setboolean{Simplification}{true}
+ \else
+ \ifnum\valabsdeno=1\relax
+ \setboolean{Simplification}{true}
+ \else
+ \setboolean{Simplification}{false}
+ \fi
+ \fi
+ \else
+ \ifnum\valabsdeno=1\relax
+ \setboolean{Simplification}{true}
+ \else
+ \setboolean{Simplification}{false}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\definecolor{Cfleches}{RGB}{100,100,100}%
+
+\input{EquationSoustraction1}%
+\input{EquationTerme1}%
+\input{EquationComposition1}%
+\input{EquationPose1}%
+\input{EquationSymbole1}%
+\input{EquationLaurent1}
+
+\newcommand{\ResolEquation}[5][]{%
+ \useKVdefault[ClesEquation]%
+ \setKV[ClesEquation]{#1}%
+ \colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}%
+ \colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}%
+ \colorlet{Csymbole}{\useKV[ClesEquation]{CouleurSymbole}}%
+ \colorlet{Cdecomp}{\useKV[ClesEquation]{CouleurSous}}%
+ \ifboolKV[ClesEquation]{Carre}{%
+ \ResolEquationCarre[#1]{#2}%
+ }{%
+ \ifboolKV[ClesEquation]{Produit}{%
+ \ResolEquationProduit[#1]{#2}{#3}{#4}{#5}%
+ }{%
+ \ifboolKV[ClesEquation]{Verification}{%
+ \Verification[#1]{#2}{#3}{#4}{#5}%
+ }{%
+ \ifboolKV[ClesEquation]{Symbole}{%
+ \ResolEquationSymbole[#1]{#2}{#3}{#4}{#5}%
+ }{%
+ \ifboolKV[ClesEquation]{Laurent}{%
+ \ResolEquationLaurent[#1]{#2}{#3}{#4}{#5}%
+ }{%
+ \ifboolKV[ClesEquation]{Terme}{%
+ \ResolEquationTerme[#1]{#2}{#3}{#4}{#5}%
+ }{\ifboolKV[ClesEquation]{Composition}{%
+ \ResolEquationComposition[#1]{#2}{#3}{#4}{#5}%
+ }{\ifboolKV[ClesEquation]{Pose}{%
+ \ResolEquationL[#1]{#2}{#3}{#4}{#5}%
+ }{%
+ \ResolEquationSoustraction[#1]{#2}{#3}{#4}{#5}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+\newcommand\ResolEquationCarre[2][]{%
+ \setKV[ClesEquation]{#1}%
+ \xintifboolexpr{#2<0}{%
+ Comme $\num{#2}$ est négatif, alors l'équation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ n'a aucune solution.%
+ }{\xintifboolexpr{#2=0}{%
+ L'équation $\useKV[ClesEquation]{Lettre}^2=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.%
+ }{%
+ Comme \num{#2} est positif, alors l'équation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ a deux solutions :%
+ \begin{align*}
+ \useKV[ClesEquation]{Lettre}&=\sqrt{\num{#2}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\sqrt{\num{#2}}%\\
+ \ifboolKV[ClesEquation]{Entier}{\\%
+ \useKV[ClesEquation]{Lettre}&=\num{\fpeval{sqrt(#2)}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\num{\fpeval{sqrt(#2)}}}{}%
+ \end{align*}
+ }
+ }
+}
+
+\newcommand\ResolEquationProduit[5][]{%
+ \setKV[ClesEquation]{#1}%
+ \ifboolKV[ClesEquation]{Equivalence}{}{C'est un produit nul donc \ifboolKV[ClesEquation]{Facteurs}{l'un au
+ moins des facteurs est nul}{} :}%
+ \ifboolKV[ClesEquation]{Equivalence}{%
+ \[\Distri{#2}{#3}{#4}{#5}=0\]
+ \begin{align*}%
+ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&\quad&\makebox[0pt]{ou}\quad&\xintifboolexpr{#5=0}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
+ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3=0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5=0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc=1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
+ \xintifboolexpr{\Coeffa=1 'and' \Coeffc=1}{}{\\%\ifnum\cmtd>1
+ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{\Coeffa=1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc=1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
+ % accolade%\\
+ %%%%
+ \ifboolKV[ClesEquation]{Entier}{%
+ \xdef\TSimp{}%
+ \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3=0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
+ \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5=0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
+ \xintifboolexpr{\TSimp=0}{}{\\
+ \ifboolKV[ClesEquation]{Simplification}{%
+ &\makebox[0pt]{$\Longleftrightarrow$}&\SSimpliTest{\Coeffb}{\Coeffa}\xintifboolexpr{\Coeffa=1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
+ }
+ }{}
+ &&&\ifboolKV[ClesEquation]{Simplification}{%
+ \SSimpliTest{\Coeffd}{\Coeffc}%
+ \xintifboolexpr{\Coeffc=1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
+ }
+ }{}
+ }
+ }{}
+ }
+ \end{align*}
+ }{%
+ \begin{align*}
+ \xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&&\text{ou}&\xintifboolexpr{#5=0}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
+ \xintifboolexpr{#3=0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5=0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc=1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
+ \xintifboolexpr{\Coeffa=1 'and' \Coeffc=1}{}{\\%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa=1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc=1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
+ %accolade%\\
+ %%%%
+ \ifboolKV[ClesEquation]{Entier}{%
+ \xdef\TSimp{}
+ \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3=0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
+ \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5=0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
+ \xintifboolexpr{\TSimp=0}{}{\\
+ \ifboolKV[ClesEquation]{Simplification}{%
+ \SSimpliTest{\Coeffb}{\Coeffa}
+ \xintifboolexpr{\Coeffa=1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
+ }
+ }{}
+ &&&\ifboolKV[ClesEquation]{Simplification}{%
+ \SSimpliTest{\Coeffd}{\Coeffc}%
+ \xintifboolexpr{\Coeffc=1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
+ }
+ }{}
+ }
+ }{}
+ }
+ \end{align*}
+ }%
+
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5=0}{\times\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$.
+ }{}
+}
+
+\newcommand\Verification[5][]{%
+ \setKV[ClesEquation]{#1}
+ \xdef\ValeurTest{\useKV[ClesEquation]{Nombre}}
+ Testons la valeur $\useKV[ClesEquation]{Lettre}=\num{\ValeurTest}$ :
+ \begin{align*}
+ \xintifboolexpr{#2=0}{\num{#3}}{\num{#2}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4=0}{\num{#5}}{\num{#4}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
+ \xintifboolexpr{#2=0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4=0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
+ \xintifboolexpr{#2=0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}}&&\xintifboolexpr{#4=0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}}
+ \end{align*}
+ \xdef\Testa{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}\xdef\Testb{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}
+ \ifboolKV[ClesEquation]{Egalite}{%
+ Comme \xintifboolexpr{\Testa=\Testb}{$\num{\Testa}=\num{\Testb}$}{$\num{\Testa}\not=\num{\Testb}$}, alors l'égalité $\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4=0}{\num{#5}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$ \xintifboolexpr{\Testa=\Testb}{ est vérifiée }{ n'est pas vérifiée } pour $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$.%
+ }{\xintifboolexpr{\Testa=\Testb}{Comme $\num{\Testa}=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ est bien }{Comme $\num{\Testa}\not=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ n'est pas }une solution de l'équation $\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4=0}{\num{#5}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$.}
+}
+
+%%%%%%%%%%%%%%%%%%%%
+%%% Proportionnalité
+%%%%%%%%%%%%%%%%%%%%
+\setKVdefault[ClesPropor]{GrandeurA=Grandeur A,GrandeurB=Grandeur
+ B,Largeur=1cm,Math=false,Stretch=1,ColorFill=white}%Tableau=false :
+ %inutile ?
+
+\def\Updatetoksmath#1/#2\nil{\addtotok\tabtoksa{&#1}\addtotok\tabtoksb{&#2}}%
+
+\def\buildtabpropor{%
+ \tabtoksa{}\tabtoksb{}%
+ \tabtoksa{\useKV[ClesPropor]{GrandeurA}}\tabtoksb{\useKV[ClesPropor]{GrandeurB}}%
+ \ifboolKV[ClesPropor]{Math}{%
+ \foreachitem\compteur\in\ListeValeur{\expandafter\Updatetoksmath\compteur\nil}%
+ }{\foreachitem\compteur\in\ListeValeur{\expandafter\updatetoks\compteur\nil}%
+ }%
+ \xdef\LongListe{\ListeValeurlen}%
+ \renewcommand{\arraystretch}{\useKV[ClesPropor]{Stretch}}%
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeValeurlen}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}}%
+ \multicolumn{1}{c}{\TikzPHD\setcounter{NbPropor}{1}}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPH}}\\%
+ \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}%
+ \the\tabtoksa\\%
+ \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}%
+ \the\tabtoksb\\%
+ \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}%
+ \multicolumn{1}{c}{\TikzPBD\setcounter{NbPropor}{1}}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPB}}\\%
+ \end{tabular}%
+}%
+
+\newcounter{NbPropor}
+
+\newcommand{\TikzPH}{%
+ \tikz[remember picture,overlay]{%
+ \coordinate[name=ProporH-\theNbPropor,yshift=-\the\dp\strutbox*\arraystretch];}%
+ \stepcounter{NbPropor}%
+ }%
+
+ \newcommand{\TikzPHD}{%
+ \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}
+ \tikz[remember picture,overlay]{%
+ \coordinate[name=ProporHD,xshift=-0.5*\the\wd1,yshift=-\the\dp\strutbox*\arraystretch];}%
+ }%
+
+ \newcommand{\TikzPB}{%
+ \tikz[remember picture, overlay]{%
+ \coordinate[name=ProporB-\theNbPropor,yshift=\the\ht\strutbox*\arraystretch];}%
+ \stepcounter{NbPropor}%
+ }%
+
+ \newcommand{\TikzPBD}{%
+ \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}
+ \tikz[remember picture, overlay]{%
+ \coordinate[name=ProporBD,xshift=-0.5*\the\wd1,yshift=\the\ht\strutbox*\arraystretch];}%
+ \stepcounter{NbPropor}%
+ }%
+
+ \newcommand\FlechesPH[3]{%
+ \ifnum#1<#2\relax%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \draw[-stealth,out=50,in=130] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporH-#2);%
+ \end{tikzpicture}%
+ \else%
+\begin{tikzpicture}[remember picture,overlay]%
+ \draw[-stealth,out=130,in=50] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporH-#2);%
+ \end{tikzpicture}%
+ \fi%
+}%
+
+\newcommand\FlechesPB[3]{%
+ \ifnum\number#1<\number#2\relax%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \draw[-stealth,out=-50,in=-130] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporB-#2);%
+ \end{tikzpicture}%
+ \else%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \draw[-stealth,out=-130,in=-50] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporB-#2);%
+ \end{tikzpicture}%
+ \fi%
+}
+
+\newcommand\Propor[2][]{%
+ \useKVdefault[ClesPropor]%
+ \setKV[ClesPropor]{#1}%
+ \xdef\colorfill{\useKV[ClesPropor]{ColorFill}}%
+ \xdef\EcartLargeur{\useKV[ClesPropor]{Largeur}}
+% %on lit la liste écrite sous la forme valeur/effectif
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeValeur{#2}%
+ \buildtabpropor%
+}
+
+\newcommand\FlecheCoef[2][\EcartLargeur]{%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \node[] (Point1) at ($(ProporH-\LongListe)!0.1!(ProporB-\LongListe)$) {};%
+ \node[] (Point2) at ($(ProporH-\LongListe)!0.9!(ProporB-\LongListe)$) {};%
+ \coordinate[right of=Point1,node distance=0.5*#1+\tabcolsep] (point1);%
+ \coordinate[right of=Point2,node distance=0.5*#1+\tabcolsep] (point2);%
+ \draw[-stealth,out=-20,in=20] (point1) to node[midway,right,inner sep=1pt]{#2}(point2);%
+\end{tikzpicture}%
+}%
+
+\newcommand\FlecheCoefDebut[2][1.25\tabcolsep]{%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \node[] (Noeud1) at ($(ProporHD)!0.1!(ProporBD)$) {};%
+ \node[] (Noeud2) at ($(ProporHD)!0.9!(ProporBD)$) {};%
+ \coordinate[left of=Noeud1,node distance=#1] (noeud1);%
+ \coordinate[left of=Noeud2,node distance=#1] (noeud2);%
+ \draw[-stealth,out=160,in=-160] (noeud2) to node[midway,left,inner sep=1pt]{#2}(noeud1);%
+ %\draw[red](ProporHD) to (ProporBD);
+\end{tikzpicture}%
+}%
+
+\newcommand\FlecheCoefInv[2][1cm]{%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \node[] (Point1) at ($(ProporH-\LongListe)!0.1!(ProporB-\LongListe)$) {};%
+ \node[] (Point2) at ($(ProporH-\LongListe)!0.9!(ProporB-\LongListe)$) {};%
+ \coordinate[right of=Point1,node distance=0.5*#1+\tabcolsep] (point1);%
+ \coordinate[right of=Point2,node distance=0.5*#1+\tabcolsep] (point2);%
+ \draw[-stealth,out=20,in=-20] (point2) to node[midway,right,inner sep=1pt]{#2}(point1);%
+\end{tikzpicture}%
+}%
+
+\newcommand\FlecheLineaireH[4]{%
+ \begin{tikzpicture}[remember picture,overlay,node distance=\ht\strutbox]
+ \node[inner sep=0pt] (MilieuH) at ($(ProporH-#1)!0.5!(ProporH-#2)$) {};
+ \node[circle,draw,inner sep=0pt] [above of=MilieuH] (aux) {#4} ;
+ \coordinate[above of=aux] (aux1);
+ \draw[-stealth] (ProporH-#1) |- (aux);
+ \draw[-stealth] (ProporH-#2) |- (aux);
+ \draw[-stealth] (aux) -- (aux1) -| (ProporH-#3);
+\end{tikzpicture}
+}
+
+\newcommand\FlecheLineaireB[4]{%
+ \begin{tikzpicture}[remember picture,overlay,node distance=3mm]
+ \node[inner sep=0pt] (MilieuB) at ($(ProporB-#1)!0.5!(ProporB-#2)$) {};
+ \node[circle,draw,inner sep=0pt] [below of=MilieuB] (aux) {#4} ;
+ \coordinate[below of=aux,node distance=3mm] (aux1);
+ \draw[-stealth] (ProporB-#1) |- (aux);
+ \draw[-stealth] (ProporB-#2) |- (aux);
+ \draw[-stealth] (aux) -- (aux1) -| (ProporB-#3);
+\end{tikzpicture}
+}
+
+%%%%%%%%%%%
+%% Application : pourcentage
+%%%%%%%%%%%
+\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,MotReduction=diminution,AideTableau=false,ColorFill=white}
+
+\newcommand\Pourcentage[3][]{%
+ \useKVdefault[ClesPourcentage]%
+ \setKV[ClesPourcentage]{#1}%
+ \ifboolKV[ClesPourcentage]{Reduire}{%
+ \ifboolKV[ClesPourcentage]{Formule}{%
+ Réduire une quantité de \num{#2}~\%, cela revient à multiplier cette quantitié par $1-\dfrac{\num{#2}}{100}$. Par conséquent, si on réduit \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
+ \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1-\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1-\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1-#2/100)}}=\num{\fpeval{#3*(1-#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
+ }{%
+ Calculons ce que représente la \useKV[ClesPourcentage]{MotReduction} de \num{#2}~\%.
+ \ifboolKV[ClesPourcentage]{AideTableau}{%
+ \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}
+ \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}
+ \begin{center}
+ \Propor[GrandeurA=\NomA,GrandeurB=\NomB]{/#3,#2/100}
+ \end{center}
+ \FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
+ On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}. Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
+ }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :
+ \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+ On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.}
+ }
+ }{%
+ \ifboolKV[ClesPourcentage]{Augmenter}{%
+ \ifboolKV[ClesPourcentage]{Formule}{%
+ Augmenter de \num{#2}~\% une quantité, cela revient à multiplier cette quantitié par $1+\dfrac{\num{#2}}{100}$. Par conséquent, si on augmente \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
+ \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1+\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1+\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1+#2/100)}}=\num{\fpeval{#3*(1+#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
+ }{%
+ Calculons ce que représente l'augmentation de \num{#2}~\%. %
+ \ifboolKV[ClesPourcentage]{AideTableau}{%
+ \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
+ \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
+ \begin{center}%
+ \Propor[GrandeurA=\NomA,GrandeurB=\NomB]{/#3,#2/100}%
+ \end{center}%
+ \FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
+ On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
+ }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :
+ \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+ On obtient une augmentation de $\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.}
+ }
+ }{%
+ \ifboolKV[ClesPourcentage]{Calculer}{%
+ \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}
+ \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}
+ \Propor[GrandeurA=\NomA,GrandeurB=\NomB]{#2/#3,/100}%
+ \xdef\colorfill{\useKV[ClesPourcentage]{ColorFill}}%
+ \FlechesPB{2}{1}{\scriptsize$\times\num{\fpeval{#3/100}}$}%
+ \FlechesPH{1}{2}{\scriptsize$\div\num{\fpeval{#3/100}}$}%
+ \xdef\ResultatPourcentage{\fpeval{#2*100/#3}}%
+ }{%
+ Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :%
+ \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]%
+ }%
+ }%
+ }%
+}%
+
+%%%%%%%%%%%%%
+%Lien : ratio
+%%%%%%%%%%%%%
+\setKVdefault[ClesRatio]{Figure=false,Longueur=5cm,TexteTotal=quantité,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,NombreUn}
+
+\newcommand\MPTest[9][]{%
+ % #2 : Longueur de la barre unité
+ % #3 : premier nombre
+ % #4 : deuxième nombre
+ % #5 : troisième nombre
+ % #6 : Valeurs du ratio
+ % #7 à #9: Couleurs de remplissage
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantité à partager / textepart :) / t le ratio
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=(long,0);
+ C-B=u*(0,0.5);
+ D-C=A-B;
+ n:=0;%n pour savoir si le ratio est a:b ou a:b:c
+ numeric N[];%Pour sauvegarder les éléments du ratio
+ for p_=t:
+ n:=n+1;
+ N[n]=p_;
+ endfor;
+ % on fait la somme totale "du ratio"
+ somme=0;
+ somme:=somme for k=1 upto n:+N[k] endfor;
+ Figure(0,0,long+2u,3u);
+ remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
+ withcolor #7;
+ remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
+ withcolor #8;
+ if n>2:
+ remplis
+ polygone((N[1]/somme)[A,B],((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],(N[1]/somme)[D,C])
+ withcolor #8;
+ remplis
+ polygone(B,((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],C)
+ withcolor #9;
+ fi;
+ drawoptions(withpen pencircle scaled1.5bp);
+ draw polygone(A,B,C,D);
+ for k=1 upto somme-1:
+ draw segment((k/somme)[A,B],(k/somme)[D,C]);
+ endfor;
+ drawoptions();
+ % accolades
+ labeloffset:=labeloffset/2;
+ label.top(TEX("\footnotesize$\overbrace{\hbox
+ to"&decimal(abs(A-B))&"pt{}}$"),iso(D,C));
+ labeloffset:=labeloffset*2;
+ label.bot(TEX("\footnotesize$\underbrace{\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-A))&"pt{}}$"),iso(A,(N[1]/somme)[A,B]));
+ label.bot(TEX("\footnotesize$\underbrace{\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-((N[1]+N[2])/somme)[A,B]))&"pt{}}$"),iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ if n>2:
+ label.bot(TEX("\footnotesize$\underbrace{\hbox
+ to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ enddef;
+ RatioTrois(#2)(#6);
+ %etiquettage
+ labeloffset:=labeloffset*3;
+ label.top(btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
+ if #3>1:
+ label.bot(btex #3~\useKV[ClesRatio]{TextePart}s
+ etex,iso(A,(N[1]/somme)[A,B]));
+ else:
+ label.bot(btex #3~\useKV[ClesRatio]{TextePart} etex,iso(A,(N[1]/somme)[A,B]));
+ fi;
+ if #4>1:
+ label.bot(btex #4~\useKV[ClesRatio]{TextePart}s etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ else:
+ label.bot(btex #4~\useKV[ClesRatio]{TextePart}
+ etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ fi;
+ if n>2:
+ if #5>1:
+ label.bot(btex #5~\useKV[ClesRatio]{TextePart}s etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+ else:
+ label.bot(btex #5~\useKV[ClesRatio]{TextePart} etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ fi;
+ \end{mplibcode}
+ \else
+ \usempxpackage{simplekv}
+ \mpxcommands{%
+ \setKVdefault[ClesRatio]{TexteTotal=quantité,TextePart=part}
+ \setKV[ClesRatio]{#1}
+ }
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantité à partager / textepart :) / t le ratio
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=(long,0);
+ C-B=u*(0,0.5);
+ D-C=A-B;
+ n:=0;%n pour savoir si le ratio est a:b ou a:b:c
+ numeric N[];%Pour sauvegarder les éléments du ratio
+ for p_=t:
+ n:=n+1;
+ N[n]=p_;
+ endfor;
+ % on fait la somme totale "du ratio"
+ somme=0;
+ somme:=somme for k=1 upto n:+N[k] endfor;
+ Figure(0,0,long+2u,3u);
+ remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
+ withcolor #7;
+ remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
+ withcolor #8;
+ if n>2:
+ remplis
+ polygone((N[1]/somme)[A,B],((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],(N[1]/somme)[D,C])
+ withcolor #8;
+ remplis
+ polygone(B,((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],C)
+ withcolor #9;
+ fi;
+ drawoptions(withpen pencircle scaled1.5bp);
+ draw polygone(A,B,C,D);
+ for k=1 upto somme-1:
+ draw segment((k/somme)[A,B],(k/somme)[D,C]);
+ endfor;
+ drawoptions();
+ %accolades
+ label.top(LATEX("\noexpand\footnotesize$\noexpand\overbrace{\noexpand\hbox
+ to"&decimal(abs(A-B))&"pt{}}$"),iso(D,C));
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-A))&"pt{}}$"),iso(A,(N[1]/somme)[A,B]));
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-((N[1]+N[2])/somme)[A,B]))&"pt{}}$"),iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ if n>2:
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+ to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ enddef;
+ RatioTrois(#2)(#6);
+ %etiquettage
+ labeloffset:=labeloffset*3;
+ label.top(\btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
+ if #3>1:
+ label.bot(btex #3\unexpanded{~\useKV[ClesRatio]{TextePart}}s
+ etex,iso(A,(N[1]/somme)[A,B]));
+ else:
+ label.bot(btex #3\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(A,(N[1]/somme)[A,B]));
+ fi;
+ if #4>1:
+ label.bot(btex #4\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ else:
+ label.bot(btex #4\unexpanded{~\useKV[ClesRatio]{TextePart}}
+ etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ fi;
+ if n>2:
+ if #5>1:
+ label.bot(btex #5\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+ else:
+ label.bot(btex #5\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ fi;
+ \end{mpost}
+ \fi
+}
+
+\newtoks\toklisteratio
+\def\UpdateRatio#1\nil{\addtotok\toklisteratio{#1,}}
+
+\def\updateratiotoks#1/#2/#3\nil{\addtotok\tabtoksa{&\num{#2}}\addtotok\tabtoksb{&\num{#3}}\addtotok\tabtoksc{&#1}}
+
+
+\def\buildtabratio{%
+ \tabtoksa{}\tabtoksb{}\tabtoksc{}%
+ \tabtoksa{\useKV[ClesRatio]{GrandeurA}}\tabtoksb{\useKV[ClesRatio]{GrandeurB}}
+ \foreachitem\compteur\in\ListeRatio{\expandafter\updateratiotoks\compteur\nil}%
+ \xdef\LongListe{\ListeRatiolen}%
+ \renewcommand{\arraystretch}{\useKV[ClesRatio]{Stretch}}%
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeRatiolen}{>{\centering\arraybackslash}p{\useKV[ClesRatio]{Largeur}}|}l}
+ \ifboolKV[ClesRatio]{Nom}{%
+ \hhline{~*{\number\numexpr\ListeRatiolen}{-}}
+ \multicolumn{1}{c|}{}\the\tabtoksc\\
+ }{}
+ \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}%
+ \the\tabtoksa&\setcounter{NbPropor}{1}\TikzRH\\%
+ \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}%
+ \the\tabtoksb&\setcounter{NbPropor}{1}\TikzRB\\%
+ \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}%
+ \end{tabular}%
+}%
+
+\newcommand{\TikzRH}{%
+ \tikz[remember picture,overlay]{%
+ \coordinate[name=ProporH-\theNbPropor,yshift=\the\ht\strutbox*\arraystretch];}%
+ \stepcounter{NbPropor}%
+ }%
+
+ \newcommand{\TikzRB}{%
+ \tikz[remember picture, overlay]{%
+ \coordinate[name=ProporB-\theNbPropor,yshift=-\the\dp\strutbox*\arraystretch];}%
+ \stepcounter{NbPropor}%
+ }%
+
+\newcommand\FlecheRatio[2][\EcartLargeur]{%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \node[] (Point1) at ($(ProporH-1)!0.1!(ProporB-1)$) {};%
+ \node[] (Point2) at ($(ProporH-1)!0.9!(ProporB-1)$) {};%
+ \coordinate[right of=Point1,node distance=0*#1-\tabcolsep] (point1);%
+ \coordinate[right of=Point2,node distance=0*#1-\tabcolsep] (point2);%
+ \draw[-stealth,out=-20,in=20] (point1) to node[midway,right,inner sep=1pt]{#2}(point2);%
+\end{tikzpicture}%
+}%
+
+\newcommand\FlecheInvRatio[2][\EcartLargeur]{%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \node[] (Point1) at ($(ProporH-1)!0.1!(ProporB-1)$) {};%
+ \node[] (Point2) at ($(ProporH-1)!0.9!(ProporB-1)$) {};%
+ \coordinate[right of=Point1,node distance=0*#1-\tabcolsep] (point1);%
+ \coordinate[right of=Point2,node distance=0*#1-\tabcolsep] (point2);%
+ \draw[-stealth,out=20,in=-20] (point2) to node[midway,right,inner sep=1pt]{#2}(point1);%
+\end{tikzpicture}%
+}%
+
+\newcommand\Ratio[2][]{%
+ \useKVdefault[ClesRatio]%
+ \setKV[ClesRatio]{#1}%
+ \xdef\EcartLargeur{\useKV[ClesRatio]{Largeur}}%
+ \ifboolKV[ClesRatio]{Figure}{%
+ \ignoreemptyitems%
+ \readlist*\ListeRatio{#2}%
+ \toklisteratio{}%
+ \foreachitem\compteur\in\ListeRatio{\expandafter\UpdateRatio\compteur\nil}%
+ \itemtomacro\ListeRatio[1]\NbUn
+ \itemtomacro\ListeRatio[2]\NbDeux
+ \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\newcommand\NbTrois{}}
+ \MPTest[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
+ }{}%
+ \ifboolKV[ClesRatio]{Tableau}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeRatio{#2}%
+ \buildtabratio%
+ }{}%
+}%
+
+%%%%%%%%%%%%%%%
+%% Cartes Mentales
+%%%%%%%%%%%%%%%
+\setKVdefault[ClesMentales]{Nom={Bulle}, Largeur=5cm, Ancre={0,0},Pointilles=false,CTrace=black,CFond=white,Epaisseur=1pt,Rayon=1}%
+\newenvironment{Mind}{\begin{tikzpicture}}{\end{tikzpicture}}%
+
+\newlength{\RoundedBoxWidth}%
+
+\NewEnviron{Bulle}[1][]{%
+ \setKV[ClesMentales]{#1}%
+ \setlength{\RoundedBoxWidth}{\useKV[ClesMentales]{Largeur}}%
+ \xdef\Pointilles{\ifboolKV[ClesMentales]{Pointilles}{dashed}{}}%
+ \xdef\CouleurTrace{\useKV[ClesMentales]{CTrace}}%
+ \xdef\CouleurFond{\useKV[ClesMentales]{CFond}}%
+ \xdef\EpaisseurLigne{\useKV[ClesMentales]{Epaisseur}}%
+ \xdef\RayonCoin{\useKV[ClesMentales]{Rayon}}%
+ \node(\useKV[ClesMentales]{Nom}) [align=justify,draw=\CouleurTrace,line width=\EpaisseurLigne,\Pointilles,fill=\CouleurFond,rounded corners=\RayonCoin,text width=\RoundedBoxWidth] at (\useKV[ClesMentales]{Ancre}) {\begin{minipage}{\RoundedBoxWidth}\BODY\end{minipage}};%
+ \multido{\i=1+1}{9}{%
+ \xdef\x{\fpeval{\i/10}}
+ \coordinate (\useKV[ClesMentales]{Nom}-H-\i) at ($(\useKV[ClesMentales]{Nom}.north west)!\x!(\useKV[ClesMentales]{Nom}.north east)$);
+ \coordinate (\useKV[ClesMentales]{Nom}-D-\i) at ($(\useKV[ClesMentales]{Nom}.north east)!\x!(\useKV[ClesMentales]{Nom}.south east)$);
+ \coordinate (\useKV[ClesMentales]{Nom}-B-\i) at ($(\useKV[ClesMentales]{Nom}.south east)!\x!(\useKV[ClesMentales]{Nom}.south west)$);
+ \coordinate (\useKV[ClesMentales]{Nom}-G-\i) at ($(\useKV[ClesMentales]{Nom}.south west)!\x!(\useKV[ClesMentales]{Nom}.north west)$);
+ }
+}
+
+%%%%%%%%%%%%
+% Pptés des droites (6eme)
+%%%%%%%%%%%
+\setKVdefault[ClesDroites]{Brouillon=false,CitePropriete=false,Num=1,Figure=false,Remediation=false}
+
+\newcommand\Redaction[4][]{%
+ \ifboolKV[ClesDroites]{Remediation}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \ifboolKV[ClesDroites]{CitePropriete}{%
+ Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles.%
+
+ Or, si deux droites sont parallèles, alors toute droite parallèle à l'une est parallèle à l'autre.%
+
+ Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles.%
+ }{%
+ Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux parallèles à la même droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles.%
+ }
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ \ifboolKV[ClesDroites]{CitePropriete}{%
+ Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.%
+
+ Or, si deux droites sont perpendiculaires à une même droite, alors elles sont parallèles.%
+
+ Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.
+ }{%
+ Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux perpendiculaires à la même droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles.
+ }
+ }{%
+ \ifboolKV[ClesDroites]{CitePropriete}{%
+ Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.%
+
+ Or, si deux droites sont parallèles, alors toute droite droite perpendiculaire à l'une est perpendiculaire à l'autre.%
+
+ Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.
+ }{%
+ Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles, alors la droite $(\hbox to2em{\dotfill})$ qui est perpendiculaire à $(\hbox to2em{\dotfill})$ est également perpendiculaire à la droite $(\hbox to2em{\dotfill})$.
+ }
+ }
+ }%%%%%%%%%%%%%%%%%%%%%
+ }{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \ifboolKV[ClesDroites]{CitePropriete}{%
+ Les droites $(#2)$ et $(#4)$ sont parallèles. Les droites $(#3)$ et $(#4)$ sont parallèles.%
+
+ Or, si deux droites sont parallèles, alors toute droite parallèle à l'une est parallèle à l'autre.%
+
+ Donc les droites $(#2)$ et $(#3)$ sont parallèles.
+ }{%
+ Comme les droites $(#2)$ et $(#3)$ sont toutes les deux parallèles à la même droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parallèles.
+ }
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ \ifboolKV[ClesDroites]{CitePropriete}{%
+ Les droites $(#2)$ et $(#4)$ sont perpendiculaires. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.%
+
+ Or, si deux droites sont perpendiculaires à une même droite, alors elles sont parallèles.%
+
+ Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires.
+ }{%
+ Comme les droites $(#2)$ et $(#3)$ sont toutes les deux perpendiculaires à la même droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parallèles.
+ }
+ }{%
+ \ifboolKV[ClesDroites]{CitePropriete}{%
+ Les droites $(#2)$ et $(#4)$ sont parallèles. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.%
+
+ Or, si deux droites sont parallèles, alors toute droite droite perpendiculaire à l'une est perpendiculaire à l'autre.%
+
+ Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires.
+ }{%
+ Comme les droites $(#2)$ et $(#4)$ sont parallèles, alors la droite $(#3)$ qui est perpendiculaire à $(#4)$ est également perpendiculaire à la droite $(#2)$.
+ }
+ }
+ }
+ }
+}
+
+\newcommand\Brouillon[4][]{%
+ \setlength{\abovedisplayskip}{0pt}
+ \ifboolKV[ClesDroites]{Remediation}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \[\left.
+ \begin{array}{l}
+ (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\
+ \\
+ (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
+ \end{array}
+ \right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
+ \]
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ \[\left.
+ \begin{array}{l}
+ (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
+ \\
+ (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
+ \end{array}
+ \right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
+ \]
+ }{%
+ \[\left.
+ \begin{array}{l}
+ (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\
+ \\
+ (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
+ \end{array}
+ \right\}(\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})
+ \]
+ }
+ }
+ }{
+ \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \[\left.
+ \begin{array}{l}
+ (#2)//(#4)\\
+ \\
+ (#3)//(#4)
+ \end{array}
+ \right\}(#2)//(#3)
+ \]
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ \[\left.
+ \begin{array}{l}
+ (#2)\perp(#4)\\
+ \\
+ (#3)\perp(#4)\\
+ \end{array}
+ \right\}(#2)//(#3)
+ \]
+ }{%
+ \[\left.
+ \begin{array}{l}
+ (#2)//(#4)\\
+ \\
+ (#3)\perp(#4)\\
+ \end{array}
+ \right\}(#2)\perp(#3)
+ \]
+ }
+ }
+ }
+}
+
+\def\MPFigureDroite#1#2{%
+ \ifluatex
+ \mplibcodeinherit{enable}
+ \mplibforcehmode
+ \begin{mplibcode}
+ pair A,B,C,D,E,F,G,H,I,J,K;
+ u:=7.5mm;
+ A=u*(1,3);
+ B-A=u*(3,2);
+ C-A=u*(2,-1);
+ E-C=u*(1,-1.5);
+ G-E=u*(1.5,0);
+ I-A=whatever*(B-A);
+ I-G=whatever*((B-A) rotated 90);
+ D-B=C-A;
+ F-D=E-C;
+ H=1.1[G,I];
+ J=(C--D) intersectionpoint (G--H);
+ K=(E--F) intersectionpoint (G--H);
+ path Codeperp[];
+ pair M[];
+ M1-I=7*unitvector(B-I);
+ M3-I=7*unitvector(J-I);
+ M2-M3=M1-I;
+ Codeperp1=M1--M2--M3;
+ Codeperp2=Codeperp1 shifted(J-I);
+ picture Codepara[];
+ pair R,S,T;
+ path cd;
+ Codepara1=image(
+ R=1/3[A,B];
+ T=1/3[E,F];
+ S=1/3[R,T];
+ cd=(fullcircle scaled 6mm) shifted S;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+ drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,S);
+ drawoptions();
+ );
+ Codepara2=image(
+ R:=1/2[C,D];
+ T:=1/2[E,F];
+ S:=1/2[R,T];
+ cd:=(fullcircle scaled 6mm) shifted S;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+ drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,S);
+ drawoptions();
+ );
+ path d[];
+ d1=A--B;
+ d2=C--D;
+ d3=E--F;
+ d4=G--H;
+ picture reste;
+ reste=image(
+ %tracés des droites
+ draw d1;
+ if #1=2:
+ draw d2;
+ elseif #1=3:
+ draw d3;
+ fi;
+ if #2=3:
+ draw d3;
+ elseif #2=4:
+ draw d4;
+ fi;
+ % tracés des codes
+ if (#1=2) and (#2=3):
+ draw Codepara1; draw Codepara2;
+ fi;
+ if (#1=2) and (#2=4):
+ draw Codeperp1; draw Codeperp2;
+ fi;
+ if (#1=3) and (#2=4):
+ draw Codepara1; draw Codeperp1;
+ fi;
+ );
+ reste:=reste rotatedabout(u*(3,3),-90+uniformdeviate(180));
+ draw reste;
+ \end{mplibcode}
+ \mplibcodeinherit{disable}
+ \else
+ \begin{mpost}
+ pair A,B,C,D,E,F,G,H,I,J,K;
+ u:=7.5mm;
+ A=u*(1,3);
+ B-A=u*(3,2);
+ C-A=u*(2,-1);
+ E-C=u*(1,-1.5);
+ G-E=u*(1.5,0);
+ I-A=whatever*(B-A);
+ I-G=whatever*((B-A) rotated 90);
+ D-B=C-A;
+ F-D=E-C;
+ H=1.1[G,I];
+ J=(C--D) intersectionpoint (G--H);
+ K=(E--F) intersectionpoint (G--H);
+ path Codeperp[];
+ pair M[];
+ M1-I=7*unitvector(B-I);
+ M3-I=7*unitvector(J-I);
+ M2-M3=M1-I;
+ Codeperp1=M1--M2--M3;
+ Codeperp2=Codeperp1 shifted(J-I);
+ picture Codepara[];
+ pair R,S,T;
+ path cd;
+ Codepara1=image(
+ R=1/3[A,B];
+ T=1/3[E,F];
+ S=1/3[R,T];
+ cd=(fullcircle scaled 6mm) shifted S;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+ drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,S);
+ drawoptions();
+ );
+ Codepara2=image(
+ R:=1/2[C,D];
+ T:=1/2[E,F];
+ S:=1/2[R,T];
+ cd:=(fullcircle scaled 6mm) shifted S;
+ drawoptions(withcolor 0.75*white);
+ drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd);
+ drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd);
+ draw cd;
+ label(btex $//$ etex ,S);
+ drawoptions();
+ );
+ path d[];
+ d1=A--B;
+ d2=C--D;
+ d3=E--F;
+ d4=G--H;
+ picture reste;
+ reste=image(
+ %tracés des droites
+ draw d1;
+ if #1=2:
+ draw d2;
+ elseif #1=3:
+ draw d3;
+ fi;
+ if #2=3:
+ draw d3;
+ elseif #2=4:
+ draw d4;
+ fi;
+ % tracés des codes
+ if (#1=2) and (#2=3):
+ draw Codepara1; draw Codepara2;
+ fi;
+ if (#1=2) and (#2=4):
+ draw Codeperp1; draw Codeperp2;
+ fi;
+ if (#1=3) and (#2=4):
+ draw Codepara1; draw Codeperp1;
+ fi;
+ );
+ reste:=reste rotatedabout(u*(3,3),-90+uniformdeviate(180));
+ draw reste;
+ \end{mpost}
+ \fi
+}
+
+\newcommand\FaireFigure[4][]{%
+ \setlength{\abovedisplayskip}{0pt}
+ \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \MPFigureDroite{2}{3}%
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ \MPFigureDroite{2}{4}%
+ }{%
+ \MPFigureDroite{3}{4}%
+ }%
+ }%
+}%
+
+\newcommand\ProprieteDroites[4][]{%
+ \useKVdefault[ClesDroites]%
+ \setKV[ClesDroites]{#1}%
+ \ifboolKV[ClesDroites]{Figure}{%
+ \begin{multicols}{2}%
+ \begin{center}%
+ \FaireFigure[#1]{#2}{#3}{#4}%
+ \end{center}%
+ \columnbreak
+ \ifboolKV[ClesDroites]{Brouillon}{\Brouillon[#1]{#2}{#3}{#4}}{}%
+ \Redaction[#1]{#2}{#3}{#4}%
+ \par%
+ \end{multicols}
+ }{%
+ \ifboolKV[ClesDroites]{Brouillon}{\Brouillon[#1]{#2}{#3}{#4}}{}%
+ \Redaction[#1]{#2}{#3}{#4}%
+ }%
+}%
+
+%%%%%%%%%%%%%%%%%%%%
+%%% Fonction Affine
+%%%%%%%%%%%%%%%%%%%%
+\setKVdefault[ClesAffine]{Nom=f,Variable=x,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false}%ACoefficient=false
+ %: inutile ?
+
+\newcommand\FonctionAffine[5][]{%
+ % #1 nombre ou abscisse premier point
+ % #2 a ou ordonnée premier point
+ % #3 b ou abscisse deuxième point
+ % #4 {} ou ordonnée deuxième point
+ \useKVdefault[ClesAffine]%A supprimer car appel récursif avec Redaction
+ \setKV[ClesAffine]{#1}%
+ \ifboolKV[ClesAffine]{Image}{%
+ \ifboolKV[ClesAffine]{Ligne}{%
+ \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}\xintifboolexpr{#4=0}{}{=\num{\fpeval{#2*#3+#4}}}}%
+ }{%
+ \ifboolKV[ClesAffine]{ProgCalcul}{%
+ \begin{align*}
+ \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}\\
+ \useKV[ClesAffine]{Nom}&:\num{#2}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{\fpeval{#3*#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{\fpeval{#3*#2+#4}}}
+ \end{align*}
+ }{%
+ \begin{align*}
+ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}\\
+ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}%\\
+ \xintifboolexpr{#4=0}{}{\\
+ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2+#4}}%\\
+ }
+ \end{align*}
+ }%
+ }%
+ }{\ifboolKV[ClesAffine]{Antecedent}{%
+ \ifboolKV[ClesAffine]{ProgCalcul}{%
+ La fonction affine $\useKV[ClesAffine]{Nom}$ est définie par :
+ \begin{align*}
+ \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
+ \end{align*}
+ Nous cherchons le nombre $\useKV[ClesAffine]{Variable}$ tel que son image par la fonction $\useKV[ClesAffine]{Nom}$ soit $\num{#2}$. Donc on obtient :
+ \begin{align*}
+ \useKV[ClesAffine]{Nom}&:\frac{\num{\fpeval{#2-#4}}}{\num{#3}}\stackrel{\div\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longleftarrow}\num{\fpeval{#2-#4}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{-\num{#4}}{\longleftarrow}}{\stackrel{+\num{\fpeval{0-#4}}}{\longleftarrow}}\num{#2}}
+ \end{align*}
+ }{%
+ On cherche l'antécédent de $\num{#2}$ par la fonction $\useKV[ClesAffine]{Nom}$, c'est-à-dire le nombre $\useKV[ClesAffine]{Variable}$ tel que $\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or, la fonction $\useKV[ClesAffine]{Nom}$ est définie par :
+ \begin{align*}
+ \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
+ \end{align*}
+ Par conséquent, on a :
+ \begin{align*}
+ \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}&=\num{#2}\\
+ \xintifboolexpr{#4=0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}
+ }{\num{#3}\useKV[ClesAffine]{Variable}&=\num{\fpeval{#2-#4}}\\
+ \useKV[ClesAffine]{Variable}&=\frac{\num{\fpeval{#2-#4}}}{\num{#3}}
+ }
+ \end{align*}
+ }%
+ }{%
+ \ifboolKV[ClesAffine]{Retrouve}{%
+ On sait que $\useKV[ClesAffine]{Nom}$ est une fonction affine. Donc elle s'écrit sous la forme : \[\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=a\useKV[ClesAffine]{Variable}+b\]
+ Or, $\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}$ et $\useKV[ClesAffine]{Nom}(\num{#4})=\num{#5}$. Par conséquent, d'après la propriété des accroissements :
+ \begin{align*}
+ a&=\frac{\useKV[ClesAffine]{Nom}(\num{#2})-\useKV[ClesAffine]{Nom}(\num{#4})}{\num{#2}-\xintifboolexpr{#4<0}{(\num{#4})}{\num{#4}}}\\
+ a&=\frac{\num{#3}-\xintifboolexpr{#5<0}{(\num{#5})}{\num{#5}}}{\num{\fpeval{#2-#4}}}\\
+ a&=\frac{\num{\fpeval{#3-#5}}}{\num{\fpeval{#2-#4}}}%\\
+ \SSimpliTest{\fpeval{#3-#5}}{\fpeval{#2-#4}}\ifthenelse{\boolean{Simplification}}{\\a&=\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}}{}%
+ \end{align*}
+ La fonction $\useKV[ClesAffine]{Nom}$ s'écrit alors sous la forme $\displaystyle\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}+b$.
+ \\De plus, comme $\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}$, alors :
+ \begin{align*}
+ \SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}+b&=\num{#3}\\
+ \SSimplifie{\fpeval{(#3-#5)*#2}}{\fpeval{#2-#4}}+b&=\num{#3}\\
+ b&=\num{\fpeval{#3-(#3-#5)*#2/(#2-#4)}}
+ \end{align*}
+ \xdef\OrdOrigine{\fpeval{#3-(#3-#5)*#2/(#2-#4)}}
+ La fonction affine $\useKV[ClesAffine]{Nom}$ cherchée est :
+ \[\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}\xintifboolexpr{\OrdOrigine=0}{}{\xintifboolexpr{\OrdOrigine>0}{+\num{\OrdOrigine}}{-\num{\fpeval{0-\OrdOrigine}}}}\]
+ }{%
+ %
+ }%
+ }%
+ }%
+ \ifboolKV[ClesAffine]{Graphique}{%
+ \ifboolKV[ClesAffine]{VoirCoef}{%
+ \MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{\useKV[ClesAffine]{ACoef}}%
+ }{%
+ \MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{""}}{}%
+ }{}%
+ \ifboolKV[ClesAffine]{Redaction}{%
+ \xintifboolexpr{#2=0}{Comme la fonction $\useKV[ClesAffine]{Nom}$
+ est une fonction constante, alors sa représentation graphique est une droite parallèle à l'axe des abscisses passant par le point de coordonnées $(0;\num{#3})$.}%
+ {\xintifboolexpr{#3=0}{Comme la fonction
+ $\useKV[ClesAffine]{Nom}$ est une fonction linéaire, alors sa représentation graphique est une droite passant par l'origine du repère.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonnées $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
+ }{%
+ Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa représentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonnées $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonnées $(\num{#5};\num{\fpeval{#2*#5+#3}})$.%
+ }%
+ }%
+ }%
+ {}%
+ \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}}}{}%
+ \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}}}{}%
+}%
+
+\def\MPFonctionAffine#1#2#3#4#5#6#7{%
+ % #1 Unitex #2 Unitey
+ % #2 a pour f1 - #4 b pour f1
+ % #5 abscisse du premier point
+ % #6 abscisse du deuxième point
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ XMin=-2;
+ XMax=2;
+ if #5<XMin:
+ XMin:=#5;
+ fi;
+ if #6<XMin:
+ XMin:=#6;
+ fi;
+ if #5>XMax:
+ XMax:=#5;
+ fi;
+ if #6>XMax:
+ XMax:=#6;
+ fi;
+ YMax=2;
+ YMin=-2;
+ if (#5*#3+(#4))>YMax:
+ YMax:=(#5*#3+(#4));
+ fi;
+ if (#6*#3+(#4))>YMax:
+ YMax:=(#6*#3+(#4));
+ fi;
+ if (#5*#3+(#4))<YMin:
+ YMin:=(#5*#3+(#4));
+ fi;
+ if (#6*#3+(#4))<YMin:
+ YMin:=(#6*#3+(#4));
+ fi;
+ unitex:=#1*cm;
+ unitey:=#2*cm;
+ XMax:=XMax+2;
+ XMin:=XMin-2;
+ YMax:=YMax+2;
+ YMin:=YMin-2;
+ %On trace la grille
+ drawoptions(withcolor 0.95white);
+ for k=0 upto (XMax-XMin):
+ draw ((XMin+k)*unitex,YMin*unitey)--((XMin+k)*unitex,YMax*unitey);
+ endfor;
+ for k=0 upto (YMax-YMin):
+ draw (XMin*unitex,(YMin+k)*unitey)--(XMax*unitex,(YMin+k)*unitey);
+ endfor;
+ drawoptions();
+ %On trace les axes
+ drawarrow (XMin*unitex,0)--(XMax*unitex,0);
+ drawarrow (0,YMin*unitey)--(0,YMax*unitey);
+ label.llft(btex O etex,(0,0));
+ dotlabel.bot(btex 1 etex,(unitex,0));
+ dotlabel.lft(btex 1 etex,(0,unitey));
+ % On trace la droite
+ pair A[];
+ A1=(#5*unitex,(#5*#3+(#4))*unitey);
+ A2=(#6*unitex,(#6*#3+(#4))*unitey);
+ draw 2[A1,A2]--2[A2,A1];
+ clip currentpicture to ((XMin*unitex,YMin*unitey)--(XMax*unitex,YMin*unitey)--(XMax*unitex,YMax*unitey)--(XMin*unitex,YMax*unitey)--cycle);
+ %On labellise les points
+ fill (fullcircle scaled 1mm) shifted A1;
+ fill (fullcircle scaled 1mm) shifted A2;
+ draw (xpart(A1),0)--A1--(0,ypart(A1)) dashed evenly;
+ draw (xpart(A2),0)--A2--(0,ypart(A2)) dashed evenly;
+ if (#5*#3+(#4))=0:
+ else:
+ if (#5*#3+(#4))<0:
+ label.top(TEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+ else:
+ label.bot(TEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+ fi;
+ fi;
+ if (#6*#3+(#4))=0:
+ else:
+ if (#6*#3+(#4))<0:
+ label.top(TEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+ else:
+ label.bot(TEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+ fi;
+ fi;
+ if #3=0:
+ label.urt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ else:
+ if #3>0:
+ if (#5*#3+(#4))=0:
+ else:
+ if (#5*#3+(#4))<0:
+ label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ else:
+ label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ fi;
+ fi;
+ if (#6*#3+(#4))=0:
+ else:
+ if (#6*#3+(#4))<0:
+ label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ else:
+ label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ fi;
+ fi;
+ else:
+ if (#5*#3+(#4))=0:
+ else:
+ if (#5*#3+(#4))<0:
+ label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ else:
+ label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ fi;
+ fi;
+ if (#6*#3+(#4))=0:
+ else:
+ if (#6*#3+(#4))<0:
+ label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ else:
+ label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ fi;
+ fi;
+ fi;
+ fi;
+ % On affiche ou pas "la marche" du coef directeur
+ for p_=#7:
+ if numeric p_:
+ draw ((#7*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,((#7+1)*#3+(#4))*unitey)) withcolor red;
+ fi;
+ endfor;
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ % On définit les constantes
+ XMin=-2;
+ XMax=2;
+ if #5<XMin:
+ XMin:=#5;
+ fi;
+ if #6<XMin:
+ XMin:=#6;
+ fi;
+ if #5>XMax:
+ XMax:=#5;
+ fi;
+ if #6>XMax:
+ XMax:=#6;
+ fi;
+ YMax=2;
+ YMin=-2;
+ if (#5*#3+(#4))>YMax:
+ YMax:=(#5*#3+(#4));
+ fi;
+ if (#6*#3+(#4))>YMax:
+ YMax:=(#6*#3+(#4));
+ fi;
+ if (#5*#3+(#4))<YMin:
+ YMin:=(#5*#3+(#4));
+ fi;
+ if (#6*#3+(#4))<YMin:
+ YMin:=(#6*#3+(#4));
+ fi;
+ unitex:=#1*cm;
+ unitey:=#2*cm;
+ XMax:=XMax+2;
+ XMin:=XMin-2;
+ YMax:=YMax+2;
+ YMin:=YMin-2;
+ %On trace la grille
+ drawoptions(withcolor 0.95white);
+ for k=0 upto (XMax-XMin):
+ draw ((XMin+k)*unitex,YMin*unitey)--((XMin+k)*unitex,YMax*unitey);
+ endfor;
+ for k=0 upto (YMax-YMin):
+ draw (XMin*unitex,(YMin+k)*unitey)--(XMax*unitex,(YMin+k)*unitey);
+ endfor;
+ drawoptions();
+ %On trace les axes
+ drawarrow (XMin*unitex,0)--(XMax*unitex,0);
+ drawarrow (0,YMin*unitey)--(0,YMax*unitey);
+ label.llft(btex O etex,(0,0));
+ dotlabel.bot(btex 1 etex,(unitex,0));
+ dotlabel.lft(btex 1 etex,(0,unitey));
+ % On trace la droite
+ pair A[];
+ A1=(#5*unitex,(#5*#3+(#4))*unitey);
+ A2=(#6*unitex,(#6*#3+(#4))*unitey);
+ draw 2[A1,A2]--2[A2,A1];
+ clip currentpicture to ((XMin*unitex,YMin*unitey)--(XMax*unitex,YMin*unitey)--(XMax*unitex,YMax*unitey)--(XMin*unitex,YMax*unitey)--cycle);
+ %On labellise les points
+ fill (fullcircle scaled 1mm) shifted A1;
+ fill (fullcircle scaled 1mm) shifted A2;
+ draw (xpart(A1),0)--A1--(0,ypart(A1)) dashed evenly;
+ draw (xpart(A2),0)--A2--(0,ypart(A2)) dashed evenly;
+ if (#5*#3+(#4))=0:
+ else:
+ if (#5*#3+(#4))<0:
+ label.top(LATEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+ else:
+ label.bot(LATEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
+ fi;
+ fi;
+ if (#6*#3+(#4))=0:
+ else:
+ if (#6*#3+(#4))<0:
+ label.top(LATEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+ else:
+ label.bot(LATEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+ fi;
+ fi;
+ if #3=0:
+ label.urt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ else:
+ if #3>0:
+ if (#5*#3+(#4))=0:
+ else:
+ if (#5*#3+(#4))<0:
+ label.rt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ else:
+ label.lft(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ fi;
+ fi;
+ if (#6*#3+(#4))=0:
+ else:
+ if (#6*#3+(#4))<0:
+ label.rt(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ else:
+ label.lft(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ fi;
+ fi;
+ else:
+ if (#5*#3+(#4))=0:
+ else:
+ if (#5*#3+(#4))<0:
+ label.lft(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ else:
+ label.rt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
+ fi;
+ fi;
+ if (#6*#3+(#4))=0:
+ else:
+ if (#6*#3+(#4))<0:
+ label.lft(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ else:
+ label.rt(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
+ fi;
+ fi;
+ fi;
+ fi;
+ % On affiche ou pas "la marche" du coef directeur
+ for p_=#7:
+ if numeric p_:
+ draw ((#7*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,((#7+1)*#3+(#4))*unitey)) withcolor red;
+ fi;
+ endfor;
+ \end{mpost}
+ \fi
+}
+
+
+%%%%%%%%%%%%%%%
+% Fonction
+%%%%%%%%%%%%%%%
+\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false}
+
+\newcommand{\Fonction}[2][]{%
+ \useKVdefault[ClesFonction]
+ \setKV[ClesFonction]{#1}
+ \ignoreemptyitems%
+ \readlist*\ListeFonction{#2}
+ \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
+
+ \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
+ \StrSubstitute{\tempa}{*}{}[\tempab]%
+ \ifboolKV[ClesFonction]{Ecriture}{%
+ \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}
+ }{}%
+ \ifboolKV[ClesFonction]{Definition}{%
+ \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}
+ }{}%
+ \ifboolKV[ClesFonction]{Tableau}{%
+ \buildtabfonction%
+ }{}
+}
+
+\def\buildtabfonction{%\\
+ \[%
+ \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}%
+ \hline
+ \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\
+ \hline
+ \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{& \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\ListeFonction[##1]}[\tempab]\num{\fpeval{\tempab}}}
+ \\\hline
+ \end{array}
+ \]
+}
+
+%%%%%%%
+%% Formules
+%%%%%%
+\setKVdefault[ClesFormule]{Perimetre=false,Aire=false,Volume=false,Surface=carré,Solide=pavé droit,Figure=false,Angle=0,Ancre={(0,0)},Largeur=5cm}
+
+\def\MPFigureCarre{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2,0);
+ C=rotation(A,B,-90);
+ D-C=A-B;
+ draw polygone(A,B,C,D);
+ draw codeperp(A,B,C,5);
+ draw codeperp(B,C,D,5);
+ draw codeperp(C,D,A,5);
+ draw codeperp(D,A,B,5);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,B,C,C,D,D,A,2);
+ marque_s:=marque_s*3;
+ draw appelation(A,B,-3mm,btex $c$ etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2,0);
+ C=rotation(A,B,-90);
+ D-C=A-B;
+ draw polygone(A,B,C,D);
+ draw codeperp(A,B,C,5);
+ draw codeperp(B,C,D,5);
+ draw codeperp(C,D,A,5);
+ draw codeperp(D,A,B,5);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,B,C,C,D,D,A,2);
+ marque_s:=marque_s*3;
+ draw appelation(A,B,-3mm,btex $c$ etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigurePolygone{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ pair A,B,C,D,E,F;
+ A=u*(1,1);
+ B-A=u*(2,0);
+ C=3/5[B,rotation(A,B,-120)];
+ D-C=u*(0,1);
+ E-D=u*(-1.25,-1);
+ F-E=u*(-1,1);
+ draw polygone(A,B,C,D,E,F);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,B,C,D,E,F;
+ A=u*(1,1);
+ B-A=u*(2,0);
+ C=3/5[B,rotation(A,B,-120)];
+ D-C=u*(0,1);
+ E-D=u*(-1.25,-1);
+ F-E=u*(-1,1);
+ draw polygone(A,B,C,D,E,F);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureParallelogramme{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2.25,0.25);
+ D=4/5[A,rotation(B,A,40)];
+ C-D=B-A;
+ draw polygone(A,B,C,D);
+ drawoptions(withcolor gris);
+ draw marque_para(droite(A,B),droite(C,D),0.455);
+ draw marque_para(droite(B,C),droite(A,D),0.43);
+ draw segment(B,2.5[C,B]) dashed evenly;
+ draw segment(A,1.5[D,A]) dashed evenly;
+ draw segment(A,1.55[B,A]) dashed evenly;
+ draw segment(D,2[C,D]) dashed evenly;
+ drawoptions();
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2.25,0.25);
+ D=4/5[A,rotation(B,A,40)];
+ C-D=B-A;
+ draw polygone(A,B,C,D);
+ drawoptions(withcolor gris);
+ draw marque_para(droite(A,B),droite(C,D),0.455);
+ draw marque_para(droite(B,C),droite(A,D),0.43);
+ draw segment(B,2.5[C,B]) dashed evenly;
+ draw segment(A,1.5[D,A]) dashed evenly;
+ draw segment(A,1.55[B,A]) dashed evenly;
+ draw segment(D,2[C,D]) dashed evenly;
+ drawoptions();
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureParallelogrammeAire{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,10u,5u);
+ pair A,B,C,D,I,J;
+ A=u*(1,1);
+ B-A=u*(2,0.5);
+ D=3/5[A,rotation(B,A,40)];
+ C-D=B-A;
+ I=projection(D,A,B);
+ draw polygone(A,B,C,D) withcolor gris;
+ draw segment(A,B);
+ draw segment(D,I);
+ draw codeperp(D,I,B,5);
+ A:=A+3*u*(1,0);
+ B:=A+u*(2,0.5);
+ D:=3/5[A,rotation(B,A,40)];
+ C:=D+B-A;
+ J=projection(B,A,D);
+ draw polygone(A,B,C,D) withcolor gris;
+ draw segment(D,1.5[A,D]) dashed evenly withcolor gris;
+ draw segment(A,D);
+ draw segment(B,J);
+ draw codeperp(B,J,A,5);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,10u,5u);
+ pair A,B,C,D,I,J;
+ A=u*(1,1);
+ B-A=u*(2,0.5);
+ D=3/5[A,rotation(B,A,40)];
+ C-D=B-A;
+ I=projection(D,A,B);
+ draw polygone(A,B,C,D) withcolor gris;
+ draw segment(A,B);
+ draw segment(D,I);
+ draw codeperp(D,I,B,5);
+ A:=A+3*u*(1,0);
+ B:=A+u*(2,0.5);
+ D:=3/5[A,rotation(B,A,40)];
+ C:=D+B-A;
+ J=projection(B,A,D);
+ draw polygone(A,B,C,D) withcolor gris;
+ draw segment(D,1.5[A,D]) dashed evenly withcolor gris;
+ draw segment(A,D);
+ draw segment(B,J);
+ draw codeperp(B,J,A,5);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureSphere{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ typetrace:="3D";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,0,10,500);
+ color O,A,B,C;
+ O=(0,0,0);
+ A-O=(0,1/2,0);
+ C-O=(-1/2,0,0);
+ B-O=(0,0,1/2);
+ path cc,cd;
+ cc=cercles(O,A,O,A,C);
+ cd=cercles(O,A,O,A,B);
+ draw cd;
+ draw (subpath(0,length cc/2) of cc) dashed evenly;
+ draw subpath(length cc/2,length cc) of cc;
+ draw cotationmil(O,A,0,18,btex rayon $r$ etex);
+ marque_p:="plein";
+ pointe(O);
+ marque_p:="non";
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,0,10,500);
+ color O,A,B,C;
+ O=(0,0,0);
+ A-O=(0,1/2,0);
+ C-O=(-1/2,0,0);
+ B-O=(0,0,1/2);
+ path cc,cd;
+ cc=cercles(O,A,O,A,C);
+ cd=cercles(O,A,O,A,B);
+ draw cd;
+ draw (subpath(0,length cc/2) of cc) dashed evenly;
+ draw subpath(length cc/2,length cc) of cc;
+ draw cotationmil(O,A,0,18,btex rayon $r$ etex);
+ marque_p:="plein";
+ pointe(O);
+ marque_p:="non";
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigurePave{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,115);
+ color A,B,C,D,E,F,G,H;
+ draw Pave(A,B,C,D,E,F,G,H)(0.5,1,1/3) withcolor gris;
+ draw segment(A,B);
+ draw segment(E,F);
+ draw segment(A,F);
+ draw appelation(A,B,-2mm,\btex $\ell$ etex);
+ draw appelation(F,E,2mm,\btex $p$ etex);
+ draw appelation(A,F,2mm,\btex $h$ etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,115);
+ color A,B,C,D,E,F,G,H;
+ draw Pave(A,B,C,D,E,F,G,H)(0.5,1,1/3) withcolor gris;
+ draw segment(A,B);
+ draw segment(E,F);
+ draw segment(A,F);
+ draw appelation(A,B,-2mm,\btex $\ell$ etex);
+ draw appelation(F,E,2mm,\btex $p$ etex);
+ draw appelation(A,F,2mm,\btex $h$ etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigurePrisme{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,115);
+ color A,B,C,D,E,F,G,H;
+ D=(0.75,0,0);
+ G=(0,1,0);
+ H=(0,0,0);
+ A-D=(0,0,0.5);
+ C-D=G-H;
+ E-H=A-D;
+ F-E=(0,0.6,0);
+ B-A=F-E;
+ NbS:=8;
+ Sommet1:=A;
+ Sommet2:=B;
+ Sommet3:=C;
+ Sommet4:=D;
+ Sommet5:=E;
+ Sommet6:=F;
+ Sommet7:=G;
+ Sommet8:=H;
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=1;Fc[203]:=5;Fc[204]:=8;
+ Fc[300]:=4;Fc[301]:=4;Fc[302]:=8;Fc[303]:=7;Fc[304]:=3;
+ Fc[400]:=4;Fc[401]:=8;Fc[402]:=5;Fc[403]:=6;Fc[404]:=7;
+ Fc[500]:=4;Fc[501]:=1;Fc[502]:=2;Fc[503]:=6;Fc[504]:=5;
+ Fc[600]:=4;Fc[601]:=2;Fc[602]:=3;Fc[603]:=7;Fc[604]:=6;
+ CoulTrace:=gris;
+ DessineObjet;
+ drawoptions(withcolor gris);
+ draw codeperp(B,A,E,5);
+ draw codeperp(A,B,F,5);
+ draw codeperp(H,D,C,5);
+ draw codeperp(D,C,G,5);
+ drawoptions();
+ draw polygone(A,B,C,D);
+ draw hachurage(polygone(A,B,C,D),60,0.3,0);
+ draw segment(A,E);
+ draw appelation(A,E,3mm,btex hauteur etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,115);
+ color A,B,C,D,E,F,G,H;
+ D=(0.75,0,0);
+ G=(0,1,0);
+ H=(0,0,0);
+ A-D=(0,0,0.5);
+ C-D=G-H;
+ E-H=A-D;
+ F-E=(0,0.6,0);
+ B-A=F-E;
+ NbS:=8;
+ Sommet1:=A;
+ Sommet2:=B;
+ Sommet3:=C;
+ Sommet4:=D;
+ Sommet5:=E;
+ Sommet6:=F;
+ Sommet7:=G;
+ Sommet8:=H;
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=1;Fc[203]:=5;Fc[204]:=8;
+ Fc[300]:=4;Fc[301]:=4;Fc[302]:=8;Fc[303]:=7;Fc[304]:=3;
+ Fc[400]:=4;Fc[401]:=8;Fc[402]:=5;Fc[403]:=6;Fc[404]:=7;
+ Fc[500]:=4;Fc[501]:=1;Fc[502]:=2;Fc[503]:=6;Fc[504]:=5;
+ Fc[600]:=4;Fc[601]:=2;Fc[602]:=3;Fc[603]:=7;Fc[604]:=6;
+ CoulTrace:=gris;
+ DessineObjet;
+ drawoptions(withcolor gris);
+ draw codeperp(B,A,E,5);
+ draw codeperp(A,B,F,5);
+ draw codeperp(H,D,C,5);
+ draw codeperp(D,C,G,5);
+ drawoptions();
+ draw polygone(A,B,C,D);
+ draw hachurage(polygone(A,B,C,D),60,0.3,0);
+ draw segment(A,E);
+ draw appelation(A,E,3mm,btex hauteur etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureCylindre{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,0,20,70);
+ color O,O',A,A',B,B',C,C';
+ O=(0,0,0);
+ O'-O=(0,0,1);
+ A-O=(0,1,0);
+ A'-A=O'-O;
+ C=symetrie(A,O);
+ C'-C=O'-O;
+ B-O=(-1/2,0,0);
+ B'-B=O'-O;
+ path cc,cd;
+ cc=cercles(O,A,O,A,B);
+ cd=cercles(O',A',O',A',B');
+ draw cd;
+ draw segment(C,C');
+ draw segment(A,A');
+ draw (subpath(0,length cc/2) of cc) dashed evenly;
+ draw subpath(length cc/2,length cc) of cc;
+ draw segment(O,A);
+ draw cotationmil(C,C',3mm,25,btex hauteur $h$ etex);
+ draw appelation(O,A,2mm,btex rayon $r$ etex);
+ marque_p:="croix";
+ pointe(O);
+ marque_p:="non";
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,0,20,70);
+ color O,O',A,A',B,B',C,C';
+ O=(0,0,0);
+ O'-O=(0,0,1);
+ A-O=(0,1,0);
+ A'-A=O'-O;
+ C=symetrie(A,O);
+ C'-C=O'-O;
+ B-O=(-1/2,0,0);
+ B'-B=O'-O;
+ path cc,cd;
+ cc=cercles(O,A,O,A,B);
+ cd=cercles(O',A',O',A',B');
+ draw cd;
+ draw segment(C,C');
+ draw segment(A,A');
+ draw (subpath(0,length cc/2) of cc) dashed evenly;
+ draw subpath(length cc/2,length cc) of cc;
+ draw segment(O,A);
+ draw cotationmil(C,C',3mm,25,btex hauteur $h$ etex);
+ draw appelation(O,A,2mm,btex rayon $r$ etex);
+ marque_p:="croix";
+ pointe(O);
+ marque_p:="non";
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureCone{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,0,10,70);
+ color O,O',A,B,C;
+ O=(0,0,0);
+ O'-O=(0,0,1.5);
+ A-O=(0,1,0);
+ C=symetrie(A,O);
+ B-O=(-1/2,0,0);
+ path cc;
+ cc=cercles(O,A,O,A,B);
+ draw chemin(C,O',A);
+ draw (subpath(0,length cc/2) of cc) dashed evenly;
+ draw subpath(length cc/2,length cc) of cc;
+ draw chemin(O',O,A);
+ draw appelation(O,O',2mm,btex hauteur etex);
+ draw appelation(O,A,1mm,btex rayon $r$ etex);
+ marque_p:="croix";
+ pointe(O);
+ marque_p:="non";
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,0,10,70);
+ color O,O',A,B,C;
+ O=(0,0,0);
+ O'-O=(0,0,1.5);
+ A-O=(0,1,0);
+ C=symetrie(A,O);
+ B-O=(-1/2,0,0);
+ path cc;
+ cc=cercles(O,A,O,A,B);
+ draw chemin(C,O',A);
+ draw (subpath(0,length cc/2) of cc) dashed evenly;
+ draw subpath(length cc/2,length cc) of cc;
+ draw chemin(O',O,A);
+ draw appelation(O,O',2mm,btex hauteur etex);
+ draw appelation(O,A,1mm,btex rayon $r$ etex);
+ marque_p:="croix";
+ pointe(O);
+ marque_p:="non";
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigurePyramide{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ % Figure(-10u,-10u,10u,10u);
+ u:=0.5cm;
+ z0=(-0.5,0)*u;
+ z1=(2.5,0.5)*u;
+ z2=(4,2)*u;
+ z3=(-0.5,2.75)*u;
+ z4=(-3,1.5)*u;
+ z5=(0.5,6)*u;
+ z6=(0.5,1.5)*u;
+ z7=z6 shifted (5u,0);
+ draw z5--z0 withcolor gris;
+ draw z5--z1 withcolor gris;
+ draw z5--z2 withcolor gris;
+ draw z5--z4 withcolor gris;
+ draw z5--z3 dashed evenly withcolor gris;
+ draw hachurage(polygone(z4,z0,z1,z2,z3,z4),60,0.4,0);
+ remplis codeperp(z7,z6,z5,8)--z6--cycle withcolor white;
+ draw z4--z0--z1--z2;
+ draw z2--z3--z4 dashed evenly;
+ draw z5--z6 dashed evenly;
+ draw codeperp(z7,z6,z5,8);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-10u,-10u,10u,10u);
+ u:=0.5cm;
+ z0=(-0.5,0)*u;
+ z1=(2.5,0.5)*u;
+ z2=(4,2)*u;
+ z3=(-0.5,2.75)*u;
+ z4=(-3,1.5)*u;
+ z5=(0.5,6)*u;
+ z6=(0.5,1.5)*u;
+ z7=z6 shifted (5u,0);
+ draw z5--z0 withcolor gris;
+ draw z5--z1 withcolor gris;
+ draw z5--z2 withcolor gris;
+ draw z5--z4 withcolor gris;
+ draw z5--z3 dashed evenly withcolor gris;
+ draw hachurage(polygone(z4,z0,z1,z2,z3,z4),60,0.4,0);
+ remplis codeperp(z7,z6,z5,8)--z6--cycle withcolor white;
+ draw z4--z0--z1--z2;
+ draw z2--z3--z4 dashed evenly;
+ draw z5--z6 dashed evenly;
+ draw codeperp(z7,z6,z5,8);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureCube{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,80);
+ color A,B,C,D,E,F,G,H;
+ draw Cube(A,B,C,D,E,F,G,H) withcolor gris;
+ draw segment(E,H);
+ draw appelation(E,H,2mm,btex $a$ etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,80);
+ color A,B,C,D,E,F,G,H;
+ draw Cube(A,B,C,D,E,F,G,H) withcolor gris;
+ draw segment(E,H);
+ draw appelation(E,H,2mm,btex $a$ etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureLosange{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2,0.5);
+ D=rotation(B,A,40);
+ C-D=B-A;
+ draw polygone(A,B,C,D);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,B,C,C,D,D,A,2);
+ marque_s:=marque_s*3;
+ draw appelation(A,B,-3mm,btex $c$ etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2,0.5);
+ D=rotation(B,A,40);
+ C-D=B-A;
+ draw polygone(A,B,C,D);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,B,C,C,D,D,A,2);
+ marque_s:=marque_s*3;
+ draw appelation(A,B,-3mm,btex $c$ etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureLosangeAire{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2,0.5);
+ D=rotation(B,A,40);
+ C-D=B-A;
+ draw polygone(A,B,C,D) withcolor gris;
+ draw segment(A,C);
+ draw segment(B,D);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,B,C,C,D,D,A,2);
+ marque_s:=marque_s*3;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(2,0.5);
+ D=rotation(B,A,40);
+ C-D=B-A;
+ draw polygone(A,B,C,D) withcolor gris;
+ draw segment(A,C);
+ draw segment(B,D);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,B,C,C,D,D,A,2);
+ marque_s:=marque_s*3;
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureRectangle{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=2/3[B,rotation(A,B,-90)];
+ D-C=A-B;
+ draw polygone(A,B,C,D);
+ draw codeperp(A,B,C,5);
+ draw codeperp(B,C,D,5);
+ draw codeperp(C,D,A,5);
+ draw codeperp(D,A,B,5);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,C,D,2);
+ draw Codelongueur(A,D,C,B,5);
+ marque_s:=marque_s*3;
+ draw appelation(A,B,-3mm,btex $L$ etex);
+ label.lft(btex $\ell$ etex,iso(A,D));
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=2/3[B,rotation(A,B,-90)];
+ D-C=A-B;
+ draw polygone(A,B,C,D);
+ draw codeperp(A,B,C,5);
+ draw codeperp(B,C,D,5);
+ draw codeperp(C,D,A,5);
+ draw codeperp(D,A,B,5);
+ marque_s:=marque_s/3;
+ draw Codelongueur(A,B,C,D,2);
+ draw Codelongueur(A,D,C,B,5);
+ marque_s:=marque_s*3;
+ draw appelation(A,B,-3mm,btex $L$ etex);
+ label.lft(btex $\ell$ etex,iso(A,D));
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureTriangle{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C;
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ draw polygone(A,B,C);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C;
+ A=u*(1,1);
+ B-A=u*(3,0);
+ C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ draw polygone(A,B,C);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureCercle{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C;
+ A=u*(2.5,2.5);
+ path cc;
+ cc=cercles(A,1.25u);
+ B=pointarc(cc,195);
+ C=symetrie(B,A);
+ draw cc withcolor gris;
+ draw segment(B,C);
+ marque_p:="croix";
+ pointe(A);
+ draw appelation(B,C,3mm,\btex diamètre etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C;
+ A=u*(2.5,2.5);
+ path cc;
+ cc=cercles(A,1.25u);
+ B=pointarc(cc,195);
+ C=symetrie(B,A);
+ draw cc withcolor gris;
+ draw segment(B,C);
+ marque_p:="croix";
+ pointe(A);
+ draw appelation(B,C,3mm,\btex diamètre etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureDisque{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C;
+ A=u*(2.5,2.5);
+ path cc;
+ cc=cercles(A,1.25u);
+ B=pointarc(cc,195);
+ C=symetrie(B,A);
+ draw cc withcolor gris;
+ draw segment(A,C);
+ marque_p:="croix";
+ pointe(A);
+ draw appelation(A,C,3mm,\btex rayon $r$ etex);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C;
+ A=u*(2.5,2.5);
+ path cc;
+ cc=cercles(A,1.25u);
+ B=pointarc(cc,195);
+ C=symetrie(B,A);
+ draw cc withcolor gris;
+ draw segment(A,C);
+ marque_p:="croix";
+ pointe(A);
+ draw appelation(A,C,3mm,\btex rayon $r$ etex);
+ \end{mpost}
+ \fi
+}
+
+\def\MPFigureTriangleAire{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ drawoptions( dashed dashpattern(on1cm));
+ % Figure(-5u,-5u,5u,5u);
+ pair A,B,C,H,I,J;
+ A=u*(0.5,1);
+ B-A=u*(1.4,0);
+ C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ H=projection(C,A,B);
+ I=projection(A,B,C);
+ J=projection(B,C,A);
+ draw polygone(A,B,C) withcolor gris;
+ drawoptions();
+ draw segment(C,H);
+ draw segment(A,B);
+ draw codeperp(C,H,B,5);
+ drawoptions();
+ A:=A+u*(2.5,0);
+ B:=A+u*(1.4,0);
+ C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ I:=projection(A,B,C);
+ J:=projection(B,C,A);
+ draw polygone(A,B,C) withcolor gris;
+ drawoptions();
+ draw segment(A,I);
+ draw segment(C,B);
+ draw codeperp(A,I,B,5);
+ drawoptions();
+ A:=A-u*(1.25,1);
+ B:=A+u*(1.4,0);
+ C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ J:=projection(B,C,A);
+ draw polygone(A,B,C) withcolor gris;
+ drawoptions();
+ draw segment(B,J);
+ draw segment(C,A);
+ draw codeperp(B,J,C,5);
+ drawoptions();
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ Figure(-5u,-5u,5u,5u);
+ pair A,B,C,H,I,J;
+ A=u*(0.5,1);
+ B-A=u*(1.4,0);
+ C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ H=projection(C,A,B);
+ I=projection(A,B,C);
+ J=projection(B,C,A);
+ draw polygone(A,B,C) withcolor gris;
+ drawoptions();
+ draw segment(C,H);
+ draw segment(A,B);
+ draw codeperp(C,H,B,5);
+ drawoptions();
+ A:=A+u*(2.5,0);
+ B:=A+u*(1.4,0);
+ C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ I:=projection(A,B,C);
+ J:=projection(B,C,A);
+ draw polygone(A,B,C) withcolor gris;
+ drawoptions();
+ draw segment(A,I);
+ draw segment(C,B);
+ draw codeperp(A,I,B,5);
+ drawoptions();
+ A:=A-u*(1.25,1);
+ B:=A+u*(1.4,0);
+ C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45));
+ J:=projection(B,C,A);
+ draw polygone(A,B,C) withcolor gris;
+ drawoptions();
+ draw segment(B,J);
+ draw segment(C,A);
+ draw codeperp(B,J,C,5);
+ drawoptions();
+ \end{mpost}
+ \fi
+}
+
+\newcommand\Formule[1][]{%
+ \useKVdefault[ClesFormule]
+ \setKV[ClesFormule]{#1}
+ \setlength{\RoundedBoxWidth}{\useKV[ClesFormule]{Largeur}}
+ \ifboolKV[ClesFormule]{Perimetre}{%
+ \begin{tikzpicture}[remember picture, overlay]
+ \node[draw,dashed,rounded corners,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+ \IfStrEqCase{\useKV[ClesFormule]{Surface}}{%
+ {carré}{\begin{center}
+ \MPFigureCarre\par
+ Périmètre d'un carré :\par$4\times c$
+ \end{center}}%
+ {polygone}{%
+ \begin{center}
+ \MPFigurePolygone\par
+ Périmètre d'un polygone : \par$\text{Somme des côtés}$
+ \end{center}
+ }%
+ {rectangle}{
+ \begin{center}
+ \MPFigureRectangle\par
+ Périmètre d'un rectangle : \par$2\times(L+\ell)$
+ \end{center}
+ }%
+ {losange}{%
+ \begin{center}
+ \MPFigureLosange\par
+ Périmètre d'un losange : \par$4\times c$
+ \end{center}
+ }%
+ {triangle}{%
+ \begin{center}
+ \MPFigureTriangle\par
+ Périmètre d'un triangle : \par Somme des côtés
+ \end{center}
+ }%
+ {cercle}{%
+ \begin{center}
+ \MPFigureCercle\par
+ Périmètre d'un cercle : \par$\pi\times\text{diamètre}$
+ \end{center}
+ }%
+ {parallélogramme}{
+ \begin{center}
+ \MPFigureParallelogramme\par
+ Périmètre d'un parallélogramme : \par Somme des côtés
+ \end{center}
+ }}
+ \end{minipage}};
+ \end{tikzpicture}
+ }{\ifboolKV[ClesFormule]{Aire}{%
+ \begin{tikzpicture}[remember picture, overlay]
+ \node[draw,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+ \IfStrEqCase{\useKV[ClesFormule]{Surface}}{%
+ {carré}{\begin{center}
+ \MPFigureCarre\par
+ Aire d'un carré :\par$c\times c$
+ \end{center}}%
+ {rectangle}{%
+ \begin{center}
+ \MPFigureRectangle\par
+ Aire d'un rectangle :\par$L\times\ell$
+ \end{center}
+ }%
+ {losange}{%
+ \begin{center}
+ \MPFigureLosangeAire\par
+ Aire d'un losange :\par$\dfrac{\text{grande diagonale}\times\text{petite diagonale}}{2}$
+ \end{center}
+ }%
+ {triangle}{%
+ \begin{center}
+ \MPFigureTriangleAire\par\vspace{1em}\par
+ Aire d'un triangle : $\displaystyle\frac{\text{côté}\times\text{hauteur relative à ce côté}}{2}$
+ \end{center}
+ }%
+ {disque}{%
+ \begin{center}
+ \MPFigureDisque\par
+ Aire d'un disque :\par$\pi\times r\times r$
+ \end{center}
+ }%
+ {parallélogramme}{%
+ \begin{center}
+ \MPFigureParallelogrammeAire\par
+ Aire d'un parallélogramme : $\text{côté}\times\text{hauteur relative à ce côté}$
+ \end{center}
+ }
+ {sphère}{%
+ \begin{center}
+ \MPFigureSphere\par
+ Aire d'une sphère : $4\times\pi\times r^2$
+ \end{center}
+ }}
+ \end{minipage}};
+ \end{tikzpicture}
+ }{%Volume
+ \begin{tikzpicture}[remember picture, overlay]
+ \node[draw,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+ \IfStrEqCase{\useKV[ClesFormule]{Solide}}{%
+ {boule}{\begin{center}
+ \MPFigureSphere\par
+ Volume d'une boule : $\dfrac{4\times\pi\times r^3}{3}$
+ \end{center}}%
+ {cube}{%
+ \begin{center}
+ \MPFigureCube\par
+ Volume d'une cube : $a^3\quad(a\times a\times a)$
+ \end{center}
+ }%
+ {pavé}{%
+ \begin{center}
+ \MPFigurePave\par
+ Volume d'un pavé droit : $\ell\times h\times p$
+ \end{center}
+ }
+ {prisme}{%
+ \begin{center}
+ \MPFigurePrisme\par
+ Volume d'un prisme droit : $\text{Aire de la base}\times\mbox{hauteur}$
+ \end{center}
+ }
+ {cylindre}{%
+ \begin{center}
+ \MPFigureCylindre\par
+ Volume d'un cylindre de révolution : $\pi\times r^2\times h$
+ \end{center}
+ }
+ {pyramide}{%
+ \begin{center}
+ \MPFigurePyramide\par
+ Volume d'une pyramide : $\dfrac{\text{Aire de la base}\times\text{hauteur}}{3}$
+ \end{center}
+ }
+ {cône}{%
+ \begin{center}
+ \MPFigureCone\par
+ Volume d'un cône de révolution : $\displaystyle\dfrac{\pi\times r^2\times h}{3}$
+ \end{center}
+ }
+ }
+ \end{minipage}};
+ \end{tikzpicture}
+ }
+ }
+}
+
+%%%%%%%%%%
+%%% Proba
+%%%%%%%%%%
+\setKVdefault[ClesProba]{Echelle=false,Arbre=false,Branche=2,Angle=60,Rayon=0.25,LongueurEchelle=5,Affichage=0,Grille=0}
+
+\def\Updatetoksproba#1/#2\nil{\addtotok\toklistepointproba{"#1","\footnotesize #2",}}
+\def\Updatetoksprobaechelle#1/#2/#3\nil{\addtotok\toklistepointproba{#1,#2,"#3",}}
+
+\newtoks\toklistepointproba
+
+% Pour construire l'arbre de probabilité
+\def\buildarbreproba{%
+ \toklistepointproba{}%
+ \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksproba\compteur\nil}%
+ \MPArbreProba{\useKV[ClesProba]{Branche}}{\useKV[ClesProba]{Angle}}{\the\toklistepointproba}{\useKV[ClesProba]{Rayon}}%
+}
+
+% Pour construire l'échelle de probabilité
+\def\buildechelleproba{%
+ \toklistepointproba{}%
+ \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksprobaechelle\compteur\nil}%
+ \MPEchelleProbaUn{\useKV[ClesProba]{LongueurEchelle}}{\the\toklistepointproba}{\useKV[ClesProba]{Affichage}}{\useKV[ClesProba]{Grille}}%
+}
+
+\def\MPEchelleProbaUn#1#2#3#4{%
+ % #1:longueur du segment représentant l'échelle
+ % #2:Liste des évènements/proba
+ % #3: pour l'affichage des labels (0 : rien, 1: fleches, 2 : fleches+evènements, 3: fleches+proba, 4 : tout)
+ % #4 : dimension de "la grille" associée
+ \ifluatex
+ \begin{mplibcode}
+ pair A,B,C[],D[];%les noeuds de l'arbre
+ Figure(-10u,-10u,10u,10u);
+ A=u*(1,1);
+ B-A=u*(#1,0);
+ draw segment(A,B);
+ draw marquesegment(A,B);
+ marque_s:=marque_s/2;
+ if #4>1:
+ for k=0 upto (#4-1):
+ D[k]=(k/#4)[A,B];
+ endfor;
+ if (#4 mod 2)=0:
+ for k=0 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ else:
+ for k=1 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ fi;
+ fi;
+ marque_s:=marque_s*2;
+ labeloffset:=labeloffset*3;
+ label.bot(btex 0 etex,A);
+ label.bot(btex 1 etex,B);
+ labeloffset:=labeloffset/3;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ num:=p_;
+ fi;
+ if (n mod 3)=2:
+ deno:=p_;
+ fi;
+ if (n mod 3=0):
+ C[k]=(num/deno)[A,B];
+ if (#3>0):
+ drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15));
+ fi;
+ if (#3=2) or (#3=4):
+ dotlabel.top(TEX(p_),C[k]);
+ fi;
+ if (#3=1) or (#3=3):
+ dotlabel.top("",C[k]);
+ fi;
+ if (#3>2):
+ label.bot(TEX("$\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));%Le \noexpand est nécessaire pour éviter un problème à la compilation, dû à l'expansion du \frac par gmp.
+ fi;
+ k:=k+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#2);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A,B,C[],D[];%les noeuds de l'arbre
+ Figure(-10u,-10u,10u,10u);
+ A=u*(1,1);
+ B-A=u*(#1,0);
+ draw segment(A,B);
+ draw marquesegment(A,B);
+ marque_s:=marque_s/2;
+ if #4>1:
+ for k=0 upto (#4-1):
+ D[k]=(k/#4)[A,B];
+ endfor;
+ if (#4 mod 2)=0:
+ for k=0 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ else:
+ for k=1 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ fi;
+ fi;
+ marque_s:=marque_s*2;
+ labeloffset:=labeloffset*3;
+ label.bot(btex 0 etex,A);
+ label.bot(btex 1 etex,B);
+ labeloffset:=labeloffset/3;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ num:=p_;
+ fi;
+ if (n mod 3)=2:
+ deno:=p_;
+ fi;
+ if (n mod 3=0):
+ C[k]=(num/deno)[A,B];
+ if (#3>0):
+ drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15));
+ fi;
+ if (#3=2) or (#3=4):
+ dotlabel.top(LATEX(p_),C[k]);
+ fi;
+ if (#3=1) or (#3=3):
+ dotlabel.top("",C[k]);
+ fi;
+ if (#3>2):
+ label.bot(LATEX("$\noexpand\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));%Le \noexpand est nécessaire pour éviter un problème à la compilation, dû à l'expansion du \frac par gmp.
+ fi;
+ k:=k+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#2);
+ \end{mpost}
+ \fi
+}
+
+\def\MPArbreProba#1#2#3#4{%
+ % #1:longueur d'une branche
+ % #2:angle entre deux branches de même origine
+ % #3:Liste des évènements/proba
+ \ifluatex
+ \begin{mplibcode}
+ pair A[],B[];%les noeuds de l'arbre
+ Figure(-10u,-10u,10u,10u);
+ A0=u*(1,1);
+ B0-A0=u*(#1,0);
+ A1=rotation(B0,A0,#2/2);
+ A2=rotation(B0,A0,-#2/2);
+ B1-A1=B0-A0;
+ A3=rotation(B1,A1,#2/3);
+ A4=rotation(B1,A1,-#2/3);
+ B2-A2=B0-A0;
+ A5=rotation(B2,A2,#2/3);
+ A6=rotation(B2,A2,-#2/3);
+ draw segment(A4,A1);
+ draw segment(A5,A2);
+ draw chemin(A3,A1,A0,A2,A6);
+ for k=1 upto 6:
+ fill cercles(A[k],#4*cm) withcolor white;
+ endfor;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ l:=1;% compter les informations "numériques"
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 2)=1:
+ if p_<>"":
+ label(TEX(p_),A[k]);
+ fi;
+ k:=k+1;
+ else:
+ if (l mod 2)=1:
+ if p_<>"":
+ draw appelation(A[(l-1) div 2],A[l],4mm,TEX(p_));
+ fi;
+ else:
+ if p_<>"":
+ draw appelation(A[(l-1) div 2],A[l],-4mm,TEX(p_));
+ fi;
+ fi;
+ l:=l+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#3);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ pair A[],B[];%les noeuds de l'arbre
+ Figure(-10u,-10u,10u,10u);
+ A0=u*(1,1);
+ B0-A0=u*(#1,0);
+ A1=rotation(B0,A0,#2/2);
+ A2=rotation(B0,A0,-#2/2);
+ B1-A1=B0-A0;
+ A3=rotation(B1,A1,#2/3);
+ A4=rotation(B1,A1,-#2/3);
+ B2-A2=B0-A0;
+ A5=rotation(B2,A2,#2/3);
+ A6=rotation(B2,A2,-#2/3);
+ draw segment(A4,A1);
+ draw segment(A5,A2);
+ draw chemin(A3,A1,A0,A2,A6);
+ for k=1 upto 6:
+ fill cercles(A[k],#4*cm) withcolor white;
+ endfor;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ l:=1;% compter les informations "numériques"
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 2)=1:
+ label(LATEX(p_),A[k]);
+ k:=k+1;
+ else:
+ if (l mod 2)=1:
+ draw appelation(A[(l-1) div 2],A[l],4mm,LATEX(p_));
+ else:
+ draw appelation(A[(l-1) div 2],A[l],-4mm,LATEX(p_));
+ fi;
+ l:=l+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#3);
+ \end{mpost}
+ \fi
+}
+
+\newcommand\Proba[2][]{%
+ \useKVdefault[ClesProba]%
+ \setKV[ClesProba]{#1}%
+ % On liste les différents éléments sous la forme Evènement/proba
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeProba{#2}
+ \ifboolKV[ClesProba]{Echelle}{%
+ \buildechelleproba%
+ }{\ifboolKV[ClesProba]{Arbre}{%
+ \buildarbreproba%
+ }{}
+ }
+}
+
+%%%%%%%%%%%%%%
+%%%Reperage
+%%%%%%%%%%%%%%
+\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AffichageNom=false,AffichageCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,EchelleEspace=50,CouleurCoord=black}
+% ValeurOrigine permet de faire des morceaux de demi-droite graduée en passant par droite :)
+
+\def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
+\def\Updatetoksrepere#1/#2/#3\nil{\addtotok\toklistepointrepere{#1,#2,"#3",}}
+\def\Updatetoksespace#1/#2/#3/#4\nil{\addtotok\toklistepointespace{#1,#2,#3,"#4",}}
+
+\newtoks\toklistepointrepere
+\newtoks\toklistepointdroite
+\newtoks\toklistepointespace
+
+% Pour construire le repère de l'espace
+\def\buildespace{%
+ \toklistepointespace{}%
+ \ifboolKV[ClesReperage]{Sphere}{%
+ \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}%
+ }{%
+ \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksespace\compteur\nil}%
+ }
+ \ifboolKV[ClesReperage]{AffichageNom}{%
+ \ifboolKV[ClesReperage]{AffichageCoord}{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{3}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{2}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }
+ }{%
+ \ifboolKV[ClesReperage]{AffichageCoord}{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{1}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }{%
+ \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{0}{\useKV[ClesReperage]{EchelleEspace}}\]%
+ }
+ }%
+}%
+
+\def\MPEspacePave#1#2#3#4#5#6#7#8#9{%
+ \ifluatex
+ \begin{mplibcode}
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-20u,-20u,20u,20u);
+ Initialisation(1500,30,20,abs(#9));
+ %marque_r:=marque_r/2;
+ marque_p:="plein";
+ color A,B,C,D,E,F,G,H,M[],N[];
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ if #9>0:
+ drawarrow Projette(A)--Projette(1.5[D,A]);
+ drawarrow Projette(C)--Projette(1.5[D,C]);
+ drawarrow Projette(E)--Projette(1.5[D,E]);
+ label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+ label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+ label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+ for k=1 upto (#2):
+ pointe((k/#2)[D,A]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[D,C]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[D,E]);
+ endfor;
+ else:
+ drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+ drawarrow Projette(B)--Projette(1.5[A,B]);
+ drawarrow Projette(F)--Projette(1.5[A,F]);
+ label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+ label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+ label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+ for k=1 upto (#2):
+ pointe((k/#2)[A,D]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[A,B]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[A,F]);
+ endfor;
+ fi;
+ vardef tata(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonnée
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+ N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+ if (#8>1):
+ label.top(TEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],(redpart(M[n]),0,0));
+ draw segment(N[n],(0,greenpart(M[n]),0));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef toto(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonnée
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ % message("je suis ici : "&p_);
+ M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+ N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+ if (#8>1):
+ label.top(TEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],A+(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],A+(l/#4)*(B-A));
+ draw segment(N[n],A+(k/#2)*(D-A));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ if #9>0:
+ tata(#7);
+ else:
+ toto(#7);
+ fi;
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ typetrace:="3D";
+ typerepre:="persp";
+ Figure(-20u,-20u,20u,20u);
+ Initialisation(1500,30,20,abs(#9));
+ %marque_r:=marque_r/2;
+ marque_p:="plein";
+ color A,B,C,D,E,F,G,H,M[],N[];
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ if #9>0:
+ drawarrow Projette(A)--Projette(1.5[D,A]);
+ drawarrow Projette(C)--Projette(1.5[D,C]);
+ drawarrow Projette(E)--Projette(1.5[D,E]);
+ label.ulft(btex 1 etex,Projette((1/#2)[D,A]));
+ label.bot(btex 1 etex,Projette((1/#4)[D,C]));
+ label.lft(btex 1 etex,Projette((1/#6)[D,E]));
+ for k=1 upto (#2):
+ pointe((k/#2)[D,A]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[D,C]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[D,E]);
+ endfor;
+ else:
+ drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly;
+ drawarrow Projette(B)--Projette(1.5[A,B]);
+ drawarrow Projette(F)--Projette(1.5[A,F]);
+ label.ulft(btex 1 etex,Projette((1/#2)[A,D]));
+ label.bot(btex 1 etex,Projette((1/#4)[A,B]));
+ label.lft(btex 1 etex,Projette((1/#6)[A,F]));
+ for k=1 upto (#2):
+ pointe((k/#2)[A,D]);
+ endfor;
+ for k=1 upto (#4):
+ pointe((k/#4)[A,B]);
+ endfor;
+ for k=1 upto (#6):
+ pointe((k/#6)[A,F]);
+ endfor;
+ fi;
+ vardef tata(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonnée
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D);
+ N[n]=(k/#2)[D,A]+(l/#4)*(C-D);
+ if (#8>1):
+ label.top(LATEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],(redpart(M[n]),0,0));
+ draw segment(N[n],(0,greenpart(M[n]),0));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef toto(text t)=
+ n:=1;%pour compter combien de points
+ k:=0;%pour garder l'abscisse
+ l:=0;%pour garder l'ordonnée
+ m:=0;%pour garder l'altitude
+ if #8>0:
+ for p_=t:
+ if (n mod 4)=1:
+ k:=p_;
+ fi;
+ if (n mod 4)=2:
+ l:=p_;
+ fi;
+ if (n mod 4)=3:
+ m:=p_;
+ fi;
+ if (n mod 4)=0:
+ % message("je suis ici : "&p_);
+ M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A);
+ N[n]=(k/#2)[A,D]+(l/#4)*(B-A);
+ if (#8>1):
+ label.top(LATEX(p_),Projette(M[n]));
+ pointe(M[n]);
+ fi;
+ if (#8=1) or (#8=3) :
+ drawoptions(dashed evenly withcolor gris);
+ draw segment(M[n],A+(0,0,bluepart(M[n])));
+ draw segment(M[n],N[n]);
+ draw segment(N[n],A+(l/#4)*(B-A));
+ draw segment(N[n],A+(k/#2)*(D-A));
+ drawoptions();
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ if #9>0:
+ tata(#7);
+ else:
+ toto(#7);
+ fi;
+ draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5);
+ \end{mpost}
+ \fi
+}%
+
+% Pour construire le repère du plan
+\def\buildrepere{%
+ \toklistepointrepere{}%
+ \foreachitem\compteur\in\ListePointRepere{\expandafter\Updatetoksrepere\compteur\nil}%
+ \ifboolKV[ClesReperage]{Trace}{%
+ \[\MPPlanTrace{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}{\useKV[ClesReperage]{ListeSegment}}\]%
+ }{%
+ \ifboolKV[ClesReperage]{AffichageNom}{%
+ \ifboolKV[ClesReperage]{AffichageCoord}{%
+ \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{3}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
+ }{%
+ \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
+ }
+ }{%
+ \ifboolKV[ClesReperage]{AffichageCoord}{%
+ \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{1}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
+ }{%
+ \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{0}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
+ }
+ }%
+ }%
+}
+
+\def\MPPlan#1#2#3#4#5#6#7#8{%
+ \ifluatex
+ \begin{mplibcode}
+ maxx:=-4000;
+ minx=4000;
+ unitex:=#1*cm;
+ pasx=#2;
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=#3*cm;
+ pasy:=#4;
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(#4+1):
+ maxy:=#2+1;
+ fi;
+ if miny>(-#4-1):
+ miny:=-#4-1;
+ fi;
+ enddef;
+ toto(#5);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ dotlabel.bot(TEX("\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+ dotlabel.lft(TEX("\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+ label.llft(btex 0 etex,A);
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #6>0:
+ n:=1;
+ k:=0;%pour retenir la coordonnée en x
+ l:=0;%pour retenir la coordonnée en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #6>1:
+ message("p = "&p_);
+ % if p_<>"":
+ if (k>0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ % fi;
+ fi;
+ if (#6=1) or (#6=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ tata(#5);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ maxx:=-4000;
+ minx=4000;
+ unitex:=#1*cm;
+ pasx=#2;
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=#3*cm;
+ pasy:=#4;
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(#4+1):
+ maxy:=#2+1;
+ fi;
+ if miny>(-#4-1):
+ miny:=-#4-1;
+ fi;
+ enddef;
+ toto(#5);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+ dotlabel.lft(LATEX("\noexpand\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+ label.llft(btex 0 etex,A);
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #6>0:
+ n:=1;
+ k:=0;%pour retenir la coordonnée en x
+ l:=0;%pour retenir la coordonnée en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #6>1:
+ if (k>0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ if (#6=1) or (#6=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ tata(#5);
+ \end{mpost}
+ \fi
+}
+
+\def\MPPlanTrace#1#2#3#4#5#6#7#8#9{%
+ \ifluatex
+ \begin{mplibcode}
+ maxx:=-4000;
+ minx=4000;
+ unitex:=#1*cm;
+ pasx=#2;
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=#3*cm;
+ pasy:=#4;
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(#4+1):
+ maxy:=#2+1;
+ fi;
+ if miny>(-#4-1):
+ miny:=-#4-1;
+ fi;
+ enddef;
+ toto(#5);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ dotlabel.bot(TEX("\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+ dotlabel.lft(TEX("\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+ label.llft(btex 0 etex,A);
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #6>0:
+ n:=1;
+ k:=0;%pour retenir la coordonnée en x
+ l:=0;%pour retenir la coordonnée en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #6>1:
+ if (k>0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(TEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ if (#6=1) or (#6=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef Tracage(text t)(text ls)=%on trace les segments
+ pair A[];
+ n:=0;%pour parcourir la liste
+ m:=0;%pour lister les points par leur nombre
+ for p_=t:
+ n:=n+1;
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ m:=m+1;
+ A[m]=(k*unitpx,l*unitpy);
+ fi;
+ endfor;
+ for p_=ls:
+ draw segment(A[p_ div 10],A[p_ mod 10]);
+ endfor;
+ enddef;
+ tata(#5);
+ Tracage(#5)(#9);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ maxx:=-4000;
+ minx=4000;
+ unitex:=#1*cm;
+ pasx=#2;
+ unitpx:=unitex/pasx;
+ maxy:=-4000;
+ miny:=4000;
+ unitey:=#3*cm;
+ pasy:=#4;
+ unitpy:=unitey/pasy;
+ n:=1;
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if p_>maxy:
+ maxy:=p_;
+ fi;
+ if p_<miny:
+ miny:=p_;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ maxy:=maxy+1;
+ miny:=miny-1;
+ if maxy<(#4+1):
+ maxy:=#2+1;
+ fi;
+ if miny>(-#4-1):
+ miny:=-#4-1;
+ fi;
+ enddef;
+ toto(#5);
+ Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
+ pair A,B,C,D,E;
+ A=(0,0);
+ B=(minx*unitpx,0);
+ C=(maxx*unitpx,0);
+ D=(0,miny*unitpy);
+ E=(0,maxy*unitpy);
+ for k=0 upto (maxx-minx):
+ draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris;
+ endfor;
+ for k=0 upto (maxy-miny):
+ draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris;
+ endfor;
+ drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
+ drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
+ dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
+ dotlabel.lft(LATEX("\noexpand\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
+ label.llft(btex 0 etex,A);
+ % apparition du nom des points ou pas
+ m_c:=m_c*3;
+ marque_p:="croix";
+ vardef tata(text t)=%on place les points
+ if #6>0:
+ n:=1;
+ k:=0;%pour retenir la coordonnée en x
+ l:=0;%pour retenir la coordonnée en y
+ for p_=t:
+ if (n mod 3)=1:
+ if numeric p_:
+ k:=p_;
+ fi;
+ fi;
+ if (n mod 3)=2:
+ if numeric p_:
+ l:=p_;
+ fi;
+ fi;
+ if (n mod 3)=0:
+ if #6>1:
+ if (k>0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l>0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l=0):
+ label.urt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l>0):
+ label.ulft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k=0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l<0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k<0) and (l=0):
+ label.llft(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ if (k>0) and (l<0):
+ label.lrt(LATEX(p_),(k*unitpx,l*unitpy));
+ fi;
+ pointe((k*unitpx,l*unitpy));
+ fi;
+ if (#6=1) or (#6=3):
+ draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
+ fi;
+ fi;
+ n:=n+1;
+ endfor;
+ fi;
+ enddef;
+ vardef Tracage(text t)(text ls)=%on trace les segments
+ pair A[];
+ n:=0;%pour parcourir la liste
+ m:=0;%pour lister les points par leur nombre
+ for p_=t:
+ n:=n+1;
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ m:=m+1;
+ A[m]=(k*unitpx,l*unitpy);
+ fi;
+ endfor;
+ for p_=ls:
+ draw segment(A[p_ div 10],A[p_ mod 10]);
+ endfor;
+ enddef;
+ tata(#5);
+ Tracage(#5)(#9);
+ \end{mpost}
+ \fi
+}
+
+% Pour construire la demi-droite graduée
+\def\builddemidroite{%
+ \toklistepointdroite{}%
+ \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdroite\compteur\nil}%
+ \ifboolKV[ClesReperage]{DemiDroite}{%
+ \ifboolKV[ClesReperage]{AffichageNom}{%
+ \[\MPDemiGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{1}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
+ }{%
+ \[\MPDemiGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{0}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
+ }
+ }{%
+ \ifboolKV[ClesReperage]{AffichageNom}{%
+ \[\MPDroiteGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{1}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
+ }{%
+ \[\MPDroiteGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{0}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
+ }%
+ }%
+}%
+
+\def\MPDemiGraduee#1#2#3#4#5#6{%
+ % #1 : unite
+ % #2 : pas
+ % #3 : liste des points à placer en pas. pour gérer le cas des repérages fractionnaires
+ % #4 : on affiche le nom des points ou pas
+ % #5 : quelle est la valeur de la longueur unité ?
+ % #6 : la valeur de l'unité (ne sert à rien ici, mais en prévision
+ % de Droite)
+ \ifluatex
+ \begin{mplibcode}
+ maxx:=0;
+ unitex:=#1*cm;
+ pasx:=#2;
+ unitp:=unitex/pasx;%unité de déplacement
+ vardef toto(text t)=%On détermine le nombre "d'unités" à placer
+ for p_=t:
+ if numeric p_:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ fi;
+ endfor;
+ maxx:=maxx+1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ enddef;
+ toto(#3);
+ Figure(-u,-u,(maxx+0.75)*unitp,u);
+ pair A,B;
+ A=(0,0);
+ B=unitp*(maxx,0);
+ drawarrow A--(B+(0.75*unitp,0));
+ %marquage secondaire
+ marque_s:=marque_s/3;
+ for k=0 step 2 until (maxx):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ drawoptions();
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ % marquage des points
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*2;
+ dotlabel.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
+ label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A);
+ vardef tata(text t)=%on place les points
+ if #4>0:
+ for p_=t:
+ if numeric p_:
+ label("",unitp*(p_,0));
+ k:=p_;
+ fi;
+ if string p_:
+ if p_<>"":
+ label.top(TEX(p_),unitp*(k,0));
+ pointe(unitp*(k,0));
+ fi;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ tata(#3);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ maxx:=0;
+ unitex:=#1*cm;
+ pasx:=#2;
+ unitp:=unitex/pasx;%unité de déplacement
+ vardef toto(text t)=%On détermine le nombre "d'unités" à placer
+ for p_=t:
+ if numeric p_:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ fi;
+ endfor;
+ maxx:=maxx+1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ enddef;
+ toto(#3);
+ Figure(-u,-u,(maxx+0.75)*unitp,u);
+ pair A,B;
+ A=(0,0);
+ B=unitp*(maxx,0);
+ drawarrow A--(B+(0.75*unitp,0));
+ %marquage secondaire
+ marque_s:=marque_s/3;
+ for k=0 step 2 until (maxx):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ drawoptions();
+ % marquage primaire
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ % marquage des points
+ m_c:=m_c*3;
+ marque_p:="croix";
+ labeloffset:=labeloffset*2;
+ dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
+ label.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#6)&"}"),A);
+ vardef tata(text t)=%on place les points
+ if #4>0:
+ for p_=t:
+ if numeric p_:
+ label("",unitp*(p_,0));
+ k:=p_;
+ fi;
+ if string p_:
+ label.top(LATEX(p_),unitp*(k,0));
+ if p_<>"":
+ pointe(unitp*(k,0));
+ fi;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ tata(#3);
+\end{mpost}
+\fi
+}
+
+\def\MPDroiteGraduee#1#2#3#4#5#6{%
+ % #1 : unite
+ % #2 : pas
+ % #3 : liste des points à placer en pas. pour gérer le cas des repérages fractionnaires
+ % #4 : on affiche le nom des points ou pas
+ % #5 : quelle est la valeur de la longueur unité ?
+ \ifluatex
+ \begin{mplibcode}
+ maxx:=0;
+ minx:=4000;
+ unitex:=#1*cm;
+ pasx:=#2;
+ unitp:=unitex/pasx;%unité de déplacement
+ vardef toto(text t)=%On détermine le nombre "d'unités" à placer
+ for p_=t:
+ if numeric p_:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ enddef;
+ toto(#3);
+ Figure((minx-1)*u,-u,(maxx+1)*unitp,u);
+ pair A,B,C;
+ A=(0,0);
+ B=unitp*(maxx,0);
+ C=unitp*(minx,0);
+ drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+ marque_s:=marque_s/3;
+ labeloffset:=labeloffset*2;
+ if ((maxx-minx) mod 2)=0:
+% show maxx; show minx;
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C,B);
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ else:
+ % show maxx; show minx;
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ fi;
+ % marquage primaire%%%%%%%%%%%%%%%%%%%%%%%%
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+ endfor;
+ m_c:=m_c*3;
+ marque_p:="croix";
+ dotlabel.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
+ label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A);
+ if #5=1:
+ label.top(TEX("I"),unitex*(1,0));
+ fi;
+ label.top(TEX("O"),A);
+ vardef tata(text t)=%on place les points
+ if #4>0:
+ for p_=t:
+ if numeric p_:
+ label("",unitp*(p_,0));
+ k:=p_;
+ fi;
+ if string p_:
+ if p_<>"":
+ label.top(TEX(p_),unitp*(k,0));
+ pointe(unitp*(k,0));
+ fi;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ tata(#3);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+ maxx:=0;
+ minx:=4000;
+ unitex:=#1*cm;
+ pasx:=#2;
+ unitp:=unitex/pasx;%unité de déplacement
+ vardef toto(text t)=%On détermine le nombre "d'unités" à placer
+ for p_=t:
+ if numeric p_:
+ if p_>maxx:
+ maxx:=p_;
+ fi;
+ if p_<minx:
+ minx:=p_;
+ fi;
+ fi;
+ endfor;
+ maxx:=maxx+1;
+ minx:=minx-1;
+ if maxx<(#2+1):
+ maxx:=#2+1;
+ fi;
+ if minx>(-#2-1):
+ minx:=-#2-1;
+ fi;
+ enddef;
+ toto(#3);
+ Figure((minx-1)*u,-u,(maxx+1)*unitp,u);
+ pair A,B,C;
+ A=(0,0);
+ B=unitp*(maxx,0);
+ C=unitp*(minx,0);
+ drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+ marque_s:=marque_s/3;
+ labeloffset:=labeloffset*2;
+ if ((maxx-minx) mod 2)=0:
+% show maxx; show minx;
+ for k=(minx+1) step 2 until (maxx-1):
+ draw marquedemidroite(C,B);
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ else:
+ % show maxx; show minx;
+ for k=(minx) step 2 until (maxx-1):
+ draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+ endfor;
+ fi;
+ % marquage primaire%%%%%%%%%%%%%%%%%%%%%%%%
+ marque_s:=marque_s*3;
+ for k=0 step pasx until (maxx-pasx):
+ draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+ endfor;
+ for k=0 step -pasx until (minx+pasx):
+ draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+ endfor;
+ m_c:=m_c*3;
+ marque_p:="croix";
+ dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
+ label.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#6)&"}"),A);
+ if #5=1:
+ label.top(LATEX("I"),unitex*(1,0));
+ fi;
+ label.top(LATEX("O"),A);
+ vardef tata(text t)=%on place les points
+ if #4>0:
+ for p_=t:
+ if numeric p_:
+ label("",unitp*(p_,0));
+ k:=p_;
+ fi;
+ if string p_:
+ label.top(LATEX(p_),unitp*(k,0));
+ if p_<>"":
+ pointe(unitp*(k,0));
+ fi;
+ fi;
+ endfor;
+ fi;
+ enddef;
+ tata(#3);
+ \end{mpost}
+ \fi
+}
+
+\newcommand\Reperage[2][]{%
+ \useKVdefault[ClesReperage]%
+ \setKV[ClesReperage]{#1}%
+ \ifboolKV[ClesReperage]{Espace}{%
+ \setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}%
+ \setKV[ClesReperage]{#1}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointEspace{#2}%
+ \buildespace%
+ }{\ifboolKV[ClesReperage]{Plan}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointRepere{#2}%
+ \buildrepere%
+ }{\ifboolKV[ClesReperage]{Droite}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointDroite{#2}%
+ \builddemidroite%
+ }{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListePointDroite{#2}%
+ \builddemidroite%
+ }%
+ }%
+ }%
+}%
+
+
+%%%%%%%%
+%% Puissances
+%%%%%%
+\newcommand\Puissances[2]{%
+ \ensuremath{
+ \xintifboolexpr{#2=0}{1}{\xintifboolexpr{#2>0}{\xdef\total{\fpeval{#2-1}}#1\multido{\i=1+1}{\total}{\times#1}}{\xdef\total{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\total}{\times#1}}}}%
+ }
+}
+
+%%%%%%%%%
+%% Tableaux d'unités
+%%%%%%%%%
+\setKVdefault[ClesTableaux]{Decimaux=false,Partie=false,CouleurG=gray!15,CouleurM=gray!15,Couleurm=gray!15,Couleuru=gray!15,Classes=false,Nombres=false,Metre=false,Carre=false,Cube=false,Litre=false,Gramme=false,Fleches=false,Colonnes=false}
+
+\newcommand\Tableau[1][]{%
+ \useKVdefault[ClesTableaux]
+ \setKV[ClesTableaux]{#1}
+ \ifboolKV[ClesTableaux]{Decimaux}{%
+ \setlength{\tabcolsep}{0.01\tabcolsep}
+ \begin{center}
+ \begin{tabular}{|*{12}{>{\centering\arraybackslash}m{4.75em}|}>{\columncolor{gray!15},}{c}|*{3}{>{\centering\arraybackslash}m{4.75em}|}}
+ \ifboolKV[ClesTableaux]{Partie}{\multicolumn{12}{c}{\bfseries Partie Entière}&\multicolumn{1}{c}{\cellcolor{gray!15},}&\multicolumn{3}{c}{\bfseries Partie décimale}\\}{}
+ \ifboolKV[ClesTableaux]{Classes}{\hline\multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}&\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe des milliers}&\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe des unités}&&&&\\}{}
+ \hline
+ \fontsize{4.5}{4.5}\selectfont centaines de milliards%
+ &\fontsize{4.5}{4.5}\selectfont dizaines de milliards%
+ &\fontsize{4.5}{4.5}\selectfont unités de milliards%
+ &\fontsize{4.5}{4.5}\selectfont centaines de millions%
+ &\fontsize{4.5}{4.5}\selectfont dizaines de millions%
+ &\fontsize{4.5}{4.5}\selectfont unités de millions%
+ &\fontsize{4.5}{4.5}\selectfont centaines de milliers%
+ &\fontsize{4.5}{4.5}\selectfont dizaines de milliers%
+ &\fontsize{4.5}{4.5}\selectfont unités de milliers%
+ &\fontsize{4.5}{4.5}\selectfont centaines%
+ &\fontsize{4.5}{4.5}\selectfont dizaines%
+ &\fontsize{4.5}{4.5}\selectfont unités%
+ &%
+ &\fontsize{4.5}{4.5}\selectfont dixièmes%
+ &\fontsize{4.5}{4.5}\selectfont centièmes%
+ &\fontsize{4.5}{4.5}\selectfont millièmes\\
+ \ifboolKV[ClesTableaux]{Nombres}{%
+ \fontsize{4.5}{4.5}\selectfont \num{100000000000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{10000000000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{1000000000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{100000000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{100000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{10000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{1000}%
+ &\fontsize{4.5}{4.5}\selectfont \num{100}%
+ &\fontsize{4.5}{4.5}\selectfont \num{10}%
+ &\fontsize{4.5}{4.5}\selectfont \num{1}%
+ &%
+ &\fontsize{4.5}{4.5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$%
+ &\fontsize{4.5}{4.5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$%
+ &\fontsize{4.5}{4.5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$%
+ \\
+ }{}
+ \hline
+ &&&&&&&&&&&&&&&\\
+ &&&&&&&&&&&&&&&\\
+ \end{tabular}
+ \end{center}
+ \setlength{\tabcolsep}{100\tabcolsep}
+ }{}
+ \ifboolKV[ClesTableaux]{Metre}{%
+ \[\renewcommand{\arraystretch}{1.15}%
+ \begin{tabular}{|*{7}{p{7.5mm}|}}%
+ \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
+ \hline
+ \multicolumn{1}{|c|}{km}&\multicolumn{1}{c|}{hm}&\multicolumn{1}{c|}{dam}&\multicolumn{1}{c|}{m}&\multicolumn{1}{c|}{dm}&\multicolumn{1}{c|}{cm}&\multicolumn{1}{c|}{mm}\\
+ \hline
+ &&&&&&\\
+ \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (E1);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (D1);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (C1);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}%
+ &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\%
+ \end{tabular}
+ \]
+ \ifboolKV[ClesTableaux]{Fleches}{%
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{10}$}(B);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{10}$}(C);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{10}$}(D);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{10}$}(E);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{10}$}(F);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{10}$}(G);}
+ % bas
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{10}$}(B1);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{10}$}(C1);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{10}$}(D1);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{10}$}(E1);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{10}$}(F1);}
+ \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{10}$}(G1);}
+ }{}
+ }
+ {}
+ \ifboolKV[ClesTableaux]{Carre}{%
+ \[\renewcommand{\arraystretch}{1.15}\ifboolKV[ClesTableaux]{Colonnes}{\begin{tabular}{|*{7}{p{2.5mm}!{\color{gray!50}\vrule}p{2.5mm}|}}}{\begin{tabular}{|*{7}{p{2.5mm}p{2.5mm}|}}}
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate
+ (B);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate
+ (C);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate
+ (D);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate
+ (E);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate
+ (F);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
+\hline
+\multicolumn{2}{|c|}{km$^2$}&\multicolumn{2}{c|}{hm$^2$}&\multicolumn{2}{c|}{dam$^2$}&\multicolumn{2}{c|}{m$^2$}&\multicolumn{2}{c|}{dm$^2$}&\multicolumn{2}{c|}{cm$^2$}&\multicolumn{2}{c|}{mm$^2$}\\
+\hline
+&&&&&&&&&&&&&\\
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (G1);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em]
+ (F1);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em]
+ (E1);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em]
+ (D1);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em]
+ (C1);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em]
+ (B1);}}&%
+\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (A1);}}\\%
+\end{tabular}
+\]
+\ifboolKV[ClesTableaux]{Fleches}{%
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{100}$}(B);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{100}$}(C);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{100}$}(D);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{100}$}(E);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{100}$}(F);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{100}$}(G);}
+%bas
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{100}$}(B1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{100}$}(C1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{100}$}(D1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{100}$}(E1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{100}$}(F1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{100}$}(G1);}
+}{}
+ }
+ {}
+ \ifboolKV[ClesTableaux]{Cube}{%
+ {\setlength{\tabcolsep}{0.625\tabcolsep}
+\[\renewcommand{\arraystretch}{1.15}\ifboolKV[ClesTableaux]{Colonnes}{\begin{tabular}{|*{7}{p{2.5mm}!{\color{gray!50}\vrule}p{2.5mm}!{\color{gray!50}\vrule}p{2.5mm}|}}}{\begin{tabular}{|*{7}{p{2.5mm}p{2.5mm}p{2.5mm}|}}}
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate
+ (B);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate
+ (C);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate
+ (D);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate
+ (E);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate
+ (F);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
+\hline
+\multicolumn{3}{|c|}{km$^3$}&\multicolumn{3}{c|}{hm$^3$}&\multicolumn{3}{c|}{dam$^3$}&\multicolumn{3}{c|}{m$^3$}&\multicolumn{3}{c|}{dm$^3$}&\multicolumn{3}{c|}{cm$^3$}&\multicolumn{3}{c|}{mm$^3$}\\
+\hline
+&&&&&&&&&&&&&&&&&&&&\\
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (G1);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate
+ (F1);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate
+ (E1);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate
+ (D1);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate
+ (C1);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate
+ (B1);}}&%
+\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (A1);}}\\%
+\end{tabular}
+\]
+\setlength{\tabcolsep}{1.6\tabcolsep}}
+\ifboolKV[ClesTableaux]{Fleches}{%
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150]
+ (A) to node[above, midway]{$\times\mbox{\num{1000}}$}(B);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to
+ node[above, midway]{$\times\mbox{\num{1000}}$}(C);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to
+ node[above, midway]{$\times\mbox{\num{1000}}$}(D);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to
+ node[above, midway]{$\times\mbox{\num{1000}}$}(E);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to
+ node[above, midway]{$\times\mbox{\num{1000}}$}(F);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to
+ node[above, midway]{$\times\mbox{\num{1000}}$}(G);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to
+ node[below, midway]{$\div\mbox{\num{1000}}$}(B1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to
+ node[below, midway]{$\div\mbox{\num{1000}}$}(C1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to
+ node[below, midway]{$\div\mbox{\num{1000}}$}(D1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to
+ node[below, midway]{$\div\mbox{\num{1000}}$}(E1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to
+ node[below, midway]{$\div\mbox{\num{1000}}$}(F1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to
+ node[below, midway]{$\div\mbox{\num{1000}}$}(G1);}
+}{}
+ }
+ {}
+ \ifboolKV[ClesTableaux]{Litre}{%
+ \[\renewcommand{\arraystretch}{1.15}\begin{tabular}{|*{7}{p{7.5mm}|}}
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (B);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (C);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (D);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (E);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (F);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
+\hline
+\multicolumn{1}{|c|}{kL}&\multicolumn{1}{c|}{hL}&\multicolumn{1}{c|}{daL}&\multicolumn{1}{c|}{L}&\multicolumn{1}{c|}{dL}&\multicolumn{1}{c|}{cL}&\multicolumn{1}{c|}{mL}\\
+\hline
+&&&&&&\\
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (F1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (E1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (D1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (C1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (B1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\%
+\end{tabular}
+\]
+\ifboolKV[ClesTableaux]{Fleches}{%
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{10}$}(B);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{10}$}(C);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{10}$}(D);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{10}$}(E);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{10}$}(F);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{10}$}(G);}
+%bas
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{10}$}(B1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{10}$}(C1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{10}$}(D1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{10}$}(E1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{10}$}(F1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{10}$}(G1);}
+}{}
+ }
+ {}
+ \ifboolKV[ClesTableaux]{Gramme}{%
+ \[\renewcommand{\arraystretch}{1.15}\begin{tabular}{|*{7}{p{7.5mm}|}}
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (B);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (C);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (D);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (E);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate
+ (F);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
+\hline
+\multicolumn{1}{|c|}{kg}&\multicolumn{1}{c|}{hg}&\multicolumn{1}{c|}{dag}&\multicolumn{1}{c|}{g}&\multicolumn{1}{c|}{dg}&\multicolumn{1}{c|}{cg}&\multicolumn{1}{c|}{mg}\\
+\hline
+&&&&&&\\
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (F1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (E1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (D1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (C1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em]
+ (B1);}}&%
+\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\%
+\end{tabular}
+\]
+\ifboolKV[ClesTableaux]{Fleches}{%
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{10}$}(B);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{10}$}(C);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{10}$}(D);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{10}$}(E);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{10}$}(F);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{10}$}(G);}
+%bas
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{10}$}(B1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{10}$}(C1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{10}$}(D1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{10}$}(E1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{10}$}(F1);}
+\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{10}$}(G1);}
+}{}%
+ }%
+ {}%
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/metapost/PfC-Calculatrice.mp b/macros/latex/contrib/profcollege/metapost/PfC-Calculatrice.mp
new file mode 100644
index 0000000000..a6326e1925
--- /dev/null
+++ b/macros/latex/contrib/profcollege/metapost/PfC-Calculatrice.mp
@@ -0,0 +1,198 @@
+%Author : Christophe Poulain
+%Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+prologues:=3;
+
+path carre[];
+
+u:=0.5mm;
+
+vardef BlocAffichage=
+ for k=0 upto 34:
+ carre[k]:=(unitsquare scaled u) shifted(u*(k mod 5,5-(k div 5)));
+ endfor;
+enddef;
+
+vardef Affichage(expr decomp)=
+ save $;
+ picture $;
+ drawoptions(withpen pensquare scaled0.1);
+ $=image(%
+ for k=0 upto 34:
+ if (substring(k,k+1) of decomp)="1":
+ fill carre[k];
+ fi;
+ endfor;
+ );
+ drawoptions();
+ $
+enddef;
+
+nblignes:=0;
+
+boolean print;
+print:=false;
+
+color CouleurEcran;
+CouleurEcran=(107/255,148/255,107/255);
+
+boolean Math;
+Math=true;
+
+decahoriz:=0;
+
+vardef Test(expr cptk,cptnt)=
+ pair decalage;
+ if nblignes mod 2=0:
+ decalage:=u*((20-length(cptnt)+cptk)*6,-8*(nblignes-1));
+ else:
+ decalage:=u*(decahoriz,-8*(nblignes-1));
+ decahoriz:=decahoriz+6;
+ fi;
+ if substring(cptk,cptk+1) of cptnt="A":draw Affichage("01110100011000110001111111000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="B":draw Affichage("11110100011000111110100011000111110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="C":draw Affichage("01110100011000010000100001000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="D":draw Affichage("11100100101000110001100011001011100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="E":draw Affichage("11111100001000011111100001000011111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="F":draw Affichage("11111100001000011111100001000010000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="G":draw Affichage("01110100011000010111100011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="H":draw Affichage("10001100011000111111100011000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="I":draw Affichage("01110001000010000100001000010001110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="J":draw Affichage("00111000100001000010000101001001100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="K":draw Affichage("10001100101010011000101001001010001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="L":draw Affichage("10000100001000010000100001000011111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="M":draw Affichage("10001110111010110101100011000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="N":draw Affichage("10001100011100110101100111000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="O":draw Affichage("01110100011000110001100011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="P":draw Affichage("11110100011000111110100001000010000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="Q":draw Affichage("01110100011000110001101011001001101") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="R":draw Affichage("11110100011000111110101001001010001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="S":draw Affichage("01111100001000001110000010000111110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="T":draw Affichage("11111001000010000100001000010000100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="U":draw Affichage("10001100011000110001100011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="V":draw Affichage("10001100011000110001100010101000100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="W":draw Affichage("10101101011010110101101011010101010") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="X":draw Affichage("10001100010101000100010101000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="Y":draw Affichage("10001100011000101010001000010000100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="Z":draw Affichage("11111000010001000100010001000011111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="a":draw Affichage("00000000000111100001011111000101111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="b":draw Affichage("10000100001011011001100011000111110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="c":draw Affichage("00000000000111010000100001000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="d":draw Affichage("00001000010110110011100011000101111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="e":if Math:
+ draw Affichage("00000000000000000001101000100010100") shifted(decalage);
+ decalage:=u*(decahoriz-1,-8*(nblignes-1));
+ draw Affichage("00000000001001010101101011010110010") shifted(decalage);
+ decahoriz:=decahoriz+6;
+ else:
+ draw Affichage("00000000000111010001111111000001110") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="@":draw Affichage("00010001000111010001111111000001110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="f":draw Affichage("00110010010100011100010000100001000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="g":draw Affichage("00000011111000110001011110000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="h":draw Affichage("10000100001011011001100011000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="i":draw Affichage("00100000000110000100001000010001110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="j":if Math=true:
+ draw Affichage("00011000011110100001000000000000000") shifted(decalage);
+ else:
+ draw Affichage("00010000000011000010000101001001100") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="k":if Math=true:
+ draw Affichage("11100001000100011100000000000000000") shifted(decalage);
+ else:
+ draw Affichage("10000100001001010100110001010010010") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="l":if Math=true:
+ draw Affichage("11100010000010011100000000000000000") shifted(decalage);
+ else:
+ draw Affichage("01100001000010000100001000010001110") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="m":draw Affichage("00000000001101010101101011000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="n":draw Affichage("00000000001011011001100011000110001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="o":draw Affichage("00000000000111010001100011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="p":draw Affichage("00000000001111010001111101000010000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="q":if Math=true:
+ draw Affichage("00000000001111101010010100101010001") shifted(decalage);
+ else:
+ draw Affichage("00000000000110110011011110000100001") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="r":draw Affichage("00000000001011011001100001000010000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="s":draw Affichage("00000000000111010000011100000111110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="t":draw Affichage("01000010001110001000010000100100110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="u":draw Affichage("00000000001000110001100011001101101") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="v":if Math=true:
+ draw Affichage("00111001000010000100101000110000100") shifted(decalage);
+ else:
+ draw Affichage("00000000001000110001100010111000100") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="w":draw Affichage("00000000001010110101101011010101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="x":draw Affichage("00000000001000101010001000101010001") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="y":draw Affichage("00000000001000110001011110000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="z":draw Affichage("00000000001111100010001000100011111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="0":draw Affichage("01110100011001110101110011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="1":draw Affichage("00100011000010000100001000010001110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="2":draw Affichage("01110100010000100010001000100011111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="3":draw Affichage("11111000100010000010000011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="4":draw Affichage("00010001100101010010111110001000010") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="5":draw Affichage("11111100001111000001000011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="6":draw Affichage("00110010001000011110100011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="7":draw Affichage("11111000010001000100010000100001000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="8":draw Affichage("01110100011000101110100011000101110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="9":draw Affichage("01110100011000101111000010001001100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="!":draw Affichage("00100001000010000100000000000000100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="'":draw Affichage("01100001000100000000000000000000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="(":draw Affichage("00010001000100001000010000010000010") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt=")":draw Affichage("01000001000001000010000100010001000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="*":draw Affichage("00000001001010101110101010010000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="+":draw Affichage("00000001000010011111001000010000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt=",":draw Affichage("00000000000000000000011000010001000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="-":draw Affichage("00000000000000011111000000000000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt=".":draw Affichage("00000000000000000000000000110001100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="/":draw Affichage("00000000010001000100010001000000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt=":":if Math=true:
+ draw Affichage("00000000000000000000000000000000000") shifted(decalage);
+ else:
+ draw Affichage("00000011000110000000011000110000000") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt=";":if Math=true:
+ draw Affichage("00000001000000011111000000010000000") shifted(decalage);
+ else:
+ draw Affichage("00000011000110000000011000010001000") shifted(decalage);
+ fi;
+ elseif substring(cptk,cptk+1) of cptnt="<":draw Affichage("00010001000100010000010000010000010") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="=":draw Affichage("00000000001111100000111110000000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt=">":draw Affichage("10000010000010000010001000100010000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="?":draw Affichage("01110100010000100010001000000000100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="[":draw Affichage("01110010000100001000010000100001110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="]":draw Affichage("01110000100001000010000100001001110") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="`":draw Affichage("01000001000001000000000000000000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="|":draw Affichage("00100001000010000100001000010000100") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt=" ":draw Affichage("00000100010101000100010101000100000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="&":draw Affichage("00000100001100011100110001000000000") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="$":draw Affichage("00000000000000100001000010000111111") shifted(decalage);
+ elseif substring(cptk,cptk+1) of cptnt="^":draw Affichage("00100010101000100000000000000000000") shifted(decalage);
+ fi;
+enddef;
+
+vardef LCD(text nt)(text rep)=
+ decahoriz:=0;
+ nblignes:=nblignes+1;
+ path Ecran;
+ Ecran:=(u*(0,-1)--u*(120,-1)--u*(120,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
+ fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+ draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+ for k=0 upto length(nt)-1:
+ BlocAffichage;
+ Test(k,nt);
+ endfor;
+ nblignes:=nblignes+1;
+ Ecran:=(u*(0,-1)--u*(120,-1)--u*(120,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
+ fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+ draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
+ for k=0 upto length(rep)-1:
+ BlocAffichage;
+ Test(k,rep);
+ endfor;
+enddef;
+
+endinput;
diff --git a/macros/latex/contrib/profcollege/metapost/PfC-Constantes.mp b/macros/latex/contrib/profcollege/metapost/PfC-Constantes.mp
new file mode 100644
index 0000000000..b97bd8a4c0
--- /dev/null
+++ b/macros/latex/contrib/profcollege/metapost/PfC-Constantes.mp
@@ -0,0 +1,23 @@
+%Author : Christophe Poulain
+%Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+%Constantes
+u:=1cm;
+v:=(sqrt3)/2;
+pi:=3.141592654;
+e:=2.718281828;
+c:=57.29578; % conversion d'un radian en degres
+color rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,cielfonce,orangevif,gris;
+rouge=(1,0,0);
+bleu=(0,0,1);
+noir=(0,0,0);
+blanc=(1,1,1);
+orange=(1,0.5,0);
+violet=blanc-vert;
+rose=(1,0.7,0.7);
+cielfonce=0.9*(0.25,1,1);
+ciel=bleu+vert;
+orangevif=(1,0.25,0.1);
+vert=(0,1,0);
+jaune=rouge+vert;
+gris=0.8*white;
diff --git a/macros/latex/contrib/profcollege/metapost/PfC-Geometrie.mp b/macros/latex/contrib/profcollege/metapost/PfC-Geometrie.mp
new file mode 100644
index 0000000000..1408cbbce1
--- /dev/null
+++ b/macros/latex/contrib/profcollege/metapost/PfC-Geometrie.mp
@@ -0,0 +1,1195 @@
+%Author : Christophe Poulain
+%Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+%===============================================
+%% PfC-Geometrie
+%%===============================================
+%------------------------------------------------
+% Appel fichier
+%------------------------------------------------
+%input PfC-Constantes;
+%------------------------------------------------
+% La figure (debut et fin) JMS/CP
+%------------------------------------------------
+path feuillet;
+numeric _tfig,_nfig;
+_tfig:=5cm;
+_nfig:=0;
+pair coinbg,coinbd,coinhd,coinhg;
+
+string typetrace;
+typetrace="normal";
+
+def feuille(expr xa,ya,xb,yb) =
+ feuillet := (xa,ya)--(xa,yb)--(xb,yb)--(xb,ya)--cycle;
+ coinbg := (xa,ya);
+ coinbd := (xb,ya);
+ coinhd := (xb,yb);
+ coinhg := (xa,yb);
+ %modifie le 29.09.04
+ z.so=(xpart(coinbg/1cm),ypart(coinbg/1cm));
+ z.ne=(xpart(coinhd/1cm),ypart(coinhd/1cm));
+ %fin modification
+ extra_endfig := "clip currentpicture to feuillet;" & extra_endfig;
+enddef;
+
+def Figure(expr xa,ya,xb,yb) =
+ feuille(xa,ya,xb,yb);
+ _tfig:= if (xb-xa)>(yb-ya): xb-xa else: yb-ya fi;
+ _tfig:=2*_tfig;
+enddef;
+
+%%-----------------------------------------------
+%% Les marques (JMS)
+%%-----------------------------------------------
+string marque_p;
+marque_p := "non";
+marque_r := 20;
+marque_a := 20;
+marque_s := 5;
+marque_ang := 10;
+m_c := 10 ;%Pour la croix du marquage des points
+
+%------------------------------------------------
+% Les tables
+%------------------------------------------------
+numeric _tn;
+_tn:=0;
+pair _t[];
+color _T[];
+
+%%-----------------------------------------------
+%% Procedures d'affichage
+%%-----------------------------------------------
+def MarquePoint(expr p)=
+ if typetrace="3D":
+ %JMS
+ if marque_p = "plein":
+ fill fullcircle scaled (marque_r/5) shifted Projette(p);
+ elseif marque_p = "creux":
+ fill fullcircle scaled (marque_r/5) shifted (Projette(p)) withcolor white;
+ draw fullcircle scaled (marque_r/5) shifted (Projette(p));
+ %fin JMS
+ elseif marque_p = "croix":
+ draw (Projette(p) shifted (-u/10,u/10))--(Projette(p) shifted (u/10,-u/10));
+ draw (Projette(p) shifted (-u/10,-u/10))--(Projette(p) shifted (u/10,u/10));
+ elseif marque_p = "tiretv":
+ draw (Projette(p) shifted (0,u/10))--(Projette(p) shifted(0,-u/10));
+ elseif marque_p = "tireth":
+ draw (Projette(p) shifted (u/10,0))--(Projette(p) shifted(-u/10,0));
+ fi;
+ else:
+ if marque_p = "plein":
+ fill fullcircle scaled (marque_r/5) shifted p;
+ elseif marque_p = "creux":
+ fill fullcircle scaled (marque_r/5) shifted p withcolor white;
+ draw fullcircle scaled (marque_r/5) shifted p;
+ elseif marque_p = "croix":
+ draw (p shifted (-u/m_c,u/m_c))--(p shifted (u/m_c,-u/m_c));
+ draw (p shifted (-u/m_c,-u/m_c))--(p shifted (u/m_c,u/m_c));
+ elseif marque_p = "tiretv":
+ draw (p shifted (0,u/10))--(p shifted(0,-u/10));
+ elseif marque_p = "tireth":
+ draw (p shifted (u/10,0))--(p shifted(-u/10,0));
+ fi;
+ fi;
+enddef;
+
+vardef pointe(text t) =
+ for p_ = t: if (pair p_) or (color p_): MarquePoint(p_); fi endfor;
+enddef;
+
+%------------------------------------------------
+% Points
+%------------------------------------------------
+%JMS
+vardef iso(text t) =
+ save s,n; numeric n;
+ if typetrace="3D":
+ color s; s := (0,0,0) ; n := 0;
+ for p_ = t: s := s + p_; n := n + 1 ; endfor;
+ else:
+ pair s; s := (0,0) ; n := 0;
+ for p_ = t: s := s + p_; n := n + 1 ; endfor;
+ fi;
+ if n>0: (1/n)*s fi
+enddef;
+
+vardef milieu(expr AA,BB)=
+ save $;
+ pair $;
+ if typetrace="mainlevee":
+ $=point((length segment(AA,BB))*(1/2+(-1+uniformdeviate(2))/10)) of segment(AA,BB)
+ else:
+ $=iso(AA,BB)
+ fi;
+ $
+enddef;
+
+vardef CentreCercleI(expr aa,bb,cc)=
+ save $,a,c;
+ pair $;
+ numeric a,c;
+ a=(angle(aa-cc)-angle(bb-cc))/2;
+ c=(angle(cc-bb)-angle(aa-bb))/2;
+ ($-cc) rotated a shifted cc=whatever[aa,cc];
+ ($-bb) rotated c shifted bb=whatever[bb,cc];
+ $
+enddef;
+
+%------------------------------------------------
+% Cercles
+%------------------------------------------------
+%Cercle connaissant le centre A et le rayon q
+vardef cercle(expr aa, q)=fullcircle scaled (2*q) shifted aa
+enddef;
+%Cercle de centre A et passant par B
+vardef cerclepoint(expr aa,bb)=fullcircle scaled (2*abs(aa-bb)) shifted aa
+enddef;
+%Cercle connaissant le diametre [AB]
+vardef cercledia(expr aa,bb)=cercles(iso(aa,bb),bb)
+ %fullcircle scaled (2*abs(1/2[aa,bb]-bb)) shifted (1/2[aa,bb])
+enddef;
+%Cercles complets
+vardef cercles(text t)=
+ save Cer;
+ save n;
+ n:=0;
+ for p_=t:
+ if pair p_:
+ n:=n+1;
+ _t[n]:=p_;
+ fi
+ if numeric p_:
+ rayon:=p_;
+ fi;
+ if color p_:
+ n:=n+1;
+ _T[n]:=p_;
+ fi;
+ endfor;
+ path Cer;
+ if n=1 : Cer=fullcircle scaled (2*rayon) shifted _t[1];
+ elseif n=2 : Cer=fullcircle scaled (2*abs(_t[1]-_t[2])) shifted _t[1];
+ elseif n=3 : Cer=cercles(CentreCercleC(_t[1],_t[2],_t[3]),_t[1]);
+ fi
+ Cer
+enddef;
+
+%Point particulier sur le cercle
+vardef pointarc(expr cercla,angle)=
+ point(arctime((angle/360)*arclength cercla) of cercla) of cercla
+enddef;
+
+%Arc de cercle AB de centre 0(dans le sens direct) : les points A et B doivent etre sur le cercle.
+vardef arccercle(expr aa,bb,oo)=
+ path tempo;
+ path arc;
+ tempo=fullcircle scaled (2*abs(aa-oo)) shifted oo;
+ if (angle(aa-oo)=0) or (angle(aa-oo)>0) :
+ if (angle(bb-oo)=0) or (angle(bb-oo)>0):
+ if (angle(aa-oo)<angle(bb-oo)):
+ arc=subpath(angle(aa-oo)*(length tempo)/360,angle(bb-oo)*(length tempo)/360) of tempo;
+ else:
+ arc=subpath(angle(aa-oo)*(length tempo)/360,(length tempo)+angle(bb-oo)*(length tempo)/360) of tempo;
+ fi;
+ elseif (angle(bb-oo)<0):
+ arc=subpath(angle(aa-oo)*(length tempo)/360,(length tempo)+angle(bb-oo)*(length tempo)/360) of tempo;
+ fi;
+ elseif (angle(aa-oo)<0):
+ if (angle(bb-oo)=0) or (angle(bb-oo)>0):
+ arc=subpath(length tempo+angle(aa-oo)*(length tempo)/360,length tempo+angle(bb-oo)*(length tempo)/360) of tempo;
+ elseif (angle(bb-oo)<0):
+ if (angle(aa-oo)=angle(bb-oo)) or (angle(aa-oo)<angle(bb-oo)):
+ arc=subpath((length tempo)+angle(aa-oo)*(length tempo)/360,(length tempo)+angle(bb-oo)*(length tempo)/360) of tempo;
+ else:
+ arc=subpath((length tempo)+angle(aa-oo)*(length tempo)/360,2*(length tempo)+angle(bb-oo)*(length tempo)/360) of tempo;
+ fi;
+ fi;
+ fi;
+ arc
+enddef;
+
+vardef coupdecompas(expr ab,ac,ad)=arccercle(pointarc(cercles(ab,ac),angle(ac-ab)-ad),pointarc(cercles(ab,ac),angle(ac-ab)+ad),ab)
+enddef;
+
+%------------------------------------------------
+% Procedures de codage
+%------------------------------------------------
+%Codage de l'angle droit de sommet B
+vardef codeperp(expr aa,bb,cc,m)=%normalement m=5
+ save codep;
+ path codep;
+ if typetrace="3D":
+ codep=(Projette(bb)+m*unitvector(Projette(aa)-Projette(bb)))--(Projette(bb)+m*unitvector(Projette(aa)-Projette(bb))+m*unitvector(Projette(cc)-Projette(bb)))--(Projette(bb)+m*unitvector(Projette(cc)-Projette(bb)));
+ else:
+ codep=(bb+m*unitvector(aa-bb))--(bb+m*unitvector(aa-bb)+m*unitvector(cc-bb))--(bb+m*unitvector(cc-bb));
+ fi;
+ codep
+enddef;
+
+%Codage d'un milieu
+vardef codemil(expr AA,BB, n) =%extremites-angle de codage
+ save $,a,b,c,d;
+ path $;
+ pair a,b,c,d;
+ a=1/2[AA,BB];
+ b=(a+marque_s*unitvector(BB-AA))-(a-marque_s*unitvector(BB-AA));
+ c=b rotated n shifted a;
+ d=2[c,a];
+ $=c--d;
+ $
+enddef;
+%Codage de deux segments egaux
+vardef codesegments(expr aa,bb,cc,dd,n)=%extremites des segments(4)-type de codage
+ save $,v,w;
+ picture $;
+ pair AA,BB,CC,DD;
+ $=image(
+ if typetrace="3D":
+ AA=Projette(aa); BB=Projette(bb); CC=Projette(cc); DD=Projette(dd);
+ else:
+ AA=aa;BB=bb;CC=cc;DD=dd;
+ fi;
+ if n=5 :
+ draw fullcircle scaled 0.1cm shifted (1/2[AA,BB]);
+ draw fullcircle scaled 0.1cm shifted (1/2[CC,DD]);
+ elseif n=4 :
+ pair v,w;
+ v=1/2[AA,BB];
+ w=1/2[CC,DD];
+ draw codemil(AA,BB,60);
+ draw codemil(AA,BB,120);
+ draw codemil(CC,DD,60);
+ draw codemil(CC,DD,120);
+ elseif n=3 :
+ draw codemil(AA,BB,60);
+ draw codemil(AA,BB,60) shifted (2*unitvector(AA-BB));
+ draw codemil(AA,BB,60) shifted (2*unitvector(BB-AA));
+ draw codemil(CC,DD,60);
+ draw codemil(CC,DD,60) shifted (2*unitvector(CC-DD));
+ draw codemil(CC,DD,60) shifted (2*unitvector(DD-CC));
+ elseif n=2 :
+ draw codemil(AA,BB,60) shifted unitvector(AA-BB);
+ draw codemil(AA,BB,60) shifted unitvector(BB-AA);
+ draw codemil(CC,DD,60) shifted unitvector(CC-DD);
+ draw codemil(CC,DD,60) shifted unitvector(DD-CC);
+ elseif n=1 :
+ draw codemil(AA,BB,60);
+ draw codemil(CC,DD,60);
+ fi;
+ );
+ $
+ enddef;
+
+%Codage de plusieurs segments de meme longueur
+ vardef Codelongueur(text t)=
+ save result;
+ picture result;
+ pair tt[];
+ k:=0;
+ for p_=t:
+ if pair p_:
+ k:=k+1;
+ tt[k]=p_;
+ elseif color p_:
+ k:=k+1;
+ tt[k]=Projette(p_);
+ elseif numeric p_:
+ co:=p_;
+ fi;
+ endfor;
+ result=image(
+ if co=5:
+ for j=1 upto (k div 2):
+ draw fullcircle scaled 0.1cm shifted (1/2[tt[2*j-1],tt[2*j]]);
+ endfor;
+ elseif co=4:
+ for j=1 upto (k div 2):
+ draw codemil(tt[2*j-1],tt[2*j],60);
+ draw codemil(tt[2*j-1],tt[2*j],120);
+ endfor;
+ elseif co=3:
+ for j=1 upto (k div 2):
+ draw codemil(tt[2*j-1],tt[2*j],60);
+ draw codemil(tt[2*j-1],tt[2*j],60) shifted (2*unitvector(tt[2*j-1]-tt[2*j]));
+ draw codemil(tt[2*j-1],tt[2*j],60) shifted (2*unitvector(tt[2*j]-tt[2*j-1]));
+ endfor;
+ elseif co=2:
+ for j=1 upto (k div 2):
+ draw codemil(tt[2*j-1],tt[2*j],60) shifted unitvector(tt[2*j-1]-tt[2*j]);
+ draw codemil(tt[2*j-1],tt[2*j],60) shifted unitvector(tt[2*j]-tt[2*j-1]);
+ endfor;
+ elseif co=1:
+ for j=1 upto (k div 2):
+ draw codemil(tt[2*j-1],tt[2*j],60);
+ endfor;
+ fi;
+ );
+ result
+enddef;
+
+%Codage de l'angle abc non oriente (mais donne dans le sens direct) n fois avec des mesures differentes
+vardef codeangle@#(expr aa,bb,cc,nb,nom)=
+ save s,p,$;
+ path p;
+ picture $;
+ $=image(
+ trace marqueangle(aa,bb,cc,nb);
+ label.@#(nom,w);
+ );
+ $
+enddef;
+
+vardef Marqueangle(expr aa,bb,mark)=%codage d'un angle forme par les demi-droites aa et bb dans le sens direct avec la marque mark
+ save $;
+ picture $;
+ path conf,rr;
+ pair w,tangent;
+ numeric t,tt;
+ conf=fullcircle scaled (2*marque_a) shifted (aa intersectionpoint bb);
+ numeric te;
+ te=angle((conf intersectionpoint aa)-(aa intersectionpoint bb));
+ rr=(conf intersectionpoint aa){dir(90+angle((conf intersectionpoint aa)-(aa intersectionpoint bb)))}..(conf intersectionpoint bb);
+ t=length rr/2;
+ w=point(t) of rr;
+ tangent=unitvector(direction t of rr);
+ $=image(
+ trace rr;
+ if mark=1:
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,90);
+ elseif mark=2:
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,90) shifted tangent;
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,90) shifted(-tangent);
+ elseif mark=3:
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,90);
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,90) shifted(1.5*tangent);
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,90) shifted(-1.5*tangent);
+ elseif mark=4:
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,45);
+ trace rotation((w shifted(5*tangent))--(w shifted(-5*tangent)),w,-45);
+ fi;
+ );
+ $
+enddef;
+
+vardef marqueangle(expr aa,bb,cc,mark)=%codage d'un angle de sommet bb dans le sens direct par la marque mark.
+ save $;
+ picture $;
+ path conf,rr;
+ pair w,tangent;
+ numeric t;
+ if typetrace="mainlevee":
+ conf=fullcircle scaled (2*marque_a) shifted bb;
+ rr=(conf intersectionpoint demidroite(bb,aa)){dir(90+angle(aa-bb))}..(conf intersectionpoint demidroite(bb,cc));
+ w=rr intersectionpoint droite(bb,CentreCercleI(aa,bb,cc));
+ t=length rr/2;
+ tangent=unitvector(direction t of rr);
+ $=image(
+ trace rr;
+ if mark=1:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90);
+ elseif mark=2:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted tangent;
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(-tangent);
+ elseif mark=3:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90);
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(1.marque_s*tangent);
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(-1.marque_s*tangent);
+ elseif mark=4:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,45);
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,-45);
+ fi;
+ );
+ else:
+ rr=arccercle(bb+marque_a*unitvector(aa-bb),bb+marque_a*unitvector(cc-bb),bb);
+ w=rr intersectionpoint droite(bb,CentreCercleI(aa,bb,cc));
+ t=length rr/2;
+ tangent=unitvector(direction t of rr);
+ $=image(
+ if mark=5:
+ drawarrow rr;
+ else:
+ trace rr;
+ fi;
+ if mark=1:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90);
+ elseif mark=2:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted tangent;
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(-tangent);
+ elseif mark=3:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90);
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(1.marque_s*tangent);
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(-1.marque_s*tangent);
+ elseif mark=4:
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,45);
+ trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,-45);
+ fi;
+ );
+ fi;
+ $
+enddef;
+
+vardef coloreangle(expr aa,bb,cc)=arccercle(bb+marque_a*unitvector(aa-bb),bb+marque_a*unitvector(cc-bb),bb)--bb--cycle
+enddef;
+
+vardef Codeangle(expr aa,bb,cc,nb,nom)=
+ save s,p,$;
+ path p;
+ picture $;
+ $=image(
+ trace marqueangle(aa,bb,cc,nb);
+ label(nom,w shifted(marque_ang*unitvector(w-bb)));
+ );
+ $
+enddef;
+
+vardef marquesegment(expr aa,bb)=
+ save tr;
+ picture tr;
+ if typetrace="3D":
+ tr=image(%
+ typetrace:="normal";
+ trace rotation(segment(Projette(aa)-marque_s*unitvector(Projette(bb)-Projette(aa)),Projette(aa)+marque_s*unitvector(Projette(bb)-Projette(aa))),Projette(aa),90);
+ trace rotation(segment(Projette(bb)-marque_s*unitvector(Projette(bb)-Projette(aa)),Projette(bb)+marque_s*unitvector(Projette(bb)-Projette(aa))),Projette(bb),90);
+ typetrace:="3D";
+ );
+ else:
+ tr=image(%
+ trace rotation(segment(aa-marque_s*unitvector(bb-aa),aa+marque_s*unitvector(bb-aa)),aa,90);
+ trace rotation(segment(bb-marque_s*unitvector(bb-aa),bb+marque_s*unitvector(bb-aa)),bb,90);
+ );
+ fi;
+ tr
+enddef;
+
+vardef marquedemidroite(expr aa,bb)=
+ save tr;
+ picture tr;
+ tr=image(
+ trace rotation(segment(aa-marque_s*unitvector(bb-aa),aa+marque_s*unitvector(bb-aa)),aa,90);
+ );
+ tr
+enddef;
+
+%------------------------------------------------
+% Transformations
+%------------------------------------------------
+vardef projection(expr m,a,b) =
+ save h; pair h;
+ h - m = whatever * (b-a) rotated 90;
+ h = whatever [a,b];
+ if typetrace="mainlevee":
+ h:=h shifted((-2+uniformdeviate(4))*unitvector(a-b))
+ fi;
+ h
+enddef;
+
+vardef homothetie(expr objet,CTR,rapport)=
+ ((objet shifted (-CTR)) scaled rapport) shifted CTR
+enddef;
+
+vardef rotation(expr p,c,a)=
+ p rotatedaround(c,a)
+enddef;
+
+vardef symetrie(expr x)(text t)=
+ save n;
+ n:=0;
+ for p_=t: if pair p_:
+ n:=n+1;
+ _t[n]:=p_;
+ elseif color p_:
+ n:=n+1;
+ _T[n]:=p_;
+ fi;
+ endfor;
+ if n=1:
+ if typetrace="3D":
+ 2[x,_T[1]]
+ else:
+ rotation(x,_t[1],180)
+ fi
+ elseif n=2:
+ x reflectedabout(_t[1],_t[2])
+ elseif n=3:%Par rapport a un plan
+ 2[x,ProjectionsurPlan(x,_T[1],_T[2],_T[3])]
+ fi
+enddef;
+
+%------------------------------------------------
+% Droites
+%------------------------------------------------
+vardef segment(expr aa,bb)=
+ save Seg;
+ path Seg;
+ if typetrace="mainlevee":
+ Seg=aa{dir(angle(bb-aa)+5)}..bb{dir(angle(bb-aa)+5)}
+ elseif typetrace="3D":
+ Seg=Projette(aa)--Projette(bb)
+ else:
+ Seg=aa--bb
+ fi;
+ Seg
+enddef;
+
+vardef droite(expr AA,BB)=
+ save Dro;
+ path Dro;
+ if typetrace="mainlevee":
+ Dro=(_tfig/abs(AA-BB))[BB,AA]{dir(angle(BB-AA)+10)}..segment(AA,BB)..(_tfig/abs(AA-BB))[AA,BB]{dir(angle(BB-AA)+10)}
+ elseif typetrace="3D":
+ Dro=(_tfig/abs(Projette(AA)-Projette(BB)))[Projette(BB),Projette(AA)]--(_tfig/abs(Projette(AA)-Projette(BB)))[Projette(AA),Projette(BB)]
+ else:
+ Dro=(_tfig/abs(AA-BB))[BB,AA]--(_tfig/abs(AA-BB))[AA,BB]
+ fi;
+ Dro
+enddef;
+vardef demidroite(expr AA,BB)=
+ save Dem;
+ path Dem;
+ if typetrace="mainlevee":
+ Dem=segment(AA,BB)..(_tfig/abs(AA-BB))[AA,BB]{dir(angle(BB-AA)+10)}
+ elseif typetrace="3D":
+ Dem=Projette(AA)--(_tfig/abs(Projette(AA)-Projette(BB)))[Projette(AA),Projette(BB)]
+ else:
+ Dem=AA--(_tfig/abs(AA-BB))[AA,BB]
+ fi;
+ Dem
+enddef;
+
+vardef bissectrice(expr AA,BB,CC)=
+ save $;
+ path $;
+ if typetrace="mainlevee":
+ $=rotation(demidroite(BB,CentreCercleI(AA,BB,CC)),BB,-5+uniformdeviate(10))
+ else:
+ $=demidroite(BB,CentreCercleI(AA,BB,CC))
+ fi;
+ $
+enddef;
+
+vardef mediatrice(expr AA,BB)=droite(iso(AA,BB),rotation(BB,iso(AA,BB),90))
+enddef;
+%main levee : passer par la perpendiculaire passant par le milieu.
+
+vardef perpendiculaire(expr AA,BB,II)=droite(iso(AA,BB),rotation(BB,iso(AA,BB),90)) shifted (II-iso(AA,BB))
+enddef;
+
+vardef parallele(expr AA,BB,II)=droite(AA,BB) shifted (II-(projection(II,AA,BB)))
+enddef;
+
+%%%%%%%%%%
+%Polygone/Ligne brisée
+%%%%%%%%%
+vardef polygone(text t)=
+ pair aaa[];
+ j:=0;
+ for p_=t: if pair p_:
+ j:=j+1;
+ aaa[j]=p_;
+ elseif color p_:
+ j:=j+1;
+ aaa[j]=Projette(p_);
+ fi;
+ endfor;
+ aaa[j+1]:=aaa[1];
+ save $;
+ path $;
+ $=aaa1--
+ for k=2 upto j:
+ aaa[k]--
+ endfor
+ cycle;
+ $
+enddef;
+
+vardef chemin(text t)=
+ pair aaa[];
+ j:=0;
+ for p_=t: if pair p_:
+ j:=j+1;
+ aaa[j]=p_;
+ elseif color p_:
+ j:=j+1;
+ aaa[j]=Projette(p_);
+ fi;
+ endfor;
+ if typetrace="mainlevee":
+ save $;
+ picture $;
+ $=image(
+ for k=1 upto (j-1):
+ trace segment(aaa[k],aaa[k+1]);
+ endfor;
+ );
+ else:
+ save $;
+ path $;
+ $=aaa1
+ for k=2 upto j:
+ --aaa[k]
+ endfor;
+ fi;
+ $
+enddef;
+
+%------------------------------------------------
+%Sucres
+%------------------------------------------------
+vardef hachurage(expr chemin, angle, ecart, trace)=
+ save $;
+ picture $;
+ path support;
+ support=((u*(-37,0))--(u*(37,0))) rotated angle;
+ if trace=1:
+ drawoptions(dashed evenly);
+ elseif trace=2:
+ drawoptions(dashed dashpattern(on12bp off6bp on3bp off6bp));
+ elseif trace=3:
+ drawoptions(dashed withdots);
+ fi;
+ $ = image(
+ for j=-200 upto 200:
+ if ((support shifted (ecart*j*(u,0))) intersectiontimes chemin)<>(-1,-1):
+ draw support shifted (ecart*j*(u,0));
+ fi
+ endfor;
+ );
+ clip $ to chemin;
+ drawoptions();
+ $
+enddef;
+%fleche pour coter un segment [AB] (Jacques Marot)
+vardef cotation(expr aa,bb,ecart,decalage,cote)=
+ pair m[] ;
+ save $;
+ picture $;
+ m3=unitvector(bb-aa) rotated 90;
+ m1=aa+ecart*m3;
+ m2=bb+ecart*m3;
+ $=image(
+ pickup pencircle scaled 0.2bp;
+ drawdblarrow m1--m2 ;
+ draw aa--m1 dashed evenly;
+ draw bb--m2 dashed evenly;
+ label(cote rotated angle(m2-m1),(m1+m2)/2+decalage*m3);
+ );
+ $
+enddef;
+
+vardef appelation(expr aa,bb,decalage,cote)=
+ save $;
+ pair m[],AA,BB;
+ if color aa:
+ AA=Projette(aa);
+ else:
+ AA=aa;
+ fi;
+ if color bb:
+ BB=Projette(bb);
+ else:
+ BB=bb;
+ fi;
+ m3=unitvector(BB-AA) rotated 90;
+ picture $;
+ $=image(
+ label(cote rotated angle(BB-AA),(BB+AA)/2+decalage*m3);
+ );
+ $
+enddef;
+
+vardef cotationmil(expr aa,bb,ecart,decalage,cote)= %Christophe
+ pair m[],AA,BB;
+ save $;
+ picture cot;
+ if color aa:
+ AA=Projette(aa)
+ else:
+ AA=aa
+ fi;
+ if color bb:
+ BB=Projette(bb)
+ else:
+ BB=bb
+ fi;
+ m3=unitvector(BB-AA) rotated 90;
+ m1=AA+ecart*m3;
+ m2=BB+ecart*m3;
+ cot=image(
+ pickup pencircle scaled 0.2bp;
+ drawarrow (1/2[m1,m2]+decalage*unitvector(m1-m2))--m1;
+ drawarrow (1/2[m1,m2]-decalage*unitvector(m1-m2))--m2;
+ draw AA--m1 dashed evenly;
+ draw BB--m2 dashed evenly;
+ label(cote rotated angle(m2-m1),(m1+m2)/2);
+ );
+ cot
+enddef;
+
+%%%%%%%%%%
+%francisation
+%%%%%%%%%
+def trace expr o =
+ if path o: draw o else: draw o fi
+enddef;
+def remplis expr o =
+ if path o: fill o else: fill o fi
+enddef;
+
+%3D - basé sur donymodule
+color Sommet[];
+
+color Co[];
+Co0=jaune;
+Co1=violet;
+Co2=orange;
+Co3=ciel;
+Co4=vert;
+Co5=bleu;
+Co6=rouge;
+
+string pointilles;
+
+string typerepre;
+typerepre:="proj";
+
+%generalite
+vardef Projette(expr X)=
+ pair $;
+ Xobs := -redpart(X)*Aux1 + greenpart(X)*Aux3;
+ Yobs := -redpart(X)*Aux5 - greenpart(X)*Aux6 + bluepart(X)*Aux4;
+ if typerepre="proj":
+ Zobs := -redpart(X)*Aux7 - greenpart(X)*Aux8 - bluepart(X)*Aux2 + Rho;
+ XProj := DE*Xobs/Zobs;
+ YProj := DE*Yobs/Zobs;
+ elseif typerepre="persp":
+ XProj := DE*Xobs;
+ YProj := DE*Yobs;
+ fi;
+ $=(XProj,YProj);
+ $
+enddef;
+
+vardef Initialisation(expr r,t,p,d)=
+ Rho:=r;
+ Theta:=t;
+ Phi:=p;
+ DE:=d;
+ Aux1:=sind(Theta);
+ Aux2:=sind(Phi);
+ Aux3:=cosd(Theta);
+ Aux4:=cosd(Phi);
+ Aux5:=Aux3*Aux2;
+ Aux6:=Aux1*Aux2;
+ Aux7:=Aux3*Aux4;
+ Aux8:=Aux1*Aux4;
+ pointilles:="oui";
+enddef;
+
+%vues cachees
+
+vardef Face(text t)=
+ j:=0;
+ for p_=t :
+ if numeric p_:
+ a[j]:=p_;
+ j:=j+1;
+ fi;
+ endfor;
+ for k=1 upto (j-1):
+ Fc[a0*100+(k-1)]:=a[k];
+ endfor;
+enddef;
+
+vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2)
+enddef;
+
+vardef Vision(expr num)=
+ save bb;
+ color bb;
+ bb=(redpart(Oeil-Sommet[num]),greenpart(Oeil-Sommet[num]),bluepart(Oeil-Sommet[num]));
+ bb
+enddef;
+
+vardef Normal(expr vecun,vecde,vectr)=
+ save aa;
+ color aa;
+ P1:=redpart(vecde-vecun);
+ P2:=greenpart(vecde-vecun);
+ P3:=bluepart(vecde-vecun);
+ Q1:=redpart(vectr-vecun);
+ Q2:=greenpart(vectr-vecun);
+ Q3:=bluepart(vectr-vecun);
+ aa=(P2*Q3-Q2*P3,P3*Q1-Q3*P1,P1*Q2-Q1*P2);
+ aa
+enddef;
+
+vardef ProduitScalaire(expr wec,mor)=
+ redpart(wec)*redpart(mor)+greenpart(wec)*greenpart(mor)+bluepart(wec)*bluepart(mor)
+enddef;
+
+vardef Distance(expr aa,bb)=%Entre deux points
+ sqrt((redpart(bb)-redpart(aa))*(redpart(bb)-redpart(aa))+(greenpart(bb)-greenpart(aa))*(greenpart(bb)-greenpart(aa))+(bluepart(bb)-bluepart(aa))*(bluepart(bb)-bluepart(aa)))
+enddef;
+
+vardef Module(expr aa)=%module d'un vecteur
+sqrt((redpart(aa))**2+(greenpart(aa))**2+(bluepart(aa)**2))
+enddef;
+
+color CoulTrace;
+CoulTrace=black;
+
+vardef DessineObjet=
+ for l=1 upto NF:
+ color cc,dd;
+ dd=Vision(Fc[l*100+1]);
+ cc=Normal(Sommet[Fc[l*100+1]],Sommet[Fc[l*100+2]],Sommet[Fc[l*100+3]]);
+ if (ProduitScalaire(dd,cc)<0):
+ if pointilles="oui":
+ drawoptions(dashed dashpattern(on3pt off6pt) withcolor CoulTrace);
+ trace for k=1 upto Fc[100*l]:
+ Projette(Sommet[Fc[100*l+k]])--
+ endfor
+ cycle;
+ fi;
+ else:
+ trace for k=1 upto Fc[100*l]:
+ Projette(Sommet[Fc[100*l+k]])--
+ endfor
+ cycle withcolor CoulTrace;
+ fi;
+ drawoptions();
+ endfor;
+enddef;
+
+%%Transformations
+
+%Translations
+
+vardef TranslateSommets(expr v)=
+ for k=1 upto NbS:
+ Sommet[k]:=Sommet[k]+v;
+ endfor;
+enddef;
+
+vardef SymetriePlanZ(expr vv)=
+ for k=1 upto NbS:
+ w:=vv-bluepart(Sommet[k]);
+ Sommet[k]:=(redpart(Sommet[k]),greenpart(Sommet[k]),w);
+ endfor;
+enddef;
+
+vardef IntersectionDroite(expr aa,bb,cc,dd)=
+ save tt;
+ color tt;
+ tt=whatever[aa,bb];
+ tt=whatever[cc,dd];
+ tt
+enddef;
+
+%%denis Roegel----------
+vardef Intersectionplandroite(expr aa,bb,cc,dd,ee)=
+ save int;
+ boolean int;
+ color gg,caaa[];
+ caaa3=Normal(aa,bb,cc)/Module(Normal(aa,bb,cc));
+ caaa1=aa-dd;
+ caaa2=ee-dd;
+ if ProduitScalaire(caaa2,caaa3)<>0:
+ caaa4=caaa2*(ProduitScalaire(caaa1,caaa3)/ProduitScalaire(caaa2,caaa3));
+ int:=true;
+ else: % the line is parallel to the plane
+ int:=false;
+ fi;
+ int
+enddef;
+
+vardef IntersectionPlanDroite(expr aa,bb,cc,dd,ee)=%plan (aa,bb,cc) droite(dd,ee)
+ if Intersectionplandroite(aa,bb,cc,dd,ee):
+ gg=dd+caaa4;
+ fi;
+ gg
+enddef;
+
+vardef ProjectionsurPlan(expr aa,bb,cc,dd)=%Projection du point aa sur le plan (bbccdd)
+ save di,vc;
+ color va,vb,vc;
+ va=Normal(bb,cc,dd)/Module(Normal(bb,cc,dd));
+ vb=aa-bb;
+ di=-ProduitScalaire(vb,va);
+ va:=di*va;
+ vb:=vb+va;
+ vc=bb+vb;
+ vc
+enddef;
+
+vardef Intersectionplanplan(expr AA,BB,CC,DD,EE,FF)=%besoin pour la suite
+ color trial[];
+ path INTer;
+ if Intersectionplandroite(DD,EE,FF,AA,BB):
+ trial1=IntersectionPlanDroite(DD,EE,FF,AA,BB);
+ else:% there is no intersection or the intersection is the line
+ trial1=IntersectionPlanDroite(DD,EE,FF,AA,1/2[BB,CC]);
+ fi;
+ if Intersectionplandroite(DD,EE,FF,AA,CC):
+ trial2=IntersectionPlanDroite(DD,EE,FF,AA,CC);
+ else:% there is no intersection or the intersection is the line
+ trial2=IntersectionPlanDroite(DD,EE,FF,CC,1/2[BB,AA]);%modif de cp
+ fi;
+ %INTer=segment(10[trial1,trial2],10[trial2,trial1]);
+ INTer=droite(trial1,trial2);
+ INTer
+enddef;
+
+vardef IntersectionPlanPlan(expr aa,bb,cc,dd,ee,ff)=
+ %a verifier
+ save da,db,dc,int,INTER;
+ boolean int;
+ path INTER;
+ da=Module(aa-ProjectionsurPlan(aa,dd,ee,ff));
+ %show da;
+ db=Module(bb-ProjectionsurPlan(bb,dd,ee,ff));
+ %show db;
+ dc=Module(cc-ProjectionsurPlan(cc,dd,ee,ff));
+ %show dc;
+ if (da=db) and (db=dc): % the two planes are parallel
+ int:=false;
+ else:
+ int:=true;
+ if (da=db):
+ INTER=droite(aa,bb);
+ elseif (db=dc):
+ INTER=droite(bb,cc);
+ elseif (dc=da):
+ INTER=droite(cc,aa);
+ elseif (da>=db) and (da>=dc):
+ INTER=Intersectionplanplan(aa,bb,cc,dd,ee,ff);
+ elseif (db>=da) and (db>=dc):
+ INTER=Intersectionplanplan(bb,cc,aa,dd,ee,ff);
+ elseif (dc>=da) and (dc>=db):
+ INTER=Intersectionplanplan(cc,aa,bb,dd,ee,ff);
+ fi;
+ fi;
+ INTER
+enddef;
+%%---------------------
+
+%Cube
+numeric arete;
+arete=1;
+
+vardef Cube(text t)=
+ picture cub;
+ cub=image(
+ NbS:=8;
+ Sommet1:=(arete,0,0);
+ Sommet2:=(arete,arete,0);
+ Sommet3:=(0,arete,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,arete);
+ Sommet6:=(arete,0,arete);
+ Sommet7:=(arete,arete,arete);
+ Sommet8:=(0,arete,arete);
+%%Faces
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3;
+ Fc[300]:=4;Fc[301]:=1;Fc[302]:=6;Fc[303]:=5;Fc[304]:=4;
+ Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8;
+ Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7;
+ Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6;
+ DessineObjet;
+ k:=1;
+ for p_=t:
+ if color p_:
+ p_=Sommet[k];
+ k:=k+1;
+ fi
+ endfor;
+ );
+cub
+enddef;
+
+vardef cube=
+ typetrace:="3D";
+ typerepre:="persp";
+ Initialisation(1500,30,20,100);
+ picture cub;
+ cub=image(
+ NbS:=8;
+ Sommet1:=(arete,0,0);
+ Sommet2:=(arete,arete,0);
+ Sommet3:=(0,arete,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,arete);
+ Sommet6:=(arete,0,arete);
+ Sommet7:=(arete,arete,arete);
+ Sommet8:=(0,arete,arete);
+%%Faces
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3;
+ Fc[300]:=4;Fc[301]:=1;Fc[302]:=6;Fc[303]:=5;Fc[304]:=4;
+ Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8;
+ Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7;
+ Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6;
+ DessineObjet;
+ );
+ cub
+enddef;
+
+%Cube
+vardef Paveh(text t)=
+ picture paveh;
+ paveh=image(
+ NbS:=8;
+ Sommet1:=(0.75,0,0);
+ Sommet2:=(0.75,1.5,0);
+ Sommet3:=(0,1.5,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,1);
+ Sommet6:=(0.75,0,1);
+ Sommet7:=(0.75,1.5,1);
+ Sommet8:=(0,1.5,1);
+%%Faces
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3;
+ Fc[300]:=4;Fc[301]:=1;Fc[302]:=6;Fc[303]:=5;Fc[304]:=4;
+ Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8;
+ Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7;
+ Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6;
+ DessineObjet;
+ k:=1;
+ for p_=t:
+ if color p_:
+ p_=Sommet[k];
+ k:=k+1;
+ fi
+ endfor;
+ );
+paveh
+enddef;
+
+%Cube
+vardef Pavev(text t)=
+ picture pavev;
+ pavev=image(
+ NbS:=8;
+ Sommet1:=(1,0,0);
+ Sommet2:=(1,0.75,0);
+ Sommet3:=(0,0.75,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,1.5);
+ Sommet6:=(1,0,1.5);
+ Sommet7:=(1,0.75,1.5);
+ Sommet8:=(0,0.75,1.5);
+%%Faces
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3;
+ Fc[300]:=4;Fc[301]:=1;Fc[302]:=6;Fc[303]:=5;Fc[304]:=4;
+ Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8;
+ Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7;
+ Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6;
+ DessineObjet;
+ k:=1;
+ for p_=t:
+ if color p_:
+ p_=Sommet[k];
+ k:=k+1;
+ fi
+ endfor;
+ );
+pavev
+enddef;
+
+vardef Pave(text t)(expr aa,bb,cc)=
+ picture pave;
+ pave=image(
+ NbS:=8;
+ Sommet1:=(aa,0,0);
+ Sommet2:=(aa,bb,0);
+ Sommet3:=(0,bb,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,cc);
+ Sommet6:=(aa,0,cc);
+ Sommet7:=(aa,bb,cc);
+ Sommet8:=(0,bb,cc);
+%%Faces
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=4;Fc[102]:=3;Fc[103]:=2;Fc[104]:=1;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3;
+ Fc[300]:=4;Fc[301]:=4;Fc[302]:=1;Fc[303]:=6;Fc[304]:=5;
+ Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8;
+ Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7;
+ Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6;
+ DessineObjet;
+ k:=1;
+ for p_=t:
+ if color p_:
+ p_=Sommet[k];
+ k:=k+1;
+ fi
+ endfor;
+ );
+pave
+enddef;
+
+vardef pave(expr aa,bb,cc)=
+ typetrace:="3D";
+ typerepre:="persp";
+ Initialisation(1500,30,20,100);
+ picture PAVE;
+ PAVE=image(
+ NbS:=8;
+ Sommet1:=(aa,0,0);
+ Sommet2:=(aa,bb,0);
+ Sommet3:=(0,bb,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,cc);
+ Sommet6:=(aa,0,cc);
+ Sommet7:=(aa,bb,cc);
+ Sommet8:=(0,bb,cc);
+%%Faces
+ NF:=6;
+ Fc[100]:=4;Fc[101]:=4;Fc[102]:=3;Fc[103]:=2;Fc[104]:=1;
+ Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3;
+ Fc[300]:=4;Fc[301]:=4;Fc[302]:=1;Fc[303]:=6;Fc[304]:=5;
+ Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8;
+ Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7;
+ Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6;
+ DessineObjet;
+ );
+ PAVE
+enddef;
+
+vardef Tetraedrer(text t)=
+ picture tetrar;
+ tetrar=image(
+ %Sommets
+ NbS:=4;
+ Sommet1:=(0,0,1);
+ Sommet2:=(-0.4714045,-0.8164965,-1/3);
+ Sommet3:=(0.942809,0,-1/3);
+ Sommet4:=(-0.4714045,0.8164965,-1/3);
+ %Faces
+ NF:=4;
+ Fc[100]:=3;Fc[101]:=1;Fc[102]:=2;Fc[103]:=3;
+ Fc[200]:=3;Fc[201]:=1;Fc[202]:=3;Fc[203]:=4;
+ Fc[300]:=3;Fc[301]:=1;Fc[302]:=4;Fc[303]:=2;
+ Fc[400]:=3;Fc[401]:=2;Fc[402]:=4;Fc[403]:=3;
+ DessineObjet;
+ k:=1;
+ for p_=t:
+ if color p_:
+ p_=Sommet[k];
+ k:=k+1;
+ fi
+ endfor;
+ );
+ tetrar
+enddef;
+
+endinput;
diff --git a/macros/latex/contrib/profcollege/metapost/PfC-LaTeX.mp b/macros/latex/contrib/profcollege/metapost/PfC-LaTeX.mp
new file mode 100644
index 0000000000..daa206a603
--- /dev/null
+++ b/macros/latex/contrib/profcollege/metapost/PfC-LaTeX.mp
@@ -0,0 +1,20 @@
+%Author : Christophe Poulain
+%Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+vardef LATEX primary s =
+ write "verbatimtex" to "mptextmp.mp";
+ write "%&latex" to "mptextmp.mp";
+ write "\documentclass[]{article}" to "mptextmp.mp";
+ write "\usepackage[utf8]{inputenc}" to "mptextmp.mp";
+ write "\usepackage[T1]{fontenc}" to "mptextmp.mp";
+ write "\usepackage{fourier}" to "mptextmp.mp";
+ write "\usepackage{mathtools,amssymb}" to "mptextmp.mp";
+ write "\usepackage{siunitx}" to "mptextmp.mp";
+ write "\sisetup{locale=FR,detect-all,output-decimal-marker={,},group-four-digits}" to "mptextmp.mp";
+ write "\usepackage[french]{babel}" to "mptextmp.mp";
+ write "\begin{document}" to "mptextmp.mp";
+ write "etex" to "mptextmp.mp";
+ write "btex "&s&" etex" to "mptextmp.mp";
+ write EOF to "mptextmp.mp";
+ scantokens "input mptextmp"
+enddef;
diff --git a/macros/latex/contrib/profcollege/metapost/PfC-Svgnames.mp b/macros/latex/contrib/profcollege/metapost/PfC-Svgnames.mp
new file mode 100644
index 0000000000..3af1336dc3
--- /dev/null
+++ b/macros/latex/contrib/profcollege/metapost/PfC-Svgnames.mp
@@ -0,0 +1,156 @@
+%Author : Christophe Poulain
+%Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+%D'après /usr/local/texlive/2020/texmf-dist/tex/latex/xcolor/svgnam.def
+color AliceBlue; AliceBlue = (.94,.972,1);
+color AntiqueWhite; AntiqueWhite = (.98,.92,.844);
+color Aqua; Aqua = (0,1,1);
+color Aquamarine; Aquamarine = (.498,1,.83);
+color Azure; Azure = (.94,1,1);
+color Beige; Beige = (.96,.96,.864);
+color Bisque; Bisque = (1,.894,.77);
+color Black; Black = (0,0,0);
+color BlanchedAlmond; BlanchedAlmond = (1,.92,.804);
+color Blue; Blue = (0,0,1);
+color BlueViolet; BlueViolet = (.54,.17,.888);
+color Brown; Brown = (.648,.165,.165);
+color BurlyWood; BurlyWood = (.87,.72,.53);
+color CadetBlue; CadetBlue = (.372,.62,.628);
+color Chartreuse; Chartreuse = (.498,1,0);
+color Chocolate; Chocolate = (.824,.41,.116);
+color Coral; Coral = (1,.498,.312);
+color CornflowerBlue; CornflowerBlue = (.392,.585,.93);
+color Cornsilk; Cornsilk = (1,.972,.864);
+color Crimson; Crimson = (.864,.08,.235);
+color Cyan; Cyan = (0,1,1);
+color DarkBlue; DarkBlue = (0,0,.545);
+color DarkCyan; DarkCyan = (0,.545,.545);
+color DarkGoldenrod; DarkGoldenrod = (.72,.525,.044);
+color DarkGray; DarkGray = (.664,.664,.664);
+color DarkGreen; DarkGreen = (0,.392,0);
+color DarkGrey; DarkGrey = (.664,.664,.664);
+color DarkKhaki; DarkKhaki = (.74,.716,.42);
+color DarkMagenta; DarkMagenta = (.545,0,.545);
+color DarkOliveGreen; DarkOliveGreen = (.332,.42,.185);
+color DarkOrange; DarkOrange = (1,.55,0);
+color DarkOrchid; DarkOrchid = (.6,.196,.8);
+color DarkRed; DarkRed = (.545,0,0);
+color DarkSalmon; DarkSalmon = (.912,.59,.48);
+color DarkSeaGreen; DarkSeaGreen = (.56,.736,.56);
+color DarkSlateBlue; DarkSlateBlue = (.284,.24,.545);
+color DarkSlateGray; DarkSlateGray = (.185,.31,.31);
+color DarkSlateGrey; DarkSlateGrey = (.185,.31,.31);
+color DarkTurquoise; DarkTurquoise = (0,.808,.82);
+color DarkViolet; DarkViolet = (.58,0,.828);
+color DeepPink; DeepPink = (1,.08,.576);
+color DeepSkyBlue; DeepSkyBlue = (0,.75,1);
+color DimGray; DimGray = (.41,.41,.41);
+color DimGrey; DimGrey = (.41,.41,.41);
+color DodgerBlue; DodgerBlue = (.116,.565,1);
+color FireBrick; FireBrick = (.698,.132,.132);
+color FloralWhite; FloralWhite = (1,.98,.94);
+color ForestGreen; ForestGreen = (.132,.545,.132);
+color Fuchsia; Fuchsia = (1,0,1);
+color Gainsboro; Gainsboro = (.864,.864,.864);
+color GhostWhite; GhostWhite = (.972,.972,1);
+color Gold; Gold = (1,.844,0);
+color Goldenrod; Goldenrod = (.855,.648,.125);
+color Gray; Gray = (.5,.5,.5);
+color Green; Green = (0,.5,0);
+color GreenYellow; GreenYellow = (.68,1,.185);
+color Grey; Grey = (.5,.5,.5);
+color Honeydew; Honeydew = (.94,1,.94);
+color HotPink; HotPink = (1,.41,.705);
+color IndianRed; IndianRed = (.804,.36,.36);
+color Indigo; Indigo = (.294,0,.51);
+color Ivory; Ivory = (1,1,.94);
+color Khaki; Khaki = (.94,.9,.55);
+color Lavender; Lavender = (.9,.9,.98);
+color LavenderBlush; LavenderBlush = (1,.94,.96);
+color LawnGreen; LawnGreen = (.488,.99,0);
+color LemonChiffon; LemonChiffon = (1,.98,.804);
+color LightBlue; LightBlue = (.68,.848,.9);
+color LightCoral; LightCoral = (.94,.5,.5);
+color LightCyan; LightCyan = (.88,1,1);
+color LightGoldenrod; LightGoldenrod = (.933,.867,.51);
+color LightGoldenrodYellow; LightGoldenrodYellow = (.98,.98,.824);
+color LightGray; LightGray = (.828,.828,.828);
+color LightGreen; LightGreen = (.565,.932,.565);
+color LightGrey; LightGrey = (.828,.828,.828);
+color LightPink; LightPink = (1,.712,.756);
+color LightSalmon; LightSalmon = (1,.628,.48);
+color LightSeaGreen; LightSeaGreen = (.125,.698,.668);
+color LightSkyBlue; LightSkyBlue = (.53,.808,.98);
+color LightSlateBlue; LightSlateBlue = (.518,.44,1);
+color LightSlateGray; LightSlateGray = (.468,.532,.6);
+color LightSlateGrey; LightSlateGrey = (.468,.532,.6);
+color LightSteelBlue; LightSteelBlue = (.69,.77,.87);
+color LightYellow; LightYellow = (1,1,.88);
+color Lime; Lime = (0,1,0);
+color LimeGreen; LimeGreen = (.196,.804,.196);
+color Linen; Linen = (.98,.94,.9);
+color Magenta; Magenta = (1,0,1);
+color Maroon; Maroon = (.5,0,0);
+color MediumAquamarine; MediumAquamarine = (.4,.804,.668);
+color MediumBlue; MediumBlue = (0,0,.804);
+color MediumOrchid; MediumOrchid = (.73,.332,.828);
+color MediumPurple; MediumPurple = (.576,.44,.86);
+color MediumSeaGreen; MediumSeaGreen = (.235,.7,.444);
+color MediumSlateBlue; MediumSlateBlue = (.484,.408,.932);
+color MediumSpringGreen; MediumSpringGreen = (0,.98,.604);
+color MediumTurquoise; MediumTurquoise = (.284,.82,.8);
+color MediumVioletRed; MediumVioletRed = (.78,.084,.52);
+color MidnightBlue; MidnightBlue = (.098,.098,.44);
+color MintCream; MintCream = (.96,1,.98);
+color MistyRose; MistyRose = (1,.894,.884);
+color Moccasin; Moccasin = (1,.894,.71);
+color NavajoWhite; NavajoWhite = (1,.87,.68);
+color Navy; Navy = (0,0,.5);
+color NavyBlue; NavyBlue = (0,0,.5);
+color OldLace; OldLace = (.992,.96,.9);
+color Olive; Olive = (.5,.5,0);
+color OliveDrab; OliveDrab = (.42,.556,.136);
+color Orange; Orange = (1,.648,0);
+color OrangeRed; OrangeRed = (1,.27,0);
+color Orchid; Orchid = (.855,.44,.84);
+color PaleGoldenrod; PaleGoldenrod = (.932,.91,.668);
+color PaleGreen; PaleGreen = (.596,.985,.596);
+color PaleTurquoise; PaleTurquoise = (.688,.932,.932);
+color PaleVioletRed; PaleVioletRed = (.86,.44,.576);
+color PapayaWhip; PapayaWhip = (1,.936,.835);
+color PeachPuff; PeachPuff = (1,.855,.725);
+color Peru; Peru = (.804,.52,.248);
+color Pink; Pink = (1,.752,.796);
+color Plum; Plum = (.868,.628,.868);
+color PowderBlue; PowderBlue = (.69,.88,.9);
+color Purple; Purple = (.5,0,.5);
+color Red; Red = (1,0,0);
+color RosyBrown; RosyBrown = (.736,.56,.56);
+color RoyalBlue; RoyalBlue = (.255,.41,.884);
+color SaddleBrown; SaddleBrown = (.545,.27,.075);
+color Salmon; Salmon = (.98,.5,.448);
+color SandyBrown; SandyBrown = (.956,.644,.376);
+color SeaGreen; SeaGreen = (.18,.545,.34);
+color Seashell; Seashell = (1,.96,.932);
+color Sienna; Sienna = (.628,.32,.176);
+color Silver; Silver = (.752,.752,.752);
+color SkyBlue; SkyBlue = (.53,.808,.92);
+color SlateBlue; SlateBlue = (.415,.352,.804);
+color SlateGray; SlateGray = (.44,.5,.565);
+color SlateGrey; SlateGrey = (.44,.5,.565);
+color Snow; Snow = (1,.98,.98);
+color SpringGreen; SpringGreen = (0,1,.498);
+color SteelBlue; SteelBlue = (.275,.51,.705);
+color Tan; Tan = (.824,.705,.55);
+color Teal; Teal = (0,.5,.5);
+color Thistle; Thistle = (.848,.75,.848);
+color Tomato; Tomato = (1,.39,.28);
+color Turquoise; Turquoise = (.25,.88,.815);
+color Violet; Violet = (.932,.51,.932);
+color VioletRed; VioletRed = (.816,.125,.565);
+color Wheat; Wheat = (.96,.87,.7);
+color White; White = (1,1,1);
+color WhiteSmoke; WhiteSmoke = (.96,.96,.96);
+color Yellow; Yellow = (1,1,0);
+color YellowGreen; YellowGreen = (.604,.804,.196);
+endinput