summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin9028642 -> 9138986 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex177
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex7
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex2
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCFactorisation.tex236
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCJeuRangement.tex104
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex6
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCPythagore.tex119
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCPythagoreold.tex516
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex10
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCReperage.tex215
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex1
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex18
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex37
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCStatistiques.tex9
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCTrio.tex273
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty8
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp2
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfCObjets.mp285
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfCSolid.mp27
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdfbin815001 -> 848758 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex2805
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdfbin60451 -> 61451 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex2
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdfbin44183 -> 44184 bytes
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee.sty3178
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex149
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex386
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex311
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex139
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex525
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-listings.tex146
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex16
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex748
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-recreat.tex246
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex198
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-suites.tex213
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-trigo.tex760
38 files changed, 7201 insertions, 4673 deletions
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
index bdf8e69752..0d70c7ff9d 100644
--- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex b/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex
new file mode 100644
index 0000000000..94e3a8d120
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex
@@ -0,0 +1,177 @@
+\setKVdefault[CalculsFractions]{Couleur=Crimson}
+
+\NewDocumentCommand\tofrac{m}{%
+ \IfDecimal{#1}{#1}{%
+ \StrBefore{#1}{/}[\PfCnum]%
+ \StrBehind{#1}{/}[\PfCden]%
+ \frac{\PfCnum}{\PfCden}%
+ }%
+}%
+
+\NewDocumentCommand\AddFraction{soommo}{%
+ \useKVdefault[CalculsFractions]%
+ \setKV[CalculsFractions]{#2}%
+ \IfBooleanTF{#1}{%
+ \xdef\PfCFractionOp{-}%
+ }{%
+ \xdef\PfCFractionOp{+}%
+ }%
+ \IfDecimal{#4}{%
+ \xdef\PfCNumA{#4}%
+ \xdef\PfCNumB{1}%
+ }{%
+ \StrCut{#4}{/}\PfCNumA\PfCNumB%
+ }%
+ \IfDecimal{#5}{%
+ \xdef\PfCNumC{#5}%
+ \xdef\PfCNumD{1}%
+ }{%
+ \StrCut{#5}{/}\PfCNumC\PfCNumD%
+ }
+ \xdef\PfCAddFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeFractions{\PfCAddFoo}%
+ \reademptyitems
+ \setsepchar{,}%
+ % Partie calculs
+ \PGCD{\ListeFractions[1,2]}{\ListeFractions[2,2]}%
+ \xdef\PfCPremierMul{\fpeval{\ListeFractions[2,2]/\the\pgcd}}%
+ \xdef\PfCDeuxiemeMul{\fpeval{\ListeFractions[1,2]/\the\pgcd}}%
+ \xdef\PfCAddNumFin{\fpeval{(\ListeFractions[1,1])*(\PfCPremierMul)\PfCFractionOp(\ListeFractions[2,1])*(\PfCDeuxiemeMul)}}%
+ \xdef\PfCAddDenoFin{\fpeval{(\ListeFractions[1,2])*(\PfCPremierMul)}}%
+ \PGCD{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\xdef\PfCAddPgcd{\the\pgcd}%
+ \xdef\PfCAddNumSimp{\fpeval{\PfCAddNumFin/\PfCAddPgcd}}%
+ \xdef\PfCAddDenoSimp{\fpeval{\PfCAddDenoFin/\PfCAddPgcd}}%
+ \xdef\PfCAddSumSimp{\PfCAddNumSimp/\PfCAddDenoSimp}%
+ \IfValueT{#6}{\xdef#6{\PfCAddSumSimp}}%
+ % Partie affichage
+ \ensuremath{%
+ \IfValueTF{#3}{%
+ \ifnum#3=4\relax%
+ \tofrac{\PfCAddSumSimp}%
+ \else%
+ \ifnum#3=3\relax%
+ \SSimpliTest{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\ifthenelse{\boolean{Simplification}}{\tofrac{\PfCAddNumFin/\PfCAddDenoFin}}{\tofrac{\PfCAddSumSimp}}%
+ \else%
+ \ifnum#3=1\relax%
+ \ifnum\PfCPremierMul>1\relax%
+ \frac{\ListeFractions[1,1]_{\times\num{\PfCPremierMul}}}{\ListeFractions[1,2]_{\times\num{\PfCPremierMul}}}
+ \else%
+ \tofrac{#4}%
+ \fi%
+ \PfCFractionOp%
+ \ifnum\PfCDeuxiemeMul>1\relax%
+ \frac{\ListeFractions[2,1]_{\times\num{\PfCDeuxiemeMul}}}{\ListeFractions[2,2]_{\times\num{\PfCDeuxiemeMul}}}%
+ \else%
+ \tofrac{#5}%
+ \fi%
+ \else%
+ \ifnum#3=2\relax%
+ \frac{\num{\fpeval{\ListeFractions[1,1]*\PfCPremierMul}}}{\num{\fpeval{\ListeFractions[1,2]*\PfCPremierMul}}}\PfCFractionOp\frac{\num{\fpeval{\ListeFractions[2,1]*\PfCDeuxiemeMul}}}{\num{\fpeval{\ListeFractions[2,2]*\PfCDeuxiemeMul}}}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ }{\tofrac{#4}\PfCFractionOp\tofrac{#5}
+ }%
+ }%
+}%
+
+\NewDocumentCommand\SousFraction{oomm}{%
+ \AddFraction*[#1][#2]{#3}{#4}%
+}%
+
+\NewDocumentCommand\MulFraction{oommo}{%
+ \useKVdefault[CalculsFractions]%
+ \setKV[CalculsFractions]{#1}%
+ \IfDecimal{#3}{%
+ \xdef\PfCNumA{#3}%
+ \xdef\PfCNumB{1}%
+ }{%
+ \StrCut{#3}{/}{\PfCNumA}{\PfCNumB}%
+ }%
+ \IfDecimal{#4}{%
+ \xdef\PfCNumC{#4}%
+ \xdef\PfCNumD{1}%
+ }{%
+ \StrCut{#4}{/}{\PfCNumC}{\PfCNumD}%
+ }%
+ \xdef\PfCMulFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeFractions{\PfCMulFoo}%
+ \reademptyitems
+ \setsepchar{,}%
+ % Calculs
+ \xdef\PfCMulNumFin{\fpeval{(\ListeFractions[1,1])*(\ListeFractions[2,1])}}
+ \xdef\PfCMulDenoFin{\fpeval{\ListeFractions[1,2]*\ListeFractions[2,2]}}
+ \PGCD{\fpeval{abs(\PfCMulNumFin)}}{\fpeval{abs(\PfCMulDenoFin)}}\xdef\PfCMulPgcd{\pgcd}%
+ \xdef\PfCMulNumSimp{\fpeval{\PfCMulNumFin/\PfCMulPgcd}}%
+ \xdef\PfCMulDenoSimp{\fpeval{\PfCMulDenoFin/\PfCMulPgcd}}%
+ \xdef\PfCMulPdtSimp{\PfCMulNumSimp/\PfCMulDenoSimp}%
+ \IfValueT{#5}{\xdef#5{\PfCMulPdtSimp}}%
+ \ensuremath{%
+ \IfValueTF{#2}{%
+ \ifnum#2=3\relax
+ \tofrac{\PfCMulPdtSimp}%
+ \else
+ \ifnum#2=2\relax%
+ \SSimpliTest{\PfCMulNumFin}{\PfCMulDenoFin}\ifthenelse{\boolean{Simplification}}{\frac{\ifnum\PfCMulNumFin<0\relax-\fi\Decomposition[Longue]{\fpeval{abs(\PfCMulNumFin)}}}{\ifnum\PfCMulDenoFin<0\relax-\fi\Decomposition[Longue]{\fpeval{abs(\PfCMulDenoFin)}}}}{\tofrac{\PfCMulPdtSimp}}%
+ \else%
+ \ifnum#2=1\relax%
+ \frac{\ListeFractions[1,1]\times\ifnum\ListeFractions[2,1]<0\relax(\fi\ListeFractions[2,1]\ifnum\ListeFractions[2,1]<0\relax)\fi}{\ListeFractions[1,2]\times\ifnum\ListeFractions[2,2]<0\relax(\fi\ListeFractions[2,2]\ifnum\ListeFractions[2,2]<0\relax)\fi}
+ \fi
+ \fi
+ \fi
+ }{\tofrac{#3}\times\tofrac{#4}
+ }
+ }%
+}%
+
+\NewDocumentCommand\DivFraction{oommo}{%
+ \useKVdefault[CalculsFractions]%
+ \setKV[CalculsFractions]{#1}%
+ \IfDecimal{#3}{%
+ \xdef\PfCNumA{#3}%
+ \xdef\PfCNumB{1}%
+ }{%
+ \StrCut{#3}{/}{\PfCNumA}{\PfCNumB}%
+ }%
+ \IfDecimal{#4}{%
+ \xdef\PfCNumC{#4}%
+ \xdef\PfCNumD{1}%
+ }{%
+ \StrCut{#4}{/}{\PfCNumC}{\PfCNumD}%
+ }%
+ \xdef\PfCDivFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeFractions{\PfCDivFoo}%
+ \reademptyitems%
+ \setsepchar{,}%
+ % Calculs
+ \xdef\PfCDivNumFin{\fpeval{(\ListeFractions[1,1])*(\ListeFractions[2,2])}}%
+ \xdef\PfCDivDenoFin{\fpeval{\ListeFractions[1,2]*\ListeFractions[2,1]}}%
+ \PGCD{\fpeval{abs(\PfCDivNumFin)}}{\fpeval{abs(\PfCDivDenoFin)}}\xdef\PfCDivPgcd{\pgcd}%
+ \xdef\PfCDivNumSimp{\fpeval{\PfCDivNumFin/\PfCDivPgcd}}%
+ \xdef\PfCDivDenoSimp{\fpeval{\PfCDivDenoFin/\PfCDivPgcd}}%
+ \xdef\PfCDivPdtSimp{\PfCDivNumSimp/\PfCDivDenoSimp}%
+ \IfValueT{#5}{\xdef#5{\PfCDivPdtSimp}}%
+ \ensuremath{%
+ \IfValueTF{#2}{%
+ \ifnum#2=4\relax
+ \tofrac{\PfCDivPdtSimp}%
+ \else\ifnum#2=3\relax
+ \MulFraction[][\fpeval{#2-1}]{\ListeFractions[1,1]/\ListeFractions[1,2]}{\ListeFractions[2,2]/\ListeFractions[2,1]}%
+ \else
+ \ifnum#2=2\relax%
+ \MulFraction[][\fpeval{#2-1}]{\ListeFractions[1,1]/\ListeFractions[1,2]}{\ListeFractions[2,2]/\ListeFractions[2,1]}%
+ \else%
+ \ifnum#2=1\relax%
+ \tofrac{\ListeFractions[1,1]/\ListeFractions[1,2]}\times\tofrac{\ListeFractions[2,2]/\ListeFractions[2,1]}
+ \fi
+ \fi
+ \fi
+ \fi
+ }{\tofrac{#3}\div\tofrac{#4}
+ }
+ }%
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
index 7edbe8ab13..100807c748 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
@@ -38,6 +38,9 @@
colbacktitle=TrameCouleur,%
}%
+\newcommand\PfCTexteJai{J'ai}
+\newcommand\PfCTexteQuia{Qui a ?}
+
\makeatletter
\newtcolorbox{MyboxJQ}[2]{%
enhanced,%
@@ -65,9 +68,9 @@
\coordinate[yshift=3mm] (C3) at (frame.south);
\coordinate[xshift=\largeurcarte/2] (A3) at (A1);
\node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A3){};
- \node[TexteCouleur] (T1a) at (T1){\Large J'ai};
+ \node[TexteCouleur] (T1a) at (T1){\Large \PfCTexteJai};
\node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T2) at (S3){};
- \node[TexteCouleur] (T2a) at (T2){\Large Qui a ?};
+ \node[TexteCouleur] (T2a) at (T2){\Large \PfCTexteQuia};
\node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte1) at ($(A3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}%
\begin{center}%
#1%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex b/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
index 1c8c944c48..3bd25ff4dc 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
@@ -128,7 +128,7 @@
% \SI[round-mode=places,round-precision=#1]{#2}{\EuRo}%
%}
-\NewDocumentCommand\Prix{O{} O{2} m}{%
+\NewDocumentCommand\Prix{o O{2} m}{%
\useKVdefault[Unites]%
\setKV[Unites]{#1}%
\ifboolKV[Unites]{Nombre}{%
diff --git a/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex b/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
new file mode 100644
index 0000000000..b56e4f4dfd
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
@@ -0,0 +1,236 @@
+\setKVdefault[Facto]{Aide=false,AideMul=false,Couleur=Crimson,NomExpression=A,Lettre=x,Details,Formel=false,VariableSup=false,ParenthesesFin=false,Finale=false}
+\defKV[Facto]{Litteral=\setKV[Facto]{Details=false}}
+\defKV[Facto]{AutreVariable=\setKV[Facto]{VariableSup}}
+\defKV[Facto]{Resultat=\setKV[Facto]{Finale}}
+
+\NewDocumentCommand\PfCEcrireFacteur{mm}{%
+ \StrCount{#1}{+}[\PfCCountArgTroisPlus]%
+ \StrCount{#1}{-}[\PfCCountArgTroisMoins]%
+ \xdef\PfCCountArgTrois{\fpeval{\PfCCountArgTroisPlus+\PfCCountArgTroisMoins}}%
+ \ensuremath{%
+ \IfDecimal{#1}{%
+ \ifboolKV[Facto]{Aide}{%
+ \phantom{(}\print{#2}\phantom{)}%
+ }{%
+ \print{#2}%
+ }%
+ }{%
+ \xintifboolexpr{\PfCCountArgTrois==0}{%
+ \ifboolKV[Facto]{Aide}{%
+ \phantom{(}\print{#2}\phantom{)}%
+ }{%
+ \print{#2}%
+ }%
+ }{
+ (\print{#2})%
+ }
+ }%
+ }%
+}%
+
+\NewDocumentCommand\Factorisation{sommm}{%
+ \directlua{dofile('poly_render_fix.lua')}
+ \useKVdefault[Facto]%
+ \setKV[Facto]{#2}%
+ \colorlet{Csymbole}{\useKV[Facto]{Couleur}}%
+ \IfBooleanTF{#1}{%
+ \xdef\PfCFactoSymbole{-}%
+ }{%
+ \xdef\PfCFactoSymbole{+}%
+ }%
+ \xdef\PfCFactoNE{\useKV[Facto]{NomExpression}}%
+ \ifx\bla#5\bla%
+ % Cas a^2-b^2
+ \begin{CAS}
+ % La variable
+ vars('\useKV[Facto]{Lettre}')
+ % Les facteurs
+ Ka=#3
+ Kb=#4
+ Kc=(#3)^2
+ Kd=(#4)^2
+ Ke=(#3)-(#4)
+ Kf=(#3)+(#4)
+ % Les dérivées pour savoir si ce sont des facteurs littéraux ou pas.
+ PfCDDn=DD(Ka,\useKV[Facto]{Lettre}):autosimplify()
+ PfCDDm=DD(Kb,\useKV[Facto]{Lettre}):autosimplify()
+ PfCDDo=DD(Ke,\useKV[Facto]{Lettre}):autosimplify()
+ PfCDDp=DD(Kf,\useKV[Facto]{Lettre}):autosimplify()
+ % opposé
+ Ko=topoly(-Kb)
+ %
+ \end{CAS}
+ \setsepchar{,}\ignoreemptyitems
+ \readlist\ListeElementDeriveeA{\fetch{PfCDDn}}
+ \readlist\ListeElementDeriveeB{\fetch{PfCDDm}}
+ \readlist\ListeElementDeriveeE{\fetch{PfCDDo}}
+ \readlist\ListeElementDeriveeF{\fetch{PfCDDp}}
+ \reademptyitems
+ \xdef\TestCASA{\ListeElementDeriveeA[1]}
+ \xdef\TestCASB{\ListeElementDeriveeB[1]}
+ \ifboolKV[Facto]{Details}{%Version monome mais pas deux nombres
+ \begin{align*}
+ \PfCFactoNE&=\print{Kc:expand()}-\print{Kd:expand()}\\
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\xintifboolexpr{\TestCASA>1}{(\,}{}{\underbrace{\Fdash{$\print{Ka}$}}_{A}}\xintifboolexpr{\TestCASA>1}{\,)}{}^{\,2}-\xintifboolexpr{\TestCASB>1}{(\,}{}{\underbrace{\Fdash{$\print{Kb}$}}_{B}}\xintifboolexpr{\TestCASB>1}{\,)}{}^{\,2}}{\IfDecimal{#3}{\print{Ka}^2}{\print{Kc}}-\IfDecimal{#4}{\print{Kb}^2}{\print{Kd}}}\\
+ \PfCFactoNE&=(\print{Ke})\times(\print{Kf})%
+ \ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=(\print{Ke})(\print{Kf})}{}%
+ \end{align*}
+ }{%Avec au moins un des facteurs polynomes
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\IfDecimal{#3}{\PfCFactoNE&=\print{Kc}-\print{Kd}}{\IfDecimal{#4}{\PfCFactoNE&=\print{Kc}-\print{Kd}}{\PfCFactoNE&={\underbrace{\Fdash{$(\print{Ka})$}}_{A}}^{\,2}-{\underbrace{\Fdash{$(\print{Kb})$}}_{B}}^{\,2}}}}{\PfCFactoNE&=\print{Kc}-\print{Kd}}\\
+ \IfDecimal{#3}{\PfCFactoNE\uppercase{&}=\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$\phantom{(}\print{Ka}\phantom{)}$}}_{A}}^{\,2}}{\print{Ka}^2}-\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$(\print{Kb})$}}_{B}}^{\,2}}{\print{Kd}}\\}{\IfDecimal{#4}{\PfCFactoNE\uppercase{&}=\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$(\print{Ka})$}}_{A}}^{\,2}}{\print{Kc}}-\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$\phantom{(}\print{Kb}\phantom{)}$}}_{B}}^{\,2}}{\print{Kb}^2}\\}{}}
+ \PfCFactoNE&=\left[\IfDecimal{#3}{\print{Ka}}{(\print{Ka})}-\IfDecimal{#4}{\print{Kb}}{(\print{Kb})}\right]\times\left[\IfDecimal{#3}{\print{Ka}}{(\print{Ka})}+\IfDecimal{#4}{\print{Kb}}{(\print{Kb})}\right]\\
+ \PfCFactoNE&=\left[\print{Ka}\xintifboolexpr{\TestCASB<0}{+}{}\print{Ko}\right]\times\left[\print{Ka}\StrChar{#4}{1}[\PfCTestCaracUn]\StrCompare{\PfCTestCaracUn}{-}[\PfCTestCaracRetour]\xintifboolexpr{\PfCTestCaracRetour==0}{}{+}\print{Kb}\right]\\
+ \PfCFactoNE&=\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Ke:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}\times\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Kf:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}%
+ \ifboolKV[Facto]{Finale}{\\\PfCFactoNE&=\useKV[Facto]{Resultat}}{\ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Ke:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Kf:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}}{}}%
+ \end{align*}
+ }
+ \else%k*a+-k*b=k(a+-b)
+ \begin{CAS}
+ % La variable
+ vars('\useKV[Facto]{Lettre}'\ifboolKV[Facto]{VariableSup}{%
+ ,'\useKV[Facto]{AutreVariable}'
+ }{})
+ % Les facteurs
+ Kk=#3
+ Ka=#4
+ Kb=#5
+ Kka=Kk*Ka
+ Kkb=Kk*Kb
+ % Les dérivées pour savoir si ce sont des facteurs littéraux ou pas.
+ PfCDDn=DD(Ka,\useKV[Facto]{Lettre}):autosimplify()
+ PfCDDm=DD(Kb,\useKV[Facto]{Lettre}):autosimplify()
+ % opposé
+ Ko=topoly(-Kb)
+ Ke=(#4)\PfCFactoSymbole(#5)
+ \end{CAS}
+ \setsepchar{,}\ignoreemptyitems
+ \readlist\ListeElementDeriveeA{\fetch{PfCDDn}}
+ \readlist\ListeElementDeriveeB{\fetch{PfCDDm}}
+ \reademptyitems
+ \xdef\TestCAS{\ListeElementDeriveeA[1]}
+ \xdef\TestCASB{\ListeElementDeriveeB[1]}
+ \ifboolKV[Facto]{Details}{%Version monome mais pas des nombres
+ \begin{align*}
+ \PfCFactoNE&=\print{Kka:expand()}\PfCFactoSymbole\print{Kkb:expand()}\\
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{Kk}\phantom{)}$}}_{k}}{\print{Kk}}\times\xintifboolexpr{\TestCAS<0}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$(\print{Ka}$}}_{a}}{(\print{Ka})}}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{Ka}\phantom{)}$}}_{a}}{\print{Ka}}}\PfCFactoSymbole\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{Kk}\phantom{)}$}}_{k}}{\print{Kk}}\times\xintifboolexpr{\TestCASB<0}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$(\print{Kb}$}}_{b}}{(\print{Kb})}}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{Kb}\phantom{)}$}}_{b}}{\print{Kb}}}\\
+ \PfCFactoNE&=\print{Kk}\times(\print{Ka\PfCFactoSymbole Kb})%
+ \ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=\print{Kk}(\print{Ka\PfCFactoSymbole Kb})}{}%
+ \end{align*}
+ }{%Avec au moins un des facteurs polynomes
+ \StrCompare{\PfCFactoSymbole}{-}[\PfCRetiensSigneFacteurDeux]
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#4}{Ka}\PfCFactoSymbole\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#5}{Kb}\\\setKV[Facto]{Aide}}{}%
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}\times\underbrace{\Fdash{\PfCEcrireFacteur{#4}{Ka}}}_{a}\PfCFactoSymbole\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}\times\underbrace{\Fdash{\PfCEcrireFacteur{#5}{Kb}}}_{b}}{\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#4}{Ka}\PfCFactoSymbole\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#5}{Kb}}\setKV[Facto]{Aide=false}\\
+ \PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{Kk}\times\left[\PfCEcrireFacteur{#4}{Ka}\PfCFactoSymbole\PfCEcrireFacteur{#5}{Kb}\right]\\
+ \PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{Kk}\times\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Ka}\xintifboolexpr{\PfCRetiensSigneFacteurDeux==1}{\xintifboolexpr{\TestCASB<0}{}{+}\print{Kb}}{\xintifboolexpr{\TestCASB<0}{+}{}\print{Ko}}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}\\
+ \PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{Kk}\times\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Ke:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}%
+ \ifboolKV[Facto]{Finale}{\\\PfCFactoNE&=\useKV[Facto]{Resultat}}{\ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{Ke:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}}{}}%
+ \end{align*}
+ }
+ \fi
+}%
+
+\NewDocumentCommand\Factorisationold{sommm}{%
+ \directlua{dofile('poly_render_fix.lua')}
+ \useKVdefault[Facto]%
+ \setKV[Facto]{#2}%
+ \colorlet{Csymbole}{\useKV[Facto]{Couleur}}%
+ \IfBooleanTF{#1}{%
+ \xdef\PfCFactoSymbole{-}%
+ }{%
+ \xdef\PfCFactoSymbole{+}%
+ }%
+ \xdef\PfCFactoNE{\useKV[Facto]{NomExpression}}%
+ \ifx\bla#5\bla%
+ % Cas a^2-b^2
+ \begin{CAS}
+ % La variable
+ vars('\useKV[Facto]{Lettre}')
+ % Les facteurs
+ a=#3
+ b=#4
+ % Les dérivées pour savoir si ce sont des facteurs littéraux ou pas.
+ PfCDDn=DD(a,\useKV[Facto]{Lettre}):autosimplify()
+ PfCDDm=DD(b,\useKV[Facto]{Lettre}):autosimplify()
+ % opposé
+ o=topoly(-b)
+ %
+ c=(#3)^2
+ d=(#4)^2
+ e=(#3)-(#4)
+ f=(#3)+(#4)
+ \end{CAS}
+ \setsepchar{,}\ignoreemptyitems
+ \readlist\ListeElementDeriveeA{\fetch{PfCDDn}}
+ \readlist\ListeElementDeriveeB{\fetch{PfCDDm}}
+ \reademptyitems
+ \xdef\TestCASA{\ListeElementDeriveeA[1]}
+ \xdef\TestCASB{\ListeElementDeriveeB[1]}
+ \ifboolKV[Facto]{Details}{%Version monome mais pas deux nombres
+ \begin{align*}
+ \PfCFactoNE&=\print{c:expand()}-\print{d:expand()}\\
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\xintifboolexpr{\TestCASA>1}{(\,}{}{\underbrace{\Fdash{$\print{a}$}}_{A}}\xintifboolexpr{\TestCASA>1}{\,)}{}^{\,2}-\xintifboolexpr{\TestCASB>1}{(\,}{}{\underbrace{\Fdash{$\print{b}$}}_{B}}\xintifboolexpr{\TestCASB>1}{\,)}{}^{\,2}}{\print{c}-\print{d}}\\
+ \PfCFactoNE&=(\print{e})\times(\print{f})%
+ \ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=(\print{e})(\print{f})}{}%
+ \end{align*}
+ }{%Avec au moins un des facteurs polynomes
+ Ici
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\IfDecimal{#3}{\PfCFactoNE&=\print{c}-\print{d}}{\IfDecimal{#4}{\PfCFactoNE&=\print{c}-\print{d}}{\PfCFactoNE&={\underbrace{\Fdash{$(\print{a})$}}_{A}}^{\,2}-{\underbrace{\Fdash{$(\print{b})$}}_{B}}^{\,2}}}}{\PfCFactoNE&=\print{c}-\print{d}}\\
+ \IfDecimal{#3}{\PfCFactoNE\uppercase{&}=\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$\phantom{(}\print{a}\phantom{)}$}}_{A}}^{\,2}}{\print{a}^2}-\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$(\print{b})$}}_{B}}^{\,2}}{\print{d}}\\}{\IfDecimal{#4}{\PfCFactoNE\uppercase{&}=\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$(\print{a})$}}_{A}}^{\,2}}{\print{c}}-\ifboolKV[Facto]{Aide}{{\underbrace{\Fdash{$\phantom{(}\print{b}\phantom{)}$}}_{B}}^{\,2}}{\print{b}^2}\\}{}}
+ \PfCFactoNE&=\left[\IfDecimal{#3}{\print{a}}{(\print{a})}-\IfDecimal{#4}{\print{b}}{(\print{b})}\right]\times\left[\IfDecimal{#3}{\print{a}}{(\print{a})}+\IfDecimal{#4}{\print{b}}{(\print{b})}\right]\\
+ \PfCFactoNE&=\left[\print{a}\xintifboolexpr{\TestCASB<0}{+}{}\print{o}\right]\times\left[\print{a}%
+ \xintifboolexpr{\TestCASB<0}{\StrChar{\print{b}}{1}[\PfCTestCaracUn]\StrCompare*{\PfCTestCaracUn}{-}[\PfCTestCaracRetour]\xintifboolexpr{\PfCTestCaracRetour==0}{}{+}}{+}\print{b}\right]\\
+ \PfCFactoNE&=\left[\print{e:expand():topolynomial()}\right]\times\left[\print{f:expand():topolynomial()}\right]%
+ \ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=\left[\print{e:expand():topolynomial()}\right]\left[\print{f:expand():topolynomial()}\right]}{}%
+ \end{align*}
+ }
+ \else%k*a+-k*b=k(a+-b)
+ \begin{CAS}
+ % La variable
+ vars('\useKV[Facto]{Lettre}'\ifboolKV[Facto]{VariableSup}{%
+ ,'\useKV[Facto]{AutreVariable}'
+ }{})
+ % Les facteurs
+ k=#3
+ a=#4
+ b=#5
+ ka=k*a
+ kb=k*b
+ % Les dérivées pour savoir si ce sont des facteurs littéraux ou pas.
+ PfCDDn=DD(a,\useKV[Facto]{Lettre}):autosimplify()
+ PfCDDm=DD(b,\useKV[Facto]{Lettre}):autosimplify()
+ % opposé
+ o=topoly(-b)
+ e=(#4)\PfCFactoSymbole(#5)
+ \end{CAS}
+ \setsepchar{,}\ignoreemptyitems
+ \readlist\ListeElementDeriveeA{\fetch{PfCDDn}}
+ \readlist\ListeElementDeriveeB{\fetch{PfCDDm}}
+ \reademptyitems
+ \xdef\TestCAS{\ListeElementDeriveeA[1]}
+ \xdef\TestCASB{\ListeElementDeriveeB[1]}
+ \ifboolKV[Facto]{Details}{%Version monome mais pas des nombres
+ \begin{align*}
+ \PfCFactoNE&=\print{ka:expand()}\PfCFactoSymbole\print{kb:expand()}\\
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{k}\phantom{)}$}}_{k}}{\print{k}}\times\xintifboolexpr{\TestCAS<0}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$(\print{a}$}}_{a}}{(\print{a})}}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{a}\phantom{)}$}}_{a}}{\print{a}}}\PfCFactoSymbole\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{k}\phantom{)}$}}_{k}}{\print{k}}\times\xintifboolexpr{\TestCASB<0}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$(\print{b}$}}_{b}}{(\print{b})}}{\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{$\phantom{(}\print{b}\phantom{)}$}}_{b}}{\print{b}}}\\
+ \PfCFactoNE&=\print{k}\times(\print{a\PfCFactoSymbole b})%
+ \ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=\print{k}(\print{a\PfCFactoSymbole b})}{}%
+ \end{align*}
+ }{%Avec au moins un des facteurs polynomes
+ \StrCompare{\PfCFactoSymbole}{-}[\PfCRetiensSigneFacteurDeux]
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{k}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#4}{a}\PfCFactoSymbole\PfCEcrireFacteur{#3}{k}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#5}{b}\\\setKV[Facto]{Aide}}{}%
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{\PfCEcrireFacteur{#3}{k}}}_{k}\times\underbrace{\Fdash{\PfCEcrireFacteur{#4}{a}}}_{a}\PfCFactoSymbole\underbrace{\Fdash{\PfCEcrireFacteur{#3}{k}}}_{k}\times\underbrace{\Fdash{\PfCEcrireFacteur{#5}{b}}}_{b}}{\PfCEcrireFacteur{#3}{k}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#4}{a}\PfCFactoSymbole\PfCEcrireFacteur{#3}{k}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#5}{b}}\\
+ \PfCFactoNE&=\PfCEcrireFacteur{#3}{k}\times\left[\PfCEcrireFacteur{#4}{a}\PfCFactoSymbole\PfCEcrireFacteur{#5}{b}\right]\\
+ \PfCFactoNE&=\PfCEcrireFacteur{#3}{k}\times\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{a}\xintifboolexpr{\PfCRetiensSigneFacteurDeux==1}{\xintifboolexpr{\TestCASB<0}{}{+}\print{b}}{\xintifboolexpr{\TestCASB<0}{+}{}\print{o}}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}\\
+ \PfCFactoNE&=\PfCEcrireFacteur{#3}{k}\times\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{e:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}%
+ \ifboolKV[Facto]{Formel}{\\\PfCFactoNE&=\PfCEcrireFacteur{#3}{k}\ifboolKV[Facto]{ParenthesesFin}{\left(}{\left[}\print{e:expand():topolynomial()}\ifboolKV[Facto]{ParenthesesFin}{\right)}{\right]}}{}%
+ \end{align*}
+ }
+ \fi
+}%
+
+
+
diff --git a/macros/latex/contrib/profcollege/latex/PfCJeuRangement.tex b/macros/latex/contrib/profcollege/latex/PfCJeuRangement.tex
new file mode 100644
index 0000000000..f9530be658
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCJeuRangement.tex
@@ -0,0 +1,104 @@
+\setKVdefault[JeuRgt]{Creation=false,Deno=12,Graines=false,Largeur=15pt,Hauteur=20pt,Negatif=false,Decimaux=false,Solution=false}
+\defKV[JeuRgt]{Graine=\setKV[JeuRgt]{Graines}}%
+
+\newlength{\PfCJeuRgtH}
+
+\NewDocumentCommand\DefiRangement{omm}{%
+ \useKVdefault[JeuRgt]%
+ \setKV[JeuRgt]{#1}%
+ \setlength{\PfCJeuRgtH}{\useKV[JeuRgt]{Hauteur}+\tabcolsep}%
+ \ifboolKV[JeuRgt]{Graines}{\PfCGraineAlea{\useKV[JeuRgt]{Graine}}}{}%
+ % On décompose la phrase
+ \xdef\PfCFooDepart{}%
+ \StrLen{#2}[\LongueurMot]%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \StrChar{#2}{##1}[\LettreMot]%
+ \xdef\PfCFooDepart{\PfCFooDepart\LettreMot/}%
+ }%
+ \setsepchar[*]{/}\reademptyitems%
+ \readlist*\ListeDesLettres{\PfCFooDepart}%
+% La liste des Lettres est \showitems\ListeDesLettres[]%
+ % Liste des nombres
+ \ifboolKV[JeuRgt]{Creation}{%
+ \xdef\ListeDesChoix{}%
+ \ifboolKV[JeuRgt]{Negatif}{%
+ \xdef\ListeDesChoix{-1}%
+ \xintFor* ##1 in{\xintSeq{2}{50}}\do{%
+ \xdef\ListeDesChoix{\ListeDesChoix,-##1}%
+ }%
+ \xintFor* ##1 in{\xintSeq{2}{50}}\do{%
+ \xdef\ListeDesChoix{\ListeDesChoix,##1}%
+ }%
+ }{%
+ \xintFor* ##1 in{\xintSeq{2}{100}}\do{%
+ \xdef\ListeDesChoix{\ListeDesChoix,##1}%
+ }%
+ }%
+ \MelangeListe{\ListeDesChoix}{\LongueurMot}%
+ % Liste des nombres \faa et maintenant rangée
+ \Rangement[Seul]{\faa}% \PfCListeRgtRecup
+ \setsepchar{,}%
+ % Liste des nombres
+ \readlist*\ListeDesNombres{\PfCListeRgtRecup}
+ }{%
+ \setsepchar{,}%
+ % Liste des nombres
+ \readlist*\ListeDesNombres{#3}
+ }%
+ % \\La liste des nombres est \showitems\ListeDesNombres[]
+ % On crée la liste des compteurs mélangés
+ \xdef\PfCFooListe{}%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \xdef\PfCFooListe{\PfCFooListe ##1,}
+ }%
+ % On mélange la liste des compteurs
+ \MelangeListe{\PfCFooListe}{\LongueurMot}
+ % On obtient la liste demandée
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeCompteursMelanges{\faa}
+ \reademptyitems
+ % \\La liste des compteurs mélangés est \showitems\ListeCompteursMelanges[]
+ % Les associations
+ % \foreachitem\Lettre\in\ListeCompteursMelanges{%
+ % \xdef\Compteur{\ListeCompteursMelanges[\Lettrecnt]}
+ % \ListeDesLettres[\Compteur] -- \ListeDesNombres[\Compteur]\\
+ % }%
+ % \begin{center}
+ \begin{NiceTabular}{*{\LongueurMot}{m{\useKV[JeuRgt]{Largeur}}}}[vlines]%
+ \hline
+ \rule{0pt}{\PfCJeuRgtH}\xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \xintifForFirst{}{&}\Block{}{\xdef\Compteur{\ListeCompteursMelanges[##1]}\ListeDesLettres[\Compteur]}%
+ }%
+ \\
+ \hline
+ \rule{0pt}{\PfCJeuRgtH}\xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \xintifForFirst{}{&}\Block{}{%
+ \xdef\Compteur{\ListeCompteursMelanges[##1]}%
+ \ifboolKV[JeuRgt]{Creation}{%
+ \ifboolKV[JeuRgt]{Decimaux}{\num{\fpeval{\ListeDesNombres[\Compteur]/\useKV[JeuRgt]{Deno}}}}{\Simplification{\ListeDesNombres[\Compteur]}{\useKV[JeuRgt]{Deno}}}}{%
+ \ListeDesNombres[\Compteur]%
+ }%
+ }
+ }%
+ \\
+ \ifboolKV[JeuRgt]{Solution}{%
+ \hline
+ \rule{0pt}{\PfCJeuRgtH}\xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \xintifForFirst{}{&}\Block{}{\ListeDesLettres[##1]}%
+ }%
+ \\
+ \hline
+ \rule{0pt}{\PfCJeuRgtH}\xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \xintifForFirst{}{&}\Block{}{%
+ \ifboolKV[JeuRgt]{Creation}{%
+ \ifboolKV[JeuRgt]{Decimaux}{\num{\fpeval{\ListeDesNombres[##1]/\useKV[JeuRgt]{Deno}}}}{\Simplification{\ListeDesNombres[##1]}{\useKV[JeuRgt]{Deno}}}}{%
+ \ListeDesNombres[##1]%
+ }%
+ }%
+ }%
+ \\
+ }{}%
+ \hline
+ \end{NiceTabular}
+ % \end{center}
+} \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex b/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
index bb3305deb1..d37ac5e042 100644
--- a/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
@@ -1,7 +1,3 @@
-
-
-
-
%%%
% Fonction
%%%
@@ -574,7 +570,7 @@
\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}}}%
+ \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\ifboolKV[ClesFonction]{Vide}{}{\StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}}}%
\\\hline
\end{array}%
\]%
diff --git a/macros/latex/contrib/profcollege/latex/PfCPythagore.tex b/macros/latex/contrib/profcollege/latex/PfCPythagore.tex
index ae8dda031e..45a20b80c7 100644
--- a/macros/latex/contrib/profcollege/latex/PfCPythagore.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCPythagore.tex
@@ -270,6 +270,48 @@
\newcommand\RedactionCalculsReciPythagore{}%
\newcommand\RedactionConclusionReciPythagore{}%
+\NewDocumentCommand\CalculsPythagore{o m m m m}{
+ \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }
+ \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }
+ \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }
+ \end{align*}
+ }%
+ }%\fi%
+}
+
% \newcommand\Pythagore[5][]{%
\NewDocumentCommand\Pythagore{o m m m m}{%
% #1 Param\`etres sous forme de cl\'es
@@ -277,8 +319,8 @@
% #3 Premi\`ere longueur
% #4 Deuxi\`eme longueur
% #5 Troisi\`eme longueur (\'eventuellement vide)
- \useKVdefault[ClesPythagore]%obligatoire car la macro n'est pas dans un groupe.
- \setKV[ClesPythagore]{#1}%On lit les arguments optionnels
+ \useKVdefault[ClesPythagore]%
+ \setKV[ClesPythagore]{#1}%
\DeclareSIUnit{\PfCPythaUnit}{\useKV[ClesPythagore]{Unite}}%
\ifboolKV[ClesPythagore]{Reciproque}{%
% On retient les noms des sommets
@@ -407,14 +449,14 @@
\xdef\NomSommetC{\NomC}%
% On trace une figure ou pas ?
\ifboolKV[ClesPythagore]{FigureSeule}{%
- \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
+ \xintifboolexpr{#3<#4 || #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})}}%
}%
\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}
}{%
- \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+ \ifboolKV[ClesPythagore]{Figure}{%
\begin{multicols}{2}%
{\em La figure est donn\'ee \`a titre indicatif.}%
\[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\]
@@ -430,33 +472,8 @@
\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
- }%
- \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
- }%
- \end{align*}
- }%\fi%
- }
+ \CalculsPythagore[#1]{#2}{#3}{#4}{}
+ }%
\end{multicols}
}{%
% On d\'emarre la r\'esolution
@@ -469,45 +486,7 @@
}{%
\ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
- }
- \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
- }
- \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
- }
- \end{align*}
- }%
- }%\fi%
+ \CalculsPythagore[#1]{#2}{#3}{#4}{}
}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCPythagoreold.tex b/macros/latex/contrib/profcollege/latex/PfCPythagoreold.tex
new file mode 100644
index 0000000000..c416595207
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCPythagoreold.tex
@@ -0,0 +1,516 @@
+%%%
+% Le th\'eor\`eme de Pythagore
+%%%
+\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0,Perso=false,AllPerso=false,SansMots=false}
+
+% On d\'efinit les figures \`a utiliser
+\def\MPFigurePytha#1#2#3#4#5#6{%
+ % #1 Premier sommet
+ % #2 Sommet de l'angle droit
+ % #3 troisi\`eme sommet
+ % #4 1ere longueur
+ % #5 2eme longueur
+ % #6 angle de rotation de la figure
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=\useKV[ClesPythagore]{Echelle};
+ 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\`ere \`a 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 \'eventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#6);
+ B:=B rotatedabout(O,#6);
+ C:=C rotatedabout(O,#6);
+ % On d\'efinit 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;
+ numeric decalage;
+ decalage=3mm;
+ if (#4<#5) or (#4=#5) :
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ fi
+ else:
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C)
+ rotated 90));
+ label(btex \num{#5} etex,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}[mpsettings={u:=\useKV[ClesPythagore]{Echelle};}]
+ 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\`ere \`a 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 \'eventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#6);
+ B:=B rotatedabout(O,#6);
+ C:=C rotatedabout(O,#6);
+ % On d\'efinit 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) or (#4=#5) :
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ fi
+ else:
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C)
+ rotated 90));
+ label(btex \num{#5} etex,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\`eme sommet
+ % #4 1ere longueur
+ % #5 2eme longueur
+ % #6 3eme longueur
+ % #7 angle de rotation de la figure
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=\useKV[ClesPythagore]{Echelle};
+ 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\`ere \`a 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 \'eventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#7);
+ B:=B rotatedabout(O,#7);
+ C:=C rotatedabout(O,#7);
+ 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)};
+ decalage=3mm;
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(btex \num{#5} etex,1/2[C,B]-decalage*(unitvector(C-B)));
+ label(btex \num{#6} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ else:
+ label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ label(btex \num{#6} etex,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}[mpsettings={u:=\useKV[ClesPythagore]{Echelle};}]
+ 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\`ere \`a 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 \'eventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#7);
+ B:=B rotatedabout(O,#7);
+ C:=C rotatedabout(O,#7);
+ 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)};
+ 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
+}
+
+\def\MPFigurePythaSansMots#1#2#3#4#5#6{%
+ % #1 Premier sommet
+ % #2 Sommet de l'angle droit
+ % #3 troisi\`eme sommet
+ % #4 1ere longueur
+ % #5 2eme longueur
+ % #6 angle de rotation de la figure
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ u:=\useKV[ClesPythagore]{Echelle};
+ pair A,B,C,O,D,E,F,L[],M[],N[];%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\`ere \`a 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 \'eventuellement moins de lassitude :)
+ A:=A rotatedabout(O,#6);
+ B:=B rotatedabout(O,#6);
+ C:=C rotatedabout(O,#6);
+ % On d\'efinit l'angle droit
+ D-B=7*unitvector(C-B);
+ F-B=7*unitvector(A-B);
+ E-D=F-B;
+ trace polygone(A,B,C);
+ draw D--E--F;
+ L1=rotation(B,A,90);
+ L2-L1=B-A;
+ trace chemin(A,L1,L2,B);
+ M1=rotation(C,B,90);
+ M2-M1=C-B;
+ trace chemin(B,M1,M2,C);
+ N1=rotation(A,C,90);
+ N2-N1=A-C;
+ trace chemin(C,N1,N2,A);
+ numeric decalage;
+ decalage=3mm;
+ if (#4<#5) or (#4=#5) :
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex,1/2[A,B]+decalage*(unitvector(C-B)));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(B,M2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}+\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4+#5*#5}}$\\\end{tabular}"),iso(C,N2));
+ else:
+ label(btex \num{#4} etex,1/2[C,B]+decalage*(unitvector(A-B)));
+ label(btex \num{#5} etex,1/2[A,B]+decalage*(unitvector(C-B)));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(B,M2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}+\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4+#5*#5}}$\\\end{tabular}"),iso(C,N2));
+ drawarrow 2/10[iso(A,L2),iso(C,N2)]--8/10[iso(A,L2),iso(C,N2)];
+ drawarrow 2/10[iso(B,M2),iso(C,N2)]--8/10[iso(B,M2),iso(C,N2)];
+ fi
+ else:
+ if ypart(B)>ypart(O) :
+ label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(C,N2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}-\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4-#5*#5}}$\\\end{tabular}"),iso(B,M2));
+ drawarrow 2/10[iso(A,L2),iso(B,M2)]--8/10[iso(A,L2),iso(B,M2)];
+ drawarrow 2/10[iso(C,N2),iso(B,M2)]--8/10[iso(C,N2),iso(B,M2)];
+ else:
+ label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+ label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#5}\times\num{#5}$\\$\num{\fpeval{#5*#5}}$\\\end{tabular}"),iso(A,L2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{#4}\times\num{#4}$\\$\num{\fpeval{#4*#4}}$\\\end{tabular}"),iso(C,N2));
+ label(TEX("\begin{tabular}{c}Aire\\$\num{\fpeval{#4*#4}}-\num{\fpeval{#5*#5}}$\\$\num{\fpeval{#4*#4-#5*#5}}$\\\end{tabular}"),iso(B,M2));
+ drawarrow 2/10[iso(A,L2),iso(B,M2)]--8/10[iso(A,L2),iso(B,M2)];
+ drawarrow 2/10[iso(C,N2),iso(B,M2)]--8/10[iso(C,N2),iso(B,M2)];
+ 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}
+ \fi
+}
+
+\newcommand\RedactionPythagore{}%
+\newcommand\RedactionReciPythagore{}%
+\newcommand\RedactionCalculsPythagore{}%
+\newcommand\RedactionCalculsReciPythagore{}%
+\newcommand\RedactionConclusionReciPythagore{}%
+
+% \newcommand\Pythagore[5][]{%
+\NewDocumentCommand\Pythagore{o m m m m}{%
+ % #1 Param\`etres sous forme de cl\'es
+ % #2 Nom "complet" du triangle : ABC par exemple
+ % #3 Premi\`ere longueur
+ % #4 Deuxi\`eme longueur
+ % #5 Troisi\`eme longueur (\'eventuellement vide)
+ \useKVdefault[ClesPythagore]%
+ \setKV[ClesPythagore]{#1}%
+ \DeclareSIUnit{\PfCPythaUnit}{\useKV[ClesPythagore]{Unite}}%
+ \ifboolKV[ClesPythagore]{Reciproque}{%
+ % On retient les noms des sommets
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ \xdef\NomTriangle{\NomA\NomB\NomC}%
+ % on stocke les valeurs donn\'ees
+ \opcopy{#3}{A1}%
+ \opcopy{#4}{A2}%
+ \opcopy{#5}{A3}%
+ \xdef\GrandCote{#3}%
+ \xdef\PetitCote{#4}%
+ \xdef\MoyenCote{#5}%
+ % On trace une figure ou pas ?
+ \ifboolKV[ClesPythagore]{FigureSeule}{%
+ \MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}%
+ }{%
+ \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+ \begin{multicols}{2}
+ {\em La figure est donn\'ee \`a titre indicatif.}%
+ \[\MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}\]%
+ \par\columnbreak\par%
+ \ifboolKV[ClesPythagore]{AllPerso}{%
+ \RedactionReciPythagore%
+ \RedactionCalculsReciPythagore%
+ \RedactionConclusionReciPythagore%
+ }{%
+ % on r\'edige
+ \ifboolKV[ClesPythagore]{Perso}{%
+ \RedactionReciPythagore%
+ }{%
+ Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand c\^ot\'e.%
+ }
+ \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'\'egalit\'e de Pythagore est v\'erifi\'ee. 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'\'egalit\'e de Pythagore n'est pas v\'erifi\'ee. 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\`es la r\'eciproque du th\'eor\`eme 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\`es la contrapos\'ee du th\'eor\`eme de Pythagore.}\fi%
+ }
+ }
+ \end{multicols}
+ }{%
+ \ifboolKV[ClesPythagore]{AllPerso}{%
+ \RedactionReciPythagore%
+ \RedactionCalculsReciPythagore%
+ \RedactionConclusionReciPythagore%
+ }{%
+ \ifboolKV[ClesPythagore]{Perso}{\RedactionReciPythagore}{%
+ Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand c\^ot\'e.%
+ }
+ \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'\'egalit\'e de Pythagore est v\'erifi\'ee. 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'\'egalit\'e de Pythagore n'est pas v\'erifi\'ee. 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\`es la r\'eciproque du th\'eor\`eme 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\`es la contrapos\'ee du th\'eor\`eme de Pythagore.}\fi%
+ }%
+ }%
+ }%
+ }%
+ }{%
+ % [xlop] param\`etres de calcul
+ \opcopy{#3}{A1}%
+ \opcopy{#4}{A2}%
+ \opcopy{\useKV[ClesPythagore]{Precision}}{pres}%
+ \xintifboolexpr{#3<#4 || #3==#4}{
+ \xdef\PetitCote{#3}%
+ \xdef\MoyenCote{#4}%
+ \xdef\GrandCote{}%
+ }{%
+ \xdef\GrandCote{#3}%
+ \xdef\MoyenCote{#4}%
+ \xdef\PetitCote{}% Pour la personnalisation
+ }
+ % On retient les noms des sommets
+ \StrMid{#2}{1}{1}[\NomA]%
+ \StrMid{#2}{2}{2}[\NomB]%
+ \StrMid{#2}{3}{3}[\NomC]%
+ \xdef\NomTriangle{\NomA\NomB\NomC}%
+ \xdef\NomAngleDroit{\NomB}%
+ \xdef\NomSommetA{\NomA}%
+ \xdef\NomSommetC{\NomC}%
+ % On trace une figure ou pas ?
+ \ifboolKV[ClesPythagore]{FigureSeule}{%
+ \xintifboolexpr{#3<#4 || #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})}}%
+ }%
+ \MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}
+ }{%
+ \ifboolKV[ClesPythagore]{Figure}{%
+ \begin{multicols}{2}%
+ {\em La figure est donn\'ee \`a titre indicatif.}%
+ \[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\]
+ \par\columnbreak\par%
+ % On d\'emarre la r\'esolution
+ \ifboolKV[ClesPythagore]{AllPerso}{%
+ \RedactionPythagore%
+ \RedactionCalculsPythagore%
+ }{%
+ \ifboolKV[ClesPythagore]{Perso}{%
+ \RedactionCalculsPythagore%
+ }{%
+ \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }%
+ \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }%
+ \end{align*}
+ }%\fi%
+ }
+ \end{multicols}
+ }{%
+ % On d\'emarre la r\'esolution
+ \ifboolKV[ClesPythagore]{SansMots}{%
+ \MPFigurePythaSansMots{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}%
+ }{%
+ \ifboolKV[ClesPythagore]{AllPerso}{%
+ \RedactionPythagore%
+ \RedactionCalculsPythagore%
+ }{%
+ \ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }
+ \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }
+ \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}\SI{\Aquatre}{\PfCPythaUnit}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\SI{\Aquatre}{\PfCPythaUnit}}}%\\
+ }
+ \end{align*}
+ }%
+ }%\fi%
+ }%
+ }%
+ }%
+ }%
+ }%
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex b/macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex
index f44525f170..436511bcf5 100644
--- a/macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex
@@ -1,7 +1,7 @@
%%%
% Rangement des nombres
%%%
-\setKVdefault[ClesRgt]{Croissant,Decroissant=false,Strict,Fraction=false,Details=false}
+\setKVdefault[ClesRgt]{Croissant,Decroissant=false,Strict,Fraction=false,Details=false,Seul=false}
\dtlexpandnewvalue%
\DTLgnewdb{mtnumedb}%
@@ -53,7 +53,12 @@
\itemtomacro\ListeRgt[\xcnt]\y%
\DTLnewdbentry{mtRGTdb}{numeric}{\y}%
}%
-% %
+% %
+ \ifboolKV[ClesRgt]{Seul}{%
+ \xdef\PfCListeRgtRecup{}%
+ \dtlsort{numeric}{mtRGTdb}{\dtlicompare}%
+ \DTLforeach{mtRGTdb}{\numeroDonnee=numeric}{\xdef\PfCListeRgtRecup{\PfCListeRgtRecup \numeroDonnee\DTLiflastrow{}{,}}}%
+ }{%
\ifboolKV[ClesRgt]{Decroissant}{%
% On trie la liste
\dtlsort{numeric=descending}{mtRGTdb}{\dtlicompare}%
@@ -64,4 +69,5 @@
\ensuremath{\DTLforeach{mtRGTdb}{\numeroDonnee=numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
}%
}%
+}%
}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCReperage.tex b/macros/latex/contrib/profcollege/latex/PfCReperage.tex
index 347ed19498..32e1fac093 100644
--- a/macros/latex/contrib/profcollege/latex/PfCReperage.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCReperage.tex
@@ -1,7 +1,7 @@
%%%
% 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,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false,CouleurMercure=black,Celsius,Kelvin=false,Farenheit=false,ValeurMin=-4000,ValeurMax=4000,Etages=4,Code=false}
+\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,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false,CouleurMercure=black,Celsius,Kelvin=false,Farenheit=false,ValeurMin=-4000,ValeurMax=4000,Etages=4,Code=false,Globe=false,Rho=1500,Phi=22,Theta=10,CouleurE=orange,CouleurG=green,Axes=false,TypeProj="persp"}
\defKV[ClesReperage]{Traces=\setKV[ClesReperage]{Code}}
% ValeurOrigine permet de faire des morceaux de demi-droite gradu\'ee en passant par droite :)
@@ -20,27 +20,214 @@
% Pour construire le rep\`ere de l'espace
\def\buildespace{%
\toklistepointespace{}%
- \ifboolKV[ClesReperage]{Sphere}{%
+ \ifboolKV[ClesReperage]{Globe}{%
\foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}%
- \[\MPEspaceSphere{\the\toklistepointrepere}{\useKV[ClesReperage]{EchelleEspace}}\]
+ \[\MPGlobe{\the\toklistepointrepere}{\useKV[ClesReperage]{EchelleEspace}}\]
}{%
- \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]{Sphere}{%
+ \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}%
+ \[\MPEspaceSphere{\the\toklistepointrepere}{\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}}\]%
+ \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}}\]%
+ }%
}{%
- \[\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}}\]%
+ \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\MPGlobe#1#2{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ input PfCSolid;
+ % Pour convertir les (Long,lat) données en degrés en (Long,lat) données en radians
+ vardef ConvDeg(expr fa,fl)=
+ Famille((fa*pi/180),(fl*pi/180))
+ enddef;
+ %Initialisation
+ PfCRho=\useKV[ClesReperage]{Rho};
+ PfCPhi=\useKV[ClesReperage]{Phi};
+ PfCTheta=\useKV[ClesReperage]{Theta};
+ color CouleurE,CouleurG;
+ CouleurE=\useKV[ClesReperage]{CouleurE};
+ CouleurG=\useKV[ClesReperage]{CouleurG};
+ boolean AffichageNom,Axes;
+ AffichageNom=\useKV[ClesReperage]{AffichageNom};
+ Axes=\useKV[ClesReperage]{Axes};
+ Initialisation(PfCRho,PfCTheta,PfCPhi,#2);
+ eclairage:=false;
+ nb:=18;%
+ subh:=36;%
+ %angx:=-23.5;%anglerotationx;
+ TR:=(0,0,0);
+ Ferme2:=true;
+ typerepre:=\useKV[ClesReperage]{TypeProj};
+ if typerepre="persp":
+ ObjetSphereNew2("R=2");
+ ObjetEquateur3("R=2");
+ ObjetGreenwich4("R=2");
+ elseif typerepre="proj":
+ ObjetSpherePfC2("R=20");
+ ObjetEquateur3("R=20");
+ ObjetGreenwich4("R=20");
+ else:
+ ObjetSphereCabinet2("R=5");
+ ObjetEquateur3("R=5");
+ ObjetGreenwich4("R=5");
+ fi;
+ AffichagePfC2;
+% AffichageObjet2;
+ if \useKV[ClesReperage]{Axes}:
+ drawoptions(withpen pencircle scaled 1.05 withcolor CouleurE);
+ AffichageEquateur3;
+ drawoptions(withpen pencircle scaled 1 withcolor CouleurG);
+ AffichageGreenwich4;
+ drawoptions();
+ fi;
+ % Label
+% labeloffset:=labeloffset*2;
+% label.urt(btex Nord etex,Projette(Image(ConvDeg(90,0))));%(0,0,2))));
+% label.llft(btex Sud etex,Projette(Image(ConvDeg(-90,0))));%(0,0,-2))));
+% label.lft(btex Ouest etex,Projette(Image(ConvDeg(0,-90))));%(0,-2,0))));
+% label.rt(btex Est etex,Projette(Image(ConvDeg(0,90))));%(0,2,0))));
+% labeloffset:=labeloffset/2;
+ dotlabel.llft(btex \tiny\ang{0} etex,Projette(Image(ConvDeg(0,0))));
+ dotlabel.llft(btex \tiny\ang{10} etex,Projette(Image(ConvDeg(10,0))));
+ dotlabel.llft(btex \tiny\ang{10} etex,Projette(Image(ConvDeg(0,10))));
+ color M[],N[];
+ vardef toto(text t)=
+ n:=1;
+ for p_=t:
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ M[n]=Image(ConvDeg(l,k));
+ if l>0:
+ if k>0:
+ N[n]=Image(ConvDeg(l+3,k+3));
+ else:
+ N[n]=Image(ConvDeg(l+3,k-3));
+ fi;
+ else:
+ if k>0:
+ N[n]=Image(ConvDeg(l-3,k+3));
+ else:
+ N[n]=Image(ConvDeg(l-3,k-3));
+ fi;
+ fi;
+ label(TEX(p_),Projette(N[n]));
+ dotlabel.urt("",Projette(M[n]));
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ if AffichageNom:
+ toto(#1);
+ fi;
+% label.top(TEX(decimal(redpart(Oeil))&","&decimal(greenpart(Oeil))&","&decimal(bluepart(Oeil))),Projette(Image(ConvDeg(90,0)))+(0,3cm));%&),(0,1cm));
+% TraceAxes;
+% label.top(btex Oeil etex,Projette(Image(Oeil)));
+% label.top(TEX("Oeil="&decimal(greenpart(Oeil))),(0,2cm));
+% label.top(TEX("Oeil="&decimal(bluepart(Oeil))),(0,3cm));
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={PfCRho=\useKV[ClesReperage]{Rho};PfCPhi=\useKV[ClesReperage]{Phi};PfCTheta=\useKV[ClesReperage]{Theta};color CouleurE,CouleurG;CouleurE=\useKV[ClesReperage]{CouleurE};CouleurG=\useKV[ClesReperage]{CouleurG};boolean AffichageNom,Axes;AffichageNom=\useKV[ClesReperage]{AffichageNom};Axes=\useKV[ClesReperage]{Axes};}]
+ input PfCSolid;
+ %
+ % Pour convertir les (Long,lat) données en degrés en (Long,lat) données en radians
+ vardef ConvDeg(expr fa,fl)=
+ Famille((fa*pi/180),(fl*pi/180))
+ enddef;
+ %Initialisation
+ Initialisation(PfCRho,PfCTheta,PfCPhi,#2);
+ nb:=18;%
+ subh:=36;%
+ %angx:=-23.5;%anglerotationx;
+ TR:=(0,0,0);
+ Ferme2:=true;
+ typerepre:=\useKV[ClesReperage]{TypeProj};
+ if typerepre="proj":
+ ObjetSphereNew2("R=10");
+ ObjetEquateur3("R=10");
+ ObjetGreenwich4("R=10");
+ else:
+ ObjetSphereNew2("R=2");
+ ObjetEquateur3("R=2");
+ ObjetGreenwich4("R=2");
+ fi;
+ AffichagePfC2;
+ if Axes:
+ drawoptions(withpen pencircle scaled 1.05 withcolor CouleurE);
+ ObjetEquateur3("R=2");
+ AffichageEquateur3;
+ drawoptions(withpen pencircle scaled 1 withcolor CouleurG);
+ ObjetGreenwich4("R=2");
+ AffichageGreenwich4;
+ drawoptions();
+ fi;
+ % Label
+% labeloffset:=labeloffset*2;
+% label.urt(btex Nord etex,Projette(Image(ConvDeg(90,0))));%(0,0,2))));
+% label.llft(btex Sud etex,Projette(Image(ConvDeg(-90,0))));%(0,0,-2))));
+% label.lft(btex Ouest etex,Projette(Image(ConvDeg(0,-90))));%(0,-2,0))));
+% label.rt(btex Est etex,Projette(Image(ConvDeg(0,90))));%(0,2,0))));
+% labeloffset:=labeloffset/2;
+ dotlabel.llft(btex \tiny\ang{0} etex,Projette(Image(ConvDeg(0,0))));
+ dotlabel.llft(btex \tiny\ang{10} etex,Projette(Image(ConvDeg(10,0))));
+ dotlabel.llft(btex \tiny\ang{10} etex,Projette(Image(ConvDeg(0,10))));
+ color M[],N[];
+ vardef toto(text t)=
+ n:=1;
+ for p_=t:
+ if (n mod 3)=1:
+ k:=p_;
+ fi;
+ if (n mod 3)=2:
+ l:=p_;
+ fi;
+ if (n mod 3)=0:
+ M[n]=Image(ConvDeg(l,k));
+ if l>0:
+ if k>0:
+ N[n]=Image(ConvDeg(l+3,k+3));
+ else:
+ N[n]=Image(ConvDeg(l+3,k-3));
+ fi;
+ else:
+ if k>0:
+ N[n]=Image(ConvDeg(l-3,k+3));
+ else:
+ N[n]=Image(ConvDeg(l-3,k-3));
+ fi;
+ fi;
+ label(TEX(p_),Projette(N[n]));
+ dotlabel.urt("",Projette(M[n]));
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ if AffichageNom:
+ toto(#1);
+ fi;
+ \end{mpost}
+ \fi
+}%
+
\def\MPEspaceSphere#1#2{%
\ifluatex
\begin{mplibcode}
@@ -62,7 +249,7 @@
trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white;
path greenwich;
greenwich=cercles(O,C,O,C,Z);
- trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich withcolor 0.7white;
+ trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich withcolor 0.2white;
clip currentpicture to cercles(O,A,O,A,Z);
trace chemin(C,O,Z) dashed evenly withcolor 0.85white;
trace chemin(O,2[Z,O]) dashed evenly withcolor 0.85white;
diff --git a/macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex b/macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex
index 2eeb1209c5..605cb35397 100644
--- a/macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex
@@ -321,6 +321,7 @@
label.llft(btex 0 etex,u*Origine);
drawoptions();
if Vide:
+ clip currentpicture to polygone(u*(xmin,ymin),u*(xmax,ymin),u*(xmax,ymax),u*(xmin,ymax));
else:
draw courbe1(borneinf,bornesup,nbpointsCourbe)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace;
% labelisation
diff --git a/macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex b/macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex
index ae3896a98e..b88aa3d582 100644
--- a/macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex
@@ -47,9 +47,9 @@
\setcounter{Nbequa}{0}
%CT
-\newdimen\fdashwidth \fdashwidth = 0.8pt % \'epaisseur traits
-\newdimen\fdashlength \fdashlength = 0.5mm % longueur des pointill\'es et s\'eparation entre pointill\'es
-\newdimen\fdashsep \fdashsep = 3pt % s\'eparateur entre contenu et traits
+\newdimen\fdashwidth\fdashwidth = 0.8pt % \'epaisseur traits
+\newdimen\fdashlength\fdashlength = 0.5mm % longueur des pointill\'es et s\'eparation entre pointill\'es
+\newdimen\fdashsep\fdashsep = 3pt % s\'eparateur entre contenu et traits
\def\fdash#1{%
\leavevmode\begingroup%
@@ -57,19 +57,19 @@
\def\hdash{\vrule height\fdashwidth width\fdashlength\relax}%
\def\vdash{\hrule height\fdashlength width\fdashwidth\relax}%
\def\dashblank{\kern\fdashlength}%
- \ifdim\fdashsep>0pt
+ \ifdim\fdashsep>0pt%
\setbox0\hbox{\vrule width0pt height\dimexpr\ht0+\fdashsep depth\dimexpr\dp0+\fdashsep\kern\fdashsep\unhbox0 \kern\fdashsep}%
- \fi
+ \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
+ \vdash%
\vtop{\vbox{\offinterlineskip\hdash\hbox{\unhbox0 }\hdash}}%
\vdash}%
- \endgroup
-}
+ \endgroup%
+}%
% fin CT
-\def\Fdash#1{\raisebox{-2\fdashsep+\fdashwidth}{\fdash{#1}}}
+\def\Fdash#1{\raisebox{-2\fdashsep+\fdashwidth}{\fdash{#1}}}%
%Une simplification de a/b est possible ou non ?
\newboolean{Simplification}
diff --git a/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex b/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
index db49992c46..fa7363c750 100644
--- a/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
@@ -127,7 +127,6 @@
\newcommand\DiviseurCommun[2]{%
% #1 : le premier nombre entier
% #2 : le deuxi\`eme nombre entier
- % nombre 1 vaut #1 - Nombre 2 vaut #2
\anpdc=#1%
\cnpdc=#2%
\bnpdc=2\relax%
@@ -153,19 +152,36 @@
\newcommand\LongueSimplification[2]{%
\xdef\NumerateurDiv{#1}%
\xdef\DenominateurDiv{#2}%
- \DiviseurCommun{#1}{#2}%
- \ensuremath{%
- \whiledo{\DivCom>1}{%
- \frac{\num{\fpeval{\NumerateurDiv/\the\DivCom}}\times\num{\the\DivCom}}{\num{\fpeval{\DenominateurDiv/\the\DivCom}}\times\num{\the\DivCom}}=\frac{\num{\fpeval{\NumerateurDiv/\DivCom}}}{\num{\fpeval{\DenominateurDiv/\DivCom}}}%
- \xdef\NumerateurDiv{\fpeval{\NumerateurDiv/\DivCom}}%
- \xdef\DenominateurDiv{\fpeval{\DenominateurDiv/\DivCom}}%
- \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}%
- \xintifboolexpr{\DivCom>1}{=}{}%
+ \ifboolKV[ClesSimplification]{Impose}{%
+ \DivCom=\useKV[ClesSimplification]{Nombre}%
+ }{%
+ \DiviseurCommun{#1}{#2}%
+ }%
+ \ifboolKV[ClesSimplification]{Debut}{%
+ \ensuremath{%
+ \whiledo{\DivCom>1}{%
+ \frac{\mathcolor{PfCSimpliCol}{\num{\the\DivCom}}\times\num{\fpeval{\NumerateurDiv/\the\DivCom}}}{\mathcolor{PfCSimpliCol}{\num{\the\DivCom}}\times\num{\fpeval{\DenominateurDiv/\the\DivCom}}}=\frac{\num{\fpeval{\NumerateurDiv/\DivCom}}}{\num{\fpeval{\DenominateurDiv/\DivCom}}}%
+ \xdef\NumerateurDiv{\fpeval{\NumerateurDiv/\DivCom}}%
+ \xdef\DenominateurDiv{\fpeval{\DenominateurDiv/\DivCom}}%
+ \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}%
+ \xintifboolexpr{\DivCom>1}{=}{}%
+ }%
+ }%
+ }{%
+ \ensuremath{%
+ \whiledo{\DivCom>1}{%
+ \frac{\num{\fpeval{\NumerateurDiv/\the\DivCom}}\times\mathcolor{PfCSimpliCol}{\num{\the\DivCom}}}{\num{\fpeval{\DenominateurDiv/\the\DivCom}}\times\mathcolor{PfCSimpliCol}{\num{\the\DivCom}}}=\frac{\num{\fpeval{\NumerateurDiv/\DivCom}}}{\num{\fpeval{\DenominateurDiv/\DivCom}}}%
+ \xdef\NumerateurDiv{\fpeval{\NumerateurDiv/\DivCom}}%
+ \xdef\DenominateurDiv{\fpeval{\DenominateurDiv/\DivCom}}%
+ \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}%
+ \xintifboolexpr{\DivCom>1}{=}{}%
+ }%
}%
}%
}%
-\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0}
+\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0,Couleur=black,Debut=false,Impose=false}
+\defKV[ClesSimplification]{Nombre=\setKV[ClesSimplification]{Impose}}
\newcounter{NbFrac}%
\setcounter{NbFrac}{0}%
@@ -200,6 +216,7 @@
}%
}{%
\ifboolKV[ClesSimplification]{Longue}{%
+ \colorlet{PfCSimpliCol}{\useKV[ClesSimplification]{Couleur}}%
\LongueSimplification{#2}{#3}%
}{%
\ifboolKV[ClesSimplification]{Details}{\SSimpli{#2}{#3}}{\ifboolKV[ClesSimplification]{All}{\ensuremath{\SSimpli{#2}{#3}=\SSimplifie{#2}{#3}}}{\SSimplifie{#2}{#3}}}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
index 3b86cd3892..03fb0f7ec6 100644
--- a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
@@ -664,9 +664,9 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
unitey:=\useKV[ClesStat]{Unitey}*cm;
xpartorigine:=\useKV[ClesStat]{Origine};
AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse};
- boolean Rotation;
+ boolean Rotation,Lecture;
Rotation=\useKV[ClesStat]{AbscisseRotation};
- boolean Lecture;
+% boolean Lecture;
Lecture:=\useKV[ClesStat]{Lecture};
boolean LectureFine;
LectureFine:=\useKV[ClesStat]{LectureFine};
@@ -682,9 +682,8 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
boolean Tiret;
Tiret=\useKV[ClesStat]{Tiret};
color CoulDefaut;
- CoulDefaut=\useKV[ClesStat]{CouleurDefaut};}
- Depart=\useKV[ClesStat]{Depart};
- ]
+ CoulDefaut=\useKV[ClesStat]{CouleurDefaut};
+ Depart=\useKV[ClesStat]{Depart};}]
maxx:=0;
maxy:=0;
% on r\'ecup\`ere les couleurs
diff --git a/macros/latex/contrib/profcollege/latex/PfCTrio.tex b/macros/latex/contrib/profcollege/latex/PfCTrio.tex
new file mode 100644
index 0000000000..e847c48aff
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCTrio.tex
@@ -0,0 +1,273 @@
+\newlength\PfCTrioHauteur%
+\newcounter{PfCTrioLettre}%
+
+\setKVdefault[Trio]{Largeur=15pt,Graines=false,Repere=false,Cibles=false,Ligne=1,Colonne=1,Vide=false,VideRepere=false}%
+\defKV[Trio]{Graine=\setKV[Trio]{Graines}}%
+\defKV[Trio]{Cible=\setKV[Trio]{Cibles}}%
+
+\NewDocumentCommand\TrioCalculs{mmm}{%
+ Les combinaisons Trio de #1, #2 et #3 sont :%
+ \begin{enumerate}%
+ \item $#1\times#2+#3=\fpeval{#1*#2+#3}$%
+ \item $#1\times#2-#3=\fpeval{#1*#2-#3}$%
+ \item $#2\times#3+#1=\fpeval{#2*#3+#1}$%
+ \item $#2\times#3-#1=\fpeval{#2*#3-#1}$%
+ \item $#3\times#1+#2=\fpeval{#3*#1+#2}$%
+ \item $#3\times#1-#2=\fpeval{#3*#1-#2}$%
+ \end{enumerate}%
+}%
+
+\NewDocumentCommand\Trio{o}{%
+ \setcounter{PfCTrioLettre}{0}
+ \useKVdefault[Trio]%
+ \setKV[Trio]{#1}%
+ \ifboolKV[Trio]{Graines}{\PfCGraineAlea{\useKV[Trio]{Graine}}}{}%
+ \ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{8}}{\xdef\PfCTrioNbCases{7}}%
+ % On définit la liste de nombres
+ \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9}%
+ \MelangeListe{\PfCTrioFoo}{49}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfCTrioMelange{\faa}%
+ \reademptyitems%
+ \setlength{\PfCTrioHauteur}{\useKV[Trio]{Largeur}+\tabcolsep}%
+ \begin{NiceTabular}{*{\PfCTrioNbCases}{m{\useKV[Trio]{Largeur}}}}[hvlines]%
+ \CodeBefore%
+ \ifboolKV[Trio]{Cibles}{%
+ \ifboolKV[Trio]{Repere}{%
+ \xdef\PfCTrioAjout{1}%
+ }{%
+ \xdef\PfCTrioAjout{0}
+ }%
+ % Calculs des horizontaux
+ \xintFor* ##2 in{\xintSeq{1}{7}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{5}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{\tikz\draw[fill=Cornsilk,line width=2pt] (\fpeval{##2+\PfCTrioAjout}-|\fpeval{##1+\PfCTrioAjout}) rectangle (\fpeval{##2+1+\PfCTrioAjout}-|\fpeval{##1+3+\PfCTrioAjout});\xintBreakFor}{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ % Calculs des verticaux
+ \xintFor* ##2 in{\xintSeq{1}{7}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{5}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1)+##2}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1+1)+##2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{\tikz\draw[fill=LightSteelBlue,line width=2pt] (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+\PfCTrioAjout}) rectangle (\fpeval{##1+3+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout});\xintBreakFor}{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ % Calculs des diag positives (descendantes)
+ \xintFor* ##2 in{\xintSeq{1}{5}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{5}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2+1)+##1+2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+\PfCTrioAjout}-|\fpeval{##1+\PfCTrioAjout}) rectangle (\fpeval{##2+1+\PfCTrioAjout}-|\fpeval{##1+1+\PfCTrioAjout});%
+ \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+1+\PfCTrioAjout}-|\fpeval{##1+1+\PfCTrioAjout}) rectangle (\fpeval{##2+2+\PfCTrioAjout}-|\fpeval{##1+2+\PfCTrioAjout});%
+ \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+2+\PfCTrioAjout}-|\fpeval{##1+2+\PfCTrioAjout}) rectangle (\fpeval{##2+3+\PfCTrioAjout}-|\fpeval{##1+3+\PfCTrioAjout});%
+ \xintBreakFor}{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ % Calculs des diagonale négatives (montantes)
+ \xintFor* ##2 in{\xintSeq{1}{5}}\do{%
+ \xintFor* ##1 in{\xintSeq{2}{6}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1-1)+##2+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1-2)+##2+2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+\PfCTrioAjout+1}-|\fpeval{##2+\PfCTrioAjout}) rectangle (\fpeval{##1+2+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout});%
+ \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout}) rectangle (\fpeval{##1+1+\PfCTrioAjout}-|\fpeval{##2+2+\PfCTrioAjout});%
+ \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1-1+\PfCTrioAjout}-|\fpeval{##2+2+\PfCTrioAjout}) rectangle (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+3+\PfCTrioAjout});%
+ \xintBreakFor%
+ }{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ }{}%
+ \Body
+ \ifboolKV[Trio]{Repere}{%
+ \rule{0pt}{\PfCTrioHauteur}\Block[fill=gray!15]{}{}\xintFor* ##1in{\xintSeq{1}{7}}\do{%
+ &\Block[fill=gray!15]{}{\stepcounter{PfCTrioLettre}\Alph{PfCTrioLettre}}%
+ }\\
+ }{}%
+ \xintFor* ##1 in{\xintSeq{1}{7}}\do{%
+ \rule{0pt}{\PfCTrioHauteur}%
+ \ifboolKV[Trio]{Repere}{\Block[fill=gray!15]{}{##1}}{}%
+ \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{1}{7}}\do{%
+ \xintifForFirst{}{&}\Block{}{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}%
+ }\\
+ }%
+ \end{NiceTabular}%
+}%
+
+\NewDocumentCommand\TrioCourt{o}{%
+ \useKVdefault[Trio]%
+ \setKV[Trio]{#1}%
+ \setcounter{PfCTrioLettre}{\useKV[Trio]{Colonne}-1}%
+ \ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{4}}{\xdef\PfCTrioNbCases{3}}%
+ \setlength{\PfCTrioHauteur}{\useKV[Trio]{Largeur}+\tabcolsep}%
+ \begin{NiceTabular}{*{\PfCTrioNbCases}{m{\useKV[Trio]{Largeur}}}}[hvlines]%
+ \CodeBefore%
+ \ifboolKV[Trio]{Cibles}{%
+ \ifboolKV[Trio]{Repere}{%
+ \xdef\PfCTrioAjout{1}%
+ }{%
+ \xdef\PfCTrioAjout{0}
+ }%
+ % Calculs des horizontaux
+ \xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}+2}}}\do{%
+ \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}}}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2-1)+##1+2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{\tikz\draw[fill=Cornsilk,line width=2pt] (\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});\xintBreakFor}{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ % Calculs des verticaux
+ \xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}+2}}}\do{%
+ \xintFor* ##1 in{\xintSeq{\useKV[Trio]{Ligne}}{\useKV[Trio]{Ligne}}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1)+##2}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1+1)+##2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ || \fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{\tikz\draw[fill=LightSteelBlue,line width=2pt] (\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});\xintBreakFor}{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ % Calculs des diag positives (descendantes)
+ \xintFor* ##2 in{\xintSeq{\useKV[Trio]{Ligne}}{\useKV[Trio]{Ligne}}}\do{%
+ \xintFor* ##1 in{\xintSeq{\useKV[Trio]{Colonne}}{\useKV[Trio]{Colonne}}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##2)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##2+1)+##1+2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
+ \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
+ \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+3+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
+ \xintBreakFor}{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ % Calculs des diagonale négatives (montantes)
+ \xintFor* ##2 in{\xintSeq{\useKV[Trio]{Colonne}}{\useKV[Trio]{Colonne}}}\do{%
+ \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}}}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{7*(##1+1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{7*(##1)+##2+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{7*(##1-1)+##2+2}]}%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
+ \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
+ \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+3+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
+ \xintBreakFor%
+ }{}%
+ }%
+ \xintifboolexpr{\fpeval{\PfCTrioNombreA*\PfCTrioNombreB+\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreA*\PfCTrioNombreB-\PfCTrioNombreC}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC+\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreB*\PfCTrioNombreC-\PfCTrioNombreA}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA+\PfCTrioNombreB}==\useKV[Trio]{Cible}%
+ ||\fpeval{\PfCTrioNombreC*\PfCTrioNombreA-\PfCTrioNombreB}==\useKV[Trio]{Cible}}{%
+ \xintBreakFor}{}%
+ }%
+ }{}%
+ \Body
+ \ifboolKV[Trio]{Repere}{%
+ \rule{0pt}{\PfCTrioHauteur}\Block[fill=gray!15]{}{}\xintFor* ##1in{\xintSeq{1}{3}}\do{%
+ &\Block[fill=gray!15]{}{\ifboolKV[Trio]{VideRepere}{}{\stepcounter{PfCTrioLettre}\Alph{PfCTrioLettre}}}%
+ }\\%
+ }{}%
+ \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}+2}}}\do{%%
+ \rule{0pt}{\PfCTrioHauteur}%
+ \ifboolKV[Trio]{Repere}{\Block[fill=gray!15]{}{\ifboolKV[Trio]{VideRepere}{}{##1}}}{}%
+ \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}+2}}}\do{%
+ \xintifForFirst{}{&}\Block{}{\ifboolKV[Trio]{Vide}{}{\PfCTrioMelange[\fpeval{7*(##1-1)+##2}]}}%
+ }\\
+ }%
+ \end{NiceTabular}%
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 04fdb56eeb..c40b96f846 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2023/03/24}%
+\def\filedate{2023/04/15}%
\let\PfCfiledate\filedate%
-\def\fileversion{0.99-z-g}%
+\def\fileversion{0.99-z-i}%
\let\PfCfileversion\fileversion%
\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
@@ -570,6 +570,9 @@
}%\raisebox
}
+\input{PfCJeuRangement}
+\input{PfCTrio}
+\input{PfCCalculsFractions}
\input{PfCDecDeci}
\input{PfCKakurasu}
\input{PfCMidpoint}
@@ -638,6 +641,7 @@
\input{PfCSommeAngles}
\input{PfCPythagore}
\input{PfCDistributivite}
+\input{PfCFactorisation}
\input{PfCDecomposerNombrePremier}
\input{PfCSimplifierFraction}
\input{PfCThales}
diff --git a/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp b/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
index dd49ba8c3b..e19152c695 100644
--- a/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
+++ b/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
@@ -1559,7 +1559,7 @@ vardef axes=
axx=image(
drawarrow (x.so*cm,y.origine)--(x.ne*cm,y.origine);
drawarrow (x.origine,y.so*cm)--(x.origine,y.ne*cm);
- label.llft(btex $O$ etex,z.origine);
+ label.llft(LATEX($O$),z.origine);
);
axx
enddef;
diff --git a/macros/latex/contrib/profcollege/metapost/PfCObjets.mp b/macros/latex/contrib/profcollege/metapost/PfCObjets.mp
index 964cfedd8a..3d6571c808 100644
--- a/macros/latex/contrib/profcollege/metapost/PfCObjets.mp
+++ b/macros/latex/contrib/profcollege/metapost/PfCObjets.mp
@@ -42,6 +42,120 @@ Transparence:=false;
boolean couleurz;%pour gérer l'affichage "des lignes" de niveaux
couleurz:=false;
+vardef AffichagePfC[]=
+ save _affi;
+ picture _affi;
+ color Fc[][];color cou[];
+ tapj:=0;
+ for k=0 upto apj.@:
+ cpt[tapj]:=tapj;
+ Fc[tapj].nb:=OTFc.@[k].nb;
+ for l=1 upto Fc[tapj].nb:
+ Fc[tapj][l]:=OTFc.@[k][l];
+ endfor;
+ Fc[tapj].iso:=OTFc.@[k].iso;
+ ALT[tapj]:=ALT.@[k];
+ Vue[tapj]:=Vue.@[k];
+ tapj:=tapj+1;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ %if Transparence :
+ for k=0 upto tapj:
+ if Vue[cpt[k]]=false:
+% fill for l=1 upto Fc[cpt[k]].nb:
+% Projette(Fc[cpt[k]][l])--
+% endfor
+% cycle withcolor abs(lumin(cpt[k]))*cou[cpt[k]];
+% if traits=true:
+ draw Projette(Fc[cpt[k]][1]) for l=2 upto Fc[cpt[k]].nb-1:
+ --Projette(Fc[cpt[k]][l])
+ endfor
+ dashed evenly withpen pencircle scaled0.25 withcolor 0.7white;
+% fi;
+ fi;
+ endfor;
+ for k=0 upto tapj:
+ if Vue[cpt[k]]:
+% transparence for l=1 upto Fc[cpt[k]].nb:
+% Projette(Fc[cpt[k]][l])--
+% endfor
+% cycle;
+% if traits=true:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.5 withcolor 0.25white;
+% fi;
+ fi;
+ endfor;
+enddef;
+
+vardef AffichageEquateur[]=
+ save _affi;
+ picture _affi;
+ color Fc[][];color cou[];
+ tapj:=0;
+ for k=0 upto apj.@:
+ cpt[tapj]:=tapj;
+ Fc[tapj].nb:=OTFc.@[k].nb;
+ for l=1 upto Fc[tapj].nb:
+ Fc[tapj][l]:=OTFc.@[k][l];
+ endfor;
+ Fc[tapj].iso:=OTFc.@[k].iso;
+ ALT[tapj]:=ALT.@[k];
+ Vue[tapj]:=Vue.@[k];
+ tapj:=tapj+1;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ for k=0 upto tapj:
+ % if Vue[cpt[k]]=false:
+ draw Projette(Fc[cpt[k]][1])--Projette(Fc[cpt[k]][4])
+ if Vue[cpt[k]]=false:
+ dashed evenly;
+ fi;
+% endfor;
+% for k=0 upto tapj:
+% if Vue[cpt[k]]:
+% else:
+% draw Projette(Fc[cpt[k]][1])--Projette(Fc[cpt[k]][4]);
+% fi;
+ endfor;
+ drawoptions();
+enddef;
+
+vardef AffichageGreenwich[]=
+ save _affi;
+ picture _affi;
+ color Fc[][];color cou[];
+ tapj:=0;
+ for k=0 upto apj.@:
+ cpt[tapj]:=tapj;
+ Fc[tapj].nb:=OTFc.@[k].nb;
+ for l=1 upto Fc[tapj].nb:
+ Fc[tapj][l]:=OTFc.@[k][l];
+ endfor;
+ Fc[tapj].iso:=OTFc.@[k].iso;
+ ALT[tapj]:=ALT.@[k];
+ Vue[tapj]:=Vue.@[k];
+ tapj:=tapj+1;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ for k=0 upto tapj:
+ draw Projette(Fc[cpt[k]][1])--Projette(Fc[cpt[k]][2])
+ if Vue[cpt[k]]=false:
+ dashed evenly;
+ fi;% withpen pencircle scaled0.75;
+ endfor;
+% for k=0 upto tapj:
+% if Vue[cpt[k]]:
+% draw Projette(Fc[cpt[k]][1])--Projette(Fc[cpt[k]][2]);
+% fi;
+% endfor;
+enddef;
+
vardef AffichageObjet[]=
save _affi;
picture _affi;
@@ -668,6 +782,177 @@ vardef ObjetSphereNew[](expr Rn)=
apj.@:=apj-1;
enddef;
+vardef ObjetSpherePfC[](expr Rn)=
+% subh:=12;
+% NewOeil:=(0,0,0);
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef;
+ umin:=-pi/2; upas:=pi/nb;% umax:=0;
+ vmin:=-pi; vpas:=2*pi/subh;% vmax:=2*pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto nb-1:
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));%1
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));%2
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));%3
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));%4
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))<0:%OTFc.@[apj][1]
+ Vue.@[apj]:=false;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=true;coul.@[apj]:=incolor;
+% drawarrow Projette(OTFc.@[apj].iso)--Projette(OTFc.@[apj].iso+Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]));
+% drawarrow Projette(OTFc.@[apj].iso)--Projette(NewOeil-OTFc.@[apj].iso);
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetSphereCabinet[](expr Rn)=
+% Oeil:=(0,0,0);
+% subh:=subh;
+ % nb:=8;
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ vardef Famille(expr u,v)=(R*(cosd(u)*cosd(v),cosd(u)*sind(v),sind(u))) enddef;
+ umin:=-90; upas:=180/nb;% umax:=0;
+ vmin:=-180; vpas:=360/subh;% vmax:=2*pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto nb-1:%nb-1:
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=(Famille(umin+(k+1)*upas,vmin+l*vpas));%1
+ OTFc.@[apj][2]:=(Famille(umin+k*upas,vmin+l*vpas));%2
+ OTFc.@[apj][3]:=(Famille(umin+k*upas,vmin+(l+1)*vpas));%3
+ OTFc.@[apj][4]:=(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));%4
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ PfCPS:=ProduitScalaire(Oeil-OTFc.@[apj][1],Normal(OTFc.@[apj][1],OTFc.@[apj][2],OTFc.@[apj][3]))/1000;
+% PfCPS:=ProduitScalaire(Oeil,-OTFc.@[apj].iso)/1000;
+ if PfCPS<0:%ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))<0:%OTFc.@[apj][1]
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ %label(TEX("visible"&decimal(floor(0.01*ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj][1],OTFc.@[apj][2],OTFc.@[apj][3]))))),(0,0)+5mm*(0,-apj));
+% dotlabel.llft(decimal(1),Projette(OTFc.@[apj][1]));
+% dotlabel.llft(decimal(2),Projette(OTFc.@[apj][2]));
+% dotlabel.llft(decimal(4),Projette(OTFc.@[apj][4]));
+% drawarrow Projette(OTFc.@[apj][1])--Projette(OTFc.@[apj][1]+Normal(OTFc.@[apj][1],OTFc.@[apj][2],OTFc.@[apj][3]));
+% drawarrow Projette(OTFc.@[apj][1])--Projette(Oeil+OTFc.@[apj][1]);
+% label.rt(decimal(PfCPS)&"/Oeil-P1",Projette(OTFc.@[apj][1]+Normal(OTFc.@[apj][1],OTFc.@[apj][2],OTFc.@[apj][3])));
+ apj:=apj+1;
+ else:%if PfCPS>0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+% dotlabel.llft(decimal(1),Projette(OTFc.@[apj][1]));
+% dotlabel.llft(decimal(2),Projette(OTFc.@[apj][2]));
+% dotlabel.llft(decimal(3),Projette(OTFc.@[apj][3]));
+% dotlabel.llft(decimal(4),Projette(OTFc.@[apj][4]));
+% drawarrow Projette(OTFc.@[apj][1])--Projette(OTFc.@[apj][1]+Normal(OTFc.@[apj][1],OTFc.@[apj][2],OTFc.@[apj][3]));
+% drawarrow Projette(OTFc.@[apj][1])--Projette(Oeil+OTFc.@[apj][1]);
+% label(TEX(decimal(floor(ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))))),Projette(OTFc.@[apj].iso));
+% drawarrow Projette(OTFc.@[apj].1)--Projette(OTFc.@[apj].iso+Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]));
+% drawarrow Projette(OTFc.@[apj].iso)--Projette(NewOeil-OTFc.@[apj].iso);
+ apj:=apj+1;
+ fi;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetEquateur[](expr Rn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef;
+% umin:=-pi/2; upas:=pi/nb; umax:=pi/2;
+ umin:=-pi/nb; upas:=pi/nb; umax:=0;
+ vmin:=-pi; vpas:=2*pi/subh; vmax:=-pi+vpas;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto 0:%(nb-1):
+ for l=0 upto (subh-1):%(subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetGreenwich[](expr Rn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef;
+ umin:=-pi/2; upas:=pi/nb; umax:=pi;
+ vmin:=0; vpas:=2*pi/subh; vmax:=2*pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for l=0 upto 0:%(subh-1):
+ for k=0 upto nb-1:%(nb-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ umin:=-pi/2; upas:=pi/nb; umax:=pi;
+ vmin:=pi; vpas:=2*pi/subh; vmax:=2*pi;
+ for l=0 upto 0:
+ for k=0 upto nb-1:%(nb-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
vardef Objetcalotte[](expr Rn,Phib,Phih)=
Outcolor.@:=outcolor;
Incolor.@:=incolor;
diff --git a/macros/latex/contrib/profcollege/metapost/PfCSolid.mp b/macros/latex/contrib/profcollege/metapost/PfCSolid.mp
index 342b992167..bc4b9517ee 100644
--- a/macros/latex/contrib/profcollege/metapost/PfCSolid.mp
+++ b/macros/latex/contrib/profcollege/metapost/PfCSolid.mp
@@ -54,12 +54,18 @@ vardef Initialisation(expr r,t,p,d)=
Aux6:=Aux1*Aux2;
Aux7:=Aux3*Aux4;
Aux8:=Aux1*Aux4;
+ color Oeil;
+% if typerepre="cabinet":
+% Oeil=(Rho,0,0);
+% else:
+ Oeil=(Aux7,Aux8,Aux2)*Rho;
+% fi;
pointilles:="oui";
Lumiere:=Oeil;
enddef;
-vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2)
-enddef;
+%vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2)
+%enddef;
vardef sin(expr t) = sind(c*t) enddef;
@@ -104,11 +110,17 @@ enddef;
unit:=1;%pour les mises à l'échelle :) Merci pst-solides3d
vardef Projette(expr M)=
- %if typerepre="proj":
- % unit*(DE*(Xpart(GCoord(M)/Zpart(GCoord(M))),(Ypart(GCoord(M))/Zpart(GCoord(M)))))
- %elseif typerepre="persp":
- unit*(DE*(Xpart(GCoord(M)),Ypart(GCoord(M))))
- %fi
+ if typerepre="proj":
+ ((Xpart(GCoord(M)),Ypart(GCoord(M)))/Zpart(GCoord(M)))*DE*10%
+ elseif typerepre="persp":
+ (Xpart(GCoord(M)),Ypart(GCoord(M)))*unit*DE
+ elseif typerepre="cabinet":
+% (0.5*cosd(30)*Xpart(GCoord(M)),0.75*sind(30)*Ypart(GCoord(M)))*unit*DE
+ (Xpart(GCoord(M))+0.5*cosd(30)*Zpart(GCoord(M)),Ypart(GCoord(M))+0.5*sind(30)*Zpart(GCoord(M)))*20
+% (0.5*cosd(45)*Xpart(GCoord(M)),0.5*sind(45)*Ypart(GCoord(M)))*unit*DE
+% (Xpart(GCoord(M)),Ypart(GCoord(M)))*unit*DE
+ %(Xpart(GCoord(M)),Ypart(GCoord(M)))*10
+ fi
enddef;
vardef TraceAxes=
@@ -181,7 +193,6 @@ vardef Normal(expr vecun,vecde,vectr)=
enddef;
vardef ProduitScalaire(expr wec,mor)=
- %Mexp(Mlog redpart(wec) Mmul Mlog redpart(mor))+Mexp(Mlog greenpart(wec) Mmul Mlog greenpart(mor))+Mexp(Mlog bluepart(wec) Mmul Mlog bluepart(mor))
Xpart(wec)*Xpart(mor)+Ypart(wec)*Ypart(mor)+Zpart(wec)*Zpart(mor)
enddef;
%pour les rotations et translations
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
index 67586db55b..3eb3746590 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
index 1aa8261b74..f834c4545c 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
@@ -5,14 +5,12 @@
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
\documentclass[a4paper,french,11pt]{article}
-\def\PLversion{2.5.8}
-\def\PLdate{6 Avril 2023}
+\def\PLversion{2.6.0}
+\def\PLdate{13 Avril 2023}
\usepackage{ProfLycee}
\useproflyclib{piton,minted,pythontex}
-%\usepackage{lualatex-math}
-%\usepackage{luatexbase}
\usepackage[math-style=french]{fourier-otf}
-%\setsansfont{Fira Sans}[Scale=MatchLowercase]
+\usepackage{awesomebox}
\usepackage[lua]{tkz-euclide}
\usepackage{tkz-tab}
\tikzstyle{every picture}+=[remember picture]
@@ -73,6 +71,16 @@
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}
+\newtcolorbox{PART}[1][]{%
+ enhanced,top=3mm,bottom=3mm,
+ bottomtitle=2mm,arc=2pt,outer arc=0pt,
+ colframe=LightSteelBlue,colback=white,bicolor,
+ colbacklower=LightSteelBlue!15,coltitle=black,
+ fonttitle=\large\sffamily,
+ title=\centering Thème,
+ #1%
+}%
+
\tcbset{vignettes/.style={%
nobeforeafter,box align=base,boxsep=0pt,enhanced,sharp corners=all,rounded corners=southeast,%
boxrule=0.75pt,left=7pt,right=1pt,top=0pt,bottom=0.25pt,%
@@ -108,6 +116,22 @@
}
}
+\NewTCBListing{PresentationCodePL}{ O{blue} m }{%
+ enhanced,width=0.93\linewidth,flush right,boxrule=0.75pt,colframe=#1!75!Black,%
+ sharp corners,top=0mm,bottom=0mm,left=0.4em,right=5mm,%
+ before skip=\baselineskip,after skip=\baselineskip,%
+ colback=white,
+ fontupper=\footnotesize,fontlower=\footnotesize,%
+ watermark text={\faCode},watermark opacity=0.25,watermark zoom=0.50,%
+ title={{\scriptsize\faCode} Code \LaTeX},
+ lefttitle=0.4em,
+ fonttitle=\bfseries\footnotesize\sffamily,colbacktitle=darkgray!50!#1,%
+ listing engine=minted,minted style=colorful,minted language=tex,
+ minted options={tabsize=4,fontsize=\footnotesize,autogobble,breaklines=true},
+ #2,%
+ overlay={\draw[#1!75!black] ($(frame.north west)+(-0.035\linewidth,-0.025\linewidth)$) node[scale=1.66] {\faCogs} ;}
+}
+
\newtcblisting{codetex}[1][]{%
colback=white,colframe=red!75!black,title={\small \faCode} Code \LaTeX,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
@@ -117,7 +141,7 @@
\newtcolorbox{codesortie}[1][]{%
colback=white,colframe=red!75!black,title={\small \faArrowAltCircleRight[regular]} Sortie \LaTeX,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-\newtcolorbox{codeidee}[1][]{%
+\newtcolorbox{condeidee}[1][]{%
colback=white,colframe=PeachPuff!75!black,title={\small \faLightbulb[regular]} Idée(s),fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
\newtcolorbox{codeinfo}[1][]{%
@@ -232,6 +256,10 @@
\begin{document}
+\setlength{\aweboxleftmargin}{0.07\linewidth}
+\setlength{\aweboxcontentwidth}{0.93\linewidth}
+\setlength{\aweboxvskip}{8pt}
+
\pagestyle{fancy}
\maketitle
@@ -260,6 +288,7 @@
{\deblst} créer des arbres de probas \og classiques \fg \\
{\deblst} générer des listes d'entiers aléatoires (avec ou sans répétitions)\\
{\deblst} déterminer la mesure principale d'un angle \\
+{\deblst} calculer les lignes trigonométriques d'angles \og classiques \fg{} \\
{\deblst} \ldots}
~
@@ -295,13 +324,23 @@
\newpage
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Introduction}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
\part{Introduction}
\section{Le package ProfLycee}
\subsection{\og Philosophie \fg{} du package}
-\begin{codeidee}
+\begin{noteblock}
Ce \ctex{package}, très largement inspiré (et beaucoup moins abouti) de l'excellent \ctex{ProfCollege} de C. Poulain et des excellents \ctex{tkz-*} d'A. Matthes, va définir quelques outils pour des situations particulières qui ne sont pas encore dans \ctex{ProfCollege}.
On peut le voir comme un (maigre) complément à \ctex{ProfCollege}, et je précise que la syntaxe est très proche (car pertinente de base) et donc pas de raison de changer une \textit{équipe qui gagne} !
@@ -311,9 +350,9 @@ On peut le voir comme un (maigre) complément à \ctex{ProfCollege}, et je préc
Il se charge de manière classique, dans le préambule, par \ctex{\textbackslash usepackage\{ProfLycee\}}. Il charge des {packages} utiles, mais j'ai fait le choix de laisser l'utilisateur gérer ses autres {packages}, comme notamment \ctex{amssymb} qui peut poser souci en fonction de la \textit{position} de son chargement.
L'utilisateur est libre de charger ses autres {packages} utiles et habituels, ainsi que ses \textsf{polices} et \textsf{encodages} habituels !
-\end{codeidee}
+\end{noteblock}
-\begin{codeinfo}
+\begin{importantblock}
Le {package} \ctex{ProfLycee} charge et utilise les {packages} :
\begin{itemize}
@@ -324,43 +363,44 @@ Le {package} \ctex{ProfLycee} charge et utilise les {packages} :
\item \ctex{listofitems}, \ctex{xintexpr} , \ctex{xintbinhex}, \ctex{xintgcd} ;
\item \ctex{tabularray}, \ctex{fontawesome5}, \ctex{randomlist}, \ctex{fancyvrb}.
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{importantblock}
-\begin{codeidee}
+\begin{tipblock}
J'ai utilisé les {packages} de C. Tellechea, je vous conseille d'aller jeter un œil sur ce qu'il est possible de faire en \LaTeX{} avec \ctex{listofitems}, \ctex{randomlist}, \ctex{simplekv} ou encore \ctex{xstring} !
-\end{codeidee}
+\end{tipblock}
\subsection{Chargement du package}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%exemple de chargement pour une compilation en (pdf)latex
\documentclass{article}
\usepackage{ProfLycee}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
...
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%exemple de chargement pour une compilation en (xe/lua)latex
\documentclass{article}
\usepackage{ProfLycee}
\usepackage{fontspec}
...
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Librairies, option du package}\label{librairies}
-\begin{codeattention}
+\begin{warningblock}
\cmaj{2.5.0} Le package fonctionne désormais avec un système de \clib{librairies}, qui utilisent et chargent des packages spécifiques, avec des compilations particulières, donc l'utilisateur utilisera un système de chargement similaire à celui de \textsf{tcolorbox} ou \textsf{tikz}, dans le préambule, et une fois le package appelé.
-\end{codeattention}
+\end{warningblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\usepackage{ProfLycee}
\useproflyclib{...,...}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Les librairies disponibles seront indiquées dans les sections spécifiques. Pour le moment, il existe :
\begin{itemize}
@@ -368,13 +408,14 @@ Les librairies disponibles seront indiquées dans les sections spécifiques. Pou
\item \clib{minted} (page \pageref{pytminted}) ;
\item \clib{pythontex} (page \pageref{pythontex}).
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codeattention}
+\begin{warningblock}
\cmaj{2.5.8} Pour le package \ctex{piton}, la version minimale requise est la \ctex{1.5} pour bénéficier d'un rendu optimal (au niveau des marges) de la présentation du code \textsf{Python}.
-\end{codeattention}
+\end{warningblock}
-\begin{codeinfo}
+\begin{noteblock}
En compilant (notamment avec les librairies \clib{minted} et \clib{pythontex}) on peut spécifier des répertoires particuliers pour les (ou des) fichiers auxiliaires.
Avec l'option \Cle{build}, l'utilisateur a la possibilité de placer les fichiers temporaires de \clib{minted} et \clib{pythontex} dans un répertoire \menu{build} du répertoire courant.
@@ -382,23 +423,24 @@ Avec l'option \Cle{build}, l'utilisateur a la possibilité de placer les fichier
\smallskip
Dans ce cas il faut créer au préalable le répertoire \menu{build} avant de compiler un fichier, pour éviter toute erreur !
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
\usepackage[build]{ProfLycee}
\useproflyclib{...}
...
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
L'option \Cle{build} charge certains packages (librairies \clib{minted} et \clib{pythontex}) avec les options :
\begin{itemize}
\item \ctex{\textbackslash setpythontexoutputdir\{./build/pythontex-files-\textbackslash jobname\}}
\item \ctex{\textbackslash RequirePackage[outputdir=build]\{minted\}}
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
\pagebreak
@@ -406,7 +448,7 @@ L'option \Cle{build} charge certains packages (librairies \clib{minted} et \clib
\subsection{Le système de \og clés/options \fg}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de conserver -- autant que faire se peut -- l'idée de \Cle{Clés} qui sont :
%
\begin{itemize}
@@ -424,27 +466,22 @@ Pour certaines commandes, le système de \Cle{Clés} pose quelques soucis, de ce
\item les \Cle{Clés} peuvent être mises dans n'importe quel ordre, elles peuvent être omises lorsque la valeur par défaut est conservée ;
\item les \textsf{arguments} doivent, eux, être positionnés dans le \textit{bon ordre}.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Les \textsf{commandes} et \textsf{environnements} présentés seront explicités via leur \textsf{syntaxe} avec les \textsf{options/clés} ou \textsf{arguments}.
Autant que faire se peut, des exemples/illustrations/remarques seront proposés à chaque fois.
+\end{noteblock}
-\smallskip
-
-Les \textsf{codes} seront présentés dans des \textsf{boîtes} \textcolor{red!75!black}{{\small \faCode} Code \LaTeX}, si possible avec la \textsf{sortie} dans la même boîte, et sinon la \textsf{sortie} sera visible dans des \textsf{boîtes} \textcolor{red!75!black}{{\small \faArrowAltCircleRight[regular]} Sortie \LaTeX}.
-
-Les \textsf{clés} ou \textsf{options} seront présentées dans des \textsf{boîtes} \textcolor{ForestGreen}{{\small \faPaperclip} Clés}.
-\end{codeinfo}
-
-\begin{codeinfo}
+\begin{noteblock}
À noter que certaines commandes disponibles sont liées à un environnement \ctex{tikzpicture}, elles peuvent ne pas être autonomes mais permettent de conserver -- en parallèle -- toute commande liée à \TikZ{} !
-\end{codeinfo}
+\end{noteblock}
\subsection{Compilateur(s)}
-\begin{codeinfo}
+\begin{noteblock}
Le package \ctex{ProfLycee} est compatible avec les compilateurs classiques : \textsf{latex}, \textsf{pdflatex} ou encore \textsf{lualatex}.
\smallskip
@@ -456,11 +493,12 @@ En ce qui concerne les codes \textsf{librairies}, il faudra :
\item \clib{minted} : compiler avec \textsf{shell-escape} (ou \textsf{write18}) ;
\item \clib{piton} : compiler en \hologo{LuaLaTeX} et \textsf{shell-escape} (ou \textsf{write18}).
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
\subsection{Problèmes éventuels\ldots}
-\begin{codeinfo}
+\begin{noteblock}
Certaines \textsf{commandes} sont à intégrer dans un environnement \TikZ, afin de pouvoir rajouter des éléments, elles ont été testés dans des environnement \ctex{tikzpicture}, à vérifier que la gestion des axes par l'environnement \ctex{axis} est compatible\ldots
\smallskip
@@ -470,7 +508,7 @@ Certains packages ont une fâcheuse tendance à être tatillons sur leurs option
\smallskip
En dehors de cela, ce sont des tests multiples et variés qui permettront de détecter d'éventuels bugs !
-\end{codeinfo}
+\end{noteblock}
\pagebreak
@@ -486,15 +524,25 @@ En dehors de cela, ce sont des tests multiples et variés qui permettront de dé
\newpage
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Liste des commandes}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
\part{Liste des commandes, par thème}
-\begin{codeinfo}
+\begin{noteblock}
\cmaj{2.0.0} Cette section contient un \textit{résumé} des différentes commandes et environnements disponibles dans \ctex{ProfLycee}.
Elles sont présentées de manière \textit{succincte}, mais elles sont présentées de manière \textit{détaillée} dans la suite de la documentation.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%Résolution approchée d'une équation f(x)=k
\ResolutionApprochee[clés]{équation}[macro]
@@ -507,9 +555,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%Mise en forme de la conclusion d'un seuil
\SolutionSeuil[options]{fonction associée}{seuil}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%fenêtre de repérage en tikz et courbe
\GrilleTikz[options][options grille ppale][options grille second.]
\AxesTikz[options] \AxexTikz[options]{valeurs} \AxeyTikz[options]{valeurs}
@@ -523,9 +571,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%schémas pour le signe affine/trinôme, dans un environnement tikz
\MiniSchemaSignes(*)[clés]<options tikz>
\MiniSchemaSignesTkzTab[options]{numligne}[échelle][décalage horizontal]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%présentation de code Python
\begin{CodePythonLst}(*)[largeur]{commandes tcbox}...\end{CodePythonLst}
\begin{CodePythonLstAlt}(*)[largeur]{commandes tcbox}...\end{CodePythonLstAlt}
@@ -543,11 +591,11 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%présentation de pseudocode
\begin{PseudoCode}(*)[largeur]{commandes tcbox}...\end{PseudoCode}
\begin{PseudoCodeAlt}(*)[largeur]{commandes tcbox}...\end{PseudoCodeAlt}
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%terminal OS
\begin{TerminalWin}[largeur]{clés}[options]...\end{TerminalWin}
\begin{TerminalUnix}[largeur]{clés}[options]...\end{TerminalUnix}
@@ -555,18 +603,18 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%code Capytale
\CartoucheCapytale(*)[options]{code capytale}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%pavé et tétraèdre, dans un environnement tikz
\PaveTikz[options]
\TetraedreTikz[options]
%cercle trigo, dans un environnement tikz
\CercleTrigo[clés]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%paramètres d'une régression linéaire, nuage de points
\CalculsRegLin[clés]{listeX}{listeY}
\PointsRegLin[clés]{listeX}{listeY}
@@ -584,9 +632,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%boîte à moustaches, dans un environnement tikz
\BoiteMoustaches[options]
\BoiteMoustachesAxe[options]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%loi binomiale B(n,p)
\CalcBinomP{n}{p}{k}
\CalcBinomC{n}{p}{a}{b}
@@ -598,9 +646,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
\CalcPoissC{l}{a}{b}
\PoissonP(*)[prec]{l}{k}
\PoissonC(*)[prec]{l}{a}{b}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%loi géométrique G(p)
\CalcGeomP{p}{k}
\CalcGeomC{l}{a}{b}
@@ -612,9 +660,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
\CalcHypergeomP{N}{n}{m}{a}{b}
\HypergeomP{N}{n}{m}{k}
\HypergeomC{N}{n}{m}{a}{b}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%loi normale N(m,s)
\CalcNormC{m}{s}{a}{b}
\NormaleC(*)[prec]{m}{s}{a}{b}
@@ -630,9 +678,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%schémas lois continues
\LoiNormaleGraphe[options]<options tikz>{m}{s}{a}{b}
\LoiExpoGraphe[options]<options tikz>{l}{a}{b}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%entier aléatoire entre a et b
\NbAlea{a}{b}{macro}
%nombre décimal (n chiffres après la virgule) aléatoire entre a et b+1 (exclus)
@@ -641,17 +689,17 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
\VarNbAlea{macro}{calcul}
%liste d'entiers aléatoires
\TirageAleatoireEntiers[options]{macro}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%arrangement Anp
\Arrangement(*)[option]{p}{n}
%arrangement Cnp (p parmi n)
\Combinaison(*)[option]{p}{n}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%conversions
\ConversionDecBin(*)[clés]{nombre}
\ConversionBinHex[clés]{nombre}
@@ -661,9 +709,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%PGCD présenté
\PresentationPGCD[options]{a}{b}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%conversion en fraction, simplification de racine
\ConversionFraction(*)[option]{argument}
\SimplificationRacine{expression}
@@ -674,15 +722,26 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
%trinôme, trinôme aléatoire
\EcritureTrinome[options]{a}{b}{c}
-%mesure principale
+%mesure principale, lignes trigo
\MesurePrincipale[options]{angle}
-\end{codetex}
+\LigneTrigo(*)[booléens]{cos/sin/tan}(angle)
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%sudomaths
\SudoMaths[options]{liste}
\begin{EnvSudoMaths}[options]{grille}...\end{EnvSudoMaths}
-\end{codetex}
+\end{PresentationCodePL}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour l'analyse}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
@@ -692,30 +751,30 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.1.4} L'idée est de proposer une commande pour résoudre, de manière approchée, une équation du type $f(x)=k$ sur un intervalle (fermé) donné.
\smallskip
La méthode utilisée est la \textbf{dichotomie}, pour plus de rapidité que la méthode \textit{simple} par balayage.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ResolutionApprochee[clés]{équation}[macro]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\ResolutionApprochee[Intervalle=0:10]{x**3-2*x**2-x-1=2}%
$x_0 \approx \num[minimum-decimal-digits=2]{\masolutiond}$ par défaut ;\\
$x_0 \approx \num[minimum-decimal-digits=2]{\masolutione}$ par excès ;\\
$x_0 \approx \num[minimum-decimal-digits=2]{\masolutiona}$ arrondi à $10^{-2}$.\\
\hfill\includegraphics[scale=0.45]{./graphics/pl-solve_a}\hfill~
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Clés et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques explications sur les \Cle{clés} et sur les arguments :
\begin{itemize}
@@ -723,16 +782,19 @@ Quelques explications sur les \Cle{clés} et sur les arguments :
\item la clé (obligatoire !) \Cle{Intervalle} qui permet de préciser l'intervalle initial de recherche ;
\item la clé \Cle{Variable} qui permet de spécifier la variable de l'équation ;\hfill{}défaut \Cle{x}
\item l'argument \textit{obligatoire} est l'équation, sous la forme $f(\ldots)=k$ (ou $f(\ldots)$ pour $f(\ldots)=0$) ;
- \item l'argument \textit{optionnel} est la base de la \textit{<macro>} qui sert à stocker les valeurs :\hfill{}défaut \Cle{masolution}
+ \item l'argument \textit{optionnel} est la base de la \textit{<macro>} qui sert à stocker les valeurs :
+
+ \hfill{}défaut \Cle{masolution}
\begin{itemize}
\item \ctex{\textbackslash<macro>d} pour la valeur approchée par défaut ;
\item \ctex{\textbackslash<macro>e} pour la valeur approchée par excès ;
\item \ctex{\textbackslash<macro>a} pour la valeur approchée.
\end{itemize}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\ResolutionApprochee[Precision=4,Intervalle=0:2]{exp(0.5*x)+x**2-4=0}%
Une valeur approchée, à $10^{-4}$ près, d'une solution de $\text{e}^{0,5x}+x^2-4=0$ sur $\left[0;2\right]$ est $\beta$ avec :
\begin{itemize}
@@ -747,7 +809,7 @@ Une valeur approchée, à $10^{-2}$ près d'une solution de $3t\,\rm{e}^{-0,5t+1
\item $t_1 \approx \num[minimum-decimal-digits=2]{\SolAe}$ par excès ;
\item $t_1 \approx \num[minimum-decimal-digits=2]{\SolAa}$.
\end{itemize}
-\ResolutionApprochee[Precision=3,Variable=t,Intervalle=2:10]{3*t*exp(-0.5*t+1)=4}[SolB]%
+\ResolutionApprochee[Precision=3,Variable=t,Intervalle=2:10]{3*t*exp(-0.5*t+1)=4}[SolB]
Une valeur approchée, à $10^{-2}$ près d'une solution de $3t\,\text{e}^{-0,5t+1}=4$ est $t_2$ avec :
\begin{itemize}
\item $t_2 \approx \num[minimum-decimal-digits=2]{\SolBd}$ par défaut ;
@@ -760,7 +822,7 @@ Une valeur approchée, à $10^{-2}$ près d'une solution de $3t\,\text{e}^{-0,5t
\hfill\includegraphics[scale=0.45]{./graphics/pl-solve_b}~~
\includegraphics[scale=0.45]{./graphics/pl-solve_c}~~
\includegraphics[scale=0.45]{./graphics/pl-solve_d}\hfill~
-\end{codetex}
+\end{PresentationCodePL}
\newpage
@@ -768,22 +830,22 @@ Une valeur approchée, à $10^{-2}$ près d'une solution de $3t\,\text{e}^{-0,5t
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.0.4} L'idée est de présenter l'obtention d'une solution approchée d'équation par balayage, dans le cadre du TVI par exemple. Les calculs et tests sont effectués grâce au package \ctex{xinttools}, et le formatage par \ctex{tabularray} et \ctex{sinuitx}.
-\end{codeidee}
+\end{tipblock}
-\begin{codeattention}
+\begin{warningblock}
Le code ne trouve pas la solution, il met \textit{juste} en forme mais effectue quand même les calculs d'images et les tests.
-\end{codeattention}
+\end{warningblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\SolutionTVI[options]{fonction}{valeur}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Clés et arguments}
-\begin{codecles}
-Plusieurs \Cle{Clés} sont disponibles pour cette commande, relative donc à une équation du type $f(x)=k$ :
+\begin{cautionblock}
+Plusieurs \Cle{Clés} sont disponibles pour cette commande, relative à une équation du type $f(x)=k$ :
\begin{itemize}
\item la clé \Cle{NomFct} qui permet de spécifier le nom de la fonction ;\hfill{}défaut \Cle{f}
@@ -799,41 +861,42 @@ Plusieurs \Cle{Clés} sont disponibles pour cette commande, relative donc à une
\smallskip
Le premier argument \textit{obligatoire} est la fonction, en syntaxe \ctex{xint} et avec comme variable $x$, et le second la valeur de $k$.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Pour $f(x)=0$ avec $f(x)=x^2-2$. On obtient \SolutionTVI[va=1.414,vb=1.415,Precision=3]{x**2-2}{0}.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Avec $\varphi(t)=3t\,\rm{e}^{-0,5t+1}=5$,
-\SolutionTVI[Majuscule=false,Calculatrice,va=1.02,vb=1.03,NomFct=\varphi]{3*x*exp(-0.5*x+1)}{5}
-\end{codetex}
+\SolutionTVI[Majuscule=false,Calculatrice,va=1.02,vb=1.03,NomFct=\varphi]
+ {3*x*exp(-0.5*x+1)}{5}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
On s'intéresse à $g(x)=\num{1,5}$ avec $g(x)=\ln(x)$.\\
\SolutionTVI%
[Balayage,Stretch=1.5,va=4.48,vb=4.49,NomFct=g,Precision=4,NomSol={x_0}]{log(x)}{1.5}.
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Interaction avec la commande de résolution approchée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.1.4} L'idée est de récupérer les valeurs par défaut et par excès pour le TVI grâce à la commande \ctex{\textbackslash ResolutionApprochee}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
On s'intéresse à $g(x)=\num{1,5}$ avec $g(x)=\ln(x)$ sur l'intervalle $\left[3;5\right]$.
\ResolutionApprochee[Intervalle=3:5]{log(x)=1.5}[SolLn]
\SolutionTVI%
[Balayage,Stretch=1.5,va={\SolLnd},vb={\SolLne},
NomFct=g,Precision=4,NomSol={x_0}]{log(x)}{1.5}.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
À terme, peut-être que la commande \ctex{\textbackslash ResolutionApprochee} sera intégrée dans la commande \ctex{\textbackslash SolutionTVI} afin d'automatiser encore plus le procédé.
-\end{codeinfo}
+\end{noteblock}
\newpage
@@ -841,34 +904,35 @@ On s'intéresse à $g(x)=\num{1,5}$ avec $g(x)=\ln(x)$ sur l'intervalle $\left[3
\subsection{Idées}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.0.3} L'idée est de proposer des commandes pour effectuer des calculs avec des suites récurrentes du type $u_{n+1}=f\big(u_n\big)$ :
\begin{itemize}
\item calcul de termes avec possibilité d'arrondir ;
\item présentation de la conclusion de la recherche d'un seuil du type $u_n > S$ ou $u_n < S$.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeattention}
+\begin{warningblock}
\cmaj{2.1.0} Le code pour le seuil \textbf{trouve} également le rang cherché, il met en forme et effectue les calculs d'images.
\smallskip
\cmaj{2.0.5} Le choix a été fait de faire les calculs en mode \ctex{float} pour éviter les dépassements de capacité de \ctex{xint} liés aux boucles\ldots
-\end{codeattention}
+\end{warningblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%commande pour calculer et formater
\CalculTermeRecurrence[options]{fonction associée}
%mise en forme de la conclusion d'un seuil
\SolutionSeuil[options]{fonction associée}{seuil}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Clés et arguments}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{Clés} sont disponibles pour la commande du calcul d'un terme :
\begin{itemize}
@@ -881,9 +945,9 @@ Plusieurs \Cle{Clés} sont disponibles pour la commande du calcul d'un terme :
\smallskip
L'argument \textit{obligatoire} est la fonction associée à la suite, en syntaxe \ctex{xint} et avec comme variable $x$.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
Avec $\begin{dcases} u_0 = 50 \\ u_{n+1}=\dfrac{1}{u_n+2} \end{dcases}$.
On obtient $u_{10} \approx \CalculTermeRecurrence[No=0,UNo=50,N=10]{1/(x+2)}$.
@@ -891,9 +955,9 @@ On obtient $u_{10} \approx \CalculTermeRecurrence[No=0,UNo=50,N=10]{1/(x+2)}$.
On obtient $u_{15} \approx \CalculTermeRecurrence[Precision=4,No=0,UNo=50,N=15]{1/(x+2)}$.
On obtient $u_{20} \approx \CalculTermeRecurrence[Precision=6,No=0,UNo=50,N=20]{1/(x+2)}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
Avec $u_0 = 50$ et $u_{n+1}=\dfrac{1}{u_n+2}$.
\smallskip
@@ -907,9 +971,9 @@ On obtient $u_{15} \approx \CalculTermeRecurrence[Precision=4,No=0,UNo=50,N=15]{
\smallskip
On obtient $u_{20} \approx \CalculTermeRecurrence[Precision=6,No=0,UNo=50,N=20]{1/(x+2)}$ \hfill~avec choix de la précision à $10^{-6}$.
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{Clés} sont disponibles pour la commande du seuil :
\begin{itemize}
@@ -930,18 +994,20 @@ Plusieurs \Cle{Clés} sont disponibles pour la commande du seuil :
\smallskip
Le premier argument \textit{obligatoire} est la fonction associée à la suite, en syntaxe \ctex{xint} et avec comme variable $x$, et le second est le seuil à dépasser.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Avec $\begin{dcases} u_1 = 2 \\ u_{n+1}=1+\dfrac{1+u_n^2}{1+u_n} \end{dcases}$,
on cherche $n$ tel que $u_n > 5$.\\
\SolutionSeuil[Balayage,No=1,UNo=2]{1+(1+x**2)/(1+x)}{5}.
-~\SolutionSeuil[Calculatrice,Precision=4,No=1,UNo=2,Conclusion=false]{1+(1+x**2)/(1+x)}{5}.\\
-\end{codetex}
+
+\SolutionSeuil[Calculatrice,Precision=4,No=1,UNo=2,Conclusion=false]%
+{1+(1+x**2)/(1+x)}{5}.
+\end{PresentationCodePL}
\subsection{Exemple d'utilisation}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Avec $\begin{dcases} u_1 = 2 \\ u_{n+1}=1+\dfrac{1+u_n^2}{1+u_n} \end{dcases}$,
on obtient le tableau de valeurs suivant :
\begin{tabular}{c|c}
@@ -951,35 +1017,47 @@ on obtient le tableau de valeurs suivant :
\end{tabular}\\
\SolutionSeuil[Precision=4,No=1,UNo=2,Simple]{1+(1+x**2)/(1+x)}{10} (Ainsi $u_n > 10$ à partir de $n=\the\CompteurSeuil$)
-\end{codetex}
+\end{PresentationCodePL}
\newpage
-\part{Outils graphiques, via \TikZ}
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils graphiques}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
-\section{Repérage et tracé de courbes, en \TikZ}\label{reperagetikz}
+\newpage
+
+\part{Outils graphiques}
+
+\section{Repérage et tracé de courbes}\label{reperagetikz}
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.1.1} L'idée est de proposer des commandes \textit{simplifiées} pour tracer un repère, en \TikZ, avec :
\begin{itemize}
\item axes et graduations, grille ;
\item courbe.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Au niveau du code, il y aura donc plusieurs \textit{aspects} :
\begin{itemize}
\item le paramétrage de la fenêtre graphique directement dans la déclaration de l'environnement ;
\item les commandes de tracés avec options et clés.
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%version basique
\begin{tikzpicture}[paramètres]
%grille et axes
@@ -990,9 +1068,9 @@ Au niveau du code, il y aura donc plusieurs \textit{aspects} :
%courbe
\CourbeTikz[options]{fonction}{valxmin:valxmax}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%version simplifiée
\begin{tikzpicture}[<paramètres>]
%grille et axes
@@ -1000,9 +1078,9 @@ Au niveau du code, il y aura donc plusieurs \textit{aspects} :
%courbe
\CourbeTikz[options]{fonction}{valxmin:valxmax}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{tikzpicture}%
[x=0.1cm,y=0.0167cm, %unités
xmin=0,xmax=60,xgrille=5,xgrilles=5, %axe Ox
@@ -1011,13 +1089,11 @@ Au niveau du code, il y aura donc plusieurs \textit{aspects} :
\CourbeTikz[line width=1.25pt,ForestGreen,samples=250]%
{\x*\x*exp(-0.05*\x)+1}{0:60} %courbe
\end{tikzpicture}
-\end{codesortie}
-
-\pagebreak
+\end{PresentationCodePL}
\subsection{Commandes, clés et options}
-\begin{codeinfo}
+\begin{noteblock}
Les \Cle{paramètres} nécessaires à la bonne utilisation des commandes suivantes sont à déclarer directement dans l'environnement \ctex{tikzpicture}, seules les versions \og x \fg{} sont présentées ici:
\begin{itemize}
@@ -1033,23 +1109,24 @@ La fenêtre d'affichage (de sortie) sera donc \textit{portée} par le rectangle
\smallskip
Les commandes ont -- pour certaines -- pas mal de \Cle{clés} pour des réglages fins, mais dans la majorité des cas elles ne sont pas forcément \textit{utiles}.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\GrilleTikz[options][options grille ppale][options grille second.]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de tracer une grille principale et/ou une grille secondaire :
\begin{itemize}
\item les premières \Cle{clés} sont les booléens \Cle{Affp} et \Cle{Affs} qui affichent ou non les grilles ;\hfill~défaut \Cle{true}
\item les options des grilles sont en \TikZ. \hfill~défaut \Cle{thin,lightgray} et \Cle{very thin,lightgray}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}%
[x=0.1cm,y=0.0167cm, %unités
xmin=0,xmax=60,xgrille=5,xgrilles=5, %axe Ox
@@ -1063,9 +1140,9 @@ Cette commande permet de tracer une grille principale et/ou une grille secondair
ymin=0,ymax=240,ygrille=30,ygrilles=30] %axe Oy
\GrilleTikz[Affp=false][][orange,densely dotted]
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~
\begin{tikzpicture}%
[x=0.1cm,y=0.0167cm, %unités
@@ -1081,32 +1158,41 @@ Cette commande permet de tracer une grille principale et/ou une grille secondair
\GrilleTikz[Affp=false][][orange,densely dotted]
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
+
+\pagebreak
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\AxesTikz[options]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de tracer les axes, avec des \Cle{clés} :
\begin{itemize}
\item \Cle{Epaisseur} qui est l'épaisseur des axes ; \hfill~défaut \Cle{1pt}
\item \Cle{Police} qui est le style des labels des axes ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont}
- \item \cmaj{2.1.2} \Cle{ElargirOx} qui est le \% l'élargissement \Cle{global} ou \Cle{G/D} de l'axe $(Ox)$ ;\hfill~défaut \Cle{0/0.05}
- \item \cmaj{2.1.2} \Cle{ElargirOy} qui est le \% l'élargissement \Cle{global} ou \Cle{B/H} de l'axe $(Oy)$ ;\hfill~défaut \Cle{0/0.05}
+ \item \cmaj{2.1.2} \Cle{ElargirOx} qui est le \% l'élargissement \Cle{global} ou \Cle{G/D} de l'axe $(Ox)$ ;
+
+ \hfill~défaut \Cle{0/0.05}
+ \item \cmaj{2.1.2} \Cle{ElargirOy} qui est le \% l'élargissement \Cle{global} ou \Cle{B/H} de l'axe $(Oy)$ ;
+
+ \hfill~défaut \Cle{0/0.05}
\item \Cle{Labelx} qui est le label de l'axe $(Ox)$ ; \hfill~défaut \Cle{\${}x\$}
\item \Cle{Labely} qui est le label de l'axe $(Oy)$ ; \hfill~défaut \Cle{\${}y\$}
- \item \Cle{AffLabel} qui est le code pour préciser quels labels afficher, entre \Cle{x}, \Cle{y} ou \Cle{xy} ; \hfill~défaut \Cle{vide}
+ \item \Cle{AffLabel} qui est le code pour préciser quels labels afficher, entre \Cle{x}, \Cle{y} ou \Cle{xy} ;
+
+ \hfill~défaut \Cle{vide}
\item \Cle{PosLabelx} pour la position du label de $(Ox)$ en bout d'axe ; \hfill~défaut \Cle{right}
\item \Cle{PosLabely} pour la position du label de $(Oy)$ en bout d'axe ; \hfill~défaut \Cle{above}
\item \Cle{EchelleFleche} qui est l'échelle de la flèche des axes ; \hfill~défaut \Cle{1}
\item \Cle{TypeFleche} qui est le type de la flèche des axes.\hfill~défaut \Cle{latex}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%code tikz
\AxesTikz
@@ -1115,9 +1201,9 @@ Cette commande permet de tracer les axes, avec des \Cle{clés} :
[AffLabel=xy,Labelx={Nombre de jours},Labely={Nombre d'individus infectés, en centaines},%
PosLabelx={above left},PosLabely={above right},%
Police=\small\sffamily,ElargirOx=0,ElargirOy=0]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~
\begin{tikzpicture}%
[x=0.1cm,y=0.0167cm, %unités
@@ -1138,24 +1224,26 @@ Cette commande permet de tracer les axes, avec des \Cle{clés} :
Police=\small\sffamily]
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
-%les axes
+\pagebreak
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\AxexTikz[options]{valeurs}
\AxeyTikz[options]{valeurs}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} identiques pour les deux directions :
\begin{itemize}
\item \Cle{Epaisseur} qui est l'épaisseur des graduations ; \hfill~défaut \Cle{1pt}
\item \Cle{Police} qui est le style des labels des graduations ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont}
\item \Cle{PosGrad} qui est la position des graduations par rapport à l'axe ; \hfill~défaut \Cle{below} et \Cle{left}
- \item \Cle{HautGrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ; \hfill~défaut \Cle{4pt}
+ \item \Cle{HautGrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ;
+
+ \hfill~défaut \Cle{4pt}
\item le booléen \Cle{AffGrad} pour afficher les valeurs (formatés avec \ctex{num} donc dépendant de \ctex{sisetup}) des graduations ; \hfill~défaut \Cle{true}
\item le booléen \Cle{AffOrigine} pour afficher la graduation de l'origine ; \hfill~défaut \Cle{true}
\item le booléen \Cle{Annee} qui permet de ne pas formater les valeurs des graduations (type \textsf{année}) ;
@@ -1168,9 +1256,10 @@ Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} ide
\hfill~défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%code tikz
\AxexTikz[Police=\small]{0,5,...,55}
\AxeyTikz[Police=\small]{0,30,...,210}
@@ -1178,9 +1267,9 @@ Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} ide
\AxexTikz[Police=\small,HautGrad=0pt/4pt]{0,5,...,55}
\AxeyTikz[AffGrad=false,HautGrad=6pt]{0,30,...,210}
%des axes fictifs (en gris) sont rajoutés pour la lisibilité du code de sortie
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~
\begin{tikzpicture}%
[x=0.1cm,y=0.0167cm, %unités
@@ -1202,39 +1291,41 @@ Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} ide
\AxeyTikz[AffGrad=false,HautGrad=6pt]{0,30,...,210}
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[x=2cm,y=1cm,xmin=0,xmax={2*pi},xgrille=0.5,xgrilles=0.25,
ymin=-1.15,ymax=1.15,ygrille=0.5,ygrilles=0.25]
\GrilleTikz \AxesTikz
- \AxexTikz[Trigo]{{pi/6},{pi/4},{pi/3},{pi/2},{2*pi/3},{3*pi/4},{5*pi/6},pi,{7*pi/6},{5*pi/4}}
+ \AxexTikz[Trigo]{{pi/6},{pi/4},{pi/3},{pi/2},{2*pi/3},%
+ {3*pi/4},{5*pi/6},pi,{7*pi/6},{5*pi/4}}
\CourbeTikz[thick,blue,samples=250]{cos(deg(\x))}{0:2*pi}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{tikzpicture}
[x=2cm,y=1cm,xmin=0,xmax={2*pi},xgrille=0.5,xgrilles=0.25,
ymin=-1.15,ymax=1.15,ygrille=0.5,ygrilles=0.25]
\GrilleTikz \AxesTikz
- \AxexTikz[Trigo]{{pi/6},{pi/4},{pi/3},{pi/2},{2*pi/3},{3*pi/4},{5*pi/6},pi,{7*pi/6},{5*pi/4}}
+ \AxexTikz[Trigo]{{pi/6},{pi/4},{pi/3},{pi/2},{2*pi/3},%
+ {3*pi/4},{5*pi/6},pi,{7*pi/6},{5*pi/4}}
\CourbeTikz[thick,blue,samples=250]{cos(deg(\x))}{0:2*pi}
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La clé \Cle{Trigo} utilise, en interne, une commande qui permet de \textit{transformer} les abscisses, données en langage \TikZ, en fraction en \LaTeX.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}
+\begin{PresentationCodePL}{}
$\AffAngleRadian{0}$ \quad $\AffAngleRadian{pi}$ \quad $\AffAngleRadian{pi/4}$ \quad
$\AffAngleRadian{2*pi/3}$ \quad $\AffAngleRadian{-2*pi/3}$ \quad $\AffAngleRadian*{-2*pi/3}$
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Commandes annexes}
-\begin{codeinfo}
+\begin{noteblock}
Il existe, de manière marginale, quelques commandes complémentaires qui ne seront pas trop détaillées mais qui sont existent :
\begin{itemize}
@@ -1242,25 +1333,26 @@ Il existe, de manière marginale, quelques commandes complémentaires qui ne ser
\item \ctex{FenetreSimpleTikz} qui permet d'automatiser le tracé des grilles/axes/graduations dans leurs versions par défaut, avec peu de paramétrages ;
\item \ctex{OrigineTikz} pour rajouter le libellé de l'origine si non affiché par les axes.
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%code tikz
\FenetreTikz %on restreint les tracés
\FenetreSimpleTikz%
[options](opt axes)<opt axe Ox>{valeurs Ox}<opt axe Oy>{valeurs Oy}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer, en \textit{complément}, une commande simplifiée pour tracer une courbe en \TikZ.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\CourbeTikz[options]{formule}{domaine}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de rajouter une courbe sur le graphique (sans se soucier de la transformation de son expression) avec les arguments :
\begin{itemize}
@@ -1268,9 +1360,10 @@ Cette commande permet de rajouter une courbe sur le graphique (sans se soucier d
\item le premier \textit{obligatoire}, est - en langage \TikZ{} - l'expression de la fonction à tracer, donc avec \ctex{\textbackslash{}x} comme variable ;
\item le second \textit{obligatoire} est le domaine du tracé, sous la forme \ctex{valxmin:valxmax}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[x=0.1cm,y=0.0167cm, %unités
xmin=0,xmax=60,xgrille=5,xgrilles=5, %axe Ox
ymin=0,ymax=240,ygrille=30,ygrilles=30] %axe Oy
@@ -1280,9 +1373,9 @@ Cette commande permet de rajouter une courbe sur le graphique (sans se soucier d
\CourbeTikz[line width=1.25pt,ForestGreen,samples=250]%
{\x*\x*exp(-0.05*\x)+1}{0:60} %courbe
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{tikzpicture}%
[x=0.1cm,y=0.0167cm, %unités
xmin=0,xmax=60,xgrille=5,xgrilles=5,ymin=0,ymax=240,ygrille=30,ygrilles=30]
@@ -1291,22 +1384,22 @@ Cette commande permet de rajouter une courbe sur le graphique (sans se soucier d
\CourbeTikz[line width=1.25pt,ForestGreen,samples=250]%
{\x*\x*exp(-0.05*\x)+1}{0:60} %courbe
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Repère non centré en O}
-\begin{codeidee}
+\begin{tipblock}
Parfois on est amené à travailler dans des repères qui n'ont pas forcément pour origine $(0\,;\,0)$. De ce fait - pour éviter des erreurs de \ctex{dimension too large} liées à \TikZ{} - il faut \textit{décaler les axes} pour se ramener à une origine en $O$. L'idée est donc d'utiliser les commandes précédentes, sans se soucier des éventuelles transformations !
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2010,%
xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1710,ygrille=10,ygrilles=5]
\FenetreSimpleTikz<Annee,Police=\scriptsize>{1992,1994,...,2008}{1640,1650,...,1700}
\FenetreTikz
\CourbeTikz[line width=1.25pt,orange,samples=500]{-(\x-2000)*(\x-2000)+1700}{\xmin:\xmax}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
@@ -1314,7 +1407,7 @@ Parfois on est amené à travailler dans des repères qui n'ont pas forcément p
\subsection{Courbe d'interpolation}
-\begin{codeinfo}
+\begin{noteblock}
On va utiliser les notions suivantes pour paramétrer le tracé \og automatique \fg{} grâce à \ctex{..controls} :
%
\begin{itemize}
@@ -1337,19 +1430,20 @@ Pour déclarer les paramètres :
\item on peut mixer avec \averb|coeffs=C1§C2G/C2D§...|.
\end{itemize}
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
\subsection{Code, clés et options}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}
...
\SplineTikz[options]{liste}
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Certains paramètres et \Cle{clés} peuvent être gérés directement dans la commande \ctex{splinetikz} :
%
\begin{itemize}
@@ -1360,11 +1454,12 @@ Certains paramètres et \Cle{clés} peuvent être gérés directement dans la co
\item les points de contrôle , affichés ou non par la {clé booléenne} \Cle{AffPoints} ;\hfill{}défaut \Cle{false}
\item la taille des points de contrôle est géré par la {clé} \Cle{TaillePoints}.\hfill{}défaut \Cle{2pt}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
\subsection{Compléments sur les coefficients de \og compensation \fg}
-\begin{codeidee}
+\begin{tipblock}
Le choix a été fait ici, pour \textit{simplifier} le code, le travailler sur des courbes de Bézier.
Pour \textit{simplifier} la gestion des nombres dérivés, les points de contrôle sont gérés par leurs coordonnées \textit{polaires}, les \textsf{coefficients de compensation} servent donc -- grosso modo -- à gérer la position radiale.
@@ -1382,11 +1477,11 @@ Pour des intervalles \textit{étroits}, la \textit{pente} peut paraître abrupte
\medskip
Si jamais il existe (un ou) des points \textit{anguleux}, le plus simple est de créer les splines en plusieurs fois.
-\end{codeidee}
+\end{tipblock}
\subsection{Exemples}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\def\x{0.9cm}\def\y{0.9cm}
\def\xmin{-1}\def\xmax{11}\def\xgrille{1}\def\xgrilles{0.5}
@@ -1402,9 +1497,9 @@ Si jamais il existe (un ou) des points \textit{anguleux}, le plus simple est de
%splines
\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
\SplineTikz[AffPoints,Coeffs=3,Couleur=red]{\LISTE}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Avec des explications utiles à la compréhension :
\begin{center}
@@ -1416,11 +1511,11 @@ Avec des explications utiles à la compréhension :
\listecoeffs{3}{3}{3}{3}
\end{tikzpicture}
\end{center}
-\end{codeinfo}
+\end{noteblock}
\subsection{Avec une gestion plus fine des \og coefficients \fg}
-\begin{codeinfo}
+\begin{noteblock}
Dans la majorité des cas, le \textit{coefficient} \textcircled{3} permet d'obtenir une courbe (ou une portion) très satisfaisante !
Dans certains cas, il se peut que la portion paraisse un peu trop \og abrupte \fg{}.
@@ -1438,17 +1533,17 @@ On peut dans ce cas \textit{jouer} sur les coefficients de cette portion pour \t
\listecoeffs{3/3}{3/3}{3/3}{2/1}
\end{tikzpicture}
\end{center}
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
%splines
\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
\SplineTikz[AffPoints,Coeffs=3§3§3§2/1]{\LISTE}
...
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=5,ygrille=1,ygrilles=0.5]
%axes et grilles
@@ -1464,11 +1559,11 @@ On peut dans ce cas \textit{jouer} sur les coefficients de cette portion pour \t
\SplineTikz[AffPoints,Coeffs=3§3§3§2/1]{\LISTE}
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Conclusion}
-\begin{codeinfo}
+\begin{noteblock}
Le plus \og simple \fg{} est donc:
%
\begin{itemize}
@@ -1476,7 +1571,8 @@ Le plus \og simple \fg{} est donc:
\item de saisir la commande \ctex{\textbackslash SplineTikz[...]\{\textbackslash LISTE\}} ;
\item d'ajuster les options et coefficients en fonction du rendu !
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
\newpage
@@ -1484,23 +1580,23 @@ Le plus \og simple \fg{} est donc:
\subsection{Définitions}
-\begin{codeidee}
+\begin{tipblock}
En parallèle de l'outil \ctex{SplineTikz}, il existe l'outil \ctex{TangenteTikz} qui va permettre de tracer des tangentes à l'aide de la liste de points précédemment définie pour l'outil \ctex{SplineTikz}.
\smallskip
NB : il peut fonctionner indépendamment de l'outil \ctex{SplineTikz} puisque la liste des points de travail est gérée de manière autonome !
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}
...
\TangenteTikz[options]{liste}
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cela permet de tracer la tangente :
%
\begin{itemize}
@@ -1508,11 +1604,12 @@ Cela permet de tracer la tangente :
\item avec une épaisseur de \Cle{Epaisseur}, une couleur \Cle{Couleur} et un style additionnel \Cle{Style} ;
\item en la traçant à partir de \Cle{xl} avant \textsf{xi} et jusqu'à \Cle{xr} après \textsf{xi}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
\subsection{Exemple et illustration}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}
...
\def\LISTE{0/1.5/0§1/2/-0.333§2/0/-5}
@@ -1524,9 +1621,9 @@ Cela permet de tracer la tangente :
\TangenteTikz[xl=0.33,xr=0,Couleur=blue,Style=densely dashed,Point=3]{\LISTE}
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
On obtient le résultat suivant (avec les éléments rajoutés utiles à la compréhension) :
\begin{center}
@@ -1551,11 +1648,11 @@ On obtient le résultat suivant (avec les éléments rajoutés utiles à la comp
\draw[thick,darkgray] (4pt,1)--(-4pt,1) node[left,font=\sffamily] {1} ;
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Exemple avec les deux outils, et \og personnalisation \fg}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\tikzset{%
xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
xmax/.store in=\xmax,xmax/.default=5,xmax=5,
@@ -1585,9 +1682,9 @@ On obtient le résultat suivant (avec les éléments rajoutés utiles à la comp
%la courbe en elle-même
\SplineTikz[AffPoints,Coeffs=3,Couleur=cyan,Style=densely dotted]{\liste}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[x=0.5cm,y=0.5cm,xmin=0,xmax=16,xgrilles=1,ymin=0,ymax=16,ygrilles=1]
\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray] (\xmin,\ymin) grid (\xmax,\ymax) ;
@@ -1608,7 +1705,7 @@ On obtient le résultat suivant (avec les éléments rajoutés utiles à la comp
\SplineTikz[AffPoints,Coeffs=3,Couleur=cyan,Style=densely dotted]{\liste}
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -1616,7 +1713,7 @@ On obtient le résultat suivant (avec les éléments rajoutés utiles à la comp
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir une commande pour tracer (en \TikZ) un petit schéma pour \textit{visualiser} le signe d'une fonction affine ou d'un trinôme.
Le code est largement inspiré de celui du package \ctex{tnsana} même si la philosophie est un peu différente.
@@ -1628,27 +1725,27 @@ Comme pour les autres commandes \TikZ, l'idée est de laisser la possibilité à
\smallskip
\cmaj{2.1.9} Il est à noter que la version \textit{étoilée} rend la commande autonome, sans besoin de créer l'environnement \TikZ.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\MiniSchemaSignes*
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[<options>]
\MiniSchemaSignes[clés]
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
{\tikz[options] \MiniSchemaSignes[clés]}
%ou
\MiniSchemaSignes*[clés]<options tikzpicture>
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
\cmaj{2.1.9} La version \textit{étoilée} de la commande permet de basculer en mode \textit{autonome}, c'est-à-dire sans avoir besoin de créer son environnement \TikZ.
\smallskip
@@ -1665,9 +1762,9 @@ Le premier argument, \textit{optionnel} et entre \textsf{[...]}, contient les \C
\end{itemize}
Le second argument, \textit{optionnel} et entre \textsf{<...>}, permet de spécifier (pour la commande \textit{étoilée}), des options à passer à l'environnement \ctex{tikzpicture}.
-\end{codecles}
+\end{cautionblock}
-\begin{codecles}
+\begin{cautionblock}
Pour la clé \Cle{code}, il est construit par le type (\textsf{a} pour affine ou \textsf{p} comme parabole) puis les éléments caractéristiques (\textsf{a+} pour $a>0$, \textsf{d0} pour $\Delta=0$, etc) :
\begin{itemize}
@@ -1676,11 +1773,12 @@ Pour la clé \Cle{code}, il est construit par le type (\textsf{a} pour affine ou
\item \Cle{Code=pa+d+} := une parabole \textit{souriante} avec deux racines ;
\item etc
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
\pagebreak
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\MiniSchemaSignes*[Code=da+,Racines=-4]
~~~~
@@ -1702,9 +1800,9 @@ Pour la clé \Cle{code}, il est construit par le type (\textsf{a} pour affine ou
~~~~
\MiniSchemaSignes*[Code=pa-d0,Racines={-1},Couleur=magenta]
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\MiniSchemaSignes*[Code=da+,Racines=-4]
~~~~
@@ -1726,34 +1824,34 @@ Pour la clé \Cle{code}, il est construit par le type (\textsf{a} pour affine ou
~~~~
\MiniSchemaSignes*[Code=pa-d0,Racines={-1},Couleur=magenta]
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}
\MiniSchemaSignes[Largeur=3.5,Hauteur=1.5,Code=da-,Racines=\tfrac{-b}{a},Couleur=Plum]
\end{tikzpicture}
\MiniSchemaSignes*[Code=da-,Racines=\tfrac{-b}{a},Couleur=Plum]<x=1.75cm,y=1.5cm>
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
\subsection{Intégration avec tkz-tab}
-\begin{codeidee}
+\begin{tipblock}
Ces schémas peuvent être de plus utilisés, via la commande \ctex{MiniSchemaSignesTkzTab} pour illustrer les signes obtenus dans un tableau de signes présentés grâce au package \ctex{tkz-tab}.
Pour des raisons internes, le fonctionnement de la commande \ctex{MiniSchemaSignesTkzTab} est légèrement différent et, pour des raisons que j'ignore, le code est légèrement différent en \textit{interne} (avec une \textit{déconnexion} des caractères \textsf{:} et \textsf{\textbackslash}) pour que la librairie \TikZ{} \ctex{calc} puisse fonctionner (mystère pour le moment\ldots)
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}
%commandes tkztab
\MiniSchemaSignesTkzTab[options]{numligne}[echelle][décalage horizontal]
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Les \Cle{Clés} pour le premier argument \textit{optionnel} sont les mêmes que pour la version \textit{initiale} de la commande précédente.
En ce qui concerne les autres arguments :
@@ -1765,9 +1863,9 @@ En ce qui concerne les autres arguments :
\end{itemize}
À noter que si l'un des arguments optionnels (le n°3 et/ou le n°4) sont utilisés, il vaut mieux préciser les 2 !
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}
\tkzTabInit[]{$x$/1,$-2x+5$/1,$2x+4$/1,$p(x)$/1}{$-\infty$,$-2$,${2,5}$,$+\infty$}
@@ -1776,12 +1874,13 @@ En ce qui concerne les autres arguments :
\tkzTabLine{,-,z,+,z,-,}
\MiniSchemaSignesTkzTab[Code=da-,Racines={\tfrac{5}{2}},Couleur=blue]{1}
\MiniSchemaSignesTkzTab[Code=da+,Racines={-2},Couleur=purple]{2}
- \MiniSchemaSignesTkzTab[Code=pa-d+,Racines={-2/{\tfrac{5}{2}}},Couleur=orange]{3}[0.85][2]
+ \MiniSchemaSignesTkzTab[Code=pa-d+,Racines={-2/{\tfrac{5}{2}}},Couleur=orange]%
+ {3}[0.85][2]
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}
\tkzTabInit[]{$x$/1,$-2x+5$/1,$2x+4$/1,$p(x)$/1}{$-\infty$,$-2$,${2,5}$,$+\infty$}
@@ -1793,7 +1892,7 @@ En ce qui concerne les autres arguments :
\MiniSchemaSignesTkzTab[Code=pa-d+,Racines={-2/{\tfrac{5}{2}}},Couleur=orange]{3}[0.85][2]
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -1801,26 +1900,26 @@ En ce qui concerne les autres arguments :
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir une commande pour tracer (en \TikZ) la \og toile \fg{} permettant d'obtenir -- graphiquement -- les termes d'une suite récurrente définie par une relation $u_{n+1}=f(u_n)$.
\smallskip
Comme pour les autres commandes \TikZ, l'idée est de laisser l'utilisateur définir et créer son environnement \TikZ, et d'insérer la commande \ctex{ToileRecurrence} pour afficher la \og toile \fg.
-\end{codeidee}
+\end{tipblock}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
\begin{tikzpicture}[options]
...
\ToileRecurrence[clés][options du tracé][options supplémentaires des termes]
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{arguments} (optionnels) sont disponibles :
\begin{itemize}
@@ -1832,9 +1931,13 @@ Plusieurs \Cle{arguments} (optionnels) sont disponibles :
\item la clé \Cle{Uno} qui est la valeur du terme initial ;\hfill{}défaut \Cle{vide}
\item la clé \Cle{Nb} qui est le nombre de termes à construire ;\hfill{}défaut \Cle{5}
\item la clé \Cle{PosLabel} qui est le placement des labels par rapport à l'axe $(Ox)$ ;\hfill{}défaut \Cle{below}
- \item la clé \Cle{DecalLabel} qui correspond au décalage des labels par rapport aux abscisses ;\hfill{}défaut \Cle{6pt}
+ \item la clé \Cle{DecalLabel} qui correspond au décalage des labels par rapport aux abscisses ;
+
+ \hfill{}défaut \Cle{6pt}
\item la clé \Cle{TailleLabel} qui correspond à la taille des labels ;\hfill{}défaut \Cle{small}
- \item un booléen \Cle{AffTermes} qui permet d'afficher les termes de la suite sur l'axe $(Ox)$.\hfill{}défaut \Cle{true}
+ \item un booléen \Cle{AffTermes} qui permet d'afficher les termes de la suite sur l'axe $(Ox)$.
+
+ \hfill{}défaut \Cle{true}
\end{itemize}
\item le deuxième argument optionnel concerne les \Cle{options} du tracé de l'\textit{escalier} en \textit{langage \TikZ} ;
@@ -1843,9 +1946,10 @@ Plusieurs \Cle{arguments} (optionnels) sont disponibles :
\hfill{}défaut \Cle{dotted}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
Il est à noter que le \textsf{code} n'est pas autonome, et doit être intégré dans un environnement \ctex{tikzpicture}.
\smallskip
@@ -1857,15 +1961,16 @@ L'utilisateur est donc libre de définir ses styles pour l'affichage des éléme
La macro ne permet -- pour le moment -- ni de tracer la bissectrice, ni de tracer la courbe$\ldots$
En effet, il y aurait trop d'options pour ces deux éléments, et l'idée est quand même de conserver une commande \textit{simple} ! Donc l'utilisateur se chargera de tracer et de personnaliser sa courbe et sa bissectrice !
-\end{codeinfo}
+\end{noteblock}
\subsection{Exemples}
-\begin{codeinfo}
-On va tracer la \textit{toile} des 4 premiers termes de la suite récurrente $\begin{dcases} u_1 = 1 \\ u_{n+1} = \sqrt{5u_n}+1 \text{ pour tout entier } n \geqslant 1\end{dcases}$.
-\end{codeinfo}
+\begin{noteblock}
+On va tracer la \textit{toile} des 4 premiers termes de la suite récurrente :\\
+$\begin{dcases} u_1 = 1 \\ u_{n+1} = \sqrt{5u_n}+1 \text{ pour tout entier } n \geqslant 1\end{dcases}$.
+\end{noteblock}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\def\x{1.5cm}\def\y{1.5cm}
\def\xmin{0}\def\xmax{10}\def\xgrille{1}\def\xgrilles{0.5}
@@ -1883,15 +1988,15 @@ On va tracer la \textit{toile} des 4 premiers termes de la suite récurrente $\b
%éléments supplémentaires
\draw[very thick,blue,domain=0:8,samples=250] plot (\x,{\f}) ;
\draw[very thick,ForestGreen,domain=0:8,samples=2] plot (\x,\x) ;
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Peut-être que -- ultérieurement -- des options \textit{booléennes} seront disponibles pour un tracé \textit{générique} de la courbe et de la bissectrice, mais pour le moment la \textsf{macro} ne fait \textit{que} l'escalier.
-\end{codeinfo}
+\end{noteblock}
\subsection{Influence des paramètres}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}[x=4cm,y=3cm]
%axes + grilles + graduations
@@ -1906,9 +2011,9 @@ Peut-être que -- ultérieurement -- des options \textit{booléennes} seront dis
\ToileRecurrence[Fct={\f},No=0,Uno=2,Nb=5,PosLabel=above right,DecalLabel=0pt]
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[x=4cm,y=3cm]
\draw[xstep=0.25,ystep=0.25,line width=0.3pt,lightgray!50] (0,0) grid (2.5,1.25);
@@ -1929,9 +2034,9 @@ Peut-être que -- ultérieurement -- des options \textit{booléennes} seront dis
\ToileRecurrence[Fct={\f},No=0,Uno=2,Nb=5,PosLabel=above right,DecalLabel=0pt]
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}[x=5cm,y=1.5cm]
...
@@ -1943,9 +2048,9 @@ Peut-être que -- ultérieurement -- des options \textit{booléennes} seront dis
\draw[line width=1.25pt,red,domain=0.8:2.5,samples=250] plot(\x,{\f});
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[x=5cm,y=1.5cm]
%axes et grille
@@ -1966,7 +2071,17 @@ Peut-être que -- ultérieurement -- des options \textit{booléennes} seront dis
\draw[line width=1.25pt,red,domain=0.8:2.5,samples=250] plot(\x,{\f});
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Présentation de codes}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
@@ -1976,43 +2091,43 @@ Peut-être que -- ultérieurement -- des options \textit{booléennes} seront dis
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
Le {package} \ctex{listings} permet d'insérer et de formater du code, notamment du code \textsf{Python}.
En \textit{partenariat} avec \ctex{tcolorbox}, on peut donc présenter \textit{joliment} du code \textsf{Python} !
-\end{codeidee}
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Le package \ctex{listings} ne nécessite pas de compilation particulière, au contraire d'autres (comme \ctex{pythontex} ou \ctex{minted} ou \ctex{piton}) qui seront présentés ultérieurement.
-\end{codeinfo}
+\end{noteblock}
-\begin{codeinfo}
+\begin{noteblock}
Les styles utilisés pour formater le code \textsf{Python} ne sont pas modifiables. Ils donnent un rendu proche de celui des packages comme \ctex{pythontex} ou \ctex{minted} ou \ctex{piton}.
\smallskip
Donc, si plusieurs \textit{méthodes} sont utilisées pour insérer du code \textsf{Python} (via les \textit{méthodes} suivantes), le rendu pourra être légèrement différent.
-\end{codeinfo}
+\end{noteblock}
\subsection{Commande et options}
-\begin{codeidee}
+\begin{tipblock}
L'environnement \ctex{CodePythonLst} permet de présenter du code \textsf{Python}, dans une \ctex{tcolorbox} avec deux styles particuliers (\cmaj{2.5.8}).
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonLst}(*)[largeur]{commandes tcbox}
...
\end{CodePythonLst}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonLstAlt}(*)[largeur]{commandes tcbox}
...
\end{CodePythonLstAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{arguments} sont disponibles :
\begin{itemize}
@@ -2020,15 +2135,16 @@ Plusieurs \Cle{arguments} sont disponibles :
\item le premier argument (\textit{optionnel}), concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth}
\item le second argument (\textit{obligatoire}), concerne des \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}, comme l'alignement.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeattention}
+\begin{warningblock}
Les environnements \ctex{DeclareTCBListing} créés par \ctex{tcolorbox} et \ctex{listings} ne sont pas compatibles avec les options \Cle{gobble} (pour supprimer les tabulations d'environnement), donc il faut bien penser à \og aligner \fg{} le code à gauche, pour éviter des tabulations non esthétiques !
-\end{codeattention}
+\end{warningblock}
\subsection{Insertion via un fichier \og externe \fg}
-\begin{codeidee}
+\begin{tipblock}
Pour des raison pratiques, il est parfois intéressant d'avoir le code \textsf{Python} dans un fichier externe au ficher \ctex{tex}, ou bien créé directement par le fichier \ctex{tex} (via \ctex{scontents}, notamment, mais non chargé par \ctex{ProfLycee}).
Dans ce cas, il n'est pas nécessaire d'aligner le code \og à gauche \fg, en utilisant une commande alternative.
@@ -2036,17 +2152,17 @@ Dans ce cas, il n'est pas nécessaire d'aligner le code \og à gauche \fg, en ut
\smallskip
Si cette méthode est utilisée, il ne faut oublier de charger le package \ctex{scontents}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\usepackage{scontents} %si script déclaré dans le fichier tex
...
\CodePythonLstFichier(*)[largeur]{commandes tcbox}{script}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Exemples}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonLst}{} %les {}, même vides, sont nécessaires (bug avec # sinon !)
#environnement par défaut
nb = int(input("Saisir un entier positif"))
@@ -2057,9 +2173,9 @@ if (nb %7 == 0) :
def f(x) :
return x**2
\end{CodePythonLst}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{CodePythonLst}{}
#environnement par défaut
nb = int(input("Saisir un entier positif"))
@@ -2070,9 +2186,9 @@ if (nb %7 == 0) :
def f(x) :
return x**2
\end{CodePythonLst}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonLstAlt}*[0.75\linewidth]{flush right}
#largeur de 50%, sans numéro, et aligné à droite
nb = int(input("Saisir un entier Python positif"))
@@ -2083,9 +2199,9 @@ if (nb %7 == 0) :
def f(x) :
return x**2
\end{CodePythonLstAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{CodePythonLstAlt}*[0.75\linewidth]{flush right}
#largeur de 50%, sans numéro, et aligné à droite
nb = int(input("Saisir un entier Python positif"))
@@ -2096,9 +2212,9 @@ if (nb %7 == 0) :
def f(x) :
return x**2
\end{CodePythonLstAlt}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{scontents}[overwrite,write-out=testscript.py]
# Calcul de la factorielle en langage Python
def factorielle(x):
@@ -2128,9 +2244,9 @@ def trace_parabole_tableaux():
%environnement centré, avec numéros, largeur 9cm
\CodePythonLstFichier[9cm]{center}{testscript.py}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{scontents}[overwrite,write-out=testscript.py]
# Calcul de la factorielle en langage Python
def factorielle(x):
@@ -2159,7 +2275,7 @@ def trace_parabole_tableaux():
\end{scontents}
\CodePythonLstFichier[9cm]{center}{testscript.py}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -2167,18 +2283,18 @@ def trace_parabole_tableaux():
\subsection{Introduction}
-\begin{codeinfo}
+\begin{noteblock}
\cmaj{2.5.0} Cette section nécessite de charger la \textsf{librairie} \clib{piton} dans le préambule.
\cmaj{2.5.7} Une console \textsf{Python} est disponible, elle nécessite le package \ctex{pyluatex}, qui n'est pas chargé par \ctex{ProfLycee}, du fait de l'obligation de spécifier le \textit{chemin} pour l'exécutable \textsf{Python} !
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\usepackage[executable=...]{pyluatex} %si utilisation de la console REPL
\useproflyclib{piton}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La \textsf{librairie} \clib{piton} (qui charge \ctex{piton}, est compatible uniquement avec \hologo{LuaLaTeX} !) permet d'insérer du code \textsf{Python} avec une coloration syntaxique en utilisant la bibliothèque \textsf{Lua LPEG}.
\smallskip
@@ -2192,9 +2308,9 @@ Depuis la version \ctex{0.95} de \ctex{piton}, \Cle{left-margin=auto} est dispon
Depuis la version \ctex{0.99} de \ctex{piton}, \Cle{break-lines} est disponible et activée dans \ctex{ProfLycee}.
Depuis la version \ctex{1.0} de \ctex{piton}, \Cle{tabs-auto-gobble} est disponible et activée dans \ctex{ProfLycee}.
-\end{codeinfo}
+\end{noteblock}
-\begin{codeattention}
+\begin{warningblock}
Le package \ctex{piton} nécessite donc obligatoirement l’emploi de \hologo{LuaLaTeX} !
Ce package n'est chargé que si la compilation détectée est en \hologo{LuaLaTeX} !
@@ -2204,17 +2320,17 @@ Ce package n'est chargé que si la compilation détectée est en \hologo{LuaLaTe
\cmaj{2.5.7} L'utilisation de la console \textbf{REPL} nécessite une compilation en \ctex{--shell-escape} ou \ctex{-write18} !
\cmaj{2.5.7} Les packages \ctex{pyluatex} et \ctex{pythontex} utilisent des commandes de même nom, donc la présente documentation n'utilisera pas le package \ctex{pyluatex}. Une documentation annexe spécifique est disponible.
-\end{codeattention}
+\end{warningblock}
\subsection{Présentation de code Python}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePiton}[options]{options tcbox}
...
\end{CodePiton}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{clés} sont disponibles :
\begin{itemize}
@@ -2223,22 +2339,26 @@ Plusieurs \Cle{clés} sont disponibles :
\item la clé \Cle{Largeur} qui correspond à la largeur de la \ctex{tcbox} ; \hfill{}défaut \Cle{\textbackslash linewidth}
\item la clé \Cle{TaillePolice} pour la taille des caractères ; \hfill{}défaut \Cle{\textbackslash footnotesize}
\item la clé \Cle{Alignement} qui paramètre l'alignement de la \ctex{tcbox} ; \hfill{}défaut \Cle{center}
- \item \cmaj{2.5.7} la clé \Cle{Style} (parmi \Cle{Moderne / Classique}) pour changer le style ; \hfill{}défaut \Cle{Moderne}
+ \item \cmaj{2.5.7} la clé \Cle{Style} (parmi \Cle{Moderne / Classique}) pour changer le style ;
+
+ \hfill{}défaut \Cle{Moderne}
\item \cmaj{2.5.7} le boolén \Cle{Filigrane} pour afficher, le logo {\small \faPython} en filigrane ; \hfill{}défaut \Cle{false}
\item \cmaj{2.5.7} le boolén \Cle{BarreTitre} (si \Cle{Style=Moderne}) pour afficher le titre ; \hfill{}défaut \Cle{true}
- \item \cmaj{2.5.7} le boolén \Cle{Cadre} (si \Cle{Style=Moderne}) pour afficher le cadre. \hfill{}défaut \Cle{true}
+ \item \cmaj{2.5.7} le boolén \Cle{Cadre} (si \Cle{Style=Moderne}) pour afficher le cadre ; \hfill{}défaut \Cle{true}
+ \item \cmaj{2.5.9} la clé \Cle{CouleurNombres} pour la couleur des nombres.\hfill{}défaut \Cle{orange}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
Du fait du paramétrage des boîtes \ctex{tcolorbox}, il se peut que le rendu soit non conforme si elle doit être insérée dans une autre \ctex{tcolorbox}\ldots{} !
-\end{codeinfo}
+\end{noteblock}
-\begin{codeinfo}
+\begin{noteblock}
Pour éviter des problèmes avec le code interprété par \textsf{piton}, les \ctex{\{\}} de l'argument obligatoire sont nécessaires au bon fonctionnement du code.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePiton}{}
#environnement piton avec numéros de ligne, pleine largeur, style moderne
def arctan(x,n=10):
@@ -2249,7 +2369,7 @@ def arctan(x,n=10):
else:
return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) )
\end{CodePiton}
-\end{codetex}
+\end{PresentationCodePL}
\begin{CodePiton}{}
#environnement piton avec numéros de ligne, pleine largeur, style moderne
@@ -2262,7 +2382,7 @@ def arctan(x,n=10):
return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) )
\end{CodePiton}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePiton}[Style=Classique,Filigrane]{}
#environnement piton avec numéros, style classique, filigrane
def arctan(x,n=10):
@@ -2273,7 +2393,7 @@ def arctan(x,n=10):
else:
return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) )
\end{CodePiton}
-\end{codetex}
+\end{PresentationCodePL}
\begin{CodePiton}[Style=Classique,Filigrane]{}
#environnement piton avec numéros, style classique, filigrane
@@ -2286,7 +2406,7 @@ def arctan(x,n=10):
return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) )
\end{CodePiton}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePiton}[Alignement=flush right,Largeur=13cm]{}
def f(x) :
return x**2
@@ -2312,7 +2432,8 @@ def f(x) :
return x**2
\end{CodePiton}
\end{itemize}
-\end{codetex}
+\vspace*{-\baselineskip}\leavevmode
+\end{PresentationCodePL}
\begin{CodePiton}[Alignement=flush right,Largeur=13cm]{}
#avec numéros, de largeur 13cm, aligné à droite
@@ -2345,9 +2466,9 @@ def f(x) :
\subsection{Console en partenariat avec Pyluatex}
-\begin{codeinfo}
+\begin{noteblock}
\cmaj{2.5.7} Une console d'exécution (type REPL) est disponible, et la documentation associée est en marge de la présente documentation.
-\end{codeinfo}
+\end{noteblock}
\pagebreak
@@ -2355,20 +2476,20 @@ def f(x) :
\subsection{Librairies}
-\begin{codeinfo}
+\begin{noteblock}
\cmaj{2.5.0} Cette section nécessite de charger les librairies \clib{minted} et/ou \clib{pythontex} dans le préambule.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\useproflyclib{minted}
\useproflyclib{pythontex}
%ou
\useproflyclib{minted,pythontex}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.5.0} La \textsf{librairie} \clib{pythontex} permet d'insérer et d'exécuter du code \textsf{Python}. On peut :
\begin{itemize}
@@ -2376,39 +2497,40 @@ def f(x) :
\item exécuter du code \textsf{Python} dans un environnement type \og console \fg{} ;
\item charger du code \textsf{Python}, et éventuellement l'utiliser dans la console.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeattention}
+\begin{warningblock}
\textbf{Attention : }il faut dans ce cas une compilation en plusieurs étapes, comme par exemple \textsf{pdflatex puis pythontex puis pdflatex} !
Voir par exemple \url{http://lesmathsduyeti.fr/fr/informatique/latex/pythontex/} !
-\end{codeattention}
+\end{warningblock}
-\begin{codeinfo}
+\begin{noteblock}
Compte tenu de la \textit{relative complexité} pour gérer les options (par paramètres/clés\ldots) des \textit{tcbox} et des \textit{fancyvrb}, les style sont \og fixés \fg{} tels quels, et seules la taille et la position de la \textit{tcbox} sont modifiables. Si toutefois vous souhaitez personnaliser davantage, il faudra prendre le code correspondant et appliquer vos modifications !
Cela peut donner -- en tout cas -- des idées de personnalisation en ayant une base \textit{pré}existante !
-\end{codeinfo}
+\end{noteblock}
\subsection{Présentation de code Python grâce au package pythontex}\label{pythontex}
-\begin{codeidee}
+\begin{tipblock}
L'environnement \ctex{CodePythontex} est donc lié à \ctex{pythontex} (chargé par \ctex{ProfLycee}, avec l'option \textit{autogobble}) permet de présenter du code \textsf{Python}, dans une \ctex{tcolorbox} avec deux styles particuliers (\cmaj{2.5.8}).
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythontex}[options]{} %les {} vides sont nécessaires
...
\end{CodePythontex}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythontexAlt}[options]{} %les {} vides sont nécessaires
...
\end{CodePythontexAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Comme précédemment, des \Cle{Clés} qui permettent de \textit{légèrement} modifier le style :
\begin{itemize}
@@ -2418,67 +2540,68 @@ Comme précédemment, des \Cle{Clés} qui permettent de \textit{légèrement} mo
\item \Cle{EspacementVertical} : option (\textit{stretch}) pour l'espacement entre les lignes ;\hfill{}défaut \Cle{1}
\item \Cle{Lignes} : booléen pour afficher ou non les numéros de ligne.\hfill{}défaut \Cle{true}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythontex}{} %bien mettre les {} !!
#environnement Python(tex) par défaut
def f(x) :
return x**2
\end{CodePythontex}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{CodePythontex}{}
#environnement Python(tex) par défaut
def f(x) :
return x**2
\end{CodePythontex}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythontexAlt}[Largeur=12cm,Centre,Lignes=false]{}
#environnement Python(tex) classique, centré, sans lignes
def f(x) :
return x**2
\end{CodePythontexAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{CodePythontexAlt}[Largeur=12cm,Centre,Lignes=false]{}
#environnement Python(tex) classique, centré, sans lignes
def f(x) :
return x**2
\end{CodePythontexAlt}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Présentation de code Python via le package minted}\label{pytminted}
-\begin{codeinfo}
+\begin{noteblock}
Pour celles et ceux qui ne sont pas à l'aise avec le {package} \ctex{pythontex} et notamment sa spécificité pour compiler, il existe le {package} \ctex{minted} qui permet de présenter du code, et notamment \textsf{Python}.
\cmaj{2.5.8} Deux styles sont désormais disponibles.
\cmaj{2.5.0} C'est donc la \textsf{librairie} \clib{minted} qu'il faudra charger.
-\end{codeinfo}
+\end{noteblock}
-\begin{codeattention}
+\begin{warningblock}
Le package \ctex{minted} nécessite quand même une compilation avec l'option \ctex{--shell-escape} ou \ctex{-write18} !
-\end{codeattention}
+\end{warningblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonMinted}(*)[largeur]{options}
...
\end{CodePythonMinted}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonMintedAlt}(*)[largeur]{options}
...
\end{CodePythonMintedAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{arguments} sont disponibles :
\begin{itemize}
@@ -2486,55 +2609,56 @@ Plusieurs \Cle{arguments} sont disponibles :
\item le 1\up{er} argument \textit{optionnel} concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{12cm}
\item le 2\up{nd} argument \textit{obligatoire} concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcbox}.\hfill{}défaut \Cle{vide}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonMinted}[13cm]{center}
#environnement Python(minted) centré avec numéros, de largeur 13cm
def f(x) :
return x**2
\end{CodePythonMinted}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{CodePythonMinted}[13cm]{center}
#environnement Python(minted) centré avec numéros
def f(x) :
return x**2
\end{CodePythonMinted}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{CodePythonMintedAlt}*[0.8\linewidth]{}
#environnement Python(minted), style alt, sans numéro, de largeur 0.8\linewidth
def f(x) :
return x**2
\end{CodePythonMintedAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{CodePythonMintedAlt}*[0.8\linewidth]{}
- #environnement Python(minted), style alt, sans numéro, de largeur 0.8\linewidth
+ #environnement Python(minted), style alt, sans numéro, 0.8\linewidth
def f(x) :
return x**2
\end{CodePythonMintedAlt}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Console d'exécution Python}
-\begin{codeidee}
+\begin{tipblock}
\ctex{pythontex} permet également de \textit{simuler} (en exécutant également !) du code \textsf{Python} dans une \textit{console}, avec la \textsf{librairie} \clib{pythontex} du coup !
C'est l'environnement \ctex{ConsolePythontex} qui permet de le faire.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{ConsolePythontex}[options]{} %les {} vides sont nécessaires
...
\end{ConsolePythontex}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Les \Cle{Clés} disponibles sont :
\begin{itemize}
@@ -2544,18 +2668,19 @@ Les \Cle{Clés} disponibles sont :
\item \Cle{EspacementVertical} : option (\textit{stretch}) pour l'espacement entre les lignes ;\hfill{}défaut \Cle{1}
\item \Cle{Label} : booléen pour afficher ou non le titre.\hfill{}défaut \Cle{true}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{ConsolePythontex}{}
#console Python(tex) par défaut
from math import sqrt
1+1
sqrt(12)
\end{ConsolePythontex}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\smallskip
\begin{ConsolePythontex}{}
#console Python(tex) par défaut
@@ -2563,9 +2688,9 @@ Les \Cle{Clés} disponibles sont :
1+1
sqrt(12)
\end{ConsolePythontex}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{ConsolePythontex}[Largeur=14cm,Label=false,Centre]{}
#console Python(tex) centrée sans label, 14cm
table = [[1,2],[3,4]]
@@ -2576,9 +2701,9 @@ Les \Cle{Clés} disponibles sont :
tableau
len(tableau), len(tableau[0]), tableau[1][4]
\end{ConsolePythontex}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\smallskip
\begin{ConsolePythontex}[Largeur=14cm,Label=false,Centre]{}
#console Python(tex) centrée sans label, 14cm
@@ -2590,11 +2715,11 @@ Les \Cle{Clés} disponibles sont :
tableau
len(tableau), len(tableau[0]), tableau[1][4]
\end{ConsolePythontex}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Le package \ctex{pythontex} peut donc servir à présenter du code Python, comme \ctex{minted} ou \ctex{piton}, sa particularité est toutefois de pouvoir \textit{exécuter} du code \textsf{Python} pour une présentation de type \textit{console}.
-\end{codeinfo}
+\end{noteblock}
\newpage
@@ -2602,35 +2727,35 @@ Le package \ctex{pythontex} peut donc servir à présenter du code Python, comme
\subsection{Introduction}
-\begin{codeinfo}
+\begin{noteblock}
Le {package} \ctex{listings} permet d'insérer et de présenter du code, et avec \ctex{tcolorbox} on peut obtenir une présentation similaire à celle du code \textsf{Python}. Pour le moment la \textit{philosophie} de la commande est un peu différente de celle du code \textsf{Python}, avec son système de \Cle{Clés}.
-\end{codeinfo}
+\end{noteblock}
\subsection{Présentation de Pseudo-Code}
-\begin{codeidee}
+\begin{tipblock}
Les environnements \ctex{PseudoCode} ou \ctex{PseudoCodeAlt} permet de présenter du (pseudo-code) dans une \ctex{tcolorbox}, avec deux styles à disposition (\cmaj{2.5.8}).
-\end{codeidee}
+\end{tipblock}
-\begin{codeattention}
+\begin{warningblock}
De plus, le package \ctex{listings} avec \ctex{tcolorbox} ne permet pas de gérer le paramètre \textit{autogobble}, donc il faudra être vigilant quant à la position du code (pas de tabulation en fait\ldots)
-\end{codeattention}
+\end{warningblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{PseudoCode}(*)[largeur]{options tcbox}
%attention à l'indentation, gobble ne fonctionne pas...
...
\end{PseudoCode}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{PseudoCodeAlt}(*)[largeur]{options tcbox}
%attention à l'indentation, gobble ne fonctionne pas...
...
\end{PseudoCodeAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{arguments} (optionnels) sont disponibles :
\begin{itemize}
@@ -2638,9 +2763,10 @@ Plusieurs \Cle{arguments} (optionnels) sont disponibles :
\item le premier argument optionnel concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{12cm}
\item \cmaj{2.5.8} l'argument obligatoire entre \ctex{\{...\}} concerne les \Cle{options} de la \ctex{tcbox}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%en pas oublier les {}, même vides !
\begin{PseudoCode}{} %non centré, de largeur par défaut (12cm) avec lignes
List = [...] # à déclarer au préalable
@@ -2649,9 +2775,9 @@ Pour i allant de 0 à n-1 Faire
Afficher(List[i])
FinPour
\end{PseudoCode}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{PseudoCode}{}
List = [...] # à déclarer au préalable
n = longueur(List)
@@ -2659,9 +2785,9 @@ Pour i allant de 0 à n-1 Faire
Afficher(List[i])
FinPour
\end{PseudoCode}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{PseudoCodeAlt}[15cm]{center} %centré, de largeur 15cm
List = [...] # à déclarer au préalable
n = longueur(List)
@@ -2669,9 +2795,9 @@ Pour i allant de 0 à n-1 Faire
Afficher(List[i])
FinPour
\end{PseudoCodeAlt}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{PseudoCodeAlt}[15cm]{center}
List = [...] # à déclarer au préalable
n = longueur(List)
@@ -2679,37 +2805,37 @@ Pour i allant de 0 à n-1 Faire
Afficher(List[i])
FinPour
\end{PseudoCodeAlt}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Compléments}
-\begin{codeattention}
+\begin{warningblock}
À l'instar de packages existants, la \textit{philosophie} ici est de laisser l'utilisateur gérer \textit{son} langage pseudo-code.
J'ai fait le choix de ne pas définir des \textsf{mots clés} à mettre en valeur car cela reviendrait à \textit{imposer} des choix ! Donc ici, pas de coloration syntaxique ou de mise en évidence de mots clés, uniquement un formatage basique !
-\end{codeattention}
+\end{warningblock}
-\begin{codeinfo}
+\begin{noteblock}
Le style \ctex{listings} utilisé par la commande a l'option \Cle{mathescape} activée, et accessible grâce aux délimiteurs \Cle{(*...*)}.
Cela permet d'insérer du code \LaTeX{} dans l'environnement \ctex{PseudoCode} (attention au fontes par contre !).
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{PseudoCode}*[12cm]{}
#Utilisation du mode mathescape
Afficher (*\og*) .........(*\fg*)
m = (*$\tfrac{\texttt{1}}{\texttt{2}}$*)
\end{PseudoCode}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{PseudoCode}*[12cm]{}
#Utilisation du mode mathescape
Afficher (*\og*) .........(*\fg*)
m = (*$\tfrac{\texttt{1}}{\texttt{2}}$*)
\end{PseudoCode}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -2717,7 +2843,7 @@ m = (*$\tfrac{\texttt{1}}{\texttt{2}}$*)
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée des \textsf{commandes} suivantes est de permettre de simuler des fenêtres de \textsf{Terminal}, que ce soit pour Windows, Ubuntu ou OSX.
\smallskip
@@ -2727,15 +2853,15 @@ L'idée de base vient du {package} \ctex{termsim}, mais ici la gestion du \texts
\smallskip
Le \textsf{contenu} est géré par le package \ctex{listings}, sans langage particulier, et donc sans coloration syntaxique particulière.
-\end{codeidee}
+\end{tipblock}
-\begin{codeattention}
+\begin{warningblock}
Comme pour le pseudo-code, pas d'\textsf{autogobble}, donc commandes à aligner à gauche !
-\end{codeattention}
+\end{warningblock}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{TerminalWin}[largeur]{titre=...}[options tcbox]
...
\end{TerminalWin}
@@ -2747,9 +2873,9 @@ Comme pour le pseudo-code, pas d'\textsf{autogobble}, donc commandes à aligner
\begin{TerminalOSX}[largeur]{titre=...}[options tcbox]
...
\end{TerminalOSX}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Peu d'options pour ces commandes :
\begin{itemize}
@@ -2757,29 +2883,30 @@ Peu d'options pour ces commandes :
\item le deuxième, \textit{obligatoire}, permet de spécifier le titre par la clé \Cle{titre}.\hfill{}défaut \Cle{Terminal Windows/UNiX/OSX}
\item le troisième, \textit{optionnel}, concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
Le \textsf{code} n'est pas formaté, ni mis en coloration syntaxique.
De ce fait tous les caractères sont autorisés : même si l'éditeur pourra détecter le \% comme le début d'un commentaire, tout sera intégré dans le code mis en forme !
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{TerminalUnix}[12cm]{Titre=Terminal Ubuntu}[center] %12cm, avec titre modifié et centré
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalUnix}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{TerminalUnix}[12cm]{Titre=Terminal Ubuntu}[center]
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalUnix}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{TerminalWin}[15cm]{} %largeur 15cm avec titre par défaut
Microsoft Windows [version 10.0.22000.493]
(c) Microsoft Corporation. Tous droits réservés.
@@ -2801,9 +2928,9 @@ Minimum = 35ms, Maximum = 39ms, Moyenne = 36ms
[test@server]$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalOSX}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{TerminalWin}[15cm]{}
Microsoft Windows [version 10.0.22000.493]
(c) Microsoft Corporation. Tous droits réservés.
@@ -2830,7 +2957,7 @@ PING ctan.org (5.35.249.60) 56(84) bytes of data.
[test@server]$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalOSX}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -2838,17 +2965,17 @@ PING ctan.org (5.35.249.60) 56(84) bytes of data.
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir des \textsf{cartouches} tels que \textsf{Capytale} les présente, pour partager un code afin d'accéder à une activité \textsf{Python}.
-\end{codeidee}
+\end{tipblock}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\CartoucheCapytale(*)[options]{code capytale}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Peu d'options pour ces commandes :
\begin{itemize}
@@ -2858,9 +2985,10 @@ Peu d'options pour ces commandes :
\hfill{}défaut \Cle{vide}
\item le troisième, \textit{obligatoire}, est le \textsf{code capytale} à afficher.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\CartoucheCapytale{abcd-12345} %lien simple, en sf
\CartoucheCapytale[~]{abcd-12345} %lien avec ~ à la fin, en sf
@@ -2868,9 +2996,9 @@ Peu d'options pour ces commandes :
\CartoucheCapytale*{abcd-12345} %lien simple, en tt
\CartoucheCapytale*[~]{abcd-12345} %lien avec ~ à la fin, en tt
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\CartoucheCapytale{abcd-12345}
\CartoucheCapytale[~]{abcd-12345}
@@ -2878,22 +3006,22 @@ Peu d'options pour ces commandes :
\CartoucheCapytale*{abcd-12345}
\CartoucheCapytale*[~]{abcd-12345}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Le \textsf{cartouche} peut être \og cliquable \fg{} grâce à \ctex{href}.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\usepackage{hyperref}
\urlstyle{same}
...
\href{https://capytale2.ac-paris.fr/web/c/abcd-12345}{\CartoucheCapytale{abcd-12345}}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\href{https://capytale2.ac-paris.fr/web/c/abcd-12345}{\CartoucheCapytale{abcd-12345}}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -2901,40 +3029,41 @@ Le \textsf{cartouche} peut être \og cliquable \fg{} grâce à \ctex{href}.
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.0.6} L'idée est de proposer un environnement pour présenter du code \LaTeX. Ce n'est pas forcément lié à l'enseignement en Lycée mais pourquoi pas !
\smallskip
Il s'agir d'un environnement créé en \ctex{tcolorbox}, et utilisant la présentation \textit{basique} de code via \ctex{listings}.
-\end{codeidee}
+\end{tipblock}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{PresentationCode}[Couleur]{options tcbox}
...
\end{PresentationCode}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Peu de personnalisations pour ces commandes :
\begin{itemize}
\item le premier argument, \textit{optionnel}, permet de préciser la \textit{couleur} de la présentation ;\hfill{}défaut \Cle{ForestGreen}
\item le second, \textit{obligatoire}, correspond aux éventuelles options liées à la \ctex{tcolorbox}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
Il est à noter que, même dans le cas d'option vide pour la \ctex{tcolorbox}, les \ctex{\{\}} sont nécessaires.
\smallskip
On peut par exemple utiliser l'option \Cle{listing only} pour ne présenter \textit{que} le code source.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{PresentationCode}{}
\xdef\ValAleaA{\fpeval{randint(1,100)}}
\xdef\ValAleaB{\fpeval{randint(1,100)}}
@@ -2945,30 +3074,40 @@ Avec $A=\ValAleaA$ et $B=\ValAleaB$, on a $A\times B=\inteval{\ValAleaA * \ValAl
\begin{PresentationCode}[DarkBlue]{}
On peut faire beaucoup de choses avec \LaTeX{} !
\end{PresentationCode}
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour la géométrie}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
\part{Outils pour la géométrie}
\section{Pavé droit \og simple \fg}\label{pave}
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir un pavé droit, dans un environnement \TikZ, avec les nœuds créés et nommés directement pour utilisation ultérieure.
-\end{codeidee}
+\end{tipblock}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[options tikz]
\PaveTikz[options]
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -2982,41 +3121,44 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\item \Cle{Epaisseur} : épaisseur des arêtes (en \textit{langage simplifié} \TikZ) ;\hfill{}défaut \Cle{thick}
\item \Cle{Aff} : booléen pour afficher les noms des sommets ;\hfill{}défaut \Cle{false}
\item \Cle{Plein} : booléen pour ne pas afficher les arêtes \textit{invisibles} ;\hfill{}défaut \Cle{false}
- \item \Cle{Cube} : booléen pour préciser qu'il s'agit d'un cube (seule la valeur \Cle{Largeur} est util(isé)e).\hfill{}défaut \Cle{false}
+ \item \Cle{Cube} : booléen pour préciser qu'il s'agit d'un cube (seule la valeur \Cle{Largeur} est util(isé)e).
+
+ \hfill{}défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\PaveTikz
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\PaveTikz[Cube,Largeur=2]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La ligne est de ce fait à insérer dans un environnement \TikZ, avec les options au choix pour cet environnement.
Le code crée les nœuds relatifs aux sommets, et les nomme comme les sommets, ce qui permet de les réutiliser pour éventuellement compléter la figure !
-\end{codeinfo}
+\end{noteblock}
\subsection{Influence des paramètres}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[line join=bevel]
\PaveTikz[Aff,Largeur=4,Profondeur=3,Hauteur=2,Epaisseur={ultra thick}]
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{tikzpicture}[line join=bevel]
\PaveTikz[Aff,Largeur=4,Profondeur=3,Hauteur=2,Epaisseur={ultra thick}]
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}[line join=bevel]
\PaveTikz[Plein,Aff,Largeur=7,Profondeur=3.5,Hauteur=4,Sommets=Q§S§D§F§G§H§J§K]
@@ -3024,9 +3166,9 @@ Le code crée les nœuds relatifs aux sommets, et les nomme comme les sommets, c
\draw[thick,blue,densely dotted] (K)--(H) ;
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[line join=bevel]
\PaveTikz[Plein,Aff,Largeur=7,Profondeur=3.5,Hauteur=4,Sommets=Q§S§D§F§G§H§J§K]
@@ -3034,7 +3176,7 @@ Le code crée les nœuds relatifs aux sommets, et les nomme comme les sommets, c
\draw[thick,blue,densely dotted] (K)--(H) ;
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -3042,20 +3184,20 @@ Le code crée les nœuds relatifs aux sommets, et les nomme comme les sommets, c
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir un tétraèdre, dans un environnement \TikZ, avec les nœuds créés et nommés directement pour utilisation ultérieure.
-\end{codeidee}
+\end{tipblock}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[options tikz]
\TetraedreTikz[options]
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -3070,26 +3212,27 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\item \Cle{Aff} : booléen pour afficher les noms des sommets ;\hfill{}défaut \Cle{false}
\item \Cle{Plein} : booléen pour ne pas afficher l'arête \textit{invisible} .\hfill{}défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\TetraedreTikz
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\TetraedreTikz[Aff,Largeur=2,Profondeur=0.625,Hauteur=1.5]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\TetraedreTikz[Plein,Aff,Largeur=5,Beta=60]
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Influence des paramètres}
-\begin{codeinfo}
+\begin{noteblock}
Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les différents paramètres utiles.
\begin{center}
@@ -3104,25 +3247,25 @@ Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les diffÃ
\draw (35:0.75) node[orange,right] {$\beta$} ;
\end{tikzpicture}
\end{center}
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}[line join=bevel]
\TetraedreTikz[Aff,Largeur=7,Profondeur=3,Hauteur=5,Epaisseur={ultra thick},Alpha=20,Beta=30]
\draw[very thick,ForestGreen,<->,>=latex] ($(A)!0.5!(D)$)--($(B)!0.5!(D)$) ;
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[line join=bevel]
\TetraedreTikz[Aff,Largeur=7,Profondeur=3,Hauteur=5,Epaisseur={ultra thick},Alpha=20,Beta=30]
\draw[very thick,ForestGreen,<->,>=latex] ($(A)!0.5!(D)$)--($(B)!0.5!(D)$) ;
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -3130,31 +3273,31 @@ Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les diffÃ
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir une commande pour tracer (en \TikZ) un cercle trigonométrique, avec personnalisation des affichages.
\smallskip
Comme pour les autres commandes \TikZ, l'idée est de laisser l'utilisateur définir et créer son environnement \TikZ, et d'insérer la commande \ctex{CercleTrigo} pour afficher le cercle.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[tikz lower]
+\begin{PresentationCodePL}{tikz lower}
%code tikz
\CercleTrigo
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Commandes}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
\begin{tikzpicture}[options tikz]
...
\CercleTrigo[clés]
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Plusieurs \Cle{Clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -3170,11 +3313,12 @@ Plusieurs \Cle{Clés} sont disponibles pour cette commande :
\item un booléen \Cle{AffTraits} qui permet d'afficher les \textit{traits de construction} ;\hfill{}défaut \Cle{true}
\item un booléen \Cle{AffValeurs} qui permet d'afficher les valeurs remarquables.\hfill{}défaut \Cle{true}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
\pagebreak
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}[line join=bevel]
\CercleTrigo[Rayon=2.5,AffValeurs=false,Decal=8pt]
@@ -3188,9 +3332,9 @@ Plusieurs \Cle{Clés} sont disponibles pour cette commande :
\CercleTrigo[Rayon=2.5,MoinsPi=false,CouleurFond=orange!15]
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[line join=bevel]
\CercleTrigo[Rayon=2.5,AffValeurs=false,Decal=8pt]
@@ -3204,15 +3348,15 @@ Plusieurs \Cle{Clés} sont disponibles pour cette commande :
\CercleTrigo[Rayon=2.5,MoinsPi=false,CouleurFond=orange!15,TailleValeurs=\tiny]
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Équations trigos}
-\begin{codeinfo}
+\begin{noteblock}
En plus des \Cle{Clés} précédentes, il existe un complément pour \textit{visualiser} des solutions d'équations simples du type $\cos(x)=\ldots$ ou $\sin(x)=\ldots$.
-\end{codeinfo}
+\end{noteblock}
-\begin{codecles}
+\begin{cautionblock}
Les \Cle{Clés} pour cette possibilité sont :
\begin{itemize}
@@ -3222,13 +3366,14 @@ Les \Cle{Clés} pour cette possibilité sont :
\item la clé \Cle{cos} qui est la valeur de l'angle (en degrés) cos ;\hfill{}défaut \Cle{45}
\item la clé \Cle{CouleurSol} qui est la couleur des \textit{solutions}.\hfill{}défaut \Cle{blue}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{center}
\begin{tikzpicture}
\CercleTrigo[%
- AffAngles=false,AffValeurs=false,AffTraits=false,Rayon=2,Equationsin,sin=-30,CouleurSol=red]
+ AffAngles=false,AffValeurs=false,AffTraits=false,Rayon=2,Equationsin,sin=-30, CouleurSol=red]
\end{tikzpicture}
~~~~
\begin{tikzpicture}
@@ -3243,9 +3388,9 @@ Les \Cle{Clés} pour cette possibilité sont :
AffTraits=false,AffAngles=false,Rayon=2.5,Equationcos,cos=60,CouleurSol=purple, TailleValeurs=\tiny]
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}
\CercleTrigo[%
@@ -3264,7 +3409,7 @@ Les \Cle{Clés} pour cette possibilité sont :
AffTraits=false,AffAngles=false,Rayon=2.5,Equationcos,cos=60,CouleurSol=purple,TailleValeurs=\tiny]
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -3272,26 +3417,26 @@ Les \Cle{Clés} pour cette possibilité sont :
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de \textit{proposer} un style \textit{tout prêt} pour simuler un tracé, en \TikZ, à \og main levée \fg.
Il s'agit d'un style \textit{basique} utilisant la librairie \ctex{decorations} avec \textsf{random steps}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\tikzset{%
mainlevee/.style args={#1et#2}{decorate,decoration={random steps, segment length=#1,amplitude=#2}},
mainlevee/.default={5mm et 0.6pt}
}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Utilisation basique}
-\begin{codeinfo}
+\begin{noteblock}
Il s'agit ni plus ni moins d'un style \TikZ{} à intégrer dans les tracés et constructions \TikZ !
-\end{codeinfo}
+\end{noteblock}
-\begin{codecles}
+\begin{cautionblock}
Concernant le style en lui-même, deux paramètres peuvent être précisés via \Cle{mainlevee=\#1 et \#2} :
\begin{itemize}
@@ -3300,9 +3445,9 @@ Concernant le style en lui-même, deux paramètres peuvent être précisés via
\end{itemize}
Les valeurs \Cle{mainlevee=5mm et 0.6pt} donnent des résultats -- à mon sens -- satisfaisants, mais l'utilisateur pourra modifier à loisir ces paramètres !
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%la grille a été rajoutée pour la sortie
\begin{tikzpicture}
\draw[thick,mainlevee] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
@@ -3315,25 +3460,35 @@ Les valeurs \Cle{mainlevee=5mm et 0.6pt} donnent des résultats -- à mon sens -
\begin{tikzpicture}
\draw[thick,mainlevee=10mm et 3mm] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~\begin{tikzpicture}
\draw[xstep=0.5,ystep=0.5,ultra thin,lightgray] (0,0) grid (4,4);
\draw[thick,mainlevee] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
\end{tikzpicture}
-\hspace{1.5cm}
+\hspace{1cm}
\begin{tikzpicture}
\draw[xstep=0.5,ystep=0.5,ultra thin,lightgray] (0,0) grid (4,4);
\draw[thick,mainlevee=5mm et 2pt] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
\end{tikzpicture}
-\hspace{1.5cm}
+\hspace{1cm}
\begin{tikzpicture}
\draw[xstep=0.5,ystep=0.5,ultra thin,lightgray] (0,0) grid (4,4);
\draw[thick,mainlevee=10mm et 3mm] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour les statistiques}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
@@ -3343,7 +3498,7 @@ Les valeurs \Cle{mainlevee=5mm et 0.6pt} donnent des résultats -- à mon sens -
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'utiliser une commande qui va permettre de calculer les paramètres principaux d'un régression linéaire par la méthode des moindres carrés.
Le package \ctex{pgfpots} permet de le faire nativement, mais le moteur de calculs de \textsf{pgf} peut poser souci avec de grandes valeurs, donc ici cela passe par \ctex{xfp} qui permet de \textit{gagner} en précision !
@@ -3359,21 +3514,22 @@ L'idée est que cette macro calcule et stocke les paramètres dans des variables
\item dans un environnement \hologo{METAPOST} (à vérifier quand même) ;
\item \ldots
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
\CalculsRegLin[clés]{listeX}{listeY} %listes avec éléments séparés par des ,
...
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La commande \ctex{CalculsRegLin} va définir également des \textsf{macros} pour chaque coefficient, qui de ce fait seront réutilisables après !
-\end{codeinfo}
+\end{noteblock}
\subsection{Commandes}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour \textit{renommer} les paramètres :
\begin{itemize}
@@ -3384,16 +3540,17 @@ Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour
\item la clé \Cle{NomXmin} qui permet de définir la variable qui contiendra $x_{\text{min}}$ ;\hfill{}défaut \Cle{LXmin}
\item la clé \Cle{NomXmax} qui permet de définir la variable qui contiendra $x_{\text{max}}$.\hfill{}défaut \Cle{LXmax}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%les espaces verticaux n'ont pas été écrits ici
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\CalculsRegLin{\LLX}{\LLY}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%vérif des calculs (noms non modifiables...)
Liste des X := \showitems\LX.
Liste des Y := \showitems\LY.
@@ -3407,9 +3564,9 @@ Coefficient $a=\COEFFa$.
Coefficient $b=\COEFFb$.
Coefficient $r=\COEFFr$.
Coefficient $r^2=\COEFFrd$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
\CalculsRegLin{\LLX}{\LLY}
@@ -3455,17 +3612,17 @@ Coefficient $r=\COEFFr$.\tabto{0.5\textwidth}Coefficient $r^2=\COEFFrd$.
%\smallskip
%
%Coefficient $r^2=\COEFFrd$.
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
\hfill~\includegraphics[height=3cm]{./graphics/pl-doc-stats_a}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_b}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_c}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_c2}\hfill~
-\end{codeinfo}
+\end{noteblock}
-\begin{codeinfo}
+\begin{noteblock}
Les \textsf{macros} qui contiennent les paramètres de la régression sont donc réutilisables, en tant que nombres réels, donc exploitables par \ctex{siunitx} et \ctex{xfp} pour affichage \textit{fin} ! Ci-dessous un exemple permettant de visualiser tout cela.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%les espaces verticaux n'ont pas été écrits ici
\def\LstX{0,1,3,4,5,6}
\def\LstY{-35,-37.4,-37.7,-39.9,-39,-39.6}
@@ -3479,9 +3636,9 @@ Les \textsf{macros} qui contiennent les paramètres de la régression sont donc
%paramètres
Les valeurs extr. de X sont \TESTmin{} et \TESTmax. Une éq. est $y=\arrond[3]{\TESTa}x \arrond*[3]{\TESTb}$.
Le coeff. de corrélation est $r=\arrond[4]{\TESTr}$, et son carré est $r^2=\arrond[4]{\TESTrd}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LstX{0,1,3,4,5,6}\def\LstY{-35,-37.4,-37.7,-39.9,-39,-39.6}
\CalculsRegLin[NomCoeffa=TESTa,NomCoeffb=TESTb,NomCoeffr=TESTr,NomCoeffrd=TESTrd,NomXmin=TESTmin,NomXmax=TESTmax]{\LstX}{\LstY}
\DeclareDocumentCommand\arrond{ s O{3} m }{
@@ -3496,19 +3653,19 @@ Les valeurs extrêmes de $x$ sont \TESTmin{} et \TESTmax. Une équation de la dr
\smallskip
Le coefficient de corrélation linéaire est $r=\arrond[4]{\TESTr}$, et son carré est $r^2=\arrond[4]{\TESTrd}$.
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
\hfill~\includegraphics[height=3cm]{./graphics/pl-doc-stats_d}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_e}\hfill~
-\end{codeinfo}
+\end{noteblock}
\subsection{Intégration dans un environnement \TikZ}
-\begin{codeinfo}
+\begin{noteblock}
La commande étant \og autonome \fg{}, elle va pouvoir être intégrée dans des environnements graphiques pour permettre un tracé \textit{facile} de la droite de régression.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}
\begin{axis}[options des axes, non présentées ici...]
\addplot[teal, only marks] table{
@@ -3516,17 +3673,17 @@ La commande étant \og autonome \fg{}, elle va pouvoir être intégrée dans des
1994 1718 1995 1710 1996 1708 1997 1700 1998 1698 1999 1697 2000 1691 2001 1688
2002 1683 2004 1679 2005 1671 2006 1670 2007 1663 2008 1661 2009 1656 2010 1649
};
- \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
- \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+ \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+ \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\CalculsRegLin{\LLX}{\LLY}
\addplot [thick,orange,domain=\LXmin:\LXmax,samples=2]{\COEFFa*x+\COEFFb};
\addlegendentry{$y = \fpeval{round(\COEFFa,3)}\,x + \fpeval{round(\COEFFb,3)}$};
\addlegendentry{$R^2=\fpeval{round(\COEFFrd,5)}$};
\end{axis}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{tikzpicture}
\begin{axis}[
/pgf/number format/.cd,
@@ -3575,22 +3732,22 @@ La commande étant \og autonome \fg{}, elle va pouvoir être intégrée dans des
\addlegendentry{$R^2=\fpeval{round(\COEFFrd,5)}$};
\end{axis}
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Il existe également une commande auxiliaire, \ctex{PointsRegLin} pour afficher le nuage de points avec quelques options, dans un environnement \TikZ{} classique (sans \textsf{pgfplot})\ldots
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
\begin{tikzpicture}[<options>]
...
\PointsRegLin[clés]{listeX}{listeY}
...
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour la mise en forme du nuage :
\begin{itemize}
@@ -3599,9 +3756,10 @@ Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour
\item la clé \Cle{Ox} pour spécifier la valeur initiale Ox (si changement d'origine) ;\hfill{}défaut \Cle{0}
\item la clé \Cle{Oy} pour spécifier la valeur initiale Oy (si changement d'origine).\hfill{}défaut \Cle{0}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}[x=0.5cm,y=0.05cm]
\draw[xstep=1,ystep=5,lightgray!50,very thin] (0,0) grid (20,100);
\draw[xstep=2,ystep=10,lightgray,thin] (0,0) grid (20,100);
@@ -3609,8 +3767,8 @@ Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour
\draw[thick,->,>=latex] (0,0)--(0,100) ;
\foreach \x in {1992,1994,...,2010} \draw[thick] ({\x-1992},4pt)--({\x-1992},-4pt) node[below] {$\x$} ;
\foreach \y in {1640,1650,...,1730} \draw[thick] (4pt,{\y-1640})--(-4pt,{\y-1640}) node[left] {$\y$} ;
- \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
- \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+ \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+ \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\def\Ox{1992}\def\Oy{1640}
\CalculsRegLin{\LLX}{\LLY}
\PointsRegLin[Ox=1992,Oy=1640,Couleur=blue,Taille=3pt]{\LLX}{\LLY}
@@ -3620,9 +3778,9 @@ Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour
\node {$R^2=\num{\fpeval{round(\COEFFrd,5)}}$} ; \\
};
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{tikzpicture}[x=0.5cm,y=0.05cm]
\draw[xstep=1,ystep=5,lightgray!50,very thin] (0,0) grid (20,100);
\draw[xstep=2,ystep=10,lightgray,thin] (0,0) grid (20,100);
@@ -3641,7 +3799,7 @@ Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour
\node {$R^2=\num{\fpeval{round(\COEFFrd,5)}}$} ; \\
};
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -3649,7 +3807,7 @@ Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour
\subsection{Idées}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de \textit{prolonger} le paragraphe précédent pour proposer un environnement \TikZ{} adapté à des situations venant de statistiques à deux variables.
\smallskip
@@ -3678,36 +3836,37 @@ En utilisant les commandes de \textsf{régression linéaire} du paragraphe préc
\item placer le point moyen ;
\item tracer la droite d'ajustement (obtenue par \ctex{ProfLycee}) ou une autre courbe.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Le package \ctex{pgfplots} peut être utilisé pour traiter ce genre de situation, mais ne l'utilisant pas, j'ai préféré préparer des \textsf{macros} permettant de s'affranchir de ce package (est-ce pertinent, ça c'est une autre question\ldots).
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%Listes et calculs
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\CalculsRegLin{\LLX}{\LLY}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%tracé (simple), les options seront présentées juste après
\begin{tikzpicture}%
- [x=0.5cm,y=0.1cm, %unités
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1, %axe Ox
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5] %axe Oy
- \GrilleTikz \AxesTikz %grilles et axes
- \AxexTikz[Annee]{1992,1994,...,2010} %axeOx
- \AxeyTikz{1640,1650,...,1720} %axeOy
- \NuagePointsTikz{\LLX}{\LLY} %nuage
+ [x=0.5cm,y=0.1cm, %unités
+ Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1, %axe Ox
+ Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5] %axe Oy
+ \GrilleTikz \AxesTikz %grilles et axes
+ \AxexTikz[Annee]{1992,1994,...,2010} %axeOx
+ \AxeyTikz{1640,1650,...,1720} %axeOy
+ \NuagePointsTikz{\LLX}{\LLY} %nuage
\CourbeTikz[line width=1.25pt,ForestGreen,samples=2]%
- {\COEFFa*\x+\COEFFb}{\LXmin:\LXmax} %droite de régression
- \PointMoyenTikz %point moyen
+ {\COEFFa*\x+\COEFFb}{\LXmin:\LXmax} %droite de régression
+ \PointMoyenTikz %point moyen
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%tracé avec options fenêtre par défaut
\begin{tikzpicture}%
[....] %paramètres
@@ -3717,9 +3876,9 @@ Le package \ctex{pgfplots} peut être utilisé pour traiter ce genre de situatio
{\COEFFa*\x+\COEFFb}{\LXmin:\LXmax} %droite de régression
\PLnuageptmoy %point moyen
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
\CalculsRegLin{\LLX}{\LLY}
@@ -3732,11 +3891,11 @@ Le package \ctex{pgfplots} peut être utilisé pour traiter ce genre de situatio
\CourbeTikz[line width=1.25pt,ForestGreen,samples=2]{\COEFFa*\x+\COEFFb}{\LXmin:\LXmax}
\PointMoyenTikz
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Commandes, clés et options}
-\begin{codeinfo}
+\begin{noteblock}
Les \Cle{paramètres} nécessaires à la bonne utilisation des commandes suivantes sont à déclarer directement dans l'environnement \ctex{tikzpicture}, seules les versions \og x \fg{} sont présentées ici:
\begin{itemize}
@@ -3752,27 +3911,30 @@ La fenêtre d'affichage (de sortie) sera donc \textit{portée} par le rectangle
\smallskip
Les commandes ont -- pour certaines -- pas mal de \Cle{clés} pour des réglages fins, mais dans la majorité des cas elles ne sont pas forcément \textit{utiles}.
-\end{codeinfo}
+\end{noteblock}
-\begin{codeinfo}
+\begin{noteblock}
Pour illustrer les commandes et options de ce paragraphe, la base sera le graphique présenté précédemment.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\GrilleTikz[options][options grille ppale][options grille second.]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de tracer une grille principale et/ou une grille secondaire :
\begin{itemize}
- \item les premières \Cle{clés} sont les booléens \Cle{Affp} et \Cle{Affs} qui affichent ou non les grilles ;\hfill~défaut \Cle{true}
+ \item les premières \Cle{clés} sont les booléens \Cle{Affp} et \Cle{Affs} qui affichent ou non les grilles ;
+
+ \hfill~défaut \Cle{true}
\item les options des grilles sont en \TikZ. \hfill~défaut \Cle{thin,lightgray} et \Cle{very thin,lightgray}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\begin{tikzpicture}%
[x=0.3cm,y=0.06cm,%
Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
@@ -3786,9 +3948,9 @@ Cette commande permet de tracer une grille principale et/ou une grille secondair
Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
\GrilleTikz[Affp=false][][orange,densely dotted]
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~
\begin{tikzpicture}%
[x=0.3cm,y=0.06cm,%
@@ -3804,32 +3966,39 @@ Cette commande permet de tracer une grille principale et/ou une grille secondair
\GrilleTikz[Affp=false][][orange,densely dotted]
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\AxesTikz[options]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de tracer les axes, avec des \Cle{clés} :
\begin{itemize}
\item \Cle{Epaisseur} qui est l'épaisseur des traits ; \hfill~défaut \Cle{1.25pt}
\item \Cle{Police} qui est le style des labels des axes ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont}
- \item \cmaj{2.1.2} \Cle{ElargirOx} qui est le \% l'élargissement \Cle{global} ou \Cle{G/D} de l'axe $(Ox)$ ;\hfill~défaut \Cle{0/0.05}
- \item \cmaj{2.1.2} \Cle{ElargirOy} qui est le \% l'élargissement \Cle{global} ou \Cle{B/H} de l'axe $(Oy)$ ;\hfill~défaut \Cle{0/0.05}
+ \item \cmaj{2.1.2} \Cle{ElargirOx} qui est le \% l'élargissement \Cle{global} ou \Cle{G/D} de l'axe $(Ox)$ ;
+
+ \hfill~défaut \Cle{0/0.05}
+ \item \cmaj{2.1.2} \Cle{ElargirOy} qui est le \% l'élargissement \Cle{global} ou \Cle{B/H} de l'axe $(Oy)$ ;
+
+ \hfill~défaut \Cle{0/0.05}
\item \Cle{Labelx} qui est le label de l'axe $(Ox)$ ; \hfill~défaut \Cle{\${}x\$}
\item \Cle{Labely} qui est le label de l'axe $(Oy)$ ; \hfill~défaut \Cle{\${}y\$}
- \item \Cle{AffLabel} qui est le code pour préciser quels labels afficher, entre \Cle{x}, \Cle{y} ou \Cle{xy} ; \hfill~défaut \Cle{vide}
+ \item \Cle{AffLabel} qui est le code pour préciser quels labels afficher, entre \Cle{x}, \Cle{y} ou \Cle{xy} ;
+
+ \hfill~défaut \Cle{vide}
\item \Cle{PosLabelx} pour la position du label de $(Ox)$ en bout d'axe ; \hfill~défaut \Cle{right}
\item \Cle{PosLabely} pour la position du label de $(Oy)$ en bout d'axe ; \hfill~défaut \Cle{above}
\item \Cle{EchelleFleche} qui est l'échelle de la flèche des axes ; \hfill~défaut \Cle{1}
\item \Cle{TypeFleche} qui est le type de la flèche des axes.\hfill~défaut \Cle{latex}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%code tikz
\AxesTikz
@@ -3838,9 +4007,9 @@ Cette commande permet de tracer les axes, avec des \Cle{clés} :
[AffLabel=xy,Labelx={Année},Labely={Altitude},%
PosLabelx={below right},PosLabely={above left},%
Police=\small\sffamily]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~
\begin{tikzpicture}%
[x=0.3cm,y=0.06cm,%
@@ -3859,17 +4028,17 @@ Cette commande permet de tracer les axes, avec des \Cle{clés} :
Police=\small\sffamily]
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
%les axes
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\AxexTikz[options]{valeurs}
\AxeyTikz[options]{valeurs}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} identiques pour les deux directions :
\begin{itemize}
@@ -3881,9 +4050,10 @@ Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} ide
\item le booléen \Cle{AffOrigine} pour afficher la graduation de l'origine ; \hfill~défaut \Cle{true}
\item le booléen \Cle{Annee} qui permet de ne pas formater les valeurs des graduations (type \textsf{année}). \hfill~défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%code tikz
\AxexTikz[Police=\small]{1992,1994,...,2010}
\AxexTikz{1640,1650,...,1720}
@@ -3893,35 +4063,35 @@ Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} ide
\AxeyTikz[AffGrad=false,HautGrad=6pt]{1640,1650,...,1720}
%des axes fictifs (en gris) sont rajoutés pour la lisibilité du code de sortie
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill~
\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
+ [x=0.3cm,y=0.06cm,%
Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
\draw[gray,line width=1.25pt,->,>=latex] ({\xmin-\axexOx},0) -- ({\xmax-\axexOx},0) ;
\draw[gray,line width=1.25pt,->,>=latex] (0,{\ymin-\axeyOy}) -- (0,{\ymax-\axeyOy}) ;
- \AxexTikz[Police=\small]{1992,1994,...,2010}
+ \AxexTikz[Police=\tiny]{1992,1994,...,2010}
\AxeyTikz{1640,1650,...,1720}
\end{tikzpicture}
~~
\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
+ [x=0.3cm,y=0.06cm,%
Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
\draw[gray,line width=1.25pt,->,>=latex] ({\xmin-\axexOx},0) -- ({\xmax-\axexOx},0) ;
\draw[gray,line width=1.25pt,->,>=latex] (0,{\ymin-\axeyOy}) -- (0,{\ymax-\axeyOy}) ;
- \AxexTikz[Police=\small,Annee,HautGrad=0pt/4pt]{1992,1994,...,2010}
+ \AxexTikz[Police=\tiny,Annee,HautGrad=0pt/4pt]{1992,1994,...,2010}
\AxeyTikz[AffGrad=false,HautGrad=6pt]{1640,1650,...,1720}
\end{tikzpicture}
\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Commandes annexes}
-\begin{codeinfo}
+\begin{noteblock}
Il existe, de manière marginale, quelques commandes complémentaires qui ne seront pas trop détaillées mais qui sont présentes dans l'introduction :
\begin{itemize}
@@ -3929,29 +4099,30 @@ Il existe, de manière marginale, quelques commandes complémentaires qui ne ser
\item \ctex{FenetreSimpleTikz} qui permet d'automatiser le tracé des grilles/axes/graduations dans leurs versions par défaut, avec peu de paramétrages ;
\item \ctex{OrigineTikz} pour rajouter le libellé de l'origine si non affiché par les axes.
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%code tikz
\FenetreTikz %on restreint les tracés
\FenetreSimpleTikz[opt](opt axes)<opt axe Ox>{liste valx}<opt axe Oy>{liste valy}
-\end{codetex}
+\end{PresentationCodePL}
%%l'origine
%
-%\begin{codetex}[listing only]
+%\begin{PresentationCodePL}{listing only}
%%...code tikz
% \PLorigine[<options>]
-%\end{codetex}
+%\end{PresentationCodePL}
\subsection{Interactions avec CalculsRegLin}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\NuagePointsTikz[options]{listeX}{listeY}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter le nuage de points associé aux deux listes, avec les \Cle{clés} suivantes :
\begin{itemize}
@@ -3959,11 +4130,12 @@ Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter
\item \Cle{Style} parmi \Cle{o} (rond) ou \Cle{x} (croix) ou \Cle{+} (plus) ; \hfill~défaut \Cle{o}
\item \Cle{Couleur} qui est la couleur (éventuellement \Cle{couleurA/couleurB} pour les ronds). \hfill~défaut \Cle{blue}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+\begin{PresentationCodePL}{listing only}
+\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\begin{tikzpicture}[...]
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY}
@@ -3972,9 +4144,9 @@ Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter
\begin{tikzpicture}[...]
\NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
\CalculsRegLin{\LLX}{\LLY}
@@ -3985,22 +4157,22 @@ Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter
\AxeyTikz{1640,1650,...,1720}
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY}
\end{tikzpicture}
-~~
+
\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
\GrilleTikz \AxesTikz
\AxexTikz[Annee,Police=\small]{1992,1994,...,2010}
\AxeyTikz{1640,1650,...,1720}
\NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY}
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
%point moyen
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\PointMoyenTikz[options]
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de rajouter le point moyen du nuage, calculé par la commande \ctex{CalculsRegLin}, avec les \Cle{clés} :
\begin{itemize}
@@ -4015,11 +4187,12 @@ Cette commande permet de rajouter le point moyen du nuage, calculé par la comma
\item \Cle{Decal} qui est l'éloignement de la position du label par rapport au point ; \hfill~défaut \Cle{0pt}
\item la booléen \Cle{AffNom} qui affiche ou non le libellé.\hfill~défaut \Cle{true}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+\begin{PresentationCodePL}{listing only}
+\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\CalculsRegLin{\LLX}{\LLY}
\begin{tikzpicture}[...]
@@ -4031,9 +4204,9 @@ Cette commande permet de rajouter le point moyen du nuage, calculé par la comma
\NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY}
\PointMoyenTikz[Couleur=orange,Taille=8pt,Style=+,Nom={$G_1$},Pos=below]
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
\CalculsRegLin{\LLX}{\LLY}
@@ -4045,7 +4218,7 @@ Cette commande permet de rajouter le point moyen du nuage, calculé par la comma
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY}
\PointMoyenTikz
\end{tikzpicture}
-~~
+
\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
\GrilleTikz \AxesTikz
\AxexTikz[Annee,Police=\small]{1992,1994,...,2010}
@@ -4053,15 +4226,15 @@ Cette commande permet de rajouter le point moyen du nuage, calculé par la comma
\NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY}
\PointMoyenTikz[Couleur=orange,Taille=8pt,Style=+,Nom={$G_1$},Pos=below]
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
%courbe
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%...code tikz
\CourbeTikz[options]{formule}{domaine}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Cette commande permet de rajouter une courbe sur le graphique (sans se soucier de la transformation de son expression) avec les arguments :
\begin{itemize}
@@ -4069,28 +4242,29 @@ Cette commande permet de rajouter une courbe sur le graphique (sans se soucier d
\item le premier \textit{obligatoire}, est -- en langage \TikZ{} -- l'expression de la fonction à tracer, donc avec \ctex{\textbackslash{}x} comme variable ;
\item le second \textit{obligatoire} est le domaine du tracé , sous la forme \ctex{valxmin:valxmax}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
L'idée principale est de récupérer les variables de la régression linéaire pour tracer la droite d'ajustement \textit{à moindres frais} !
-\end{codeinfo}
+\end{noteblock}
-\begin{codeinfo}
+\begin{noteblock}
Toute courbe peut être tracée sur ce principe, par contre il faudra saisir la fonction \textit{à la main}.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+\begin{PresentationCodePL}{listing only}
+\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
+\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
\CalculsRegLin{\LLX}{\LLY}
\begin{tikzpicture}[...]
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY} \PointMoyenTikz
\CourbeTikz[line width=1.25pt,ForestGreen,samples=2]{\COEFFa*\x+\COEFFb}{\xmin:\xmax}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
\CalculsRegLin{\LLX}{\LLY}
@@ -4102,11 +4276,11 @@ L'idée principale est de récupérer les variables de la régression linéaire
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY} \PointMoyenTikz
\CourbeTikz[line width=1.25pt,ForestGreen,samples=2]{\COEFFa*\x+\COEFFb}{\xmin:\xmax}
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Exemple complémentaire, pour illustration}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
@@ -4117,9 +4291,9 @@ L'idée principale est de récupérer les variables de la régression linéaire
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY} \FenetreTikz %on fixe la fenêtre
\CourbeTikz[line width=1.25pt,orange,samples=250]{-(\x-2000)*(\x-2000)+1700}{\xmin:\xmax}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
@@ -4130,7 +4304,7 @@ L'idée principale est de récupérer les variables de la régression linéaire
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY} \FenetreTikz
\CourbeTikz[line width=1.25pt,orange,samples=250]{-(\x-2000)*(\x-2000)+1700}{\xmin:\xmax}
\end{tikzpicture}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -4138,27 +4312,27 @@ L'idée principale est de récupérer les variables de la régression linéaire
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer une commande, à intégrer dans un environnement \TikZ, pour tracer une boîte à moustaches grâce aux paramètres, saisis par l'utilisateur.
\smallskip
Le code ne calcule pas les paramètres, il ne fait \textit{que} tracer la boîte à moustaches !
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}
\BoiteMoustaches{10/15/17/19/20}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Étant donnée que la commande est intégrée dans un environnement \TikZ, les unités peuvent/doivent donc être précisées, \textit{comme d'habitude}, si besoin.
-\end{codeinfo}
+\end{noteblock}
\subsection{Clés et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -4176,16 +4350,17 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\hfill~défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}
\BoiteMoustaches[Epaisseur=very thick,Moyenne=18.5,Couleur=blue,AffMoyenne,%
Pointilles,Valeurs,Hauteur=2.25,Elevation=2]{10/15/17/19/20}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%une grille a été rajoutée pour visualiser la "position verticale"
\begin{center}
\begin{tikzpicture}[x=0.1cm]
@@ -4195,9 +4370,9 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
[Elevation=4,Couleur=ForestGreen,Remplir=ForestGreen!25]{100/140/145/160/210}
\end{tikzpicture}
\end{center}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{center}
\begin{tikzpicture}[x=0.1cm]
\draw[xstep=10,ystep=0.5,very thin,lightgray] (80,0) grid (210,4.5) ;
@@ -4208,29 +4383,29 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\BoiteMoustaches[Elevation=4,Couleur=ForestGreen,Remplir=ForestGreen!25]{100/140/145/160/210}
\end{tikzpicture}
\end{center}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Commande pour placer un axe horizontal}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer, en parallèle de la commande précédente, une commande pour tracer un axe horizontal \og sous \fg{} les éventuelles boîtes à moustaches.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}
\BoiteMoustachesAxe[Min=10,Max=20]
\BoiteMoustaches{10/15/17/19/20}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}
\BoiteMoustachesAxe[Min=10,Max=20]
\BoiteMoustaches[Valeurs,Pointilles]{10/15/17/19/20}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -4240,22 +4415,33 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\item la clé \Cle{Epaisseur} qui est l'épaisseur des traits de la boîte ; \hfill~défaut \Cle{thick}
\item la clé \Cle{Valeurs} qui est la liste (compréhensible en \TikZ) des valeurs à afficher.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\begin{tikzpicture}
\BoiteMoustachesAxe[Min=8,Max=21,AffValeurs,Valeurs={8,9,...,21},Elargir=0.02]
\BoiteMoustaches[Moyenne=18.5,Couleur=blue]{10/15/17/19/20}
\BoiteMoustaches[Elevation=2.5,Couleur=red]{8/10/11/12/15}
\BoiteMoustaches[Elevation=4,Couleur=ForestGreen,Remplir=ForestGreen!25]{10/14/14.5/16/21}
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Le placement des différentes boîtes n'est pas automatique, donc il faut penser à cela avant de se lancer dans le code.
Sachant que la hauteur par défaut est de 1, il est -- a priori -- intéressant de placer les boîtes à des \Cle{élévations} de \num{1} puis \num{2.5} puis \num{4} etc
-\end{codeinfo}
+\end{noteblock}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour les probabilités}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
@@ -4265,7 +4451,7 @@ Sachant que la hauteur par défaut est de 1, il est -- a priori -- intéressant
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer des commandes permettant de calculer des probabilités avec des lois classiques :
\begin{itemize}
@@ -4276,9 +4462,10 @@ L'idée est de proposer des commandes permettant de calculer des probabilités a
\item géométrique ;
\item hypergéométrique.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Les commandes sont de deux natures :
\begin{itemize}
@@ -4287,11 +4474,11 @@ Les commandes sont de deux natures :
\end{itemize}
De ce fait, les options de \ctex{siunitx} de l'utilisateur affecterons les formatages du résultat, la commande va \og forcer \fg{} les arrondis et l'écriture scientifique.
-\end{codeinfo}
+\end{noteblock}
\subsection{Calculs \og simples \fg}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%loi binomiale B(n,p)
\CalcBinomP{n}{p}{k} %P(X=k)
\CalcBinomC{n}{p}{a}{b} %P(a<=X<=b)
@@ -4313,17 +4500,17 @@ De ce fait, les options de \ctex{siunitx} de l'utilisateur affecterons les forma
%loi exponentielle E(l)
\CalcExpoC{l}{a}{b} %P(a<=X<=b)
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Les probabilités calculables sont donc -- comme pour beaucoup de modèles de calculatrices -- les probabilités \textbf{P}onctuelles ($P(X=k)$) et \textbf{C}umulées ($P(a\leqslant X\leqslant b)$).
\smallskip
Pour les probabilités cumulées, on peut utiliser le caractère \ctex{*} comme borne ($a$ ou $b$), pour les probabilités du type $P(X\leqslant b)$ et $P(X \geqslant a)$.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
% X -> B(5,0.4)
$P(X=3) \approx \CalcBinomP{5}{0.4}{3}$.
$P(X\leqslant1) \approx \CalcBinomC{5}{0.4}{*}{1}$.
@@ -4343,9 +4530,9 @@ $P(T\leqslant5) \approx \CalcPoissC{0.5}{*}{5}$.
% W -> H(50,10,5)
$P(W=4) \approx \CalcHypergeomP{50}{10}{5}{4}$.
$P(1\leqslant W\leqslant3) \approx \CalcHypergeomC{50}{10}{5}{1}{3}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}[listing only]
+\begin{PresentationCodePL}{text only}
$\bullet~~~~X \hookrightarrow \mathcal{B}(5\,; 0,4)$ :\\
$P(X=3) \approx \CalcBinomP{5}{0.4}{3}$.\\
$P(X\leqslant1) \approx \CalcBinomC{5}{0.4}{*}{1}$.
@@ -4373,9 +4560,9 @@ $P(T\leqslant5) \approx \CalcGeomC{0.5}{*}{5}$.
$\bullet~~~~W \hookrightarrow \mathcal{H}(50\,; 10\,; 5)$ :\\
$P(W=4) \approx \CalcHypergeomP{50}{10}{5}{4}$.\\
$P(1\leqslant W\leqslant3) \approx \CalcHypergeomC{50}{10}{5}{1}{3}$.
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
% X -> N(0,1)
$P(X\leqslant1) \approx \CalcNormC{0}{1}{*}{1}$.
$P(-1,96\leqslant Z\leqslant1,96) \approx \CalcNormC{0}{1}{-1.96}{1.96}$.
@@ -4387,9 +4574,9 @@ $P(500\leqslant Y\leqslant600) \approx \CalcNormC{550}{30}{500}{600}$.
% Z -> E(0.001)
$P(Z\geqslant400) \approx \CalcExpoC{0.001}{400}{*}$.
$P(300\leqslant Z\leqslant750) \approx \CalcExpoC{0.001}{300}{750}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\bullet~~~~X \hookrightarrow \mathcal{N}(0\,; 1)$ :\\
$P(X\leqslant1) \approx \CalcNormC{0}{1}{*}{1}$.\\
$P(-1,96\leqslant Z\leqslant1,96) \approx \CalcNormC{0}{1}{-1.96}{1.96}$.
@@ -4405,30 +4592,30 @@ $P(500\leqslant Y\leqslant600) \approx \CalcNormC{550}{30}{500}{600}$.
$\bullet~~~~Z \hookrightarrow \mathcal{E}_{0,001}$ :\\
$P(Z\geqslant400) \approx \CalcExpoC{0.001}{400}{*}$.\\
$P(300\leqslant Z\leqslant750) \approx \CalcExpoC{0.001}{300}{750}$.
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Complément avec sortie \og formatée \fg}
-\begin{codeidee}
+\begin{tipblock}
L'idée est ensuite de formater le résultat obtenu par \ctex{xintexpr}, pour un affichage homogène.
\smallskip
L'utilisateur peut donc utiliser \og sa \fg{} méthode pour formater les résultats obtenus par \ctex{xintexpr} !
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%avec un formatage manuel
\num[exponent-mode=scientific]{\CalcBinomP{100}{0.02}{10}}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{}
$\bullet~~~~X \hookrightarrow \mathcal{B}(100\,; 0,02)$ :
$P(X=10) \approx \num[exponent-mode=scientific]{\CalcBinomP{100}{0.02}{10}}$.
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeidee}
+\begin{tipblock}
Le package \ctex{ProfLycee} propose -- en complément -- des commandes pour formater, grâce à \ctex{siunitx}, le résultat.
Les commandes ne sont donc, dans ce cas, pas préfixées par \ctex{calc} :
@@ -4437,9 +4624,10 @@ Les commandes ne sont donc, dans ce cas, pas préfixées par \ctex{calc} :
\item formatage sous forme décimale \textit{pure} : $0,00\ldots$ ;
\item formatage sous forme scientifique : $n,\ldots\times10^{\ldots}$.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%loi binomiale B(n,p)
\BinomP(*)[prec]{n}{p}{k} %P(X=k)
\BinomC(*)[prec]{n}{p}{a}{b} %P(a<=X<=b)
@@ -4461,18 +4649,19 @@ Les commandes ne sont donc, dans ce cas, pas préfixées par \ctex{calc} :
%loi exponentielle E(l)
\ExpoC(*)[prec]{l}{a}{b} %P(a<=X<=b)
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques précisions sur les commandes précédentes :
\begin{itemize}
\item la version étoilée \Cle{*} des commandes formate le résultat en mode scientifique ;
\item l'argument optionnel (par défaut \Cle{3}) correspond à quant à lui à l'arrondi.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
% X -> N(550,30)
$P(Y\geqslant600) \approx \NormaleC[4]{550}{30}{600}{*}$.
$P(500\leqslant Y\leqslant600) \approx \NormaleC[4]{550}{30}{500}{600}$.
@@ -4488,9 +4677,9 @@ $P(300\leqslant Z\leqslant750) \approx \ExpoC{0.001}{300}{750}$.
% T -> P(5)
$P(T=3) \approx \PoissonP{5}{3}$.
$P(T\geqslant2) \approx \PoissonC[4]{5}{2}{*}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\bullet~~~~Y \hookrightarrow \mathcal{N}(550\,; 30)$ :
$P(Y\geqslant600) \approx \NormaleC[4]{550}{30}{600}{*}$.
@@ -4528,11 +4717,11 @@ $\bullet~~~~T \hookrightarrow \mathcal{P}_5$ :
$P(T=3) \approx \PoissonP{5}{3}$.
$P(T\geqslant2) \approx \PoissonC[4]{5}{2}{*}$.
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
\hfill~\includegraphics[height=3cm]{./graphics/pl-doc-probas_a}~~\includegraphics[height=3cm]{./graphics/pl-doc-probas_c}~~\includegraphics[height=3cm]{./graphics/pl-doc-probas_e}~~\includegraphics[height=3cm]{./graphics/pl-doc-probas_f}\hfill~
-\end{codeinfo}
+\end{noteblock}
\newpage
@@ -4540,7 +4729,7 @@ $P(T\geqslant2) \approx \PoissonC[4]{5}{2}{*}$.
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer des commandes pour créer des arbres de probabilités classiques (et homogènes), en \TikZ, de format :
\begin{itemize}
@@ -4549,9 +4738,9 @@ L'idée est de proposer des commandes pour créer des arbres de probabilités cl
\end{itemize}
Les (deux) commandes sont donc liées à un environnement \ctex{tikzpicture}, et elles créent les nœuds de l'arbre, pour exploitation ultérieure éventuelle.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%commande simple pour tracé de l'arbre
\ArbreProbasTikz[options]{donnees}
@@ -4559,11 +4748,11 @@ Les (deux) commandes sont donc liées à un environnement \ctex{tikzpicture}, et
\begin{EnvArbreProbasTikz}[options]{donnees}
code tikz supplémentaire
\end{EnvArbreProbasTikz}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Options et arguments}
-\begin{codeinfo}
+\begin{noteblock}
Les \Cle{donnees} seront à préciser sous forme
\hfill\ctex{<sommet1>/<proba1>/<position1>,<sommet2>/<proba2>/<position2>,...}\hfill~
@@ -4574,9 +4763,10 @@ avec comme \og sens de lecture \fg{} de la gauche vers la droite puis du haut ve
\item \cmaj{2.5.3} une donnée \Cle{proba} peut être laissée vide ou spécifiée avec des \textsf{macros} ;
\item une donnée \Cle{position} peut valoir \Cle{above} (au-dessus), \Cle{below} (en-dessous) ou être laissée \Cle{vide} (sur).
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{Clés} (communes) pour les deux commandes :
\begin{itemize}
@@ -4591,9 +4781,10 @@ Quelques \Cle{Clés} (communes) pour les deux commandes :
\item la clé \Cle{StyleTrait} pour les branches, en langage \TikZ{} ; \hfill~défaut \Cle{vide}
\item la clé \Cle{EpaisseurTrait} pour l'épaisseur des branches, en langage \TikZ{} ; \hfill~défaut \Cle{semithick}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\def\ArbreDeuxDeux{
$A$/\num{0.5}/,
$B$/\num{0.4}/,
@@ -4606,9 +4797,9 @@ Quelques \Cle{Clés} (communes) pour les deux commandes :
\ArbreProbasTikz{\ArbreDeuxDeux}
%des éléménts, en gris, ont été rajoutés pour illustrer certaines options
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{EnvArbreProbasTikz}{$A$/\num{0.5}/,$B$/\num{0.4}/,$\overline{B}$/.../,$\overline{A}$/.../,$B$/.../,$\overline{B}$/$\frac{1}{3}$/}
\draw[lightgray] (R) node[left,font=\ttfamily\small] {(R)} ;
\draw[lightgray] (A11) node[below,font=\ttfamily\small] {(A11)} ;
@@ -4623,9 +4814,9 @@ Quelques \Cle{Clés} (communes) pour les deux commandes :
\draw[lightgray,<->,>=latex] (7,-1) -- (7,-2) node[midway,right,font=\ttfamily\small] {EspaceFeuille} ;
\draw[lightgray,<->,>=latex] (7,-2) -- (7,-3) node[midway,right,font=\ttfamily\small] {EspaceFeuille} ;
\end{EnvArbreProbasTikz}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Les nœuds crées par les commandes sont :
\begin{itemize}
@@ -4633,11 +4824,12 @@ Les nœuds crées par les commandes sont :
\item \ctex{A1x} pour les nœuds du 1\up{er} niveau (de haut en bas) ;
\item \ctex{A2x} pour les nœuds du 2\up{d} niveau (de haut en bas).
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
\subsection{Exemples complémentaires}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\def\ArbreTroisDeux{
$A_1$/\num{0.5}/above,
$B$/\num{0.4}/above,
@@ -4650,18 +4842,19 @@ Les nœuds crées par les commandes sont :
$\overline{B}$/$\frac{4}{15}$/below
}
-\begin{EnvArbreProbasTikz}[Type=3x2,Fleche,EspaceNiveau=5,EspaceFeuille=1.25]{\ArbreTroisDeux}
+\begin{EnvArbreProbasTikz}[Type=3x2,Fleche,EspaceNiveau=5,EspaceFeuille=1.25]%
+ {\ArbreTroisDeux}
\draw[ForestGreen,->] (A24)--($(A24)+(2.5,0)$) node[right,font=\sffamily] {code tikz rajouté} ;
\end{EnvArbreProbasTikz}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\begin{EnvArbreProbasTikz}[Type=3x2,Fleche,EspaceNiveau=5,EspaceFeuille=1.25]{$A_1$/\num{0.5}/above,$B$/\num{0.4}/above,$\overline{B}$/.../below,$A_2$/.../above,$B$/.../above,$\overline{B}$/$\frac{1}{3}$/below,$A_3$/.../below,$B$/.../above,$\overline{B}$/$\frac{4}{15}$/below}
\draw[ForestGreen,->] (A24)--($(A24)+(2.5,0)$) node[right,font=\sffamily] {code tikz rajouté} ;
\end{EnvArbreProbasTikz}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\def\ArbreDeuxTrois{
$A$/\num{0.05}/above,
$B_1$/\num{0.4}/above,$B_2$/\num{0.35}/,$B_3$//below,
@@ -4677,13 +4870,13 @@ Les nœuds crées par les commandes sont :
}
\ArbreProbasTikz[Type=3x3,StyleTrait={densely dashed},EspaceFeuille=0.7,PoliceProbas=\scriptsize,Police=\small]{\ArbreTroisTrois}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\ArbreProbasTikz[Type=2x3,InclineProbas=false,EspaceFeuille=1.15]{$A$/\num{0.05}/above,$B_1$/\num{0.4}/above,$B_2$/\num{0.35}/,$B_3$//below,$\overline{A}$/.../below,$B_1$/$\frac{2}{15}$/above,$B_2$/.../,$B_3$/$\frac{1}{3}$/below}
~~
\ArbreProbasTikz[Type=3x3,StyleTrait={densely dashed},EspaceFeuille=0.7,PoliceProbas=\scriptsize,Police=\small]{$A_1$/\num{0.05}/,$B_1$/{1/3}/,$B_2$/{1/3}/,$B_3$/{1/3}/,$A_2$/\num{0.80}/,$B_1$/{1/3}/,$B_2$/{1/3}/,$B_3$/{1/3}/,$A_3$/\num{0.15}/,$B_1$/{1/3}/,$B_2$/{1/3}/,$B_3$/{1/3}/}
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -4691,35 +4884,35 @@ Les nœuds crées par les commandes sont :
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer des commandes pour illustrer, sous forme de schémas en \TikZ, des probabilités avec des lois continues (normales et exponentielles).
\smallskip
Ces \og schémas \fg{} peuvent être insérés en tant que graphique explicatif, ou bien en tant que petite illustration rapide !
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\LoiNormaleGraphe[options]<options tikz>{m}{s}{a}{b}
\LoiExpoGraphe[options]<options tikz>{l}{a}{b}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\hfill\LoiNormaleGraphe{100}{20}{80}{120}\hspace{3cm}\LoiExpoGraphe{0.001}{250}{1500}\hfill~
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Les probabilités \textit{illustrables} sont donc des probabilités \textbf{C}umulées ($P(a\leqslant X\leqslant b)$).
\smallskip
On peut utiliser \ctex{*} comme borne ($a$ ou $b$), pour les probabilités du type $P(X\leqslant b)$ et $P(X \geqslant a)$.
-\end{codecles}
+\end{cautionblock}
\subsection{Commandes et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{Clés} sont disponibles pour ces commandes :
\begin{itemize}
@@ -4730,19 +4923,21 @@ Quelques \Cle{Clés} sont disponibles pour ces commandes :
\item un booléen \Cle{AfficheM} qui affiche la moyenne ; \hfill{}défaut \Cle{true}
\item un booléen \Cle{AfficheCadre} qui affiche un cadre pour délimiter le schéma. \hfill{}défaut \Cle{true}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
Les commandes sont donc des environnements \TikZ, sans possibilité de \og rajouter \fg{} des éléments. Ces petis \textit{schémas} sont donc vraiment dédiés à \textit{montrer} rapidement une probabilité continue, sans fioriture.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}
+\begin{PresentationCodePL}{}
Avec centrage vertical sur l'axe des abscisses :
\LoiNormaleGraphe
- [AfficheM=false,CouleurCourbe=Blue,CouleurAire=LightBlue]<baseline=0pt>{1000}{100}{950}{*}
-\end{codetex}
+ [AfficheM=false,CouleurCourbe=Blue,CouleurAire=LightBlue]<baseline=0pt>%
+ {1000}{100}{950}{*}
+\end{PresentationCodePL}
-\begin{codetex}
+\begin{PresentationCodePL}{}
Avec quelques modifications :
\LoiNormaleGraphe[Largeur=4,Hauteur=2]{150}{12.5}{122}{160}
@@ -4761,13 +4956,13 @@ Avec centrage vertical sur l'axe des abscisses :
\medskip
\LoiExpoGraphe[Largeur=4,Hauteur=2]{0.00025}{5000}{*}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Remarques et compléments}
-\begin{codeinfo}
+\begin{noteblock}
Pour le moment, seules les lois (continues) exponentielles et normales sont disponibles, peut-être que d'autres lois seront ajoutées, mais il ne me semble pas très pertinent de proposer des schémas similaires pour des lois discrètes, qui ont des \textit{représentations} assez variables\ldots
-\end{codeinfo}
+\end{noteblock}
\newpage
@@ -4775,20 +4970,21 @@ Pour le moment, seules les lois (continues) exponentielles et normales sont disp
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.0.9} L'idée est de proposer des commandes pour générer des nombres aléatoires, pour exploitation ultérieure :
\begin{itemize}
\item un entier ou un nombre décimal ;
\item des nombres entiers, avec ou sans répétitions.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Pour chacune des commandes, le ou les résultats sont stockés dans une \textsf{macro} dont le nom est choisi par l'utilisateur.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%entier aléatoire entre a et b
\NbAlea{a}{b}{macro}
@@ -4800,34 +4996,34 @@ Pour chacune des commandes, le ou les résultats sont stockés dans une \textsf{
%liste d'entiers aléatoires
\TirageAleatoireEntiers[options]{macro}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
%nombre aléatoire entre 1 et 50, stocké dans \PremierNbAlea
-Entier entre 1 et 50 : \NbAlea{1}{50}{\PremierNbAlea}\PremierNbAlea
+Entier entre 1 et 50 : \NbAlea{1}{50}{\PremierNbAlea}\PremierNbAlea \\
%nombre aléatoire créé à partir du 1er, stocké dans \DeuxiemeNbAlea
-Entier à partir du précédent : \VarNbAlea{\DeuxiemeNbAlea}{\PremierNbAlea+randint(0,10)}\DeuxiemeNbAlea
+Entier à partir du précédent : \VarNbAlea{\DeuxiemeNbAlea}{\PremierNbAlea+randint(0,10)}\DeuxiemeNbAlea \\
%nombre aléatoire décimal (au millième) entre 0 et 10+1 (exclus), stocké dans \PremierDecAlea
-Décimal entre 0 et $10,999\ldots$ : \NbAlea[3]{0}{10}{\PremierDecAlea}\PremierDecAlea
+Décimal entre 0 et $10,999\ldots$ : \NbAlea[3]{0}{10}{\PremierDecAlea}\PremierDecAlea \\
%liste de 6 nombres, sans répétitions, entre 1 et 50
Liste par défaut (6 entre 1 et 50) : \TirageAleatoireEntiers{\PremiereListeAlea}\PremiereListeAlea
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Les listes créées sont exploitables, \textit{a posteriori}, par le package \ctex{listofitems} par exemple !
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Liste générée : \TirageAleatoireEntiers{\TestListeA}\TestListeA
Liste traitée : \readlist*\LISTEa{\TestListeA}\showitems{\LISTEa}
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
\subsection{Clés et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques clés sont disponibles pour la commande \ctex{TirageAleatoireEntiers} :
\begin{itemize}
@@ -4839,29 +5035,32 @@ Quelques clés sont disponibles pour la commande \ctex{TirageAleatoireEntiers} :
;\hfill{}défaut \Cle{non}
\item le booléen \Cle{Repetition} pour autoriser la répétition d'éléments.\hfill{}défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Une liste de 15 valeurs (différentes), entre 10 et 100, stockée dans la macro MaListeA : \\
Liste : \TirageAleatoireEntiers[ValMin=10,ValMax=100,NbVal=15]{\MaListeA}\MaListeA \\
Une liste de 12 valeurs (différentes), entre 1 et 50, ordre croissant : \\
-Liste : \TirageAleatoireEntiers[ValMin=1,ValMax=50,NbVal=12,Tri=croissant]{\MaListeB}\MaListeB \\
+Liste : \TirageAleatoireEntiers[ValMin=1,ValMax=50,NbVal=12,Tri=croissant]%
+ {\MaListeB}\MaListeB \\
Une liste de 12 valeurs (différentes), entre 1 et 50, ordre décroissant : \\
-Liste : \TirageAleatoireEntiers[ValMin=1,ValMax=50,NbVal=12,Tri=decroissant]{\MaListeC}\MaListeC \\
+Liste : \TirageAleatoireEntiers[ValMin=1,ValMax=50,NbVal=12,Tri=decroissant]%
+ {\MaListeC}\MaListeC \\
15 tirages de dé à 6 faces : \\ \TirageAleatoireEntiers[ValMin=1,ValMax=6,NbVal=15,Repetition]{\TestDes}\TestDes
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
Une liste (10) pour le Keno\textcopyright, ordonnée, et séparée par des \texttt{-} :
\TirageAleatoireEntiers[ValMin=1,ValMax=70,NbVal=10,Tri=croissant,Sep={-}]{\ListeKeno}
$\ListeKeno$
\setsepchar{-}\readlist*\KENO{\ListeKeno}\showitems{\KENO}
-\end{codetex}
+\end{PresentationCodePL}
\newpage
@@ -4869,19 +5068,19 @@ $\ListeKeno$
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer une commande pour calculer un arrangement ou une combinaison, en utilisant les capacités de calcul du package \ctex{xint} (\cmaj{2.5.4}).
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\Arrangement(*)[option]{p}{n}
\Combinaison(*)[option]{p}{n}
\CalculAnp{p}{n} ou \CalculCnp{p}{n} dans un calcul via \xinteval{...}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Utilisation}
-\begin{codecles}
+\begin{cautionblock}
Peu de paramétrage pour ces commandes qui permettent de calculer $A_n^p$ et $\binom{n}{p}$ :
\begin{itemize}
@@ -4891,26 +5090,37 @@ Peu de paramétrage pour ces commandes qui permettent de calculer $A_n^p$ et $\b
\item le premier argument, \textit{obligatoire}, est la valeur de $p$ ;
\item le second argument, \textit{obligatoire}, est la valeur de $n$.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
On a $A_{20}^3=\Arrangement*{3}{20}$ en non formaté,
et $\Arrangement[Notation]{3}{20}$ en formaté avec la notation au début.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
On a $\displaystyle\binom{20}{3}=\Combinaison*{3}{20}$ en non formaté,~
et $\displaystyle\Combinaison[Notation]{3}{20}$ en formaté avec la notation au début.\\
Et $\dbinom{20}{3}+\dbinom{20}{4} = \num{\xinteval{\CalculCnp{3}{20}+\CalculCnp{4}{20}}}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
On a $\displaystyle\Arrangement[Notation,Formule]{3}{20}$.
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
On a $\displaystyle\Combinaison[NotationAncien,Formule]{3}{20}$. %ancienne notation FR
-\end{codetex}
+\end{PresentationCodePL}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour l'arithmétique}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
@@ -4920,24 +5130,25 @@ On a $\displaystyle\Combinaison[NotationAncien,Formule]{3}{20}$. %ancienne notat
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de \textit{compléter} les possibilités offertes par le package \ctex{xintbinhex}, en mettant en forme quelques conversions :
\begin{itemize}
\item décimal en binaire avec blocs de 4 chiffres en sortie ;
\item conversion binaire ou hexadécimal en décimal avec écriture polynomiale.
\end{itemize}
-\end{codeidee}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
-\begin{codeinfo}
+\begin{noteblock}
Le package \ctex{xintbinhex} est la base de ces macros, puisqu'il permet de faire des conversions directes !
\smallskip
Les macros présentées ici ne font que les intégrer dans un environnement adapté à une correction ou une présentation !
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\xintDecToHex{100}
\xintDecToBin{51}
\xintHexToDec{A4C}
@@ -4945,9 +5156,9 @@ Les macros présentées ici ne font que les intégrer dans un environnement adap
\xintBinToHex{11111111}
\xintHexToBin{ACDC}
\xintCHexToBin{3F}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\xintDecToHex{100}
\xintDecToBin{51}
@@ -4961,15 +5172,15 @@ Les macros présentées ici ne font que les intégrer dans un environnement adap
\xintHexToBin{ACDC}
\xintCHexToBin{3F}
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Conversion décimal vers binaire}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ConversionDecBin(*)[clés]{nombre}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Concernant la commande en elle même, peu de paramétrage :
\begin{itemize}
@@ -4983,9 +5194,9 @@ Le formatage est géré par \ctex{sinuitx}, le mieux est donc de positionner la
\smallskip
Les nombres écrits en binaire sont, par défaut, présentés en bloc(s) de 4 chiffres.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
% Conversion avec affichage de la base et par bloc de 4
$\ConversionDecBin{415}$
% Conversion avec affichage de la base et sans forcément des blocs de 4
@@ -4994,9 +5205,9 @@ $\ConversionDecBin*{415}$
$\ConversionDecBin[AffBase=false]{415}$
% Conversion sans affichage de la base et sans forcément des blocs de 4
$\ConversionDecBin*[AffBase=false]{415}$
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\ConversionDecBin{415}$
\smallskip
@@ -5010,11 +5221,11 @@ $\ConversionDecBin[AffBase=false]{415}$
\smallskip
$\ConversionDecBin*[AffBase=false]{415}$
-\end{codesortie}
+\end{PresentationCodePL}
\subsection{Conversion binaire vers hexadécimal}
-\begin{codeinfo}
+\begin{noteblock}
L'idée est ici de présenter la conversion, grâce à la conversion \og directe \fg{} par blocs de 4 chiffres :
\begin{itemize}
@@ -5023,13 +5234,14 @@ L'idée est ici de présenter la conversion, grâce à la conversion \og directe
\item elle présente la conversion de chacun des blocs de 4 chiffres binaires ;
\item elle affiche la conversion en binaire.
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ConversionBinHex[clés]{nombre}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -5039,30 +5251,30 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\end{itemize}
Le formatage est géré par le package \ctex{sinuitx}, le mieux est de positionner la commande dans un environnement mathématique.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%conversion avec détails et affichage de la base
$\ConversionBinHex{110011111}$
%conversion sans détails et affichage de la base
$\ConversionBinHex[Details=false]{110011111}$
%conversion sans détails et sans affichage de la base
$\ConversionBinHex[AffBase=false,Details=false]{110011111}$
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\ConversionBinHex{110011111}$
$\ConversionBinHex[Details=false]{110011111}$
$\ConversionBinHex[AffBase=false,Details=false]{110011111}$
-\end{codesortie}
+\end{PresentationCodePL}
\pagebreak
\subsection{Conversion binaire ou hexadécimal en décimal}
-\begin{codeinfo}
+\begin{noteblock}
L'idée est ici de présenter la conversion, grâce à l'écriture polynômiale :
\begin{itemize}
@@ -5070,13 +5282,14 @@ L'idée est ici de présenter la conversion, grâce à l'écriture polynômiale
\item convertir si besoin les \textit{chiffres} hexadécimal ;
\item peut ne pas afficher les monômes de coefficient 0.
\end{itemize}
-\end{codeinfo}
+\vspace*{-\baselineskip}\leavevmode
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ConversionVersDec[clés]{nombre}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -5087,9 +5300,9 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\end{itemize}
Le formatage est toujours géré par le package \ctex{sinuitx}, le mieux est de positionner la commande dans un environnement mathématique.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%conversion 16->10 avec détails et affichage de la base et zéros
$\ConversionVersDec[BaseDep=16]{19F}$
%conversion 2->10 avec détails et affichage de la base et zéros
@@ -5100,9 +5313,9 @@ $\ConversionVersDec[Zeros=false]{110011}$
$\ConversionVersDec[BaseDep=16,Details=false]{AC0DC}$
%conversion 16->10 avec détails et sans affichage de la base et sans zéros
$\ConversionVersDec[Eeros=false,Basedep=16]{AC0DC}$
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\ConversionVersDec[BaseDep=16]{19F}$
$\ConversionVersDec{110011}$
@@ -5112,7 +5325,7 @@ $\ConversionVersDec[Zeros=false]{110011}$
$\ConversionVersDec[BaseDep=16,Details=false]{AC0DC}$
$\ConversionVersDec[Zeros=false,BaseDep=16]{AC0DC}$
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -5120,7 +5333,7 @@ $\ConversionVersDec[Zeros=false,BaseDep=16]{AC0DC}$
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer une \og présentation \fg{} par divisions euclidiennes pour la conversion d'un entier donné en base 10 dans une base quelconque.
\smallskip
@@ -5130,30 +5343,30 @@ Les commandes de la section précédente donne \textit{juste} les résultats, da
\smallskip
La commande utilise -- par défaut -- du code \TikZ{} en mode \ctex{overlay}, donc on pourra déclarer -- si ce n'est pas fait -- dans le préambule, la commande qui suit.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
...
\tikzstyle{every picture}+=[remember picture]
...
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Code et clés}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
%conversion basique
\ConversionDepuisBaseDix{78}{2}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La \og tableau \fg, qui est géré par \ctex{array} est inséré dans un \ctex{ensuremath}, donc les \ctex{\$...\$} ne sont pas utiles.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ConversionDepuisBaseDix[options]{nombre en base 10}{base d'arrivée}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codecles}
+\begin{cautionblock}
Quelques options pour cette commande :
\begin{itemize}
@@ -5168,9 +5381,10 @@ Quelques options pour cette commande :
\hfill{}défaut \Cle{false}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%conversion avec changement de couleur
\ConversionDepuisBaseDix[Couleur=DarkBlue]{45}{2}
@@ -5185,9 +5399,9 @@ Par divisions euclidiennes successives, \ConversionDepuisBaseDix[Rect=false]{54}
\begin{tikzpicture}
\draw[overlay,ForestGreen,thick,->] (TEST2.south east) to[bend right] ++ (3cm,-1cm) node[right] {test } ;
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\ConversionDepuisBaseDix[Couleur=DarkBlue]{45}{2}
\medskip
@@ -5208,7 +5422,7 @@ On obtient donc \ConversionDepuisBaseDix[Couleur=ForestGreen,CouleurRes,Noeud=TE
\vspace{1.5cm}
~
-\end{codesortie}
+\end{PresentationCodePL}
\newpage
@@ -5216,39 +5430,41 @@ On obtient donc \ConversionDepuisBaseDix[Couleur=ForestGreen,CouleurRes,Noeud=TE
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer une \og présentation \fg{} de l'algorithme d'Euclide pour le calcul du PGCD de deux entiers.
Le package \ctex{xintgcd} permet déjà de le faire, il s'agit ici de travailler sur la \textit{mise en forme}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\PresentationPGCD[options]{a}{b}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\tikzstyle{every picture}+=[remember picture]
...
\PresentationPGCD{150}{27}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{}
\PresentationPGCD{150}{27}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeattention}
+\begin{warningblock}
La mise en valeur du dernier reste non nul est géré par du code \TikZ, en mode \ctex{overlay}, donc il faut bien penser à déclarer dans le préambule : \ctex{\textbackslash{}tikzstyle\{every picture\}+=[remember picture]}
-\end{codeattention}
+\end{warningblock}
\subsection{Options et clés}
-\begin{codecles}
+\begin{cautionblock}
Quelques options disponibles pour cette commande :
\begin{itemize}
\item la clé \Cle{Couleur} qui correspond à la couleur pour la mise en valeur ; \hfill{}défaut \Cle{red}
\item la clé \Cle{DecalRect} qui correspond à l'écartement du rectangle de mise en valeur ; \hfill{}défaut \Cle{2pt}
- \item le booléen \Cle{Rectangle} qui gère l'affichage ou non du rectangle de mise ne valeur ; \hfill{}défaut \Cle{true}
+ \item le booléen \Cle{Rectangle} qui gère l'affichage ou non du rectangle de mise ne valeur ;
+
+ \hfill{}défaut \Cle{true}
\item la clé \Cle{Noeud} qui gère le préfixe du nom du nœud \TikZ{} du rectangle (pour exploitation ultérieure) ;
\hfill{}défaut \Cle{FFF}
@@ -5266,39 +5482,49 @@ Le rectangle de mise en valeur est donc un nÅ“ud \TikZ{} qui sera nommé, par dÃ
\medskip
La présentation est dans un environnement \ctex{ensuremath} donc les \ctex{\$...\$} ne sont pas indispensables.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\PresentationPGCD[CouleurResultat]{150}{27}
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\PresentationPGCD[CouleurResultat,Couleur=ForestGreen]{1250}{450}.
\PresentationPGCD[CouleurResultat,Couleur=DarkBlue]{13500}{2500}.
\PresentationPGCD[Rectangle=false]{420}{540}. \\
-D'après l'algorithme d'Euclide, on a $\left| \PresentationPGCD[Couleur=LightSkyBlue,AfficheConclusion=false,AfficheDelimiteurs=false]%
+D'après l'algorithme d'Euclide, on a $\left| \PresentationPGCD[Couleur=LightSkyBlue,AfficheConclusion=false, AfficheDelimiteurs=false]%
{123456789}{9876} \right.$
\begin{tikzpicture}
- \draw[overlay,LightSkyBlue,thick,<-] (FFF1.east) to[bend right] ++ (2cm,0.75cm) node[right] {dernier reste non nul} ;
+ \draw[overlay,LightSkyBlue,thick,<-] (FFF1.east) to[bend right] ++ (1cm,0.75cm) node[right] {dernier reste non nul} ;
\end{tikzpicture}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Compléments}
-\begin{codeinfo}
+\begin{noteblock}
La présentation des divisions euclidiennes est gérée par un tableau du type \ctex{array}, avec alignement vertical de symboles \ctex{=} et \ctex{+}.
Par défaut, les délimiteurs choisis sont donc l'accolade gauche et le trait droit, mais la clé booléenne \Cle{AfficheDelimiteurs=false} permet de choisir des délimiteurs différents.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
$\left[ \PresentationPGCD[AfficheConclusion=false,AfficheDelimiteurs=false]{1234}{5} \right]$
-\end{codetex}
+\end{PresentationCodePL}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Écritures, simplifications}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
@@ -5308,17 +5534,17 @@ $\left[ \PresentationPGCD[AfficheConclusion=false,AfficheDelimiteurs=false]{1234
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir une commande pour \textit{simplifier} un calcul sous forme de fraction irréductible.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ConversionFraction(*)[option de formatage]{calcul}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Commande et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques explications sur cette commande :
\begin{itemize}
@@ -5335,9 +5561,9 @@ Quelques explications sur cette commande :
\end{itemize}
À noter que la macro est dans un bloc \ctex{ensuremath} donc les \ctex{\$...\$} ne sont pas nécessaires.
-\end{codecles}
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\ConversionFraction{-10+1/3*(-5/16)} %sortie par défaut
\ConversionFraction*{-10+1/3*(-5/16)} %sortie fraction avec - sur numérateur
\ConversionFraction[d]{-10+1/3*(-5/16)} %sortie en displaystyle
@@ -5346,9 +5572,9 @@ Quelques explications sur cette commande :
\ConversionFraction{2+91/7} %entier formaté
\ConversionFraction{111/2145}
\ConversionFraction{111/3}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\ConversionFraction{-10+1/3*(-5/16)}
\smallskip
@@ -5378,47 +5604,31 @@ Quelques explications sur cette commande :
\smallskip
\ConversionFraction{111/3}
-\end{codesortie}
-
-\begin{codetex}[]
-$\frac{111}{2145}=\ConversionFraction{111/2145}$
-
-\smallskip
-
-$\frac{3}{15}=\ConversionFraction[]{3/15}$
-
-\smallskip
+\end{PresentationCodePL}
-$\tfrac{3}{15}=\ConversionFraction[t]{3/15}$
+\begin{PresentationCodePL}{}
+$\frac{111}{2145}=\ConversionFraction{111/2145}$ \\
-\smallskip
+$\frac{3}{15}=\ConversionFraction[]{3/15}$ \\
-$\dfrac{3}{15}=\ConversionFraction[d]{3/15}$
+$\tfrac{3}{15}=\ConversionFraction[t]{3/15}$ \\
-\smallskip
+$\dfrac{3}{15}=\ConversionFraction[d]{3/15}$ \\
-$\dfrac{0,42}{0,015}=\ConversionFraction[d]{0.42/0.015}$
+$\dfrac{0,42}{0,015}=\ConversionFraction[d]{0.42/0.015}$ \\
-\smallskip
+$\dfrac{0,41}{0,015}=\ConversionFraction[d]{0.41/0.015}$ \\
-$\dfrac{0,41}{0,015}=\ConversionFraction[d]{0.41/0.015}$
+$\dfrac{1}{7}-\dfrac{3}{8}=\ConversionFraction[d]{1/7-3/8}$ \\
-\smallskip
-
-$\dfrac{1}{7}-\dfrac{3}{8}=\ConversionFraction[d]{1/7-3/8}$
-
-\smallskip
-
-$\ConversionFraction[d]{1+1/2}$
-
-\smallskip
+$\ConversionFraction[d]{1+1/2}$ \\
$\ConversionFraction{0.1/0.7+30/80}$
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
A priori le package \ctex{xint} permet de s'en sortir pour des calculs \og simples \fg, je ne garantis pas que tout calcul ou toute division donne un résultat \textit{satisfaisant} !
-\end{codeinfo}
+\end{noteblock}
\pagebreak
@@ -5426,19 +5636,19 @@ A priori le package \ctex{xint} permet de s'en sortir pour des calculs \og simpl
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est d'obtenir une commande pour simplifier l'écriture d'un ensemble d'éléments, en laissant gérer les espaces.
Les délimiteurs de l'ensemble créé sont toujours \textsf{\{~~\}}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\EcritureEnsemble[clés]{liste}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Commande et options}
-\begin{codecles}
+\begin{cautionblock}
Peu d'options pour ces commandes :
\begin{itemize}
@@ -5452,17 +5662,18 @@ Peu d'options pour ces commandes :
\end{itemize}
\item le second, \textit{obligatoire}, est la \textsf{liste} des éléments, séparés par \textsf{/}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
$\EcritureEnsemble{a/b/c/d/e}$
$\EcritureEnsemble[Mathpunct=false]{a/b/c/d/e}$
$\EcritureEnsemble[Sep={,}]{a/b/c/d/e}$
$\EcritureEnsemble[Option={\strut}]{a/b/c/d/e}$ % \strut pour "augmenter" un peu la hauteur des {}
$\EcritureEnsemble{ \frac{1}{1+\frac{1}{3}} / b / c / d / \frac{1}{2} }$
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\EcritureEnsemble{a/b/c/d/e}$
\smallskip
@@ -5480,11 +5691,11 @@ $\EcritureEnsemble[Option={\strut}]{a/b/c/d/e}$
\smallskip
$\EcritureEnsemble{ \displaystyle\frac{1}{1+\frac{1}{3}} / b / c / d / \displaystyle\frac{1}{2} }$
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
Attention cependant au comportement de la commande avec des éléments en mode \textsf{mathématique}, ceux-ci peuvent générer une erreur si \textsf{displaystyle} n'est pas utilisé\ldots
-\end{codeinfo}
+\end{noteblock}
\newpage
@@ -5492,7 +5703,7 @@ Attention cependant au comportement de la commande avec des éléments en mode \
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de proposer une commande pour écrire, sous forme développée réduite, un trinôme en fonction de ses coefficients $a$, $b$ et $c$ (avec $a\neq0$), avec la gestion des coefficients nuls ou égaux à $\pm1$.
\smallskip
@@ -5502,47 +5713,45 @@ En combinant avec le package \ctex{xfp} et fonction de générateur d'entiers al
\smallskip
L'affichage des monômes est géré par le package \ctex{siunitx} et le tout est dans un environnement \ctex{ensuremath}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\EcritureTrinome[options]{a}{b}{c}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\EcritureTrinome{1}{7}{0}\\
\EcritureTrinome{1.5}{7.3}{2.56}\\
\EcritureTrinome{-1}{0}{12}\\
\EcritureTrinome{-1}{-5}{0}
-\end{codetex}
+\end{PresentationCodePL}
\subsection{Clés et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques clés et options sont disponibles :
\begin{itemize}
\item la clé booléenne \Cle{Alea} pour autoriser les coefficients aléatoires ;\hfill{}défaut \Cle{false}
\item la clé booléenne \Cle{Anegatif} pour autoriser $a$ à être négatif.\hfill{}défaut \Cle{true}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
La clé \Cle{Alea} va modifier la manière de saisir les coefficients, il suffira dans ce cas de préciser les bornes, sous la forme \ctex{valmin,valmax}, de chacun des coefficients. C'est ensuite le package \ctex{xfp} qui va se charger de générer les coefficients.
-\end{codeinfo}
-
-\begin{codetex}[]
-Avec $a$ entre 1 et 5 (et signe aléatoire) puis $b$ entre $-2$ et 7 puis $c$ entre $-10$ et 20 :
+\end{noteblock}
+\begin{PresentationCodePL}{}
+Avec $a$ entre 1 et 5 (et signe aléatoire) puis $b$ entre $-2$ et 7 puis $c$ entre $-10$ et 20 : \\
$f(x)=\EcritureTrinome[Alea]{1,5}{-5,5}{-10,10}$\\
$g(x)=\EcritureTrinome[Alea]{1,5}{-5,5}{-10,10}$\\
$h(x)=\EcritureTrinome[Alea]{1,5}{-5,5}{-10,10}$\\
-
-Avec $a$ entre 1 et 10 (forcément positif) puis $b$ entre $-2$ et 2 puis $c$ entre 0 et 4 :
-
+Avec $a$ entre 1 et 10 (forcément positif) puis $b$ entre $-2$ et 2 puis $c$ entre 0 et 4 : \\
\EcritureTrinome[Alea,Anegatif=false]{1,10}{-2,2}{0,4}\\
\EcritureTrinome[Alea,Anegatif=false]{1,10}{-2,2}{0,4}\\
\EcritureTrinome[Alea,Anegatif=false]{1,10}{-2,2}{0,4}
-\end{codetex}
+\end{PresentationCodePL}
\newpage
@@ -5550,30 +5759,30 @@ Avec $a$ entre 1 et 10 (forcément positif) puis $b$ entre $-2$ et 2 puis $c$ en
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.1.0} L'idée est de proposer une commande pour simplifier \textit{automatiquement} une racine carrée, sous la forme $\frac{a\sqrt{b}}{c}$ avec $\frac{a}{c}$ irréductible et $b$ le \frquote{plus petit possible}.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\SimplificationRacine{expression ou calcul}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
\SimplificationRacine{48} \\ \SimplificationRacine{100/34}\\
\SimplificationRacine{99999} \\ \SimplificationRacine{1500*0.31*(1-0.31)}\\
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
C'est -- comme souvent -- le package \ctex{xint} qui s'occupe en interne des calculs, et qui devrait donner des résultats satisfaisants dans la majorité des cas (attention aux \textit{grands nombres}\ldots)
\smallskip
La commande ne fait pas office de \textit{calculatrice}, elle ne permet \textit{que} de simplifier \textit{une} racine carrée (donc transformer si besoin !).
-\end{codeinfo}
+\end{noteblock}
\subsection{Exemples}
-\begin{codetex}[]
+\begin{PresentationCodePL}{}
%Simplification d'un module de complexe
$\left| 4+6\text{i}\right| = \sqrt{4^2+6^2} = \sqrt{\xinteval{4**2+6**2}}=\SimplificationRacine{4**2+6**2}$
@@ -5585,7 +5794,7 @@ $\frac{42}{\sqrt{5}}=\left(\sqrt{\frac{42^2}{5}}\right)=\SimplificationRacine{(4
%Écart-type d'une loi binomiale
$\sqrt{\num{150}\times\num{0.35}\times(1-\num{0.35})} = \displaystyle\SimplificationRacine{150*0.35*(1-0.35)}$
-\end{codetex}
+\end{PresentationCodePL}
\newpage
@@ -5593,35 +5802,37 @@ $\sqrt{\num{150}\times\num{0.35}\times(1-\num{0.35})} = \displaystyle\Simplifica
\subsection{Idée}
-\begin{codeidee}
+\begin{tipblock}
\cmaj{2.1.2} L'idée est de proposer (sur une suggestion de Marylyne Vignal) une commande pour déterminer la mesure principale d'un angle en radian.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
\MesurePrincipale[booléens]{angle} %dans un mode mathématique
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La commande est à insérer dans un environnement mathématique, via \ctex{\$...\$} ou \ctex{\textbackslash[...\textbackslash]}.
-L'angle peut être donné sous forme \textit{explicite} avec la chaîne \ctex{pi}.
-\end{codeinfo}
+L'angle est donné sous forme \textit{explicite} avec la chaîne \ctex{pi}.
+\end{noteblock}
\subsection{Exemples}
-\begin{codecles}
+\begin{cautionblock}
Pour cette commande :
\begin{itemize}
- \item le booléen \Cle{d} permet de forcer l'affichage en \ctex{displaystyle} ;\hfill{}défaut \Cle{false}
- \item le booléen \Cle{Crochets} permet d'afficher le \textit{modulo} entre crochets plutôt qu'entre parenthèses ;
+ \item le booléen \Cle{d} permet de forcer l'affichage en \ctex{displaystyle} ; \hfill{}défaut \Cle{false}
+ \item le booléen \Cle{Crochets} permet d'afficher le \textit{modulo} entre crochets (sinon parenthèses) ;
\hfill{}défaut \Cle{false}
+ \item \cmaj{2.6.0} le booléen \Cle{Brut} pour afficher uniquement la mesure principale ; \hfill{}défaut \Cle{false}
\item l'argument \textit{obligatoire} est en écriture \textit{en ligne}.
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
$\MesurePrincipale[d]{54pi/7}$
$\MesurePrincipale[d]{-128pi/15}$
$\MesurePrincipale{3pi/2}$
@@ -5630,9 +5841,10 @@ $\MesurePrincipale{-13pi}$
$\MesurePrincipale{28pi}$
$\MesurePrincipale[d]{14pi/4}$
$\MesurePrincipale[Crochets]{14pi/7}$
-\end{codetex}
+$\dfrac{121\pi}{12} = \MesurePrincipale[Brut]{121pi/12}$ à $2\pi$ près
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
$\MesurePrincipale[d]{54pi/7}$
\medskip
@@ -5662,381 +5874,187 @@ $\MesurePrincipale[d]{14pi/4}$
\medskip
$\MesurePrincipale[Crochets]{14pi/7}$
-\end{codesortie}
+
+\medskip
+
+$\dfrac{121\pi}{12} = \MesurePrincipale[d,Brut]{121pi/12}$ à $2\pi$ près
+\end{PresentationCodePL}
\pagebreak
-\part{Jeux et récréations}
+\section{Lignes trigonométriques}\label{lignestrigo}
-%\section{PixelART via un fichier csv, en \TikZ}\label{pixelart}
-%
-%\subsection{Introduction}
-%
-%\begin{codeidee}
-%L'idée est de \textit{proposer}, dans un environnement \TikZ, une commande permettant de générer des grilles PixelART.
-%
-%Les données sont \textit{lues} à partir d'un fichier \textsf{csv}, externe au fichier \textsf{tex} ou déclaré en interne grâce à l'environnement \ctex{filecontents}.
-%\end{codeidee}
-%
-%\begin{codeinfo}
-%Avant toute chose, quelques petites infos sur les données au format \textsf{csv}, surtout dans l'optique de sa lecture et de son traitement par \ctex{ProfLycee} :
-%
-%\begin{itemize}
-% \item le fichier de données \textsf{csv} doit être formaté avec le séparateur décimal \og , \fg ;
-% \item des cases vides seront codées par \og \texttt{-} \fg.
-%\end{itemize}
-%
-%Le fichier \textsf{csv} peut être déclaré directement dans le fichier \textsf{tex}, grâce à l'environnement \ctex{filecontents} (intégré en natif sur les dernières versions de \LaTeX) :
-%
-%\begin{Verbatim}[tabsize=2,fontsize=\scriptsize]
-%\begin{filecontents*}{<nomfichier>.csv}
-%A,B,C,D
-%A,B,D,C
-%B,A,C,D
-%B,A,D,C
-%\end{filecontents*}
-%\end{Verbatim}
-%
-%À la compilation, le fichier \textsf{<nomfichier>.csv} sera créé automatiquement, et l'option \Cle{[overwrite]} permet (logiquement) de propager les modifications au fichier \textsf{csv}.
-%\end{codeinfo}
-%
-%\subsection{Package csvsimple et option}
-%
-%\begin{codeinfo}
-%Le package \textit{central} est ici \ctex{csvsimple}, qui permet de lire et traiter le fichier \textsf{csv}.
-%
-%Il est \og disponible \fg{} en version \LaTeXe{} ou en version \LaTeXIII. Par défaut, \ctex{ProfLycee} le charge en version \LaTeXIII{}, mais une \Cle{option} est disponible pour une \textit{rétro-compatibilité} avec la version \LaTeXe.
-%
-%\smallskip
-%
-%L'option \Cle{csvii} permet de passer l'appel au package en version \LaTeXe.
-%\end{codeinfo}
-%
-%\begin{codetex}[listing only]
-%\usepackage{ProfLycee} %chargement du package version 3
-%%qui charge :
-%%\RequirePackage{expl3}
-%%\RequirePackage[l3]{csvsimple}
-%
-%\usepackage[csvii]{ProfLycee} %chargement du package version 2
-%%qui charge :
-%%\RequirePackage[legacy]{csvsimple}
-%\end{codetex}
-%
-%\subsection{Exemple simple, clés et options}
-%
-%\begin{codetex}[listing only]
-%%déclaration du fichier csv
-%\begin{filecontents*}[overwrite]{basique.csv}
-%A,B,C,D
-%A,B,D,C
-%B,A,D,C
-%C,A,B,D
-%\end{filecontents*}
-%
-%\begin{tikzpicture}%avec lettres
-% \PixelArtTikz[Codes=ABCD,Style=\large\sffamily]{basique.csv}
-%\end{tikzpicture}
-%\begin{tikzpicture}%avec chiffres
-% \PixelArtTikz[Codes=ABCD,Symboles={45,22,1,7},Symb,Style=\large\sffamily]{basique.csv}
-%\end{tikzpicture}
-%\begin{tikzpicture}%avec correction
-% \PixelArtTikz[codes=ABCD,Couleurs={Black,Green,Yellow,Red},Correction]{basique.csv}
-%\end{tikzpicture}
-%\begin{tikzpicture}%avec correction sans bordure
-% \PixelArtTikz[Codes=ABCD,Couleurs={Black,Green,Yellow,Red},Correction,BordCases=false]{basique.csv}
-%\end{tikzpicture}
-%\end{codetex}
-%
-%\begin{codesortie}
-%\begin{filecontents*}[overwrite]{basique.csv}
-%A,B,C,D
-%A,B,D,C
-%B,A,D,C
-%C,A,B,D
-%\end{filecontents*}
-%
-%\begin{center}
-% \begin{tblr}{colspec={*{4}{Q[1.25cm,c,m]}},hlines,vlines,rows={1.15em}}
-% \SetCell[c=4]{c} Notice & & & \\
-% A & B & C & D \\
-% 45 & 22 & 1 & 7 \\
-% Noir & Vert & Jaune & Rouge \\
-% \end{tblr}
-%\end{center}
-%
-%\hfill\begin{tikzpicture}[scale=0.9]
-% %avec lettres
-% \PixelArtTikz[Codes=ABCD,Style=\large\sffamily]{basique.csv}
-%\end{tikzpicture}
-%\begin{tikzpicture}[scale=0.9]
-% %avec chiffres
-% \PixelArtTikz[Codes=ABCD,Symboles={45,22,1,7},Symb,Style=\large\sffamily]{basique.csv}
-%\end{tikzpicture}
-%\begin{tikzpicture}[scale=0.9]
-% %avec correction
-% \PixelArtTikz[Codes=ABCD,Couleurs={Black,Green,Yellow,Red},Correction]{basique.csv}
-%\end{tikzpicture}
-%\begin{tikzpicture}[scale=0.9]
-% %avec correction
-% \PixelArtTikz[Codes=ABCD,Couleurs={Black,Green,Yellow,Red},Correction,BordCases=false]{basique.csv}
-%\end{tikzpicture}
-%\hfill~
-%\end{codesortie}
-%
-%\begin{codeinfo}
-%La commande \ctex{PixelArtTikz} nécessite de connaître :
-%
-%\begin{itemize}
-% \item le fichier \textsf{csv} à traiter ;
-% \item la liste (en fait sous forme de chaîne) des codes utilisés dans le fichier \textsf{csv} (comme \ctex{234679} ou \ctex{ABCDJK}\ldots);
-% \item la liste des symboles (éventuellement !) à afficher dans les cases s'il y a ambiguïté, comme \ctex{25,44,12} ou \ctex{AA,AB,AC};
-% \item la liste des couleurs (si la correction est demandée), dans le même ordre que la liste des caractères.
-%\end{itemize}
-%\end{codeinfo}
-%
-%\begin{codetex}[listing only]
-%%environnement tikz
-%\PixelArtTikz[clés]{<fichier>.csv}
-%\end{codetex}
-%
-%\begin{codecles}
-%Quelques \Cle{Clés} sont nécessaires au bon fonctionnement de la commande :
-%
-%\begin{itemize}
-% \item la clé \Cle{Codes} contient la \textsf{chaîne} des codes \textit{simples} du fichier \textsf{csv} ;
-% \item la clé \Cle{Couleurs} qui contient la \textsf{liste} des couleurs associées ;
-% \item la clé \Cle{Symboles} qui contient la \textsf{liste éventuelles} des caractères alternatifs à afficher dans les cases ;
-% \item la clé booléenne \Cle{Correction} qui permet de colorier le PixelART ;\hfill{}défaut \Cle{false}
-% \item la clé booléenne \Cle{Symb} qui permet d'afficher les caractères \textit{alternatifs} ;\hfill{}défaut \Cle{false}
-% \item la clé booléenne \Cle{BordCases} qui permet d'afficher les bords des cases de la correction ;\hfill{}défaut \Cle{true}
-% \item la clé \Cle{Style} qui permet de spécifier le style des caractères. \hfill{}défaut \Cle{scriptsize}
-%\end{itemize}
-%\end{codecles}
-%
-%\begin{codetex}[listing only]
-%%codes simples et sans ambiguïté
-%%une case vide sera codée par -
-%
-%\begin{filecontents*}[overwrite]{perroquet.csv}
-%-,-,-,-,-,-,4,4,4,4,-,-,-,-,-,-
-%-,-,-,-,4,4,1,1,1,1,4,4,-,-,-,-
-%-,-,-,4,1,1,1,1,1,1,1,1,4,-,-,-
-%-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-%-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-%-,4,1,9,9,1,1,1,1,1,1,9,9,1,4,-
-%-,4,9,9,9,9,4,4,4,4,9,9,9,9,4,-
-%-,4,9,4,9,9,4,4,4,4,9,4,9,9,4,-
-%-,4,1,9,9,9,4,4,4,4,9,9,9,1,4,-
-%-,-,4,1,1,9,4,4,4,4,9,1,1,4,-,-
-%-,-,4,1,1,1,4,4,4,4,1,1,1,4,-,-
-%-,-,-,4,1,1,1,4,4,1,1,1,4,-,-,-
-%-,-,4,3,1,1,1,1,1,1,1,1,3,4,-,-
-%-,4,6,3,1,1,1,1,1,1,1,1,3,6,4,-
-%-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-%-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-%-,4,6,4,1,1,1,4,4,1,1,1,4,6,4,-
-%2,2,4,2,4,4,4,2,2,4,4,4,2,4,2,2
-%2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-%2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-%-,-,-,-,-,4,1,1,1,1,4,-,-,-,-,-
-%-,-,-,-,-,-,4,1,1,4,-,-,-,-,-,-
-%-,-,-,-,-,-,-,4,4,-,-,-,-,-,-,-
-%\end{filecontents*}
-%
-%\begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=123469,Style=\ttfamily]{perroquet.csv}
-%\end{tikzpicture}
-%
-%\begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction]{perroquet.csv}
-%\end{tikzpicture}
-%\end{codetex}
-%
-%\subsection{Exemples complémentaires}
-%
-%\begin{codeinfo}
-%Les symboles affichés dans les cases sont situés aux nœuds de coordonnées $(c\,;\,-l)$ où $l$ et $c$ sont les numéros de ligne et de colonne correspondants à la position de la donnée dans le fichier \textsf{csv}.
-%\end{codeinfo}
-%
-%\begin{codesortie}
-%\begin{filecontents*}[overwrite]{perroquet.csv}
-%-,-,-,-,-,-,4,4,4,4,-,-,-,-,-,-
-%-,-,-,-,4,4,1,1,1,1,4,4,-,-,-,-
-%-,-,-,4,1,1,1,1,1,1,1,1,4,-,-,-
-%-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-%-,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
-%-,4,1,9,9,1,1,1,1,1,1,9,9,1,4,-
-%-,4,9,9,9,9,4,4,4,4,9,9,9,9,4,-
-%-,4,9,4,9,9,4,4,4,4,9,4,9,9,4,-
-%-,4,1,9,9,9,4,4,4,4,9,9,9,1,4,-
-%-,-,4,1,1,9,4,4,4,4,9,1,1,4,-,-
-%-,-,4,1,1,1,4,4,4,4,1,1,1,4,-,-
-%-,-,-,4,1,1,1,4,4,1,1,1,4,-,-,-
-%-,-,4,3,1,1,1,1,1,1,1,1,3,4,-,-
-%-,4,6,3,1,1,1,1,1,1,1,1,3,6,4,-
-%-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-%-,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
-%-,4,6,4,1,1,1,4,4,1,1,1,4,6,4,-
-%2,2,4,2,4,4,4,2,2,4,4,4,2,4,2,2
-%2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-%2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-%-,-,-,-,-,4,1,1,1,1,4,-,-,-,-,-
-%-,-,-,-,-,-,4,1,1,4,-,-,-,-,-,-
-%-,-,-,-,-,-,-,4,4,-,-,-,-,-,-,-
-%\end{filecontents*}
-%
-%\begin{center}
-% \begin{tblr}{colspec={*{6}{Q[1.25cm,c,m]}},hlines,vlines,rows={1.15em}}
-% \SetCell[c=6]{c} Notice & & & & & \\
-% 1 & 2 & 3 & 5 & 6 & 9 \\
-% Rouge & Marron & Jaune & Noir & Bleu & Blanc \\
-% \end{tblr}
-%% \renewcommand\arraystretch{1.25}
-%% \begin{tabular}{|c|c|c|c|c|c|}
-%% \hline
-%% \multicolumn{6}{|c|}{Notice} \\ \hline
-%% 1 & 2 & 3 & 5 & 6 & 9 \\ \hline
-%% Rouge & Marron & Jaune & Noir & Bleu & Blanc \\ \hline
-%% \end{tabular}
-%\end{center}
-%
-%\begin{center}
-% \begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=123469,Style=\ttfamily]{perroquet.csv}
-% \end{tikzpicture}
-% \begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction]{perroquet.csv}
-% \end{tikzpicture}
-%\end{center}
-%
-%\begin{center}
-% \begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \draw[very thin,gray,xstep=1,ystep=1] (0,0) grid (17,-24) ;
-% \foreach \x in {0,1,...,17} \draw[very thin,gray] (\x,-3pt)--(\x,3pt) node[above,font=\scriptsize\sffamily] {\x} ;
-% \foreach \y in {0,-1,...,-24} \draw[very thin,gray] (3pt,\y)--(-3pt,\y) node[left,font=\scriptsize\sffamily] {\y} ;
-% \PixelArtTikz[Codes=123469,Couleurs={Red,Brown,Yellow,Black,Blue,White},Correction]{perroquet.csv}
-% \filldraw[Blue] (14,-1) circle[radius=1] ;
-% \filldraw[Yellow] (14,-1) circle[radius=0.8] ;
-% \draw[ForestGreen,very thick,<-,>=latex] (15,-1) to[bend left=30] (18,-2) node[right,font=\scriptsize\sffamily] {rajouté en \TikZ} ;
-% \end{tikzpicture}
-%\end{center}
-%\end{codesortie}
-%
-%\begin{codetex}[listing only]
-%%code tikz et pixelart
-%\filldraw[Blue] (14,-1) circle[radius=1] ;
-%\filldraw[Yellow] (14,-1) circle[radius=0.8] ;
-%\draw[ForestGreen,very thick,<-,>=latex] (15,-1) to[bend left=30] (18,-2)
-% node[right,font=\scriptsize\sffamily] {rajouté en \TikZ} ;
-%\end{codetex}
-%
-%\pagebreak
-%
-%\begin{codetex}[listing only]
-%%codes avec ambiguïté
-%
-%\begin{filecontents*}[overwrite]{cap.csv}
-%-,-,-,-,-,-,-,-,D,-,D,-,D,-,-,-,-,-,-,-,-,-
-%-,D,D,-,-,-,-,D,D,D,D,D,D,-,-,D,D,D,D,-,-,-
-%D,-,-,D,-,D,D,F,F,F,F,F,F,D,D,-,-,-,-,D,-,-
-%-,D,-,-,D,F,F,F,-,-,F,F,F,F,F,D,-,D,D,-,-,-
-%-,-,D,D,F,F,F,-,F,F,-,F,F,F,F,F,D,D,-,-,-,-
-%-,-,-,D,F,F,F,F,F,F,F,F,F,F,F,F,D,-,-,-,-,-
-%-,-,-,D,F,J,J,J,J,J,J,J,F,F,F,F,D,-,-,-,-,-
-%-,-,-,D,J,-,-,-,J,-,-,-,J,J,F,F,D,-,-,-,-,-
-%-,-,-,D,J,-,D,-,J,-,D,-,J,J,B,B,D,-,-,-,-,-
-%-,-,-,D,J,-,-,-,J,-,-,-,J,J,B,B,D,-,-,-,-,-
-%-,-,-,D,C,J,J,J,J,J,J,J,J,C,C,C,D,-,-,-,-,-
-%-,-,-,D,C,C,C,C,C,C,C,C,C,C,C,D,D,D,-,-,-,-
-%-,-,-,D,C,C,C,D,D,D,D,D,D,C,D,A,A,A,D,-,-,-
-%-,-,-,D,F,C,C,C,C,C,C,C,C,D,A,-,-,-,A,D,-,-
-%-,-,-,D,F,C,F,C,C,C,C,F,D,A,-,A,A,A,-,A,D,-
-%-,-,D,C,F,F,F,F,C,C,F,D,A,-,A,F,F,F,A,-,A,D
-%-,-,D,C,F,F,F,F,F,F,F,D,A,-,A,F,-,F,A,-,A,D
-%-,-,D,A,D,-,A,-,A,-,A,D,A,-,A,F,F,F,A,-,A,D
-%-,-,-,D,D,-,A,-,A,-,A,-,D,A,-,A,A,A,-,A,D,-
-%-,-,-,-,-,D,D,F,D,D,D,D,F,D,A,-,-,-,A,D,-,-
-%-,-,-,-,-,-,D,A,D,-,-,D,-,-,D,A,A,A,D,-,-,-
-%-,-,-,-,-,-,D,D,D,-,-,D,D,D,D,D,D,D,-,-,-,-
-%\end{filecontents*}
-%
-%\begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=ABCDFJ,Symboles={1,2,3,4,6,10},Symb,Style=\tiny\sffamily]{cap.csv}
-%\end{tikzpicture}
-%
-%\begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=ABCDFJ,Couleurs={Red,Brown,Yellow,Black,Blue,Gray},Correction]{cap.csv}
-%\end{tikzpicture}
-%\end{codetex}
-%
-%\begin{codesortie}
-%\begin{filecontents*}[overwrite]{cap.csv}
-%-,-,-,-,-,-,-,-,D,-,D,-,D,-,-,-,-,-,-,-,-,-
-%-,D,D,-,-,-,-,D,D,D,D,D,D,-,-,D,D,D,D,-,-,-
-%D,-,-,D,-,D,D,F,F,F,F,F,F,D,D,-,-,-,-,D,-,-
-%-,D,-,-,D,F,F,F,-,-,F,F,F,F,F,D,-,D,D,-,-,-
-%-,-,D,D,F,F,F,-,F,F,-,F,F,F,F,F,D,D,-,-,-,-
-%-,-,-,D,F,F,F,F,F,F,F,F,F,F,F,F,D,-,-,-,-,-
-%-,-,-,D,F,J,J,J,J,J,J,J,F,F,F,F,D,-,-,-,-,-
-%-,-,-,D,J,-,-,-,J,-,-,-,J,J,F,F,D,-,-,-,-,-
-%-,-,-,D,J,-,D,-,J,-,D,-,J,J,B,B,D,-,-,-,-,-
-%-,-,-,D,J,-,-,-,J,-,-,-,J,J,B,B,D,-,-,-,-,-
-%-,-,-,D,C,J,J,J,J,J,J,J,J,C,C,C,D,-,-,-,-,-
-%-,-,-,D,C,C,C,C,C,C,C,C,C,C,C,D,D,D,-,-,-,-
-%-,-,-,D,C,C,C,D,D,D,D,D,D,C,D,A,A,A,D,-,-,-
-%-,-,-,D,F,C,C,C,C,C,C,C,C,D,A,-,-,-,A,D,-,-
-%-,-,-,D,F,C,F,C,C,C,C,F,D,A,-,A,A,A,-,A,D,-
-%-,-,D,C,F,F,F,F,C,C,F,D,A,-,A,F,F,F,A,-,A,D
-%-,-,D,C,F,F,F,F,F,F,F,D,A,-,A,F,-,F,A,-,A,D
-%-,-,D,A,D,-,A,-,A,-,A,D,A,-,A,F,F,F,A,-,A,D
-%-,-,-,D,D,-,A,-,A,-,A,-,D,A,-,A,A,A,-,A,D,-
-%-,-,-,-,-,D,D,F,D,D,D,D,F,D,A,-,-,-,A,D,-,-
-%-,-,-,-,-,-,D,A,D,-,-,D,-,-,D,A,A,A,D,-,-,-
-%-,-,-,-,-,-,D,D,D,-,-,D,D,D,D,D,D,D,-,-,-,-
-%\end{filecontents*}
-%
-%\begin{center}
-% \begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=ABCDFJ,Symboles={1,2,3,4,6,10},Symb,Style=\tiny\sffamily]{cap.csv}
-% \end{tikzpicture}
-% ~~
-% \begin{tikzpicture}[x=0.35cm,y=0.35cm]
-% \PixelArtTikz[Codes=ABCDFJ,Couleurs={Red,Brown,Yellow,Black,Blue,Gray},Correction]{cap.csv}
-% \end{tikzpicture}
-%\end{center}
-%\end{codesortie}
-%
-%\newpage
+\subsection{Idée}
+
+\begin{tipblock}
+\cmaj{2.6.0} L'idée est de proposer pour déterminer les lignes trigonométriques (cos, sin et tan) d'angles classiques, formés des \og $\pi$ \fg{} et \og $\pi$ sur 2 ; 3 ; 4 ; 5 ; 6 ; 8 ; 10 ; 12 \fg{}.
+
+\smallskip
+
+La commande détermine -- et affiche si demandée la réduction -- et la valeur exacte de la ligne trigonométrique demandée.
+\end{tipblock}
+
+\begin{PresentationCodePL}{listing only}
+\LigneTrigo(*)[booléens]{cos/sin/tan}(angle)
+\end{PresentationCodePL}
+
+\subsection{Commande}
+
+\begin{cautionblock}
+Pour cette commande :
+
+\begin{itemize}
+ \item la version \textit{étoilée} n'affiche pas l'angle initial ;
+ \item le booléen \Cle{d} permet de forcer l'affichage en \ctex{displaystyle} ; \hfill{}défaut \Cle{false}
+ \item le booléen \Cle{Etapes} permet d'afficher la réduction avant le résultat ; \hfill{}défaut \Cle{false}
+ \item le premier argument \textit{obligatoire}, entre \ctex{\{...\}} est le type de calcul demandé, parmi \Cle{cos / sin / tan} ;
+ \item le second argument \textit{obligatoire}, entre \ctex{(...)} est l'angle, donné en ligne, avec \ctex{pi}.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo{cos}(56pi/3)$ et $\LigneTrigo{sin}(56pi/3)$ et $\LigneTrigo{tan}(56pi/3)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(56pi/3)$ et $\LigneTrigo[d,Etapes]{sin}(56pi/3)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo*[d,Etapes]{cos}(2pi/3)$ et $\LigneTrigo*[d,Etapes]{sin}(2pi/3)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(146pi)$ et $\LigneTrigo[d,Etapes]{sin}(146pi)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(-551pi/12)$ et $\LigneTrigo[d,Etapes]{sin}(-551pi/12)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(447pi/8)$ et $\LigneTrigo[d,Etapes]{sin}(447pi/8)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo*[d,Etapes]{cos}(-pi/8)$ et $\LigneTrigo*[d,Etapes]{sin}(-pi/8)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(-595pi/12)$ et $\LigneTrigo[d,Etapes]{sin}(-595pi/12)$ et $\LigneTrigo[d,Etapes]{tan}(-595pi/12)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(33pi/10)$ et $\LigneTrigo[d,Etapes]{sin}(33pi/10)$\\
+$\LigneTrigo[d,Etapes]{tan}(33pi/10)$
+\end{PresentationCodePL}
+
+\begin{PresentationCodePL}{}
+$\LigneTrigo[d,Etapes]{cos}(-14pi/5)$ et $\LigneTrigo[d,Etapes]{sin}(-14pi/5)$\\
+$\LigneTrigo[d,Etapes]{tan}(-14pi/5)$
+\end{PresentationCodePL}
+
+\subsection{Valeurs disponibles}
+
+\begin{noteblock}
+Les valeurs disponibles sont :
+
+\begin{tblr}{hlines,vlines,colspec={Q[1cm,m,l]*{9}{Q[1.195cm,m,c]}},cells={font=\scriptsize},row{1}={bg=lightgray!50},column{1}={bg=lightgray!50}}
+ angle & $0$ & $\nicefrac{\pi}{6}$ & $\nicefrac{\pi}{4}$ & $\nicefrac{\pi}{3}$ & $\nicefrac{\pi}{2}$ & $\nicefrac{2\pi}{3}$ & $\nicefrac{3\pi}{4}$ & $\nicefrac{5\pi}{6}$ & $\pi$ \\
+ cos & $\LigneTrigo{cos}(0)$ & $\LigneTrigo{cos}(pi/6)$ & $\LigneTrigo{cos}(pi/4)$ & $\LigneTrigo{cos}(pi/3)$ & $\LigneTrigo{cos}(pi/2)$ & $\LigneTrigo{cos}(2pi/3)$ & $\LigneTrigo{cos}(3pi/4)$ & $\LigneTrigo{cos}(5pi/6)$ & $\LigneTrigo{cos}(pi)$ \\
+ sin & $\LigneTrigo{sin}(0)$ & $\LigneTrigo{sin}(pi/6)$ & $\LigneTrigo{sin}(pi/4)$ & $\LigneTrigo{sin}(pi/3)$ & $\LigneTrigo{sin}(pi/2)$ & $\LigneTrigo{sin}(2pi/3)$ & $\LigneTrigo{sin}(3pi/4)$ & $\LigneTrigo{sin}(5pi/6)$ & $\LigneTrigo{sin}(pi)$ \\
+ tan & $\LigneTrigo{tan}(0)$ & $\LigneTrigo{tan}(pi/6)$ & $\LigneTrigo{tan}(pi/4)$ & $\LigneTrigo{tan}(pi/3)$ & $\LigneTrigo{tan}(pi/2)$ & $\LigneTrigo{tan}(2pi/3)$ & $\LigneTrigo{tan}(3pi/4)$ & $\LigneTrigo{tan}(5pi/6)$ & $\LigneTrigo{tan}(pi)$ \\
+\end{tblr}
+
+\medskip
+
+\begin{tblr}{hlines,vlines,colspec={Q[1cm,m,l]*{9}{Q[1.195cm,m,c]}},cells={font=\scriptsize},row{1}={bg=lightgray!50},column{1}={bg=lightgray!50}}
+ angle & & $\nicefrac{-\pi}{6}$ & $\nicefrac{-\pi}{4}$ & $\nicefrac{-\pi}{3}$ & $\nicefrac{-\pi}{2}$ & $\nicefrac{-2\pi}{3}$ & $\nicefrac{-3\pi}{4}$ & $\nicefrac{-5\pi}{6}$ & \\
+ cos & & $\LigneTrigo{cos}(-pi/6)$ & $\LigneTrigo{cos}(-pi/4)$ & $\LigneTrigo{cos}(-pi/3)$ & $\LigneTrigo{cos}(-pi/2)$ & $\LigneTrigo{cos}(-2pi/3)$ & $\LigneTrigo{cos}(-3pi/4)$ & $\LigneTrigo{cos}(-5pi/6)$ & \\
+ sin & & $\LigneTrigo{sin}(-pi/6)$ & $\LigneTrigo{sin}(-pi/4)$ & $\LigneTrigo{sin}(-pi/3)$ & $\LigneTrigo{sin}(-pi/2)$ & $\LigneTrigo{sin}(-2pi/3)$ & $\LigneTrigo{sin}(-3pi/4)$ & $\LigneTrigo{sin}(-5pi/6)$ & \\
+ tan & & $\LigneTrigo{tan}(-pi/6)$ & $\LigneTrigo{tan}(-pi/4)$ & $\LigneTrigo{tan}(-pi/3)$ & $\LigneTrigo{tan}(-pi/2)$ & $\LigneTrigo{tan}(-2pi/3)$ & $\LigneTrigo{tan}(-3pi/4)$ & $\LigneTrigo{tan}(-5pi/6)$ & \\
+\end{tblr}
+
+\medskip
+
+\begin{tblr}{hlines,vlines,colspec={Q[1cm,m,l]*{8}{Q[1.4cm,m,c]}},cells={font=\scriptsize},row{1}={bg=lightgray!50},column{1}={bg=lightgray!50}}
+ angle & $\nicefrac{\pi}{8}$ & $\nicefrac{3\pi}{8}$ & $\nicefrac{5\pi}{8}$ & $\nicefrac{7\pi}{8}$ & $\nicefrac{\pi}{12}$ & $\nicefrac{5\pi}{12}$ & $\nicefrac{7\pi}{12}$ & $\nicefrac{11\pi}{12}$ \\
+ cos & $\LigneTrigo{cos}(pi/8)$ & $\LigneTrigo{cos}(3pi/8)$ & $\LigneTrigo{cos}(5pi/8)$ & $\LigneTrigo{cos}(7pi/8)$ & $\LigneTrigo{cos}(pi/12)$ & $\LigneTrigo{cos}(5pi/12)$ & $\LigneTrigo{cos}(7pi/12)$ & $\LigneTrigo{cos}(11pi/12)$ \\
+ sin & $\LigneTrigo{sin}(pi/8)$ & $\LigneTrigo{sin}(3pi/8)$ & $\LigneTrigo{sin}(5pi/8)$ & $\LigneTrigo{sin}(7pi/8)$ & $\LigneTrigo{sin}(pi/12)$ & $\LigneTrigo{sin}(5pi/12)$ & $\LigneTrigo{sin}(7pi/12)$ & $\LigneTrigo{sin}(11pi/12)$ \\
+ tan & $\LigneTrigo{tan}(pi/8)$ & $\LigneTrigo{tan}(3pi/8)$ & $\LigneTrigo{tan}(5pi/8)$ & $\LigneTrigo{tan}(7pi/8)$ & $\LigneTrigo{tan}(pi/12)$ & $\LigneTrigo{tan}(5pi/12)$ & $\LigneTrigo{tan}(7pi/12)$ & $\LigneTrigo{tan}(11pi/12)$ \\
+\end{tblr}
+
+\medskip
+
+\begin{tblr}{hlines,vlines,colspec={Q[1cm,m,l]*{8}{Q[1.4cm,m,c]}},cells={font=\scriptsize},row{1}={bg=lightgray!50},column{1}={bg=lightgray!50}}
+ angle & $\nicefrac{-\pi}{8}$ & $\nicefrac{-3\pi}{8}$ & $\nicefrac{-5\pi}{8}$ & $\nicefrac{-7\pi}{8}$ & $\nicefrac{-\pi}{12}$ & $\nicefrac{-5\pi}{12}$ & $\nicefrac{-7\pi}{12}$ & $\nicefrac{-11\pi}{12}$ \\
+ cos & $\LigneTrigo{cos}(-pi/8)$ & $\LigneTrigo{cos}(-3pi/8)$ & $\LigneTrigo{cos}(-5pi/8)$ & $\LigneTrigo{cos}(-7pi/8)$ & $\LigneTrigo{cos}(-pi/12)$ & $\LigneTrigo{cos}(-5pi/12)$ & $\LigneTrigo{cos}(-7pi/12)$ & $\LigneTrigo{cos}(-11pi/12)$ \\
+ sin & $\LigneTrigo{sin}(-pi/8)$ & $\LigneTrigo{sin}(-3pi/8)$ & $\LigneTrigo{sin}(-5pi/8)$ & $\LigneTrigo{sin}(-7pi/8)$ & $\LigneTrigo{sin}(-pi/12)$ & $\LigneTrigo{sin}(-5pi/12)$ & $\LigneTrigo{sin}(-7pi/12)$ & $\LigneTrigo{sin}(-11pi/12)$ \\
+ tan & $\LigneTrigo{tan}(-pi/8)$ & $\LigneTrigo{tan}(-3pi/8)$ & $\LigneTrigo{tan}(-5pi/8)$ & $\LigneTrigo{tan}(-7pi/8)$ & $\LigneTrigo{tan}(-pi/12)$ & $\LigneTrigo{tan}(-5pi/12)$ & $\LigneTrigo{tan}(-7pi/12)$ & $\LigneTrigo{tan}(-11pi/12)$ \\
+\end{tblr}
+
+\medskip
+
+\begin{tblr}{hlines,vlines,colspec={Q[1cm,m,l]*{8}{Q[1.4cm,m,c]}},cells={font=\scriptsize},row{1}={bg=lightgray!50},column{1}={bg=lightgray!50}}
+ angle & $\nicefrac{-4\pi}{5}$ & $\nicefrac{-3\pi}{5}$ & $\nicefrac{-2\pi}{5}$ & $\nicefrac{-\pi}{5}$ & $\nicefrac{\pi}{5}$ & $\nicefrac{2\pi}{5}$ & $\nicefrac{3\pi}{5}$ & $\nicefrac{4\pi}{5}$ \\
+ cos & $\LigneTrigo{cos}(-4pi/5)$ & $\LigneTrigo{cos}(-3pi/5)$ & $\LigneTrigo{cos}(-2pi/5)$ & $\LigneTrigo{cos}(-pi/5)$ & $\LigneTrigo{cos}(pi/5)$ & $\LigneTrigo{cos}(2pi/5)$ & $\LigneTrigo{cos}(3pi/5)$ & $\LigneTrigo{cos}(4pi/5)$ \\
+ sin & $\LigneTrigo{sin}(-4pi/5)$ & $\LigneTrigo{sin}(-3pi/5)$ & $\LigneTrigo{sin}(-2pi/5)$ & $\LigneTrigo{sin}(-pi/5)$ & $\LigneTrigo{sin}(pi/5)$ & $\LigneTrigo{sin}(2pi/5)$ & $\LigneTrigo{sin}(3pi/5)$ & $\LigneTrigo{sin}(4pi/5)$ \\
+ tan & $\LigneTrigo{tan}(-4pi/5)$ & $\LigneTrigo{tan}(-3pi/5)$ & $\LigneTrigo{tan}(-2pi/5)$ & $\LigneTrigo{tan}(-pi/5)$ & $\LigneTrigo{tan}(pi/5)$ & $\LigneTrigo{tan}(2pi/5)$ & $\LigneTrigo{tan}(3pi/5)$ & $\LigneTrigo{tan}(4pi/5)$ \\
+\end{tblr}
+
+\medskip
+
+\begin{tblr}{hlines,vlines,colspec={Q[1cm,m,l]*{8}{Q[1.4cm,m,c]}},cells={font=\scriptsize},row{1}={bg=lightgray!50},column{1}={bg=lightgray!50}}
+ angle & $\nicefrac{-9\pi}{10}$ & $\nicefrac{-7\pi}{10}$ & $\nicefrac{-3\pi}{10}$ & $\nicefrac{-\pi}{10}$ & $\nicefrac{\pi}{10}$ & $\nicefrac{3\pi}{10}$ & $\nicefrac{7\pi}{10}$ & $\nicefrac{9\pi}{10}$ \\
+ cos & $\LigneTrigo{cos}(-9pi/10)$ & $\LigneTrigo{cos}(-7pi/10)$ & $\LigneTrigo{cos}(-3pi/10)$ & $\LigneTrigo{cos}(-pi/10)$ & $\LigneTrigo{cos}(pi/10)$ & $\LigneTrigo{cos}(3pi/10)$ & $\LigneTrigo{cos}(7pi/10)$ & $\LigneTrigo{cos}(9pi/10)$ \\
+ sin & $\LigneTrigo{sin}(-9pi/10)$ & $\LigneTrigo{sin}(-7pi/10)$ & $\LigneTrigo{sin}(-3pi/10)$ & $\LigneTrigo{sin}(-pi/10)$ & $\LigneTrigo{sin}(pi/10)$ & $\LigneTrigo{sin}(3pi/10)$ & $\LigneTrigo{sin}(7pi/10)$ & $\LigneTrigo{sin}(9pi/10)$ \\
+ tan & $\LigneTrigo{tan}(-9pi/10)$ & $\LigneTrigo{tan}(-7pi/10)$ & $\LigneTrigo{tan}(-3pi/10)$ & $\LigneTrigo{tan}(-pi/10)$ & $\LigneTrigo{tan}(pi/10)$ & $\LigneTrigo{tan}(3pi/10)$ & $\LigneTrigo{tan}(7pi/10)$ & $\LigneTrigo{tan}(9pi/10)$ \\
+\end{tblr}
+\end{noteblock}
+
+\pagebreak
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Jeux et récréations}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\part{Jeux et récréations}
\section{SudoMaths, en \TikZ}\label{sudomaths}
\subsection{Introduction}
-\begin{codeidee}
+\begin{tipblock}
L'idée est de \textit{proposer} un environnement \TikZ, une commande permettant de tracer des grilles de SudoMaths.
L'environnement créé, lié à \TikZ, trace la grille de SudoMaths (avec les blocs démarqués), et peut la remplir avec une liste d'éléments.
-\end{codeidee}
+\end{tipblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%grille classique non remplie, avec légendes H/V, {} nécessaires pour préciser que les cases seront "vides"
\SudoMaths{}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{}
\SudoMaths{}
-\end{codesortie}
+\end{PresentationCodePL}
-\begin{codeinfo}
+\begin{noteblock}
La commande \ctex{SudoMaths} crée donc la grille (remplie ou non), dans un environnement \TikZ, c'est \textit{c'est tout} !
\smallskip
On peut également utiliser l'\textit{environnement} \ctex{EnvSudoMaths} dans lequel on peut rajouter du code \TikZ{} !
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%grille "toute seule"
\SudoMaths[clés]{liste}
@@ -6044,13 +6062,13 @@ On peut également utiliser l'\textit{environnement} \ctex{EnvSudoMaths} dans le
\begin{EnvSudoMaths}[clés]{grille}
%commandes tikz
\end{EnvSudoMaths}
-\end{codetex}
+\end{PresentationCodePL}
\pagebreak
\subsection{Clés et options}
-\begin{codecles}
+\begin{cautionblock}
Quelques \Cle{clés} sont disponibles pour cette commande :
\begin{itemize}
@@ -6070,21 +6088,22 @@ Quelques \Cle{clés} sont disponibles pour cette commande :
\item la clé \Cle{ListeLegH} qui est la liste de la légende horizontale ; \hfill~défaut \Cle{abcd...wxyz}
\item la clé \Cle{DecalLegende} qui est le décalage de la légende par rapport à la grille. \hfill~défaut \Cle{0.45}
\end{itemize}
-\end{codecles}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
-\begin{codeinfo}
+\begin{noteblock}
La liste éventuelle des éléments à rentrer dans le tableau est traitée par le package \ctex{listofitems}, et se présente sous la forme suivante : \ctex{ / / / ... / / § / / / ... / / § ... § / / / ... / / }
\smallskip
Il peut donc être intéressant de \textit{déclarer} la liste au préalable pour simplifier la saisie de la commande !
-\end{codeinfo}
+\end{noteblock}
-\begin{codeinfo}
+\begin{noteblock}
La \Cle{CouleurCase} est gérée -- en interne -- par le caractère \ctex{*} qui permet de préciser qu'on veut que la case soit coloriée.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%grille 6x6 avec blocs 2x3, avec coloration de cases (présentée sous forme de "cases")
\def\grilleSuMa{%
(a)* / (b)* / / / (c)* / (d)* §%
@@ -6096,10 +6115,11 @@ La \Cle{CouleurCase} est gérée -- en interne -- par le caractère \ctex{*} qui
}
\SudoMaths[Unite=0.75cm,NbCol=6,NbSubCol=2,NbLig=6,NbSubLig=3,%
- Police=\small\bfseries\ttfamily,CouleurTexte=red,CouleurCase=yellow!50,Legendes=false]{\grilleSuMa}
-\end{codetex}
+ Police=\small\bfseries\ttfamily,CouleurTexte=red,CouleurCase=yellow!50,%
+ Legendes=false]{\grilleSuMa}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\grilleSuMa{%
(a)* / (b)* / / / (c)* / (d)* §%
(e)* / / / (f)* / (g)* / (h)* §%
@@ -6109,16 +6129,17 @@ La \Cle{CouleurCase} est gérée -- en interne -- par le caractère \ctex{*} qui
/ / / (q)* / / §%
}
-\SudoMaths[Unite=0.75cm,NbCol=6,NbSubCol=2,NbLig=6,NbSubLig=3,Police=\small\bfseries\ttfamily,CouleurTexte=red,CouleurCase=yellow!50,Legendes=false]{\grilleSuMa}
-\end{codesortie}
+\SudoMaths[Unite=0.75cm,NbCol=6,NbSubCol=2,NbLig=6,NbSubLig=3,Police=\small\bfseries\ttfamily,CouleurTexte=red,CouleurCase=yellow!50,%
+Legendes=false]{\grilleSuMa}
+\end{PresentationCodePL}
\pagebreak
-\begin{codeinfo}
+\begin{noteblock}
La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0\,;\,0)$ et $(\text{nbcol}\,;\,-\text{nblig})$, de sorte que les labels des cases sont situés au nœuds de coordonnées $(x,5\,;\,-y,5)$.
-\end{codeinfo}
+\end{noteblock}
-\begin{codetex}[listing only]
+\begin{PresentationCodePL}{listing only}
%grille classique avec coloration de cases et commande tikz
%graduations rajoutées pour la lecture des coordonnées
\def\grilleSuMaB{%
@@ -6138,9 +6159,9 @@ La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0
ListeLegV=QSDFGHJKL,ListeLegH=poiuytrez]{\grilleSuMaB}
\draw[red,very thick,<-,>=latex] (7.5,-4.5) to[bend right] ++ (4,-1) node[right] {code rajouté...} ;
\end{EnvSudoMaths}
-\end{codetex}
+\end{PresentationCodePL}
-\begin{codesortie}
+\begin{PresentationCodePL}{text only}
\def\grilleSuMaB{%
*/////4///§%
/*///3////§%
@@ -6161,13 +6182,29 @@ La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0
\foreach \y in {-1,-2,...,-9} \draw[lightgray] (9,\y) node[right,font=\scriptsize\ttfamily] {\y} ;
\draw[lightgray] (9,0) node[right,font=\scriptsize\ttfamily] {~0} ;
\end{EnvSudoMaths}
-\end{codesortie}
+\end{PresentationCodePL}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Historique}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
\newpage
\part{Historique}
-{\small \bverb|v 2.5.8|~:~~~~Ajout d'un style \textsf{Alt} pour les codes (pages \pageref{pythonsimple} et \pageref{pytminted})
+{\small \bverb|v 2.6.0|~:~~~~Ajout d'une clé [Brut] pour les mesures principales + correction d'un bug} + Refonte de la doc
+
+{\small \bverb| |~:~~~~Commande calcul ligne trigo (pages \pageref{mesureprincipale} et \pageref{lignestrigo})
+
+{\small \bverb|v 2.5.9|~:~~~~Ajout clé [CouleurNombres] pour \textsf{Piton} (v1.5 mini) (page \pageref{pythonpiton})
+
+{\small \bverb|v 2.5.8|~:~~~~Ajout d'un style \textsf{Alt} pour les codes (pages \pageref{pythonsimple} et \pageref{pytminted})
{\small \bverb| |~:~~~~Modification de la syntaxe des commandes avec \textsf{Pythontex} et \textsf{PseudoCode} (pages \pageref{pythontex} et \pageref{pseudocode})
@@ -6279,7 +6316,7 @@ La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0
{\small \bverb|v 1.1.7|~:~~~~Conversions bin/hex/dec (basées sur \textsf{xintbinhex}) avec quelques détails (page \pageref{conversions})
-{\small \bverb|v 1.1.6|~:~~~~Ajout d'une commande pour déterminer les paramètres d'une régression linéaire par moindres carrés (page \pageref{reglin})
+{\small \bverb|v 1.1.6|~:~~~~Commande pour déterminer les paramètres d'une régression linéaire par moindres carrés (page \pageref{reglin})
{\small \bverb|v 1.1.5|~:~~~~Ajout de deux commandes pour, en \TikZ, créer des petits schémas \og de signe \fg{} (page \pageref{aidesigne})
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
index 757afb51d9..3d0d3e043b 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
index 63ea75ebb5..dc7c4cbf98 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
@@ -2,7 +2,7 @@
% !TeX TXS-program:compile = txs:///lualatex/[--shell-escape]
\documentclass[french,a4paper,10pt]{article}
-\def\PLver{2.5.8}
+\def\PLver{2.6.0}
\usepackage[margin=1.5cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{piton}
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
index b658a1adfd..b8ba967585 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
index f553031e8c..11c7d596db 100644
--- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty
+++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
@@ -3,7 +3,11 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2023/04/06 2.5.8 Aide pour l'utilisation de LaTeX en lycee]
+\ProvidesPackage{ProfLycee}[2023/04/13 2.6.0 Aide pour l'utilisation de LaTeX en lycee]
+% 2.6.0 Ajout d'une clé [Brut] pour les mesures principales + commande calcul ligne trigo
+% Refonte des fichiers inclus + correction de bugs mineurs
+% Split des thèmes en fichiers 'input'
+% 2.5.9 Ajout clé [CouleurNombres] pour CodePiton
% 2.5.8 Ajout du style Classique pour PythonLst (externalisation listings) + Modification marges CodePiton (1.5)
% Refonte des commandes pour les codes pour éviter des soucis avec les étoilées
% 2.5.7 Ajout d'un style classique pour le code python (Piton) + console piton/pyluatex
@@ -118,3157 +122,25 @@
%%------Codes listings
\input{proflycee-tools-listings.tex}
-
-%%------SPLINES
-%commande utile pour extraire des infos d'une liste
-\newcommand\extractcoeff[2]{%1=liste,2=numero
- \setsepchar{§}%
- \readlist*\lcoeffs{#1}
- \ifnum \lcoeffslen=1
- \def\COEFFA{#1}
- \def\COEFFB{#1}
- \else
- \itemtomacro\lcoeffs[#2]\COEFF
- \IfSubStr{\COEFF}{/}%
- {\StrCut{\COEFF}{/}{\COEFFA}{\COEFFB}}%
- {\def\COEFFA{\COEFF}\def\COEFFB{\COEFF}}
- \fi
-}
-
-%splines en tikz avec ..controls
-\defKV[spline]{%
- Epaisseur=\def\SPLepaisseur{#1},%
- Couleur=\def\SPLcouleur{#1},%
- Coeffs=\def\SPLcoeffs{#1},%
- CouleurPoints=\def\SPLcouleurpoints{#1},%
- TaillePoints=\def\SPLtaillepoints{#1},%
- Style=\def\SPLstyle{#1}
-}
-
-\setKVdefault[spline]{%
- Epaisseur=1.25pt,%
- Couleur=red,%
- Coeffs=3,%
- CouleurPoints=black,%
- TaillePoints=2pt,%
- AffPoints=false,%
- Style={}
-}
-
-\newcommand\SplineTikz[2][]{%
- \useKVdefault[spline]
- \setKV[spline]{#1}% on paramètres les nouvelles clés et on les simplifie
- %on lit la liste des points/nbderivés et on stocke dans \listepoints
- \setsepchar[.]{§./}%
- \readlist*\SPLlistepoints{#2}%
- \def\SPLnbsplines{\inteval{\SPLlistepointslen-1}}%
- %si uniquement deux points, pas de boucle...
- \ifnum \SPLlistepointslen=2
- %extraction des coeffs de compensation
- \extractcoeff{\SPLcoeffs}{1}%
- %extraction des coordonnées
- \itemtomacro\SPLlistepoints[1,1]\xa
- \itemtomacro\SPLlistepoints[1,2]\ya
- \itemtomacro\SPLlistepoints[1,3]\fprimea
- \itemtomacro\SPLlistepoints[2,1]\xb
- \itemtomacro\SPLlistepoints[2,2]\yb
- \itemtomacro\SPLlistepoints[2,3]\fprimeb
- \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb) ;%
- %sinon on construit bout par bout !
- \else
- \foreach \i in {1,2,...,\SPLnbsplines}{
- %extraction des coeffs de compensation
- \extractcoeff{\SPLcoeffs}{\i}
- \def\j{\inteval{\i+1}}
- \itemtomacro\SPLlistepoints[\i,1]\xa
- \itemtomacro\SPLlistepoints[\i,2]\ya
- \itemtomacro\SPLlistepoints[\i,3]\fprimea
- \itemtomacro\SPLlistepoints[\j,1]\xb
- \itemtomacro\SPLlistepoints[\j,2]\yb
- \itemtomacro\SPLlistepoints[\j,3]\fprimeb
- \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb) ;%
- }
- \fi
- \ifboolKV[spline]{AffPoints}%on affiche les points de contrôle
- {%
- \foreach \i in {1,2,...,\SPLlistepointslen}{%
- \itemtomacro\SPLlistepoints[\i,1]\xa
- \itemtomacro\SPLlistepoints[\i,2]\ya
- \filldraw[\SPLcouleurpoints] (\xa,\ya) circle[radius=\SPLtaillepoints] ;%
- }
- }
- {}
-}
-
-%tangente(s) en TikZ, avec point/dérivée ou liste points/dérivées
-\defKV[tgte]{%
- Epaisseur=\def\TGTepaisseur{#1},%
- Couleur=\def\TGTcouleur{#1},%
- xl=\def\TGTXL{#1},%
- xr=\def\TGTXR{#1},%
- Style=\def\TGTstyle{#1},%
- Point=\def\TGTnumpt{#1}
-}
-
-\setKVdefault[tgte]{
- Epaisseur=1.25pt,%
- Couleur=red,%
- xl=0.5,xr=0.5,%
- Style={},%
- Point=1
-}
-
-\newcommand\TangenteTikz[2][]{%
- \useKVdefault[tgte]%
- \setKV[tgte]{#1}% on paramètres les nouvelles clés et on les simplifie
- \setsepchar[.]{§./}%
- \readlist*\TGTlistepoints{#2}%
- \itemtomacro\TGTlistepoints[\TGTnumpt,1]\xa
- \itemtomacro\TGTlistepoints[\TGTnumpt,2]\ya
- \itemtomacro\TGTlistepoints[\TGTnumpt,3]\fprimea
- \def\TGTDEB{\fpeval{\xa-\TGTXL}}\def\TGTFIN{\fpeval{\xa+\TGTXR}}%
- \draw[line width=\TGTepaisseur,\TGTcouleur,domain=\TGTDEB:\TGTFIN,\TGTstyle] plot (\x,{\fprimea*(\x-\xa)+\ya}) ;%
-}
-
-%%------FENÊTRE CALCUL FORMEL
-\newcommand\CFchap{\textasciicircum}
-\newcounter{CFnum}
-%def des clés
-\defKV[paramfenxcas]{%
- Largeur=\def\CFlarg{#1},%
- EspaceLg=\def\CFesplg{#1},%
- PremCol=\def\CFpremcol{#1},%
- HautPremCol=\def\CFhpremcol{#1},%
- Taille=\def\CFtaille{#1},%
- Couleur=\def\CFcouleur{#1},%
- TailleTitre=\def\CFtailletitre{#1},%
- CouleurCmd=\def\CFcoulcmd{#1},%
- CouleurRes=\def\CFcoulres{#1},%
- PosCmd=\def\CFposcmd{#1},%
- PosRes=\def\CFposres{#1},%
- LabelTitre=\def\CFlabeltitre{#1}%
-}
-\setKVdefault[paramfenxcas]{%
- Largeur=16,EspaceLg=2pt,PremCol=0.3,HautPremCol=0.4,%
- Couleur=darkgray,Menu=true,Titre=false,TailleTitre=\normalsize,Taille=\normalsize,%
- Sep=true,PosRes=centre,PosCmd=gauche,%
- CouleurCmd=red,CouleurRes=blue,%
- LabelTitre={Résultats obtenus avec un logiciel de Calcul Formel}%
-}
-
-\newcommand\CalculFormelParametres[1][]{%
- \setcounter{CFnum}{0}
- \useKVdefault[paramfenxcas]%
- \setKV[paramfenxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
-}
-
-\defKV[paramlgxcas]{%
- HautCmd=\def\CFhle{#1},%
- HautRes=\def\CFhlr{#1}
-}
-\setKVdefault[paramlgxcas]{%
- HautCmd=0.75,%
- HautRes=0.75
-}
-
-\newcommand\CalculFormelLigne[3][]{%
- \addtocounter{CFnum}{1}
- \def\CFL{\theCFnum}%
- \def\CFLA{\inteval{\CFL-1}}%
- \useKVdefault[paramlgxcas]%
- \setKV[paramlgxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\CFLA{\inteval{\CFL-1}}%
- %DÉCLARATION DES NŒUDS (les "6" coins des lignes commande et résultat)
- \xintifboolexpr{\CFL == 1}%si c'est la première ligne
- {\coordinate (A0\CFL) at (0,0);}
- {\coordinate (A0\CFL) at ($(A2\CFLA) + (0,{-\CFesplg})$);}
- \coordinate (A1\CFL) at ($(A0\CFL) + (0,{-\CFhle})$);
- \coordinate (A2\CFL) at ($(A1\CFL) + (0,{-\CFhlr})$);
- \coordinate (A3\CFL) at ($(A0\CFL) + ({\CFlarg},0)$);
- \coordinate (A4\CFL) at ($(A1\CFL) + ({\CFlarg},0)$);
- \coordinate (A5\CFL) at ($(A2\CFL) + ({\CFlarg},0)$);
- %DÉCLARATION DES NŒUDS INTERMÉDIAIRES (pour les commandes et les résultats)
- \coordinate (C1\CFL) at ($(A0\CFL) + (0,{-0.5*\CFhle})$);
- \coordinate (C2\CFL) at ($(A0\CFL) + ({0.5*\CFlarg},{-0.5*\CFhle})$);
- \coordinate (C3\CFL) at ($(A0\CFL) + ({\CFlarg},{-0.5*\CFhle})$);
- \coordinate (R1\CFL) at ($(A1\CFL) + (0,{-0.5*\CFhlr})$);
- \coordinate (R2\CFL) at ($(A1\CFL) + ({0.5*\CFlarg},{-0.5*\CFhlr})$);
- \coordinate (R3\CFL) at ($(A1\CFL) + ({\CFlarg},{-0.5*\CFhlr})$);
- %RECTANGLE DE BASE
- \draw[\CFcouleur] (A0\CFL) rectangle (A5\CFL) ;
- %LA COMMANDE EN ROUGE
- \IfStrEq{\CFposcmd}{centre}%si poscmd=center
- {\draw (C2\CFL) node[\CFcoulcmd,font=\CFtaille] {#2} ;}
- {}
- \IfStrEq{\CFposcmd}{gauche}%si poscmd=left
- {\draw (C1\CFL) node[right,\CFcoulcmd,font=\CFtaille] {#2} ;}
- {}
- \IfStrEq{\CFposcmd}{right}%si poscmd=right
- {\draw (C3\CFL) node[left,\CFcoulcmd,font=\CFtaille] {#2} ;}
- {}
- %LE RÉSULTAT
- \IfStrEq{\CFposres}{centre}%si posrep=center
- {\draw (R2\CFL) node[\CFcoulres,font=\CFtaille] {#3} ;}
- {}
- \IfStrEq{\CFposres}{gauche}%si posrep=left
- {\draw (R1\CFL) node[right,\CFcoulres,font=\CFtaille] {#3} ;}
- {}
- \IfStrEq{\CFposres}{right}%si posrep=right
- {\draw (R3\CFL) node[left,\CFcoulres,font=\CFtaille] {#3} ;}
- {}
- \ifboolKV[paramfenxcas]{Sep}%si sep=true
- {\draw[\CFcouleur] (A1\CFL) -- (A4\CFL);}%
- {}
- %LE PETIT NUMÉRO
- \draw[\CFcouleur] (A0\CFL) rectangle ++ ({-\CFpremcol},{-\CFhpremcol}) node[\CFcouleur,midway,font=\small\sffamily\bfseries] {\CFL} ;
- %LE RECTANGLE "MENU"
- \ifboolKV[paramfenxcas]{Menu}%si menu=true
- {\draw[\CFcouleur,fill=\CFcouleur!25] (A5\CFL) rectangle ++ (-0.65,0.25) node[black,midway,font=\tiny\sffamily\bfseries] {MENU} ;}%
- {}
- %LE BLOC "TITRE"
- \ifboolKV[paramfenxcas]{Titre}%si titre=true
- {\draw[\CFcouleur,fill=lightgray!25,rounded corners] ($(A01) + (0,2pt)$) rectangle ++ ($({\CFlarg},2em)$) node[ForestGreen!50!\CFcouleur,midway,font=\CFtailletitre\ttfamily\bfseries] {\CFlabeltitre};}
- {}
-}
-
-%%------FakeTerm
-%couleurs (inspirées par termsim !)
-\definecolor{PLmpurple}{RGB}{48,10,36}
-\definecolor{PLmgray}{RGB}{70,72,67}
-\definecolor{PLogray}{RGB}{148,147,141}
-\definecolor{PLoorange}{RGB}{233,101,56}
-\definecolor{PLterminal}{RGB}{80,78,70}
-\definecolor{PLlinux}{RGB}{0,39,51}
-\definecolor{PLwinblue}{HTML}{1883D7}
-\definecolor{PLosxgray}{HTML}{D8D6D9}
-
-%WINDOWS
-\tcbset{PLfaketermwin/.style={%
- enhanced,boxrule=1pt,sharp corners,before skip=12pt,after skip=12pt,%
- colframe=PLwinblue,colback=black,colbacktitle=white,colupper=white,coltitle=black,%
- titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
- fonttitle=\bfseries\small\sffamily
- }
-}
-
-\setKVdefault[fakeTERMwin]{Titre={Terminal Windows}}
-
-\newcommand\PLcommandeswin{%
- \begin{tikzpicture}[thick,scale=0.66]
- \draw (0,0)--(1em,0) ; \draw (2em,0) rectangle (3em,1em) ; \draw (4em,1em)--(5em,0) (4em,0)--(5em,1em) ;
- \end{tikzpicture}%
-}
-
-\newcommand\termwintitre[1][]{%
- \restoreKV[fakeTERMwin]
- \setKV[fakeTERMwin]{#1}
- \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={X[l]r}}
- {\footnotesize\faTerminal}~~\useKV[fakeTERMwin]{Titre} & \PLcommandeswin \\ %
- \end{tblr}
-}
-
-\DeclareTCBListing{TerminalWin}{ O{\linewidth} m !O{} }{%<taille> puis {Titre=...} puis [option]
- PLfaketermwin,title={\termwintitre[#2]},%
- listing only,listing engine=listings,%
- listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
- width=#1,#3
-}
-
-%LINUX
-\newcommand{\PLUbuntuWhite}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[PLmgray] (0,0.25em) circle[radius=0.5em] ;
- \end{tikzpicture}%
-}
-\newcommand{\PLUbuntuMin}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em];
- \draw[PLterminal](-0.35em,0.25em)--(0.35em,0.25em);
- \end{tikzpicture}%
-}
-\newcommand{\PLUbuntuClose}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[color=PLoorange!70!white] (0,0.25em) circle[radius=0.5em];
- \draw[PLterminal] (-0.32em,-0.07em)--(0.32em,0.57em);
- \draw[PLterminal] (-0.32em,0.57em)--(0.32em,-0.07em);
- \end{tikzpicture}%
-}
-\newcommand{\PLUbuntuMax}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em];
- \draw[PLterminal] (-0.32em,0.5em) rectangle (0.32em,0);
- \end{tikzpicture}%
-}
-
-\tcbset{PLtermlinux/.style={%
- enhanced,boxrule=1pt,arc=4pt,before skip=12pt,after skip=12pt,%
- colframe=PLmgray,colback=PLmpurple,colbacktitle=PLmgray,colupper=white,coltitle=white,%
- titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
- fonttitle=\bfseries\small\sffamily
- }
-}
-
-\setKVdefault[fakeTERMnux]{Titre={Terminal UNiX}}
-
-\newcommand\termnuxtitre[1][]{%
- \restoreKV[fakeTERMnux]
- \setKV[fakeTERMnux]{#1}
- \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}}
- \PLUbuntuWhite~~\PLUbuntuWhite~~\PLUbuntuWhite & \vphantom{p}\useKV[fakeTERMnux]{Titre} & \PLUbuntuMin~~\PLUbuntuMax~~\PLUbuntuClose \\
- \end{tblr}
-}
-
-\DeclareTCBListing{TerminalUnix}{ O{\linewidth} m !O{} }{%<taille> puis {Titre=...} puis [option]
- PLtermlinux,title={\termnuxtitre[#2]},%
- listing only,listing engine=listings,%
- listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
- width=#1,#3
-}
-
-%OSX
-\tcbset{PLfaketermosx/.style={%
- enhanced,boxrule=1pt,arc=6pt,before skip=12pt,after skip=12pt,%
- colframe=PLosxgray,colback=lightgray!15,colbacktitle=PLosxgray,colupper=black,coltitle=black,%
- titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
- fonttitle=\bfseries\small\sffamily
- }
-}
-
-\newcommand{\PLOSXRed}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[red] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\newcommand{\PLOSXOrange}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[orange] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\newcommand{\PLOSXGreen}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[ForestGreen] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\newcommand{\PLOSXLG}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[PLosxgray] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\setKVdefault[fakeTERMosx]{titre={Terminal OSX}}
-
-\newcommand\termosxtitre[1][]{%
- \restoreKV[fakeTERMosx]
- \setKV[fakeTERMosx]{#1}
- \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}}
- \PLOSXRed~\PLOSXOrange~\PLOSXGreen & \vphantom{p}\useKV[fakeTERMosx]{Titre} & \PLOSXLG~\PLOSXLG~\PLOSXLG \\
- \end{tblr}
-}
-
-\DeclareTCBListing{TerminalOSX}{ O{\linewidth} m !O{} }{%<taille> puis {Titre=...} puis [option]
- PLfaketermosx,title={\termosxtitre[#2]},%
- listing only,listing engine=listings,%
- listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
- width=#1,#3
-}
-
-%%------CartoucheCapytale
-\definecolor{vertcapyt}{rgb}{0.0,0.5,0.0}
-%\definecolor{vertcapyt}{HTML}{008000}
-\DeclareTotalTCBox{\CartoucheCapytale}{ s O{} m }
- {enhanced,size=fbox,on line,arc=3pt,colback=vertcapyt,colframe=vertcapyt,fontupper=\IfBooleanTF{#1}{\ttfamily}{\sffamily}\bfseries,colupper=white}%
- {#3#2~{\scriptsize\faLink}}
-
-%%------PaveDroitTikZ
-\defKV[paramspave]{%
- Largeur=\xdef\PFPaveLg{#1},%
- Profondeur=\xdef\PFPavePf{#1},%
- Hauteur=\xdef\PFPaveHt{#1},%
- Angle=\xdef\PFPaveAngl{#1},%
- Fuite=\xdef\PFPaveFuite{#1},%
- Sommets=\def\PFPaveSommets{#1},%
- Epaisseur=\xdef\PFPaveThick{#1}
-}
-\setKVdefault[paramspave]{%
- Aff=false,%
- Plein=false,%
- Largeur=2,%
- Profondeur=1,%
- Hauteur=1.25,%
- Angle=30,%
- Fuite=0.5,%
- Epaisseur=thick,%
- Sommets=A§B§C§D§E§F§G§H,%
- Cube=false,%
- Math=false
-}
-
-\newcommand\PaveTikz[1][]{%
- \useKVdefault[paramspave]%
- \setKV[paramspave]{#1}%
- \ifboolKV[paramspave]{Cube}
- {\xdef\PFPavePf{\PFPaveLg}%
- \xdef\PFPaveHt{\PFPaveLg}}
- {}
- \setsepchar{§}%
- \readlist*\PFListeSommets\PFPaveSommets
- \itemtomacro\PFListeSommets[1]\PaveA
- \itemtomacro\PFListeSommets[2]\PaveB
- \itemtomacro\PFListeSommets[3]\PaveC
- \itemtomacro\PFListeSommets[4]\PaveD
- \itemtomacro\PFListeSommets[5]\PaveE
- \itemtomacro\PFListeSommets[6]\PaveF
- \itemtomacro\PFListeSommets[7]\PaveG
- \itemtomacro\PFListeSommets[8]\PaveH
- %les nœuds du pave
- \coordinate (\PaveA) at (0,0) ;
- \coordinate (\PaveB) at ({\PFPaveLg},0) ;
- \coordinate (\PaveC) at ($(\PaveB) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ;
- \coordinate (\PaveD) at ($(\PaveA) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ;
- \coordinate (\PaveE) at ($(\PaveA) + (0,{\PFPaveHt})$) ;
- \coordinate (\PaveF) at ($(\PaveB) + (0,{\PFPaveHt})$) ;
- \coordinate (\PaveG) at ($(\PaveC) + (0,{\PFPaveHt})$) ;
- \coordinate (\PaveH) at ($(\PaveD) + (0,{\PFPaveHt})$) ;
- \ifboolKV[paramspave]{Aff}
- {\draw (\PaveA) node[below left] {\ifboolKV[paramspave]{Math}{$\PaveA$}{\PaveA}} ;
- \draw (\PaveB) node[below right] {\ifboolKV[paramspave]{Math}{$\PaveB$}{\PaveB}} ;
- \draw (\PaveC) node[above right] {\ifboolKV[paramspave]{Math}{$\PaveC$}{\PaveC}} ;
- \ifboolKV[paramspave]{Plein}
- {}
- {\draw (\PaveD) node[above left] {\ifboolKV[paramspave]{Math}{$\PaveD$}{\PaveD}} ;}
- \draw (\PaveE) node[below left] {\ifboolKV[paramspave]{Math}{$\PaveE$}{\PaveE}} ;
- \draw (\PaveF) node[below right] {\ifboolKV[paramspave]{Math}{$\PaveF$}{\PaveF}} ;
- \draw (\PaveG) node[above right] {\ifboolKV[paramspave]{Math}{$\PaveG$}{\PaveG}} ;
- \draw (\PaveH) node[above left] {\ifboolKV[paramspave]{Math}{$\PaveH$}{\PaveH}} ;}
- {}%on affiche rien
- \draw[\PFPaveThick] (\PaveA)--(\PaveB)--(\PaveF)--(\PaveE)--cycle
- (\PaveB)--(\PaveC)--(\PaveG)--(\PaveF)--cycle
- (\PaveG)--(\PaveH)--(\PaveE) ;
- \ifboolKV[paramspave]{Plein}
- {}
- {\draw[dashed,\PFPaveThick] (\PaveA)--(\PaveD)--(\PaveC)
- (\PaveD)--(\PaveH) ;}
-}
-
-%%------TétraèdreTikZ
-\defKV[paramstetra]{%
- Largeur=\xdef\PFTetraLg{#1},%
- Profondeur=\xdef\PFTetraPf{#1},%
- Hauteur=\xdef\PFTetraHt{#1},%
- Alpha=\xdef\PFTetraAlpha{#1},%
- Beta=\xdef\PFTetraBeta{#1},%
- Sommets=\def\PFTetraSommets{#1},%
- Epaisseur=\xdef\PFTetraThick{#1}
-}
-\setKVdefault[paramstetra]{%
- Aff=false,%
- Plein=false,%
- Largeur=4,%
- Profondeur=1.25,%
- Hauteur=3,%
- Alpha=40,%
- Beta=60,%
- Epaisseur=thick,%
- Sommets=A§B§C§D,%
- Math=false
-}
-
-\newcommand\TetraedreTikz[1][]{%
- \useKVdefault[paramstetra]%
- \setKV[paramstetra]{#1}%
- \setsepchar{§}%
- \readlist*\PFListeSommets\PFTetraSommets
- \itemtomacro\PFListeSommets[1]\TetraA
- \itemtomacro\PFListeSommets[2]\TetraB
- \itemtomacro\PFListeSommets[3]\TetraC
- \itemtomacro\PFListeSommets[4]\TetraD
- %les nœuds du tétraèdre
- \coordinate (\TetraA) at (0,0) ;
- \coordinate (\TetraB) at ($(\TetraA) + ({-\PFTetraAlpha}:{\PFTetraPf})$) ;
- \coordinate (\TetraC) at ({\PFTetraLg},0) ;
- \coordinate (\TetraD) at ($(\TetraA) + ({\PFTetraBeta}:{\PFTetraHt})$) ;
- \ifboolKV[paramstetra]{Aff}
- {\draw (\TetraA) node[left] {\ifboolKV[paramstetra]{Math}{$\TetraA$}{\TetraA}} ;
- \draw (\TetraB) node[below] {\ifboolKV[paramstetra]{Math}{$\TetraB$}{\TetraB}} ;
- \draw (\TetraC) node[right] {\ifboolKV[paramstetra]{Math}{$\TetraC$}{\TetraC}} ;
- \draw (\TetraD) node[above] {\ifboolKV[paramstetra]{Math}{$\TetraD$}{\TetraD}} ;}
- {}%on affiche rien
- \draw[\PFTetraThick] (\TetraA)--(\TetraD)--(\TetraC)--(\TetraB)--cycle
- (\TetraD)--(\TetraB) ;
- \ifboolKV[paramstetra]{Plein}
- {}
- {\draw[dashed,\PFTetraThick] (\TetraA)--(\TetraC) ;}
-}
-
-%%------EnsembleList
-\defKV[kvensemble]{%
- Sep=\def\PLenssep{#1},%
- Option=\def\PLensopt{#1}
-}
-
-\setKVdefault[kvensemble]{%
- Sep={;},%
- Mathpunct=true,%
- Option={}
-}
-
-\newcommand\EcritureEnsemble[2][]{%
- \useKVdefault[kvensemble]%
- \setKV[kvensemble]{#1}%
- \ifboolKV[kvensemble]{Mathpunct}%
- {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}%
- {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}
-}
-
-%%------SimplFrac ancienne version
-%\DeclareDocumentCommand\ConversionFraction{ O{} m }{% argument optionnel [d ou t] puis argument mandataire {calcul ou fraction}
-% \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#2}}}}%on calcule et on transforme en A/B
-% \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît
-% {%si oui := fraction
-% \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
-% \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
-% \ifblank{#1}{\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}{}%si l'argument optionnel est vide
-% \IfStrEq{#1}{d}{\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}{}%si l'arg opt est d
-% \IfStrEq{#1}{t}{\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}{}%si l'arg opt est t
-% }{%si non := entier
-% \num{\calculargument}%on affiche l'entier, avec le package siunitx
-% }%
-%}
-
-%%------SimplFrac nouvelle version
-\NewDocumentCommand\ConversionFraction{ s O{} m }{%
- %*=moins sur le numérateur
- %2=argument.optionnel[d/t/dec=...]
- %3=argument mandataire {calcul ou fraction}
- \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#3}}}}%on calcule et on transforme en A/B
- \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît
- {%si oui := fraction
- \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
- \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
- \ifblank{#2}%
- {%
- \IfBooleanTF{#1}%
- {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
- {%
- \ifthenelse{\numerateur < 0}%
- {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
- {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
- }%
- }%
- {}%si l'argument optionnel est vide
- \IfStrEq{#2}{d}%
- {%
- \IfBooleanTF{#1}%
- {\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}%
- {%
- \ifthenelse{\numerateur < 0}%
- {\ensuremath{-\dfrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
- {\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}%
- }%
- }%
- {}%si l'argument optionnel est vide
- \IfStrEq{#2}{t}%
- {%
- \IfBooleanTF{#1}%
- {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}%
- {%
- \ifthenelse{\numerateur < 0}%
- {\ensuremath{-\tfrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
- {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}%
- }%
- }%
- {}%si l'argument optionnel est vide
- \IfStrEq{#2}{n}%
- {%
- %\IfBooleanTF{#1}%
- {\ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}}%
- %{%
- % \ifthenelse{\numerateur < 0}%
- % {\ensuremath{-\nicefrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
- % {\ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}}%
- %}%
- }%
- {}%si l'argument optionnel est vide
- \IfSubStr{#2}{dec}%on veut la forme décimale
- {%
- \IfSubStr{#2}{=}%si on rajoute une précision
- {%
- \StrBehind{#2}{=}[\precdecimal]%
- \ensuremath{\num{\xintfloateval{round(#3,\precdecimal)}}}%
- }%
- {%
- \ensuremath{\num{\xintfloateval{#3}}}%
- }%
- }%
- {}%si l'argument optionnel est vide
- }{%si non := entier
- \num{\calculargument}%on affiche l'entier, avec le package siunitx
- }%
-}
-
-%%------CabWeb
-\defKV[webrecurr]{%
- Fct=\def\PLRecurfct{#1},%
- Nom=\def\PLRecurnom{#1},%
- No=\def\PLRecurno{#1},%
- Nb=\def\PLRecurnb{#1},%
- Uno=\def\PLRecuruno{#1},%
- PosLabel=\def\PLRecurposlab{#1},%
- DecalLabel=\def\PLRecuroffset{#1},%
- TailleLabel=\def\PLRecurlabelsize{#1}
-}
-
-\setKVdefault[webrecurr]{
- No=0,%
- Nom=u,%
- Nb=5,%
- AffTermes=true,%
- PosLabel=below,%
- DecalLabel=6pt,%
- TailleLabel=\small
-}
-
-\NewDocumentCommand\ToileRecurrence{ O{} O{thick,color=magenta} O{dotted} }{
- %<clés> + <style cabweb> + <style supplémentaire pointillés>
- \useKVdefault[webrecurr]%
- \setKV[webrecurr]{#1}% on paramètres les nouvelles clés et on les simplifie
- \foreach \i [remember=\i as \x (initially \PLRecuruno)] in {1,...,\PLRecurnb}{%
- \def\y{\fpeval{\PLRecurfct}}
- %test de la position courbe / bissectrice ?
- \ifnum \i=1
- \newdimen \X
- \newdimen \Y
- \X = \x pt
- \Y = \y pt
- \ifdim \Y < \X
- \draw[#2] (\x,\y)--(\y,\y) ;
- \else
- \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ;
- \fi
- \else
- \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ;
- \fi
- \ifboolKV[webrecurr]{AffTermes}
- {\def\indice{\fpeval{\i+\PLRecurno-1}}
- \draw[#2,#3] (\x,\y)--(\x,0) node[\PLRecurposlab=\PLRecuroffset,font=\PLRecurlabelsize]{$\PLRecurnom_\indice$};}
- {}
- \def\i{\fpeval{\y}}%
- }
-}
-
-%%------CercleTrigo
-\defKV[cercletrigo]{%
- Rayon=\def\PLcerclerayon{#1},%
- Epaisseur=\def\PLcerclethick{#1},%
- EpaisseurSol=\def\PLcerclesolthick{#1},%
- Marge=\def\PLcerclemarge{#1},%
- TailleValeurs=\def\PLcerclevaleurs{#1},%
- TailleAngles=\def\PLcercleangles{#1},%
- CouleurFond=\def\PLcerclefond{#1},%
- Decal=\def\PLcercledecal{#1},%
- cos=\def\PLcerclevalcos{#1},%
- sin=\def\PLcerclevalsin{#1},%
- CouleurSol=\def\PLcerclecoleq{#1}
-}
-
-\setKVdefault[cercletrigo]{
- Rayon=3,%
- Marge=0.25,%
- Decal=10pt,%
- Epaisseur=thick,%
- EpaisseurSol=very thick,%
- AffAngles=true,%
- AffTraits=true,%
- AffValeurs=true,%
- MoinsPi=true,%
- TailleValeurs=\scriptsize,%
- TailleAngles=\footnotesize,%
- CouleurFond=white,%
- Equationcos=false,%
- Equationsin=false,%
- cos=45,%
- sin=30,%
- CouleurSol=blue
-}
-
-\newcommand\CercleTrigo[1][]{%
- \useKVdefault[cercletrigo]
- \setKV[cercletrigo]{#1}
- \tikzset{PLval/.style={inner sep=1pt,font=\PLcerclevaleurs,fill=\PLcerclefond}}
- \tikzset{PLagl/.style={inner sep=1pt,font=\PLcercleangles,fill=\PLcerclefond}}
- %valeurs remarquables
- \ifboolKV[cercletrigo]{AffAngles}
- {%valeursdudessus
- \draw ({\PLcerclerayon},0) node[above right=2pt,font=\PLcercleangles] {0} ;
- \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ;
- \draw ($(45:{\PLcerclerayon})+(45:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{4}$} ;
- \draw ($(60:{\PLcerclerayon})+(60:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{3}$} ;
- \draw (0,{\PLcerclerayon}) node[above right=2pt,PLagl] {$\tfrac{\pi}{2}$} ;
- \draw ({-\PLcerclerayon},0) node[above left=2pt,PLagl] {$\pi$} ;
- \draw ($(150:{\PLcerclerayon})+(150:\PLcercledecal)$) node[PLagl] {$\tfrac{5\pi}{6}$} ;
- \draw ($(135:{\PLcerclerayon})+(135:\PLcercledecal)$) node[PLagl] {$\tfrac{3\pi}{4}$} ;
- \draw ($(120:{\PLcerclerayon})+(120:\PLcercledecal)$) node[PLagl] {$\tfrac{2\pi}{3}$} ;
- \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ;
- %valeursdudessous
- \draw ($(-30:{\PLcerclerayon})+(-30:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{11}\pi}{6}$} ;
- \draw ($(-45:{\PLcerclerayon})+(-45:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{7}\pi}{4}$} ;
- \draw ($(-60:{\PLcerclerayon})+(-60:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{5}\pi}{3}$} ;
- \draw (0,{-\PLcerclerayon}) node[below right=2pt,PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{3}\pi}{2}$} ;
- \draw ($(-120:{\PLcerclerayon})+(-120:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-2}{4}\pi}{3}$} ;
- \draw ($(-135:{\PLcerclerayon})+(-135:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-3}{5}\pi}{4}$} ;
- \draw ($(-150:{\PLcerclerayon})+(-150:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-5}{7}\pi}{6}$} ;
- \ifboolKV[cercletrigo]{MoinsPi}
- {\draw ({-\PLcerclerayon},0) node[below left=2pt,PLagl] {$-\pi$} ;}
- {\draw ({\PLcerclerayon},0) node[below right=2pt,PLagl] {$2\pi$} ;}
- }%
- {}
- %tracés
- \draw[\PLcerclethick,->,>=latex] ({-\PLcerclerayon-\PLcerclemarge},0)--({\PLcerclerayon+\PLcerclemarge},0) ;
- \draw[\PLcerclethick,->,>=latex] (0,{-\PLcerclerayon-\PLcerclemarge})--(0,{\PLcerclerayon+\PLcerclemarge}) ;
- \draw[\PLcerclethick] (0,0) circle[radius=\PLcerclerayon] ;
- \draw (0,0) node[below left=2pt,PLval] {0} ;
- %equations
- \ifboolKV[cercletrigo]{Equationcos}
- {%traitsdeconstructioncos
- \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon)
- (-135:\PLcerclerayon) -- (45:\PLcerclerayon)
- (30:\PLcerclerayon) -- (150:\PLcerclerayon)
- (-30:\PLcerclerayon) -- (-150:\PLcerclerayon)
- (-60:\PLcerclerayon)--(60:\PLcerclerayon)
- (-120:\PLcerclerayon)--(120:\PLcerclerayon) ;
- \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon)--({-\PLcerclevalcos}:\PLcerclerayon) ;
- \filldraw[\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ({-\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ;%
- }
- {}
- \ifboolKV[cercletrigo]{Equationsin}
- {%traitsdeconstructioncos
- \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon)
- (-135:\PLcerclerayon) -- (45:\PLcerclerayon)
- (30:\PLcerclerayon) -- (150:\PLcerclerayon)
- (-30:\PLcerclerayon) -- (-150:\PLcerclerayon)
- (-60:\PLcerclerayon)--(60:\PLcerclerayon)
- (-120:\PLcerclerayon)--(120:\PLcerclerayon) ;
- \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon)--({180-\PLcerclevalsin}:\PLcerclerayon) ;
- \filldraw[\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ({180-\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ;%
- }
- {}
- %valeurs
- \ifboolKV[cercletrigo]{AffValeurs}
- {%
- \draw ({0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{1}{2}$} ;
- \draw ({-0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{1}{2}$} ;
- \draw (0,{0.5*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{1}{2}$} ;
- \draw (0,{-0.5*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{1}{2}$} ;
- \draw ({0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ;
- \draw ({-0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ;
- \draw (0,{0.866*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ;
- \draw (0,{-0.866*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ;
- \draw ({0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ;
- \draw ({-0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ;
- \draw (0,{0.707*\PLcerclerayon}) node[right=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ;
- \draw (0,{-0.707*\PLcerclerayon}) node[right=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ;
- %\draw[\PLcerclethick] (0,0) circle[radius=\PLcerclerayon] ; %on retrace par dessus ?
- }%
- {}
- %valeurs remarquables en dernier
- \ifboolKV[cercletrigo]{AffTraits}
- {%
- \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon) rectangle (60:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon) rectangle (30:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon) rectangle (45:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon)--(60:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon)--(30:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon)--(45:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (120:\PLcerclerayon)--(-60:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (150:\PLcerclerayon)--(-30:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (135:\PLcerclerayon)--(-45:\PLcerclerayon) ;
- }%
- {}
-}
-
-%%------AideTds
-\defKV[aidetds]{%
- Code=\def\tdsparam{#1},%
- Couleur=\def\tdscouleur{#1},%
- Racines=\def\tdsracine{#1},%
- Largeur=\def\tdslarg{#1},%
- Hauteur=\def\tdshaut{#1}
-}
-
-\setKVdefault[aidetds]{%
- Code=da+,
- Couleur=red,%
- Largeur=2,%
- Hauteur=1,%
- Cadre=true,%
- Racines=2
-}
-
-\NewDocumentCommand\schematdsaff{ s m m m m }{%pour les droites (interne)
- % * = étoilée -> a négatif
- % #2 = couleur
- % #3 = largeur
- % #4 = hauteur
- % #5 = racine
- \IfBooleanTF{#1}%si étoile := droite qui descend
- {%
- \def\possgnavant{above right}\def\possgnapres{below left}\def\sgnavant{\strut+}\def\sgnapres{\strut-}%
- \draw[thick,#2] ({-0.5*#3},{0.5*#4})--({0.5*#3},{-0.5*#4});
- }
- {%
- \def\possgnavant{below right}\def\possgnapres{above left}\def\sgnavant{\strut-}\def\sgnapres{\strut+}%
- \draw[thick,#2] ({-0.5*#3},{-0.5*#4})--({0.5*#3},{0.5*#4});
- }
- \draw[#2] ({-0.5*#3},0) node[inner sep=0pt,\possgnavant=1pt,font=\scriptsize] {\textcircled{$\sgnavant$}};
- \draw[#2] ({0.5*#3},0) node[inner sep=0pt,\possgnapres=1pt,font=\scriptsize] {\textcircled{$\sgnapres$}};
- \draw[#2] (0,0) node[inner sep=0pt,above=3pt,font=\scriptsize] {$\strut#5$} ;
- \filldraw[#2] (0,0) circle[radius=2pt] ;
-}
-
-\NewDocumentCommand\schematdsparab{ m m m m m o }{%pour les paraboles (interne)
- % #1 = signe de a (1 ou -1) ?
- % #2 = couleur
- % #3 = largeur
- % #4 = hauteur
- % #5 = nb racine
- % #6 = liste racines (option)
- \xintifboolexpr{ #1 > 0 'and' #5 == 2 } %a>0 et delta>0
- {%
- \saveexpandmode\expandarg
- \StrCut{#6}{/}{\xun}{\xdeux}
- \restoreexpandmode
- \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{-0.5*#4}) ({0.375*#3},{0.5*#4}) ;
- \draw[#2] ({-0.5*#3},0) node[above right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- \draw[#2] ({0.5*#3},0) node[above left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- \draw[#2] (0,0) node[below=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[below right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$};
- \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[below left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};%
- }
- {}
- \xintifboolexpr{ #1 < 0 'and' #5 == 2 } %a<0 et delta>0
- {%
- \saveexpandmode\expandarg
- \StrCut{#6}{/}{\xun}{\xdeux}
- \restoreexpandmode
- \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{0.5*#4}) ({0.375*#3},{-0.5*#4}) ;
- \draw[#2] ({-0.5*#3},0) node[below right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- \draw[#2] ({0.5*#3},0) node[below left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- \draw[#2] (0,0) node[above=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[above right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$};
- \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[above left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};%
- }
- {}
- \xintifboolexpr{ #1 > 0 'and' #5 == 1 } %a>0 et delta=0
- {%
- \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,0) ({0.375*#3},{0.5*#4}) ;
- \filldraw[#2] (0,0) circle[radius=2pt] node[below=3pt,inner sep=1pt,font=\scriptsize] {$#6$};
- \draw[#2] (0,0) node[above=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- }
- {}
- \xintifboolexpr{ #1 < 0 'and' #5 == 1 } %a>0 et delta=0
- {%
- \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,0) ({0.375*#3},{-0.5*#4}) ;
- \filldraw[#2] (0,0) circle[radius=2pt] node[above=3pt,inner sep=0pt,font=\scriptsize] {$#6$};
- \draw[#2] (0,0) node[below=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- }
- {}
- \xintifboolexpr{ #1 > 0 'and' #5 == 0 } %a>0 et delta<0
- {%
- \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{0.075*#4}) ({0.375*#3},{0.5*#4}) ;
- \draw[#2] (0,{0.075*#4}) node[above=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- }
- {}
- \xintifboolexpr{ #1 < 0 'and' #5 == 0 } %a>0 et delta<0
- {%
- \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{-0.075*#4}) ({0.375*#3},{-0.5*#4}) ;
- \draw[#2] (0,{-0.075*#4}) node[below=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- }
- {}
-}
-
-\NewDocumentCommand\MiniSchemaSignes{ s O{} D<>{} }{%
- \useKVdefault[aidetds]
- \setKV[aidetds]{#2}
- %simplification des codes
- \IfEq{\tdsparam}{da+}{\def\xcode{1}}{}
- \IfEq{\tdsparam}{da-}{\def\xcode{-1}}{}
- \IfEq{\tdsparam}{pa+d+}{\def\xcode{12}}{}
- \IfEq{\tdsparam}{pa-d+}{\def\xcode{-12}}{}
- \IfEq{\tdsparam}{pa+d0}{\def\xcode{11}}{}
- \IfEq{\tdsparam}{pa-d0}{\def\xcode{-11}}{}
- \IfEq{\tdsparam}{pa+d-}{\def\xcode{10}}{}
- \IfEq{\tdsparam}{pa-d-}{\def\xcode{-10}}{}
- %si commande étoilée := commande autonome
- \IfBooleanTF{#1}%
- {\begin{tikzpicture}[#3]}{}%
- %cadre si booléen true
- \ifboolKV[aidetds]{Cadre}
- {\draw[lightgray] ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;}
- {}
- %restriction de la petite fenêtre
- \clip ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;
- %axe (Ox)
- \draw[thick,->] ({-0.5*\tdslarg},0)--({0.55*\tdslarg},0);
- %1er degré a+ code = 1
- \ifnum\xcode=1
- \schematdsaff{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine}
- \fi
- %1er degré a- code = -1
- \ifnum\xcode=-1
- \schematdsaff*{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine}
- \fi
- %2d degré a+delta+ code = 12
- \ifnum\xcode=12
- \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine]
- \fi
- %2d degré a-delta+ code = -12
- \ifnum\xcode=-12
- \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine]
- \fi
- %2d degré a+delta0 code = 11
- \ifnum\xcode=11
- \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine]
- \fi
- %2d degré a-delta0 code = -11
- \ifnum\xcode=-11
- \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine]
- \fi
- %2d degré a+delta- code = 10
- \ifnum\xcode=10
- \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{0}
- \fi
- %2d degré a-delta- code = -10
- \ifnum\xcode=-10
- \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{0}
- \fi
- \IfBooleanTF{#1}%
- {\end{tikzpicture}}{}%
-}
-
-%pour l'interaction avec tkz-tab
-\defKV[aidetdstkz]{%
- Echelle=\def\tdstkzscale{#1},%
- Decal=\def\tdstkzoffset{#1}
-}
-
-\setKVdefault[aidetdstkz]{%
- Echelle=1,%
- Decal=1.25
-}
-
-\NewDocumentCommand\MiniSchemaSignesTkzTab{ o m O{0.85} O{1.5} }{%
- %#1 = codeaidetikz
- %#2 = numligne
- %#3 = échelle
- %#4 = décalage
- %\shorthandoff{:}\shorthandoff{!} %bizzzzzzzzare
- %\NoAutoSpacing
- \coordinate (ZZZ) at ($(T2#2)!.5!(T2\the\numexpr#2+1\relax)$) ;
- %\shorthandon{:}\shorthandon{!}
- \path (ZZZ.east) + (#4,0) pic[right,scale=#3,every node/.style={scale=#3}] {code={\MiniSchemaSignes[#1]}} ;
-}
-
-%%------RegressionLinéaire
-%calcul des paramètres
-\defKV[coeffreglin]{%
- NomCoeffa=\def\RegLinCoeffa{#1},%
- NomCoeffb=\def\RegLinCoeffb{#1},%
- NomCoeffr=\def\RegLinCoeffr{#1},%
- NomCoeffrd=\def\RegLinCoeffrd{#1},%
- NomXmin=\def\RegLinCoeffXmin{#1},%
- NomXmax=\def\RegLinCoeffXmax{#1}
-}
-
-\setKVdefault[coeffreglin]{%
- NomCoeffa=COEFFa,%
- NomCoeffb=COEFFb,%
- NomCoeffr=COEFFr,%
- NomCoeffrd=COEFFrd,%
- NomXmin=LXmin,%
- NomXmax=LXmax
-}
-
-\newcommand\CalculsRegLin[3][]{%
- \useKVdefault[coeffreglin]%
- \setKV[coeffreglin]{#1}% on paramètres les nouvelles clés et on les simplifie
- %xmin et xmax
- \expandafter\def\csname\RegLinCoeffXmin\endcsname{\fpeval{min(#2)}}
- \expandafter\def\csname\RegLinCoeffXmax\endcsname{\fpeval{max(#2)}}
- %listes des données
- \def\xliste{#2}
- \def\yliste{#3}
- \readlist*\LX{\xliste}
- \readlist*\LY{\yliste}
- %taille des listes
- \def\LNB{\inteval{\LXlen}}
- %somme des LX et des LY OK
- \xdef\LXSomme{0}
- \xdef\LYSomme{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LXSomme{\fpeval{\LXSomme+\LX[\i]}}
- }
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LYSomme{\fpeval{\LYSomme+\LY[\i]}}
- }
- %moyenne des LX et des LY OK
- \xdef\LXmoy{\fpeval{\LXSomme/\LNB}}
- \xdef\LYmoy{\fpeval{\LYSomme/\LNB}}
- %variance des LX et des LY OK
- \xdef\LXvar{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LXvar{\fpeval{\LXvar+(\LX[\i]-\LXmoy)*(\LX[\i]-\LXmoy)}}
- }
- \xdef\LXvar{\fpeval{\LXvar/\LNB}}
- \xdef\LYvar{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LYvar{\fpeval{\LYvar+(\LY[\i]-\LYmoy)*(\LY[\i]-\LYmoy)}}
- }
- \xdef\LYvar{\fpeval{\LYvar/\LNB}}
- %covariance des XY OK
- \xdef\LXYvar{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LXYvar{\fpeval{\LXYvar+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}
- }
- \xdef\LXYvar{\fpeval{\LXYvar/\LNB}}
- %COEFFS OK
- \expandafter\def\csname\RegLinCoeffa\endcsname{\fpeval{\LXYvar/\LXvar}}
- \expandafter\def\csname\RegLinCoeffb\endcsname{\fpeval{\LYmoy-\csname\RegLinCoeffa\endcsname*\LXmoy}}
- \expandafter\def\csname\RegLinCoeffr\endcsname{\fpeval{\LXYvar/sqrt(\LXvar*\LYvar)}}
- \expandafter\def\csname\RegLinCoeffrd\endcsname{\fpeval{\csname\RegLinCoeffr\endcsname*\csname\RegLinCoeffr\endcsname}}
-}
-
-%pour un nuage en TiKz
-\defKV[nuagereglin]{%
- Couleur=\def\RegLinNuageCouleur{#1},%
- Taille=\def\RegLinNuageTaille{#1},
- Ox=\def\RegLinNuageOx{#1},%
- Oy=\def\RegLinNuageOy{#1},%
-}
-
-\setKVdefault[nuagereglin]{%
- Couleur=teal,%
- Taille=2pt,%
- Ox=0,%
- Oy=0
-}
-
-\newcommand\PointsRegLin[3][]{%
- \useKVdefault[nuagereglin]
- \setKV[nuagereglin]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\xliste{#2}
- \def\yliste{#3}
- \readlist*\LX{\xliste}
- \readlist*\LY{\yliste}
- %taille des listes
- \def\LNB{\inteval{\LXlen}}
- \foreach \i in {1,2,...,\LNB} {\filldraw[\RegLinNuageCouleur] ({\LX[\i]-\RegLinNuageOx},{\LY[\i]-\RegLinNuageOy}) circle[radius=\RegLinNuageTaille] ;}
-}
-
-%%------ConversionsBases
-%dec->bin avec blocs de 4 chiffres
-\setKVdefault[CONVDECBIN]{%
- AffBase=true
-}
-\NewDocumentCommand\ConversionDecBin{ s O{} m }{%
- \useKVdefault[CONVDECBIN]
- \setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie
- \def\resbrut{\xintDecToBin{#3}}
- \StrLen{\resbrut}[\nbchiffres]
- \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}
- \IfBooleanTF{#1}
- {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}
- {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}
-}
-
-\setKVdefault[CONVBINHEX]{%
- %trait=0.5pt,%
- AffBase=true,%
- Details=true
-}
-%bourrage de 0 avant
-\ExplSyntaxOn
-\NewExpandableDocumentCommand{\PLstrzeros}{m}
-{
- \int_compare:nT { #1 > 0 }
- {
- 0 \prg_replicate:nn { #1 - 1 } { 0 }
- }
-}
-\ExplSyntaxOff
-
-
-%la conversion complète
-\newcommand\ConversionBinHex[2][]{%
- \useKVdefault[CONVBINHEX]
- \setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\chbrut{#2}
- \StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire
- \xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4
- \xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs
- %on rajoute des zeros si besoin := OK
- \xdef\resinter{\chbrut}
- \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}=
- \ifboolKV[CONVBINHEX]{Details}{%
- \ifnum\nbchiffres<\nbgrp
- \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}
- \xdef\resinter{\PLstrzeros{\nbz}\chbrut}
- \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=
- \fi
- %découpage par blocs et conversion en hexa := OK
- \newcount\cpt
- \cpt0
- \loop\ifnum \cpt<\nbblocs
- \def\iinit{\fpeval{4*\cpt+1}}%
- \def\ifinal{\fpeval{4*(\cpt+1)}}%
- \StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]%
- {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}
- \advance\cpt by 1
- \repeat
- \!=
- }%
- {}
- \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}
-}
-
-%hexa/bin->dec avec écriture polynomiale
-\defKV[CONVTODEC]{%
- BaseDep=\def\basedepart{#1}
-}
-\setKVdefault[CONVTODEC]{%
- BaseDep=2,%
- AffBase=true,%
- Details=true,%
- Zeros=true
-}
-
-\ExplSyntaxOn
-\newcommand\convertbasetobasedix[2]{%
- \int_from_base:nn {#1}{#2}
-}
-\ExplSyntaxOff
-
-\newcommand\ConversionVersDec[2][]{%
- \useKVdefault[CONVTODEC]
- \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\nbdepart{#2}
- \StrLen{\nbdepart}[\nbchiffres]
- \StrChar{\nbdepart}{1}[\chiffre]
- %si on est en base 16
- \xintifboolexpr{\basedepart == 16}%
- {%
- \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
- \ifboolKV[CONVTODEC]{Details}{%
- \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\nbdepart}{\cpt}[\chiffre]
- \ifboolKV[CONVTODEC]{Zeros}%
- {%
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- }
- {
- \ifnum\xintHexToDec{\chiffre} > 0
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
- }%
- {}
- \xintifboolexpr{\basedepart == 2}%
- {%
- \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
- \ifboolKV[CONVTODEC]{Details}{%
- \chiffre\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\nbdepart}{\cpt}[\chiffre]
- \ifboolKV[CONVTODEC]{Zeros}%
- {%
- +\chiffre\times\basedepart^{\puiss}%
- }
- {
- \ifnum\chiffre > 0
- +\chiffre\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
- }%
- {}%
-}
-
-\newcommand\ConversionBaseDix[3][]{%1=options,%2=nb,%3=basedep ??
- \useKVdefault[CONVTODEC]
- \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\NBdepart{#2}
- \def\basedepart{#3}
- \StrLen{\NBdepart}[\nbchiffres]
- \StrChar{\NBdepart}{1}[\chiffre]
- \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
- \ifboolKV[CONVTODEC]{Details}{%
- \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\NBdepart}{\cpt}[\chiffre]
- \ifboolKV[CONVTODEC]{Zeros}%
- {%
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- }
- {
- \ifnum\xintHexToDec{\chiffre} > 0
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }%
- {}%
- \num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
-}
-
-%%------MainLevée TikZ
-\tikzset{%
- mainlevee/.style args={#1et#2}{decorate,decoration={random steps,segment length=#1,amplitude=#2}},
- mainlevee/.default={5mm et 0.6pt}
-}
-
-%%------STATS2VAR
-%variables directement dans tikzpicture
-\tikzset{%
- Ox/.store in=\axexOx,Ox/.default=0,Ox=0,%essai
- Oy/.store in=\axeyOy,Oy/.default=0,Oy=0,%essai
- xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
- xmax/.store in=\xmax,xmax/.default=5,xmax=5,
- ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
- ymax/.store in=\ymax,ymax/.default=5,ymax=5,
- xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
- xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
- ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
- ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
- xunit/.store in=\xunit,xunit/.default=1,xunit=1,
- yunit/.store in=\yunit,yunit/.default=1,yunit=1
-}
-
-%style point croix
-\tikzset{pics/PLdotcross/.style args={#1/#2}{
- code={
- \draw[line width={0.5*#1},rotate=#2] (-#1,0) -- (#1,0);
- \draw[line width={0.5*#1},rotate=#2] (0,-#1) -- (0, #1);
- }
- },
- pics/PLdotcross/.default={4pt/0}
-}
-
-%affichage d'un label en radians
-\NewDocumentCommand\AffAngleRadian{ s m }{%étoilée en dfrac
- \IfStrEq{#2}{0}%cas où l'argument vaut 0
- {\def\restmp{0}}%
- {%
- \StrDel{#2}{*}[\restmpsansmoins]%
- \StrSubstitute{\restmpsansmoins}{pi}{\pi}[\restmppi]%
- \IfSubStr{#2}{/}%
- {%
- \StrCut{\restmppi}{/}\tmpnum\tmpdenom%
- \IfSubStr{\tmpnum}{-}
- {%
- \StrDel{\tmpnum}{-}[\restmppinum]%
- \IfBooleanTF{#1}
- {\def\restmp{-\dfrac{\restmppinum}{\tmpdenom}}}
- {\def\restmp{-\frac{\restmppinum}{\tmpdenom}}}
- }%
- {%
- \IfBooleanTF{#1}
- {\def\restmp{\dfrac{\tmpnum}{\tmpdenom}}}
- {\def\restmp{\frac{\tmpnum}{\tmpdenom}}}
- }%
- }%
- {%
- \def\restmp{\restmppi}%
- }%
- }%
- \restmp%
-}
-
-%axeOx
-\defKV[PLaxextkz]{%
- Epaisseur=\def\axexwidth{#1},%
- Police=\def\axexfont{#1},%
- HautGrad=\def\axextickwidth{#1},%
- PosGrad=\def\axexposlabel{#1}
-}
-
-\setKVdefault[PLaxextkz]{%
- Epaisseur=1pt,%
- Police=\normalsize\normalfont,%
- PosGrad=below,%
- HautGrad=4pt,%
- AffGrad=true,%
- AffOrigine=true,%
- Annee=false,%
- Dfrac=false,%
- Trigo=false
-}
-
-\DeclareDocumentCommand\AxexTikz{ O{} m }{%
- \useKVdefault[PLaxextkz]
- \setKV[PLaxextkz]{#1}% on paramètres les nouvelles clés et on les simplifie
- %récupération des tickwidth H/B
- \IfSubStr{\axextickwidth}{/}
- {\StrCut{\axextickwidth}{/}{\axextickwidthA}{\axextickwidthB}}
- {\def\axextickwidthA{\axextickwidth}\def\axextickwidthB{\axextickwidth}}
- %en fonction de Trigo ou non
- \ifboolKV[PLaxextkz]{Trigo}
- {
- \foreach \x in {#2}{%
- \draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
- \ifboolKV[PLaxextkz]{AffGrad}%on affiche les graduations
- {%
- node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{Dfrac}{$\AffAngleRadian*{\x}$}{$\AffAngleRadian{\x}$}}
- }%
- {}%
- ;}
- }
- {
- \foreach \x in {#2}{%
- \draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
- \ifboolKV[PLaxextkz]{AffGrad}%on affiche les graduations
- {%
- \ifboolKV[PLaxextkz]{AffOrigine}%si on demande d'afficher l'origine
- {node[\axexposlabel,font=\axexfont]
- {\ifboolKV[PLaxextkz]{Annee}%
- {\num[group-digits=none]{\x}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
- }
- }
- {\xintifboolexpr{\x==\axexOx}{}{node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{Annee}%
- {\num[group-digits=none]{\x}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
- }
- }
- }
- }
- {}
- ;}
- }
-
-}
-
-%axeOy
-\defKV[PLaxeytkz]{%
- Epaisseur=\def\axeywidth{#1},%
- Police=\def\axeyfont{#1},%
- HautGrad=\def\axeytickwidth{#1},%
- PosGrad=\def\axeyposlabel{#1}
-}
-
-\setKVdefault[PLaxeytkz]{%
- Epaisseur=1pt,%
- Police=\normalsize\normalfont,%
- PosGrad=left,%
- HautGrad=4pt,%
- AffGrad=true,%
- AffOrigine=true,%
- Annee=false
-}
-
-\DeclareDocumentCommand\AxeyTikz{ O{} m }{%
- \useKVdefault[PLaxeytkz]
- \setKV[PLaxeytkz]{#1}% on paramètres les nouvelles clés et on les simplifie
- \IfSubStr{\axeytickwidth}{/}
- {\StrCut{\axeytickwidth}{/}{\axeytickwidthA}{\axeytickwidthB}}
- {\def\axeytickwidthA{\axeytickwidth}\def\axeytickwidthB{\axeytickwidth}}
- \foreach \y in {#2}{%
- \draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy})%
- \ifboolKV[PLaxeytkz]{AffGrad}%on affiche les graduations
- {%
- \ifboolKV[PLaxeytkz]{AffOrigine}%si on demande d'afficher l'origine
- {node[\axeyposlabel,font=\axeyfont]
- {\ifboolKV[PLaxeytkz]{Annee}%
- {\num[group-digits=none]{\y}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\y}}%
- }
- }
- {\xintifboolexpr{\y==\axeyOy}{}{node[\axeyposlabel,font=\axeyfont] {\ifboolKV[PLaxeytkz]{Annee}%
- {\num[group-digits=none]{\y}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\y}}%
- }
- }
- }
- }
- {}
- ;}
-}
-
-%axes
-\defKV[PLaxestkz]{%
- Epaisseur=\def\axeswidth{#1},%
- Police=\def\axesfont{#1},%
- Labelx=\def\axeslabelx{#1},%
- Labely=\def\axeslabely{#1},%
- PosLabelx=\def\axesposlabelx{#1},%
- PosLabely=\def\axesposlabely{#1},%
- EchelleFleche=\def\axesechellefleche{#1},%
- TypeFleche=\def\axestypefleche{#1},%
- AffLabel=\def\axesafflabel{#1},%
- ElargirOx=\def\axeselargx{#1},%
- ElargirOy=\def\axeselargy{#1}
-}
-
-\setKVdefault[PLaxestkz]{%
- Epaisseur=1pt,%
- Police=\normalsize\normalfont,%
- Labelx=$x$,%
- Labely=$y$,%
- AffLabel=z,%
- PosLabelx=right,%
- PosLabely=above,%
- EchelleFleche=1,%
- TypeFleche=latex,%
- ElargirOx=0/0.05,%
- ElargirOy=0/0.05
-}
-
-\DeclareDocumentCommand\AxesTikz{ O{} }{%
- \useKVdefault[PLaxestkz]
- \setKV[PLaxestkz]{#1}%
- %les petits élargissements
- \IfSubStr{\axeselargx}{/}
- {\StrCut{\axeselargx}{/}{\axeselargxG}{\axeselargxD}}
- {\def\axeselargxG{\axeselargx}\def\axeselargxD{\axeselargx}}
- \def\axesenlargxG{\fpeval{\axeselargxG*(\xmax-\xmin)}}
- \def\axesenlargxD{\fpeval{\axeselargxD*(\xmax-\xmin)}}
- \IfSubStr{\axeselargy}{/}
- {\StrCut{\axeselargy}{/}{\axeselargyG}{\axeselargyD}}
- {\def\axeselargyG{\axeselargy}\def\axeselargyD{\axeselargy}}
- \def\axesenlargyG{\fpeval{\axeselargyG*(\ymax-\ymin)}}
- \def\axesenlargyD{\fpeval{\axeselargyD*(\ymax-\ymin)}}
- %on affiche les deux axes
- \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] ({\xmin-\axexOx-\axesenlargxG},0) -- ({\xmax-\axexOx+\axesenlargxD},0) ;
- \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] (0,{\ymin-\axeyOy-\axesenlargyG}) -- (0,{\ymax-\axeyOy++\axesenlargyD}) ;
- %les labels éventuels
- \IfSubStr{\axesafflabel}{x}%
- {\draw ({\xmax-\axexOx},0) node[\axesposlabelx,font=\axesfont] {\axeslabelx} ;}
- {}
- \IfSubStr{\axesafflabel}{y}%
- {\draw (0,{\ymax-\axeyOy}) node[\axesposlabely,font=\axesfont] {\axeslabely} ;}
- {}
-}
-
-%fenêtre clippée
-\newcommand\FenetreTikz{%
- \clip ({\xmin-\axexOx},{\ymin-\axeyOy}) rectangle ({\xmax-\axexOx},{\ymax-\axeyOy}) ;
-}
-
-%origine
-\defKV[PLaxesorig]{%
- Police=\def\axesorfont{#1},%
- Pos=\def\axesorpos{#1},%
- Decal=\def\axesordecal{#1},%
- Valeur=\def\axesorval{#1}
-}
-
-\setKVdefault[PLaxesorig]{%
- Police=\normalsize\normalfont,%
- Pos={below left},%
- Decal=2pt,%
- Valeur=0
-}
-
-\DeclareDocumentCommand\OrigineTikz{ O{} }{%
- \useKVdefault[PLaxesorig]%
- \setKV[PLaxesorig]{#1}%
- \draw (0,0) node[\axesorpos=\axesordecal,font=\axesorfont] {\axesorval} ;
-}
-
-%grilles
-\setKVdefault[PLgrillestkz]{%
- Affp=true,%
- Affs=true
-}
-
-\DeclareDocumentCommand\GrilleTikz{ O{} O{thin,lightgray} O{ultra thin,lightgray} }{%
- \useKVdefault[PLgrillestkz]
- \setKV[PLgrillestkz]{#1}%
- \ifboolKV[PLgrillestkz]{Affs}
- {\draw[xstep=\xgrilles,ystep=\ygrilles,#3] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
- {}
- \ifboolKV[PLgrillestkz]{Affp}
- {\draw[xstep=\xgrille,ystep=\ygrille,#2] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
- {}
-}
-
-%point(s) avec changement origines
-\defKV[PLpts]{%
- Taille=\def\ptstaille{#1},%
- Couleur=\def\ptscouleur{#1},%
- Style=\def\ptsstyle{#1}
-}
-
-\setKVdefault[PLpts]{%
- Taille=2pt,%
- Couleur=blue,%
- Style=o
-}
-
-\newcommand\PLnuagepoints[2][]{%
- \useKVdefault[PLpts]
- \setKV[PLpts]{#1}%
- \setsepchar{§}%
- \readlist\listepointsaffiches{#2}
- \foreachitem\point\in\listepointsaffiches{%
- \StrBetween{\point}{(}{,}[\XPT]
- \StrBetween{\point}{,}{)}[\YPT]
- \IfStrEq{\ptsstyle}{o}%
- {\filldraw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) circle[radius=\ptstaille] ;}
- {}
- \IfStrEq{\ptsstyle}{x}%
- {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;}
- {}
- \IfStrEq{\ptsstyle}{+}%
- {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;}
- {}
- }
-}
-
-\newcommand\NuagePointsTikz[3][]{%
- \useKVdefault[PLpts]
- \setKV[PLpts]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\xliste{#2}
- \def\yliste{#3}
- \readlist*\LX{\xliste}
- \readlist*\LY{\yliste}
- %taille des listes
- \def\LNB{\inteval{\LXlen}}
- \foreach \i in {1,2,...,\LNB} {
- \IfStrEq{\ptsstyle}{o}%
- {
- \IfSubStr{\ptscouleur}{/}
- {\StrCut{\ptscouleur}{/}{\ptscouleurA}{\ptscouleurB}\draw[thick,\ptscouleurA,fill=\ptscouleurB] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;}
- {\draw[\ptscouleur,fill=\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;}
- }
- {}
- \IfStrEq{\ptsstyle}{x}%
- {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;}
- {}
- \IfStrEq{\ptsstyle}{+}%
- {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;}
- {}
- }
-}
-
-\defKV[PLptmoy]{%
- Police=\def\ptmoyfont{#1},%
- Taille=\def\ptmoytaille{#1},%
- Couleur=\def\ptmoycouleur{#1},%
- Style=\def\ptmoystyle{#1},%
- xg=\def\ptmoyx{#1},%
- yg=\def\ptmoyy{#1},%
- Nom=\def\ptmoynom{#1},%
- Pos=\def\ptmoypos{#1},%
- Decal=\def\ptmoydecal{#1}%
-}
-
-\setKVdefault[PLptmoy]{%
- Police=\normalsize\normalfont,%
- Taille=4pt,%
- Couleur=red,%
- Style=x,%
- xg=\LXmoy,%
- yg=\LYmoy,%
- Nom=G,%
- Pos=above,%
- Decal=0pt,%
- AffNom=true
-}
-
-\newcommand\PointMoyenTikz[1][]{%
- \useKVdefault[PLptmoy]
- \setKV[PLptmoy]{#1}% on paramètres les nouvelles clés et on les simplifie
- \IfStrEq{\ptmoystyle}{o}%
- {
- \IfSubStr{\ptmoycouleur}{/}
- {\StrCut{\ptmoycouleur}{/}{\ptmoycouleurA}{\ptmoycouleurB}\draw[thick,\ptmoycouleurA,fill=\ptmoycouleurB] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;}
- {\draw[\ptmoycouleur,fill=\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;}
- }
- {}
- \IfStrEq{\ptmoystyle}{x}%
- {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/45} ;}
- {}
- \IfStrEq{\ptmoystyle}{+}%
- {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/0} ;}
- {}
- \ifboolKV[PLptmoy]{AffNom}
- {\draw ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) node[\ptmoypos={\ptmoytaille+\ptmoydecal},font=\ptmoyfont] {\ptmoynom} ;}
- {}
-
-}
-
-%courbe ?
-\newcommand\CourbeTikz[3][]{%
- \setsepchar{:}%
- \readlist\PLdomaine{#3}
- \itemtomacro\PLdomaine[1]\PLDm
- \itemtomacro\PLdomaine[2]\PLDM
- \saveexpandmode\noexpandarg
- \StrSubstitute{#2}{\x}{(\x+\axexOx)}[\fctdecx]
- \restoreexpandmode % restore the previous mode
- \draw[#1] plot[domain={\PLDm-\axexOx}:{\PLDM-\axexOx}] (\x,{\fctdecx-\axeyOy}) ;
-}
-
-\setKVdefault[PLsimplewindow]{%
- Axes=true,%
- Grille=true,%
-}
-
-\DeclareDocumentCommand\FenetreSimpleTikz{ O{} D(){} D<>{} m D<>{} m }{%
- \useKVdefault[PLsimplewindow]%
- \setKV[PLsimplewindow]{#1}% on paramètres les nouvelles clés et on les simplifie
- \ifboolKV[PLsimplewindow]{Grille}%
- {\GrilleTikz}%
- {}%
- \ifboolKV[PLsimplewindow]{Axes}%
- {\AxesTikz[#2]%
- \AxexTikz[#3]{#4}
- \AxeyTikz[#5]{#6}}%
- {}%
-}
-
-\NewDocumentEnvironment{StatsTikz}{ O{} }
-{%
- \begin{tikzpicture}[#1]
- }%
- {%
- \end{tikzpicture}%
-}
-
-%%------BOITES MOUSTACHES
-\defKV[boiteamoustaches]{%
- Couleur=\def\BaMCouleur{#1},%
- Elevation=\def\BaMElevation{#1},%
- Hauteur=\def\BaMHauteur{#1},%
- Moyenne=\def\BaMMoyenne{#1},%
- Epaisseur=\def\BaMEpaisseur{#1},%
- Remplir=\def\BaMRemplissage{#1}
-}
-
-\setKVdefault[boiteamoustaches]{%
- Couleur=black,%
- Elevation=1,%
- Hauteur=1,%
- AffMoyenne=false,%
- Epaisseur=thick,%
- Pointilles=false,%
- Valeurs=false,%
- Remplir=white
-}
-
-\defKV[boiteamoustachesaxe]{%
- Min=\def\BaMAxeMin{#1},%
- Max=\def\BaMAxeMax{#1},%
- Elargir=\def\BaMAxeElarg{#1},%
- Epaisseur=\def\BaMAxeEpaisseur{#1},%
- Valeurs=\def\BaMAxeValeurs{#1}
-}
-
-\setKVdefault[boiteamoustachesaxe]{%
- Elargir=0.05,%
- Epaisseur=thick,%
- AffValeurs=false
-}
-
-\newcommand\BoiteMoustachesAxe[1][]{
- \useKVdefault[boiteamoustachesaxe]
- \setKV[boiteamoustachesaxe]{#1}
- \def\BaMaxelargeur{\fpeval{\BaMAxeMax-\BaMAxeMin}}
- \def\BaMaxexmin{\fpeval{\BaMAxeMin-\BaMAxeElarg*\BaMaxelargeur}}
- \def\BaMaxexmax{\fpeval{\BaMAxeMax+\BaMAxeElarg*\BaMaxelargeur}}
- \draw[\BaMAxeEpaisseur,->,>=latex] (\BaMaxexmin,0) -- (\BaMaxexmax,0) ;
- \ifboolKV[boiteamoustachesaxe]{AffValeurs}
- {\foreach \x in \BaMAxeValeurs \draw[\BaMAxeEpaisseur] (\x,3pt)--(\x,-3pt) node[below=3pt] {\num{\x}} ;}
- {}
-}
-
-\newcommand\BoiteMoustaches[2][]{
- \useKVdefault[boiteamoustaches]
- \setKV[boiteamoustaches]{#1}
- \setsepchar[.]{/}%
- \readlist*\BaMListeparams{#2}%
- \itemtomacro\BaMListeparams[1]\BaMmin%
- \itemtomacro\BaMListeparams[2]\BaMqu%
- \itemtomacro\BaMListeparams[3]\BaMmed%
- \itemtomacro\BaMListeparams[4]\BaMqt%
- \itemtomacro\BaMListeparams[5]\BaMmax%
- \draw[draw,\BaMEpaisseur,\BaMCouleur,fill=\BaMRemplissage] ({\BaMqu},{\BaMElevation-0.5*\BaMHauteur}) rectangle ({\BaMqt},{\BaMElevation+0.5*\BaMHauteur}) ;
- \draw[\BaMEpaisseur,\BaMCouleur] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmin,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmax,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmax,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmed,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmed,{\BaMElevation+0.5*\BaMHauteur});
- \draw[\BaMEpaisseur,\BaMCouleur] ({\BaMmin},{\BaMElevation})--({\BaMqu},{\BaMElevation}) ({\BaMqt},{\BaMElevation})--({\BaMmax},{\BaMElevation}) ;
- \ifboolKV[boiteamoustaches]{AffMoyenne}
- {\filldraw[\BaMCouleur] ({\BaMMoyenne},{\BaMElevation}) circle[radius=2.5pt] ;}
- {}
- \ifboolKV[boiteamoustaches]{Pointilles}
- {
- \draw[\BaMEpaisseur,densely dashed] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmin,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMqu,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqu,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMmed,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmed,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMqt,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqt,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMmax,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmax,0) ;
- }
- {}
- \ifboolKV[boiteamoustaches]{Valeurs}
- {
- \filldraw (\BaMmin,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmin}} ;
- \filldraw (\BaMqu,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqu}} ;
- \filldraw (\BaMmed,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmed}} ;
- \filldraw (\BaMqt,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqt}} ;
- \filldraw (\BaMmax,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmax}} ;
- }
- {}
-}
-
-%%------SUDOMATHS
-\defKV[PLTIKZSUDOM]{%
- CouleurTexte=\def\PLSMcoultexte{#1},%
- Epaisseur=\def\PLSMepf{#1},%
- Epaisseurg=\def\PLSMepg{#1},%
- Unite=\def\PLSMunite{#1},%
- CouleurCase=\def\PLSMcoulcase{#1},%
- NbCol=\def\PLSMnbcol{#1},%
- NbSubCol=\def\PLSMnbsubcol{#1},%
- NbLig=\def\PLSMnblig{#1},%
- NbSubLig=\def\PLSMnbsublig{#1},%
- Police=\def\PLSMfonte{#1},%
- PoliceLeg=\def\PLSMfonteleg{#1},%
- ListeLegV=\def\PLSMlistelegv{#1},%
- ListeLegH=\def\PLSMlistelegh{#1},%
- DecalLegende=\def\PLSMdecalleg{#1}
-}
-
-\setKVdefault[PLTIKZSUDOM]{%
- Epaisseurg=1.5pt,%
- Epaisseur=0.5pt,%
- Unite=1cm,%
- CouleurCase=LightBlue!50,%
- CouleurTexte=blue,%
- NbCol=9,%
- NbSubCol=3,%
- NbLig=9,%
- NbSubLig=3,
- Police=\normalfont\normalsize,%
- PoliceLeg=\normalfont\sffamily,%
- Legendes=true,%
- ListeLegV=ABCDEFGHIJKLMNOPQRSTUVWXYZ,%
- ListeLegH=abcdefghijklmnopqrstuvwxyz,%
- DecalLegende=0.45
-}
-
-\NewDocumentEnvironment{EnvSudoMaths}{ O{} m }
- {
- \useKVdefault[PLTIKZSUDOM]
- \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie
- %calculs intermédiaires
- \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}}
- \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}}
- %lecture liste
- \IfEq{#2}{}{}%
- {%
- \setsepchar[.]{§./}%
- \readlist*\SPGrilleSudoMaths{#2}%
- }
- %débt envtik
- \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter]
- %cases
- \IfEq{#2}{}{}%
- {%
- \foreach \i in {1,2,...,\PLSMnblig}{%
- \foreach \j in {1,2,...,\PLSMnbcol}{%
- \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase
- \IfSubStr{\SMcase}{*}%si on veut colorier via *
- {%
- \StrDel{\SMcase}{*}[\SMcaseb]%
- \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;%
- }
- {%
- \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;%
- }
- }
- }%
- }
- %grilles
- \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- %légendes
- \ifboolKV[PLTIKZSUDOM]{Legendes}
- {%
- \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;}
- \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;}
- }{}
- }
- {
- \end{tikzpicture}
- }
-
-\NewDocumentCommand\SudoMaths{ O{} m }{%
- \useKVdefault[PLTIKZSUDOM]
- \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie
- %calculs intermédiaires
- \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}}
- \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}}
- %lecture liste
- \IfEq{#2}{}{}%
- {%
- \setsepchar[.]{§./}%
- \readlist*\SPGrilleSudoMaths{#2}%
- }
- %débt envtik
- \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter]
- %cases
- \IfEq{#2}{}{}%
- {%
- \foreach \i in {1,2,...,\PLSMnblig}{%
- \foreach \j in {1,2,...,\PLSMnbcol}{%
- \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase
- \IfSubStr{\SMcase}{*}%si on veut colorier via *
- {%
- \StrDel{\SMcase}{*}[\SMcaseb]%
- \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;%
- }
- {%
- \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;%
- }
- }
- }%
- }
- %grilles
- \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- %légendes
- \ifboolKV[PLTIKZSUDOM]{Legendes}
- {%
- \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;}
- \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;}
- }{}
- \end{tikzpicture}
-}
-
-%%------LOISPROBAS
-%calculs "simples"
-\newcommand\CalcBinomP[3]{%npk
- \xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}}
-}
-\newcommand\CalcBinomC[4]{%npab
- \def\BorneInf{#3}\def\BorneSup{#4}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}
-}
-\newcommand\CalcGeomP[2]{%pk
- \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}
-}
-\newcommand\CalcGeomC[3]{%pab
- \def\BorneInf{#2}\def\BorneSup{#3}
- \ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{1}}
- {}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}
- {}
- \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}
-}
-\newcommand\CalcHypergeomP[4]{%Nnmk
- \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}
-}
-\newcommand\CalcHypergeomC[5]{%Nnmab
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}
-}
-\newcommand\CalcPoissP[2]{%lk
- \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}
-}
-\newcommand\CalcPoissC[3]{%lab
- \def\BorneInf{#2}\def\BorneSup{#3}
- \ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{10*#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}
-}
-%utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution
-\xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 :=
-0.0705230784,0.0422820123,0.0092705272,0.0001520143,0.0002765672,0.0000430638;
-\xintdeffloatvar rac2inv := sqrt(2)/2 ;
-\xintdeffloatfunc erfc(x) := % uniquement pour x positif
-((((((a_6*x+a_5)*x+a_4)*x+a_3)*x+a_2)*x+a_1)*x+1)**-16 ; % fin de définition de erfc(x)
-\xintdeffloatfunc Phi(z) := (z>=0)?{1 - 0.5 * erfc(rac2inv * z)}{0.5 * erfc(-rac2inv * z)};
-
-\newcommand\CalcNormC[4]{%msab
- %def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#3}\def\BorneSup{#4}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{#4-10*#2}}
- {}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#3+10*#2}}
- {}
- \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}
-}
-%calculs "simples" fiabilite
-\newcommand\CalcExpoC[3]{%lab
- \def\BorneInf{#2}\def\BorneSup{#3}
- \ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{100/#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}
-}
-
-%calculs formatés
-\NewDocumentCommand{\BinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
- }
-}
-
-\NewDocumentCommand{\BinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b
- \def\BorneInf{#5}\def\BorneSup{#6}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\GeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
- }
-}
-
-\NewDocumentCommand{\GeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{1}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\HypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
- }
-}
-
-\NewDocumentCommand{\HypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b
- \def\BorneInf{#6}\def\BorneSup{#7}
- \ifthenelse{\equal{#6}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#7}{*}}%
- {\def\BorneSup{#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\PoissonP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
- }
-}
-
-\NewDocumentCommand{\PoissonC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{10*#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\NormaleC}{ s O{3} m m m m }{%
- %*=ing,2=prec,3=mu,4=sigma,5=a,6=b
- %def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#5}\def\BorneSup{#6}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{#6-10*#4}}
- {}
- \ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#5+10*#4}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
- }
-}
-
-\NewDocumentCommand{\ExpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{100/#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}}
- }
-}
-
-%%------CONVFROMDEC
-\newcommand\PLnoeud[2]{\tikz[remember picture,baseline=(#1.base)]\node[shape=rectangle,inner sep=0pt](#1){#2};}
-\ExplSyntaxOn
-\newcommand\convertbasedixtobase[2]{%
- \int_to_Base:nn {#1}{#2}
-}
-\ExplSyntaxOff
-
-\defKV[convfromten]{%
- Couleur=\def\PLConvCouleur{#1},%
- DecalH=\def\PLConvDecalH{#1},%
- DecalV=\def\PLConvDecalV{#1},%
- Noeud=\def\PLConvNoeud{#1}
-}
-
-\setKVdefault[convfromten]{%
- Couleur=red,%
- DecalH=2pt,%
- DecalV=3pt,%
- Rect=true,%
- Noeud=EEE,%
- CouleurRes=false
-}
-
-\newcommand\ConversionDepuisBaseDix[3][]{%
- \useKVdefault[convfromten]%
- \setKV[convfromten]{#1}%
- \xdef\ValRes{\xintDecToHex{#2}}%
- \xdef\ValA{#2}\xdef\ValB{#3}%
- \xdef\ValTMP{#2}%
- \xdef\ValMU{\inteval{#3-1}}%
- \ensuremath{%
- \left\lbrace\begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
- %1ere division
- \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}
- \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud1}{\num{\ValR}}%
- \xdef\ValTMP{\ValQ}%
- \whiledo {\ValTMP > \ValMU}%
- {%
- \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
- \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\num{\ValR}
- \xdef\ValTMP{\ValQ}%
- }
- %dernière
- \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
- \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}
- \end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{CouleurRes}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}%
- \ifboolKV[convfromten]{Rect}%
- {%
- \IfSubStr{\PLConvDecalH}{/}%
- {\StrCut{\PLConvDecalH}{/}{\PLConvDecalHg}{\PLConvDecalHd}}%
- {\def\PLConvDecalHg{\PLConvDecalH}\def\PLConvDecalHd{\PLConvDecalH}}%
- \begin{tikzpicture}
- \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick] ($(\PLConvNoeud1.north west)+(-\PLConvDecalHg,\PLConvDecalV)$) rectangle ($(\PLConvNoeud2.south east)+(\PLConvDecalHd,-\PLConvDecalV)$) ;
- \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick,->,>=latex] ($(\PLConvNoeud2.east)+(\PLConvDecalHd,0)$)--++(0,{0.75\baselineskip}) ;
- \end{tikzpicture}%
- }{}%
-}
-
-%%------ARBRESPROBAS
-\defKV[PLTIKZARBRE]{%
- Unite=\def\PLAPunite{#1},%
- EspaceNiveau=\def\PLAPespniv{#1},%
- EspaceFeuille=\def\PLAPespfeuille{#1},%
- Type=\def\PLAPtype{#1},%
- Police=\def\PLAPfont{#1},%
- PoliceProbas=\def\PLAPfontproba{#1},%
- StyleTrait=\def\PLAPtypetrait{#1},%
- EpaisseurTrait=\def\PLAPeptrait{#1}
-}
-
-\setKVdefault[PLTIKZARBRE]{%
- Unite=1cm,%
- EspaceNiveau=3.25,%
- EspaceFeuille=1,%
- Type=2x2,%
- Police=\normalfont\normalsize,%
- PoliceProbas=\normalfont\small,%
- InclineProbas=true,%
- Fleche=false,%
- StyleTrait={},%
- EpaisseurTrait=semithick
-}
-
-\NewDocumentCommand\ArbreProbasTikz{ O{} m }{%1=options,2=libellés
- \useKVdefault[PLTIKZARBRE]%
- \setKV[PLTIKZARBRE]{#1}%
- \setsepchar[.]{,./}%
- \readlist*\PLARBREDONNES{#2}%
- \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite]
- %styles
- \tikzstyle{noeud} = [font=\PLAPfont]
- \tikzstyle{probas}= [font=\PLAPfontproba]
- \ifboolKV[PLTIKZARBRE]{InclineProbas}
- {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]}
- {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]}
- \ifboolKV[PLTIKZARBRE]{Fleche}
- {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]}
- {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]}
- %arbre2x2
- \IfEq{\PLAPtype}{2x2}
- {%
- \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- }{}
- %arbre3x2
- \IfEq{\PLAPtype}{3x2}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
- %branches
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \ifstrempty{\PLARBREDONNES[7,2]}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \ifstrempty{\PLARBREDONNES[8,2]}
- {\draw[PLfleche] (A13)--(A25) ;}
- {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \ifstrempty{\PLARBREDONNES[9,2]}
- {\draw[PLfleche] (A13)--(A26) ;}
- {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{2x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- %branches
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \ifstrempty{\PLARBREDONNES[7,2]}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \ifstrempty{\PLARBREDONNES[8,2]}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{3x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
- \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]};
- \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]};
- %branches
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[9,2]}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- %N2
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \ifstrempty{\PLARBREDONNES[7,2]}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \ifstrempty{\PLARBREDONNES[8,2]}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \ifstrempty{\PLARBREDONNES[10,2]}
- {\draw[PLfleche] (A13)--(A27) ;}
- {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;}
- \ifstrempty{\PLARBREDONNES[11,2]}
- {\draw[PLfleche] (A13)--(A28) ;}
- {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;}
- \ifstrempty{\PLARBREDONNES[12,2]}
- {\draw[PLfleche] (A13)--(A29) ;}
- {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;}
- }{}
- \end{tikzpicture}
-}
-
-\NewDocumentEnvironment{EnvArbreProbasTikz}{ O{} m }%1=options,2=libellés
-{
- \useKVdefault[PLTIKZARBRE]
- \setKV[PLTIKZARBRE]{#1}
- \setsepchar[.]{,./}%
- \readlist*\PLARBREDONNES{#2}
- \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite]
- %styles
- \tikzstyle{noeud} = [font=\PLAPfont]
- \tikzstyle{probas}= [font=\PLAPfontproba]
- \ifboolKV[PLTIKZARBRE]{InclineProbas}
- {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]}
- {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]}
- \ifboolKV[PLTIKZARBRE]{Fleche}
- {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]}
- {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]}
- %arbre2x2
- \IfEq{\PLAPtype}{2x2}
- {%
- \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- }{}
- %arbre3x2
- \IfEq{\PLAPtype}{3x2}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
- %branches
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \ifstrempty{\PLARBREDONNES[7,2]}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \ifstrempty{\PLARBREDONNES[8,2]}
- {\draw[PLfleche] (A13)--(A25) ;}
- {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \ifstrempty{\PLARBREDONNES[9,2]}
- {\draw[PLfleche] (A13)--(A26) ;}
- {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{2x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- %branches
- \ifstrempty{\PLARBREDONNES[1,2]}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \ifstrempty{\PLARBREDONNES[7,2]}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \ifstrempty{\PLARBREDONNES[8,2]}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{3x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
- \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]};
- \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]};
- %branches
- \ifstrempty{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \ifstrempty{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \ifstrempty{\PLARBREDONNES[9,2]}{}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- %N2
- \ifstrempty{\PLARBREDONNES[2,2]}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \ifstrempty{\PLARBREDONNES[3,2]}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \ifstrempty{\PLARBREDONNES[4,2]}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \ifstrempty{\PLARBREDONNES[6,2]}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \ifstrempty{\PLARBREDONNES[7,2]}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \ifstrempty{\PLARBREDONNES[8,2]}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \ifstrempty{\PLARBREDONNES[10,2]}
- {\draw[PLfleche] (A13)--(A27) ;}
- {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;}
- \ifstrempty{\PLARBREDONNES[11,2]}
- {\draw[PLfleche] (A13)--(A28) ;}
- {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;}
- \ifstrempty{\PLARBREDONNES[12,2]}
- {\draw[PLfleche] (A13)--(A29) ;}
- {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;}
- }{}
- }
- {
- \end{tikzpicture}
-}
-
-%%------SCHEMASPROBAS
-%densites utiles
-\def\densnorm#1{1/(sqrt(2*pi))*exp(-0.5*(#1*#1))}
-\def\densexpo#1{exp(-#1)}
-
-\defKV[GRPHPROBCONTINUES]{%
- CouleurAire=\def\GRPHPROBcoulsurf{#1},%
- CouleurCourbe=\def\GRPHPROBcoulcbe{#1},%
- Largeur=\def\GRPHPROBlarg{#1},%
- Hauteur=\def\GRPHPROBhauteur{#1}
-}
-
-\setKVdefault[GRPHPROBCONTINUES]{%
- CouleurAire=LightGray,%
- CouleurCourbe=red,%
- Largeur=2,%
- Hauteur=1,%
- AfficheM=true,%
- AfficheCadre=true
-}
-
-\NewDocumentCommand\LoiNormaleGraphe{ O{} D<>{} m m m m }{%1=options,2=optionstikz,3=m,4=s,5=a,6=b
- %simplekv
- \useKVdefault[GRPHPROBCONTINUES]%
- \setKV[GRPHPROBCONTINUES]{#1}%
- %unites
- \def\UNITEX{\fpeval{\GRPHPROBlarg/8}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/0.5}}%
- %bornes
- \def\BorneInf{\fpeval{(#5-#3)/#4}}\def\BorneSup{\fpeval{(#6-#3)/#4}}%
- \ifthenelse{\equal{#5}{*}}{\def\BorneInf{-4}}{}%
- \ifthenelse{\equal{#6}{*}}{\def\BorneSup{4}}{}%
- %tikzpicture
- \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2]
- \ifboolKV[GRPHPROBCONTINUES]{AfficheM}%
- {\draw (0,-0.0375) node[font=\tiny,scale={2*\UNITEX}] {#3} ;}
- {}
- \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}%
- {\draw[Gray] (-4,-0.075) rectangle (4,0.425) ;}
- {}
- \clip (-4,-0.075) rectangle (4,0.425) ;
- \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{\densnorm{\x}}) -- ({\BorneSup},0) -- cycle;
- \draw[thick,->,>=latex] (-4,0)--(4,0) ;
- \draw[thick,densely dotted] (0,0)--(0,0.39894) ;
- \draw[thick,domain=-4:4,samples=100,\GRPHPROBcoulcbe] plot (\x,{\densnorm{\x}}) ;
- \end{tikzpicture}
-}
-
-\NewDocumentCommand\LoiExpoGraphe{ O{} D<>{} m m m }{%1=options,2=optionstikz,3=l,4=a,5=b
- %simplekv
- \useKVdefault[GRPHPROBCONTINUES]%
- \setKV[GRPHPROBCONTINUES]{#1}%
- %unites
- \def\UNITEX{\fpeval{\GRPHPROBlarg/4}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/1}}%
- \def\MOYENNE{\fpeval{trunc(1/#3,0)}}%
- %bornes
- \def\BorneInf{\fpeval{#3*#4}}\def\BorneSup{\fpeval{#3*#5}}%
- \ifthenelse{\equal{#4}{*}}{\def\BorneInf{0}}{}%
- \ifthenelse{\equal{#5}{*}}{\def\BorneSup{4}}{}%
- %tikzpicture
- \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2]
- \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}%
- {\draw[Gray] (-0.2,-0.15) rectangle (3.8,0.85) ;}
- {}
- \clip (-0.2,-0.15) rectangle (3.8,0.85) ;
- \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{0.7*\densexpo{\x}}) -- ({\BorneSup},0) -- cycle;
- \ifboolKV[GRPHPROBCONTINUES]{AfficheM}%
- {\draw (1,-0.075) node[font=\tiny,scale={\UNITEX}] {\MOYENNE} ;
- \draw[thick,densely dotted] (1,0)--(1,{0.7*\densexpo{1}}) ;}
- {}
- \draw[thick,->,>=latex] (-0.2,0)--(3.8,0) ;
- \draw[thick,->,>=latex] (0,-0.15)--(0,0.85) ;
- \draw[thick,domain=0:3.8,samples=100,\GRPHPROBcoulcbe] plot (\x,{0.7*\densexpo{\x}}) ;
- \end{tikzpicture}
-}
-
-%%------TRINOMEALEA
-\setKVdefault[trinomealea]{%
- Alea=false,%
- Anegatif=true
-}
-
-\NewDocumentCommand\EcritureTrinome{ O{} m m m }{%
- \useKVdefault[trinomealea]%
- \setKV[trinomealea]{#1}%
- \ifboolKV[trinomealea]{Alea}%
- {%
- \xdef\Coeffa{\fpeval{randint(#2)}}\xdef\Coeffb{\fpeval{randint(#3)}}\xdef\Coeffc{\fpeval{randint(#4)}}%
- \xdef\AleaSigneA{\fpeval{randint(1,2)}}%
- \ifboolKV[trinomealea]{Anegatif}%
- {\xintifboolexpr{\AleaSigneA == 1}{\def\TriSigneA{}}{\def\TriSigneA{-}}}%
- {\def\TriSigneA{}}%forcément a>0
- }%
- {%
- \xdef\Coeffa{#2}\xdef\Coeffb{#3}\xdef\Coeffc{#4}%
- \def\TriSigneA{}%
- }%
- \def\TriPartieA{\num{\TriSigneA\Coeffa} x^2}%
- \xintifboolexpr{\Coeffa == 1}%
- {\def\TriPartieA{x^2}}{}%
- \xintifboolexpr{\Coeffa == -1}%
- {\def\TriPartieA{-x^2}}{}%
- \def\TriPartieB{\num[print-implicit-plus]{\Coeffb}x}%
- \xintifboolexpr{\Coeffb == 0}%
- {\def\TriPartieB{}}{}%
- \xintifboolexpr{\Coeffb == 1}%
- {\def\TriPartieB{+x}}{}%
- \xintifboolexpr{\Coeffb == -1}%
- {\def\TriPartieB{-x}}{}%
- \xintifboolexpr{\Coeffc == 0}%
- {\def\TriPartieC{}}{\def\TriPartieC{\num[print-implicit-plus]{\Coeffc}}}%
- %formatage
- \ensuremath{\TriPartieA\TriPartieB\TriPartieC}%
-}
-
-
-%%------PRESPGCD
-\DeclareMathOperator{\PLpgcd}{PGCD}
-\defKV[prespgcd]{%
- Couleur=\def\PLPGCDCouleur{#1},%
- DecalRect=\def\PLPGCDDecal{#1},%
- Noeud=\def\PLPGCDNoeud{#1}
-}
-
-\setKVdefault[prespgcd]{%
- Couleur=red,%
- DecalRect=2pt,%
- Rectangle=true,%
- Noeud=FFF,%
- CouleurResultat=false,%
- AfficheConclusion=true,%
- AfficheDelimiteurs=true
-}
-
-\newcommand\PresentationPGCD[3][]{%
- \useKVdefault[prespgcd]%
- \setKV[prespgcd]{#1}%
- \xdef\respgcd{\xinteval{gcd(#2,#3)}}
- \xdef\ValA{#2}\xdef\ValB{#3}%on stocke les valeurs du départ
- \ensuremath{%
- \ifboolKV[prespgcd]{AfficheDelimiteurs}%
- {\left\lbrace}%
- {}%
- \begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
- %1ère division
- \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}
- \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
- \xintifboolexpr{\ValR == \respgcd}%
- {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
- {\num{\ValR}}%
- \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs
- \whiledo {\ValR > 0}%
- {%
- \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}%
- \\%
- \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
- \xintifboolexpr{\ValR == \respgcd}%
- {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
- {\num{\ValR}}%
- \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs
- }%
- \end{array}%
- \ifboolKV[prespgcd]{AfficheDelimiteurs}%
- {\right|}%
- {}%
- \ifboolKV[prespgcd]{AfficheConclusion}%
- {%
- \Rightarrow \PLpgcd\left(\num{#2};\num{#3}\right)=\ifboolKV[prespgcd]{CouleurResultat}{\mathcolor{\PLPGCDCouleur}{\num{\respgcd}}}{\num{\respgcd}}%
- }%
- {}%
- }%
- \ifboolKV[prespgcd]{Rectangle}%
- {%
- \begin{tikzpicture}
- \draw[overlay,rounded corners=4pt,\PLPGCDCouleur,thick] ($(\PLPGCDNoeud1.north west)+(-\PLPGCDDecal,\PLPGCDDecal)$) rectangle ($(\PLPGCDNoeud1.south east)+(\PLPGCDDecal,-\PLPGCDDecal)$) ;
- \end{tikzpicture}%
- }{}%
-}
-
-%%------TVISOLUTION
-\defKV[dichoto]{%
- NomFct=\def\DHTnomfct{#1},%
- va=\def\DHTva{#1},%
- vb=\def\DHTvb{#1},%
- Precision=\def\DHTprec{#1},%
- NomSol=\def\DHTnomsol{#1},%
- Stretch=\def\DHTstretch{#1}
-}
-
-\setKVdefault[dichoto]{%
- NomFct=f,%
- Precision=2,%
- NomSol=\alpha,%
- Stretch=1.15,%
- Balayage=false,%
- Calculatrice=false,%
- Majuscule=true
-}
-
-\newcommand\SolutionTVI[3][]{%
- \useKVdefault[dichoto]%
- \setKV[dichoto]{#1}%
- \xintdeffloatfunc varfct(x) := #2 ;%
- \ifboolKV[dichoto]{Balayage}{\ifboolKV[dichoto]{Majuscule}{P}{p}ar balayage, on obtient }{}%
- \ifboolKV[dichoto]{Calculatrice}{\ifboolKV[dichoto]{Majuscule}{P}{p}ar calculatrice, on obtient }{}%
- \ensuremath{%
- \left\lbrace \begin{tblr}{stretch=\DHTstretch,colsep=1pt,rll}%
- {\DHTnomfct}{\left( \num{\DHTva} \right)} &\approx \num[minimum-decimal-digits=\DHTprec]{\xintFloatToDecimal{\xintfloateval{round(varfct(\DHTva),\DHTprec)}}} & \xintifGt{\xintfloateval{varfct(\DHTva)-#3}}{0}{> \num{#3}}{< \num{#3}} \: \\ %
- {\DHTnomfct}{\left( \num{\DHTvb} \right)} &\approx \num[minimum-decimal-digits=\DHTprec]{\xintFloatToDecimal{\xintfloateval{round(varfct(\DHTvb),\DHTprec)}}} & \xintifGt{\xintfloateval{varfct(\DHTvb)-#3}}{0}{> \num{#3}}{< \num{#3}} \:%
- \end{tblr}%
- \right|%
- \Rightarrow%
- \num{\DHTva} < \DHTnomsol < \num{\DHTvb}%
- }%
-}
-
-%%------CALCSRECUR
-\NewDocumentCommand\CalculInterneTermeRecurrence{ m m m m }{%pas forcément utile
- \xintdeffloatfunc varfctrecur(x) := #1 ;%
- \xdef\vartmp{#3}%
- \IfEq{#4}{\inteval{#2+1}}%
- {\xdef\vartmp{\xintfloateval{varfctrecur(\vartmp)}}}%
- {%
- \foreach \i in {1,2,...,\inteval{#4-#2}}%
- {\xdef\vartmp{\xintfloateval{varfctrecur(\vartmp)}}}%
- }%
- \xintFloatToDecimal{\vartmp}%
-}
-
-\newcount\CompteurSeuil%
-\NewDocumentCommand\CalculSeuil{ m m m m m }{%N0 / UN0 / fct / sgn / seuil := en interne
- \xintdeffloatfunc varfct(x) := #3 ;%
- \xdef\vartmp{\fpeval{#2}}%
- \CompteurSeuil=#1%
- %symbole de comparaison inversé et boucle
- \IfEq{#4}{>}%
- {%
- \whiledo{\xintLtorEq{\vartmp}{#5} = 1}%
- {%
- \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
- \CompteurSeuil=\numexpr\CompteurSeuil+1%
- }%
- }{}%
- \IfEq{#4}{<}%
- {%
- \whiledo{\xintGtorEq{\vartmp}{#5} = 1}%
- {%
- \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
- \CompteurSeuil=\numexpr\CompteurSeuil+1%
- }%
- }{}%
- \IfEq{#4}{>=}%
- {%
- \whiledo{\xintLt{\vartmp}{#5} = 1}%
- {%
- \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
- \CompteurSeuil=\numexpr\CompteurSeuil+1%
- }%
- }{}%
- \IfEq{#4}{<=}%
- {%
- \whiledo{\xintGt{\vartmp}{#5} = 1}%
- {%
- \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
- \CompteurSeuil=\numexpr\CompteurSeuil+1%
- }%
- }{}%
-}
-
-\defKV[calculsuiterecur]{%
- No=\def\SRninit{#1},%
- UNo=\def\SRuninit{#1},%
- Precision=\def\SRprec{#1},%
- N=\def\SRnfinal{#1}
- %Format=\def\SRformat{#1},%
- %OptionFrac=\def\SRoptfrac{#1}
-}
-
-\setKVdefault[calculsuiterecur]{%
- Precision=3
- %Format=Arrondi,%
- %OptionFrac={}
-}
-
-\NewDocumentCommand\CalculTermeRecurrence{ O{} m }{%attention avec les calculs en exact :-(
- \useKVdefault[calculsuiterecur]%
- \setKV[calculsuiterecur]{#1}%
- \xintdeffloatfunc varfct(x) := #2 ;%
- \xdef\vartmp{\fpeval{\SRuninit}}%
- \IfEq{\SRnfinal}{\inteval{\SRninit+1}}%
- {\xdef\vartmp{\xintfloateval{varfct(\vartmp)}}}%
- {%
- \foreach \i in {1,2,...,\inteval{\SRnfinal-\SRninit}}%
- {\xdef\vartmp{\xintfloateval{varfct(\vartmp)}}}%
- }%
- %\num[minimum-decimal-digits=\SRprec]{\xintfloateval{round(\vartmp,\SRprec)}}%
- \num{\xintfloateval{round(\vartmp,\SRprec)}}%
- %\IfStrEq{\SRformat}{Fraction}{\ConversionFraction[\SRoptfrac]{\xinteval{\vartmp}}}{}%
- %\IfStrEq{\SRformat}{Brut}{\xinteval{\vartmp}}{}%
- %\IfStrEq{\SRformat}{Decimal}{\num{\xintfloateval{\vartmp}}}{}%
- %\IfStrEq{\SRformat}{BrutDecimal}{\xintFloatToDecimal{\vartmp}}{}%
-}
-
-\defKV[suiteseuil]{%
- No=\def\SEUILindiceinit{#1},%
- UNo=\def\SEUILtermeinit{#1},%
- NomSuite=\def\SEUILnomsuite{#1},%
- %SolN=\def\SEUILn{#1},%
- Precision=\def\SEUILprec{#1},%
- Stretch=\def\SEUILstretch{#1},%
- Sens=\def\SEUILsens{#1}
-}
-
-\setKVdefault[suiteseuil]{%
- NomSuite=u,%
- Precision=3,%
- Stretch=1.15,%
- Balayage=false,%
- Calculatrice=false,%
- Majuscule=true,%
- Sens={>},%
- Exact=false,%
- Conclusion=true,%
- Simple=false
-}
-
-\newcommand\SolutionSeuil[3][]{%1=options + %2 = fonction + %3 = seuil
- \useKVdefault[suiteseuil]%
- \setKV[suiteseuil]{#1}%
- %on détermine le seuil, directement et on stocke les bascules !!!
- \CalculSeuil{\SEUILindiceinit}{\SEUILtermeinit}{#2}{\SEUILsens}{#3}%
- \def\SEUILn{\inteval{\the\CompteurSeuil}}%
- \def\SEUILnmu{\inteval{\the\CompteurSeuil-1}}%
- %formatage de la sortie des signes
- \IfEq{\SEUILsens}{>}%
- {\def\SensDeb{\leqslant}\def\SensFin{>}}%
- {}%
- \IfEq{\SEUILsens}{<}%
- {\def\SensDeb{\geqslant}\def\SensFin{<}}%
- {}%
- \IfEq{\SEUILsens}{>=}%
- {\def\SensDeb{<}\def\SensFin{\geqslant}}%
- {}%
- \IfEq{\SEUILsens}{<=}%
- {\def\SensDeb{>}\def\SensFin{\leqslant}}%
- {}%
- %formatage
- \ifboolKV[suiteseuil]{Balayage}{\ifboolKV[suiteseuil]{Majuscule}{P}{p}ar balayage, on obtient }{}%
- \ifboolKV[suiteseuil]{Calculatrice}{\ifboolKV[suiteseuil]{Majuscule}{P}{p}ar calculatrice, on obtient }{}%
- \ifboolKV[suiteseuil]{Simple}%
- {%
- \ensuremath{\SEUILnomsuite_{\SEUILnmu} \ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILnmu]{#2} \SensDeb\num{#3}}%
- \text{~et~}%
- \ensuremath{\SEUILnomsuite_{\SEUILn} \ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILn]{#2} \SensFin\num{#3}}%
- }%
- {%
- \ensuremath{%
- \left\lbrace \begin{tblr}{stretch=\SEUILstretch,colsep=1pt,rll}%
- \SEUILnomsuite_{\SEUILnmu} &\ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILnmu]{#2} & \SensDeb\num{#3} \: \\ %
- \SEUILnomsuite_{\SEUILn} &\ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILn]{#2} & \SensFin\num{#3} \: %
- \end{tblr}%
- \ifboolKV[suiteseuil]{Conclusion}%
- {\right| \Rightarrow n \geqslant \SEUILn}%
- {\right.}%
- }%
- }%
-}
-
-%%------ALEATOIRES
-\ExplSyntaxOn
-\NewDocumentCommand\TriListeCroiss{m}
-{
- \clist_sort:Nn #1
- {
- \fp_compare:nNnTF {##1} > {##2}
- { \sort_return_swapped: }
- { \sort_return_same: }
- }
-}
-\NewDocumentCommand\TriListeDecroiss{m}
-{
- \clist_sort:Nn #1
- {
- \fp_compare:nNnTF {##1} < {##2}
- { \sort_return_swapped: }
- { \sort_return_same: }
- }
-}
-\ExplSyntaxOff
-
-\newcommand\NbAlea[4][0]{%entier ou décimal
- \xintifboolexpr{#1 == 0}%
- {\xdef#4{\fpeval{randint(#2,#3)}}}%
- {\xdef#4{\fpeval{round(randint(#2,#3)+rand(),#1)}}}%
-}
-\newcommand\VarNbAlea[2]{%
- \xdef#1{\fpeval{#2}}%
-}
-
-\defKV[TirageAleatoireEntiersEntre]{%
- ValMin=\def\TAEEmin{#1},%
- ValMax=\def\TAEEmax{#1},%
- NbVal=\def\TAEEnb{#1},%
- Sep=\def\TAEEsep{#1},%
- Tri=\def\TAEEtri{#1}
-}
-
-\setKVdefault[TirageAleatoireEntiersEntre]{%
- ValMin=1,%
- ValMax=50,%
- NbVal=6,%
- Sep={,},%
- Tri=non,%
- Repetition=false
-}
-
-\NewList{TirageEntiersAleatoires}
-\NewDocumentCommand\TirageAleatoireEntiers{ O{} m }{%1=options,2=nomliste triée ou non
- \useKVdefault[TirageAleatoireEntiersEntre]%
- \setKV[TirageAleatoireEntiersEntre]{#1}%
- \ifboolKV[TirageAleatoireEntiersEntre]{Repetition}%suivant la possibilité de répéter
- {%répétitions autorisées
- %création de la liste (le 1er puis les autres)
- \xdef#2{\fpeval{randint(\TAEEmin,\TAEEmax)}}%
- \foreach \i in {2,3,...,\TAEEnb}%
- {\xdef#2{#2,\fpeval{randint(\TAEEmin,\TAEEmax)}}}%
- }%
- {%pas de répétitions
- %melange des nombres
- \ClearList{TirageEntiersAleatoires}%on vide la liste aléatoire
- \xintFor* ##1 in {\xintSeq{\TAEEmin}{\TAEEmax}}%
- \do{\InsertRandomItem{TirageEntiersAleatoires}{##1}}%
- %création de la liste (le 1er puis les autres)
- \xdef#2{\TirageEntiersAleatoires[0]}%
- \foreach \i in {1,2,...,{\inteval{\TAEEnb-1}}}%
- {\xdef#2{#2,\TirageEntiersAleatoires[\i]}}%
- }%
- %on trie si besoin
- \IfStrEq{\TAEEtri}{croissant}%si tri croissant
- {\TriListeCroiss{#2}}%
- {}%
- \IfStrEq{\TAEEtri}{decroissant}%si tri décroissant
- {\TriListeDecroiss{#2}}%
- {}%
- \StrSubstitute{#2}{,}{\TAEEsep}[#2]%on change le séparateur si besoin
-}
-
-%%------SIMPLIFRACINES
-\DeclareDocumentCommand\SimplificationRacine{ m }{% argument mandataire {calcul ou fraction}
- \xdef\calculargument{\xintIrr{\xinteval{#1}}}%
- \IfEndWith{\calculargument}{/1}%
- {%si c'est un entier !
- \xdef\calculargument{\xintiieval{#1}}%
- \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\calculargument)}}}%
- \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{%
- \xintifboolexpr{ \xintiiRem{\calculargument}{\xintiieval{##1*##1}} == 0}%si le carré divise
- {\xdef\ExtractRacID{##1}}%
- {}%
- }%
- \xdef\ExtracReste{\xintiieval{\calculargument/(\ExtractRacID*\ExtractRacID)}}%
- \ensuremath{\xintifboolexpr{\ExtractRacID == 1 && \ExtracReste == 1}%
- {1}%
- { \xintifboolexpr{\ExtractRacID == 1}{}{\num{\xintiieval{\ExtractRacID}}}%
- \xintifboolexpr{\ExtracReste == 1}{}{\sqrt{\num{\ExtracReste}}} }}%
-% }%
- }%
- {%on va mettre sous forme a\sqrt(d)/b := buggue avec des millièmes...
- \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
- \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
- \xdef\ExtractRacNNum{\xintiieval{\numerateur*\denominateur}}%
- \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\ExtractRacNNum)}}}%
- \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{%
- \xintifboolexpr{ \xintiiRem{\ExtractRacNNum}{\xintiieval{##1*##1}} == 0}%si le carré divise
- {\xdef\ExtractRacID{##1}}%
- {}
- }%
- \xdef\ExtractRacGCD{\xintiiGCD{\ExtractRacID}{\denominateur}}%
- \xdef\RacNumSimpl{\xintiieval{\ExtractRacID/\ExtractRacGCD}}%simpl num
- \xdef\RacDenomSimpl{\xintiieval{\denominateur/\ExtractRacGCD}}%
- \xdef\RacRacSimpl{\xintiieval{\ExtractRacNNum/(\ExtractRacID*\ExtractRacID)}}%
- \ensuremath{\frac{%
- \xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}%
- {1}%
- { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\RacRacSimpl}} }%
- }%
- { \RacDenomSimpl }}%
- }%
-}
-
-%%------MESUREPPALE
-\setKVdefault[MesurePpale]{%
- Crochets=false,
- d=false
-}
-
-\newcommand{\MesurePrincipale}[2][]{%fraction sous la forme a/b ou entier :-)
- \useKVdefault[MesurePpale]%
- \setKV[MesurePpale]{#1}%
- \StrDel{#2}{pi}[\MPargument]%
- %on conserve les données initiales
- \IfSubStr{\MPargument}{/}%on coupe numérateur/dénominateur
- { \StrCut{\MPargument}{/}\MPnumerateurinit\MPdenominateurinit }%
- { \xdef\MPnumerateurinit{\MPargument}\xdef\MPdenominateurinit{1} }%
- %on affiche le début, avant simplification
- \ifboolKV[MesurePpale]{d}%
- {\displaystyle}%
- {}%
- \xintifboolexpr{\MPdenominateurinit == 1}%
- { \num{\MPnumerateurinit}\pi = }%
- { \frac{\num{\MPnumerateurinit}\pi}{\num{\MPdenominateurinit}}= }%
- %on simplifie puis on réduit
- \xdef\MPsimpl{\xintPRaw{\xintIrr{\MPargument}}}%
- %test si l'argument est une fraction ou un entier
- \IfSubStr{\MPsimpl}{/}%
- { \StrCut{\MPsimpl}{/}\MPnumerateur\MPdenominateur }%
- { \xdef\MPnumerateur{\MPsimpl}\xdef\MPdenominateur{1} }%
- %calculs
- \xdef\MPtour{\inteval{2*\MPdenominateur}}%
- \xdef\MPreste{\xintiiRem{\MPnumerateur}{\MPtour}}%reste
- \xintifboolexpr{\MPreste>\MPdenominateur}%
- {\xdef\MPreste{\inteval{\MPreste-\MPtour}}}{}%
- \xintifboolexpr{\MPreste<-\MPdenominateur}%
- {\xdef\MPreste{\inteval{\MPreste+\MPtour}}}{}%
- %sortie suivant fraction ou non...
- \xintifboolexpr{\MPdenominateur == 1}%
- {%entier
- \xintifboolexpr{\MPreste == 1}{\pi \: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)} }{}%
- \xintifboolexpr{\MPreste == 0}{0 \: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)} }{}%
- \xintifboolexpr{\MPreste != 0 && \MPreste != 1}{\MPreste\pi \: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)} }{}%
- }%
- {%fraction
- \frac{%
- \xintifboolexpr{\xinteval{\MPreste == 1}}{}{}%
- \xintifboolexpr{\xinteval{\MPreste == -1}}{-}{}%
- \xintifboolexpr{\xinteval{abs(\MPreste) != 1}}{\num{\MPreste}}{}%
- \pi}{\num{\MPdenominateur}} \: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)}%
- }%
-}
-
-%%------DICHOTOMIE
-\defKV[SolDichoto]{%
- Precision=\xdef\DICHOTOstep{#1},%
- Intervalle=\xdef\DICHOTOinterv{#1},%
- Variable=\xdef\DICHOTOvar{#1}
-}
-
-\setKVdefault[SolDichoto]{%
- Precision=2,%
- Variable=x,%
- Intervalle={0:10}
-}
-
-\NewDocumentCommand\ResolutionApprochee{ O{} m O{masolution} }{%1=options,2=equation,3=macro
- \useKVdefault[SolDichoto]%
- %extraction fonction + valeur
- \setKV[SolDichoto]{#1}%
- \IfSubStr{#2}{=}%on coupe mmb gauche / mmb droit
- {\StrCut{#2}{=}{\SolDiFCT}{\SolDiVal}}%
- {\xdef\SolDiFCT{#2}\xdef\SolDiVal{0}}%
- %création des variables temporaires
- \xintdeffloatfunc dichotovarfct(\DICHOTOvar) := \SolDiFCT ;%
- \StrCut{\DICHOTOinterv}{:}{\varvala}{\varvalb}%
- \xdef\varstep{\fpeval{10**(-\DICHOTOstep-1)}}%un chiffre en plus :-)
- %boucles
- \whiledo{\xintGt{\xintfloateval{\varvalb-\varvala-\varstep}}{0} = 1}%
- {%
- \xdef\varvalm{\xintfloateval{(\varvala+\varvalb)*0.5}}%
- \xintifboolexpr{\xintGt{\xintfloateval{(dichotovarfct(\varvala)-\SolDiVal)*(dichotovarfct(\varvalm)-\SolDiVal)}}{0}==1}%
- {\xdef\varvala{\fpeval{\varvalm}}}%
- {\xdef\varvalb{\fpeval{\varvalm}}}%
- }%
- \xdef\varvalm{\xintfloateval{(\varvala+\varvalb)*0.5}}%
- \xdef\vartmpmd{\fpeval{floor(\varvalm,\DICHOTOstep)}}%
- \xdef\vartmpme{\fpeval{\vartmpmd+10**(-\DICHOTOstep)}}%
- %les variables créées
- \expandafter\def\csname#3d\endcsname{\fpeval{\vartmpmd}}%
- \expandafter\def\csname#3e\endcsname{\fpeval{\vartmpme}}%
- %valeur approchée
- \expandafter\def\csname#3a\endcsname{\fpeval{round(\varvalm,\DICHOTOstep)}}%
-}
-
-%%------aNp/Cnp
-\NewDocumentCommand\CalculAnp{ m m }{%avec et pour xint, p/n
- pfactorial(#2-#1,#2)
-}
-
-\NewDocumentCommand\CalculCnp{ m m }{%avec et pour xint, p/n
- binomial(#2,#1)
-}
-
-\setKVdefault[anpCnp]{%
- Formule=false,%
- Notation=false,%
- NotationAncien=false
-}
-\NewDocumentCommand\Arrangement{ s O{} m m }{%p/n
- \useKVdefault[anpCnp]%
- \setKV[anpCnp]{#2}%
- \ifboolKV[anpCnp]{Notation}{A_{#4}^{#3}=}{}%
- \ifboolKV[anpCnp]{Formule}{\frac{#4!}{\inteval{#4-#3}!}=}{}%
- \IfBooleanTF{#1}%
- {\xinteval{\CalculAnp{#3}{#4}}}%non formaté
- {\num{\xinteval{\CalculAnp{#3}{#4}}}}%formaté
-}
-\NewDocumentCommand\Combinaison{ s O{} m m }{%p/n
- \useKVdefault[anpCnp]%
- \setKV[anpCnp]{#2}%
- \ifboolKV[anpCnp]{Notation}{\binom{#4}{#3} =}{}%
- \ifboolKV[anpCnp]{NotationAncien}{C_{#4}^{#3}=}{}%
- \ifboolKV[anpCnp]{Formule}{\frac{#4!}{#3! \times \inteval{#4-#3}!}=}{}%
- \IfBooleanTF{#1}%
- {\xinteval{\CalculCnp{#3}{#4}}}%non formaté
- {\num{\xinteval{\CalculCnp{#3}{#4}}}}%formaté
-}
+%%------Trigo
+\input{proflycee-tools-trigo.tex}
+%%------Probas
+\input{proflycee-tools-probas.tex}
+%%------Stats
+\input{proflycee-tools-stats.tex}
+%%------Arithm
+\input{proflycee-tools-arithm.tex}
+%%------Graphiques
+\input{proflycee-tools-graphiques.tex}
+%%------Analyse
+\input{proflycee-tools-analyse.tex}
+%%------Aléatoire
+\input{proflycee-tools-aleatoire.tex}
+%%------Suites
+\input{proflycee-tools-suites.tex}
+%%------Géométrie
+\input{proflycee-tools-geom.tex}
+%%------Récréations diverses
+\input{proflycee-tools-recreat.tex}
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
new file mode 100644
index 0000000000..943a28d0fb
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
@@ -0,0 +1,149 @@
+% proflycee-tools-aleatoire.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------EnsembleList
+\defKV[kvensemble]{%
+ Sep=\def\PLenssep{#1},%
+ Option=\def\PLensopt{#1}
+}
+
+\setKVdefault[kvensemble]{%
+ Sep={;},%
+ Mathpunct=true,%
+ Option={}
+}
+
+\newcommand\EcritureEnsemble[2][]{%
+ \useKVdefault[kvensemble]%
+ \setKV[kvensemble]{#1}%
+ \ifboolKV[kvensemble]{Mathpunct}%
+ {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}%
+ {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}
+}
+
+%%------TRINOMEALEA
+\setKVdefault[trinomealea]{%
+ Alea=false,%
+ Anegatif=true
+}
+
+\NewDocumentCommand\EcritureTrinome{ O{} m m m }{%
+ \useKVdefault[trinomealea]%
+ \setKV[trinomealea]{#1}%
+ \ifboolKV[trinomealea]{Alea}%
+ {%
+ \xdef\Coeffa{\fpeval{randint(#2)}}\xdef\Coeffb{\fpeval{randint(#3)}}\xdef\Coeffc{\fpeval{randint(#4)}}%
+ \xdef\AleaSigneA{\fpeval{randint(1,2)}}%
+ \ifboolKV[trinomealea]{Anegatif}%
+ {\xintifboolexpr{\AleaSigneA == 1}{\def\TriSigneA{}}{\def\TriSigneA{-}}}%
+ {\def\TriSigneA{}}%forcément a>0
+ }%
+ {%
+ \xdef\Coeffa{#2}\xdef\Coeffb{#3}\xdef\Coeffc{#4}%
+ \def\TriSigneA{}%
+ }%
+ \def\TriPartieA{\num{\TriSigneA\Coeffa} x^2}%
+ \xintifboolexpr{\Coeffa == 1}%
+ {\def\TriPartieA{x^2}}{}%
+ \xintifboolexpr{\Coeffa == -1}%
+ {\def\TriPartieA{-x^2}}{}%
+ \def\TriPartieB{\num[print-implicit-plus]{\Coeffb}x}%
+ \xintifboolexpr{\Coeffb == 0}%
+ {\def\TriPartieB{}}{}%
+ \xintifboolexpr{\Coeffb == 1}%
+ {\def\TriPartieB{+x}}{}%
+ \xintifboolexpr{\Coeffb == -1}%
+ {\def\TriPartieB{-x}}{}%
+ \xintifboolexpr{\Coeffc == 0}%
+ {\def\TriPartieC{}}{\def\TriPartieC{\num[print-implicit-plus]{\Coeffc}}}%
+ %formatage
+ \ensuremath{\TriPartieA\TriPartieB\TriPartieC}%
+}
+
+%%------ALEATOIRES
+\ExplSyntaxOn
+\NewDocumentCommand\TriListeCroiss{m}
+{
+ \clist_sort:Nn #1
+ {
+ \fp_compare:nNnTF {##1} > {##2}
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+}
+\NewDocumentCommand\TriListeDecroiss{m}
+{
+ \clist_sort:Nn #1
+ {
+ \fp_compare:nNnTF {##1} < {##2}
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+}
+\ExplSyntaxOff
+
+\newcommand\NbAlea[4][0]{%entier ou décimal
+ \xintifboolexpr{#1 == 0}%
+ {\xdef#4{\fpeval{randint(#2,#3)}}}%
+ {\xdef#4{\fpeval{round(randint(#2,#3)+rand(),#1)}}}%
+}
+\newcommand\VarNbAlea[2]{%
+ \xdef#1{\fpeval{#2}}%
+}
+
+\defKV[TirageAleatoireEntiersEntre]{%
+ ValMin=\def\TAEEmin{#1},%
+ ValMax=\def\TAEEmax{#1},%
+ NbVal=\def\TAEEnb{#1},%
+ Sep=\def\TAEEsep{#1},%
+ Tri=\def\TAEEtri{#1}
+}
+
+\setKVdefault[TirageAleatoireEntiersEntre]{%
+ ValMin=1,%
+ ValMax=50,%
+ NbVal=6,%
+ Sep={,},%
+ Tri=non,%
+ Repetition=false
+}
+
+\NewList{TirageEntiersAleatoires}
+\NewDocumentCommand\TirageAleatoireEntiers{ O{} m }{%1=options,2=nomliste triée ou non
+ \useKVdefault[TirageAleatoireEntiersEntre]%
+ \setKV[TirageAleatoireEntiersEntre]{#1}%
+ \ifboolKV[TirageAleatoireEntiersEntre]{Repetition}%suivant la possibilité de répéter
+ {%répétitions autorisées
+ %création de la liste (le 1er puis les autres)
+ \xdef#2{\fpeval{randint(\TAEEmin,\TAEEmax)}}%
+ \foreach \i in {2,3,...,\TAEEnb}%
+ {\xdef#2{#2,\fpeval{randint(\TAEEmin,\TAEEmax)}}}%
+ }%
+ {%pas de répétitions
+ %melange des nombres
+ \ClearList{TirageEntiersAleatoires}%on vide la liste aléatoire
+ \xintFor* ##1 in {\xintSeq{\TAEEmin}{\TAEEmax}}%
+ \do{\InsertRandomItem{TirageEntiersAleatoires}{##1}}%
+ %création de la liste (le 1er puis les autres)
+ \xdef#2{\TirageEntiersAleatoires[0]}%
+ \foreach \i in {1,2,...,{\inteval{\TAEEnb-1}}}%
+ {\xdef#2{#2,\TirageEntiersAleatoires[\i]}}%
+ }%
+ %on trie si besoin
+ \IfStrEq{\TAEEtri}{croissant}%si tri croissant
+ {\TriListeCroiss{#2}}%
+ {}%
+ \IfStrEq{\TAEEtri}{decroissant}%si tri décroissant
+ {\TriListeDecroiss{#2}}%
+ {}%
+ \StrSubstitute{#2}{,}{\TAEEsep}[#2]%on change le séparateur si besoin
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
new file mode 100644
index 0000000000..921a053556
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
@@ -0,0 +1,386 @@
+% proflycee-tools-analyse.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------SimplFrac nouvelle version
+\NewDocumentCommand\ConversionFraction{ s O{} m }{%
+ %*=moins sur le numérateur
+ %2=argument.optionnel[d/t/dec=...]
+ %3=argument mandataire {calcul ou fraction}
+ \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#3}}}}%on calcule et on transforme en A/B
+ \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît
+ {%si oui := fraction
+ \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
+ \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
+ \ifblank{#2}%
+ {%
+ \IfBooleanTF{#1}%
+ {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ {%
+ \ifthenelse{\numerateur < 0}%
+ {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfStrEq{#2}{d}%
+ {%
+ \IfBooleanTF{#1}%
+ {\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ {%
+ \ifthenelse{\numerateur < 0}%
+ {\ensuremath{-\dfrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ {\ensuremath{\dfrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfStrEq{#2}{t}%
+ {%
+ \IfBooleanTF{#1}%
+ {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ {%
+ \ifthenelse{\numerateur < 0}%
+ {\ensuremath{-\tfrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfStrEq{#2}{n}%
+ {%
+ %\IfBooleanTF{#1}%
+ {\ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ %{%
+ % \ifthenelse{\numerateur < 0}%
+ % {\ensuremath{-\nicefrac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ % {\ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ %}%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfSubStr{#2}{dec}%on veut la forme décimale
+ {%
+ \IfSubStr{#2}{=}%si on rajoute une précision
+ {%
+ \StrBehind{#2}{=}[\precdecimal]%
+ \ensuremath{\num{\xintfloateval{round(#3,\precdecimal)}}}%
+ }%
+ {%
+ \ensuremath{\num{\xintfloateval{#3}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ }{%si non := entier
+ \num{\calculargument}%on affiche l'entier, avec le package siunitx
+ }%
+}
+
+%%------AideTds
+\defKV[aidetds]{%
+ Code=\def\tdsparam{#1},%
+ Couleur=\def\tdscouleur{#1},%
+ Racines=\def\tdsracine{#1},%
+ Largeur=\def\tdslarg{#1},%
+ Hauteur=\def\tdshaut{#1}
+}
+
+\setKVdefault[aidetds]{%
+ Code=da+,
+ Couleur=red,%
+ Largeur=2,%
+ Hauteur=1,%
+ Cadre=true,%
+ Racines=2
+}
+
+\NewDocumentCommand\schematdsaff{ s m m m m }{%pour les droites (interne)
+ % * = étoilée -> a négatif
+ % #2 = couleur
+ % #3 = largeur
+ % #4 = hauteur
+ % #5 = racine
+ \IfBooleanTF{#1}%si étoile := droite qui descend
+ {%
+ \def\possgnavant{above right}\def\possgnapres{below left}\def\sgnavant{\strut+}\def\sgnapres{\strut-}%
+ \draw[thick,#2] ({-0.5*#3},{0.5*#4})--({0.5*#3},{-0.5*#4});
+ }
+ {%
+ \def\possgnavant{below right}\def\possgnapres{above left}\def\sgnavant{\strut-}\def\sgnapres{\strut+}%
+ \draw[thick,#2] ({-0.5*#3},{-0.5*#4})--({0.5*#3},{0.5*#4});
+ }
+ \draw[#2] ({-0.5*#3},0) node[inner sep=0pt,\possgnavant=1pt,font=\scriptsize] {\textcircled{$\sgnavant$}};
+ \draw[#2] ({0.5*#3},0) node[inner sep=0pt,\possgnapres=1pt,font=\scriptsize] {\textcircled{$\sgnapres$}};
+ \draw[#2] (0,0) node[inner sep=0pt,above=3pt,font=\scriptsize] {$\strut#5$} ;
+ \filldraw[#2] (0,0) circle[radius=2pt] ;
+}
+
+\NewDocumentCommand\schematdsparab{ m m m m m o }{%pour les paraboles (interne)
+ % #1 = signe de a (1 ou -1) ?
+ % #2 = couleur
+ % #3 = largeur
+ % #4 = hauteur
+ % #5 = nb racine
+ % #6 = liste racines (option)
+ \xintifboolexpr{ #1 > 0 'and' #5 == 2 } %a>0 et delta>0
+ {%
+ \saveexpandmode\expandarg
+ \StrCut{#6}{/}{\xun}{\xdeux}
+ \restoreexpandmode
+ \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{-0.5*#4}) ({0.375*#3},{0.5*#4}) ;
+ \draw[#2] ({-0.5*#3},0) node[above right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
+ \draw[#2] ({0.5*#3},0) node[above left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
+ \draw[#2] (0,0) node[below=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
+ \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[below right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$};
+ \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[below left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};%
+ }
+ {}
+ \xintifboolexpr{ #1 < 0 'and' #5 == 2 } %a<0 et delta>0
+ {%
+ \saveexpandmode\expandarg
+ \StrCut{#6}{/}{\xun}{\xdeux}
+ \restoreexpandmode
+ \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{0.5*#4}) ({0.375*#3},{-0.5*#4}) ;
+ \draw[#2] ({-0.5*#3},0) node[below right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
+ \draw[#2] ({0.5*#3},0) node[below left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
+ \draw[#2] (0,0) node[above=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
+ \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[above right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$};
+ \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[above left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};%
+ }
+ {}
+ \xintifboolexpr{ #1 > 0 'and' #5 == 1 } %a>0 et delta=0
+ {%
+ \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,0) ({0.375*#3},{0.5*#4}) ;
+ \filldraw[#2] (0,0) circle[radius=2pt] node[below=3pt,inner sep=1pt,font=\scriptsize] {$#6$};
+ \draw[#2] (0,0) node[above=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
+ }
+ {}
+ \xintifboolexpr{ #1 < 0 'and' #5 == 1 } %a>0 et delta=0
+ {%
+ \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,0) ({0.375*#3},{-0.5*#4}) ;
+ \filldraw[#2] (0,0) circle[radius=2pt] node[above=3pt,inner sep=0pt,font=\scriptsize] {$#6$};
+ \draw[#2] (0,0) node[below=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
+ }
+ {}
+ \xintifboolexpr{ #1 > 0 'and' #5 == 0 } %a>0 et delta<0
+ {%
+ \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{0.075*#4}) ({0.375*#3},{0.5*#4}) ;
+ \draw[#2] (0,{0.075*#4}) node[above=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
+ }
+ {}
+ \xintifboolexpr{ #1 < 0 'and' #5 == 0 } %a>0 et delta<0
+ {%
+ \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{-0.075*#4}) ({0.375*#3},{-0.5*#4}) ;
+ \draw[#2] (0,{-0.075*#4}) node[below=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
+ }
+ {}
+}
+
+\NewDocumentCommand\MiniSchemaSignes{ s O{} D<>{} }{%
+ \useKVdefault[aidetds]
+ \setKV[aidetds]{#2}
+ %simplification des codes
+ \IfEq{\tdsparam}{da+}{\def\xcode{1}}{}
+ \IfEq{\tdsparam}{da-}{\def\xcode{-1}}{}
+ \IfEq{\tdsparam}{pa+d+}{\def\xcode{12}}{}
+ \IfEq{\tdsparam}{pa-d+}{\def\xcode{-12}}{}
+ \IfEq{\tdsparam}{pa+d0}{\def\xcode{11}}{}
+ \IfEq{\tdsparam}{pa-d0}{\def\xcode{-11}}{}
+ \IfEq{\tdsparam}{pa+d-}{\def\xcode{10}}{}
+ \IfEq{\tdsparam}{pa-d-}{\def\xcode{-10}}{}
+ %si commande étoilée := commande autonome
+ \IfBooleanTF{#1}%
+ {\begin{tikzpicture}[#3]}{}%
+ %cadre si booléen true
+ \ifboolKV[aidetds]{Cadre}
+ {\draw[lightgray] ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;}
+ {}
+ %restriction de la petite fenêtre
+ \clip ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;
+ %axe (Ox)
+ \draw[thick,->] ({-0.5*\tdslarg},0)--({0.55*\tdslarg},0);
+ %1er degré a+ code = 1
+ \ifnum\xcode=1
+ \schematdsaff{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine}
+ \fi
+ %1er degré a- code = -1
+ \ifnum\xcode=-1
+ \schematdsaff*{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine}
+ \fi
+ %2d degré a+delta+ code = 12
+ \ifnum\xcode=12
+ \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine]
+ \fi
+ %2d degré a-delta+ code = -12
+ \ifnum\xcode=-12
+ \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine]
+ \fi
+ %2d degré a+delta0 code = 11
+ \ifnum\xcode=11
+ \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine]
+ \fi
+ %2d degré a-delta0 code = -11
+ \ifnum\xcode=-11
+ \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine]
+ \fi
+ %2d degré a+delta- code = 10
+ \ifnum\xcode=10
+ \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{0}
+ \fi
+ %2d degré a-delta- code = -10
+ \ifnum\xcode=-10
+ \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{0}
+ \fi
+ \IfBooleanTF{#1}%
+ {\end{tikzpicture}}{}%
+}
+
+%pour l'interaction avec tkz-tab
+\defKV[aidetdstkz]{%
+ Echelle=\def\tdstkzscale{#1},%
+ Decal=\def\tdstkzoffset{#1}
+}
+
+\setKVdefault[aidetdstkz]{%
+ Echelle=1,%
+ Decal=1.25
+}
+
+\NewDocumentCommand\MiniSchemaSignesTkzTab{ o m O{0.85} O{1.5} }{%
+ %#1 = codeaidetikz
+ %#2 = numligne
+ %#3 = échelle
+ %#4 = décalage
+ %\shorthandoff{:}\shorthandoff{!} %bizzzzzzzzare
+ %\NoAutoSpacing
+ \coordinate (ZZZ) at ($(T2#2)!.5!(T2\the\numexpr#2+1\relax)$) ;
+ %\shorthandon{:}\shorthandon{!}
+ \path (ZZZ.east) + (#4,0) pic[right,scale=#3,every node/.style={scale=#3}] {code={\MiniSchemaSignes[#1]}} ;
+}
+
+%%------TVISOLUTION
+\defKV[dichoto]{%
+ NomFct=\def\DHTnomfct{#1},%
+ va=\def\DHTva{#1},%
+ vb=\def\DHTvb{#1},%
+ Precision=\def\DHTprec{#1},%
+ NomSol=\def\DHTnomsol{#1},%
+ Stretch=\def\DHTstretch{#1}
+}
+
+\setKVdefault[dichoto]{%
+ NomFct=f,%
+ Precision=2,%
+ NomSol=\alpha,%
+ Stretch=1.15,%
+ Balayage=false,%
+ Calculatrice=false,%
+ Majuscule=true
+}
+
+\newcommand\SolutionTVI[3][]{%
+ \useKVdefault[dichoto]%
+ \setKV[dichoto]{#1}%
+ \xintdeffloatfunc varfct(x) := #2 ;%
+ \ifboolKV[dichoto]{Balayage}{\ifboolKV[dichoto]{Majuscule}{P}{p}ar balayage, on obtient }{}%
+ \ifboolKV[dichoto]{Calculatrice}{\ifboolKV[dichoto]{Majuscule}{P}{p}ar calculatrice, on obtient }{}%
+ \ensuremath{%
+ \left\lbrace \begin{tblr}{stretch=\DHTstretch,colsep=1pt,rll}%
+ {\DHTnomfct}{\left( \num{\DHTva} \right)} &\approx \num[minimum-decimal-digits=\DHTprec]{\xintFloatToDecimal{\xintfloateval{round(varfct(\DHTva),\DHTprec)}}} & \xintifGt{\xintfloateval{varfct(\DHTva)-#3}}{0}{> \num{#3}}{< \num{#3}} \: \\ %
+ {\DHTnomfct}{\left( \num{\DHTvb} \right)} &\approx \num[minimum-decimal-digits=\DHTprec]{\xintFloatToDecimal{\xintfloateval{round(varfct(\DHTvb),\DHTprec)}}} & \xintifGt{\xintfloateval{varfct(\DHTvb)-#3}}{0}{> \num{#3}}{< \num{#3}} \:%
+ \end{tblr}%
+ \right|%
+ \Rightarrow%
+ \num{\DHTva} < \DHTnomsol < \num{\DHTvb}%
+ }%
+}
+
+%%------SIMPLIFRACINES
+\DeclareDocumentCommand\SimplificationRacine{ m }{% argument mandataire {calcul ou fraction}
+ \xdef\calculargument{\xintIrr{\xinteval{#1}}}%
+ \IfEndWith{\calculargument}{/1}%
+ {%si c'est un entier !
+ \xdef\calculargument{\xintiieval{#1}}%
+ \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\calculargument)}}}%
+ \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{%
+ \xintifboolexpr{ \xintiiRem{\calculargument}{\xintiieval{##1*##1}} == 0}%si le carré divise
+ {\xdef\ExtractRacID{##1}}%
+ {}%
+ }%
+ \xdef\ExtracReste{\xintiieval{\calculargument/(\ExtractRacID*\ExtractRacID)}}%
+ \ensuremath{\xintifboolexpr{\ExtractRacID == 1 && \ExtracReste == 1}%
+ {1}%
+ { \xintifboolexpr{\ExtractRacID == 1}{}{\num{\xintiieval{\ExtractRacID}}}%
+ \xintifboolexpr{\ExtracReste == 1}{}{\sqrt{\num{\ExtracReste}}} }}%
+% }%
+ }%
+ {%on va mettre sous forme a\sqrt(d)/b := buggue avec des millièmes...
+ \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
+ \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
+ \xdef\ExtractRacNNum{\xintiieval{\numerateur*\denominateur}}%
+ \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\ExtractRacNNum)}}}%
+ \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{%
+ \xintifboolexpr{ \xintiiRem{\ExtractRacNNum}{\xintiieval{##1*##1}} == 0}%si le carré divise
+ {\xdef\ExtractRacID{##1}}%
+ {}
+ }%
+ \xdef\ExtractRacGCD{\xintiiGCD{\ExtractRacID}{\denominateur}}%
+ \xdef\RacNumSimpl{\xintiieval{\ExtractRacID/\ExtractRacGCD}}%simpl num
+ \xdef\RacDenomSimpl{\xintiieval{\denominateur/\ExtractRacGCD}}%
+ \xdef\RacRacSimpl{\xintiieval{\ExtractRacNNum/(\ExtractRacID*\ExtractRacID)}}%
+ \ensuremath{\frac{%
+ \xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}%
+ {1}%
+ { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\RacRacSimpl}} }%
+ }%
+ { \RacDenomSimpl }}%
+ }%
+}
+
+%%------DICHOTOMIE
+\defKV[SolDichoto]{%
+ Precision=\xdef\DICHOTOstep{#1},%
+ Intervalle=\xdef\DICHOTOinterv{#1},%
+ Variable=\xdef\DICHOTOvar{#1}
+}
+
+\setKVdefault[SolDichoto]{%
+ Precision=2,%
+ Variable=x,%
+ Intervalle={0:10}
+}
+
+\NewDocumentCommand\ResolutionApprochee{ O{} m O{masolution} }{%1=options,2=equation,3=macro
+ \useKVdefault[SolDichoto]%
+ %extraction fonction + valeur
+ \setKV[SolDichoto]{#1}%
+ \IfSubStr{#2}{=}%on coupe mmb gauche / mmb droit
+ {\StrCut{#2}{=}{\SolDiFCT}{\SolDiVal}}%
+ {\xdef\SolDiFCT{#2}\xdef\SolDiVal{0}}%
+ %création des variables temporaires
+ \xintdeffloatfunc dichotovarfct(\DICHOTOvar) := \SolDiFCT ;%
+ \StrCut{\DICHOTOinterv}{:}{\varvala}{\varvalb}%
+ \xdef\varstep{\fpeval{10**(-\DICHOTOstep-1)}}%un chiffre en plus :-)
+ %boucles
+ \whiledo{\xintGt{\xintfloateval{\varvalb-\varvala-\varstep}}{0} = 1}%
+ {%
+ \xdef\varvalm{\xintfloateval{(\varvala+\varvalb)*0.5}}%
+ \xintifboolexpr{\xintGt{\xintfloateval{(dichotovarfct(\varvala)-\SolDiVal)*(dichotovarfct(\varvalm)-\SolDiVal)}}{0}==1}%
+ {\xdef\varvala{\fpeval{\varvalm}}}%
+ {\xdef\varvalb{\fpeval{\varvalm}}}%
+ }%
+ \xdef\varvalm{\xintfloateval{(\varvala+\varvalb)*0.5}}%
+ \xdef\vartmpmd{\fpeval{floor(\varvalm,\DICHOTOstep)}}%
+ \xdef\vartmpme{\fpeval{\vartmpmd+10**(-\DICHOTOstep)}}%
+ %les variables créées
+ \expandafter\def\csname#3d\endcsname{\fpeval{\vartmpmd}}%
+ \expandafter\def\csname#3e\endcsname{\fpeval{\vartmpme}}%
+ %valeur approchée
+ \expandafter\def\csname#3a\endcsname{\fpeval{round(\varvalm,\DICHOTOstep)}}%
+}
+
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
new file mode 100644
index 0000000000..5b83b2a4d0
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
@@ -0,0 +1,311 @@
+% proflycee-tools-arithm.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------ConversionsBases
+%dec->bin avec blocs de 4 chiffres
+\setKVdefault[CONVDECBIN]{%
+ AffBase=true
+}
+\NewDocumentCommand\ConversionDecBin{ s O{} m }{%
+ \useKVdefault[CONVDECBIN]
+ \setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie
+ \def\resbrut{\xintDecToBin{#3}}
+ \StrLen{\resbrut}[\nbchiffres]
+ \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}
+ \IfBooleanTF{#1}
+ {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}
+ {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}
+}
+
+\setKVdefault[CONVBINHEX]{%
+ %trait=0.5pt,%
+ AffBase=true,%
+ Details=true
+}
+%bourrage de 0 avant
+\ExplSyntaxOn
+\NewExpandableDocumentCommand{\PLstrzeros}{m}
+{
+ \int_compare:nT { #1 > 0 }
+ {
+ 0 \prg_replicate:nn { #1 - 1 } { 0 }
+ }
+}
+\ExplSyntaxOff
+
+
+%la conversion complète
+\newcommand\ConversionBinHex[2][]{%
+ \useKVdefault[CONVBINHEX]
+ \setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \def\chbrut{#2}
+ \StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire
+ \xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4
+ \xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs
+ %on rajoute des zeros si besoin := OK
+ \xdef\resinter{\chbrut}
+ \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}=
+ \ifboolKV[CONVBINHEX]{Details}{%
+ \ifnum\nbchiffres<\nbgrp
+ \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}
+ \xdef\resinter{\PLstrzeros{\nbz}\chbrut}
+ \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=
+ \fi
+ %découpage par blocs et conversion en hexa := OK
+ \newcount\cpt
+ \cpt0
+ \loop\ifnum \cpt<\nbblocs
+ \def\iinit{\fpeval{4*\cpt+1}}%
+ \def\ifinal{\fpeval{4*(\cpt+1)}}%
+ \StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]%
+ {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}
+ \advance\cpt by 1
+ \repeat
+ \!=
+ }%
+ {}
+ \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}
+}
+
+%hexa/bin->dec avec écriture polynomiale
+\defKV[CONVTODEC]{%
+ BaseDep=\def\basedepart{#1}
+}
+\setKVdefault[CONVTODEC]{%
+ BaseDep=2,%
+ AffBase=true,%
+ Details=true,%
+ Zeros=true
+}
+
+\ExplSyntaxOn
+\newcommand\convertbasetobasedix[2]{%
+ \int_from_base:nn {#1}{#2}
+}
+\ExplSyntaxOff
+
+\newcommand\ConversionVersDec[2][]{%
+ \useKVdefault[CONVTODEC]
+ \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \def\nbdepart{#2}
+ \StrLen{\nbdepart}[\nbchiffres]
+ \StrChar{\nbdepart}{1}[\chiffre]
+ %si on est en base 16
+ \xintifboolexpr{\basedepart == 16}%
+ {%
+ \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \ifboolKV[CONVTODEC]{Details}{%
+ \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
+ \newcount\cpt
+ \cpt2
+ \loop\ifnum \cpt<\inteval{\nbchiffres+1}
+ \def\puiss{\inteval{\nbchiffres-\cpt}}
+ \StrChar{\nbdepart}{\cpt}[\chiffre]
+ \ifboolKV[CONVTODEC]{Zeros}%
+ {%
+ +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
+ }
+ {
+ \ifnum\xintHexToDec{\chiffre} > 0
+ +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
+ \fi
+ }
+ \advance\cpt by 1
+ \repeat
+ =
+ }
+ {}
+ \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
+ }%
+ {}
+ \xintifboolexpr{\basedepart == 2}%
+ {%
+ \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \ifboolKV[CONVTODEC]{Details}{%
+ \chiffre\times\basedepart^{\inteval{\nbchiffres-1}}%
+ \newcount\cpt
+ \cpt2
+ \loop\ifnum \cpt<\inteval{\nbchiffres+1}
+ \def\puiss{\inteval{\nbchiffres-\cpt}}
+ \StrChar{\nbdepart}{\cpt}[\chiffre]
+ \ifboolKV[CONVTODEC]{Zeros}%
+ {%
+ +\chiffre\times\basedepart^{\puiss}%
+ }
+ {
+ \ifnum\chiffre > 0
+ +\chiffre\times\basedepart^{\puiss}%
+ \fi
+ }
+ \advance\cpt by 1
+ \repeat
+ =
+ }
+ {}
+ \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
+ }%
+ {}%
+}
+
+\newcommand\ConversionBaseDix[3][]{%1=options,%2=nb,%3=basedep ??
+ \useKVdefault[CONVTODEC]
+ \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \def\NBdepart{#2}
+ \def\basedepart{#3}
+ \StrLen{\NBdepart}[\nbchiffres]
+ \StrChar{\NBdepart}{1}[\chiffre]
+ \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \ifboolKV[CONVTODEC]{Details}{%
+ \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
+ \newcount\cpt
+ \cpt2
+ \loop\ifnum \cpt<\inteval{\nbchiffres+1}
+ \def\puiss{\inteval{\nbchiffres-\cpt}}
+ \StrChar{\NBdepart}{\cpt}[\chiffre]
+ \ifboolKV[CONVTODEC]{Zeros}%
+ {%
+ +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
+ }
+ {
+ \ifnum\xintHexToDec{\chiffre} > 0
+ +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
+ \fi
+ }
+ \advance\cpt by 1
+ \repeat
+ =
+ }%
+ {}%
+ \num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
+}
+
+%%------CONVFROMDEC
+\newcommand\PLnoeud[2]{\tikz[remember picture,baseline=(#1.base)]\node[shape=rectangle,inner sep=0pt](#1){#2};}
+\ExplSyntaxOn
+\newcommand\convertbasedixtobase[2]{%
+ \int_to_Base:nn {#1}{#2}
+}
+\ExplSyntaxOff
+
+\defKV[convfromten]{%
+ Couleur=\def\PLConvCouleur{#1},%
+ DecalH=\def\PLConvDecalH{#1},%
+ DecalV=\def\PLConvDecalV{#1},%
+ Noeud=\def\PLConvNoeud{#1}
+}
+
+\setKVdefault[convfromten]{%
+ Couleur=red,%
+ DecalH=2pt,%
+ DecalV=3pt,%
+ Rect=true,%
+ Noeud=EEE,%
+ CouleurRes=false
+}
+
+\newcommand\ConversionDepuisBaseDix[3][]{%
+ \useKVdefault[convfromten]%
+ \setKV[convfromten]{#1}%
+ \xdef\ValRes{\xintDecToHex{#2}}%
+ \xdef\ValA{#2}\xdef\ValB{#3}%
+ \xdef\ValTMP{#2}%
+ \xdef\ValMU{\inteval{#3-1}}%
+ \ensuremath{%
+ \left\lbrace\begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
+ %1ere division
+ \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}
+ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud1}{\num{\ValR}}%
+ \xdef\ValTMP{\ValQ}%
+ \whiledo {\ValTMP > \ValMU}%
+ {%
+ \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
+ \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\num{\ValR}
+ \xdef\ValTMP{\ValQ}%
+ }
+ %dernière
+ \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
+ \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}
+ \end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{CouleurRes}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}%
+ \ifboolKV[convfromten]{Rect}%
+ {%
+ \IfSubStr{\PLConvDecalH}{/}%
+ {\StrCut{\PLConvDecalH}{/}{\PLConvDecalHg}{\PLConvDecalHd}}%
+ {\def\PLConvDecalHg{\PLConvDecalH}\def\PLConvDecalHd{\PLConvDecalH}}%
+ \begin{tikzpicture}
+ \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick] ($(\PLConvNoeud1.north west)+(-\PLConvDecalHg,\PLConvDecalV)$) rectangle ($(\PLConvNoeud2.south east)+(\PLConvDecalHd,-\PLConvDecalV)$) ;
+ \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick,->,>=latex] ($(\PLConvNoeud2.east)+(\PLConvDecalHd,0)$)--++(0,{0.75\baselineskip}) ;
+ \end{tikzpicture}%
+ }{}%
+}
+
+%%------PRESPGCD
+\DeclareMathOperator{\PLpgcd}{PGCD}
+\defKV[prespgcd]{%
+ Couleur=\def\PLPGCDCouleur{#1},%
+ DecalRect=\def\PLPGCDDecal{#1},%
+ Noeud=\def\PLPGCDNoeud{#1}
+}
+
+\setKVdefault[prespgcd]{%
+ Couleur=red,%
+ DecalRect=2pt,%
+ Rectangle=true,%
+ Noeud=FFF,%
+ CouleurResultat=false,%
+ AfficheConclusion=true,%
+ AfficheDelimiteurs=true
+}
+
+\newcommand\PresentationPGCD[3][]{%
+ \useKVdefault[prespgcd]%
+ \setKV[prespgcd]{#1}%
+ \xdef\respgcd{\xinteval{gcd(#2,#3)}}
+ \xdef\ValA{#2}\xdef\ValB{#3}%on stocke les valeurs du départ
+ \ensuremath{%
+ \ifboolKV[prespgcd]{AfficheDelimiteurs}%
+ {\left\lbrace}%
+ {}%
+ \begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
+ %1ère division
+ \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}
+ \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
+ \xintifboolexpr{\ValR == \respgcd}%
+ {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
+ {\num{\ValR}}%
+ \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs
+ \whiledo {\ValR > 0}%
+ {%
+ \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}%
+ \\%
+ \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
+ \xintifboolexpr{\ValR == \respgcd}%
+ {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
+ {\num{\ValR}}%
+ \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs
+ }%
+ \end{array}%
+ \ifboolKV[prespgcd]{AfficheDelimiteurs}%
+ {\right|}%
+ {}%
+ \ifboolKV[prespgcd]{AfficheConclusion}%
+ {%
+ \Rightarrow \PLpgcd\left(\num{#2};\num{#3}\right)=\ifboolKV[prespgcd]{CouleurResultat}{\mathcolor{\PLPGCDCouleur}{\num{\respgcd}}}{\num{\respgcd}}%
+ }%
+ {}%
+ }%
+ \ifboolKV[prespgcd]{Rectangle}%
+ {%
+ \begin{tikzpicture}
+ \draw[overlay,rounded corners=4pt,\PLPGCDCouleur,thick] ($(\PLPGCDNoeud1.north west)+(-\PLPGCDDecal,\PLPGCDDecal)$) rectangle ($(\PLPGCDNoeud1.south east)+(\PLPGCDDecal,-\PLPGCDDecal)$) ;
+ \end{tikzpicture}%
+ }{}%
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex
new file mode 100644
index 0000000000..5b041fcd0f
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex
@@ -0,0 +1,139 @@
+% proflycee-tools-geom.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------PaveDroitTikZ
+\defKV[paramspave]{%
+ Largeur=\xdef\PFPaveLg{#1},%
+ Profondeur=\xdef\PFPavePf{#1},%
+ Hauteur=\xdef\PFPaveHt{#1},%
+ Angle=\xdef\PFPaveAngl{#1},%
+ Fuite=\xdef\PFPaveFuite{#1},%
+ Sommets=\def\PFPaveSommets{#1},%
+ Epaisseur=\xdef\PFPaveThick{#1}
+}
+\setKVdefault[paramspave]{%
+ Aff=false,%
+ Plein=false,%
+ Largeur=2,%
+ Profondeur=1,%
+ Hauteur=1.25,%
+ Angle=30,%
+ Fuite=0.5,%
+ Epaisseur=thick,%
+ Sommets=A§B§C§D§E§F§G§H,%
+ Cube=false,%
+ Math=false
+}
+
+\newcommand\PaveTikz[1][]{%
+ \useKVdefault[paramspave]%
+ \setKV[paramspave]{#1}%
+ \ifboolKV[paramspave]{Cube}
+ {\xdef\PFPavePf{\PFPaveLg}%
+ \xdef\PFPaveHt{\PFPaveLg}}
+ {}
+ \setsepchar{§}%
+ \readlist*\PFListeSommets\PFPaveSommets
+ \itemtomacro\PFListeSommets[1]\PaveA
+ \itemtomacro\PFListeSommets[2]\PaveB
+ \itemtomacro\PFListeSommets[3]\PaveC
+ \itemtomacro\PFListeSommets[4]\PaveD
+ \itemtomacro\PFListeSommets[5]\PaveE
+ \itemtomacro\PFListeSommets[6]\PaveF
+ \itemtomacro\PFListeSommets[7]\PaveG
+ \itemtomacro\PFListeSommets[8]\PaveH
+ %les nœuds du pave
+ \coordinate (\PaveA) at (0,0) ;
+ \coordinate (\PaveB) at ({\PFPaveLg},0) ;
+ \coordinate (\PaveC) at ($(\PaveB) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ;
+ \coordinate (\PaveD) at ($(\PaveA) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ;
+ \coordinate (\PaveE) at ($(\PaveA) + (0,{\PFPaveHt})$) ;
+ \coordinate (\PaveF) at ($(\PaveB) + (0,{\PFPaveHt})$) ;
+ \coordinate (\PaveG) at ($(\PaveC) + (0,{\PFPaveHt})$) ;
+ \coordinate (\PaveH) at ($(\PaveD) + (0,{\PFPaveHt})$) ;
+ \ifboolKV[paramspave]{Aff}
+ {\draw (\PaveA) node[below left] {\ifboolKV[paramspave]{Math}{$\PaveA$}{\PaveA}} ;
+ \draw (\PaveB) node[below right] {\ifboolKV[paramspave]{Math}{$\PaveB$}{\PaveB}} ;
+ \draw (\PaveC) node[above right] {\ifboolKV[paramspave]{Math}{$\PaveC$}{\PaveC}} ;
+ \ifboolKV[paramspave]{Plein}
+ {}
+ {\draw (\PaveD) node[above left] {\ifboolKV[paramspave]{Math}{$\PaveD$}{\PaveD}} ;}
+ \draw (\PaveE) node[below left] {\ifboolKV[paramspave]{Math}{$\PaveE$}{\PaveE}} ;
+ \draw (\PaveF) node[below right] {\ifboolKV[paramspave]{Math}{$\PaveF$}{\PaveF}} ;
+ \draw (\PaveG) node[above right] {\ifboolKV[paramspave]{Math}{$\PaveG$}{\PaveG}} ;
+ \draw (\PaveH) node[above left] {\ifboolKV[paramspave]{Math}{$\PaveH$}{\PaveH}} ;}
+ {}%on affiche rien
+ \draw[\PFPaveThick] (\PaveA)--(\PaveB)--(\PaveF)--(\PaveE)--cycle
+ (\PaveB)--(\PaveC)--(\PaveG)--(\PaveF)--cycle
+ (\PaveG)--(\PaveH)--(\PaveE) ;
+ \ifboolKV[paramspave]{Plein}
+ {}
+ {\draw[dashed,\PFPaveThick] (\PaveA)--(\PaveD)--(\PaveC)
+ (\PaveD)--(\PaveH) ;}
+}
+
+%%------TétraèdreTikZ
+\defKV[paramstetra]{%
+ Largeur=\xdef\PFTetraLg{#1},%
+ Profondeur=\xdef\PFTetraPf{#1},%
+ Hauteur=\xdef\PFTetraHt{#1},%
+ Alpha=\xdef\PFTetraAlpha{#1},%
+ Beta=\xdef\PFTetraBeta{#1},%
+ Sommets=\def\PFTetraSommets{#1},%
+ Epaisseur=\xdef\PFTetraThick{#1}
+}
+\setKVdefault[paramstetra]{%
+ Aff=false,%
+ Plein=false,%
+ Largeur=4,%
+ Profondeur=1.25,%
+ Hauteur=3,%
+ Alpha=40,%
+ Beta=60,%
+ Epaisseur=thick,%
+ Sommets=A§B§C§D,%
+ Math=false
+}
+
+\newcommand\TetraedreTikz[1][]{%
+ \useKVdefault[paramstetra]%
+ \setKV[paramstetra]{#1}%
+ \setsepchar{§}%
+ \readlist*\PFListeSommets\PFTetraSommets
+ \itemtomacro\PFListeSommets[1]\TetraA
+ \itemtomacro\PFListeSommets[2]\TetraB
+ \itemtomacro\PFListeSommets[3]\TetraC
+ \itemtomacro\PFListeSommets[4]\TetraD
+ %les nœuds du tétraèdre
+ \coordinate (\TetraA) at (0,0) ;
+ \coordinate (\TetraB) at ($(\TetraA) + ({-\PFTetraAlpha}:{\PFTetraPf})$) ;
+ \coordinate (\TetraC) at ({\PFTetraLg},0) ;
+ \coordinate (\TetraD) at ($(\TetraA) + ({\PFTetraBeta}:{\PFTetraHt})$) ;
+ \ifboolKV[paramstetra]{Aff}
+ {\draw (\TetraA) node[left] {\ifboolKV[paramstetra]{Math}{$\TetraA$}{\TetraA}} ;
+ \draw (\TetraB) node[below] {\ifboolKV[paramstetra]{Math}{$\TetraB$}{\TetraB}} ;
+ \draw (\TetraC) node[right] {\ifboolKV[paramstetra]{Math}{$\TetraC$}{\TetraC}} ;
+ \draw (\TetraD) node[above] {\ifboolKV[paramstetra]{Math}{$\TetraD$}{\TetraD}} ;}
+ {}%on affiche rien
+ \draw[\PFTetraThick] (\TetraA)--(\TetraD)--(\TetraC)--(\TetraB)--cycle
+ (\TetraD)--(\TetraB) ;
+ \ifboolKV[paramstetra]{Plein}
+ {}
+ {\draw[dashed,\PFTetraThick] (\TetraA)--(\TetraC) ;}
+}
+
+%%------MainLevée TikZ
+\tikzset{%
+ mainlevee/.style args={#1et#2}{decorate,decoration={random steps,segment length=#1,amplitude=#2}},
+ mainlevee/.default={5mm et 0.6pt}
+}
+
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex
new file mode 100644
index 0000000000..8f827908ae
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex
@@ -0,0 +1,525 @@
+% proflycee-tools-graphiques.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------SPLINES
+%commande utile pour extraire des infos d'une liste
+\newcommand\extractcoeff[2]{%1=liste,2=numero
+ \setsepchar{§}%
+ \readlist*\lcoeffs{#1}
+ \ifnum \lcoeffslen=1
+ \def\COEFFA{#1}
+ \def\COEFFB{#1}
+ \else
+ \itemtomacro\lcoeffs[#2]\COEFF
+ \IfSubStr{\COEFF}{/}%
+ {\StrCut{\COEFF}{/}{\COEFFA}{\COEFFB}}%
+ {\def\COEFFA{\COEFF}\def\COEFFB{\COEFF}}
+ \fi
+}
+
+%splines en tikz avec ..controls
+\defKV[spline]{%
+ Epaisseur=\def\SPLepaisseur{#1},%
+ Couleur=\def\SPLcouleur{#1},%
+ Coeffs=\def\SPLcoeffs{#1},%
+ CouleurPoints=\def\SPLcouleurpoints{#1},%
+ TaillePoints=\def\SPLtaillepoints{#1},%
+ Style=\def\SPLstyle{#1}
+}
+
+\setKVdefault[spline]{%
+ Epaisseur=1.25pt,%
+ Couleur=red,%
+ Coeffs=3,%
+ CouleurPoints=black,%
+ TaillePoints=2pt,%
+ AffPoints=false,%
+ Style={}
+}
+
+\newcommand\SplineTikz[2][]{%
+ \useKVdefault[spline]
+ \setKV[spline]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %on lit la liste des points/nbderivés et on stocke dans \listepoints
+ \setsepchar[.]{§./}%
+ \readlist*\SPLlistepoints{#2}%
+ \def\SPLnbsplines{\inteval{\SPLlistepointslen-1}}%
+ %si uniquement deux points, pas de boucle...
+ \ifnum \SPLlistepointslen=2
+ %extraction des coeffs de compensation
+ \extractcoeff{\SPLcoeffs}{1}%
+ %extraction des coordonnées
+ \itemtomacro\SPLlistepoints[1,1]\xa
+ \itemtomacro\SPLlistepoints[1,2]\ya
+ \itemtomacro\SPLlistepoints[1,3]\fprimea
+ \itemtomacro\SPLlistepoints[2,1]\xb
+ \itemtomacro\SPLlistepoints[2,2]\yb
+ \itemtomacro\SPLlistepoints[2,3]\fprimeb
+ \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb) ;%
+ %sinon on construit bout par bout !
+ \else
+ \foreach \i in {1,2,...,\SPLnbsplines}{
+ %extraction des coeffs de compensation
+ \extractcoeff{\SPLcoeffs}{\i}
+ \def\j{\inteval{\i+1}}
+ \itemtomacro\SPLlistepoints[\i,1]\xa
+ \itemtomacro\SPLlistepoints[\i,2]\ya
+ \itemtomacro\SPLlistepoints[\i,3]\fprimea
+ \itemtomacro\SPLlistepoints[\j,1]\xb
+ \itemtomacro\SPLlistepoints[\j,2]\yb
+ \itemtomacro\SPLlistepoints[\j,3]\fprimeb
+ \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb) ;%
+ }
+ \fi
+ \ifboolKV[spline]{AffPoints}%on affiche les points de contrôle
+ {%
+ \foreach \i in {1,2,...,\SPLlistepointslen}{%
+ \itemtomacro\SPLlistepoints[\i,1]\xa
+ \itemtomacro\SPLlistepoints[\i,2]\ya
+ \filldraw[\SPLcouleurpoints] (\xa,\ya) circle[radius=\SPLtaillepoints] ;%
+ }
+ }
+ {}
+}
+
+%tangente(s) en TikZ, avec point/dérivée ou liste points/dérivées
+\defKV[tgte]{%
+ Epaisseur=\def\TGTepaisseur{#1},%
+ Couleur=\def\TGTcouleur{#1},%
+ xl=\def\TGTXL{#1},%
+ xr=\def\TGTXR{#1},%
+ Style=\def\TGTstyle{#1},%
+ Point=\def\TGTnumpt{#1}
+}
+
+\setKVdefault[tgte]{
+ Epaisseur=1.25pt,%
+ Couleur=red,%
+ xl=0.5,xr=0.5,%
+ Style={},%
+ Point=1
+}
+
+\newcommand\TangenteTikz[2][]{%
+ \useKVdefault[tgte]%
+ \setKV[tgte]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \setsepchar[.]{§./}%
+ \readlist*\TGTlistepoints{#2}%
+ \itemtomacro\TGTlistepoints[\TGTnumpt,1]\xa
+ \itemtomacro\TGTlistepoints[\TGTnumpt,2]\ya
+ \itemtomacro\TGTlistepoints[\TGTnumpt,3]\fprimea
+ \def\TGTDEB{\fpeval{\xa-\TGTXL}}\def\TGTFIN{\fpeval{\xa+\TGTXR}}%
+ \draw[line width=\TGTepaisseur,\TGTcouleur,domain=\TGTDEB:\TGTFIN,\TGTstyle] plot (\x,{\fprimea*(\x-\xa)+\ya}) ;%
+}
+
+%%------STATS2VAR
+%variables directement dans tikzpicture
+\tikzset{%
+ Ox/.store in=\axexOx,Ox/.default=0,Ox=0,%essai
+ Oy/.store in=\axeyOy,Oy/.default=0,Oy=0,%essai
+ xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
+ xmax/.store in=\xmax,xmax/.default=5,xmax=5,
+ ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
+ ymax/.store in=\ymax,ymax/.default=5,ymax=5,
+ xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
+ xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
+ ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
+ ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
+ xunit/.store in=\xunit,xunit/.default=1,xunit=1,
+ yunit/.store in=\yunit,yunit/.default=1,yunit=1
+}
+
+%style point croix
+\tikzset{pics/PLdotcross/.style args={#1/#2}{
+ code={
+ \draw[line width={0.5*#1},rotate=#2] (-#1,0) -- (#1,0);
+ \draw[line width={0.5*#1},rotate=#2] (0,-#1) -- (0, #1);
+ }
+ },
+ pics/PLdotcross/.default={4pt/0}
+}
+
+%affichage d'un label en radians
+\NewDocumentCommand\AffAngleRadian{ s m }{%étoilée en dfrac
+ \IfStrEq{#2}{0}%cas où l'argument vaut 0
+ {\def\restmp{0}}%
+ {%
+ \StrDel{#2}{*}[\restmpsansmoins]%
+ \StrSubstitute{\restmpsansmoins}{pi}{\pi}[\restmppi]%
+ \IfSubStr{#2}{/}%
+ {%
+ \StrCut{\restmppi}{/}\tmpnum\tmpdenom%
+ \IfSubStr{\tmpnum}{-}
+ {%
+ \StrDel{\tmpnum}{-}[\restmppinum]%
+ \IfBooleanTF{#1}
+ {\def\restmp{-\dfrac{\restmppinum}{\tmpdenom}}}
+ {\def\restmp{-\frac{\restmppinum}{\tmpdenom}}}
+ }%
+ {%
+ \IfBooleanTF{#1}
+ {\def\restmp{\dfrac{\tmpnum}{\tmpdenom}}}
+ {\def\restmp{\frac{\tmpnum}{\tmpdenom}}}
+ }%
+ }%
+ {%
+ \def\restmp{\restmppi}%
+ }%
+ }%
+ \restmp%
+}
+
+%axeOx
+\defKV[PLaxextkz]{%
+ Epaisseur=\def\axexwidth{#1},%
+ Police=\def\axexfont{#1},%
+ HautGrad=\def\axextickwidth{#1},%
+ PosGrad=\def\axexposlabel{#1}
+}
+
+\setKVdefault[PLaxextkz]{%
+ Epaisseur=1pt,%
+ Police=\normalsize\normalfont,%
+ PosGrad=below,%
+ HautGrad=4pt,%
+ AffGrad=true,%
+ AffOrigine=true,%
+ Annee=false,%
+ Dfrac=false,%
+ Trigo=false
+}
+
+\DeclareDocumentCommand\AxexTikz{ O{} m }{%
+ \useKVdefault[PLaxextkz]
+ \setKV[PLaxextkz]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %récupération des tickwidth H/B
+ \IfSubStr{\axextickwidth}{/}
+ {\StrCut{\axextickwidth}{/}{\axextickwidthA}{\axextickwidthB}}
+ {\def\axextickwidthA{\axextickwidth}\def\axextickwidthB{\axextickwidth}}
+ %en fonction de Trigo ou non
+ \ifboolKV[PLaxextkz]{Trigo}
+ {
+ \foreach \x in {#2}{%
+ \draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
+ \ifboolKV[PLaxextkz]{AffGrad}%on affiche les graduations
+ {%
+ node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{Dfrac}{$\AffAngleRadian*{\x}$}{$\AffAngleRadian{\x}$}}
+ }%
+ {}%
+ ;}
+ }
+ {
+ \foreach \x in {#2}{%
+ \draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
+ \ifboolKV[PLaxextkz]{AffGrad}%on affiche les graduations
+ {%
+ \ifboolKV[PLaxextkz]{AffOrigine}%si on demande d'afficher l'origine
+ {node[\axexposlabel,font=\axexfont]
+ {\ifboolKV[PLaxextkz]{Annee}%
+ {\num[group-digits=none]{\x}}%
+ {\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
+ }
+ }
+ {\xintifboolexpr{\x==\axexOx}{}{node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{Annee}%
+ {\num[group-digits=none]{\x}}%
+ {\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
+ }
+ }
+ }
+ }
+ {}
+ ;}
+ }
+
+}
+
+%axeOy
+\defKV[PLaxeytkz]{%
+ Epaisseur=\def\axeywidth{#1},%
+ Police=\def\axeyfont{#1},%
+ HautGrad=\def\axeytickwidth{#1},%
+ PosGrad=\def\axeyposlabel{#1}
+}
+
+\setKVdefault[PLaxeytkz]{%
+ Epaisseur=1pt,%
+ Police=\normalsize\normalfont,%
+ PosGrad=left,%
+ HautGrad=4pt,%
+ AffGrad=true,%
+ AffOrigine=true,%
+ Annee=false
+}
+
+\DeclareDocumentCommand\AxeyTikz{ O{} m }{%
+ \useKVdefault[PLaxeytkz]
+ \setKV[PLaxeytkz]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \IfSubStr{\axeytickwidth}{/}
+ {\StrCut{\axeytickwidth}{/}{\axeytickwidthA}{\axeytickwidthB}}
+ {\def\axeytickwidthA{\axeytickwidth}\def\axeytickwidthB{\axeytickwidth}}
+ \foreach \y in {#2}{%
+ \draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy})%
+ \ifboolKV[PLaxeytkz]{AffGrad}%on affiche les graduations
+ {%
+ \ifboolKV[PLaxeytkz]{AffOrigine}%si on demande d'afficher l'origine
+ {node[\axeyposlabel,font=\axeyfont]
+ {\ifboolKV[PLaxeytkz]{Annee}%
+ {\num[group-digits=none]{\y}}%
+ {\num[text-family-to-math=true,text-series-to-math=true]{\y}}%
+ }
+ }
+ {\xintifboolexpr{\y==\axeyOy}{}{node[\axeyposlabel,font=\axeyfont] {\ifboolKV[PLaxeytkz]{Annee}%
+ {\num[group-digits=none]{\y}}%
+ {\num[text-family-to-math=true,text-series-to-math=true]{\y}}%
+ }
+ }
+ }
+ }
+ {}
+ ;}
+}
+
+%axes
+\defKV[PLaxestkz]{%
+ Epaisseur=\def\axeswidth{#1},%
+ Police=\def\axesfont{#1},%
+ Labelx=\def\axeslabelx{#1},%
+ Labely=\def\axeslabely{#1},%
+ PosLabelx=\def\axesposlabelx{#1},%
+ PosLabely=\def\axesposlabely{#1},%
+ EchelleFleche=\def\axesechellefleche{#1},%
+ TypeFleche=\def\axestypefleche{#1},%
+ AffLabel=\def\axesafflabel{#1},%
+ ElargirOx=\def\axeselargx{#1},%
+ ElargirOy=\def\axeselargy{#1}
+}
+
+\setKVdefault[PLaxestkz]{%
+ Epaisseur=1pt,%
+ Police=\normalsize\normalfont,%
+ Labelx=$x$,%
+ Labely=$y$,%
+ AffLabel=z,%
+ PosLabelx=right,%
+ PosLabely=above,%
+ EchelleFleche=1,%
+ TypeFleche=latex,%
+ ElargirOx=0/0.05,%
+ ElargirOy=0/0.05
+}
+
+\DeclareDocumentCommand\AxesTikz{ O{} }{%
+ \useKVdefault[PLaxestkz]
+ \setKV[PLaxestkz]{#1}%
+ %les petits élargissements
+ \IfSubStr{\axeselargx}{/}
+ {\StrCut{\axeselargx}{/}{\axeselargxG}{\axeselargxD}}
+ {\def\axeselargxG{\axeselargx}\def\axeselargxD{\axeselargx}}
+ \def\axesenlargxG{\fpeval{\axeselargxG*(\xmax-\xmin)}}
+ \def\axesenlargxD{\fpeval{\axeselargxD*(\xmax-\xmin)}}
+ \IfSubStr{\axeselargy}{/}
+ {\StrCut{\axeselargy}{/}{\axeselargyG}{\axeselargyD}}
+ {\def\axeselargyG{\axeselargy}\def\axeselargyD{\axeselargy}}
+ \def\axesenlargyG{\fpeval{\axeselargyG*(\ymax-\ymin)}}
+ \def\axesenlargyD{\fpeval{\axeselargyD*(\ymax-\ymin)}}
+ %on affiche les deux axes
+ \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] ({\xmin-\axexOx-\axesenlargxG},0) -- ({\xmax-\axexOx+\axesenlargxD},0) ;
+ \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] (0,{\ymin-\axeyOy-\axesenlargyG}) -- (0,{\ymax-\axeyOy++\axesenlargyD}) ;
+ %les labels éventuels
+ \IfSubStr{\axesafflabel}{x}%
+ {\draw ({\xmax-\axexOx},0) node[\axesposlabelx,font=\axesfont] {\axeslabelx} ;}
+ {}
+ \IfSubStr{\axesafflabel}{y}%
+ {\draw (0,{\ymax-\axeyOy}) node[\axesposlabely,font=\axesfont] {\axeslabely} ;}
+ {}
+}
+
+%fenêtre clippée
+\newcommand\FenetreTikz{%
+ \clip ({\xmin-\axexOx},{\ymin-\axeyOy}) rectangle ({\xmax-\axexOx},{\ymax-\axeyOy}) ;
+}
+
+%origine
+\defKV[PLaxesorig]{%
+ Police=\def\axesorfont{#1},%
+ Pos=\def\axesorpos{#1},%
+ Decal=\def\axesordecal{#1},%
+ Valeur=\def\axesorval{#1}
+}
+
+\setKVdefault[PLaxesorig]{%
+ Police=\normalsize\normalfont,%
+ Pos={below left},%
+ Decal=2pt,%
+ Valeur=0
+}
+
+\DeclareDocumentCommand\OrigineTikz{ O{} }{%
+ \useKVdefault[PLaxesorig]%
+ \setKV[PLaxesorig]{#1}%
+ \draw (0,0) node[\axesorpos=\axesordecal,font=\axesorfont] {\axesorval} ;
+}
+
+%grilles
+\setKVdefault[PLgrillestkz]{%
+ Affp=true,%
+ Affs=true
+}
+
+\DeclareDocumentCommand\GrilleTikz{ O{} O{thin,lightgray} O{ultra thin,lightgray} }{%
+ \useKVdefault[PLgrillestkz]
+ \setKV[PLgrillestkz]{#1}%
+ \ifboolKV[PLgrillestkz]{Affs}
+ {\draw[xstep=\xgrilles,ystep=\ygrilles,#3] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
+ {}
+ \ifboolKV[PLgrillestkz]{Affp}
+ {\draw[xstep=\xgrille,ystep=\ygrille,#2] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
+ {}
+}
+
+%point(s) avec changement origines
+\defKV[PLpts]{%
+ Taille=\def\ptstaille{#1},%
+ Couleur=\def\ptscouleur{#1},%
+ Style=\def\ptsstyle{#1}
+}
+
+\setKVdefault[PLpts]{%
+ Taille=2pt,%
+ Couleur=blue,%
+ Style=o
+}
+
+\newcommand\PLnuagepoints[2][]{%
+ \useKVdefault[PLpts]
+ \setKV[PLpts]{#1}%
+ \setsepchar{§}%
+ \readlist\listepointsaffiches{#2}
+ \foreachitem\point\in\listepointsaffiches{%
+ \StrBetween{\point}{(}{,}[\XPT]
+ \StrBetween{\point}{,}{)}[\YPT]
+ \IfStrEq{\ptsstyle}{o}%
+ {\filldraw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) circle[radius=\ptstaille] ;}
+ {}
+ \IfStrEq{\ptsstyle}{x}%
+ {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;}
+ {}
+ \IfStrEq{\ptsstyle}{+}%
+ {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;}
+ {}
+ }
+}
+
+\newcommand\NuagePointsTikz[3][]{%
+ \useKVdefault[PLpts]
+ \setKV[PLpts]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \def\xliste{#2}
+ \def\yliste{#3}
+ \readlist*\LX{\xliste}
+ \readlist*\LY{\yliste}
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}
+ \foreach \i in {1,2,...,\LNB} {
+ \IfStrEq{\ptsstyle}{o}%
+ {
+ \IfSubStr{\ptscouleur}{/}
+ {\StrCut{\ptscouleur}{/}{\ptscouleurA}{\ptscouleurB}\draw[thick,\ptscouleurA,fill=\ptscouleurB] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;}
+ {\draw[\ptscouleur,fill=\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;}
+ }
+ {}
+ \IfStrEq{\ptsstyle}{x}%
+ {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;}
+ {}
+ \IfStrEq{\ptsstyle}{+}%
+ {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;}
+ {}
+ }
+}
+
+\defKV[PLptmoy]{%
+ Police=\def\ptmoyfont{#1},%
+ Taille=\def\ptmoytaille{#1},%
+ Couleur=\def\ptmoycouleur{#1},%
+ Style=\def\ptmoystyle{#1},%
+ xg=\def\ptmoyx{#1},%
+ yg=\def\ptmoyy{#1},%
+ Nom=\def\ptmoynom{#1},%
+ Pos=\def\ptmoypos{#1},%
+ Decal=\def\ptmoydecal{#1}%
+}
+
+\setKVdefault[PLptmoy]{%
+ Police=\normalsize\normalfont,%
+ Taille=4pt,%
+ Couleur=red,%
+ Style=x,%
+ xg=\LXmoy,%
+ yg=\LYmoy,%
+ Nom=G,%
+ Pos=above,%
+ Decal=0pt,%
+ AffNom=true
+}
+
+\newcommand\PointMoyenTikz[1][]{%
+ \useKVdefault[PLptmoy]
+ \setKV[PLptmoy]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \IfStrEq{\ptmoystyle}{o}%
+ {
+ \IfSubStr{\ptmoycouleur}{/}
+ {\StrCut{\ptmoycouleur}{/}{\ptmoycouleurA}{\ptmoycouleurB}\draw[thick,\ptmoycouleurA,fill=\ptmoycouleurB] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;}
+ {\draw[\ptmoycouleur,fill=\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;}
+ }
+ {}
+ \IfStrEq{\ptmoystyle}{x}%
+ {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/45} ;}
+ {}
+ \IfStrEq{\ptmoystyle}{+}%
+ {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/0} ;}
+ {}
+ \ifboolKV[PLptmoy]{AffNom}
+ {\draw ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) node[\ptmoypos={\ptmoytaille+\ptmoydecal},font=\ptmoyfont] {\ptmoynom} ;}
+ {}
+
+}
+
+%courbe ?
+\newcommand\CourbeTikz[3][]{%
+ \setsepchar{:}%
+ \readlist\PLdomaine{#3}
+ \itemtomacro\PLdomaine[1]\PLDm
+ \itemtomacro\PLdomaine[2]\PLDM
+ \saveexpandmode\noexpandarg
+ \StrSubstitute{#2}{\x}{(\x+\axexOx)}[\fctdecx]
+ \restoreexpandmode % restore the previous mode
+ \draw[#1] plot[domain={\PLDm-\axexOx}:{\PLDM-\axexOx}] (\x,{\fctdecx-\axeyOy}) ;
+}
+
+\setKVdefault[PLsimplewindow]{%
+ Axes=true,%
+ Grille=true,%
+}
+
+\DeclareDocumentCommand\FenetreSimpleTikz{ O{} D(){} D<>{} m D<>{} m }{%
+ \useKVdefault[PLsimplewindow]%
+ \setKV[PLsimplewindow]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \ifboolKV[PLsimplewindow]{Grille}%
+ {\GrilleTikz}%
+ {}%
+ \ifboolKV[PLsimplewindow]{Axes}%
+ {\AxesTikz[#2]%
+ \AxexTikz[#3]{#4}
+ \AxeyTikz[#5]{#6}}%
+ {}%
+}
+
+
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-listings.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-listings.tex
index c6d706417a..0e39796c76 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-listings.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-listings.tex
@@ -1,4 +1,4 @@
-% proflycee-tools-piton.tex
+% proflycee-tools-listings.tex
% Copyright 2023 Cédric Pierquet
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -330,4 +330,148 @@
#2
}
+%%------FakeTerm
+%couleurs (inspirées par termsim !)
+\definecolor{PLmpurple}{RGB}{48,10,36}
+\definecolor{PLmgray}{RGB}{70,72,67}
+\definecolor{PLogray}{RGB}{148,147,141}
+\definecolor{PLoorange}{RGB}{233,101,56}
+\definecolor{PLterminal}{RGB}{80,78,70}
+\definecolor{PLlinux}{RGB}{0,39,51}
+\definecolor{PLwinblue}{HTML}{1883D7}
+\definecolor{PLosxgray}{HTML}{D8D6D9}
+
+%WINDOWS
+\tcbset{PLfaketermwin/.style={%
+ enhanced,boxrule=1pt,sharp corners,before skip=12pt,after skip=12pt,%
+ colframe=PLwinblue,colback=black,colbacktitle=white,colupper=white,coltitle=black,%
+ titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
+ fonttitle=\bfseries\small\sffamily
+ }
+}
+
+\setKVdefault[fakeTERMwin]{Titre={Terminal Windows}}
+
+\newcommand\PLcommandeswin{%
+ \begin{tikzpicture}[thick,scale=0.66]
+ \draw (0,0)--(1em,0) ; \draw (2em,0) rectangle (3em,1em) ; \draw (4em,1em)--(5em,0) (4em,0)--(5em,1em) ;
+ \end{tikzpicture}%
+}
+
+\newcommand\termwintitre[1][]{%
+ \restoreKV[fakeTERMwin]
+ \setKV[fakeTERMwin]{#1}
+ \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={X[l]r}}
+ {\footnotesize\faTerminal}~~\useKV[fakeTERMwin]{Titre} & \PLcommandeswin \\ %
+ \end{tblr}
+}
+
+\DeclareTCBListing{TerminalWin}{ O{\linewidth} m !O{} }{%<taille> puis {Titre=...} puis [option]
+ PLfaketermwin,title={\termwintitre[#2]},%
+ listing only,listing engine=listings,%
+ listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
+ width=#1,#3
+}
+
+%LINUX
+\newcommand{\PLUbuntuWhite}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[PLmgray] (0,0.25em) circle[radius=0.5em] ;
+ \end{tikzpicture}%
+}
+\newcommand{\PLUbuntuMin}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em];
+ \draw[PLterminal](-0.35em,0.25em)--(0.35em,0.25em);
+ \end{tikzpicture}%
+}
+\newcommand{\PLUbuntuClose}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[color=PLoorange!70!white] (0,0.25em) circle[radius=0.5em];
+ \draw[PLterminal] (-0.32em,-0.07em)--(0.32em,0.57em);
+ \draw[PLterminal] (-0.32em,0.57em)--(0.32em,-0.07em);
+ \end{tikzpicture}%
+}
+\newcommand{\PLUbuntuMax}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em];
+ \draw[PLterminal] (-0.32em,0.5em) rectangle (0.32em,0);
+ \end{tikzpicture}%
+}
+
+\tcbset{PLtermlinux/.style={%
+ enhanced,boxrule=1pt,arc=4pt,before skip=12pt,after skip=12pt,%
+ colframe=PLmgray,colback=PLmpurple,colbacktitle=PLmgray,colupper=white,coltitle=white,%
+ titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
+ fonttitle=\bfseries\small\sffamily
+ }
+}
+
+\setKVdefault[fakeTERMnux]{Titre={Terminal UNiX}}
+
+\newcommand\termnuxtitre[1][]{%
+ \restoreKV[fakeTERMnux]
+ \setKV[fakeTERMnux]{#1}
+ \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}}
+ \PLUbuntuWhite~~\PLUbuntuWhite~~\PLUbuntuWhite & \vphantom{p}\useKV[fakeTERMnux]{Titre} & \PLUbuntuMin~~\PLUbuntuMax~~\PLUbuntuClose \\
+ \end{tblr}
+}
+
+\DeclareTCBListing{TerminalUnix}{ O{\linewidth} m !O{} }{%<taille> puis {Titre=...} puis [option]
+ PLtermlinux,title={\termnuxtitre[#2]},%
+ listing only,listing engine=listings,%
+ listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
+ width=#1,#3
+}
+
+%OSX
+\tcbset{PLfaketermosx/.style={%
+ enhanced,boxrule=1pt,arc=6pt,before skip=12pt,after skip=12pt,%
+ colframe=PLosxgray,colback=lightgray!15,colbacktitle=PLosxgray,colupper=black,coltitle=black,%
+ titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
+ fonttitle=\bfseries\small\sffamily
+ }
+}
+
+\newcommand{\PLOSXRed}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[red] (0,0.25em) circle[radius=0.45em] ;
+ \end{tikzpicture}%
+}
+
+\newcommand{\PLOSXOrange}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[orange] (0,0.25em) circle[radius=0.45em] ;
+ \end{tikzpicture}%
+}
+
+\newcommand{\PLOSXGreen}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[ForestGreen] (0,0.25em) circle[radius=0.45em] ;
+ \end{tikzpicture}%
+}
+
+\newcommand{\PLOSXLG}{%
+ \begin{tikzpicture}[thick,anchor=base,baseline]
+ \filldraw[PLosxgray] (0,0.25em) circle[radius=0.45em] ;
+ \end{tikzpicture}%
+}
+
+\setKVdefault[fakeTERMosx]{titre={Terminal OSX}}
+
+\newcommand\termosxtitre[1][]{%
+ \restoreKV[fakeTERMosx]
+ \setKV[fakeTERMosx]{#1}
+ \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}}
+ \PLOSXRed~\PLOSXOrange~\PLOSXGreen & \vphantom{p}\useKV[fakeTERMosx]{Titre} & \PLOSXLG~\PLOSXLG~\PLOSXLG \\
+ \end{tblr}
+}
+
+\DeclareTCBListing{TerminalOSX}{ O{\linewidth} m !O{} }{%<taille> puis {Titre=...} puis [option]
+ PLfaketermosx,title={\termosxtitre[#2]},%
+ listing only,listing engine=listings,%
+ listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
+ width=#1,#3
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex
index f3f00ecd5e..4e0511aa83 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex
@@ -8,6 +8,7 @@
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
+%2.5.9 Ajout d'une clé pour la couleur des nombres
%2.5.8 Modification des marges
%2.5.7 Style alternatif
@@ -21,7 +22,9 @@
Alignement=\def\CODPITalign{#1},%
TaillePolice=\def\CODPITfonte{#1},%
Style=\def\CODPITstyle{#1},%
- Titre=\def\CODPITtitre{#1}
+ Titre=\def\CODPITtitre{#1},%
+ EspacementV=\def\CODPITespV{#1},%
+ CouleurNombres=\def\CODPITcolnb{#1}
}
\setKVdefault[envpiton]{%
@@ -34,14 +37,16 @@
Style=Moderne,%
Cadre=true,%
BarreTitre=true,%
- Titre={{\scriptsize\faCode} Code Python}
+ Titre={{\scriptsize\faCode} Code Python},%
+ EspacementV=\baselineskip,%
+ CouleurNombres=orange
}
%==Style Moderne
\tcbset{stylepiton/.style={%
enhanced,boxrule=1.25pt,%
sharp corners=downhill,arc=12pt,
- before skip=\baselineskip,after skip=\baselineskip,%
+ before skip=\CODPITespV,after skip=\CODPITespV,%
top=\baselineskip,bottom=0mm,left=0.6em,right=5mm,%
attach boxed title to top right={yshift=-\tcboxedtitleheight},
boxed title style={
@@ -60,7 +65,7 @@
\tcbset{thonnystyle/.style={%
enhanced,boxrule=0.75pt,colframe=DarkGray!50!Black,%
sharp corners,top=0mm,bottom=0mm,left=0.4em,right=5mm,%
- before skip=\baselineskip,after skip=\baselineskip,%
+ before skip=\CODPITespV,after skip=\CODPITespV,%
colback=white
}
}
@@ -84,6 +89,7 @@
\useKVdefault[envpiton]%
\setKV[envpiton]{#1}% on paramètres les nouvelles clés et on les simplifie
%------les styles piton
+ \SetPitonStyle{ Number = \color{\CODPITcolnb} }%
\ifboolKV[envpiton]{Lignes}%si lignes=true
{\PitonOptions{left-margin=0.75em,all-line-numbers}}%left-margin=auto,
{}%
@@ -136,7 +142,7 @@
%======CONSOLE PYLUATEX (package à charger manuellement !!)
\tcbset{consolepylua/.style={%base de la boîte
enhanced,colback=white,colframe=ForestGreen,sharp corners,boxrule=1pt,%
- top=1.5mm,bottom=1.5mm,left=2mm,right=2mm,fontupper=\small,%
+ top=1.5mm,bottom=1.5mm,left=2mm,right=2mm,fontupper=\footnotesize,%
before skip=\baselineskip,after skip=\baselineskip,%
}
}
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
new file mode 100644
index 0000000000..270e99e3cc
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
@@ -0,0 +1,748 @@
+% proflycee-tools-probas.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------LOISPROBAS
+%calculs "simples"
+\newcommand\CalcBinomP[3]{%npk
+ \xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}}
+}
+\newcommand\CalcBinomC[4]{%npab
+ \def\BorneInf{#3}\def\BorneSup{#4}
+ \ifthenelse{\equal{#3}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#4}{*}}%
+ {\def\BorneSup{#1}}
+ {}
+ \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}
+}
+\newcommand\CalcGeomP[2]{%pk
+ \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}
+}
+\newcommand\CalcGeomC[3]{%pab
+ \def\BorneInf{#2}\def\BorneSup{#3}
+ \ifthenelse{\equal{#2}{*}}%
+ {\def\BorneInf{1}}
+ {}
+ \ifthenelse{\equal{#3}{*}}%
+ {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}
+ {}
+ \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}
+}
+\newcommand\CalcHypergeomP[4]{%Nnmk
+ \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}
+}
+\newcommand\CalcHypergeomC[5]{%Nnmab
+ \def\BorneInf{#4}\def\BorneSup{#5}
+ \ifthenelse{\equal{#4}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#5}{*}}%
+ {\def\BorneSup{#1}}
+ {}
+ \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}
+}
+\newcommand\CalcPoissP[2]{%lk
+ \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}
+}
+\newcommand\CalcPoissC[3]{%lab
+ \def\BorneInf{#2}\def\BorneSup{#3}
+ \ifthenelse{\equal{#2}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#3}{*}}%
+ {\def\BorneSup{10*#1}}
+ {}
+ \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}
+}
+%utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution
+\xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 :=
+0.0705230784,0.0422820123,0.0092705272,0.0001520143,0.0002765672,0.0000430638;
+\xintdeffloatvar rac2inv := sqrt(2)/2 ;
+\xintdeffloatfunc erfc(x) := % uniquement pour x positif
+((((((a_6*x+a_5)*x+a_4)*x+a_3)*x+a_2)*x+a_1)*x+1)**-16 ; % fin de définition de erfc(x)
+\xintdeffloatfunc Phi(z) := (z>=0)?{1 - 0.5 * erfc(rac2inv * z)}{0.5 * erfc(-rac2inv * z)};
+
+\newcommand\CalcNormC[4]{%msab
+ %def des bornes de l'intervalle suivant l'absence de a ou de b...
+ \def\BorneInf{#3}\def\BorneSup{#4}
+ \ifthenelse{\equal{#3}{*}}%
+ {\def\BorneInf{#4-10*#2}}
+ {}
+ \ifthenelse{\equal{#4}{*}}%
+ {\def\BorneSup{#3+10*#2}}
+ {}
+ \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}
+}
+%calculs "simples" fiabilite
+\newcommand\CalcExpoC[3]{%lab
+ \def\BorneInf{#2}\def\BorneSup{#3}
+ \ifthenelse{\equal{#2}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#3}{*}}%
+ {\def\BorneSup{100/#1}}
+ {}
+ \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}
+}
+
+%calculs formatés
+\NewDocumentCommand{\BinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\BinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b
+ \def\BorneInf{#5}\def\BorneSup{#6}
+ \ifthenelse{\equal{#5}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#6}{*}}%
+ {\def\BorneSup{#3}}
+ {}
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\GeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\GeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b
+ \def\BorneInf{#4}\def\BorneSup{#5}
+ \ifthenelse{\equal{#4}{*}}%
+ {\def\BorneInf{1}}
+ {}
+ \ifthenelse{\equal{#5}{*}}%
+ {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}
+ {}
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\HypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\HypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b
+ \def\BorneInf{#6}\def\BorneSup{#7}
+ \ifthenelse{\equal{#6}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#7}{*}}%
+ {\def\BorneSup{#3}}
+ {}
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\PoissonP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\PoissonC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
+ \def\BorneInf{#4}\def\BorneSup{#5}
+ \ifthenelse{\equal{#4}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#5}{*}}%
+ {\def\BorneSup{10*#3}}
+ {}
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\NormaleC}{ s O{3} m m m m }{%
+ %*=ing,2=prec,3=mu,4=sigma,5=a,6=b
+ %def des bornes de l'intervalle suivant l'absence de a ou de b...
+ \def\BorneInf{#5}\def\BorneSup{#6}
+ \ifthenelse{\equal{#5}{*}}%
+ {\def\BorneInf{#6-10*#4}}
+ {}
+ \ifthenelse{\equal{#6}{*}}%
+ {\def\BorneSup{#5+10*#4}}
+ {}
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
+ }
+}
+
+\NewDocumentCommand{\ExpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
+ \def\BorneInf{#4}\def\BorneSup{#5}
+ \ifthenelse{\equal{#4}{*}}%
+ {\def\BorneInf{0}}
+ {}
+ \ifthenelse{\equal{#5}{*}}%
+ {\def\BorneSup{100/#3}}
+ {}
+ \IfBooleanTF{#1}%
+ {%
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}
+ }%
+ {%
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}}
+ }
+}
+
+%%------ARBRESPROBAS
+\defKV[PLTIKZARBRE]{%
+ Unite=\def\PLAPunite{#1},%
+ EspaceNiveau=\def\PLAPespniv{#1},%
+ EspaceFeuille=\def\PLAPespfeuille{#1},%
+ Type=\def\PLAPtype{#1},%
+ Police=\def\PLAPfont{#1},%
+ PoliceProbas=\def\PLAPfontproba{#1},%
+ StyleTrait=\def\PLAPtypetrait{#1},%
+ EpaisseurTrait=\def\PLAPeptrait{#1}
+}
+
+\setKVdefault[PLTIKZARBRE]{%
+ Unite=1cm,%
+ EspaceNiveau=3.25,%
+ EspaceFeuille=1,%
+ Type=2x2,%
+ Police=\normalfont\normalsize,%
+ PoliceProbas=\normalfont\small,%
+ InclineProbas=true,%
+ Fleche=false,%
+ StyleTrait={},%
+ EpaisseurTrait=semithick
+}
+
+\NewDocumentCommand\ArbreProbasTikz{ O{} m }{%1=options,2=libellés
+ \useKVdefault[PLTIKZARBRE]%
+ \setKV[PLTIKZARBRE]{#1}%
+ \setsepchar[.]{,./}%
+ \readlist*\PLARBREDONNES{#2}%
+ \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite]
+ %styles
+ \tikzstyle{noeud} = [font=\PLAPfont]
+ \tikzstyle{probas}= [font=\PLAPfontproba]
+ \ifboolKV[PLTIKZARBRE]{InclineProbas}
+ {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]}
+ {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]}
+ \ifboolKV[PLTIKZARBRE]{Fleche}
+ {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]}
+ {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]}
+ %arbre2x2
+ \IfEq{\PLAPtype}{2x2}
+ {%
+ \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (A12)--(A23) ;}
+ {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ }{}
+ %arbre3x2
+ \IfEq{\PLAPtype}{3x2}
+ {%
+ %sommets
+ \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
+ \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
+ \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
+ %branches
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (A12)--(A23) ;}
+ {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[7,2]}
+ {\draw[PLfleche] (R)--(A13) ;}
+ {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[8,2]}
+ {\draw[PLfleche] (A13)--(A25) ;}
+ {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[9,2]}
+ {\draw[PLfleche] (A13)--(A26) ;}
+ {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
+ }{}
+ %arbre2x3
+ \IfEq{\PLAPtype}{2x3}
+ {%
+ %sommets
+ \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
+ \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
+ %branches
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (A11)--(A23) ;}
+ {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[7,2]}
+ {\draw[PLfleche] (A12)--(A25) ;}
+ {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[8,2]}
+ {\draw[PLfleche] (A12)--(A26) ;}
+ {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
+ }{}
+ %arbre2x3
+ \IfEq{\PLAPtype}{3x3}
+ {%
+ %sommets
+ \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
+ \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
+ \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
+ \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]};
+ \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]};
+ %branches
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[9,2]}
+ {\draw[PLfleche] (R)--(A13) ;}
+ {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
+ %N2
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (A11)--(A23) ;}
+ {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[7,2]}
+ {\draw[PLfleche] (A12)--(A25) ;}
+ {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[8,2]}
+ {\draw[PLfleche] (A12)--(A26) ;}
+ {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[10,2]}
+ {\draw[PLfleche] (A13)--(A27) ;}
+ {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[11,2]}
+ {\draw[PLfleche] (A13)--(A28) ;}
+ {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[12,2]}
+ {\draw[PLfleche] (A13)--(A29) ;}
+ {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;}
+ }{}
+ \end{tikzpicture}
+}
+
+\NewDocumentEnvironment{EnvArbreProbasTikz}{ O{} m }%1=options,2=libellés
+{
+ \useKVdefault[PLTIKZARBRE]
+ \setKV[PLTIKZARBRE]{#1}
+ \setsepchar[.]{,./}%
+ \readlist*\PLARBREDONNES{#2}
+ \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite]
+ %styles
+ \tikzstyle{noeud} = [font=\PLAPfont]
+ \tikzstyle{probas}= [font=\PLAPfontproba]
+ \ifboolKV[PLTIKZARBRE]{InclineProbas}
+ {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]}
+ {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]}
+ \ifboolKV[PLTIKZARBRE]{Fleche}
+ {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]}
+ {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]}
+ %arbre2x2
+ \IfEq{\PLAPtype}{2x2}
+ {%
+ \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (A12)--(A23) ;}
+ {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ }{}
+ %arbre3x2
+ \IfEq{\PLAPtype}{3x2}
+ {%
+ %sommets
+ \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
+ \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
+ \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
+ %branches
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (A12)--(A23) ;}
+ {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[7,2]}
+ {\draw[PLfleche] (R)--(A13) ;}
+ {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[8,2]}
+ {\draw[PLfleche] (A13)--(A25) ;}
+ {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[9,2]}
+ {\draw[PLfleche] (A13)--(A26) ;}
+ {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
+ }{}
+ %arbre2x3
+ \IfEq{\PLAPtype}{2x3}
+ {%
+ %sommets
+ \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
+ \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
+ %branches
+ \ifstrempty{\PLARBREDONNES[1,2]}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (A11)--(A23) ;}
+ {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[7,2]}
+ {\draw[PLfleche] (A12)--(A25) ;}
+ {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[8,2]}
+ {\draw[PLfleche] (A12)--(A26) ;}
+ {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
+ }{}
+ %arbre2x3
+ \IfEq{\PLAPtype}{3x3}
+ {%
+ %sommets
+ \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ;
+ \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
+ \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
+ \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
+ \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
+ \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
+ \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
+ \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
+ \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
+ \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
+ \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
+ \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]};
+ \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]};
+ %branches
+ \ifstrempty{\PLARBREDONNES[1,2]}{}
+ {\draw[PLfleche] (R)--(A11) ;}
+ {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[5,2]}{}
+ {\draw[PLfleche] (R)--(A12) ;}
+ {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[9,2]}{}
+ {\draw[PLfleche] (R)--(A13) ;}
+ {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
+ %N2
+ \ifstrempty{\PLARBREDONNES[2,2]}
+ {\draw[PLfleche] (A11)--(A21) ;}
+ {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[3,2]}
+ {\draw[PLfleche] (A11)--(A22) ;}
+ {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[4,2]}
+ {\draw[PLfleche] (A11)--(A23) ;}
+ {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[6,2]}
+ {\draw[PLfleche] (A12)--(A24) ;}
+ {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[7,2]}
+ {\draw[PLfleche] (A12)--(A25) ;}
+ {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[8,2]}
+ {\draw[PLfleche] (A12)--(A26) ;}
+ {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[10,2]}
+ {\draw[PLfleche] (A13)--(A27) ;}
+ {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[11,2]}
+ {\draw[PLfleche] (A13)--(A28) ;}
+ {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;}
+ \ifstrempty{\PLARBREDONNES[12,2]}
+ {\draw[PLfleche] (A13)--(A29) ;}
+ {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;}
+ }{}
+ }
+ {
+ \end{tikzpicture}
+}
+
+%%------SCHEMASPROBAS
+%densites utiles
+\def\densnorm#1{1/(sqrt(2*pi))*exp(-0.5*(#1*#1))}
+\def\densexpo#1{exp(-#1)}
+
+\defKV[GRPHPROBCONTINUES]{%
+ CouleurAire=\def\GRPHPROBcoulsurf{#1},%
+ CouleurCourbe=\def\GRPHPROBcoulcbe{#1},%
+ Largeur=\def\GRPHPROBlarg{#1},%
+ Hauteur=\def\GRPHPROBhauteur{#1}
+}
+
+\setKVdefault[GRPHPROBCONTINUES]{%
+ CouleurAire=LightGray,%
+ CouleurCourbe=red,%
+ Largeur=2,%
+ Hauteur=1,%
+ AfficheM=true,%
+ AfficheCadre=true
+}
+
+\NewDocumentCommand\LoiNormaleGraphe{ O{} D<>{} m m m m }{%1=options,2=optionstikz,3=m,4=s,5=a,6=b
+ %simplekv
+ \useKVdefault[GRPHPROBCONTINUES]%
+ \setKV[GRPHPROBCONTINUES]{#1}%
+ %unites
+ \def\UNITEX{\fpeval{\GRPHPROBlarg/8}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/0.5}}%
+ %bornes
+ \def\BorneInf{\fpeval{(#5-#3)/#4}}\def\BorneSup{\fpeval{(#6-#3)/#4}}%
+ \ifthenelse{\equal{#5}{*}}{\def\BorneInf{-4}}{}%
+ \ifthenelse{\equal{#6}{*}}{\def\BorneSup{4}}{}%
+ %tikzpicture
+ \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2]
+ \ifboolKV[GRPHPROBCONTINUES]{AfficheM}%
+ {\draw (0,-0.0375) node[font=\tiny,scale={2*\UNITEX}] {#3} ;}
+ {}
+ \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}%
+ {\draw[Gray] (-4,-0.075) rectangle (4,0.425) ;}
+ {}
+ \clip (-4,-0.075) rectangle (4,0.425) ;
+ \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{\densnorm{\x}}) -- ({\BorneSup},0) -- cycle;
+ \draw[thick,->,>=latex] (-4,0)--(4,0) ;
+ \draw[thick,densely dotted] (0,0)--(0,0.39894) ;
+ \draw[thick,domain=-4:4,samples=100,\GRPHPROBcoulcbe] plot (\x,{\densnorm{\x}}) ;
+ \end{tikzpicture}
+}
+
+\NewDocumentCommand\LoiExpoGraphe{ O{} D<>{} m m m }{%1=options,2=optionstikz,3=l,4=a,5=b
+ %simplekv
+ \useKVdefault[GRPHPROBCONTINUES]%
+ \setKV[GRPHPROBCONTINUES]{#1}%
+ %unites
+ \def\UNITEX{\fpeval{\GRPHPROBlarg/4}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/1}}%
+ \def\MOYENNE{\fpeval{trunc(1/#3,0)}}%
+ %bornes
+ \def\BorneInf{\fpeval{#3*#4}}\def\BorneSup{\fpeval{#3*#5}}%
+ \ifthenelse{\equal{#4}{*}}{\def\BorneInf{0}}{}%
+ \ifthenelse{\equal{#5}{*}}{\def\BorneSup{4}}{}%
+ %tikzpicture
+ \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2]
+ \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}%
+ {\draw[Gray] (-0.2,-0.15) rectangle (3.8,0.85) ;}
+ {}
+ \clip (-0.2,-0.15) rectangle (3.8,0.85) ;
+ \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{0.7*\densexpo{\x}}) -- ({\BorneSup},0) -- cycle;
+ \ifboolKV[GRPHPROBCONTINUES]{AfficheM}%
+ {\draw (1,-0.075) node[font=\tiny,scale={\UNITEX}] {\MOYENNE} ;
+ \draw[thick,densely dotted] (1,0)--(1,{0.7*\densexpo{1}}) ;}
+ {}
+ \draw[thick,->,>=latex] (-0.2,0)--(3.8,0) ;
+ \draw[thick,->,>=latex] (0,-0.15)--(0,0.85) ;
+ \draw[thick,domain=0:3.8,samples=100,\GRPHPROBcoulcbe] plot (\x,{0.7*\densexpo{\x}}) ;
+ \end{tikzpicture}
+}
+
+%%------aNp/Cnp
+\NewDocumentCommand\CalculAnp{ m m }{%avec et pour xint, p/n
+ pfactorial(#2-#1,#2)
+}
+
+\NewDocumentCommand\CalculCnp{ m m }{%avec et pour xint, p/n
+ binomial(#2,#1)
+}
+
+\setKVdefault[anpCnp]{%
+ Formule=false,%
+ Notation=false,%
+ NotationAncien=false
+}
+\NewDocumentCommand\Arrangement{ s O{} m m }{%p/n
+ \useKVdefault[anpCnp]%
+ \setKV[anpCnp]{#2}%
+ \ifboolKV[anpCnp]{Notation}{A_{#4}^{#3}=}{}%
+ \ifboolKV[anpCnp]{Formule}{\frac{#4!}{\inteval{#4-#3}!}=}{}%
+ \IfBooleanTF{#1}%
+ {\xinteval{\CalculAnp{#3}{#4}}}%non formaté
+ {\num{\xinteval{\CalculAnp{#3}{#4}}}}%formaté
+}
+\NewDocumentCommand\Combinaison{ s O{} m m }{%p/n
+ \useKVdefault[anpCnp]%
+ \setKV[anpCnp]{#2}%
+ \ifboolKV[anpCnp]{Notation}{\binom{#4}{#3} =}{}%
+ \ifboolKV[anpCnp]{NotationAncien}{C_{#4}^{#3}=}{}%
+ \ifboolKV[anpCnp]{Formule}{\frac{#4!}{#3! \times \inteval{#4-#3}!}=}{}%
+ \IfBooleanTF{#1}%
+ {\xinteval{\CalculCnp{#3}{#4}}}%non formaté
+ {\num{\xinteval{\CalculCnp{#3}{#4}}}}%formaté
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-recreat.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-recreat.tex
new file mode 100644
index 0000000000..c44d144633
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-recreat.tex
@@ -0,0 +1,246 @@
+% proflycee-tools-recreat.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------FENÊTRE CALCUL FORMEL
+\newcommand\CFchap{\textasciicircum}
+\newcounter{CFnum}
+%def des clés
+\defKV[paramfenxcas]{%
+ Largeur=\def\CFlarg{#1},%
+ EspaceLg=\def\CFesplg{#1},%
+ PremCol=\def\CFpremcol{#1},%
+ HautPremCol=\def\CFhpremcol{#1},%
+ Taille=\def\CFtaille{#1},%
+ Couleur=\def\CFcouleur{#1},%
+ TailleTitre=\def\CFtailletitre{#1},%
+ CouleurCmd=\def\CFcoulcmd{#1},%
+ CouleurRes=\def\CFcoulres{#1},%
+ PosCmd=\def\CFposcmd{#1},%
+ PosRes=\def\CFposres{#1},%
+ LabelTitre=\def\CFlabeltitre{#1}%
+}
+\setKVdefault[paramfenxcas]{%
+ Largeur=16,EspaceLg=2pt,PremCol=0.3,HautPremCol=0.4,%
+ Couleur=darkgray,Menu=true,Titre=false,TailleTitre=\normalsize,Taille=\normalsize,%
+ Sep=true,PosRes=centre,PosCmd=gauche,%
+ CouleurCmd=red,CouleurRes=blue,%
+ LabelTitre={Résultats obtenus avec un logiciel de Calcul Formel}%
+}
+
+\newcommand\CalculFormelParametres[1][]{%
+ \setcounter{CFnum}{0}
+ \useKVdefault[paramfenxcas]%
+ \setKV[paramfenxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
+}
+
+\defKV[paramlgxcas]{%
+ HautCmd=\def\CFhle{#1},%
+ HautRes=\def\CFhlr{#1}
+}
+\setKVdefault[paramlgxcas]{%
+ HautCmd=0.75,%
+ HautRes=0.75
+}
+
+\newcommand\CalculFormelLigne[3][]{%
+ \addtocounter{CFnum}{1}
+ \def\CFL{\theCFnum}%
+ \def\CFLA{\inteval{\CFL-1}}%
+ \useKVdefault[paramlgxcas]%
+ \setKV[paramlgxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \def\CFLA{\inteval{\CFL-1}}%
+ %DÉCLARATION DES NŒUDS (les "6" coins des lignes commande et résultat)
+ \xintifboolexpr{\CFL == 1}%si c'est la première ligne
+ {\coordinate (A0\CFL) at (0,0);}
+ {\coordinate (A0\CFL) at ($(A2\CFLA) + (0,{-\CFesplg})$);}
+ \coordinate (A1\CFL) at ($(A0\CFL) + (0,{-\CFhle})$);
+ \coordinate (A2\CFL) at ($(A1\CFL) + (0,{-\CFhlr})$);
+ \coordinate (A3\CFL) at ($(A0\CFL) + ({\CFlarg},0)$);
+ \coordinate (A4\CFL) at ($(A1\CFL) + ({\CFlarg},0)$);
+ \coordinate (A5\CFL) at ($(A2\CFL) + ({\CFlarg},0)$);
+ %DÉCLARATION DES NŒUDS INTERMÉDIAIRES (pour les commandes et les résultats)
+ \coordinate (C1\CFL) at ($(A0\CFL) + (0,{-0.5*\CFhle})$);
+ \coordinate (C2\CFL) at ($(A0\CFL) + ({0.5*\CFlarg},{-0.5*\CFhle})$);
+ \coordinate (C3\CFL) at ($(A0\CFL) + ({\CFlarg},{-0.5*\CFhle})$);
+ \coordinate (R1\CFL) at ($(A1\CFL) + (0,{-0.5*\CFhlr})$);
+ \coordinate (R2\CFL) at ($(A1\CFL) + ({0.5*\CFlarg},{-0.5*\CFhlr})$);
+ \coordinate (R3\CFL) at ($(A1\CFL) + ({\CFlarg},{-0.5*\CFhlr})$);
+ %RECTANGLE DE BASE
+ \draw[\CFcouleur] (A0\CFL) rectangle (A5\CFL) ;
+ %LA COMMANDE EN ROUGE
+ \IfStrEq{\CFposcmd}{centre}%si poscmd=center
+ {\draw (C2\CFL) node[\CFcoulcmd,font=\CFtaille] {#2} ;}
+ {}
+ \IfStrEq{\CFposcmd}{gauche}%si poscmd=left
+ {\draw (C1\CFL) node[right,\CFcoulcmd,font=\CFtaille] {#2} ;}
+ {}
+ \IfStrEq{\CFposcmd}{right}%si poscmd=right
+ {\draw (C3\CFL) node[left,\CFcoulcmd,font=\CFtaille] {#2} ;}
+ {}
+ %LE RÉSULTAT
+ \IfStrEq{\CFposres}{centre}%si posrep=center
+ {\draw (R2\CFL) node[\CFcoulres,font=\CFtaille] {#3} ;}
+ {}
+ \IfStrEq{\CFposres}{gauche}%si posrep=left
+ {\draw (R1\CFL) node[right,\CFcoulres,font=\CFtaille] {#3} ;}
+ {}
+ \IfStrEq{\CFposres}{right}%si posrep=right
+ {\draw (R3\CFL) node[left,\CFcoulres,font=\CFtaille] {#3} ;}
+ {}
+ \ifboolKV[paramfenxcas]{Sep}%si sep=true
+ {\draw[\CFcouleur] (A1\CFL) -- (A4\CFL);}%
+ {}
+ %LE PETIT NUMÉRO
+ \draw[\CFcouleur] (A0\CFL) rectangle ++ ({-\CFpremcol},{-\CFhpremcol}) node[\CFcouleur,midway,font=\small\sffamily\bfseries] {\CFL} ;
+ %LE RECTANGLE "MENU"
+ \ifboolKV[paramfenxcas]{Menu}%si menu=true
+ {\draw[\CFcouleur,fill=\CFcouleur!25] (A5\CFL) rectangle ++ (-0.65,0.25) node[black,midway,font=\tiny\sffamily\bfseries] {MENU} ;}%
+ {}
+ %LE BLOC "TITRE"
+ \ifboolKV[paramfenxcas]{Titre}%si titre=true
+ {\draw[\CFcouleur,fill=lightgray!25,rounded corners] ($(A01) + (0,2pt)$) rectangle ++ ($({\CFlarg},2em)$) node[ForestGreen!50!\CFcouleur,midway,font=\CFtailletitre\ttfamily\bfseries] {\CFlabeltitre};}
+ {}
+}
+
+%%------CartoucheCapytale
+\definecolor{vertcapyt}{rgb}{0.0,0.5,0.0}
+%\definecolor{vertcapyt}{HTML}{008000}
+\DeclareTotalTCBox{\CartoucheCapytale}{ s O{} m }
+ {enhanced,size=fbox,on line,arc=3pt,colback=vertcapyt,colframe=vertcapyt,fontupper=\IfBooleanTF{#1}{\ttfamily}{\sffamily}\bfseries,colupper=white}%
+ {#3#2~{\scriptsize\faLink}}
+
+%%------SUDOMATHS
+\defKV[PLTIKZSUDOM]{%
+ CouleurTexte=\def\PLSMcoultexte{#1},%
+ Epaisseur=\def\PLSMepf{#1},%
+ Epaisseurg=\def\PLSMepg{#1},%
+ Unite=\def\PLSMunite{#1},%
+ CouleurCase=\def\PLSMcoulcase{#1},%
+ NbCol=\def\PLSMnbcol{#1},%
+ NbSubCol=\def\PLSMnbsubcol{#1},%
+ NbLig=\def\PLSMnblig{#1},%
+ NbSubLig=\def\PLSMnbsublig{#1},%
+ Police=\def\PLSMfonte{#1},%
+ PoliceLeg=\def\PLSMfonteleg{#1},%
+ ListeLegV=\def\PLSMlistelegv{#1},%
+ ListeLegH=\def\PLSMlistelegh{#1},%
+ DecalLegende=\def\PLSMdecalleg{#1}
+}
+
+\setKVdefault[PLTIKZSUDOM]{%
+ Epaisseurg=1.5pt,%
+ Epaisseur=0.5pt,%
+ Unite=1cm,%
+ CouleurCase=LightBlue!50,%
+ CouleurTexte=blue,%
+ NbCol=9,%
+ NbSubCol=3,%
+ NbLig=9,%
+ NbSubLig=3,
+ Police=\normalfont\normalsize,%
+ PoliceLeg=\normalfont\sffamily,%
+ Legendes=true,%
+ ListeLegV=ABCDEFGHIJKLMNOPQRSTUVWXYZ,%
+ ListeLegH=abcdefghijklmnopqrstuvwxyz,%
+ DecalLegende=0.45
+}
+
+\NewDocumentEnvironment{EnvSudoMaths}{ O{} m }
+ {
+ \useKVdefault[PLTIKZSUDOM]
+ \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %calculs intermédiaires
+ \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}}
+ \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}}
+ %lecture liste
+ \IfEq{#2}{}{}%
+ {%
+ \setsepchar[.]{§./}%
+ \readlist*\SPGrilleSudoMaths{#2}%
+ }
+ %débt envtik
+ \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter]
+ %cases
+ \IfEq{#2}{}{}%
+ {%
+ \foreach \i in {1,2,...,\PLSMnblig}{%
+ \foreach \j in {1,2,...,\PLSMnbcol}{%
+ \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase
+ \IfSubStr{\SMcase}{*}%si on veut colorier via *
+ {%
+ \StrDel{\SMcase}{*}[\SMcaseb]%
+ \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;%
+ }
+ {%
+ \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;%
+ }
+ }
+ }%
+ }
+ %grilles
+ \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ;
+ \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
+ \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
+ %légendes
+ \ifboolKV[PLTIKZSUDOM]{Legendes}
+ {%
+ \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;}
+ \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;}
+ }{}
+ }
+ {
+ \end{tikzpicture}
+ }
+
+\NewDocumentCommand\SudoMaths{ O{} m }{%
+ \useKVdefault[PLTIKZSUDOM]
+ \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %calculs intermédiaires
+ \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}}
+ \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}}
+ %lecture liste
+ \IfEq{#2}{}{}%
+ {%
+ \setsepchar[.]{§./}%
+ \readlist*\SPGrilleSudoMaths{#2}%
+ }
+ %débt envtik
+ \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter]
+ %cases
+ \IfEq{#2}{}{}%
+ {%
+ \foreach \i in {1,2,...,\PLSMnblig}{%
+ \foreach \j in {1,2,...,\PLSMnbcol}{%
+ \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase
+ \IfSubStr{\SMcase}{*}%si on veut colorier via *
+ {%
+ \StrDel{\SMcase}{*}[\SMcaseb]%
+ \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;%
+ }
+ {%
+ \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;%
+ }
+ }
+ }%
+ }
+ %grilles
+ \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ;
+ \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
+ \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
+ %légendes
+ \ifboolKV[PLTIKZSUDOM]{Legendes}
+ {%
+ \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;}
+ \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;}
+ }{}
+ \end{tikzpicture}
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
new file mode 100644
index 0000000000..cc57e1fbf9
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
@@ -0,0 +1,198 @@
+% proflycee-tools-stats.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------RegressionLinéaire
+%calcul des paramètres
+\defKV[coeffreglin]{%
+ NomCoeffa=\def\RegLinCoeffa{#1},%
+ NomCoeffb=\def\RegLinCoeffb{#1},%
+ NomCoeffr=\def\RegLinCoeffr{#1},%
+ NomCoeffrd=\def\RegLinCoeffrd{#1},%
+ NomXmin=\def\RegLinCoeffXmin{#1},%
+ NomXmax=\def\RegLinCoeffXmax{#1}
+}
+
+\setKVdefault[coeffreglin]{%
+ NomCoeffa=COEFFa,%
+ NomCoeffb=COEFFb,%
+ NomCoeffr=COEFFr,%
+ NomCoeffrd=COEFFrd,%
+ NomXmin=LXmin,%
+ NomXmax=LXmax
+}
+
+\newcommand\CalculsRegLin[3][]{%
+ \useKVdefault[coeffreglin]%
+ \setKV[coeffreglin]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %xmin et xmax
+ \expandafter\def\csname\RegLinCoeffXmin\endcsname{\fpeval{min(#2)}}
+ \expandafter\def\csname\RegLinCoeffXmax\endcsname{\fpeval{max(#2)}}
+ %listes des données
+ \def\xliste{#2}
+ \def\yliste{#3}
+ \readlist*\LX{\xliste}
+ \readlist*\LY{\yliste}
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}
+ %somme des LX et des LY OK
+ \xdef\LXSomme{0}
+ \xdef\LYSomme{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LXSomme{\fpeval{\LXSomme+\LX[\i]}}
+ }
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LYSomme{\fpeval{\LYSomme+\LY[\i]}}
+ }
+ %moyenne des LX et des LY OK
+ \xdef\LXmoy{\fpeval{\LXSomme/\LNB}}
+ \xdef\LYmoy{\fpeval{\LYSomme/\LNB}}
+ %variance des LX et des LY OK
+ \xdef\LXvar{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LXvar{\fpeval{\LXvar+(\LX[\i]-\LXmoy)*(\LX[\i]-\LXmoy)}}
+ }
+ \xdef\LXvar{\fpeval{\LXvar/\LNB}}
+ \xdef\LYvar{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LYvar{\fpeval{\LYvar+(\LY[\i]-\LYmoy)*(\LY[\i]-\LYmoy)}}
+ }
+ \xdef\LYvar{\fpeval{\LYvar/\LNB}}
+ %covariance des XY OK
+ \xdef\LXYvar{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LXYvar{\fpeval{\LXYvar+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}
+ }
+ \xdef\LXYvar{\fpeval{\LXYvar/\LNB}}
+ %COEFFS OK
+ \expandafter\def\csname\RegLinCoeffa\endcsname{\fpeval{\LXYvar/\LXvar}}
+ \expandafter\def\csname\RegLinCoeffb\endcsname{\fpeval{\LYmoy-\csname\RegLinCoeffa\endcsname*\LXmoy}}
+ \expandafter\def\csname\RegLinCoeffr\endcsname{\fpeval{\LXYvar/sqrt(\LXvar*\LYvar)}}
+ \expandafter\def\csname\RegLinCoeffrd\endcsname{\fpeval{\csname\RegLinCoeffr\endcsname*\csname\RegLinCoeffr\endcsname}}
+}
+
+%pour un nuage en TiKz
+\defKV[nuagereglin]{%
+ Couleur=\def\RegLinNuageCouleur{#1},%
+ Taille=\def\RegLinNuageTaille{#1},
+ Ox=\def\RegLinNuageOx{#1},%
+ Oy=\def\RegLinNuageOy{#1},%
+}
+
+\setKVdefault[nuagereglin]{%
+ Couleur=teal,%
+ Taille=2pt,%
+ Ox=0,%
+ Oy=0
+}
+
+\newcommand\PointsRegLin[3][]{%
+ \useKVdefault[nuagereglin]
+ \setKV[nuagereglin]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \def\xliste{#2}
+ \def\yliste{#3}
+ \readlist*\LX{\xliste}
+ \readlist*\LY{\yliste}
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}
+ \foreach \i in {1,2,...,\LNB} {\filldraw[\RegLinNuageCouleur] ({\LX[\i]-\RegLinNuageOx},{\LY[\i]-\RegLinNuageOy}) circle[radius=\RegLinNuageTaille] ;}
+}
+
+\NewDocumentEnvironment{StatsTikz}{ O{} }
+{%
+ \begin{tikzpicture}[#1]
+ }%
+ {%
+ \end{tikzpicture}%
+}
+
+%%------BOITES MOUSTACHES
+\defKV[boiteamoustaches]{%
+ Couleur=\def\BaMCouleur{#1},%
+ Elevation=\def\BaMElevation{#1},%
+ Hauteur=\def\BaMHauteur{#1},%
+ Moyenne=\def\BaMMoyenne{#1},%
+ Epaisseur=\def\BaMEpaisseur{#1},%
+ Remplir=\def\BaMRemplissage{#1}
+}
+
+\setKVdefault[boiteamoustaches]{%
+ Couleur=black,%
+ Elevation=1,%
+ Hauteur=1,%
+ AffMoyenne=false,%
+ Epaisseur=thick,%
+ Pointilles=false,%
+ Valeurs=false,%
+ Remplir=white
+}
+
+\defKV[boiteamoustachesaxe]{%
+ Min=\def\BaMAxeMin{#1},%
+ Max=\def\BaMAxeMax{#1},%
+ Elargir=\def\BaMAxeElarg{#1},%
+ Epaisseur=\def\BaMAxeEpaisseur{#1},%
+ Valeurs=\def\BaMAxeValeurs{#1}
+}
+
+\setKVdefault[boiteamoustachesaxe]{%
+ Elargir=0.05,%
+ Epaisseur=thick,%
+ AffValeurs=false
+}
+
+\newcommand\BoiteMoustachesAxe[1][]{
+ \useKVdefault[boiteamoustachesaxe]
+ \setKV[boiteamoustachesaxe]{#1}
+ \def\BaMaxelargeur{\fpeval{\BaMAxeMax-\BaMAxeMin}}
+ \def\BaMaxexmin{\fpeval{\BaMAxeMin-\BaMAxeElarg*\BaMaxelargeur}}
+ \def\BaMaxexmax{\fpeval{\BaMAxeMax+\BaMAxeElarg*\BaMaxelargeur}}
+ \draw[\BaMAxeEpaisseur,->,>=latex] (\BaMaxexmin,0) -- (\BaMaxexmax,0) ;
+ \ifboolKV[boiteamoustachesaxe]{AffValeurs}
+ {\foreach \x in \BaMAxeValeurs \draw[\BaMAxeEpaisseur] (\x,3pt)--(\x,-3pt) node[below=3pt] {\num{\x}} ;}
+ {}
+}
+
+\newcommand\BoiteMoustaches[2][]{
+ \useKVdefault[boiteamoustaches]
+ \setKV[boiteamoustaches]{#1}
+ \setsepchar[.]{/}%
+ \readlist*\BaMListeparams{#2}%
+ \itemtomacro\BaMListeparams[1]\BaMmin%
+ \itemtomacro\BaMListeparams[2]\BaMqu%
+ \itemtomacro\BaMListeparams[3]\BaMmed%
+ \itemtomacro\BaMListeparams[4]\BaMqt%
+ \itemtomacro\BaMListeparams[5]\BaMmax%
+ \draw[draw,\BaMEpaisseur,\BaMCouleur,fill=\BaMRemplissage] ({\BaMqu},{\BaMElevation-0.5*\BaMHauteur}) rectangle ({\BaMqt},{\BaMElevation+0.5*\BaMHauteur}) ;
+ \draw[\BaMEpaisseur,\BaMCouleur] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmin,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmax,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmax,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmed,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmed,{\BaMElevation+0.5*\BaMHauteur});
+ \draw[\BaMEpaisseur,\BaMCouleur] ({\BaMmin},{\BaMElevation})--({\BaMqu},{\BaMElevation}) ({\BaMqt},{\BaMElevation})--({\BaMmax},{\BaMElevation}) ;
+ \ifboolKV[boiteamoustaches]{AffMoyenne}
+ {\filldraw[\BaMCouleur] ({\BaMMoyenne},{\BaMElevation}) circle[radius=2.5pt] ;}
+ {}
+ \ifboolKV[boiteamoustaches]{Pointilles}
+ {
+ \draw[\BaMEpaisseur,densely dashed] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmin,0) ;
+ \draw[\BaMEpaisseur,densely dashed] (\BaMqu,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqu,0) ;
+ \draw[\BaMEpaisseur,densely dashed] (\BaMmed,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmed,0) ;
+ \draw[\BaMEpaisseur,densely dashed] (\BaMqt,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqt,0) ;
+ \draw[\BaMEpaisseur,densely dashed] (\BaMmax,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmax,0) ;
+ }
+ {}
+ \ifboolKV[boiteamoustaches]{Valeurs}
+ {
+ \filldraw (\BaMmin,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmin}} ;
+ \filldraw (\BaMqu,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqu}} ;
+ \filldraw (\BaMmed,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmed}} ;
+ \filldraw (\BaMqt,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqt}} ;
+ \filldraw (\BaMmax,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmax}} ;
+ }
+ {}
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-suites.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-suites.tex
new file mode 100644
index 0000000000..5cdd3234e3
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-suites.tex
@@ -0,0 +1,213 @@
+% proflycee-tools-suites.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------CabWeb
+\defKV[webrecurr]{%
+ Fct=\def\PLRecurfct{#1},%
+ Nom=\def\PLRecurnom{#1},%
+ No=\def\PLRecurno{#1},%
+ Nb=\def\PLRecurnb{#1},%
+ Uno=\def\PLRecuruno{#1},%
+ PosLabel=\def\PLRecurposlab{#1},%
+ DecalLabel=\def\PLRecuroffset{#1},%
+ TailleLabel=\def\PLRecurlabelsize{#1}
+}
+
+\setKVdefault[webrecurr]{
+ No=0,%
+ Nom=u,%
+ Nb=5,%
+ AffTermes=true,%
+ PosLabel=below,%
+ DecalLabel=6pt,%
+ TailleLabel=\small
+}
+
+\NewDocumentCommand\ToileRecurrence{ O{} O{thick,color=magenta} O{dotted} }{
+ %<clés> + <style cabweb> + <style supplémentaire pointillés>
+ \useKVdefault[webrecurr]%
+ \setKV[webrecurr]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \foreach \i [remember=\i as \x (initially \PLRecuruno)] in {1,...,\PLRecurnb}{%
+ \def\y{\fpeval{\PLRecurfct}}
+ %test de la position courbe / bissectrice ?
+ \ifnum \i=1
+ \newdimen \X
+ \newdimen \Y
+ \X = \x pt
+ \Y = \y pt
+ \ifdim \Y < \X
+ \draw[#2] (\x,\y)--(\y,\y) ;
+ \else
+ \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ;
+ \fi
+ \else
+ \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ;
+ \fi
+ \ifboolKV[webrecurr]{AffTermes}
+ {\def\indice{\fpeval{\i+\PLRecurno-1}}
+ \draw[#2,#3] (\x,\y)--(\x,0) node[\PLRecurposlab=\PLRecuroffset,font=\PLRecurlabelsize]{$\PLRecurnom_\indice$};}
+ {}
+ \def\i{\fpeval{\y}}%
+ }
+}
+
+%%------CALCSRECUR
+\NewDocumentCommand\CalculInterneTermeRecurrence{ m m m m }{%pas forcément utile
+ \xintdeffloatfunc varfctrecur(x) := #1 ;%
+ \xdef\vartmp{#3}%
+ \IfEq{#4}{\inteval{#2+1}}%
+ {\xdef\vartmp{\xintfloateval{varfctrecur(\vartmp)}}}%
+ {%
+ \foreach \i in {1,2,...,\inteval{#4-#2}}%
+ {\xdef\vartmp{\xintfloateval{varfctrecur(\vartmp)}}}%
+ }%
+ \xintFloatToDecimal{\vartmp}%
+}
+
+\newcount\CompteurSeuil%
+\NewDocumentCommand\CalculSeuil{ m m m m m }{%N0 / UN0 / fct / sgn / seuil := en interne
+ \xintdeffloatfunc varfct(x) := #3 ;%
+ \xdef\vartmp{\fpeval{#2}}%
+ \CompteurSeuil=#1%
+ %symbole de comparaison inversé et boucle
+ \IfEq{#4}{>}%
+ {%
+ \whiledo{\xintLtorEq{\vartmp}{#5} = 1}%
+ {%
+ \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
+ \CompteurSeuil=\numexpr\CompteurSeuil+1%
+ }%
+ }{}%
+ \IfEq{#4}{<}%
+ {%
+ \whiledo{\xintGtorEq{\vartmp}{#5} = 1}%
+ {%
+ \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
+ \CompteurSeuil=\numexpr\CompteurSeuil+1%
+ }%
+ }{}%
+ \IfEq{#4}{>=}%
+ {%
+ \whiledo{\xintLt{\vartmp}{#5} = 1}%
+ {%
+ \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
+ \CompteurSeuil=\numexpr\CompteurSeuil+1%
+ }%
+ }{}%
+ \IfEq{#4}{<=}%
+ {%
+ \whiledo{\xintGt{\vartmp}{#5} = 1}%
+ {%
+ \xdef\vartmp{\xintfloateval{varfct(\vartmp)}}%
+ \CompteurSeuil=\numexpr\CompteurSeuil+1%
+ }%
+ }{}%
+}
+
+\defKV[calculsuiterecur]{%
+ No=\def\SRninit{#1},%
+ UNo=\def\SRuninit{#1},%
+ Precision=\def\SRprec{#1},%
+ N=\def\SRnfinal{#1}
+ %Format=\def\SRformat{#1},%
+ %OptionFrac=\def\SRoptfrac{#1}
+}
+
+\setKVdefault[calculsuiterecur]{%
+ Precision=3
+ %Format=Arrondi,%
+ %OptionFrac={}
+}
+
+\NewDocumentCommand\CalculTermeRecurrence{ O{} m }{%attention avec les calculs en exact :-(
+ \useKVdefault[calculsuiterecur]%
+ \setKV[calculsuiterecur]{#1}%
+ \xintdeffloatfunc varfct(x) := #2 ;%
+ \xdef\vartmp{\fpeval{\SRuninit}}%
+ \IfEq{\SRnfinal}{\inteval{\SRninit+1}}%
+ {\xdef\vartmp{\xintfloateval{varfct(\vartmp)}}}%
+ {%
+ \foreach \i in {1,2,...,\inteval{\SRnfinal-\SRninit}}%
+ {\xdef\vartmp{\xintfloateval{varfct(\vartmp)}}}%
+ }%
+ %\num[minimum-decimal-digits=\SRprec]{\xintfloateval{round(\vartmp,\SRprec)}}%
+ \num{\xintfloateval{round(\vartmp,\SRprec)}}%
+ %\IfStrEq{\SRformat}{Fraction}{\ConversionFraction[\SRoptfrac]{\xinteval{\vartmp}}}{}%
+ %\IfStrEq{\SRformat}{Brut}{\xinteval{\vartmp}}{}%
+ %\IfStrEq{\SRformat}{Decimal}{\num{\xintfloateval{\vartmp}}}{}%
+ %\IfStrEq{\SRformat}{BrutDecimal}{\xintFloatToDecimal{\vartmp}}{}%
+}
+
+\defKV[suiteseuil]{%
+ No=\def\SEUILindiceinit{#1},%
+ UNo=\def\SEUILtermeinit{#1},%
+ NomSuite=\def\SEUILnomsuite{#1},%
+ %SolN=\def\SEUILn{#1},%
+ Precision=\def\SEUILprec{#1},%
+ Stretch=\def\SEUILstretch{#1},%
+ Sens=\def\SEUILsens{#1}
+}
+
+\setKVdefault[suiteseuil]{%
+ NomSuite=u,%
+ Precision=3,%
+ Stretch=1.15,%
+ Balayage=false,%
+ Calculatrice=false,%
+ Majuscule=true,%
+ Sens={>},%
+ Exact=false,%
+ Conclusion=true,%
+ Simple=false
+}
+
+\newcommand\SolutionSeuil[3][]{%1=options + %2 = fonction + %3 = seuil
+ \useKVdefault[suiteseuil]%
+ \setKV[suiteseuil]{#1}%
+ %on détermine le seuil, directement et on stocke les bascules !!!
+ \CalculSeuil{\SEUILindiceinit}{\SEUILtermeinit}{#2}{\SEUILsens}{#3}%
+ \def\SEUILn{\inteval{\the\CompteurSeuil}}%
+ \def\SEUILnmu{\inteval{\the\CompteurSeuil-1}}%
+ %formatage de la sortie des signes
+ \IfEq{\SEUILsens}{>}%
+ {\def\SensDeb{\leqslant}\def\SensFin{>}}%
+ {}%
+ \IfEq{\SEUILsens}{<}%
+ {\def\SensDeb{\geqslant}\def\SensFin{<}}%
+ {}%
+ \IfEq{\SEUILsens}{>=}%
+ {\def\SensDeb{<}\def\SensFin{\geqslant}}%
+ {}%
+ \IfEq{\SEUILsens}{<=}%
+ {\def\SensDeb{>}\def\SensFin{\leqslant}}%
+ {}%
+ %formatage
+ \ifboolKV[suiteseuil]{Balayage}{\ifboolKV[suiteseuil]{Majuscule}{P}{p}ar balayage, on obtient }{}%
+ \ifboolKV[suiteseuil]{Calculatrice}{\ifboolKV[suiteseuil]{Majuscule}{P}{p}ar calculatrice, on obtient }{}%
+ \ifboolKV[suiteseuil]{Simple}%
+ {%
+ \ensuremath{\SEUILnomsuite_{\SEUILnmu} \ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILnmu]{#2} \SensDeb\num{#3}}%
+ \text{~et~}%
+ \ensuremath{\SEUILnomsuite_{\SEUILn} \ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILn]{#2} \SensFin\num{#3}}%
+ }%
+ {%
+ \ensuremath{%
+ \left\lbrace \begin{tblr}{stretch=\SEUILstretch,colsep=1pt,rll}%
+ \SEUILnomsuite_{\SEUILnmu} &\ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILnmu]{#2} & \SensDeb\num{#3} \: \\ %
+ \SEUILnomsuite_{\SEUILn} &\ifboolKV[suiteseuil]{Exact}{=}{\approx} \CalculTermeRecurrence[Precision=\SEUILprec,No=\SEUILindiceinit,UNo=\SEUILtermeinit,N=\SEUILn]{#2} & \SensFin\num{#3} \: %
+ \end{tblr}%
+ \ifboolKV[suiteseuil]{Conclusion}%
+ {\right| \Rightarrow n \geqslant \SEUILn}%
+ {\right.}%
+ }%
+ }%
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-trigo.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-trigo.tex
new file mode 100644
index 0000000000..c27a135bf0
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-trigo.tex
@@ -0,0 +1,760 @@
+% proflycee-tools-trigo.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------CercleTrigo
+\defKV[cercletrigo]{%
+ Rayon=\def\PLcerclerayon{#1},%
+ Epaisseur=\def\PLcerclethick{#1},%
+ EpaisseurSol=\def\PLcerclesolthick{#1},%
+ Marge=\def\PLcerclemarge{#1},%
+ TailleValeurs=\def\PLcerclevaleurs{#1},%
+ TailleAngles=\def\PLcercleangles{#1},%
+ CouleurFond=\def\PLcerclefond{#1},%
+ Decal=\def\PLcercledecal{#1},%
+ cos=\def\PLcerclevalcos{#1},%
+ sin=\def\PLcerclevalsin{#1},%
+ CouleurSol=\def\PLcerclecoleq{#1}
+}
+
+\setKVdefault[cercletrigo]{
+ Rayon=3,%
+ Marge=0.25,%
+ Decal=10pt,%
+ Epaisseur=thick,%
+ EpaisseurSol=very thick,%
+ AffAngles=true,%
+ AffTraits=true,%
+ AffValeurs=true,%
+ MoinsPi=true,%
+ TailleValeurs=\scriptsize,%
+ TailleAngles=\footnotesize,%
+ CouleurFond=white,%
+ Equationcos=false,%
+ Equationsin=false,%
+ cos=45,%
+ sin=30,%
+ CouleurSol=blue
+}
+
+\newcommand\CercleTrigo[1][]{%
+ \useKVdefault[cercletrigo]
+ \setKV[cercletrigo]{#1}
+ \tikzset{PLval/.style={inner sep=1pt,font=\PLcerclevaleurs,fill=\PLcerclefond}}
+ \tikzset{PLagl/.style={inner sep=1pt,font=\PLcercleangles,fill=\PLcerclefond}}
+ %valeurs remarquables
+ \ifboolKV[cercletrigo]{AffAngles}
+ {%valeursdudessus
+ \draw ({\PLcerclerayon},0) node[above right=2pt,font=\PLcercleangles] {0} ;
+ \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ;
+ \draw ($(45:{\PLcerclerayon})+(45:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{4}$} ;
+ \draw ($(60:{\PLcerclerayon})+(60:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{3}$} ;
+ \draw (0,{\PLcerclerayon}) node[above right=2pt,PLagl] {$\tfrac{\pi}{2}$} ;
+ \draw ({-\PLcerclerayon},0) node[above left=2pt,PLagl] {$\pi$} ;
+ \draw ($(150:{\PLcerclerayon})+(150:\PLcercledecal)$) node[PLagl] {$\tfrac{5\pi}{6}$} ;
+ \draw ($(135:{\PLcerclerayon})+(135:\PLcercledecal)$) node[PLagl] {$\tfrac{3\pi}{4}$} ;
+ \draw ($(120:{\PLcerclerayon})+(120:\PLcercledecal)$) node[PLagl] {$\tfrac{2\pi}{3}$} ;
+ \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ;
+ %valeursdudessous
+ \draw ($(-30:{\PLcerclerayon})+(-30:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{11}\pi}{6}$} ;
+ \draw ($(-45:{\PLcerclerayon})+(-45:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{7}\pi}{4}$} ;
+ \draw ($(-60:{\PLcerclerayon})+(-60:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{5}\pi}{3}$} ;
+ \draw (0,{-\PLcerclerayon}) node[below right=2pt,PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-}{3}\pi}{2}$} ;
+ \draw ($(-120:{\PLcerclerayon})+(-120:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-2}{4}\pi}{3}$} ;
+ \draw ($(-135:{\PLcerclerayon})+(-135:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-3}{5}\pi}{4}$} ;
+ \draw ($(-150:{\PLcerclerayon})+(-150:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{MoinsPi}{-5}{7}\pi}{6}$} ;
+ \ifboolKV[cercletrigo]{MoinsPi}
+ {\draw ({-\PLcerclerayon},0) node[below left=2pt,PLagl] {$-\pi$} ;}
+ {\draw ({\PLcerclerayon},0) node[below right=2pt,PLagl] {$2\pi$} ;}
+ }%
+ {}
+ %tracés
+ \draw[\PLcerclethick,->,>=latex] ({-\PLcerclerayon-\PLcerclemarge},0)--({\PLcerclerayon+\PLcerclemarge},0) ;
+ \draw[\PLcerclethick,->,>=latex] (0,{-\PLcerclerayon-\PLcerclemarge})--(0,{\PLcerclerayon+\PLcerclemarge}) ;
+ \draw[\PLcerclethick] (0,0) circle[radius=\PLcerclerayon] ;
+ \draw (0,0) node[below left=2pt,PLval] {0} ;
+ %equations
+ \ifboolKV[cercletrigo]{Equationcos}
+ {%traitsdeconstructioncos
+ \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon)
+ (-135:\PLcerclerayon) -- (45:\PLcerclerayon)
+ (30:\PLcerclerayon) -- (150:\PLcerclerayon)
+ (-30:\PLcerclerayon) -- (-150:\PLcerclerayon)
+ (-60:\PLcerclerayon)--(60:\PLcerclerayon)
+ (-120:\PLcerclerayon)--(120:\PLcerclerayon) ;
+ \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon)--({-\PLcerclevalcos}:\PLcerclerayon) ;
+ \filldraw[\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ({-\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ;%
+ }
+ {}
+ \ifboolKV[cercletrigo]{Equationsin}
+ {%traitsdeconstructioncos
+ \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon)
+ (-135:\PLcerclerayon) -- (45:\PLcerclerayon)
+ (30:\PLcerclerayon) -- (150:\PLcerclerayon)
+ (-30:\PLcerclerayon) -- (-150:\PLcerclerayon)
+ (-60:\PLcerclerayon)--(60:\PLcerclerayon)
+ (-120:\PLcerclerayon)--(120:\PLcerclerayon) ;
+ \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon)--({180-\PLcerclevalsin}:\PLcerclerayon) ;
+ \filldraw[\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ({180-\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ;%
+ }
+ {}
+ %valeurs
+ \ifboolKV[cercletrigo]{AffValeurs}
+ {%
+ \draw ({0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{1}{2}$} ;
+ \draw ({-0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{1}{2}$} ;
+ \draw (0,{0.5*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{1}{2}$} ;
+ \draw (0,{-0.5*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{1}{2}$} ;
+ \draw ({0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ;
+ \draw ({-0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ;
+ \draw (0,{0.866*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ;
+ \draw (0,{-0.866*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ;
+ \draw ({0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ;
+ \draw ({-0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ;
+ \draw (0,{0.707*\PLcerclerayon}) node[right=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ;
+ \draw (0,{-0.707*\PLcerclerayon}) node[right=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ;
+ %\draw[\PLcerclethick] (0,0) circle[radius=\PLcerclerayon] ; %on retrace par dessus ?
+ }%
+ {}
+ %valeurs remarquables en dernier
+ \ifboolKV[cercletrigo]{AffTraits}
+ {%
+ \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon) rectangle (60:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon) rectangle (30:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon) rectangle (45:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon)--(60:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon)--(30:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon)--(45:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (120:\PLcerclerayon)--(-60:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (150:\PLcerclerayon)--(-30:\PLcerclerayon) ;
+ \draw[\PLcerclethick,dotted,gray] (135:\PLcerclerayon)--(-45:\PLcerclerayon) ;
+ }%
+ {}
+}
+
+%%------MESUREPPALE
+\setKVdefault[MesurePpale]{%
+ Crochets=false,%
+ d=false,%
+ Brut=false
+}
+
+\newcommand{\MesurePrincipale}[2][]{%fraction sous la forme a*pi/b ou entier :-)
+ \useKVdefault[MesurePpale]%
+ \setKV[MesurePpale]{#1}%
+ \StrDel{#2}{pi}[\MPargument]%
+ \IfBeginWith{#2}{pi}%
+ {\StrSubstitute{#2}{pi}{1}[\MPargument]}%
+ {}%
+ \IfBeginWith{#2}{-pi}%
+ {\StrSubstitute{#2}{pi}{1}[\MPargument]}%
+ {}%
+ %on conserve les données initiales
+ \IfSubStr{\MPargument}{/}%on coupe numérateur/dénominateur
+ { \StrCut{\MPargument}{/}\MPnumerateurinit\MPdenominateurinit }%
+ { \xdef\MPnumerateurinit{\MPargument}\xdef\MPdenominateurinit{1} }%
+ %on affiche le début, avant simplification
+ \ifboolKV[MesurePpale]{d}%
+ {\displaystyle}%
+ {}%
+ \xintifboolexpr{\MPdenominateurinit == 1}%
+ {\ifboolKV[MesurePpale]{Brut}{}{\num{\MPnumerateurinit}\pi=}}%
+ {\ifboolKV[MesurePpale]{Brut}{}{\frac{\num{\MPnumerateurinit}\pi}{\num{\MPdenominateurinit}}=}}%
+ %on simplifie puis on réduit
+ \xdef\MPsimpl{\xintPRaw{\xintIrr{\MPargument}}}%
+ %test si l'argument est une fraction ou un entier
+ \IfSubStr{\MPsimpl}{/}%
+ {\StrCut{\MPsimpl}{/}\MPnumerateur\MPdenominateur}%
+ {\xdef\MPnumerateur{\MPsimpl}\xdef\MPdenominateur{1}}%
+ %calculs
+ \xdef\MPtour{\inteval{2*\MPdenominateur}}%
+ \xdef\MPreste{\xintiiRem{\MPnumerateur}{\MPtour}}%reste
+ \xintifboolexpr{\MPreste>\MPdenominateur}%
+ {\xdef\MPreste{\inteval{\MPreste-\MPtour}}}{}%
+ \xintifboolexpr{\MPreste<-\MPdenominateur}%
+ {\xdef\MPreste{\inteval{\MPreste+\MPtour}}}{}%
+ %sortie suivant fraction ou non...
+ \xintifboolexpr{\MPdenominateur == 1}%
+ {%entier
+ \xintifboolexpr{\MPreste == 1}{\pi \ifboolKV[MesurePpale]{Brut}{}{\: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)}} }{}%
+ \xintifboolexpr{\MPreste == 0}{0 \ifboolKV[MesurePpale]{Brut}{}{\: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)}} }{}%
+ \xintifboolexpr{\MPreste != 0 && \MPreste != 1}{\MPreste\pi \ifboolKV[MesurePpale]{Brut}{}{\: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)}} }{}%
+ }%
+ {%fraction
+ \frac{%
+ \xintifboolexpr{\xinteval{\MPreste == 1}}{}{}%
+ \xintifboolexpr{\xinteval{\MPreste == -1}}{-}{}%
+ \xintifboolexpr{\xinteval{abs(\MPreste) != 1}}{\num{\MPreste}}{}%
+ \pi}{\num{\MPdenominateur}} \ifboolKV[MesurePpale]{Brut}{}{\: \ifboolKV[MesurePpale]{Crochets}{[2\pi]}{(2\pi)}}%
+ }%
+}
+
+%%------LIGNES TRIGOS
+\setKVdefault[Lgntrig]{%
+ d=false,%
+ Etapes=false
+}
+
+\newcommand\AffAngle[2][]{%semble OK
+ %1 = options
+ %2 = angle sous la forme a*pi/b
+ \useKVdefault[Lgntrig]%
+ \setKV[Lgntrig]{#1}%
+ \StrDel{#2}{pi}[\MPargument]%
+ \IfBeginWith{#2}{pi}%
+ {\StrSubstitute{#2}{pi}{1}[\MPargument]}%
+ {}%
+ \IfBeginWith{#2}{-pi}%
+ {\StrSubstitute{#2}{pi}{1}[\MPargument]}%
+ {}%
+ %on conserve les données initiales
+ \IfSubStr{\MPargument}{/}%on coupe numérateur/dénominateur
+ {\StrCut{\MPargument}{/}\MPnumerateurinit\MPdenominateurinit}%
+ {\xdef\MPnumerateurinit{\MPargument}\xdef\MPdenominateurinit{1}}%
+ %on affiche le début, avant simplification
+ \ifboolKV[Lgntrig]{d}{\displaystyle}{}%
+ \xintifboolexpr{\MPdenominateurinit == 1}%
+ {%
+ \xintifboolexpr{\MPnumerateurinit == 1}{\pi}{}%
+ \xintifboolexpr{\MPnumerateurinit == -1}{-\pi}{}%
+ \xintifboolexpr{\xinteval{abs(\MPnumerateurinit) != 1}}{\num{\MPnumerateurinit}\pi}{}%
+ }%
+ {%
+ \frac{%
+ \xintifboolexpr{\MPnumerateurinit == 1}{\pi}{}%
+ \xintifboolexpr{\MPnumerateurinit == -1}{-\pi}{}
+ \xintifboolexpr{\xinteval{abs(\MPnumerateurinit) != 1}}{\num{\MPnumerateurinit}\pi}{}%
+ }%
+ {%
+ \num{\MPdenominateurinit}%
+ }%
+ }%
+}
+
+\newcommand\IntSimplifMesPpale[1]{%commande interne
+ \IfSubStr{#1}{pi}%
+ {%
+ \StrDel{#1}{pi}[\tmpargument]
+ \IfBeginWith{#1}{pi}%
+ {\StrSubstitute{#1}{pi}{1}[\tmpargument]}%
+ {}%
+ \IfBeginWith{#1}{-pi}%
+ {\StrSubstitute{#1}{pi}{1}[\tmpargument]}%
+ {}%
+ }%
+ {\def\tmpargument{#1}}%
+ \IfSubStr{\tmpargument}{/}%on coupe numérateur/dénominateur
+ {\StrCut{\tmpargument}{/}\MPnumerateurinit\MPdenominateurinit}%
+ {\xdef\MPnumerateurinit{\tmpargument}\xdef\MPdenominateurinit{1}}%
+ \xdef\MPsimpl{\xintPRaw{\xintIrr{\tmpargument}}}%
+ \IfSubStr{\MPsimpl}{/}%
+ {\StrCut{\MPsimpl}{/}\MPnumerateur\MPdenominateur}%
+ {\xdef\MPnumerateur{\MPsimpl}\xdef\MPdenominateur{1}}%
+ %calculs
+ \xdef\MPtour{\inteval{2*\MPdenominateur}}%
+ \xdef\MPreste{\xintiiRem{\MPnumerateur}{\MPtour}}%reste
+ \xintifboolexpr{\MPreste>\MPdenominateur}%
+ {\xdef\MPreste{\inteval{\MPreste-\MPtour}}}{}%
+ \xintifboolexpr{\MPreste<-\MPdenominateur}%
+ {\xdef\MPreste{\inteval{\MPreste+\MPtour}}}{}%
+ \xdef\MPfrac{\MPreste/\MPdenominateur}%
+}
+
+\NewDocumentCommand\LigneTrigo{ s O{} m d() }{%
+ %* = sans l'énoncé
+ %2 = options
+ %3 = ligne
+ %4 = angle
+ \useKVdefault[Lgntrig]%
+ \setKV[Lgntrig]{#2}
+ \ifboolKV[Lgntrig]{d}{\displaystyle}{}%
+ \IntSimplifMesPpale{#4} %simplification du quotient et stockage dans \MPfrac
+ %les cas de figure [0;pi]
+ \xintifboolexpr{\MPfrac == 0}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1 }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 0 }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 0 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left(\MesurePrincipale[Brut]{#4}\right)}=}{} \frac{\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 2-\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1/6}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{3}}{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1/4}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1/3}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 5/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 2+\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1/2}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 0 }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 7/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -2-\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 2/3}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{1}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 3/4}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 5/6}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{3}}{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 11/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -2+\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1 }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 0 }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 0 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 1/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1+\sqrt{2} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 3/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1+\sqrt{2} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 5/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1-\sqrt{2} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 7/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1-\sqrt{2} }{}%
+ }%
+ {}%
+ %cas ]-pi,0[
+ \xintifboolexpr{\MPfrac == -1/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -2+\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/6}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{1}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{3}}{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/4}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/3}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -5/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -2-\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/2}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 0 }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -7/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 2+\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -2/3}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{1}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -3/4}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1 }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -5/6}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{3}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{1}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{3}}{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -11/12}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}-\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-\sqrt{6}+\sqrt{2}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 2-\sqrt{3} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1-\sqrt{2} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -3/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1-\sqrt{2} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -5/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} 1+\sqrt{2} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -7/8}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2+\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{2-\sqrt{2}}}{2} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -1+\sqrt{2} }{}%
+ }%
+ {}%
+ %les pi/5
+ \xintifboolexpr{\MPfrac == 1/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \sqrt{5-2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 2/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \sqrt{5+2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 3/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1-\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\sqrt{5+2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 4/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-1-\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\sqrt{5-2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -4/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-1-\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \sqrt{5-2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -3/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1-\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \sqrt{5+2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -2/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\sqrt{5+2\sqrt{5}} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/5}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\sqrt{5-2\sqrt{5}} }{}%
+ }%
+ {}%
+ %les pi/10
+ \xintifboolexpr{\MPfrac == 1/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{25-10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 3/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{25+10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 7/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{25+10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == 9/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{-1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{25-10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -1/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1-\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{25-10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -3/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{25+10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -7/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10-2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{1+\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{25+10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+ \xintifboolexpr{\MPfrac == -9/10}
+ {%
+ \ifstrequal{#3}{cos}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\cos}{\left({\AffAngle[#2]{#4}}\right)}=}{\cos}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} -\frac{\sqrt{10+2\sqrt{5}}}{4} }{}%
+ \ifstrequal{#3}{sin}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\sin}{\left({\AffAngle[#2]{#4}}\right)}=}{\sin}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{1-\sqrt{5}}{4} }{}%
+ \ifstrequal{#3}{tan}%
+ {\ifboolKV[Lgntrig]{Etapes}{\IfBooleanTF{#1}{}{{\tan}{\left({\AffAngle[#2]{#4}}\right)}=}{\tan}{\left({\MesurePrincipale[Brut]{#4}}\right)}=}{} \frac{\sqrt{25-10\sqrt{5}}}{5} }{}%
+ }%
+ {}%
+}
+
+\endinput \ No newline at end of file