summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCAN.tex3
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex192
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCalculsFractionsoldv1.tex192
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex67
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex19
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCartographie.tex117
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex30
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCDistributivite.tex10
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCDomino.tex52
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCDontCountDots.tex197
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex283
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex14
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex79
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex39
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEratosthene.tex20
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCFactorisation.tex63
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex50
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCLego.tex12
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex24
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex95
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRecyclage.tex360
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCReperage.tex48
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex55
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex72
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRondeInfernaleold.tex474
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex44
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCStatistiques.tex9
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex63
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCThales.tex14
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCTicketCaisse.tex210
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCTrio.tex442
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty116
32 files changed, 2142 insertions, 1323 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCCAN.tex b/macros/latex/contrib/profcollege/latex/PfCCAN.tex
index acb5e28388..f77aea497a 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCAN.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCAN.tex
@@ -308,7 +308,8 @@
\hline%
\endhead%
\xintFor* ##1 in {\xintSeq{1}{\ListeFichierslen}}\do{%
- \ttfamily{\theCNNumQ}\stepcounter{CNNumQ}&\xdef\CNReponse{}\input{\ListeFichiers[##1]}\ifboolKV[ClesCN]{Nom}{\par\hfill\footnotesize\ttfamily\ListeFichiers[##1]}{}&\ifboolKV[ClesCN]{CAN}{\ifboolKV[ClesCN]{Nom}{\multirow{2}{*}{\CNReponse}}{\multirow{1}{*}{\CNReponse}}}{}&\\%
+ \ttfamily{\theCNNumQ}\stepcounter{CNNumQ}&\xdef\CNReponse{}\input{\ListeFichiers[##1]}\ifboolKV[ClesCN]{Nom}{\par\hfill\footnotesize\ttfamily\ListeFichiers[##1]}{}&\CNReponse%\ifboolKV[ClesCN]{CAN}{\ifboolKV[ClesCN]{Nom}{\multirow{2}{*}{\CNReponse}}{\multirow{1}{*}{\CNReponse}}}{}
+ &\\%
\hline%
}%
\end{longtable}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex b/macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex
index dbe0adbd3e..d2a189e29b 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex
@@ -5,7 +5,7 @@
\definecolor{lightorange}{rgb}{0.9,0.4,0}%
\definecolor{lightestorange}{rgb}{1,0.8,0.5}%
\definecolor{darkorange}{rgb}{0.2,0.1,0}%
-
+%
\colorlet{blackened}{black!90!white}%
\colorlet{blackish}{black!70!white}%
\colorlet{greyish}{black!60!white}%
@@ -13,100 +13,100 @@
\colorlet{orangeish}{yellow!90!red}%
\colorlet{greenish}{green!16!gray}%
\colorlet{redish}{red!80!black}%
-
+%
\tcbset{calbackground/.style={%
- enhanced,
- leftright skip=0.25cm,beforeafter skip=0pt,
- toptitle=0mm,bottomtitle=0mm,
- right=2mm,left=2mm,
- top=1pt,
- bottom=0.25cm,
- boxsep=0pt,
- boxrule=0mm,
- sharp corners,
- sidebyside,
- sidebyside gap=2mm,
- lefthand ratio=0.6,
- bicolor,
- colback=black!10!white,
- colbacklower=greenish,
- colframe=white,
- autoparskip,
+ enhanced,%
+ leftright skip=0.25cm,beforeafter skip=0pt,%
+ toptitle=0mm,bottomtitle=0mm,%
+ right=2mm,left=2mm,%
+ top=1pt,%
+ bottom=0.25cm,%
+ boxsep=0pt,%
+ boxrule=0mm,%
+ sharp corners,%
+ sidebyside,%
+ sidebyside gap=2mm,%
+ lefthand ratio=0.6,%
+ bicolor,%
+ colback=black!10!white,%
+ colbacklower=greenish,%
+ colframe=white,%
+ autoparskip,%
}}%
-
+%
\newtcbox{\KY}[1][]{%
- enhanced,
- on line,
- arc=2pt,outer arc=2pt,
- boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
- boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
- interior style={top color=blackish,bottom color=blackened},
- colframe=greyish,
- width=2.5em,
- tcbox width=forced center,
- equal height group=K,
- valign=center,
- fontupper=\footnotesize\sffamily,
- coltext=orangeish,
- before upper=\vrule width 0pt height 2ex depth 1ex\relax,
+ enhanced,%
+ on line,%
+ arc=2pt,outer arc=2pt,%
+ boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,%
+ boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,%
+ interior style={top color=blackish,bottom color=blackened},%
+ colframe=greyish,%
+ width=2.5em,%
+ tcbox width=forced center,%
+ equal height group=K,%
+ valign=center,%
+ fontupper=\footnotesize\sffamily,%
+ coltext=orangeish,%
+ before upper=\vrule width 0pt height 2ex depth 1ex\relax,%
}%
-
+%
\newtcbox{\KYm}[1][]{%
- enhanced,
- on line,
- arc=2pt,outer arc=2pt,
- boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
- boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
- interior style={top color=blackish,bottom color=blackened},
- colframe=greyish,
- width=2.5em,
- tcbox width=forced center,
- equal height group=K,
- valign=center,
- fontupper=\footnotesize\sffamily,
- coltext=orangeish,
- before upper=\vrule width 0pt height 2ex depth 1ex\relax$,
- after upper=$,
+ enhanced,%
+ on line,%
+ arc=2pt,outer arc=2pt,%
+ boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,%
+ boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,%
+ interior style={top color=blackish,bottom color=blackened},%
+ colframe=greyish,%
+ width=2.5em,%
+ tcbox width=forced center,%
+ equal height group=K,%
+ valign=center,%
+ fontupper=\footnotesize\sffamily,%
+ coltext=orangeish,%
+ before upper=\vrule width 0pt height 2ex depth 1ex\relax$,%
+ after upper=$,%
}%
-
+%
\newtcbox{\KN}{%
- enhanced,
- on line,
- arc=2pt,outer arc=2pt,
- boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,
- boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,
- interior style={top color=blackish,bottom color=blackened},
- colframe=greyish,
- width=1.5em,
- tcbox width=forced center,
- equal height group=K,
- valign=center,
- fontupper=\footnotesize\sffamily,
- coltext=whiteish,
- before upper=\vrule width 0pt height 2ex depth 1ex\relax,
+ enhanced,%
+ on line,%
+ arc=2pt,outer arc=2pt,%
+ boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm,%
+ boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt,%
+ interior style={top color=blackish,bottom color=blackened},%
+ colframe=greyish,%
+ width=1.5em,%
+ tcbox width=forced center,%
+ equal height group=K,%
+ valign=center,%
+ fontupper=\footnotesize\sffamily,%
+ coltext=whiteish,%
+ before upper=\vrule width 0pt height 2ex depth 1ex\relax,%
}%
-
+%
\newtcolorbox{calc}[1][]{%
- enhanced,bicolor,
- boxsep=0pt,
- boxrule=0pt,
- top=6pt,bottom=0pt,left=6pt,right=0pt,
- sharp corners,
- frame empty,
- colback=black!10,
- colbacklower=greenish,
- sidebyside,
- sidebyside align=top seam,
- sidebyside gap=0pt,
- righthand width=50.7mm,
- before lower=\begin{tabular}{@{}l@{}},
- after lower=\end{tabular},
+ enhanced,bicolor,%
+ boxsep=0pt,%
+ boxrule=0pt,%
+ top=6pt,bottom=0pt,left=6pt,right=0pt,%
+ sharp corners,%
+ frame empty,%
+ colback=black!10,%
+ colbacklower=greenish,%
+ sidebyside,%
+ sidebyside align=top seam,%
+ sidebyside gap=0pt,%
+ righthand width=50.7mm,%
+ before lower=\begin{tabular}{@{}l@{}},%
+ after lower=\end{tabular},%
overlay={\node[inner sep=0pt, outer sep=0pt, text height=5pt, text
depth=1pt, text width=50.7mm, fill=greenish, anchor=north
east, font=\sffamily\tiny\bfseries, align=flush right]
- at (frame.north east) {#1};}
-}
-
+ at (frame.north east) {#1};}%
+}%
+%
\def\MPCalculatrice#1#2#3{%
% #1 Calcul %2 r\'eponse
\ifluatex%
@@ -122,20 +122,28 @@
LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};
boolean Calcul;
Calcul=\useKV[ClesCalculatrice]{Calcul};
- print:=\useKV[ClesCalculatrice]{Impression};
+ print:=\useKV[ClesCalculatrice]{Impression};
+ Math:=\useKV[ClesCalculatrice]{Math};
LCD(#1)(#2)(#3);
\end{mplibcode}%
\mplibnumbersystem{scaled}%
\else%
- \begin{mpost}[mpsettings={input PfCCalculatrice;LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};}]
- LCD(#1)(#2)(#3);
- \end{mpost}
+ \begin{mpost}[mpsettings={input PfCCalculatrice;LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};}]%
+ LCD(#1)(#2)(#3);%
+ \end{mpost}%
\fi%
}%
+%
+\setKVdefault[ClesCalculatrice]{ModeleCouleur=5,Ecran=false,NbLignes=0,BL=0.775,Largeur=120,Calcul=false,Impression=false,Math}%
+%
+\NewDocumentCommand\Calculatrice{}{%On désactive le ~ qui pose souci avec babel
+ \begingroup
+ \catcode`\~12
+ \Calculatriceaux
+}%
-\setKVdefault[ClesCalculatrice]{ModeleCouleur=5,Ecran=false,NbLignes=0,BL=0.775,Largeur=120,Calcul=false,Impression=false}%
-
-\newcommand\Calculatrice[2][]{%
+\NewDocumentCommand\Calculatriceaux{om}{%
+ \endgroup
\setstackgap{L}{\useKV[ClesCalculatrice]{BL}\baselineskip}%
\useKVdefault[ClesCalculatrice]%
\setKV[ClesCalculatrice]{#1}%
@@ -147,12 +155,12 @@
\setsepchar[*]{,*/}\reademptyitems%
\readlist\ListeCalc{#2}%
}%
- \ignoreemptyitems
+ \ignoreemptyitems%
\MPCalculatrice{\ListeCalc[1,1]}{\ListeCalc[1,2]}{\useKV[ClesCalculatrice]{NbLignes}}%
}{%
\setsepchar[*]{,*/}\reademptyitems%
\readlist\ListeCalc{#2}%
- \ignoreemptyitems
+ \ignoreemptyitems%
\foreachitem\compteur\in\ListeCalc{\xintifboolexpr{\listlen\ListeCalc[\compteurcnt]==2}{\Longstack{{\tiny\ListeCalc[\compteurcnt,1]} \KN{\ListeCalc[\compteurcnt,2]}}}{\Longstack{{\tiny\ListeCalc[\compteurcnt,2]} \KY{\ListeCalc[\compteurcnt,3]}}}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCCalculsFractionsoldv1.tex b/macros/latex/contrib/profcollege/latex/PfCCalculsFractionsoldv1.tex
deleted file mode 100644
index 0e4dac5a68..0000000000
--- a/macros/latex/contrib/profcollege/latex/PfCCalculsFractionsoldv1.tex
+++ /dev/null
@@ -1,192 +0,0 @@
-\setKVdefault[CalculsFractions]{Couleurs=false,Negatif=false}%
-\defKV[CalculsFractions]{Couleur=\setKV[CalculsFractions]{Couleurs}}%
-
-\NewDocumentCommand\tofrac{m}{%
- \IfDecimal{#1}{#1}{%
- \StrBefore{#1}{/}[\PfCnum]%
- \StrBehind{#1}{/}[\PfCden]%
- \ifnum\PfCden=1\relax%
- \num{\PfCnum}%
- \else%
- \frac{\num{\PfCnum}}{\num{\PfCden}}%
- \fi%
- }%
-}%
-
-\NewDocumentCommand\AddFraction{soommo}{%
- \useKVdefault[CalculsFractions]%
- \setKV[CalculsFractions]{#2}%
- \ifboolKV[CalculsFractions]{Couleurs}{\colorlet{CouleurDenoCom}{\useKV[CalculsFractions]{Couleur}}}{\colorlet{CouleurDenoCom}{black}}%
- \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{\fpeval{abs(\ListeFractions[1,2])}}{\fpeval{abs(\ListeFractions[2,2])}}%
-% pgcd=\the\pgcd%
- \xdef\PfCPremierMul{\fpeval{\ListeFractions[2,2]/\the\pgcd}}%
-% PfCPremierMul=\PfCPremierMul
- \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%
- %test
- \ifboolKV[CalculsFractions]{Negatif}{%
- \xintifboolexpr{\fpeval{\PfCAddNumSimp/\PfCAddDenoSimp}<0}{-\tofrac{\fpeval{abs(\PfCAddNumSimp)}/\fpeval{abs(\PfCAddDenoSimp)}}}{\tofrac{\PfCAddSumSimp}}%
- }{\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\fpeval{abs(\PfCPremierMul)}>1\relax%
- \frac{\ListeFractions[1,1]_{\mathcolor{CouleurDenoCom}{\times\NumMA{\PfCPremierMul}}}}{\ListeFractions[1,2]_{\mathcolor{CouleurDenoCom}{\times\NumMA{\PfCPremierMul}}}}
- \else%
- \tofrac{#4}%
- \fi%
- \PfCFractionOp%
- \ifnum\fpeval{abs(\PfCDeuxiemeMul)}>1\relax%
- \frac{\ListeFractions[2,1]_{\mathcolor{CouleurDenoCom}{\times\NumMA{\PfCDeuxiemeMul}}}}{\ListeFractions[2,2]_{\mathcolor{CouleurDenoCom}{\times\NumMA{\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{oommo}{%
- \AddFraction*[#1][#2]{#3}{#4}[#5]%
-}%
-
-\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
- \ifboolKV[CalculsFractions]{Negatif}{%
- \xintifboolexpr{\fpeval{\PfCMulNumSimp/\PfCMulDenoSimp}<0}{-\tofrac{\fpeval{abs(\PfCMulNumSimp)}/\fpeval{abs(\PfCMulDenoSimp)}}}{\tofrac{\PfCMulPdtSimp}}%
- }{\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
- \ifboolKV[CalculsFractions]{Negatif}{%
- \xintifboolexpr{\fpeval{\PfCDivNumSimp/\PfCDivDenoSimp}<0}{-\tofrac{\fpeval{abs(\PfCDivNumSimp)}/\fpeval{abs(\PfCDivDenoSimp)}}}{\tofrac{\PfCDivPdtSimp}}%
- }{\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 b11a0c5289..bf9b9e0cde 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
@@ -336,6 +336,10 @@
\end{tikzpicture}%
}{}%
+% Pour construire la liste des cartes lors d'un ajout automatiques
+\newtoks\TokListeAjout{}
+\def\UpdatetoksCartes#1/#2\nil{\addtotok\TokListeAjout{§#1/#2}}%
+
\NewDocumentCommand\CartesPerso{o +m}{%
% 0/ La largeur est \useKV[Cards]{Largeur} - La hauteur est \useKV[Cards]{Hauteur}.\par
\useKVdefault[Cards]%
@@ -383,11 +387,33 @@
% Dimensions intérieures des cartes
\setlength{\hauteurcarte}{\fpeval{\hauteurcards-\margecards}pt}%
\setlength{\largeurcarte}{\fpeval{\largeurcards-\margecards}pt}%
- % nombre de cartes sur la largeur
+ % nombre de cartes sur la largeur et sur la hauteur
\xdef\PfCNbCartesLarg{\fpeval{floor(\paperwidth/\largeurcards)}}%
\xdef\PfCNbCartesHaut{\fpeval{floor(\paperheight/\hauteurcards)}}%
\xdef\PfCNbCartesPerso{\fpeval{\PfCNbCartesLarg*\PfCNbCartesHaut}}%
- % Jointes
+ % On vérifie si le nombres de déclarations de cartes est compatible avec le nombre total de cartes calculé automatiquement. Mais pas dans le mode Trivial et surtout pas dans le cas où la trame n'est pas utilisée !
+ \ifboolKV[Cards]{Trame}{%
+ \ifboolKV[Cards]{Trivial}{}{%
+ \xintifboolexpr{\PfCNbCartesPerso==\ListeCardslen}{%
+ % Je ne dois pas ajouter de cartes
+ }{%
+ % Je passe ici et j'ajoute des cartes\\
+ % Je dois en ajouter \fpeval{\PfCNbCartesPerso-\ListeCardslen}%
+ \ifnum\fpeval{\PfCNbCartesPerso-\ListeCardslen}>0
+ \foreachitem\compteur\in\ListeCards{\expandafter\UpdatetoksCartes\compteur\nil}%
+ \def\PfCFooAjout{Non connue/Non connue}
+ \xintFor* ##1 in {\xintSeq{1}{\fpeval{\PfCNbCartesPerso-\ListeCardslen}}}\do{%
+ \expandafter\UpdatetoksCartes\PfCFooAjout\nil
+ }%
+ \xdef\PfCFooAjoutBis{\the\TokListeAjout}%
+ \setsepchar[*]{§*/}%
+ \readlist*\ListeCards{\PfCFooAjoutBis}%
+ \setsepchar{,}%
+ \fi
+ }%
+ }}{}%
+ % fin Ajout automatique
+ % Jointes
\ifboolKV[Cards]{Jointes}{\setlength{\largeurcards}{\largeurcarte}}{}%
\ifboolKV[Cards]{Jointes}{\setlength{\hauteurcards}{\hauteurcarte}}{}%
% décalage entre les cartes ou pas
@@ -424,10 +450,11 @@
\clearpage%
\thispagestyle{empty}%
\begin{Trame}
- \multido{\i=1+1}{\PfCNbCartesPerso}{%
- \node[] at (Carte\i) {%
+ %\multido{\i=1+1}{\PfCNbCartesPerso}{%
+\xintFor* ##1 in{\xintSeq{1}{\PfCNbCartesPerso}}\do{
+ \node[] at (Carte##1) {%
\begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}%
- \ListeCards[\i,1]%
+ \ListeCards[##1,1]%
\end{MyboxSimpleAv}%
};%
}%
@@ -469,10 +496,11 @@
\clearpage%
\thispagestyle{empty}%
\begin{Trame}
- \multido{\i=1+1}{\PfCNbCartesPerso}{%
- \node[] at (Carte\i) {%
- \begin{Mybox}{\ListeCards[\i,1]}{\useKV[Cards]{Theme}}{\ListeCards[\i,2]}%
- \ListeCards[\i,3]%
+% \multido{\i=1+1}{\PfCNbCartesPerso}{%
+\xintFor* ##1 in{\xintSeq{1}{\PfCNbCartesPerso}}\do{
+ \node[] at (Carte##1) {%
+ \begin{Mybox}{\ListeCards[##1,1]}{\useKV[Cards]{Theme}}{\ListeCards[##1,2]}%
+ \ListeCards[##1,3]%
\end{Mybox}%
};%
}%
@@ -513,9 +541,10 @@
\clearpage%
\thispagestyle{empty}%
\begin{Trame}
- \multido{\i=1+1}{\PfCNbCartesPerso}{%
- \node[] at (Carte\i) {%
- \begin{MyboxJQ}{\ListeCards[\i,1]}{\ListeCards[\i,2]}%
+% \multido{\i=1+1}{\PfCNbCartesPerso}{%
+\xintFor* ##1 in{\xintSeq{1}{\PfCNbCartesPerso}}\do{
+ \node[] at (Carte##1) {%
+ \begin{MyboxJQ}{\ListeCards[##1,1]}{\ListeCards[##1,2]}%
%%
\end{MyboxJQ}%
};%
@@ -562,13 +591,14 @@
\clearpage%
\thispagestyle{empty}%
\begin{Trame}
- \multido{\i=1+1}{\PfCNbCartesPerso}{%
- \node[] at (Carte\i) {%
+% \multido{\i=1+1}{\PfCNbCartesPerso}{%
+\xintFor* ##2 in{\xintSeq{1}{\PfCNbCartesPerso}}\do{
+ \node[] at (Carte##2) {%
\begin{MyboxTrivial}%
\begin{center}
\begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[9,m]}[hvlines]%
\xintFor* ##1 in{\xintSeq{1}{6}}\do{%
- \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[\i,\fpeval{1+2*(##1-1)}]\\
+ \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[##2,\fpeval{1+2*(##1-1)}]\\
}%
\end{NiceTabular}%
\end{center}%
@@ -634,13 +664,14 @@
\clearpage%
\thispagestyle{empty}%
\begin{Trame}
- \multido{\i=1+1}{\PfCNbCartesPerso}{%
- \node[] at (Carte\i) {%
+% \multido{\i=1+1}{\PfCNbCartesPerso}{%
+\xintFor* ##2 in{\xintSeq{1}{\PfCNbCartesPerso}}\do{
+ \node[] at (Carte##2) {%
\begin{MyboxTrivial}%
\begin{center}
\begin{NiceTabular}[width=0.9\largeurcarte]{X[1,m]X[9,m]}[hvlines]%
\xintFor* ##1 in{\xintSeq{1}{6}}\do{%
- \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[\i,\fpeval{1+2*(##1-1)}]\\
+ \rule{0pt}{0.12\hauteurcards}\Block{1-1}{\ListeSymbolesTrivial[##1]}&\ListeCards[##2,\fpeval{1+2*(##1-1)}]\\
}%
\end{NiceTabular}%
\end{center}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex b/macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex
index eb7b7b0285..ea9b30af03 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex
@@ -6,7 +6,7 @@
\newlength{\RoundedBoxWidth}%
-\NewEnviron{Bulle}[1][]{%
+\NewDocumentEnvironment{Bulle}{o+b}{%
\setKV[ClesMentales]{#1}%
\setlength{\RoundedBoxWidth}{\useKV[ClesMentales]{Largeur}}%
\xdef\Pointilles{\ifboolKV[ClesMentales]{Pointilles}{dashed}{}}%
@@ -14,12 +14,13 @@
\xdef\CouleurFond{\useKV[ClesMentales]{CFond}}%
\xdef\EpaisseurLigne{\useKV[ClesMentales]{Epaisseur}}%
\xdef\RayonCoin{\useKV[ClesMentales]{Rayon}}%
- \node(\useKV[ClesMentales]{Nom}) [align=justify,draw=\CouleurTrace,line width=\EpaisseurLigne,\Pointilles,fill=\CouleurFond,rounded corners=\RayonCoin,text width=\RoundedBoxWidth] at (\useKV[ClesMentales]{Ancre}) {\begin{minipage}{\RoundedBoxWidth}\BODY\end{minipage}};%
- \multido{\i=1+1}{9}{%
- \xdef\x{\fpeval{\i/10}}
- \coordinate (\useKV[ClesMentales]{Nom}-H-\i) at ($(\useKV[ClesMentales]{Nom}.north west)!\x!(\useKV[ClesMentales]{Nom}.north east)$);
- \coordinate (\useKV[ClesMentales]{Nom}-D-\i) at ($(\useKV[ClesMentales]{Nom}.north east)!\x!(\useKV[ClesMentales]{Nom}.south east)$);
- \coordinate (\useKV[ClesMentales]{Nom}-B-\i) at ($(\useKV[ClesMentales]{Nom}.south east)!\x!(\useKV[ClesMentales]{Nom}.south west)$);
- \coordinate (\useKV[ClesMentales]{Nom}-G-\i) at ($(\useKV[ClesMentales]{Nom}.south west)!\x!(\useKV[ClesMentales]{Nom}.north west)$);
+ \node(\useKV[ClesMentales]{Nom}) [align=justify,draw=\CouleurTrace,line width=\EpaisseurLigne,\Pointilles,fill=\CouleurFond,rounded corners=\RayonCoin,text width=\RoundedBoxWidth] at (\useKV[ClesMentales]{Ancre}) {\begin{minipage}{\RoundedBoxWidth}#2\end{minipage}};%
+ % \multido{\i=1+1}{9}{%
+ \xintFor* ##1 in{\xintSeq{1}{9}}\do{%
+ \xdef\x{\fpeval{##1/10}}
+ \coordinate (\useKV[ClesMentales]{Nom}-H-##1) at ($(\useKV[ClesMentales]{Nom}.north west)!\x!(\useKV[ClesMentales]{Nom}.north east)$);
+ \coordinate (\useKV[ClesMentales]{Nom}-D-##1) at ($(\useKV[ClesMentales]{Nom}.north east)!\x!(\useKV[ClesMentales]{Nom}.south east)$);
+ \coordinate (\useKV[ClesMentales]{Nom}-B-##1) at ($(\useKV[ClesMentales]{Nom}.south east)!\x!(\useKV[ClesMentales]{Nom}.south west)$);
+ \coordinate (\useKV[ClesMentales]{Nom}-G-##1) at ($(\useKV[ClesMentales]{Nom}.south west)!\x!(\useKV[ClesMentales]{Nom}.north west)$);
}%
-}% \ No newline at end of file
+}{}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCCartographie.tex b/macros/latex/contrib/profcollege/latex/PfCCartographie.tex
index 53ffa097d8..cf9aeaf66f 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCartographie.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCartographie.tex
@@ -1,10 +1,11 @@
%%%
% Cartographie
%%%
-\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2023/texmf-dist/metapost/profcollege/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2,Codes=false,Epaisseur=2,ModeleCouleur}
+\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,VillesSupI=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2023/texmf-dist/metapost/profcollege/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2,Codes=false,Epaisseur=2,ModeleCouleur,Boussole=false,Allegee=1}
\defKV[Cartographie]{EchelleCarte=\setKV[Cartographie]{Carte}}
\defKV[Cartographie]{Pays=\setKV[Cartographie]{PaysSeul}}
\defKV[Cartographie]{Villes=\setKV[Cartographie]{VillesSup}}
+\defKV[Cartographie]{VillesI=\setKV[Cartographie]{VillesSupI}}
\defKV[Cartographie]{Traces=\setKV[Cartographie]{Codes}}
\newcommand\Cartographie[3][]{%
@@ -13,13 +14,18 @@
\setKV[Cartographie]{#1}%
\mplibforcehmode%
\ifboolKV[Cartographie]{Projection}{%
+ \mplibnumbersystem{double}%
\begin{mplibcode}
input PfCMonde;
string arborescence;
arborescence:=\useKV[Cartographie]{Arborescence};
- boolean Impression,VillesSup;
+ boolean Impression,VillesSup,VillesSupI,Boussole;
VillesSup=\useKV[Cartographie]{VillesSup};
+ VillesSupI=\useKV[Cartographie]{VillesSupI};
Impression=\useKV[Cartographie]{Impression};
+ Boussole=\useKV[Cartographie]{Boussole};
+
+ Allegee:=\useKV[Cartographie]{Allegee};
maillage:=true;
fleuves:=false;
@@ -44,6 +50,14 @@
clip currentpicture to (mercatorc(-85,-180)--mercatorc(-85,180)--mercatorc(85,180)--mercatorc(85,-180)--cycle);
draw mercatorc(0,-180)--mercatorc(0,180);
draw mercatorc(-85,0)--mercatorc(85,0);
+ %
+ if Boussole:
+ label.top(TEX("\scriptsize Nord"),mercatorc(85,0));
+ label.bot(TEX("\scriptsize Sud"),mercatorc(-85,0));
+ label.urt(TEX("\scriptsize Est"),mercatorc(0,180));
+ label.ulft(TEX("\scriptsize Ouest"),mercatorc(0,-180));
+ fi;
+ %
label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),mercatorc(0,0));
for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),mercatorc(-k*10,0));
@@ -57,6 +71,14 @@
clip currentpicture to (cylindriquec(-85,-180)--cylindriquec(-85,180)--cylindriquec(85,180)--cylindriquec(85,-180)--cycle);
draw cylindriquec(0,-180)--cylindriquec(0,180);
draw cylindriquec(-85,0)--cylindriquec(85,0);
+ %
+ if Boussole:
+ label.top(TEX("\scriptsize Nord"),cylindriquec(85,0));
+ label.bot(TEX("\scriptsize Sud"),cylindriquec(-85,0));
+ label.urt(TEX("\scriptsize Est"),cylindriquec(0,180));
+ label.ulft(TEX("\scriptsize Ouest"),cylindriquec(0,-180));
+ fi;
+ %
label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),cylindriquec(0,0));
for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(-k*10,0));
@@ -70,6 +92,14 @@
clip currentpicture to (winkelc(-85,-180)--winkelc(-85,180) for k=-80 step 5 until 85:--winkelc(k,180) endfor --winkelc(85,-180) for k=80 step -5 until -85:--winkelc(k,-180) endfor --cycle);
draw winkelc(0,-180)--winkelc(0,180);
draw winkelc(-85,0)--winkelc(85,0);
+ %
+ if Boussole:
+ label.top(TEX("\scriptsize Nord"),winkelc(85,0));
+ label.bot(TEX("\scriptsize Sud"),winkelc(-85,0));
+ label.urt(TEX("\scriptsize Est"),winkelc(0,180));
+ label.ulft(TEX("\scriptsize Ouest"),winkelc(0,-180));
+ fi;
+ %
label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),winkelc(0,0));
for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(-k*10,0));
@@ -79,23 +109,31 @@
label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(0,-k*10));
label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),winkelc(0,k*10));
endfor;
- elseif projection="cylindrique":
- clip currentpicture to (cylindriquec(-85,-180)--cylindriquec(-85,180)--cylindriquec(85,180)--cylindriquec(85,-180)--cycle);
- draw cylindriquec(0,-180)--cylindriquec(0,180);
- draw cylindriquec(-85,0)--cylindriquec(85,0);
- label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),cylindriquec(0,0));
- for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
- label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(-k*10,0));
- label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(k*10,0));
- endfor;
- for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
- label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,-k*10));
- label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,k*10));
- endfor;
+% elseif projection="cylindrique":
+% clip currentpicture to (cylindriquec(-85,-180)--cylindriquec(-85,180)--cylindriquec(85,180)--cylindriquec(85,-180)--cycle);
+% draw cylindriquec(0,-180)--cylindriquec(0,180);
+% draw cylindriquec(-85,0)--cylindriquec(85,0);
+% label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),cylindriquec(0,0));
+% for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
+% label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(-k*10,0));
+% label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(k*10,0));
+% endfor;
+% for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 18:
+% label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,-k*10));
+% label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),cylindriquec(0,k*10));
+% endfor;
elseif projection="simple":
clip currentpicture to (simplec(-85,-180)--simplec(-85,180)--simplec(85,180)--simplec(85,-180)--cycle);
draw simplec(0,-180)--simplec(0,180);
draw simplec(-85,0)--simplec(85,0);
+ %
+ if Boussole:
+ label.top(TEX("\scriptsize Nord"),simplec(85,0));
+ label.bot(TEX("\scriptsize Sud"),simplec(-85,0));
+ label.urt(TEX("\scriptsize Est"),simplec(0,180));
+ label.ulft(TEX("\scriptsize Ouest"),simplec(0,-180));
+ fi;
+ %
label.llft(TEX("\tiny \ang{"&decimal(0)&"}"),simplec(0,0));
for k=\useKV[Cartographie]{Pasl} step \useKV[Cartographie]{Pasl} until 8:
label.lft(TEX("\tiny \ang{"&decimal(k*10)&"}"),simplec(-k*10,0));
@@ -106,6 +144,50 @@
label.bot(TEX("\tiny \ang{"&decimal(k*10)&"}"),simplec(0,k*10));
endfor;
fi;
+
+ vardef Villes(text t)=
+ pair CoordVille;
+ string NomVille;
+ n:=0;
+ for p_:=t:
+ n:=n+1;
+ if n=1:
+ %nblec:=p;
+ else:
+ if pair p_:
+ if projection="mercator":
+ CoordVille:=mercatorc(ypart(p_),xpart(p_));
+ elseif projection="winkel":
+ CoordVille:=winkelc(ypart(p_),xpart(p_));
+ elseif projection="cylindrique":
+ CoordVille:=cylindriquec(ypart(p_),xpart(p_));
+ elseif projection="simple":
+ CoordVille:=simplec(ypart(p_),xpart(p_));
+ fi;
+ elseif string p_:
+ NomVille:=p_;
+ else:
+ marque_p:="croix";
+ pointe(CoordVille);
+ label.position(p_)(TEX(""&NomVille&""),CoordVille);
+ fi;
+ fi;
+ endfor;
+ drawoptions();
+ enddef;
+
+ def position(expr t)=
+ if t=1:rt
+ elseif t=2:urt
+ elseif t=3:top
+ elseif t=4:ulft
+ elseif t=5:lft
+ elseif t=6:llft
+ elseif t=7:bot
+ elseif t=8:lrt
+ fi
+ enddef;
+
if VillesSup:
nomfichiermul:=\useKV[Cartographie]{Villes};
nblec:=scantokens readfrom nomfichiermul;
@@ -130,7 +212,12 @@
drawoptions();
closefrom nomfichiermul;
fi;
+
+ if VillesSupI:
+ Villes(\useKV[Cartographie]{VillesI});
+ fi;
\end{mplibcode}
+ \mplibnumbersystem{scaled}%
}{%
% \mplibforcehmode
\begin{mplibcode}
diff --git a/macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex b/macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex
index 4f9e7f9cf6..3f11bb05b7 100644
--- a/macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex
@@ -700,9 +700,9 @@
\bnpl=\numexpr\bnpl+1\relax%
\pilebl=\bnpl\relax%
\fi%
- }
- }
-}
+ }%
+ }%
+}%
\NewDocumentCommand\PfCSommeChiffres{m}{%
\xdef\PfCSMSomme{0}%
@@ -791,16 +791,20 @@
\newcount\anp\newcount\bnp%
\anp=#1%
\bnp=2\relax%
- 1 %
- \whiledo{\bnp<\anp}{%
- \modulo{\the\anp}{\the\bnp}{}%
- \ifnum\remainder=0%
- ; $\num{\the\bnp}$ %
- \fi%
- \bnp=\numexpr\bnp+1%
- }%
- et \num{\the\anp}%
-}
+ \ifnum\anp=1
+ 1%
+ \else
+ 1 %
+ \whiledo{\bnp<\anp}{%
+ \modulo{\the\anp}{\the\bnp}{}%
+ \ifnum\remainder=0%
+ ; $\num{\the\bnp}$ %
+ \fi%
+ \bnp=\numexpr\bnp+1%
+ }%
+ et \num{\the\anp}%
+ \fi%
+}%
\newcount\anpT\newcount\bnpT\newcount\cnpT\newcount\dnpT%
diff --git a/macros/latex/contrib/profcollege/latex/PfCDistributivite.tex b/macros/latex/contrib/profcollege/latex/PfCDistributivite.tex
index 1e8f371cdf..ad0dd8885d 100644
--- a/macros/latex/contrib/profcollege/latex/PfCDistributivite.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCDistributivite.tex
@@ -430,7 +430,9 @@
\fi
}
-\newcommand\Affichage[4][]{%
+% \newcommand\Affichage[4][]{%
+
+\NewDocumentCommand\Affichage{ommm}{%
\setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
\def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
\ensuremath{%
@@ -594,10 +596,12 @@
}{%
\ifboolKV[ClesDistributivite]{Numerique}{%
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==0}{%
- \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+ % \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+ \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\xintFor* ##1 in{\xintSeq{2}{4}}\do{=\Distri[Numerique,Etape=##1]{#2}{#3}{#4}{#5}}%
}{%
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==-1}{%
- \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+ % \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+ \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\xintFor* ##1 in{\xintSeq{2}{0}}\do{=\Distri[Numerique,Etape=##1]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
}{%
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
\xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCDomino.tex b/macros/latex/contrib/profcollege/latex/PfCDomino.tex
index a21e068e56..49cf667c16 100644
--- a/macros/latex/contrib/profcollege/latex/PfCDomino.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCDomino.tex
@@ -17,7 +17,7 @@
valign lower=center,
arc=2pt,
#1
-}
+}%
\newtcolorbox{MyDominoLogo}[1][]{%
enhanced,
@@ -32,52 +32,52 @@
arc=2pt,
colback=white,
#1
-}
+}%
-\NewEnviron{TrameDomino}{%
- \setlength{\margev}{1cm}
- \setlength{\margeh}{1cm}
- \begin{tikzpicture}[remember picture,overlay]
+\NewDocumentEnvironment{TrameDomino}{+b}{%
+ \setlength{\margev}{1cm}%
+ \setlength{\margeh}{1cm}%
+ \begin{tikzpicture}[remember picture,overlay]%
% quadrillages horizontal et vertical
\coordinate[yshift=-\margev] (A0) at (current page.north west);
\coordinate[yshift=-\margev] (B0) at (current page.north east);
\foreach \i in {1,...,\useKV[Domino]{Lignes}}{%
\coordinate[yshift=-\i*\textheight/\LigneDomino] (A\i) at (A0);
\coordinate[yshift=-\i*\textheight/\LigneDomino] (B\i) at (B0);
- }
+ }%
\coordinate[xshift=\margeh] (C0) at (current page.north west);
\coordinate[xshift=\margeh] (D0) at (current page.south west);
\foreach \i in {1,...,\useKV[Domino]{Colonnes}}{
\coordinate[xshift=\i*\textwidth/\ColonneDomino] (C\i) at (C0);
\coordinate[xshift=\i*\textwidth/\ColonneDomino] (D\i) at (D0);
- }
+ }%
\foreach \i in {0,...,\LigneDomino}{%
\draw (A\i) -- (B\i);
- }
+ }%
\foreach \i in {0,...,\ColonneDomino}{%
\draw (C\i) -- (D\i);
- }
- \draw[blue, line width=3pt] (A0)--(B0);
- \draw[blue, line width=3pt] (A\LigneDomino)--(B\LigneDomino);
- \draw[blue, line width=3pt] (C0)--(D0);
- \draw[blue, line width=3pt] (C\ColonneDomino)--(D\ColonneDomino);
+ }%
+ \draw[blue, line width=3pt] (A0)--(B0);%
+ \draw[blue, line width=3pt] (A\LigneDomino)--(B\LigneDomino);%
+ \draw[blue, line width=3pt] (C0)--(D0);%
+ \draw[blue, line width=3pt] (C\ColonneDomino)--(D\ColonneDomino);%
% point pour placer les cartes
\foreach \i in {0,...,\fpeval{\ColonneDomino-1}}{%
\foreach \j in {0,...,\fpeval{\LigneDomino-1}}{%
- \coordinate[xshift=\margeh+(0.5\textwidth/\ColonneDomino)+\i*\textwidth/\ColonneDomino,yshift=-0.5\textheight/\LigneDomino-\j*\textheight/\LigneDomino]
- (Domino\fpeval{\i+\ColonneDomino*\j+1}) at (A0);
- }
- }
- \BODY
+ \coordinate[xshift=\margeh+(0.5\textwidth/\ColonneDomino)+\i*\textwidth/\ColonneDomino,yshift=-0.5\textheight/\LigneDomino-\j*\textheight/\LigneDomino]%
+ (Domino\fpeval{\i+\ColonneDomino*\j+1}) at (A0);%
+ }%
+ }%
+ #1
\end{tikzpicture}
-}
+}{}%
-\setKVdefault[Domino]{Couleur=white,Trame,Ratio=0.5,Lignes=7,Colonnes=5,Superieur=false,Logo=false,Image=tiger.pdf}
+\setKVdefault[Domino]{Couleur=white,Trame,Ratio=0.5,Lignes=7,Colonnes=5,Superieur=false,Logo=false,Image=tiger.pdf}%
\newcommand\Dominos[2][]{%
\useKVdefault[Domino]%
\setKV[Domino]{#1}%
- \setsepchar[*]{§*/}%
+ \setsepchar[*]{§*/}\reademptyitems%
\readlist*\ListeDominos{#2}%
\xdef\CouleurDomino{\useKV[Domino]{Couleur}}%
\xdef\ratiodomino{\useKV[Domino]{Ratio}}%
@@ -85,7 +85,7 @@
\xdef\ColonneDomino{\useKV[Domino]{Colonnes}}%
\ifboolKV[Domino]{Trame}{%
\clearpage
- \begin{TrameDomino}
+ \begin{TrameDomino}%
\foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{%
\node[] at (Domino\i){%
\ifboolKV[Domino]{Superieur}{%
@@ -97,18 +97,18 @@
\ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]%
\end{MyDominoMini}%
}%
- };
+ };%
}%
\end{TrameDomino}%
\ifboolKV[Domino]{Logo}{%
\clearpage
- \begin{TrameDomino}
+ \begin{TrameDomino}%
\foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{%
\node at (Domino\i){%
\begin{MyDominoLogo}%
\includegraphics[height=\tcbtextheight]{\useKV[Domino]{Image}}
\end{MyDominoLogo}%
- };
+ };%
}%
\end{TrameDomino}%
}{}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCDontCountDots.tex b/macros/latex/contrib/profcollege/latex/PfCDontCountDots.tex
new file mode 100644
index 0000000000..e395500a3c
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCDontCountDots.tex
@@ -0,0 +1,197 @@
+% D'après twitter : https://twitter.com/DavidKButlerUoA/status/1700612346258002030/photo/1
+\setKVdefault[NCPP]{Largeur=5,Longueur=7,Unite=5mm,Rayon=1mm,Multiple=3,Couleur=black,Solution=false,Graines=false}%
+\defKV[NCPP]{Graine=\setKV[NCPP]{Graines}\PfCGraineAlea{#1}}%
+
+\newtoks\tokcentre%
+\def\updatetokscentre#1\nil{\addtotok\tokcentre{#1,}}%
+
+\NewDocumentCommand\NeComptePasPoints{o}{%
+ \tokcentre{}%
+ \useKVdefault[NCPP]%
+ \setKV[NCPP]{#1}%
+ % on crée la liste de tous les numéros des points.
+ \def\NCPPLongueur{\useKV[NCPP]{Longueur}}%
+ \def\NCPPLargeur{\useKV[NCPP]{Largeur}}%
+ \xdef\PfCFooListeCentres{1}%
+ \xintFor* ##1 in{\xintSeq{2}{\fpeval{\NCPPLargeur*\NCPPLongueur}}}\do{%
+ \xdef\PfCFooListeCentres{\PfCFooListeCentres,##1}%
+ }%
+ \ChoixAlea{\fpeval{ceil(0.6*\NCPPLargeur*\NCPPLongueur)}}{\fpeval{floor(0.8*\NCPPLargeur*\NCPPLongueur)}}{\Titi}%
+ \MelangeListe{\PfCFooListeCentres}{\Titi}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeCentres{\faa}%
+ \ignoreemptyitems%
+ \foreachitem\compteur\in\ListeCentres{\expandafter\updatetokscentre\compteur\nil}%
+ \modulo{\Titi}{\useKV[NCPP]{Multiple}}%
+ \ifboolKV[NCPP]{Solution}{%
+ Il faut faire des paquets de \useKV[NCPP]{Multiple} points. Il existe plusieurs schémas expliquant la réponse. En voici un qui regroupe tous les points.
+ }{%
+ \textbf{Ne Compte pas les points !}\\
+ Montre que le nombre de points \ifnum\remainder=0\relax%
+ est
+ \else
+ n'est pas\fi{} un multiple de \num{\useKV[NCPP]{Multiple}}.
+ }%
+ \begin{center}
+ \BuildNCPP{\the\tokcentre}%
+ \end{center}
+ \ifboolKV[NCPP]{Solution}{%
+ En faisant des paquets de \useKV[NCPP]{Multiple} points, on montre que le nombre de points \ifnum\remainder=0\relax%
+ est
+ \else
+ n'est pas\fi{} un multiple de \num{\useKV[NCPP]{Multiple}}.
+ }{}%
+}%
+
+\NewDocumentCommand\BuildNCPP{m}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ Unite=\useKV[NCPP]{Unite};
+ Rayon=\useKV[NCPP]{Rayon};
+ Longueur=\useKV[NCPP]{Longueur};
+ Largeur=\useKV[NCPP]{Largeur};
+ Multiple=\useKV[NCPP]{Multiple};
+
+ boolean Choisi,Graines,Solution;
+ Solution=\useKV[NCPP]{Solution};
+
+ color CouleurCercle;
+ CouleurCercle=\useKV[NCPP]{Couleur};
+
+ TotalPoints=Longueur*Largeur;
+
+ nbnoir:=0;%compte les noirs
+ nbblanc:=0;%compte les blancs
+ zr:=0;%pour compter les centres des points
+
+ vardef Allumage(text t)=
+ nbnoirs:=0;
+ for p_=t:
+ nbnoirs:=nbnoirs+1;
+ Allume[p_]:=true;
+ fill cercles(A[p_],Rayon) withcolor CouleurCercle;
+ endfor;
+ enddef;
+
+ pair A[];
+
+ boolean Allume[];
+ for k=0 upto Largeur-1:
+ for l=1 upto Longueur:
+ Allume[k*Longueur+l]=false;
+ A[k*Longueur+l]=Unite*(l,-k);
+ endfor;
+ endfor;
+
+ Allumage(#1);
+
+ if Solution:
+ nbdeplaces:=0;
+ zmontant=0;
+ zdescendant=TotalPoints;
+ for k=0 upto Largeur-1:
+ for l=1 upto Longueur:
+ zmontant:=zmontant+1;
+ if zmontant<zdescendant:
+ if Allume[zmontant]:
+ forever: exitif Allume[zdescendant]=false;
+ zdescendant:=zdescendant-1;
+ endfor;
+ nbdeplaces:=nbdeplaces+1;
+ if (zdescendant>zmontant) and (nbdeplaces<nbnoirs):
+ Allume[zmontant]:=false;
+ Allume[zdescendant]:=true;
+ fill cercles(A[zmontant],Rayon) withcolor white;
+ fill cercles(A[zdescendant],Rayon) withcolor LightSteelBlue;
+% label.top(TEX("?"),A[zdescendant]);
+ zdescendant:=zdescendant-1;
+ fi;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ %
+ %nbcases:=0;
+ %for k=0 upto Largeur-1:
+ %for l=1 upto Longueur:
+ %nbcases:=nbcases+1;
+ %if Allume[nbcases]:
+ %fill cercles(A[nbcases],Rayon) withcolor Gold;
+ %fi;
+ %endfor;
+ %endfor;
+ etape=1;
+ forever: exitif Allume[etape]=true;
+ etape:=etape+1;
+ endfor;
+% label.top(TEX("!"),A[etape]);
+ for k=0 upto (TotalPoints-etape):
+ if ((k+1) mod Multiple)=0:
+ draw (A[etape+k]+Unite*(-0.25,-0.25))--(A[etape+k]+Unite*(0.25,0.25));
+ fi;
+ endfor;
+ for k=1 upto ((TotalPoints-etape-Multiple+1) mod Multiple):
+ fill cercles(A[TotalPoints-k+1],Rayon) withcolor red;
+ endfor;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={Unite=\useKV[NCPP]{Unite};Rayon=\useKV[NCPP]{Rayon};Longueur=\useKV[NCPP]{Longueur};Largeur=\useKV[NCPP]{Largeur};Multiple=\useKV[NCPP]{Multiple};boolean Solution;Solution=\useKV[NCPP]{Solution};color CouleurCercle;CouleurCercle=\useKV[NCPP]{Couleur};}]
+ TotalPoints=Longueur*Largeur;
+ %
+ nbnoir:=0;%compte les noirs
+ nbblanc:=0;%compte les blancs
+ zr:=0;%pour compter les centres des points
+ %
+ vardef Allumage(text t)=
+ for p_=t:
+ Allume[p_]:=true;
+ fill cercles(A[p_],Rayon) withcolor CouleurCercle;
+ endfor;
+ enddef;
+ %
+ pair A[];
+ %
+ boolean Allume[];
+ for k=0 upto Largeur-1:
+ for l=1 upto Longueur:
+ Allume[k*Longueur+l]=false;
+ A[k*Longueur+l]=Unite*(l,-k);
+ endfor;
+ endfor;
+ %
+ Allumage(#1);
+ %
+ if Solution:
+ zmontant=0;
+ zdescendant=TotalPoints;
+ for k=0 upto Largeur-1:
+ for l=1 upto Longueur:
+ zmontant:=zmontant+1;
+ if zmontant<zdescendant:
+ if Allume[zmontant]:
+ forever: exitif Allume[zdescendant]=false;
+ zdescendant:=zdescendant-1;
+ endfor;
+ if zdescendant>zmontant:
+ fill cercles(A[zmontant],Rayon) withcolor white;
+ fill cercles(A[zdescendant],Rayon) withcolor LightSteelBlue;
+ zdescendant:=zdescendant-1;
+ fi;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ for k=0 upto (TotalPoints-zdescendant):
+ if ((k+1) mod Multiple)=0:
+ drawarrow A[zdescendant+k+1]--(A[zdescendant+k+1]+Unite*(0.5,0));
+ fi;
+ endfor;
+ for k=1 upto ((TotalPoints-zdescendant) mod Multiple):
+ fill cercles(A[TotalPoints-k+1],Rayon) withcolor red;
+ endfor;
+ fi;
+ \end{mpost}
+ \fi
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex b/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
index 188bd3a569..3d7a324b73 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
@@ -1,148 +1,233 @@
%%%
% QCM
%%%
-\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=60pt,Couleur=gray!15,Titre=false,Nom=R\'eponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false,Parties={Yeux,Nez,Bouche},CouleurAlt=gray!15}%
+\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=60pt,Couleur=gray!15,Titre=false,Nom=R\'eponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false,Parties={Yeux,Nez,Bouche},CouleurAlt=gray!15,Seul=false}%
\newlength{\LargeurQCM}%
\newlength{\PfCLargeurQCM}%
\newcounter{QuestionQCM}%
\newcounter{TitreQCM}%
%
+\newcounter{TotalQCMSeul}%
+\newcounter{TotalQCMSeulSol}%
+\setcounter{TotalQCMSeul}{0}%
+\setcounter{TotalQCMSeulSol}{0}%
+%
+\setKVdefault[QCMSeul]{Melange=false,Solution=false,EnColonne=false}%
+\defKV[QCMSeul]{Colonnes=\setKV[QCMSeul]{EnColonne}}%
+%
+\NewDocumentCommand\PfCQCMSChoixLabelSol{m}{%
+ \xdef\PfCFooChoixLabel{\ListeQCM[\ListeQCMlen]}%
+ \setsepchar{-}%
+ \readlist*\PfCSolListeReponses{\PfCFooChoixLabel}%
+ \xdef\RetiensSiSol{0}%
+ \xintFor* ##3 in{\xintSeq{1}{\PfCSolListeReponseslen}}\do{%
+ \ifnum#1=\PfCSolListeReponses[##3]\relax%
+ \xdef\RetiensSiSol{\fpeval{\RetiensSiSol+1}}%
+ \fi%
+ }%
+ \ifnum\RetiensSiSol>0\relax%
+ $\blacksquare$%
+ \else%
+ $\square$%
+ \fi%
+}%
+
+\NewDocumentCommand\QCMSeul{om}{%
+ \useKVdefault[QCMSeul]%
+ \setKV[QCMSeul]{#1}%
+ \setsepchar{&}\ignoreemptyitems%
+ \readlist*\ListeQCM{#2}%
+ % on définit une liste ordonnées des numéros d'items. Elle est utilisée par défaut.
+ \xdef\PfCFooListePermute{1}%
+ \xintFor* ##1 in{\xintSeq{2}{\fpeval{\ListeQCMlen-2}}}\do{%
+ \xdef\PfCFooListePermute{\PfCFooListePermute,##1}%
+ }%
+ %
+ \ifboolKV[QCMSeul]{Melange}{%
+ \ifboolKV[QCMSeul]{Solution}{%
+ \stepcounter{TotalQCMSeulSol}%
+ \expandafter\xdef\csname PfCQCMSListeAv\endcsname{\csname PfCQCMSListe\Roman{TotalQCMSeulSol}\endcsname}%
+ % La liste restaurée est \PfCQCMSListeAv
+ }{%
+ \stepcounter{TotalQCMSeul}%
+ \MelangeListe{\PfCFooListePermute}{\fpeval{\ListeQCMlen-2}}%
+ \expandafter\xdef\csname PfCQCMSListe\Roman{TotalQCMSeul}\endcsname{\faa}%
+ % La liste exportée est \faa
+ \expandafter\xdef\csname PfCQCMSListe\endcsname{\faa}%
+ }%
+ }{%
+ \ifboolKV[QCMSeul]{Solution}{%
+ \expandafter\xdef\csname PfCQCMSListeAv\endcsname{\csname PfCFooListePermute\endcsname}%
+ }{%
+ \expandafter\xdef\csname PfCQCMSListe\endcsname{\PfCFooListePermute}%
+ }%
+ }%
+ \setsepchar{,}\ignoreemptyitems%
+ \ifboolKV[QCMSeul]{Solution}{%
+ \readlist*\ListeEnumerate{\PfCQCMSListeAv}%
+ }{%
+ \readlist*\ListeEnumerate{\PfCQCMSListe}%
+ }%
+ % On écrit
+ \ListeQCM[1]%
+ \ifboolKV[QCMSeul]{EnColonne}{\begin{multicols}{\useKV[QCMSeul]{Colonnes}}}{}%
+ \begin{itemize}[label=$\square$]
+ \xintFor* ##1 in{\xintSeq{2}{\fpeval{\ListeQCMlen-1}}}\do{%
+ \xdef\Titi{\ListeEnumerate[\fpeval{##1-1}]}
+ \ifboolKV[QCMSeul]{Solution}{%
+ \item[\PfCQCMSChoixLabelSol{\Titi}] \ListeQCM[\fpeval{\Titi+1}]
+ }{%
+ \item \ListeQCM[\fpeval{\Titi+1}]
+ }%
+ }%
+ \end{itemize}
+ \ifboolKV[QCMSeul]{EnColonne}{\end{multicols}}{}%
+}%
+%
\ifdef{\QCM}{%
\PackageWarning{ProfCollege}{La commande \noexpand\QCM étant définie par la classe du document, ProfCollege modifie sa commande \noexpand\QCM en \noexpand\QCMPfC.}%
\newcommand\QCMPfC[2][]{%
\useKVdefault[ClesQCM]%
\setKV[ClesQCM]{#1}%
- \colorlet{PfCCouleurAlterneQCM}{\useKV[ClesQCM]{CouleurAlt}}%
- \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
- \setcounter{TitreQCM}{0}
- \setsepchar[*]{,*&}\ignoreemptyitems%
- \readlist*\ListeQCM{#2}%
- \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
- \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
- \ifboolKV[ClesQCM]{Multiple}{%
- \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
- \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
- \setsepchar[*]{/}%
- \readlist*\ListeNomsMul{\ListeNom}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
- \cline{2-\NBcases}%
- \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ListeNomsMul[##2]}%
- \\
- \hline%
- \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
- \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]==1}{$\boxtimes$}{$\square$}}{$\square$}%
- }\\
- }%
- \hline%
- \end{tabular}%
- \renewcommand{\arraystretch}{1}%
+ \ifboolKV[ClesQCM]{Seul}{%
+ \QCMSeul[#1]{#2}%
}{%
- \ifboolKV[ClesQCM]{VF}{%
- \setKV[ClesQCM]{Reponses=2}%
-% \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
- \setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
- \setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
- \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \colorlet{PfCCouleurAlterneQCM}{\useKV[ClesQCM]{CouleurAlt}}%
+ \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
+ \setcounter{TitreQCM}{0}
+ \setsepchar[*]{,*&}\ignoreemptyitems%
+ \readlist*\ListeQCM{#2}%
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \ifboolKV[ClesQCM]{Multiple}{%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
+ \setsepchar[*]{/}%
+ \readlist*\ListeNomsMul{\ListeNom}%
\begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\cline{2-\NBcases}%
- \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
- \hline%
- \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
- \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2==\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
- }\\
- }%
- \hline%
- \end{tabular}
- }{%
- \setlength{\LargeurQCM}{\fpeval{(\linewidth-2*\tabcolsep-\useKV[ClesQCM]{Reponses}*(2*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
- \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
\multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+ &\ListeNomsMul[##2]}%
\\
- }{}
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\PfCSolCellColor{##1}{##2}}{}\ListeQCM[##1,##2+1]%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]==1}{$\boxtimes$}{$\square$}}{$\square$}%
}\\
}%
\hline%
\end{tabular}%
+ \renewcommand{\arraystretch}{1}%
+ }{%
+ \ifboolKV[ClesQCM]{VF}{%
+ \setKV[ClesQCM]{Reponses=2}%
+ % \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
+ \setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2==\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+ }\\
+ }%
+ \hline%
+ \end{tabular}
+ }{%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-2*\tabcolsep-\useKV[ClesQCM]{Reponses}*(2*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+ \\
+ }{}
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\PfCSolCellColor{##1}{##2}}{}\ListeQCM[##1,##2+1]%
+ }\\
+ }%
+ \hline%
+ \end{tabular}%
+ }%
}%
+ \renewcommand{\arraystretch}{1}%
}%
- \renewcommand{\arraystretch}{1}%
}%
}{%
\newcommand\QCM[2][]{%
\useKVdefault[ClesQCM]%
\setKV[ClesQCM]{#1}%
- \colorlet{PfCCouleurAlterneQCM}{\useKV[ClesQCM]{CouleurAlt}}%
- \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
- \setcounter{TitreQCM}{0}
- \setsepchar[*]{,*&}\ignoreemptyitems%
- \readlist*\ListeQCM{#2}%
- \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
- \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
- \ifboolKV[ClesQCM]{Multiple}{%
- \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
- \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
- \setsepchar[*]{/}%
- \readlist*\ListeNomsMul{\ListeNom}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
- \cline{2-\NBcases}%
- \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ListeNomsMul[##2]}%
- \\
- \hline%
- \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
- \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]==1}{$\boxtimes$}{$\square$}}{$\square$}%
- }\\
- }%
- \hline%
- \end{tabular}%
- \renewcommand{\arraystretch}{1}%
+ \ifboolKV[ClesQCM]{Seul}{%
+ \QCMSeul[#1]{#2}%
}{%
- \ifboolKV[ClesQCM]{VF}{%
- \setKV[ClesQCM]{Reponses=2}%
- \setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
- \setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
- \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \colorlet{PfCCouleurAlterneQCM}{\useKV[ClesQCM]{CouleurAlt}}%
+ \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
+ \setcounter{TitreQCM}{0}
+ \setsepchar[*]{,*&}\ignoreemptyitems%
+ \readlist*\ListeQCM{#2}%
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \ifboolKV[ClesQCM]{Multiple}{%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
+ \setsepchar[*]{/}%
+ \readlist*\ListeNomsMul{\ListeNom}%
\begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
\cline{2-\NBcases}%
- \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
- \hline%
- \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
- \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2==\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
- }\\
- }%
- \hline%
- \end{tabular}
- }{%
- \setlength{\LargeurQCM}{\fpeval{(\linewidth-2*\tabcolsep-\useKV[ClesQCM]{Reponses}*(2*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
- \xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}%
- \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
- \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
\multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+ &\ListeNomsMul[##2]}%
\\
- }{}%
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\PfCSolCellColor{##1}{##2}}{}\ListeQCM[##1,\fpeval{##2+1}]%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]==1}{$\boxtimes$}{$\square$}}{$\square$}%
}\\
}%
\hline%
\end{tabular}%
+ \renewcommand{\arraystretch}{1}%
+ }{%
+ \ifboolKV[ClesQCM]{VF}{%
+ \setKV[ClesQCM]{Reponses=2}%
+ \setlength{\PfCLargeurQCM}{\useKV[ClesQCM]{Largeur}}%
+ \setlength{\LargeurQCM}{\linewidth-6\tabcolsep-2\PfCLargeurQCM-4\arrayrulewidth}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2==\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+ }\\
+ }%
+ \hline%
+ \end{tabular}
+ }{%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-2*\tabcolsep-\useKV[ClesQCM]{Reponses}*(2*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+ \\
+ }{}%
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{PfCCouleurAlterneQCM}\fi}{}\ifboolKV[ClesQCM]{Solution}{\PfCSolCellColor{##1}{##2}}{}\ListeQCM[##1,\fpeval{##2+1}]%
+ }\\
+ }%
+ \hline%
+ \end{tabular}%
+ }%
}%
+ \renewcommand{\arraystretch}{1}%
}%
- \renewcommand{\arraystretch}{1}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex b/macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex
index a2cd50db02..11ae58b5b7 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex
@@ -1,26 +1,26 @@
%%%
% Ecriture des nombres en lettres
%%%
-\setKVdefault[ClesEcriture]{Math=false,Majuscule=false,E=false,Tradition=false,Zero=false}
+\setKVdefault[ClesEcriture]{Math=false,Majuscule=false,E=false,Tradition=false,Zero=false}%
\newcommand\EcriturePluriel[1]{%
\xintifboolexpr{#1 > 1}{s}{}%
-}
+}%
\newcommand\EcritureDecimale{%
\StrLen{\ListeEcriture[2]}[\LongueurDecimale]%
\xintifboolexpr{\LongueurDecimale == 6}{%
~millionième\EcriturePluriel{\ListeEcriture[2]}%
}{\xintifboolexpr{\LongueurDecimale == 5}{%
- ~cent-millième\EcriturePluriel{\ListeEcriture[2]}
+ ~cent-millième\EcriturePluriel{\ListeEcriture[2]}%
}{\xintifboolexpr{\LongueurDecimale == 4}{%
- ~dix-millième\EcriturePluriel{\ListeEcriture[2]}
+ ~dix-millième\EcriturePluriel{\ListeEcriture[2]}%
}{\xintifboolexpr{\LongueurDecimale == 3}{%
- ~millième\EcriturePluriel{\ListeEcriture[2]}
+ ~millième\EcriturePluriel{\ListeEcriture[2]}%
}{\xintifboolexpr{\LongueurDecimale == 2}{%
- ~centième\EcriturePluriel{\ListeEcriture[2]}
+ ~centième\EcriturePluriel{\ListeEcriture[2]}%
}{\xintifboolexpr{\LongueurDecimale == 1}{%
- ~dixième\EcriturePluriel{\ListeEcriture[2]}
+ ~dixième\EcriturePluriel{\ListeEcriture[2]}%
}{}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex b/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
index d146f5fd84..c4503954b3 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
@@ -1,7 +1,7 @@
%%%
% Ecritures d'unit\'es
%%%
-\setKVdefault[Unites]{m=false,km=false,hm=false,ha=false,dam=false,a=false,dm=false,cm=true,mm=false,um=false,nm=false,g=true,t=false,q=false,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,ug=false,ng=false,mmin=false,kmh=true,kms=false,ms=false,mh=false,kgm=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false,Go=true,Mo=false,ko=false,To=false,o=false,kWh=true,C=true,K=false,F=false,Nombre,US=false,UK=false,Precision=2}%
+\setKVdefault[Unites]{m=false,km=false,hm=false,ha=false,dam=false,a=false,dm=false,cm=true,mm=false,um=false,nm=false,g=true,t=false,q=false,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,ug=false,ng=false,mmin=false,kmh=true,kms=false,ms=false,mh=false,kgm=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false,Go=true,Mo=false,ko=false,To=false,o=false,kWh=true,C=true,K=false,F=false,Nombre,US=false,UK=false,CFA=false,CFP=false,CHF=false,Euro=false,Precision=2}%
\defKV[Unites]{Dots=\setKV[Unites]{Nombre=false}}%
\newlength{\PfCLgUnites}
@@ -170,37 +170,45 @@
}%
}%
-%Pour mémoire au cas où...
-%\newcommand\Prixo[2][2]{%
-% \SI[round-mode=places,round-precision=#1]{#2}{\EuRo}%
-%}
-
-%\NewDocumentCommand\Prix{o O{2} m}{%
-% \useKVdefault[Unites]%
-% \setKV[Unites]{#1}%
-% \ifboolKV[Unites]{Nombre}{%
-% \SI[round-mode=places,round-precision=#2]{#3}{\EuRo}%
-% }{%
-% \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}
-% \pointilles[\PfCLgUnites]~\si{\EuRo}%
-% }%
-%}%
-
+\makeatletter
\NewDocumentCommand\Prix{o m}{%
\useKVdefault[Unites]%
\setKV[Unites]{#1}%
- \ifboolKV[Unites]{US}{%
- \DeclareSIUnit{\Tempo}{\Dollar}%
+ \ifboolKV[Unites]{CHF}{%
+ \DeclareSIUnit{\Tempo}{\PfCCHF}%
}{%
- \ifboolKV[Unites]{UK}{%
- \DeclareSIUnit{\Tempo}{\LivreSterling}%
+ \ifboolKV[Unites]{CFA}{%
+ \DeclareSIUnit{\Tempo}{\PfCCFA}%
}{%
- \DeclareSIUnit{\Tempo}{\EuRo}%
+ \ifboolKV[Unites]{CFP}{%
+ \DeclareSIUnit{\Tempo}{\PfCCFP}%
+ }{%
+ \ifboolKV[Unites]{US}{%
+ \DeclareSIUnit{\Tempo}{\Dollar}%
+ }{%
+ \ifboolKV[Unites]{UK}{%
+ \DeclareSIUnit{\Tempo}{\LivreSterling}%
+ }{%
+ \ifboolKV[Unites]{Euro}{%
+ \DeclareSIUnit{\Tempo}{\EuRo}%
+ }{%
+ \if@CHF%
+ \setKV[Unites]{CHF}%
+ \fi%
+ \DeclareSIUnit{\Tempo}{\DeviseDefaut}%
+ }%
+ }%
+ }%
+ }%
}%
}%
\ifboolKV[Unites]{Nombre}{%
\IfInteger{#2}{%
- \SI{#2}{\Tempo}%
+ \ifboolKV[Unites]{CHF}{%
+ \si{\PfCCHF}~\num{#2}.-%
+ }{%
+ \SI{#2}{\Tempo}%
+ }%
}{%
\SI[round-mode=places,round-precision=\useKV[Unites]{Precision}]{#2}{\Tempo}%
}%
@@ -209,6 +217,31 @@
\pointilles[\PfCLgUnites]~\si{\Tempo}%
}%
}%
+\makeatother
+
+%\NewDocumentCommand\Prixold{o m}{%
+% \useKVdefault[Unites]%
+% \setKV[Unites]{#1}%
+% \ifboolKV[Unites]{US}{%
+% \DeclareSIUnit{\Tempo}{\Dollar}%
+% }{%
+% \ifboolKV[Unites]{UK}{%
+% \DeclareSIUnit{\Tempo}{\LivreSterling}%
+% }{%
+% \DeclareSIUnit{\Tempo}{\EuRo}%
+% }%
+% }%
+% \ifboolKV[Unites]{Nombre}{%
+% \IfInteger{#2}{%
+% \SI{#2}{\Tempo}%
+% }{%
+% \SI[round-mode=places,round-precision=\useKV[Unites]{Precision}]{#2}{\Tempo}%
+% }%
+% }{%
+% \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}%
+% \pointilles[\PfCLgUnites]~\si{\Tempo}%
+% }%
+%}%
\NewDocumentCommand\Octet{o m}{%
\useKVdefault[Unites]%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex b/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex
index 86d323139e..df5743e439 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex
@@ -4,9 +4,11 @@
\newtoks\tokPfCEngrenages%
\def\UpdatetoksEngrenages#1/#2\nil{\addtotok\tokPfCEngrenages{#1,#2,}}%
-\setKVdefault[Engrenages]{Couleur=LightSteelBlue,Unite=3mm}
+\setKVdefault[Engrenages]{Couleur=LightSteelBlue,Unite=3mm,ListeCouleurs={LightSteelBlue}}
\NewDocumentCommand\Engrenages{o m}{%
+ \newtoks\toklistecouleur%
+ \toklistecouleur{}%
\tokPfCEngrenages{}
\useKVdefault[Engrenages]%
\setKV[Engrenages]{#1}%
@@ -18,12 +20,28 @@
\foreachitem\compteur\in\ListePfCEngrenages{%
\xdef\PfCFooEngrenages{\PfCFooEngrenages \ListePfCEngrenages[\compteurcnt,1],\ListePfCEngrenages[\compteurcnt,2],}%
}%
- \BuildEngrenages{\PfCFooEngrenages}%
+ \xdef\ListeAvantCouleurs{\useKV[Engrenages]{ListeCouleurs}}%
+ \readlist*\ListeCouleur{\ListeAvantCouleurs}%
+ \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
+ \BuildEngrenages{\PfCFooEngrenages}{\the\toklistecouleur}%
}%
-\def\BuildEngrenagesCode#1{%
+\def\BuildEngrenagesCode#1#2{%
u:=\useKV[Engrenages]{Unite};
CouleurEngrenage=\useKV[Engrenages]{Couleur};
+%
+ vardef RecuperationCouleurs(text t)=
+ color Col[];
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ if color p_:
+ Col[n]=p_;
+ else:
+ Col[n]=CouleurEngrenage;
+ fi;
+ endfor;
+ enddef;
%
vardef LectureDonnees(text t)=
n:=0;k=0;l=0;
@@ -39,17 +57,26 @@
endfor;
enddef;
%
+ RecuperationCouleurs(#2);
LectureDonnees(#1);
%
pair K;
K=(0,0);
picture EngrenageFinal;
EngrenageFinal=image(
+ if unknown Col[1]:
+ else:
+ CouleurEngrenage:=Col[1];
+ fi;
trace Engrenage(Mm[1],Zz[1],(0,0));
%
Signe=1;
%
for w=2 upto (n div 2):
+ if unknown Col[w]:
+ else:
+ CouleurEngrenage:=Col[w];
+ fi;
K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0);
AngleRot[w]:=360/(2*Zz[w]);
if w=2:
@@ -77,16 +104,16 @@
);
}
-\NewDocumentCommand\BuildEngrenages{m}{%
+\NewDocumentCommand\BuildEngrenages{mm}{%
\ifluatex
\mplibforcehmode
\begin{mplibcode}
input PfCEngrenages;
- \BuildEngrenagesCode{#1}
+ \BuildEngrenagesCode{#1}{#2}
trace EngrenageFinal;
\end{mplibcode}
\else
- \begin{mpost}[mpsettings={input PfCEngrenages;\BuildEngrenagesCode{#1}}]
+ \begin{mpost}[mpsettings={input PfCEngrenages;\BuildEngrenagesCode{#1}{#2}}]
trace EngrenageFinal;
\end{mpost}
\fi
diff --git a/macros/latex/contrib/profcollege/latex/PfCEratosthene.tex b/macros/latex/contrib/profcollege/latex/PfCEratosthene.tex
index bcaeaa7a6a..192e470e66 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEratosthene.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEratosthene.tex
@@ -1,25 +1,25 @@
-\setKVdefault[ClesEra]{Premier=false,Nombre=1,CouleurP=Cornsilk!50,CouleurNP=Crimson!15,Colonnes=10,Lignes=10,Hauteur=24pt}
+\setKVdefault[ClesEra]{Premier=false,Nombre=1,CouleurP=Cornsilk!50,CouleurNP=Crimson!15,Colonnes=10,Lignes=10,Hauteur=24pt}%
\NewDocumentCommand\TestPremier{m}{%
% #1 le nombre premier \`a tester
\newcount\anp\newcount\bnp\newcount\cnp%
- \anp=#1\relax
- \bnp=2\relax
- \premier=-1\relax
+ \anp=#1\relax%
+ \bnp=2\relax%
+ \premier=-1\relax%
% Pour d\'eterminer le nombre d'\'etapes
\whiledo{\anp > 1}{%
- \modulo{\the\anp}{\the\bnp}
- \ifnum\remainder=0\relax
- \global\premier=\numexpr\premier+1\relax
- \cnp=\numexpr\anp/\bnp\relax
- \anp=\cnp\relax
+ \modulo{\the\anp}{\the\bnp}%
+ \ifnum\remainder=0\relax%
+ \global\premier=\numexpr\premier+1\relax%
+ \cnp=\numexpr\anp/\bnp\relax%
+ \anp=\cnp\relax%
\else%
\bnp=\numexpr\bnp+1\relax%
\fi%
}%
\ifnum\premier=0%
\setKV[ClesEra]{Premier=true}%
- \else
+ \else%
\setKV[ClesEra]{Premier=false}%
\fi%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex b/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
index 700fb9906b..823f203623 100644
--- a/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
@@ -1,4 +1,4 @@
-\setKVdefault[Facto]{Aide=false,AideMul=false,Couleur=Crimson,NomExpression=A,Lettre=x,Details,Formel=false,VariableSup=false,ParenthesesFin=false,Finale=false}
+\setKVdefault[Facto]{Aide=false,AideMul=false,Couleur=Crimson,NomExpression=A,Lettre=x,Details,Formel=false,VariableSup=false,ParenthesesFin=false,Finale=false,Type=0}
\defKV[Facto]{Litteral=\setKV[Facto]{Details=false}}
\defKV[Facto]{AutreVariable=\setKV[Facto]{VariableSup}}
\defKV[Facto]{Resultat=\setKV[Facto]{Finale}}
@@ -86,7 +86,7 @@
\end{align*}
}
\else%k*a+-k*b=k(a+-b)
- \#3 #3 -- \#4 #4 -- \#5 #5
+% \#3 #3 -- \#4 #4 -- \#5 #5
\begin{CAS}
% La variable
vars('\useKV[Facto]{Lettre}'\ifboolKV[Facto]{VariableSup}{%
@@ -121,16 +121,55 @@
}{%Avec au moins un des facteurs polynomes
\StrCompare{\PfCFactoSymbole}{-}[\PfCRetiensSigneFacteurDeux]%
\StrChar{#5}{1}[\RetiensPremierCaractere]%en cas de deuxième terme écrit b-ax
- \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}{\IfDecimal{\RetiensPremierCaractere}{+}{}}{+}\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
+ \ifnum\fpeval{\useKV[Facto]{Type}}=1\relax
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#4}{Ka}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}\PfCFactoSymbole\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#5}{Kb}\\\setKV[Facto]{Aide}}{}%
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{\PfCEcrireFacteur{#4}{Ka}}}_{a}\times\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}\PfCFactoSymbole\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}\times\underbrace{\Fdash{\PfCEcrireFacteur{#5}{Kb}}}_{b}}{\PfCEcrireFacteur{#4}{Ka}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}\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}{\IfDecimal{\RetiensPremierCaractere}{+}{}}{+}\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*}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \else
+ \ifnum\fpeval{\useKV[Facto]{Type}}=3\relax
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#4}{Ka}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}\PfCFactoSymbole\PfCEcrireFacteur{#5}{Kb}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}\\\setKV[Facto]{Aide}}{}%
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{\PfCEcrireFacteur{#4}{Ka}}}_{a}\times\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}\PfCFactoSymbole\underbrace{\Fdash{\PfCEcrireFacteur{#5}{Kb}}}_{b}\times\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}}{\PfCEcrireFacteur{#4}{Ka}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}\PfCFactoSymbole\PfCEcrireFacteur{#5}{Kb}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}}\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}{\IfDecimal{\RetiensPremierCaractere}{+}{}}{+}\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*}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \else
+ \ifnum\fpeval{\useKV[Facto]{Type}}=2\relax
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \begin{align*}
+ \ifboolKV[Facto]{Aide}{\PfCFactoNE&=\setKV[Facto]{Aide=false}\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#4}{Ka}\PfCFactoSymbole\PfCEcrireFacteur{#5}{Kb}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}\\\setKV[Facto]{Aide}}{}%
+ \PfCFactoNE&=\ifboolKV[Facto]{Aide}{\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}\times\underbrace{\Fdash{\PfCEcrireFacteur{#4}{Ka}}}_{a}\PfCFactoSymbole\underbrace{\Fdash{\PfCEcrireFacteur{#5}{Kb}}}_{b}\times\underbrace{\Fdash{\PfCEcrireFacteur{#3}{Kk}}}_{k}}{\PfCEcrireFacteur{#3}{Kk}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#4}{Ka}\PfCFactoSymbole\PfCEcrireFacteur{#5}{Kb}\ifboolKV[Facto]{AideMul}{\times}{}\PfCEcrireFacteur{#3}{Kk}}\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}{\IfDecimal{\RetiensPremierCaractere}{+}{}}{+}\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*}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \else
+ \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}{\IfDecimal{\RetiensPremierCaractere}{+}{}}{+}\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%
+ \fi%
+ \fi%
+ }%
+ \fi%
}%
\NewDocumentCommand\Factorisationold{sommm}{%
diff --git a/macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex b/macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex
index b9ff48e176..77c683b148 100644
--- a/macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex
@@ -1,7 +1,7 @@
%%%
% Fonction Affine
%%%
-\setKVdefault[ClesAffine]{Nom=f,Variable=x,CoefDir=a,OrdoOrig=b,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false}%ACoefficient=false%: inutile ?
+\setKVdefault[ClesAffine]{Nom=f,Variable=x,CoefDir=a,OrdoOrig=b,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false,Centre=false}%ACoefficient=false%: inutile ?
\newcommand\FonctionAffine[5][]{%
% #1 nombre ou abscisse premier point
@@ -33,7 +33,7 @@
\ifboolKV[ClesAffine]{ProgCalcul}{%
La fonction affine $\useKV[ClesAffine]{Nom}$ est d\'efinie par :
\begin{align*}
- \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
+ \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}.
\end{align*}
Nous cherchons le nombre $\useKV[ClesAffine]{Variable}$ tel que son image par la fonction $\useKV[ClesAffine]{Nom}$ soit $\num{#2}$. Donc on obtient :
\begin{align*}
@@ -45,7 +45,7 @@
$\useKV[ClesAffine]{Variable}$ tel que
$\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or,
la fonction $\useKV[ClesAffine]{Nom}$ est d\'efinie par : \[%
- \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3==0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3==0}{\num{#4}}{\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}}
+ \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3==0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3==0}{\num{#4}}{\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}}.
\]
Par cons\'equent, on a :
\begin{align*}
@@ -90,9 +90,22 @@
\ifboolKV[ClesAffine]{Redaction}{%
\xintifboolexpr{#2==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$
est une fonction constante, alors sa repr\'esentation graphique est une droite parall\`ele \`a l'axe des abscisses passant par le point de coordonn\'ees $(0;\num{#3})$.}%
- {\xintifboolexpr{#3==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction lin\'eaire, alors sa repr\'esentation graphique est une droite passant par l'origine du rep\`ere.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
+ {\xintifboolexpr{#3==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction lin\'eaire, alors sa repr\'esentation graphique est une droite passant par l'origine du rep\`ere.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4}\,;\,\num{\fpeval{#2*#4+#3}})$.
}{%
- Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa repr\'esentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomVariable{\useKV[ClesAffine]{Variable}}\xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis \setKV[ClesAffine]{Variable=\NomVariable}$\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonn\'ees $(\num{#5};\num{\fpeval{#2*#5+#3}})$.%
+ Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa repr\'esentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est %
+ \xdef\NomVariable{\useKV[ClesAffine]{Variable}}\xdef\NomFonction{\useKV[ClesAffine]{Nom}}%
+ \ifboolKV[ClesAffine]{Centre}{: \[
+ \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}.
+ \]}{%
+ \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. %
+ }%
+ On place le point de coordonn\'ees $(\num{#4}\,;\,\num{\fpeval{#2*#4+#3}})$.\\Je choisis \setKV[ClesAffine]{Variable=\NomVariable}$\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est %
+ \ifboolKV[ClesAffine]{Centre}{: \[
+ \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#5}.
+ \]}{%
+ \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#5}. %
+ }%
+ On place le point de coordonn\'ees $(\num{#5}\,;\,\num{\fpeval{#2*#5+#3}})$.%
}%
}%
}%
@@ -103,9 +116,10 @@
\def\MPFonctionAffine#1#2#3#4#5#6#7{%
% #1 Unitex #2 Unitey
- % #2 a pour f1 - #4 b pour f1
- % #5 abscisse du premier point
- % #6 abscisse du deuxi\`eme point
+ % #3 a pour f1 - #4 b pour f1
+ % #5 abscisse du premier point
+ % #6 abscisse du deuxi\`eme point
+ % #7 on affiche ou pas la lecture du coef directeur
\ifluatex
\mplibforcehmode
\begin{mplibcode}
@@ -155,14 +169,14 @@
%On trace les axes
drawarrow (XMin*unitex,0)--(XMax*unitex,0);
drawarrow (0,YMin*unitey)--(0,YMax*unitey);
- label.llft(btex O etex,(0,0));
- dotlabel.bot(btex 1 etex,(unitex,0));
- dotlabel.lft(btex 1 etex,(0,unitey));
+ label.llft(TEX("\footnotesize O"),(0,0));
+ dotlabel.lrt(TEX("1"),(unitex,0));
+ dotlabel.ulft(TEX("1"),(0,unitey));
% On trace la droite
pair A[];
A1=(#5*unitex,(#5*#3+(#4))*unitey);
A2=(#6*unitex,(#6*#3+(#4))*unitey);
- draw 2[A1,A2]--2[A2,A1];
+ draw 10[A1,A2]--10[A2,A1];
clip currentpicture to ((XMin*unitex,YMin*unitey)--(XMax*unitex,YMin*unitey)--(XMax*unitex,YMax*unitey)--(XMin*unitex,YMax*unitey)--cycle);
%On labellise les points
fill (fullcircle scaled 1mm) shifted A1;
@@ -171,20 +185,26 @@
draw (xpart(A2),0)--A2--(0,ypart(A2)) dashed evenly;
if (#5*#3+(#4))=0:
else:
+ if #5<>1:
if (#5*#3+(#4))<0:
label.top(TEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
else:
label.bot(TEX("\num{"&decimal(#5)&"}"),(xpart(A1),0));
fi;
fi;
+ fi;
if (#6*#3+(#4))=0:
else:
if (#6*#3+(#4))<0:
+ if #6<>1:
label.top(TEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
+ fi;
else:
+ if #6<>1:
label.bot(TEX("\num{"&decimal(#6)&"}"),(xpart(A2),0));
fi;
fi;
+ fi;
if #3=0:
label.urt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
else:
@@ -192,19 +212,23 @@
if (#5*#3+(#4))=0:
else:
if (#5*#3+(#4))<0:
+ if #5<0:
label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
else:
label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1)));
fi;
fi;
+ fi;
if (#6*#3+(#4))=0:
else:
if (#6*#3+(#4))<0:
+ if #6<0:
label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
else:
label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2)));
fi;
fi;
+ fi;
else:
if (#5*#3+(#4))=0:
else:
@@ -287,7 +311,7 @@
pair A[];
A1=(#5*unitex,(#5*#3+(#4))*unitey);
A2=(#6*unitex,(#6*#3+(#4))*unitey);
- draw 2[A1,A2]--2[A2,A1];
+ draw 10[A1,A2]--10[A2,A1];
clip currentpicture to ((XMin*unitex,YMin*unitey)--(XMax*unitex,YMin*unitey)--(XMax*unitex,YMax*unitey)--(XMin*unitex,YMax*unitey)--cycle);
%On labellise les points
fill (fullcircle scaled 1mm) shifted A1;
diff --git a/macros/latex/contrib/profcollege/latex/PfCLego.tex b/macros/latex/contrib/profcollege/latex/PfCLego.tex
index 86811da4ad..901eb0a54b 100644
--- a/macros/latex/contrib/profcollege/latex/PfCLego.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCLego.tex
@@ -22,7 +22,7 @@
\NewDocumentCommand\Lego{o}{%
\useKVdefault[Lego]%
\setKV[Lego]{#1}%
- \xintifboolexpr{\useKV[Lego]{Unite}==1}{%
+ \xintifboolexpr{\useKV[Lego]{Unite}==1 || \useKV[Lego]{Unique}}{%
\xdef\PfCNbCouleurs{1}%
}{%
\xdef\PfCNbCouleurs{\fpeval{floor(\useKV[Lego]{Unite}/\useKV[Lego]{Diviseur})}}%
@@ -38,7 +38,7 @@
\NewDocumentCommand\BuildBarreLego{mm}{%
\ifluatex%
\mplibforcehmode%
- \begin{mplibcode}
+ \begin{mplibcode}%
boolean Plaque,Unique;
Plaque=\useKV[Lego]{Plaque};
Unique=\useKV[Lego]{Unique};
@@ -105,9 +105,9 @@
RetiensLego=currentpicture;
currentpicture:=nullpicture;
draw RetiensLego scaled Echelle;
- \end{mplibcode}
- \else
- \begin{mpost}
+ \end{mplibcode}%
+ \else%
+ \begin{mpost}%
input PfCLego;
%
vardef ChoixCouleur(text t)=
@@ -153,6 +153,6 @@
Lego_box(Diviseur,2,Brique[k]);
endfor;
fi;
- \end{mpost}
+ \end{mpost}%
\fi%
}% \ 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 d000fef45b..117c2a0905 100644
--- a/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
@@ -463,6 +463,30 @@ x.u:=#2;
else:
draw courbe1(MinX,MaxX,25,Lagrange(x)(#1)) withpen pencircle scaled Epaisseur withcolor CoulTrace;
fi;
+ % Détermination des MinY et MaxY
+% MinY:=Lagrange(MinX)(#1);
+ for k=0 upto 100:
+ if Lagrange(MinX+(k/100)*(MaxX-MinX))(#1)<MinY:
+ MinY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#1);
+ fi;
+ endfor;
+ %for k=0 upto 100:
+ %if Lagrange(MinX+(k/100)*(MaxX-MinX))(#2)<MinY:
+ %MinY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#2);
+ %fi;
+ %endfor;
+% MaxY:=Lagrange(MinX)(#1);
+ for k=0 upto 100:
+ if Lagrange(MinX+(k/100)*(MaxX-MinX))(#1)>MaxY:
+ MaxY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#1);
+ fi;
+ endfor;
+ %for k=0 upto 100:
+ %if Lagrange(MinX+(k/100)*(MaxX-MinX))(#2)>MaxY:
+ %MaxY:=Lagrange(MinX+(k/100)*(MaxX-MinX))(#2);
+ %fi;
+ %endfor;
+ %%%
path cadreexterieur;
cadreexterieur=(((MinX-1)*X.u*cm,(floor(MinY)-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(floor(MinY)-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(floor(MaxY)+1)*Y.u*cm)--((MinX-1)*X.u*cm,(floor(MaxY)+1)*Y.u*cm)--cycle);
clip currentpicture to cadreexterieur;
diff --git a/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex b/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
index 9395074379..216d44d8ec 100644
--- a/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
@@ -28,30 +28,80 @@
\newlength{\PointillesClesProg}%
-\newcommand\ProgCalcul[2][]{%
- % #1 : cl\'es
- % #2 : \'etapes
+\NewDocumentCommand\ProgCalcul{som}{%
+ % #1 : pour l'écriture rapide, linéaire du programme de calcul
+ % #2 : cl\'es
+ % #3 : \'etapes
\useKVdefault[ClesProg]%
- \setKV[ClesProg]{#1}%
- \ifboolKV[ClesProg]{ThemePerso}{}{%
- \tcbset{ProgCalcul/.style={%
- boxsep=1mm,
- bottom=.75mm,
- middle=2mm,
- boxrule={\useKV[ClesProg]{Epaisseur}},
- text width={\useKV[ClesProg]{Largeur}},
- colframe={\useKV[ClesProg]{CouleurCadre}},
- colback={\useKV[ClesProg]{CouleurFond}},
- halign upper=center
+ \setKV[ClesProg]{#2}%
+ \IfBooleanTF{#1}{%
+ \setsepchar[*]{,* }\ignoreemptyitems%
+ \readlist*\ListeProg{#3}%
+ \ensuremath{%
+ \xdef\NbDepart{\ListeProg[1]}%
+ \ifboolKV[ClesProg]{SansCalcul}{%
+ \NbDepart\foreachitem\compteur\in\ListeProg[2]{%
+ \edef\Test{\ListeProg[2,\compteurcnt]}%
+ \expandarg%
+ \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]%
+ \StrSubstitute{\tempa}{**}{^}[\tempab]%
+ \StrSubstitute{\tempab}{*}{\times}[\tempac]%
+ \StrSubstitute{\tempac}{/}{\div}[\tempad]%
+ % \hspace{0.2em}
+ \xrightarrow{\tempad}
+ % \hspace{0.2em}
+ \ListeProg[3,\compteurcnt]%
+ }%
+ }{%
+ \num{\NbDepart}~\foreachitem\compteur\in\ListeProg[2]{%
+ \ifboolKV[ClesProg]{Direct}{%
+ \edef\Test{\ListeProg[2,\compteurcnt]}%
+ \expandarg%
+ \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]%
+ \StrSubstitute{\tempa}{**}{^}[\tempab]%
+ \StrSubstitute{\tempab}{*}{\times}[\tempac]%
+ \StrSubstitute{\tempac}{/}{\div}[\tempad]%
+ % \hspace{0.2em}
+ \xdef\NbDepart{\fpeval{(\NbDepart)\ListeProg[2,\compteurcnt]}}
+ % \hspace{0.2em}
+ \xrightarrow{\tempad}~\num{\NbDepart}%
+ }{%
+ \edef\Test{\ListeProg[2,\compteurcnt]}
+ \expandarg%
+ \StrSubstitute{\Test}{^2}{\empty\sqrt{\dots{}}}[\tempa]%
+ \StrSubstitute{\tempa}{**}{^}[\tempab]%
+ \StrSubstitute{\tempab}{*}{\div}[\tempac]%
+ \StrSubstitute{\tempac}{/}{\times}[\tempad]%
+ \StrSubstitute{\tempad}{-}{+}[\tempae]%
+ \StrSubstitute{\tempae}{++}{-}[\tempaf]%
+ %\hspace{0.2em}
+ \xdef\NbDepart{\fpeval{(\NbDepart)\ListeProg[2,\compteurcnt]}}
+ % \hspace{0.2em}
+ \xleftarrow{\tempaf}~\num{\NbDepart}%
+ }%
+ }%
+ }
+ }
+ }{%
+ \ifboolKV[ClesProg]{ThemePerso}{}{%
+ \tcbset{ProgCalcul/.style={%
+ boxsep=1mm,
+ bottom=.75mm,
+ middle=2mm,
+ boxrule={\useKV[ClesProg]{Epaisseur}},
+ text width={\useKV[ClesProg]{Largeur}},
+ colframe={\useKV[ClesProg]{CouleurCadre}},
+ colback={\useKV[ClesProg]{CouleurFond}},
+ halign upper=center
+ }%
}%
}%
- }%
\ifboolKV[ClesProg]{Application}{%
- % % by Thomas Dehon and cp
- \setsepchar[*]{§*,}
+ % % by Thomas Dehon and cp
+ \setsepchar[*]{§*,}%
% \setsepchar[*]{,* }%
\ignoreemptyitems%
- \readlist*\ListeTotale{#2}%
+ \readlist*\ListeTotale{#3}%
\xdef\PfCPCfoo{\ListeTotale[1]}%
\xdef\PfCPCfaa{\ListeTotale[2]}%
%%
@@ -94,7 +144,7 @@
% by Thomas Dehon
\setsepchar[*]{,* }%
\ignoreemptyitems%
- \readlist*\ListeEtapes{#2}%
+ \readlist*\ListeEtapes{#3}%
\begin{tcolorbox}[%
ProgCalcul,%
]
@@ -118,7 +168,7 @@
\end{tcolorbox}
}{%
\setsepchar[*]{,* }\ignoreemptyitems%
- \readlist*\ListeProg{#2}%
+ \readlist*\ListeProg{#3}%
\stepcounter{NBprog}%
\ifboolKV[ClesProg]{Vide}{%
\xdef\PfCNbDepart{\ListeProg[1]}%
@@ -181,8 +231,8 @@
}%
\end{tikzpicture}%
}{}%
- }{%
- \xdef\NbDepart{\ListeProg[1]}%
+ }{%
+ \xdef\NbDepart{\ListeProg[1]}%
\ifboolKV[ClesProg]{SansCalcul}{%
$\NbDepart$\foreachitem\compteur\in\ListeProg[2]{%
\hspace{0.2em}\tikzmark{A-\theNBprog-\compteurcnt}\hspace{\useKV[ClesProg]{Ecart}}\tikzmark{B-\theNBprog-\compteurcnt}\hspace{0.2em}$\ListeProg[3,\compteurcnt]$%
@@ -236,4 +286,5 @@
}%
}%
}%
+ }
}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCRecyclage.tex b/macros/latex/contrib/profcollege/latex/PfCRecyclage.tex
new file mode 100644
index 0000000000..371688f120
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCRecyclage.tex
@@ -0,0 +1,360 @@
+%%%
+% Logos Recyclage
+%%%
+\setKVdefault[Recyclage]{Ticket,Papier=false,Verre=false,Bouteille=false,Carton=false,Couleurs}%
+\defKV[Recyclage]{Couleur=\setKV[Recyclage]{Couleurs=false}}%
+
+\NewDocumentCommand\LogoRecyclage{o}{%
+ \useKVdefault[Recyclage]%
+ \setKV[Recyclage]{#1}%
+ \ifboolKV[Recyclage]{Papier}{%
+ \PfCLogoTriPapier%
+ }{%
+ \ifboolKV[Recyclage]{Carton}{%
+ \PfCLogoTriCarton%
+ }{%
+ \ifboolKV[Recyclage]{Verre}{%
+ \PfCLogoTriVerre%
+ }{%
+ \ifboolKV[Recyclage]{Bouteille}{%
+ \PfCLogoTriBouteille%
+ }{%
+ \PfCLogoTriTicket%
+ }%
+ }%
+ }%
+ }%
+}%
+
+\def\PfCLogoTriCodeBase{%
+ largeur=3;
+ rayon=0.5;
+ pair A,B,C,D,Mab,Mbc,Mcd,Mda,O,N[],T[];
+ A=(0,0);
+ B-A=u*(largeur,0);
+ C-B=u*(0,0.5*largeur);
+ D-C=A-B;
+ O=iso(A,B,C,D)+u*(rayon/2,0);
+ Mab-A=u*(rayon,0);
+ Mbc-C=u*(0,-rayon);
+ Mcd-C=u*(-rayon,0);
+ Mda-A=u*(0,rayon);
+ N1=2/5[D,C]+u*(rayon/2,-0.1);
+ N2-D=u*(0.1,-0.1);
+ N3-Mda=u*(0.1,0);
+ N4-Mab=u*(0,0.1);
+ N5=2/5[A,B]+u*(rayon/2,0.1);
+ path contourtri;
+ contourtri=D--Mda{dir-90}..{dir0}Mab--B--Mbc{dir90}..{dir180}Mcd--cycle;
+ path partieg;
+ partieg=O--N1--N2--N3{dir-90}..{dir0}N4--N5--cycle;
+ fill contourtri withcolor CouleurFond;
+ fill partieg withcolor white;
+ picture poubelle;
+ poubelle=image(
+ pair Q[],R[];
+ Q1=C+u*(-0.75rayon,-.75rayon);
+ Q2-Q1=u*(-0.25rayon,-1.75rayon);
+ Q3-Q2=u*(-0.85rayon,0);
+ Q4-Q3=u*(-0.25rayon,1.75rayon);
+ R1-Q1=u*(0.125rayon,0.1rayon);
+ R2-R1=u*(0.05rayon,0.2rayon);
+ R3-R2=u*(-0.15rayon,0);
+ R4-R3=u*(-0.15rayon,0.15rayon);
+ R8-Q4=u*(-0.125rayon,0.1rayon);
+ R7-R8=u*(-0.05rayon,0.2rayon);
+ R6-R7=u*(0.15rayon,0);
+ R5-R6=u*(0.15rayon,0.15rayon);
+ drawoptions(withpen pencircle scaled 1.25 withcolor black);
+ trace Q1--Q2--Q3--Q4;
+ trace R1--R2--R3--R4--R5--R6--R7--R8--cycle;
+ trace 1/5[R3,R6]--4/5[R3,R6];
+ drawoptions(withpen pencircle scaled 2.5 withcolor black);
+ trace (Q2+u*(0.1rayon,-0.1rayon))--(Q2+u*(0.1rayon,0.1rayon));
+ trace (Q3+u*(-0.1rayon,-0.1rayon))--(Q3+u*(-0.1rayon,0.1rayon));
+ drawoptions();
+ );
+ picture bacverre;
+ bacverre=image(%
+ pair S[];
+ S1=C+u*(-0.5rayon,-.35rayon);
+ S2-S1=u*(0,-0.45rayon);
+ S3-S2=u*(0,-1.25rayon);
+ S4-S3=u*(-0.45rayon,-0.45rayon);
+ S5-S4=u*(-0.875rayon,0);
+ S6-S5=u*(-0.45rayon,0.45rayon);
+ S7-S6=u*(0,1.25rayon);
+ S8-S7=u*(0.45rayon,0.45rayon);
+ S9-S8=u*(0.875rayon,0);
+ trace S2--S3{dir-90}..{dir180}S4--S5{dir180}..{dir90}S6--S7{dir90}..{dir0}S8--S9{dir0}..cycle;
+ trace (S4+u*(0.15rayon,-0.05rayon))--(S5+u*(-0.15rayon,-0.05rayon));
+ trace fullcircle scaled 1mm shifted (iso(S2,S7));
+ );
+}%
+
+\NewDocumentCommand\PfCLogoTriTicket{}{%
+ \ifluatex
+ \begin{Geometrie}[Cadre="aucun"]
+ boolean Colore;
+ color CouleurFond;
+ Colore=\useKV[Recyclage]{Couleurs};
+ if Colore:
+ CouleurFond=(253/256,197/256,47/256);
+ else:
+ CouleurFond=\useKV[Recyclage]{Couleur};
+ fi;
+ \PfCLogoTriCodeBase;
+ picture journal;
+ journal=image(%
+% typetrace:="mainlevee";
+ label.top(TEX("\ttfamily\footnotesize TICKET"),iso(A,iso(A,B)+u*(rayon/2,0))+u*(0,rayon/4));
+ T1=A+u*(rayon,1.5rayon);
+ T2-T1=u*(rayon,-rayon/4);
+ T3-T2=u*(0.5rayon,1rayon);
+ T4-T3=T1-T2;
+ path ticket,lignesprix[];
+ ticket=T1--T2{dir60}..{dir90}T3--T4{dir-90}..{dir-150}T1--cycle;
+ draw ticket;
+ for k=2 upto 7:
+ lignesprix[k]=(point(3+k/10) of ticket)--((point(3+k/10) of ticket)+T2-T1);
+ if k<7:
+ draw subpath(0.1,0.5) of lignesprix[k];
+ fi;
+ draw subpath(0.6,0.8) of lignesprix[k];
+ endfor;
+ );
+ trace journal;
+ if Colore:
+ drawoptions(withcolor black);
+ else:
+ drawoptions(withcolor white);
+ fi;
+ trace poubelle;
+ label(TEX("\bfseries\scriptsize\begin{tabular}{c}BAC\\DE\\TRI\end{tabular}"),iso(Q1,Q2,Q3,Q4));
+ drawoptions();
+ \end{Geometrie}
+ \fi
+}%
+
+\NewDocumentCommand\PfCLogoTriBouteille{}{%
+ \ifluatex
+ \begin{Geometrie}[Cadre="aucun"]
+ boolean Colore;
+ color CouleurFond;
+ Colore=\useKV[Recyclage]{Couleurs};
+ if Colore:
+ CouleurFond=(253/256,197/256,47/256);
+ else:
+ CouleurFond=\useKV[Recyclage]{Couleur};
+ fi;
+ \PfCLogoTriCodeBase;
+ picture bouteille;
+ bouteille=image(%
+ %typetrace:="mainlevee";
+ label.top(TEX("\ttfamily\footnotesize PLASTIQUE"),iso(A,iso(A,B)+u*(rayon/2,0))+u*(0,rayon/4));
+ T1=A+u*(1.25rayon,1.125rayon);
+ T2-T1=u*(0.75rayon,0);
+ T3-T2=u*(0,0.5rayon);
+ T4-T3=u*(0,0.5rayon);
+ T5-T4=u*(0,0.125rayon);
+ T6-T5=u*(-0.25rayon,0.25rayon);
+ T7-T6=u*(-0.125rayon,0);
+ T8-T7=u*(-0.25rayon,-0.25rayon);
+ T9-T8=u*(0,-0.125rayon);
+ T10-T9=u*(0,-0.5rayon);
+ T11-T10=u*(0,-0.5rayon);
+ path corps,bouchon,corpsg,lignesgrad[];
+ corps=T3{dir100}..{dir70}T4--T5{dir95}..{dir90}T6--T7{dir-90}..{dir-95}T8--T9{dir-70}..{dir-100}T10..{dir-50}T11{dir-10}..{dir10}T2{dir50}..cycle;
+ corpsg=T8--T9{dir-70}..{dir-100}T10..{dir-50}T11{dir-10};
+ bouchon=T6--(T6+u*(0.05rayon,0))--(T6+u*(0.05rayon,0.05rayon))--(T7+u*(-0.05rayon,0.05rayon))--(T7+u*(-0.05rayon,0))--cycle;
+ draw corps;
+ draw bouchon;
+ for k=1 upto 7:
+ lignesgrad[k]=(point(k*length corpsg/8) of corpsg){dir-10}..((point(k*length corpsg/8) of corpsg)+u*(0.125rayon,0));
+ if k<>6:
+ draw lignesgrad[k];
+ fi;
+ endfor;
+ );
+ trace bouteille;
+ if Colore:
+ drawoptions(withcolor black);
+ else:
+ drawoptions(withcolor white);
+ fi;
+ trace poubelle;
+ label(TEX("\bfseries\scriptsize\begin{tabular}{c}BAC\\DE\\TRI\end{tabular}"),iso(Q1,Q2,Q3,Q4));
+ drawoptions();
+ \end{Geometrie}
+ \fi
+}%
+
+\NewDocumentCommand\PfCLogoTriVerre{}{%
+ \ifluatex
+ \begin{Geometrie}[Cadre="aucun"]
+ boolean Colore;
+ color CouleurFond;
+ Colore=\useKV[Recyclage]{Couleurs};
+ if Colore:
+ CouleurFond=(0,139/256,50/256);
+ else:
+ CouleurFond=\useKV[Recyclage]{Couleur};
+ fi;
+ \PfCLogoTriCodeBase;
+ picture bouteille;
+ bouteille=image(%
+ %typetrace:="mainlevee";
+ label.top(TEX("\ttfamily\footnotesize VERRE"),iso(A,iso(A,B)+u*(rayon/2,0))+u*(0,rayon/4));
+ T1=A+u*(1.25rayon,1.125rayon);
+ T2-T1=u*(0.75rayon,0);
+ T3-T2=u*(0,0.5rayon);
+ T4-T3=u*(0,0.5rayon);
+ T5-T4=u*(0,0.125rayon);
+ T6-T5=u*(-0.25rayon,0.25rayon);
+ T7-T6=u*(-0.125rayon,0);
+ T8-T7=u*(-0.25rayon,-0.25rayon);
+ T9-T8=u*(0,-0.125rayon);
+ T10-T9=u*(0,-0.5rayon);
+ T11-T10=u*(0,-0.5rayon);
+ path corps,bouchon,corpsg,lignesgrad[];
+ corps=T3{dir100}..{dir70}T4--T5{dir95}..{dir90}T6--T7{dir-90}..{dir-95}T8--T9{dir-70}..{dir-100}T10..{dir-50}T11{dir-10}..{dir10}T2{dir50}..cycle;
+ corpsg=T8--T9{dir-70}..{dir-100}T10..{dir-50}T11{dir-10};
+ bouchon=T6--(T6+u*(0.05rayon,0))--(T6+u*(0.05rayon,0.05rayon))--(T7+u*(-0.05rayon,0.05rayon))--(T7+u*(-0.05rayon,0))--cycle;
+ draw corps;
+ draw bouchon;
+ for k=1 upto 7:
+ lignesgrad[k]=(point(k*length corpsg/8) of corpsg){dir-10}..((point(k*length corpsg/8) of corpsg)+u*(0.125rayon,0));
+ if k<>6:
+ draw lignesgrad[k];
+ fi;
+ endfor;
+ );
+ trace bouteille;
+% if Colore:
+% drawoptions(withcolor black);
+% else:
+ drawoptions(withpen pencircle scaled 1.25 withcolor white);
+% fi;
+ trace bacverre;
+ label(TEX("\bfseries\scriptsize\begin{tabular}{c}TRI\\VERRE\end{tabular}"),iso(S3,S6)+u*(0,0.245rayon));
+ drawoptions();
+ \end{Geometrie}
+ \fi
+}%
+
+\NewDocumentCommand\PfCLogoTriCarton{}{%
+ \ifluatex
+ \begin{Geometrie}[Cadre="aucun"]
+ boolean Colore;
+ color CouleurFond;
+ Colore=\useKV[Recyclage]{Couleurs};
+ if Colore:
+ CouleurFond=(253/256,197/256,47/256);
+ else:
+ CouleurFond=\useKV[Recyclage]{Couleur};
+ fi;
+ \PfCLogoTriCodeBase;
+ picture etui;
+ etui=image(%
+ %typetrace:="mainlevee";
+ label.top(TEX("\ttfamily\footnotesize CARTON"),iso(A,iso(A,B)+u*(rayon/2,0))+u*(0,rayon/4));
+ pair Tcarton[];
+ Tcarton1=A+u*(0.75rayon,1.75rayon);
+ Tcarton2-Tcarton1=u*(0,0.5rayon);
+ Tcarton3-Tcarton2=u*(0.5rayon,0.25rayon);
+ Tcarton4-Tcarton3=u*(1.25rayon,-0.5rayon);
+ Tcarton5-Tcarton4=Tcarton1-Tcarton2;
+ Tcarton6-Tcarton5=Tcarton2-Tcarton3;
+ Tcarton7-Tcarton6=Tcarton4-Tcarton5;
+ Tcarton8-Tcarton3=Tcarton5-Tcarton4;
+ path cotehaut,cotegauche,cotedroit,cotebas;
+ cotehaut=polygone(Tcarton4,Tcarton7,Tcarton7+u*(0.05rayon,0.35rayon),Tcarton4+u*(0.05rayon,0.35rayon));
+ cotebas=polygone(Tcarton5,Tcarton6,Tcarton6+u*(0.15rayon,-0.35rayon),Tcarton5+u*(0.15rayon,-0.35rayon));
+ cotegauche=polygone(Tcarton6,Tcarton7,Tcarton7+u*(-0.15rayon,-0.35rayon),Tcarton6+u*(-0.15rayon,-0.35rayon));
+ cotedroit=polygone(Tcarton4,Tcarton5,Tcarton5+u*(0.35rayon,-0.15rayon),Tcarton4+u*(0.35rayon,-0.15rayon));
+ trace polygone(Tcarton4,Tcarton5,Tcarton6,Tcarton7);
+ trace chemin(Tcarton7,Tcarton2,Tcarton3);
+ trace segment(Tcarton2,Tcarton1);
+ trace cotehaut; trace cotebas; trace cotegauche; trace cotedroit;
+ trace segment(Tcarton3,Tcarton4) cutafter segment(Tcarton7+u*(0.05rayon,0.35rayon),Tcarton4+u*(0.05rayon,0.35rayon));
+ trace segment(Tcarton1,Tcarton6) cutafter segment(Tcarton7+u*(-0.15rayon,-0.35rayon),Tcarton6+u*(-0.15rayon,-0.35rayon));
+ trace segment(Tcarton5,Tcarton8) cutafter segment(Tcarton7,Tcarton6);
+ );
+ trace etui;
+ if Colore:
+ drawoptions(withcolor black);
+ else:
+ drawoptions(withcolor white);
+ fi;
+ trace poubelle;
+ label(TEX("\bfseries\scriptsize\begin{tabular}{c}BAC\\DE\\TRI\end{tabular}"),iso(Q1,Q2,Q3,Q4));
+ drawoptions();
+ \end{Geometrie}
+ \fi
+}%
+
+\NewDocumentCommand\PfCLogoTriPapier{}{%
+ \ifluatex
+ \begin{Geometrie}[Cadre="aucun"]
+ boolean Colore;
+ color CouleurFond;
+ Colore=\useKV[Recyclage]{Couleurs};
+ if Colore:
+ CouleurFond=(253/256,197/256,47/256);
+ else:
+ CouleurFond=\useKV[Recyclage]{Couleur};
+ fi;
+ \PfCLogoTriCodeBase;
+ picture journal;
+ journal=image(%
+% typetrace:="mainlevee";
+ label.top(TEX("\ttfamily\footnotesize PAPIER"),iso(A,iso(A,B)+u*(rayon/2,0))+u*(0,rayon/4));
+ T1=A+u*(1.25rayon,rayon);
+ T2-T1=u*(0.5rayon,0.125rayon);
+ T3-T2=u*(0.5rayon,0);
+ T4-T3=u*(-0.125rayon,1.5rayon);
+ T5-T2=0.85*(T4-T3);
+ T6-T1=0.95*(T4-T3);
+ path ticket,lignesprix[];
+ ticket=T1--T2--T3--T4--T5--T6--cycle;
+ draw ticket;
+ trace T2--T5;
+ % lignes côté gauche
+ for k=1 upto 3:
+ lignesprix[k]=(point(5+k/12) of ticket)--((point(5+k/12) of ticket)+T5-T6);
+ draw subpath(0.1,0.5) of lignesprix[k];
+ endfor;
+ for k=5 upto 6:
+ lignesprix[k]=(point(5+k/12) of ticket)--((point(5.065+k/12) of ticket)+T2-T1);
+ draw subpath(0.1,0.9) of lignesprix[k];
+ endfor;
+ for k=9 upto 11:
+ lignesprix[k]=(point(5+k/12) of ticket)--((point(5+k/12) of ticket)+T2-T1);
+ draw subpath(0.5,0.9) of lignesprix[k];
+ endfor;
+ % lignes côté droit
+ for k=1 upto 3:
+ lignesprix[k]:=(point(2+k/12) of ticket)--((point(2+k/12) of ticket)+T2-T3);
+ draw subpath(0.1,0.5) of lignesprix[k];
+ endfor;
+ for k=5 upto 7:
+ lignesprix[k]:=(point(2+k/12) of ticket)--((point(1.935+k/12) of ticket)+T2-T3);
+ draw subpath(0.1,0.4) of lignesprix[k];
+ endfor;
+ for k=9 upto 11:
+ lignesprix[k]:=(point(2+k/12) of ticket)--((point(2+k/12) of ticket)+T5-T4);
+ draw subpath(0.2,0.8) of lignesprix[k];
+ endfor;
+ );
+ trace journal;
+ if Colore:
+ drawoptions(withcolor black);
+ else:
+ drawoptions(withcolor white);
+ fi;
+ trace poubelle;
+ label(TEX("\bfseries\scriptsize\begin{tabular}{c}BAC\\DE\\TRI\end{tabular}"),iso(Q1,Q2,Q3,Q4));
+ drawoptions();
+ \end{Geometrie}
+ \fi
+}% \ 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 70bd8b7c7a..e363b35e8d 100644
--- a/macros/latex/contrib/profcollege/latex/PfCReperage.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCReperage.tex
@@ -737,6 +737,7 @@
% #4 : la liste courte des noms des points.
% #5 : liste des points pour les string
\ifluatex
+ \mplibforcehmode
\begin{mplibcode}
defaultcolormodel := \useKV[ClesReperage]{ModeleCouleur};
boolean Tiret,Code,AffichageGrad,Cadre;
@@ -1305,15 +1306,23 @@
if minx>(-pasx-1):
minx:=-2*pasx-1;
fi;
- if DemiDroite:
- minx:=0;
- fi;
if minx<\useKV[ClesReperage]{ValeurMin}:
minx:=\useKV[ClesReperage]{ValeurMin};
fi;
if maxx>\useKV[ClesReperage]{ValeurMax}:
maxx:=\useKV[ClesReperage]{ValeurMax};
fi;
+ % Pour gérer les cas des droites où toutes les valeurs sont soit positives soit négatives
+ if maxx<pasx:
+ maxx:=pasx+1;
+ fi;
+ if minx>-pasx:
+ minx:=-pasx-1;
+ fi;
+ %
+ if DemiDroite:
+ minx:=0;
+ fi;
% -----
pair A,B,C;
A=(0,0);
@@ -1424,7 +1433,15 @@
pointe(unitp*(valeur[n],0));
drawoptions();
elseif ACoord=1:
+ %
+ if Decale:
+ drawarrow (unitp*valeur[n],-7mm if (n mod 2)=0:-5mm fi)--(unitp*valeur[n],-3mm);
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],-7mm if (n mod 2)=0:-5mm fi));
+ else:
+ %drawarrow (unitp*valeur[n],-7mm)--(unitp*valeur[n],-3mm);
+ %label.bot(TEX("\pointilles[1cm]"),(unitp*valeur[n],-7mm));
label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ fi;
drawoptions(withcolor CouleurCroix);
pointe(unitp*(valeur[n],0));
drawoptions();
@@ -1464,16 +1481,29 @@
else:
label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
fi;
- drawoptions(withcolor CouleurCroix);
- pointe(unitp*(valeur[n],0));
- drawoptions();
+ drawoptions(withcolor CouleurCroix);
+ pointe(unitp*(valeur[n],0));
+ drawoptions();
fi;
elseif AffichageCoord=1:
if p_<>"":
+ if Decale:
+ Labeloffset:=labeloffset;
+ labeloffset:=2pt;
+ if (valeur[n]<>0) and (valeur[n]<>pasx):
+ drawarrow (unitp*valeur[n],-7mm if (n mod 2)=0:-5mm fi)--(unitp*valeur[n],-3mm);
+ label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(unitp*valeur[n],-7mm if (n mod 2)=0:-5mm fi));
+ fi;
+ labeloffset:=Labeloffset;
+ else:
+ %drawarrow (unitp*valeur[n],-7mm)--(unitp*valeur[n],-3mm);
+ %label.bot(TEX("\pointilles[1cm]"),(unitp*valeur[n],-7mm));
label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
- drawoptions(withcolor CouleurCroix);
- pointe(unitp*(valeur[n],0));
- drawoptions();
+ fi;
+ %label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(valeur[n],0));
+ drawoptions(withcolor CouleurCroix);
+ pointe(unitp*(valeur[n],0));
+ drawoptions();
fi;
fi;
fi;
diff --git a/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex b/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
index 4ac96a74e6..35eed81431 100644
--- a/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
@@ -12,6 +12,7 @@
\newcount\Affichecntcol%
\newcount\Affichecntlin%
\makeatletter%
+% Pour la version nicematrix
\newtoks\t@b%
\long\def\ifremain@lines#1\\#2\@nil{%
\csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}%
@@ -24,14 +25,26 @@
\newcommand\addtot@b[1]{\t@b\expandafter{\the\t@b#1}}%
\newcommand\edftot@b[1]{\edef\temp@{#1}\expandafter\addtot@b\expandafter{\temp@}}%
+%%%%%%%%%%
+% Pour la version tabular
+\newtoks\t@bs%
+\long\def\ifremain@liness#1\\#2\@nil{%
+ \csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}%
+\long\def\subst@eols#1\\#2\@nil{\addtot@bs{#1\\\hline}%
+ \ifremain@lines#2\\\@nil{\addtot@bs&\subst@eols#2\@nil}{\addtot@bs{#2\end{tabular}}}}%
+\long\def\collectcp@bodys#1\end{\subst@eols#1\@nil\end}%
+
+\newcommand\addtot@bs[1]{\t@bs\expandafter{\the\t@bs#1}}%
+\newcommand\edftot@bs[1]{\edef\temp@{#1}\expandafter\addtot@bs\expandafter{\temp@}}%
+%%%%%%%%%%%%%%%
\newlength\PfCLongInter%
\newlength\PfCTableurLargeurUn%
\newlength\PfCTableurLargeur%
-\newenvironment{Tableur}[1][]{%
+\NewDocumentEnvironment{Tableur}{so}{%
\useKVdefault[Tableur]%
- \setKV[Tableur]{#1}%
+ \setKV[Tableur]{#2}%
\setlength{\PfCTableurLargeurUn}{\fpeval{\useKV[Tableur]{LargeurUn}}pt}%
\setlength{\PfCTableurLargeur}{\fpeval{\useKV[Tableur]{Largeur}}pt}%
\ifnum\useKV[Tableur]{DebutColonnes}=0\relax
@@ -47,6 +60,42 @@
\ttfamily%
\newcolumntype{A}{>{\centering\arraybackslash}m{\PfCTableurLargeurUn}}%
\newcolumntype{B}{>{\centering\arraybackslash}m{\PfCTableurLargeur}}%
+ \IfBooleanTF{#1}{%
+ \setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}-3}\arrayrulewidth}%
+ \ifboolKV[Tableur]{Bandeau}{%
+ \begin{tabular}{|p{\PfCTableurLargeur}|p{10pt}|p{50pt}|p{\PfCLongInter}|}%
+ \hhline{--~-}%
+ \useKV[Tableur]{Cellule}&\scriptsize$\blacktriangledown$&$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$&\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$\\%
+ \hhline{--~-}%
+ \end{tabular}%
+ \nopagebreak%
+ \\%
+ }{}%
+ \cntlin\z@%
+ \t@bs{%
+ \begin{tabular}{%
+ |>{%
+ \cellcolor{gray!15}%
+ \global\cntcol\z@
+ \global\advance\cntlin\@ne%
+ \centering\arraybackslash%
+ \ifnum\cntlin>\@ne%
+ \fpeval{\cntlin+\Affichecntlin-1}\fi}%
+ wc{20pt}|A|*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{B|}}%
+ \hline%
+ \rowcolor{gray!15}%
+ }%
+ \loop%
+ \ifnum\cntcol<\useKV[Tableur]{Colonnes}%
+ \advance\cntcol\@ne%
+ \advance\Affichecntcol\@ne%
+ \addtot@bs{&}%
+ % \edftot@bs{\@Alph{\the\cntcol}}%
+ \edftot@bs{\@Alph{\the\Affichecntcol}}%
+ \repeat%
+ \addtot@bs{\\\hline&}%
+ \collectcp@bodys
+ }{%
\setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+2}\arrayrulewidth}%
\ifboolKV[Tableur]{Bandeau}{%
\begin{NiceTabular}{p{\PfCTableurLargeur}p{10pt}p{50pt}p{\PfCLongInter}}%
@@ -111,5 +160,5 @@
% fin de modif
\repeat%
\addtot@b{\\&}%
- \collectcp@body}{\the\t@b}%
+ \collectcp@body}}{\IfBooleanTF{#1}{\the\t@bs}{\the\t@b}}%
\makeatother \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex b/macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex
index 175cb26f7a..996e33c026 100644
--- a/macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex
@@ -1,9 +1,9 @@
%%%
% Twitter
%%%
-\setKVdefault[Twitter]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Url=ViveLaTeX,EchelleLogo=0.035,Logo=DrStrange,Publie=false}
+\setKVdefault[Twitter]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Url=ViveLaTeX,EchelleLogo=0.035,Logo=DrStrange,Publie=false}%
-\NewEnviron{Twitter}[1][]{%
+\NewDocumentEnvironment{Twitter}{o+b}{%
\useKVdefault[Twitter]%
\setKV[Twitter]{#1}%
\xdef\EchelleLogo{\useKV[Twitter]{EchelleLogo}}%
@@ -26,16 +26,16 @@
left=3em,
bottom=2em]
\vspace*{0.5em}\par
- \BODY%
+ #2
\end{tcolorbox}
-}
+}{}%
%%%
% Facebook
%%%
-\setKVdefault[Facebook]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Heure=3:14,EchelleLogo=0.035,Logo=DrStrange,Publie=false}
+\setKVdefault[Facebook]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Heure=3:14,EchelleLogo=0.035,Logo=DrStrange,Publie=false}%
-\NewEnviron{Facebook}[1][]{%
+\NewDocumentEnvironment{Facebook}{o+b}{%
\useKVdefault[Facebook]%
\setKV[Facebook]{#1}%
\xdef\EchelleLogo{\useKV[Facebook]{EchelleLogo}}%
@@ -68,18 +68,17 @@
colframe=gray!15,
top=2em,
left=3em,
- bottom=4em]
- %\vspace*{0.5em}\par
- \BODY%
+ bottom={\ifboolKV[Facebook]{Publie}{4em}{2em}}]
+ #2
\end{tcolorbox}
-}
+}{}%
%%%
% Instagram
%%%
-\setKVdefault[Instagram]{Largeur=0.95\linewidth,Auteur=Christophe,Expediteur=Pierre,Date=\today,Temps=34,Publie=false,Logo=DrStrange,LogoEx=tiger,EchelleLogo=0.035,Texte={}}
+\setKVdefault[Instagram]{Largeur=0.95\linewidth,Auteur=Christophe,Expediteur=Pierre,Date=\today,Temps=34,Publie=false,Logo=DrStrange,LogoEx=tiger,EchelleLogo=0.035,Texte={}}%
-\NewEnviron{Instagram}[1][]{%
+\NewDocumentEnvironment{Instagram}{o+b}{%
\useKVdefault[Instagram]%
\setKV[Instagram]{#1}%
\xdef\EchelleLogo{\useKV[Instagram]{EchelleLogo}}%
@@ -113,16 +112,16 @@
top=3em,
left=3em,
bottom=7em]
- \BODY%
+ #2
\end{tcolorbox}
-}
+}{}%
%%%
% Snapchat
%%%
-\setKVdefault[Snapchat]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Temps=34,Logo=DrStrange,EchelleLogo=0.035,Texte=Envoyer un Chat}
+\setKVdefault[Snapchat]{Largeur=0.95\linewidth,Auteur=Christophe,Date=\today,Temps=34,Logo=DrStrange,EchelleLogo=0.035,Texte=Envoyer un Chat}%
-\NewEnviron{Snapchat}[1][]{%
+\NewDocumentEnvironment{Snapchat}{o+b}{%
\useKVdefault[Snapchat]%
\setKV[Snapchat]{#1}%
\xdef\EchelleLogo{\useKV[Snapchat]{EchelleLogo}}%
@@ -154,6 +153,43 @@
top=3em,
left=3em,
bottom=3em]
- \BODY%
+ #2
\end{tcolorbox}
-} \ No newline at end of file
+}{}%
+
+%%%
+% Mastodon
+%%%
+\setKVdefault[Mastodon]{Largeur=0.95\linewidth,Auteur=Christophe,Date=2~j,Url=ViveLaTeX,EchelleLogo=0.035,Logo=DrStrange,Publie=false}%
+
+\NewDocumentEnvironment{Mastodon}{o+b}{%
+ \useKVdefault[Mastodon]%
+ \setKV[Mastodon]{#1}%
+ \xdef\EchelleLogo{\useKV[Mastodon]{EchelleLogo}}%
+ \begin{tcolorbox}[%
+ enhanced,%
+ overlay unbroken and first={%
+ \node[anchor=west,xshift=3em,yshift=-2em] at (frame.north west) {%
+ \begin{tabular}{l}
+ \textbf{\useKV[Mastodon]{Auteur}}\\
+ {\color{gray}@\ttfamily \useKV[Mastodon]{Url}}
+ \end{tabular}};
+ \node[anchor=center,xshift=1em+2mm,yshift=-2em] at (frame.north west) {\LogoTW{\useKV[Mastodon]{Logo}}{\EchelleLogo}};
+ \node[anchor=center,yshift=-2em,xshift=-2em] at (frame.north east) {\faGlobeAmericas~\useKV[Mastodon]{Date}};
+ \coordinate[yshift=1em] (A) at (frame.south west);
+ \coordinate[yshift=1em] (B) at (frame.south east);
+ \node[] (C1) at ($(A)!0.1!(B)$) {\faReply\ifboolKV[Mastodon]{Publie}{~\fpeval{randint(1,10)}}{}};
+ \node[] (C2) at ($(A)!0.29!(B)$) {\faRetweet};%\ifboolKV[Mastodon]{Publie}{~\fpeval{randint(1,10)}}{}};
+ \node[] (C3) at ($(A)!0.48!(B)$) {\faStar[regular]};%\ifboolKV[Mastodon]{Publie}{~\fpeval{randint(1,10)}}{}};
+ \node[] (C4) at ($(A)!0.67!(B)$) {\faBookmark[regular]};
+ \node[] (C5) at ($(A)!0.85!(B)$) {...};
+ },
+ colback=white,
+ colframe=gray!15,
+ top=2em,
+ left=3em,
+ bottom=2em]
+ \vspace*{1em}\par
+ #2
+ \end{tcolorbox}
+}{}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCRondeInfernaleold.tex b/macros/latex/contrib/profcollege/latex/PfCRondeInfernaleold.tex
deleted file mode 100644
index bf7cc6225f..0000000000
--- a/macros/latex/contrib/profcollege/latex/PfCRondeInfernaleold.tex
+++ /dev/null
@@ -1,474 +0,0 @@
-%%%
-% Ronde infernale
-%%%
-\newcommand\TestNombrePremier[1]{%
- % #1 le nombre \`a tester
- \newcount\anp\newcount\bnp\newcount\cnp%
- \anp=#1\relax
- \bnp=2\relax
- \premier=-1\relax
- \whiledo{\anp > 1}{%
- \modulo{\the\anp}{\the\bnp}
- \ifnum\remainder=0\relax%
- \global\premier=\numexpr\premier+1\relax%
- \cnp=\numexpr\anp/\bnp\relax%
- \anp=\cnp\relax%
- \else%
- \bnp=\numexpr\bnp+1\relax%
- \fi%
- }%
-}%
-
-\newcommand\PfCRIListeDiviseur[1]{%#1 : nombre entier
- \newcount\anp\newcount\bnp%
- \anp=\fpeval{abs(#1)}%
- \bnp=2\relax%
- \xdef\PfCRIRetiensListeDiviseurs{}%
- \ifnum#1=0%
- \xdef\PfCRIRetiensListeDiviseurs{\fpeval{randint(2,5)},\fpeval{randint(6,9)}}%
- \else
- \whiledo{\bnp<\anp}{%
- \modulo{\the\anp}{\the\bnp}{}%
- \ifnum\remainder=0%
- \ifnum#1>0
- \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,}%
- \else
- \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,-\the\bnp,}%
- \fi
- \fi%
- \bnp=\numexpr\bnp+1%
- }%
- \ifnum#1>0
- \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,1}
- \else
- \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,-\the\anp}
- \fi
- \fi
-}%
-
-\setKVdefault[RondeInfernale]{Solution=false,Relatifs=false,Etapes=4,Perso=false,Cles=false,Vide,Rayon=2.5cm,Rectangle=false,Div=false,Cdot=false}%
-\defKV[RondeInfernale]{Graine=\PfCGraineAlea{#1}}
-\defKV[RondeInfernale]{Cle=\setKV[RondeInfernale]{Cles}\setKV[RondeInfernale]{Vide=false}}%
-\defKV[RondeInfernale]{ListeOperations=\setKV[RondeInfernale]{Perso}}%
-\defKV[RondeInfernale]{ListeNombres=\setKV[RondeInfernale]{Perso}}%
-%
-
-\NewDocumentCommand\RondeInfernale{ }{%Mise en place pour les germanistes : le " est actif :(
- \begingroup
- \catcode`\"12
- \RondeInfernaleaux
-}%
-
-\NewDocumentCommand\RondeInfernaleaux{o}{%
- \endgroup
- \useKVdefault[RondeInfernale]%
- \setKV[RondeInfernale]{#1}%
- % Graine
-% \ifboolKV[RondeInfernale]{Graines}{\PfCGraineAlea{\useKV[RondeInfernale]{Graine}}}{}%
- % Nombre clé
- \ifboolKV[RondeInfernale]{Cles}{%
- \xdef\PfCRINombreCle{\useKV[RondeInfernale]{Cle}}%
- }{%
- \ifboolKV[RondeInfernale]{Relatifs}{%
- \xdef\PfCRIListeNegatifs{-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10}
- \MelangeListe{\PfCRIListeNegatifs}{1}
- \readlist*\PfCRIListeCle{\faa}
- \xdef\PfCRINombreCle{\PfCRIListeCle[1]}%
- }{%
- \xdef\PfCRINombreCle{\fpeval{randint(2,9)}}%
- }%
- }%
- \ifboolKV[RondeInfernale]{Perso}{%
- \xdef\PfCRIRecupOperations{\useKV[RondeInfernale]{ListeOperations}}%
- \xdef\PfCRIRecupNombres{\useKV[RondeInfernale]{ListeNombres}}%
- }{%
- % On définit les éléments nécessaires
- \xdef\PfCRIListeToutesOperations{+,-,*,/}%
- \xdef\PfCRIListeOperationsSansDiv{+,-,*}%
- \xdef\PfCRIListeOperationsSansMul{+,-,/}%
- \xdef\PfCRIListeOperationsSimple{+,-}%
- \xdef\PfCRIRecupOperations{}%
- \xdef\PfCRIRecupNombres{}%
- \xdef\PfCRIRecupResultats{}%
- \xdef\PfCRINombreATester{\PfCRINombreCle}%
- \xdef\PfCRIRetiensNbEtapes{\useKV[RondeInfernale]{Etapes}}%
- \setsepchar{,}\ignoreemptyitems%
- % Liste des opérations jusqu'à l'étape n-1
- \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[RondeInfernale]{Etapes}-1}}}\do{%
- \TestNombrePremier{\PfCRINombreATester}\relax%
- \xintifboolexpr{\premier==0}{%
- % Définition des opérations
- \MelangeListe{\PfCRIListeOperationsSansDiv}{1}%
- \readlist*\PfCRIRetiensLoperation{\faa}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
- \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
- \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
- \xdef\PfCRINombreATester{\PfCRIResultat}%
- }{%
- \MelangeListe{\PfCRIListeToutesOperations}{1}%
- \readlist*\PfCRIRetiensLoperation{\faa}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
- \PfCRIListeDiviseur{\PfCRINombreATester}%
- \MelangeListe{\PfCRIRetiensListeDiviseurs}{1}%
- \readlist*\PfCRIRetiensLeDiviseur{\faa}%
- \xdef\PfCRIOperateur{\PfCRIRetiensLeDiviseur[1]}%
- }{%
- \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
- }%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
- \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
- \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
- \xdef\PfCRINombreATester{\PfCRIResultat}%
- }%
- }%
- % Dernière opération
- \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}>0}{%
- \modulo{\PfCRINombreATester}{\PfCRINombreCle}{}%
- \xintifboolexpr{\remainder==0}{%
- \MelangeListe{\PfCRIListeOperationsSansMul}{1}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \ignoreemptyitems%
- \readlist*\PfCRIRetiensLoperation{\faa}%
- \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester/\PfCRINombreCle}}%
- }{%
- \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
- }{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
- }%
- }%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
- }{%
- \MelangeListe{\PfCRIListeOperationsSimple}{1}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \ignoreemptyitems%
- \readlist*\PfCRIRetiensLoperation{\faa}%
- \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
- }{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
- }%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
- }%
- }{%
- \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}==0}{%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations *}%
- \ignoreemptyitems%
- \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres 1}%
- }{%
- \xintifboolexpr{\PfCRINombreATester==0}{%
- \MelangeListe{\PfCRIListeOperationsSimple}{1}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \ignoreemptyitems%
- \readlist*\PfCRIRetiensLoperation{\faa}%
- \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
- }{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
- }%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
- }{%
- \modulo{\PfCRINombreCle}{\PfCRINombreATester}{}%
- \xintifboolexpr{\remainder==0}{%-1
- \MelangeListe{\PfCRIListeToutesOperations}{1}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \readlist*\PfCRIRetiensLoperation{\faa}%
- \ignoreemptyitems%
- \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
- \IfStrEq{\PfCRIRetiensLoperation[1]}{*}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle/\PfCRINombreATester}}%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
- }{
- \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
- }{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
- }%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
- }%
- }{%
- \MelangeListe{\PfCRIListeOperationsSimple}{1}%
- \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
- \ignoreemptyitems%
- \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
- \IfStrEq{\PfCRIRIListeOperations[\PfCRIRetiensNbEtapes]}{-}{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
- }{%
- \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
- }%
- \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
- }%
- }%
- }%
- }%
- }%
- \ignoreemptyitems%
- \readlist*\PfCRIRIOperations{\PfCRIRecupOperations}%
- \readlist*\PfCRIRINombres{\PfCRIRecupNombres}%
- \reademptyitems%
- % On prépare le dessin
- \xdef\PfCRINombresDessin{}%
- \xdef\PfCRIOperationsDessin{}%
- \foreachitem\compteur\in\PfCRIRINombres{%
- \xintifboolexpr{\PfCRIRINombres[\compteurcnt]<0}{%
- \xdef\PfCRINombresDessin{\PfCRINombresDessin "(\num{\PfCRIRINombres[\compteurcnt]})",}%
- }{%
- \xdef\PfCRINombresDessin{\PfCRINombresDessin "\num{\PfCRIRINombres[\compteurcnt]}",}%
- }%
- }%
- \foreachitem\compteur\in\PfCRIRIOperations{%
- \xdef\PfCRIOperationsDessin{\PfCRIOperationsDessin "\PfCRIRIOperations[\compteurcnt]",}%
- }%
- % On dessine
- \BuildRondeInfernale{\PfCRINombresDessin}{\PfCRIOperationsDessin}%
-}%
-
-\NewDocumentCommand\BuildRondeInfernale{m m}{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
- boolean Vide,Rectangle,Perso;
- Vide=\useKV[RondeInfernale]{Vide};
- Rectangle=\useKV[RondeInfernale]{Rectangle};
- Perso=\useKV[RondeInfernale]{Perso};
- if Perso:
- string Depart;
- Depart=\useKV[RondeInfernale]{Cle};
- else:
- numeric Depart;
- Depart=\PfCRINombreCle;
- fi;
-
- numeric Rayon;
- Rayon=\useKV[RondeInfernale]{Rayon};
-
- string Nombre[];
-
- vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
- nbcase:=0;
- for p_=t:
- nbcase:=nbcase+1;
- Nombre[nbcase]=p_;
- endfor;
- enddef;
-
- vardef AfficheRonde(text t)=%On fait l'affichage des opérations
- n:=0;
- for k=1 upto nbcase:
- fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
- endfor;
- for p_=t:
- n:=n+1;
- if p_="*":
- label(TEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
- elseif p_="/":
- label(TEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
- else:
- label(TEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
- fi;
- endfor;
- enddef;
-
- vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
- n:=0;
- for p_=t:
- n:=n+1;
- if n=nbcase:
- if p_="*":
- label.bot(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
- elseif p_="/":
- label.bot(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
- else:
- label.bot(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
- fi;
- else:
- if p_="*":
- label.top(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
- elseif p_="/":
- label.top(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
- else:
- label.top(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
- fi;
- fi;
- endfor;
- enddef;
-
- vardef BaseRonde=
- pair O,A[];
- O=(0,0);
- path cc;
- cc=cercles(O,Rayon);
- A[0]=pointarc(cc,0);
- A[nbcase+1]=A[0];
- for k=1 upto nbcase:
- A[k]=rotation(A[0],O,k*(360/nbcase));
- endfor;
- for k=0 upto nbcase:
- drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
- endfor;
- for k=0 upto nbcase:
- fill cercles(A[k],5mm) withcolor white;
- trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
- endfor;
- enddef;
-
- vardef BoiteRectangle=
- save $;
- path $;
- $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
- $
- enddef;
-
- vardef BaseRectangle=
- pair O,A[];
- O=(0,0);
- A[0]=O;
- for k=1 upto nbcase:
- A[k]-A[k-1]=(Rayon+2cm,0);
- endfor;
- for k=0 upto nbcase-2:
- drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
- endfor;
- drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
- for k=0 upto nbcase-1:
- trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
- endfor;
- enddef;
-
- Compte(#1);
-
- if Rectangle:
- BaseRectangle;
- AfficheRectangle(#2);
- else:
- BaseRonde;
- AfficheRonde(#2);
- fi;
- if Vide=false:
- if Perso:
- label(TEX("$"&Depart&"$"),A[0]);
- else:
- label(TEX("$"&decimal(Depart)&"$"),A[0]);
- fi;
- fi;
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={%
- boolean Vide,Rectangle,Perso;Vide=\useKV[RondeInfernale]{Vide};Rectangle=\useKV[RondeInfernale]{Rectangle};Perso=\useKV[RondeInfernale]{Perso};if Perso:string Depart;Depart=\useKV[RondeInfernale]{Cle};else:numeric Depart;Depart=\PfCRINombreCle;fi;numeric Rayon;Rayon=\useKV[RondeInfernale]{Rayon};}]
- string Nombre[];
-
- vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
- nbcase:=0;
- for p_=t:
- nbcase:=nbcase+1;
- Nombre[nbcase]=p_;
- endfor;
- enddef;
-
- vardef AfficheRonde(text t)=%On fait l'affichage des opérations
- n:=0;
- for k=1 upto nbcase:
- fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
- endfor;
- for p_=t:
- n:=n+1;
- if p_="*":
- label(LATEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
- elseif p_="/":
- label(LATEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
- else:
- label(LATEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
- fi;
- endfor;
- enddef;
-
- vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
- n:=0;
- for p_=t:
- n:=n+1;
- if n=nbcase:
- if p_="*":
- label.bot(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
- elseif p_="/":
- label.bot(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
- else:
- label.bot(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
- fi;
- else:
- if p_="*":
- label.top(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
- elseif p_="/":
- label.top(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
- else:
- label.top(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
- fi;
- fi;
- endfor;
- enddef;
-
- vardef BaseRonde=
- pair O,A[];
- O=(0,0);
- path cc;
- cc=cercles(O,Rayon);
- A[0]=pointarc(cc,0);
- A[nbcase+1]=A[0];
- for k=1 upto nbcase:
- A[k]=rotation(A[0],O,k*(360/nbcase));
- endfor;
- for k=0 upto nbcase:
- drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
- endfor;
- for k=0 upto nbcase:
- fill cercles(A[k],5mm) withcolor white;
- trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
- endfor;
- enddef;
-
- vardef BoiteRectangle=
- save $;
- path $;
- $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
- $
- enddef;
-
- vardef BaseRectangle=
- pair O,A[];
- O=(0,0);
- A[0]=O;
- for k=1 upto nbcase:
- A[k]-A[k-1]=(Rayon+2cm,0);
- endfor;
- for k=0 upto nbcase-2:
- drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
- endfor;
- drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
- for k=0 upto nbcase-1:
- trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
- endfor;
- enddef;
-
- Compte(#1);
-
- if Rectangle:
- BaseRectangle;
- AfficheRectangle(#2);
- else:
- BaseRonde;
- AfficheRonde(#2);
- fi;
- if Vide=false:
- if Perso:
- label(LATEX("$"&Depart&"$"),A[0]);
- else:
- label(LATEX("$"&decimal(Depart)&"$"),A[0]);
- fi;
- fi;
- \end{mpost}
- \fi
-}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex b/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
index bea6d2d688..94429def36 100644
--- a/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
@@ -180,8 +180,8 @@
}%
}%
-\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0,Couleur=black,Debut=false,Impose=false,Decomposition=false}
-\defKV[ClesSimplification]{Nombre=\setKV[ClesSimplification]{Impose}}
+\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0,Couleur=black,Debut=false,Impose=false,Decomposition=false,DecompositionSeule=false}%
+\defKV[ClesSimplification]{Nombre=\setKV[ClesSimplification]{Impose}}%
\newcounter{NbFrac}%
\setcounter{NbFrac}{0}%
@@ -194,12 +194,8 @@
\setsepchar[*]{,*/}%\ignoreemptyitems
\readlist*\Listea{#2}%
\readlist*\Listeb{#3}%
- \setbox1=\hbox{\Listea[1,1]{}}%
- \setbox2=\hbox{\Listeb[1,1]}%
- \setbox3=\hbox{\Listea[1,3]}%
- \setbox4=\hbox{\Listeb[1,3]}%
\ensuremath{%
- \frac{\tikzmarknode[anchor=north]{A-\theNbFrac}{\Listea[1,1]}{}}{\tikzmarknode[anchor=south]{B-\theNbFrac}{\Listeb[1,1]}{}}=\frac{\tikzmarknode[anchor=north]{C-\theNbFrac}{\Listea[1,3]}{}}{\tikzmarknode[anchor=south]{D-\theNbFrac}{\Listeb[1,3]}{}}%
+ \frac{\tikzmarknode[anchor=north]{A-\theNbFrac}{\num{\Listea[1,1]}}{}}{\tikzmarknode[anchor=south]{B-\theNbFrac}{\num{\Listeb[1,1]}}{}}=\frac{\tikzmarknode[anchor=north]{C-\theNbFrac}{\Listea[1,3]}{}}{\tikzmarknode[anchor=south]{D-\theNbFrac}{\Listeb[1,3]}{}}%
}%
\begin{tikzpicture}[remember picture,overlay]%
\draw[out=45,in=135,-stealth,transform canvas={yshift=0.25em}]
@@ -215,16 +211,20 @@
\frac{\num{#2}}{\num{#3}}=\frac{\num{#2}\times\num{\useKV[ClesSimplification]{Contraire}}}{\num{#3}\times\num{\useKV[ClesSimplification]{Contraire}}}=\frac{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#2}}}{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#3}}}%
}%
}{%
- \ifboolKV[ClesSimplification]{Decomposition}{%
+ \ifboolKV[ClesSimplification]{DecompositionSeule}{%
+ \DecompositionSimplificationSeule{#2}{#3}%
+ }{%
+ \ifboolKV[ClesSimplification]{Decomposition}{%
\DecompositionSimplification{#2}{#3}%
}{%
- \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}}}%
+ \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}}}%
}%
}%
+ }%
}%
}%
}%
@@ -246,10 +246,10 @@
\xintFor* ##2 in{\xintSeq{1}{\LongueurH}}\do{%
\DiviseurCommun{\DiviseurHaut[##2]}{\PfCDeuxiemeFacteur}
\ifnum\PfCDivCom>1%
- \mathcolor{\useKV[ClesSimplification]{Couleur}}{\DiviseurHaut[##2]}
+ \mathcolor{\useKV[ClesSimplification]{Couleur}}{\num{\DiviseurHaut[##2]}}
\xdef\PfCDeuxiemeFacteur{\fpeval{\PfCDeuxiemeFacteur/\DiviseurHaut[##2]}}
\else
- \DiviseurHaut[##2]
+ \num{\DiviseurHaut[##2]}
\fi
\xintifForLast{}{\times}
}
@@ -257,14 +257,14 @@
\xintFor* ##2 in{\xintSeq{1}{\LongueurB}}\do{%
\DiviseurCommun{\DiviseurBas[##2]}{\PfCPremierFacteur}
\ifnum\PfCDivCom>1%
- \mathcolor{\useKV[ClesSimplification]{Couleur}}{\DiviseurBas[##2]}
+ \mathcolor{\useKV[ClesSimplification]{Couleur}}{\num{\DiviseurBas[##2]}}
\xdef\PfCPremierFacteur{\fpeval{\PfCPremierFacteur/\DiviseurBas[##2]}}
\else
- \DiviseurBas[##2]
+ \num{\DiviseurBas[##2]}
\fi
\xintifForLast{}{\times}
}
- }=\frac{\PfCPremierFacteur}{\PfCDeuxiemeFacteur}
+ }=\frac{\num{\PfCPremierFacteur}}{\num{\PfCDeuxiemeFacteur}}
\else
\tofrac{#1/#2}
\fi
@@ -293,10 +293,10 @@
\xintifboolexpr{\fpeval{#1*#2}<0}{\xintifboolexpr{#1<0}{-}{}}{}\xintFor* ##2 in{\xintSeq{1}{\LongueurH}}\do{%
\DiviseurCommun{\DiviseurHaut[##2]}{\PfCDeuxiemeFacteur}
\ifnum\PfCDivCom>1%
- \mathcolor{\useKV[ClesSimplification]{Couleur}}{\DiviseurHaut[##2]}
+ \mathcolor{\useKV[ClesSimplification]{Couleur}}{\num{\DiviseurHaut[##2]}}
\xdef\PfCDeuxiemeFacteur{\fpeval{\PfCDeuxiemeFacteur/\DiviseurHaut[##2]}}
\else
- \DiviseurHaut[##2]
+ \num{\DiviseurHaut[##2]}
\fi
\xintifForLast{}{\times}
}
@@ -304,10 +304,10 @@
\xintifboolexpr{\fpeval{#1*#2}<0}{\xintifboolexpr{#1<0}{}{-}}{}\xintFor* ##2 in{\xintSeq{1}{\LongueurB}}\do{%
\DiviseurCommun{\DiviseurBas[##2]}{\PfCPremierFacteur}
\ifnum\PfCDivCom>1%
- \mathcolor{\useKV[ClesSimplification]{Couleur}}{\DiviseurBas[##2]}
+ \mathcolor{\useKV[ClesSimplification]{Couleur}}{\num{\DiviseurBas[##2]}}
\xdef\PfCPremierFacteur{\fpeval{\PfCPremierFacteur/\DiviseurBas[##2]}}
\else
- \DiviseurBas[##2]
+ \num{\DiviseurBas[##2]}
\fi
\xintifForLast{}{\times}
}
diff --git a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
index b45111daf5..0ae0894e96 100644
--- a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
@@ -657,11 +657,12 @@ ModeleCouleur=5%
if Qualitatif: tutu(#1); else: toto(#1); fi;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if Grille:
+ %%%%%%%%%%%%%%%% -< Ici
drawoptions(withcolor 0.75white);
for k=0 step PasGrillex until ((maxx+1)):
- trace (k*unitex,0)--(k*unitex,unitey*((floor(maxAxey/Pasy)+1)*Pasy));
+ trace (k*unitex,0)--(k*unitex,unitey*((ceiling(maxAxey/Pasy)+1)*Pasy));
endfor;
- for k=0 step PasGrilley until (floor(maxAxey/Pasy)+1)*Pasy:%((maxy+2*Pasy)):
+ for k=0 step PasGrilley until (ceiling(maxAxey/Pasy)+1)*Pasy:%((maxy+2*Pasy)):
trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
endfor;
drawoptions();
@@ -711,9 +712,9 @@ ModeleCouleur=5%
endfor;
fi;
drawarrow (0,0)--unitex*(maxx+1,0);
- drawarrow (0,0)--unitey*(0,(floor(maxAxey/Pasy)+1)*Pasy);
+ drawarrow (0,0)--unitey*(0,(ceiling(maxAxey/Pasy)+1)*Pasy);
label.lrt(TEX("\useKV[ClesStat]{Donnee}"),unitex*(maxx+1,0));
- label.urt(TEX("\useKV[ClesStat]{Effectif}"),unitey*(0,(floor(maxAxey/Pasy)+1)*Pasy));
+ label.urt(TEX("\useKV[ClesStat]{Effectif}"),unitey*(0,(ceiling(maxAxey/Pasy)+1)*Pasy));
if Qualitatif: titi(#1); else:tata(#1); fi;
\end{mplibcode}
\else
diff --git a/macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex b/macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex
index c88c18363c..3399cbecff 100644
--- a/macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex
@@ -1,7 +1,7 @@
%%%
% Tables Addition-Multiplication
%%%
-\setKVdefault[Tables]{Addition=false,Soustraction=false,Multiplication,Seul=false,Debut=0,Fin=10,Couleur=white}
+\setKVdefault[Tables]{Addition=false,Soustraction=false,Multiplication,Seul=false,Debut=0,Fin=10,Couleur=white,Inverse=false}
% pour m\'emoire
\newcommand\TableMultiplicationComplete{%
@@ -95,17 +95,68 @@
}%
}%
+\NewDocumentCommand\PfCTableInverse{om}{%
+ % #1 paramètres
+ % #2 dizaine concernée
+ \useKVdefault[Tables]%
+ \setKV[Tables]{#1}%
+ \ifnum#2=0\relax%
+ \xdef\TIDepart{2}%
+ \else%
+ \xdef\TIDepart{\fpeval{#2*10}}%
+ \fi%
+ \xdef\TIFin{\fpeval{#2*10+9}}%
+ % On sauvegarde les nombres non premiers de la dizaine
+ \xdef\PfCRetiensNonPremiersInv{}%
+ \xintFor* ##1 in{\xintSeq{\TIDepart}{\TIFin}}\do{%
+ \TestPremier{##1}%
+ \ifboolKV[ClesEra]{Premier}{}{%
+ \xdef\PfCRetiensNonPremiersInv{\PfCRetiensNonPremiersInv##1,}%
+ }%
+ }%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeNombresRetenus{\PfCRetiensNonPremiersInv}%
+ \reademptyitems%
+ \xdef\PfCRetiensIntermediaire{}%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeNombresRetenuslen}}\do{%
+ \xdef\PfCRetiensIntermediaire{\PfCRetiensIntermediaire,\ListeNombresRetenus[##1]}%
+ \xintFor* ##2 in{\xintSeq{2}{\fpeval{floor(sqrt(\ListeNombresRetenus[##1]))}}}\do{%
+ \modulo{\ListeNombresRetenus[##1]}{##2}%
+ \ifnum\remainder=0\relax%
+ \xdef\PfCRetiensIntermediaire{\PfCRetiensIntermediaire/##2}%
+ \fi%
+ }%
+ }%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeNombresRetenusInd{\PfCRetiensIntermediaire}%
+ \reademptyitems%
+ \ensuremath{%
+ \begin{array}[t]{ccrcl}%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeNombresRetenusIndlen}}\do{%
+ \xintifForFirst{}{\\}%
+ \xintFor* ##2 in{\xintSeq{2}{\listlen\ListeNombresRetenusInd[##1]}}\do{%
+ \num{\ListeNombresRetenusInd[##1,1]}\uppercase{&}=\uppercase{&}\num{\ListeNombresRetenusInd[##1,##2]}\uppercase{&}\times\uppercase{&}\quotient{\ListeNombresRetenusInd[##1,1]}{\ListeNombresRetenusInd[##1,##2]}\num{\the\intquotient}\\%
+ }
+ }
+ \end{array}%
+ }%
+}%
+
\newcommand\Tables[2][]{%
\useKVdefault[Tables]%
\setKV[Tables]{#1}%
\ifboolKV[Tables]{Seul}{%
- \ifboolKV[Tables]{Soustraction}{%
- \TableSoustractionSeule{#2}%
+ \ifboolKV[Tables]{Inverse}{%
+ \PfCTableInverse[#1]{#2}%
}{%
- \ifboolKV[Tables]{Addition}{%
- \TableAdditionSeule{#2}%
+ \ifboolKV[Tables]{Soustraction}{%
+ \TableSoustractionSeule{#2}%
}{%
- \TableMultiplicationSeule{#2}%
+ \ifboolKV[Tables]{Addition}{%
+ \TableAdditionSeule{#2}%
+ }{%
+ \TableMultiplicationSeule{#2}%
+ }%
}%
}%
}{%
diff --git a/macros/latex/contrib/profcollege/latex/PfCThales.tex b/macros/latex/contrib/profcollege/latex/PfCThales.tex
index a0ebd3b36f..ea01972c25 100644
--- a/macros/latex/contrib/profcollege/latex/PfCThales.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCThales.tex
@@ -1214,9 +1214,9 @@
\end{array}
\right\}\ifnum\NumA=\NumB \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}\else\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}\fi
\]
- }
+ }%
\ifboolKV[ClesThales]{Propor}{%
- \ifnum\NumA=\NumB Donc le tableau $\begin{array}{c|c}
+ \xintifboolexpr{\NumA==\NumB}{Donc le tableau $\begin{array}{c|c}
\NomA\NomM&\NomA\NomN\\
\hline
\NomA\NomB&\NomA\NomC\\
@@ -1225,8 +1225,8 @@
$\NomA$, $\NomM$, $\NomB$ sont align\'es dans le m\^eme ordre que les
points $\NomA$, $\NomN$, $\NomC$. Donc les droites $(\NomM\NomN)$
et $(\NomB\NomC)$ sont parall\`eles d'apr\`es la r\'eciproque du
- th\'eor\`eme de Thal\`es.\else%
- Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parall\`eles.\fi
+ th\'eor\`eme de Thal\`es.}{%
+ Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parall\`eles.}%
}{%
\xintifboolexpr{\NumA==\NumB}{%
De plus, les points $\NomA$, $\NomM$, $\NomB$ sont align\'es dans
@@ -1234,9 +1234,9 @@
droites $(\NomM\NomN)$ et $(\NomB\NomC)$ sont parall\`eles d'apr\`es
la r\'eciproque du th\'eor\`eme de Thal\`es.}{%
Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas
- parall\`eles.}
- }
-}
+ parall\`eles.}%
+ }%
+}%
\newcommand\ReciproqueThales[8][]{%
% #1 Cl\'es
diff --git a/macros/latex/contrib/profcollege/latex/PfCTicketCaisse.tex b/macros/latex/contrib/profcollege/latex/PfCTicketCaisse.tex
new file mode 100644
index 0000000000..1c460e3693
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCTicketCaisse.tex
@@ -0,0 +1,210 @@
+%%%
+% Ticket de caisse
+%%%
+\newcounter{PfCNbInsulte}%
+\setcounter{PfCNbInsulte}{0}%
+
+\NewDocumentCommand\PfCPrixInsulte{sm}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\PfCListeInsulte{\%,!,§,\#,*,@,-}%
+ \reademptyitems%
+ \IfBooleanTF{#1}{%
+ \MelangeListe{1,2,3,4,5,6,7}{5}%
+ }{%
+ \stepcounter{PfCNbInsulte}%
+ \MelangeListe{1,2,3,4,5,6,7}{3}%
+ }%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeInsulteMelange{\faa}%
+ \reademptyitems%
+ \ifboolKV[TicketCaisse]{Solution}{\textcolor{PfCTicketCouleurSolution}{#2}}{%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeInsulteMelangelen}}\do{%
+ \xdef\Titi{\ListeInsulteMelange[##1]}%
+ \PfCListeInsulte[\Titi]%
+ }%
+ }%
+}%
+
+\makeatletter
+\NewDocumentCommand\PrixTicket{om}{%
+ \ifboolKV[TicketCaisse]{CHF}{%
+ \DeclareSIUnit{\Tempo}{\PfCCHF}%
+ }{%
+ \ifboolKV[TicketCaisse]{CFA}{%
+ \DeclareSIUnit{\Tempo}{\PfCCFA}%
+ }{%
+ \ifboolKV[TicketCaisse]{CFP}{%
+ \DeclareSIUnit{\Tempo}{\PfCCFP}%
+ }{%
+ \ifboolKV[TicketCaisse]{US}{%
+ \DeclareSIUnit{\Tempo}{\Dollar}%
+ }{%
+ \ifboolKV[TicketCaisse]{UK}{%
+ \DeclareSIUnit{\Tempo}{\LivreSterling}%
+ }{%
+ \ifboolKV[TicketCaisse]{Euro}{%
+ \DeclareSIUnit{\Tempo}{\EuRo}%
+ }{%
+ \if@CHF%
+ \setKV[TicketCaisse]{CHF}%
+ \fi%
+ \DeclareSIUnit{\Tempo}{\DeviseDefaut}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ \IfInteger{#2}{%
+ \ifboolKV[TicketCaisse]{CHF}{%
+ \si{\PfCCHF}~\num{#2}.-%
+ }{%
+ \SI[round-mode=places,round-precision=2]{#2}{\Tempo}%
+ }%
+ }{%
+ \SI[round-mode=places,round-precision=2]{#2}{\Tempo}%
+ }%
+}%
+\makeatother
+
+\setKVdefault[TicketCaisse]{Largeur=222,Especes=50,Enseigne=Au comptoir des maths,DateAchat=\today,HeureAchat=15:13:34,Taches=false,Rendu,Total,UK=false,US=false,CFA=false,CFP=false,CHF=false,Euro=false,Solution=false}
+\defKV[TicketCaisse]{Couleur=\colorlet{PfCTicketCouleurSolution}{#1}\setKV[TicketCaisse]{Solution}}
+
+\NewDocumentCommand\TicketCaisse{om}{%
+ \setcounter{PfCNbInsulte}{0}%
+ \useKVdefault[TicketCaisse]%
+ \setKV[TicketCaisse]{#1}%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeAchats{#2}%
+ % On fait trois listes pour les retenir
+ % Liste Quantités
+ \xdef\PfCFooQuantites{}%
+ \foreachitem\compteur\in\ListeAchats{%
+ \StrChar{\ListeAchats[\compteurcnt,1]}{1}[\MyLetter]%
+ \IfStrEq{\MyLetter}{!}{%
+ \StrBehind{\ListeAchats[\compteurcnt,1]}{!}[\Titi]%
+ \xdef\PfCFooQuantites{\PfCFooQuantites,\Titi}%
+ }{%
+ \xdef\PfCFooQuantites{\PfCFooQuantites,\ListeAchats[\compteurcnt,1]}%
+ }%
+ }%
+ % Liste Elements
+ \xdef\PfCFooElements{}%
+ \foreachitem\compteur\in\ListeAchats{%
+ \xdef\PfCFooElements{\PfCFooElements,\ListeAchats[\compteurcnt,2]}%
+ }%
+ % Liste Prix Unitaire
+ \xdef\PfCFooPUnitaires{}%
+ \foreachitem\compteur\in\ListeAchats{%
+ \StrChar{\ListeAchats[\compteurcnt,3]}{1}[\MyLetter]%
+ \IfStrEqCase{\MyLetter}{%
+ {!}{%
+ \StrBehind{\ListeAchats[\compteurcnt,3]}{!}[\Titi]%
+ \StrChar{\Titi}{1}[\Toto]%
+ \IfStrEq{\Toto}{*}{%
+ \StrBehind{\ListeAchats[\compteurcnt,3]}{!*}[\Tata]%
+ \xdef\PfCFooPUnitaires{\PfCFooPUnitaires,\Tata}%
+ }{%
+ \xdef\PfCFooPUnitaires{\PfCFooPUnitaires,\Titi}%
+ }%
+ }%
+ {*}{\StrBehind{\ListeAchats[\compteurcnt,3]}{*}[\Titi]%
+ \xdef\PfCFooPUnitaires{\PfCFooPUnitaires,\Titi}}%
+ }[\xdef\PfCFooPUnitaires{\PfCFooPUnitaires,\ListeAchats[\compteurcnt,3]}]%
+ }%
+ % On les lit
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeQuantites{\PfCFooQuantites}%
+ \readlist*\ListeElements{\PfCFooElements}%
+ \readlist*\ListePUnitaires{\PfCFooPUnitaires}%
+ % On calcul le coût total
+ \xdef\PfCTCTotal{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeAchatslen}}\do{%
+ \xdef\PfCTCTotal{\fpeval{\PfCTCTotal+\ListeQuantites[##1]*\ListePUnitaires[##1]}}%
+ }%
+% Le coût total est \PfCTCTotal\\
+ {\ttfamily%
+ \begin{NiceTabular}{m{107pt}m{29pt}m{36pt}m{50pt}}%
+ \CodeBefore
+ \tikz\node[opacity=0.2,yshift=-1.5cm] at ($(1-|1)!0.5!(1-|last)$) {\Large\bfseries\reflectbox{
+ \begin{tabular}{c}
+ Papier garanti\\
+ sans Phénol
+ \end{tabular}
+ }
+ };
+ \tikz\node[opacity=0.2,anchor=center,yshift=1cm] at ($(last-|1)!0.5!(last-|last)$) {\Large\bfseries\reflectbox{%
+ \faRecycle~Pensez à trier.%
+ }%
+ };%
+ \tikz\node[opacity=0.5,anchor=center,yshift=2cm] at ($(last-|1)!0.5!(last-|last)$) {\Large\bfseries\reflectbox{
+ \LogoRecyclage[Couleur=0.8white]%
+ }%
+ };%
+ \tikz\draw[fill=Ivory,opacity=0.5] (1-|1) rectangle (last-|last);%
+ \Body
+ &&&\\%
+ \Block{1-4}{\Large\bfseries\useKV[TicketCaisse]{Enseigne}}&&&\\%
+ \\%
+ \Cdots\\%
+ \\%
+ \Block[l]{}{\footnotesize\sc Description}&\Block{}{\footnotesize\sc Qte.}&\Block{}{\footnotesize\sc P.u.}&\Block[r]{}{\footnotesize\sc Prix Net}\\%
+ \\%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeAchatslen}}\do{%
+ \ListeElements[##1]&%
+ \Block{}{%
+ \footnotesize%
+ \StrChar{\ListeAchats[##1,1]}{1}[\MyLetter]%
+ \IfStrEq{\MyLetter}{!}{\PfCPrixInsulte*{\ListeQuantites[##1]}}{\xintifboolexpr{\fpeval{\ListeQuantites[##1]}==1}{}{\num{\ListeQuantites[##1]}}}%
+ }&
+ \Block[r]{}{%
+ \footnotesize
+ %Savoir si le nombre d'articles est affiché
+ \StrChar{\ListeAchats[##1,1]}{1}[\MyLetter]%
+ % Si le nombre d'articles n'est pas affiché, il faut impérativement afficher le prix unitaire
+ \IfStrEq{\MyLetter}{!}{%
+ \PrixTicket{\ListePUnitaires[##1]}%
+ }{%
+ % On regarde si on affiche le prix unitaire
+ \StrChar{\ListeAchats[##1,3]}{1}[\MyLettera]%
+ % Si c'est un !, on affiche pas
+ % Sinon, on affiche
+ \IfStrEq{\MyLettera}{!}{%
+ \PfCPrixInsulte*{\PrixTicket{\ListePUnitaires[##1]}}%
+ }{%
+ \xintifboolexpr{\fpeval{\ListeQuantites[##1]}==1}{}{%
+ \PrixTicket{\ListePUnitaires[##1]}%
+ }%
+ }%
+ }%
+ }%
+ &\Block[r]{}{%
+ \StrChar{\ListeAchats[##1,3]}{1}[\MyLetter]%
+ % Si le premier caractère est !, il faut regarder si le deuxième caractère est une étoile
+ \IfStrEq{\MyLetter}{!}{%
+ \StrChar{\ListeAchats[##1,3]}{2}[\MyLettera]%
+ \IfStrEq{\MyLettera}{*}{%
+ \PfCPrixInsulte*{\PrixTicket{\fpeval{\ListeQuantites[##1]*\ListePUnitaires[##1]}}}%
+ }{%
+ \PrixTicket{\fpeval{\ListeQuantites[##1]*\ListePUnitaires[##1]}}%
+ }%
+ }{%il faut regarder si c'est une étoile
+ \StrChar{\ListeAchats[##1,3]}{1}[\MyLettera]%
+ \IfStrEq{\MyLettera}{*}{%
+ \PfCPrixInsulte{\PrixTicket{\fpeval{\ListeQuantites[##1]*\ListePUnitaires[##1]}}}%
+ }{%
+ \PrixTicket{\fpeval{\ListeQuantites[##1]*\ListePUnitaires[##1]}}%
+ }%
+ }%
+ }\\
+ }%
+ \\%
+ \Cdots\\%
+ Total&&&\Block[r]{}{\ifboolKV[TicketCaisse]{Total}{\ifnum\thePfCNbInsulte=0\relax\PrixTicket{\PfCTCTotal}\else\PfCPrixInsulte*{\PrixTicket{\PfCTCTotal}}\fi}{\PfCPrixInsulte*{\PrixTicket{\PfCTCTotal}}}}\\%
+ Espèces&&&\Block[r]{}{\PrixTicket{\useKV[TicketCaisse]{Especes}}}\\%
+ Rendu&&&\Block[r]{}{\ifboolKV[TicketCaisse]{Rendu}{\PrixTicket{\fpeval{\useKV[TicketCaisse]{Especes}-\PfCTCTotal}}}{\PfCPrixInsulte*{\PrixTicket{\fpeval{\useKV[TicketCaisse]{Especes}-\PfCTCTotal}}}}}\\%
+ \\%
+ \Block{1-4}{\footnotesize\useKV[TicketCaisse]{DateAchat}\qquad\useKV[TicketCaisse]{HeureAchat}}&&&\\%
+ \end{NiceTabular}
+ }%
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCTrio.tex b/macros/latex/contrib/profcollege/latex/PfCTrio.tex
index 11355d5d79..beee6278fa 100644
--- a/macros/latex/contrib/profcollege/latex/PfCTrio.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCTrio.tex
@@ -1,9 +1,11 @@
\newlength\PfCTrioHauteur%
\newcounter{PfCTrioLettre}%
-\setKVdefault[Trio]{Largeur=15pt,Graines=false,Repere=false,Cibles=false,Ligne=1,Colonne=1,Vide=false,VideRepere=false,Relatifs=false,Ecole=false}%
+\setKVdefault[Trio]{Largeur=15pt,Graines=false,Repere=false,Cibles=false,Ligne=1,Colonne=1,Vide=false,VideRepere=false,Relatifs=false,Ecole=false,Horizontal=false,Vertical=false,DiagonaleM=false,DiagonaleD=false,NonAlea=false,NbSolutions=false}%
\defKV[Trio]{Graine=\setKV[Trio]{Graines}}%
\defKV[Trio]{Cible=\setKV[Trio]{Cibles}}%
+\defKV[Trio]{Liste=\setKV[Trio]{NonAlea}}%
+\defKV[Trio]{NbSolution=\setKV[Trio]{NbSolutions}}%
\NewDocumentCommand\TrioCalculs{mmm}{%
Les combinaisons Trio de #1, #2 et #3 sont :%
@@ -17,129 +19,142 @@
\end{enumerate}%
}%
+\NewDocumentCommand\TrioTestCible{O{\useKV[Trio]{Cible}}mmm}{%
+ \xintifboolexpr{%
+ \fpeval{#2*#3+#4}==#1%
+ || \fpeval{#2*#3-#4}==#1%
+ || \fpeval{#3*#4+#2}==#1%
+ || \fpeval{#3*#4-#2}==#1%
+ || \fpeval{#4*#2+#3}==#1%
+ || \fpeval{#4*#2-#3}==#1%
+ % ajout pour une cible négative
+ || \fpeval{#3-#4*#2}==#1%
+ || \fpeval{#4-#2*#3}==#1%
+ || \fpeval{#2-#3*#4}==#1%
+ }{\xdef\PfCRetourTestCible{1}}{\xdef\PfCRetourTestCible{0}}%
+}%
+
\NewDocumentCommand\Trio{o}{%
- \setcounter{PfCTrioLettre}{0}
+ \setcounter{PfCTrioLettre}{0}%
\useKVdefault[Trio]%
\setKV[Trio]{#1}%
+ \xdef\PfCTitiH{0}%
+ \xdef\PfCTitiV{0}%
+ \xdef\PfCTitiDM{0}%
+ \xdef\PfCTitiDD{0}%
+ \ifboolKV[Trio]{Horizontal}{\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
+ \ifboolKV[Trio]{Vertical}{\xdef\PfCTitiH{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
+ \ifboolKV[Trio]{DiagonaleM}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDD{1}}{}%
+ \ifboolKV[Trio]{DiagonaleD}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}}{}%
\ifboolKV[Trio]{Graines}{\PfCGraineAlea{\useKV[Trio]{Graine}}}{}%
- \ifboolKV[Trio]{Ecole}{\xdef\PfCTrioMaxA{5}\xdef\PfCTrioMaxB{3}}{\xdef\PfCTrioMaxA{7}\xdef\PfCTrioMaxB{5}}
+ \ifboolKV[Trio]{Ecole}{\xdef\PfCTrioMaxA{5}\xdef\PfCTrioMaxB{3}}{\xdef\PfCTrioMaxA{7}\xdef\PfCTrioMaxB{5}}%
\ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{\fpeval{\PfCTrioMaxA+1}}}{\xdef\PfCTrioNbCases{\PfCTrioMaxA}}%
% On définit la liste de nombres
- \ifboolKV[Trio]{Relatifs}{%
- \xdef\PfCTrioFoo{-4,-4,-4,-4,-4,-3,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4}%
+ \ifboolKV[Trio]{NonAlea}{%
+ \xdef\faa{\useKV[Trio]{Liste}}%
}{%
- \ifboolKV[Trio]{Ecole}{%
- \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5}%
+ \ifboolKV[Trio]{Relatifs}{%
+ \xdef\PfCTrioFoo{-4,-4,-4,-4,-4,-3,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4}%
}{%
- \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}%
- }%
+ \ifboolKV[Trio]{Ecole}{%
+ \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5}%
+ }{%
+ \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}%
+ }%
+ }%
+ \ifboolKV[Trio]{Ecole}{\MelangeListe{\PfCTrioFoo}{25}}{\MelangeListe{\PfCTrioFoo}{49}}%
}%
- \ifboolKV[Trio]{Ecole}{\MelangeListe{\PfCTrioFoo}{25}}{\MelangeListe{\PfCTrioFoo}{49}}%
\setsepchar{,}\ignoreemptyitems%
- \readlist*\PfCTrioMelange{\faa}%
+ \greadlist*\PfCTrioMelange{\faa}%
\reademptyitems%
+ %%%%
+ \ifboolKV[Trio]{Repere}{%
+ \xdef\PfCTrioAjout{1}%
+ }{%
+ \xdef\PfCTrioAjout{0}%
+ }%
\setlength{\PfCTrioHauteur}{\useKV[Trio]{Largeur}+\tabcolsep}%
- \begin{NiceTabular}{*{\PfCTrioNbCases}{m{\useKV[Trio]{Largeur}}}}[hvlines]%
+ \begin{NiceTabular}{*{\PfCTrioNbCases}{m{\useKV[Trio]{Largeur}}}}[hvlines,name=TS]%
\CodeBefore%
\ifboolKV[Trio]{Cibles}{%
\ifboolKV[Trio]{Repere}{%
\xdef\PfCTrioAjout{1}%
}{%
- \xdef\PfCTrioAjout{0}
+ \xdef\PfCTrioAjout{0}%
}%
- % Calculs des horizontaux
+ % Calculs des horizontaux
+ \ifnum\fpeval{\PfCTitiH}=0\relax
\xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
\xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
\xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
\xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
\xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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}{}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{\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}{}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \xintBreakFor
+ }{}%
}%
+ \fi
% Calculs des verticaux
- \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
- \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
- \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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}{}%
+ \ifnum\fpeval{\PfCTitiV}=0\relax
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{\tikz\draw[fill=LightSteelBlue,line width=2pt] (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+\PfCTrioAjout}) rectangle (\fpeval{##1+3+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout});\xintBreakFor}{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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}{}%
- }%
+ \fi
% Calculs des diag positives (descendantes)
- \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
- \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
- \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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}{}%
+ \ifnum\fpeval{\PfCTitiDD}=0\relax
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \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}{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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{1}{\PfCTrioMaxB}}\do{%
- \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCTrioMaxB+1}}}\do{%
- \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+1}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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%
+ \fi
+ % Calculs des diagonales négatives (montantes)
+ \ifnum\fpeval{\PfCTitiDM}=0\relax
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCTrioMaxB+1}}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-2)+##2+2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \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%
+ }{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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}{}%
- }%
+ \fi
}{}%
\Body
\ifboolKV[Trio]{Repere}{%
@@ -155,11 +170,100 @@
}\\
}%
\end{NiceTabular}%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifboolKV[Trio]{NbSolutions}{%
+ \xdef\PfCNbSolutionH{0}%
+ \xdef\PfCNbSolutionV{0}%
+ \xdef\PfCNbSolutionDD{0}%
+ \xdef\PfCNbSolutionDM{0}%
+ \xdef\NbCibleSolution{\useKV[Trio]{NbSolution}}%
+ % Calculs des horizontaux
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
+ \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \xdef\PfCNbSolutionH{\fpeval{\PfCNbSolutionH+1}}%
+ \modulo{\PfCNbSolutionH}{2}%
+ \ifnum\remainder=0\relax%
+ \tikz[remember picture,overlay,transform canvas={yshift=0.25\PfCTrioHauteur}]\draw[Crimson,line width=2pt] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) -- (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+3+\PfCTrioAjout-1}.center);%
+ \else%
+ \tikz[remember picture,overlay,transform canvas={yshift=-0.25\PfCTrioHauteur}]\draw[Crimson,line width=2pt] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) -- (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+3+\PfCTrioAjout-1}.center);%
+ \fi%
+ }{}%
+ }%
+ }%
+ % Calculs des verticaux
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
+ \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \xdef\PfCNbSolutionV{\fpeval{\PfCNbSolutionV+1}}%
+ \modulo{\PfCNbSolutionV}{2}%
+ \ifnum\remainder=0\relax%
+ \tikz[remember picture,overlay,transform canvas={xshift=-0.25\PfCTrioHauteur}]\draw[NavyBlue,line width=2pt] (TS-\fpeval{##1+\PfCTrioAjout}-\fpeval{##2+\PfCTrioAjout}.center) -- (TS-\fpeval{##1+3+\PfCTrioAjout-1}-\fpeval{##2+\PfCTrioAjout}.center);%
+ \else%
+ \tikz[remember picture,overlay,transform canvas={xshift=0.25\PfCTrioHauteur}]\draw[NavyBlue,line width=2pt] (TS-\fpeval{##1+\PfCTrioAjout}-\fpeval{##2+\PfCTrioAjout}.center) -- (TS-\fpeval{##1+3+\PfCTrioAjout-1}-\fpeval{##2+\PfCTrioAjout}.center);%
+ \fi%
+ }{}%
+ }%
+ }%
+ % Calculs des diag positives (descendantes)
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
+ \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \xdef\PfCNbSolutionDD{\fpeval{\PfCNbSolutionDD+1}}%
+ \modulo{\PfCNbSolutionDD}{2}%
+ \ifnum\remainder=0\relax%
+ \tikz[remember picture,overlay]\draw[Orchid,line width=2pt,transform canvas={xshift=0.25\PfCTrioHauteur,yshift=0.25\PfCTrioHauteur}] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) to (TS-\fpeval{##2+3+\PfCTrioAjout-1}-\fpeval{##1+2+\PfCTrioAjout}.center);%
+ \else%
+ \tikz[remember picture,overlay]\draw[Orchid,line width=2pt,transform canvas={xshift=-0.25\PfCTrioHauteur,yshift=-0.25\PfCTrioHauteur}] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) to (TS-\fpeval{##2+3+\PfCTrioAjout-1}-\fpeval{##1+2+\PfCTrioAjout}.center);%
+ \fi%
+ }{}%
+ }%
+ }%
+ % Calculs des diag négatives (ascendantes)
+ \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
+ \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCTrioMaxB+1}}}\do{%
+ \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-2)+##2+2}]}%
+ \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \xdef\PfCNbSolutionDM{\fpeval{\PfCNbSolutionDM+1}}%
+ \modulo{\PfCNbSolutionDM}{2}%
+ \ifnum\remainder=0\relax%
+ \tikz[remember picture,overlay]\draw[Lavender,line width=2pt,transform canvas={xshift=-0.25\PfCTrioHauteur,yshift=0.25\PfCTrioHauteur}] (TS-\fpeval{##1+\PfCTrioAjout+1}-\fpeval{##2+\PfCTrioAjout}.center) to (TS-\fpeval{##1+\PfCTrioAjout-1}-\fpeval{##2+3+\PfCTrioAjout-1}.center);%
+ \else%
+ \tikz[remember picture,overlay]\draw[Lavender,line width=2pt,transform canvas={xshift=0.25\PfCTrioHauteur,yshift=-0.25\PfCTrioHauteur}] (TS-\fpeval{##1+\PfCTrioAjout+1}-\fpeval{##2+\PfCTrioAjout}.center) to (TS-\fpeval{##1+\PfCTrioAjout-1}-\fpeval{##2+3+\PfCTrioAjout-1}.center);%
+ \fi%
+ }{}%
+ }%
+ }%
+ }{}%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}%
\NewDocumentCommand\TrioCourt{o}{%
\useKVdefault[Trio]%
\setKV[Trio]{#1}%
+ \xdef\PfCTitiH{0}%
+ \xdef\PfCTitiV{0}%
+ \xdef\PfCTitiDM{0}%
+ \xdef\PfCTitiDD{0}%
+ \ifboolKV[Trio]{Horizontal}{\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
+ \ifboolKV[Trio]{Vertical}{\xdef\PfCTitiH{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
+ \ifboolKV[Trio]{DiagonaleM}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDD{1}}{}%
+ \ifboolKV[Trio]{DiagonaleD}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}}{}%
\setcounter{PfCTrioLettre}{\useKV[Trio]{Colonne}-1}%
\ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{4}}{\xdef\PfCTrioNbCases{3}}%
\setlength{\PfCTrioHauteur}{\useKV[Trio]{Largeur}+\tabcolsep}%
@@ -169,101 +273,81 @@
\ifboolKV[Trio]{Repere}{%
\xdef\PfCTrioAjout{1}%
}{%
- \xdef\PfCTrioAjout{0}
+ \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{\PfCTrioMaxA*(##2-1)+##1}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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}{}%
+ \ifnum\fpeval{\PfCTitiH}=0\relax
+ \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{\PfCTrioMaxA*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{\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}{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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}{}%
- }%
+ \fi%
% 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{\PfCTrioMaxA*(##1-1)+##2}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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}{}%
+ \ifnum\fpeval{\PfCTitiV}=0\relax
+ \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{\PfCTrioMaxA*(##1-1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{\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}{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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}{}%
- }%
+ \fi
% 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{\PfCTrioMaxA*(##2-1)+##1}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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}{}%
+ \ifnum\fpeval{\PfCTitiDD}=0\relax
+ \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{\PfCTrioMaxA*(##2-1)+##1}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \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}{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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{\PfCTrioMaxA*(##1+1)+##2}]}%
- \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2+1}]}%
- \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##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%
+ \fi
+ % Calculs des diagonales négatives (montantes)
+ \ifnum\fpeval{\PfCTitiDM}=0\relax
+ \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{\PfCTrioMaxA*(##1+1)+##2}]}%
+ \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2+1}]}%
+ \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+2}]}%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==1}{%
+ \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%
+ }{}%
+ }%
+ \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
+ \xintifboolexpr{\PfCRetourTestCible==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}{}%
- }%
+ \fi%
}{}%
\Body
\ifboolKV[Trio]{Repere}{%
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index dd1f5c9237..d09cfda988 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{2024/01/22}%
+\def\filedate{2024/03/24}%
\let\PfCfiledate\filedate%
-\def\fileversion{0.99-z-z}%
+\def\fileversion{0.99-A-b}%
\let\PfCfileversion\fileversion%
\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
@@ -14,6 +14,20 @@
\newif\if@shellescape \@shellescapetrue%
\newif\if@amssymb \@amssymbtrue%
+%
+\newif\if@Euro \@Eurotrue
+\newif\if@CFA \@CFAfalse
+\newif\if@CFP \@CFPfalse
+\newif\if@CHF \@CHFfalse
+\newif\if@US \@USfalse
+\newif\if@UK \@UKfalse
+
+\DeclareOption{CFA}{\@Eurofalse\@CFAtrue}%
+\DeclareOption{CFP}{\@Eurofalse\@CFPtrue}%
+\DeclareOption{CHF}{\@Eurofalse\@CHFtrue}%
+\DeclareOption{UK}{\@Eurofalse\@UKtrue}%
+\DeclareOption{US}{\@Eurofalse\@UStrue}%
+%
\DeclareOption{nonshellescape}{\@shellescapefalse}%
\DeclareOption{nonamssymb}{\@amssymbfalse}%
\ProcessOptions\relax%
@@ -25,8 +39,8 @@
% mathématiques
\RequirePackage{siunitx}%
\sisetup{%
- locale=FR,%
- mode = match, propagate-math-font = true,%
+ locale=FR,%mode = match,
+ propagate-math-font = true,%
reset-math-version = false, reset-text-family = false,%
reset-text-series = false, reset-text-shape = false,%
text-family-to-math = true, text-series-to-math = true,%
@@ -48,6 +62,30 @@
\DeclareSIUnit{\EuRo}{€}%
\DeclareSIUnit{\Dollar}{\$}%
\DeclareSIUnit{\LivreSterling}{£}%
+\DeclareSIUnit{\PfCCFA}{F.C.F.A.}%
+\DeclareSIUnit{\PfCCFP}{F.C.F.P.}%
+\DeclareSIUnit{\PfCCHF}{CHF}%
+
+%
+\if@CFA%
+ \DeclareSIUnit{\DeviseDefaut}{F.C.F.A.}%
+\fi%
+\if@CFP%
+ \DeclareSIUnit{\DeviseDefaut}{F.C.F.P.}%
+\fi%
+\if@CHF%
+ \DeclareSIUnit{\DeviseDefaut}{CHF}%
+\fi%
+\if@Euro%
+ \DeclareSIUnit{\DeviseDefaut}{€}%
+\fi%
+\if@US%
+ \DeclareSIUnit{\DeviseDefaut}{\Dollar}%
+\fi%
+\if@UK%
+ \DeclareSIUnit{\DeviseDefaut}{\LivreSterling}%
+\fi%
+
\RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
%\PassOptionsToPackage{table,svgnames}{xcolor}
@@ -88,7 +126,6 @@
\RequirePackage{multido}%
\RequirePackage{xlop}%
-\RequirePackage{xfp}%
\RequirePackage{tcolorbox}%
\tcbuselibrary{breakable,external,fitting,hooks,magazine,poster,raster,skins,theorems,listings,listingsutf8}
@@ -98,7 +135,7 @@
%https://tex.stackexchange.com/questions/58656/best-way-to-draw-a-chevron-diagram-using-tikz
\usetikzlibrary{calc,shapes,arrows,tikzmark,chains,positioning,shapes.symbols,babel,fit,backgrounds}%
-\RequirePackage{suffix}%pour la commande étoilée
+%\RequirePackage{suffix}%pour la commande étoilée
\RequirePackage{multicol}%
@@ -107,7 +144,7 @@
\RequirePackage{stackengine}%
\RequirePackage[thicklines]{cancel}%
-\RequirePackage{fontawesome5}%Pour l'environnement Twitter
+\RequirePackage{fontawesome5}%
\RequirePackage{pifont}%Pour la commande \Autonomie
\RequirePackage{nicematrix}%
\NiceMatrixOptions{allow-duplicate-names}%
@@ -115,14 +152,14 @@
\let\myoldmulticolumn\multicolumn%
\AtBeginEnvironment{tabular}{\let\multicolumn\myoldmulticolumn}%
-\RequirePackage{multirow}%
+%\RequirePackage{multirow}%
\RequirePackage{longtable}
\RequirePackage{fmtcount}%
\FCloadlang{french}%
% https://stackoverflow.com/questions/3391103/how-to-make-the-grayed-round-box-using-tiks
-\RequirePackage{environ}%
+%\RequirePackage{environ}%
%%%%% Quelques besoins particuliers
@@ -254,28 +291,6 @@
\newlength{\LongBoitePoint}
-\NewDocumentCommand\PointsSuspensionold{sm}{%
- \setbox2=\hbox{\ldotp}%
- \setlength{\LongBoitePoint}{\wd2}%
- \IfBooleanTF{#1}{%
- \Suspensionfill%
- }{%
- \setbox1=\hbox{#2}%
- \StrLen{#2}[\LongueurPoints]%
- \ifmmode%
- \mathinner{%
- \xintFor* ##1 in {\xintSeq{1}{\LongueurPoints}}\do{%
- \ldotp%
- }%
- }%
- \else%
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{round(\wd1/\wd2)}}}\do{%
- \ldotp%
- }%
- \fi%
- }%
-}%
-
\NewDocumentCommand\PointsSuspension{m}{%
\setbox2=\hbox{\ldotp}%
\setlength{\LongBoitePoint}{\wd2}%
@@ -305,7 +320,6 @@
\kern\z@}%
\NewDocumentCommand\PfCdotover{}{\leavevmode\cleaders\hb@xt@ .22em{\hss $\cdot$\hss}\hfill\kern\z@}%
-
\makeatother%
\NewDocumentCommand\pointilles{o}{%
@@ -519,6 +533,37 @@
\reademptyitems%
}%
+\newcommand\MelangeListeNewTwo[2]{%
+ % #1 Liste à mélanger
+ % #2 Nombre d'éléments à conserver
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeInter{#1}%
+% \xdef\faa{}% Liste construite
+ \xdef\fii{}% Liste détruite
+ % on crée les #2 premieres solutions.
+ \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
+ \xintifboolexpr{\ListeInterlen>1}{%
+ \xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
+ \ifnum\fpeval{##1}=1\relax
+ \xdef\faa{\ListeInter[\Alea]}%
+ \else
+ \xdef\faa{\faa,\ListeInter[\Alea]}%
+ \fi
+ \xdef\fii{}%
+ \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
+ \xintifboolexpr{##2 == \Alea}{%
+ }{%
+ \xdef\fii{\fii \ListeInter[##2],}%
+ }%
+ }%
+ }{%
+ \xdef\faa{\faa \ListeInter[1]}%
+ }%
+ \readlist*\ListeInter{\fii}%
+ }%
+ \reademptyitems%
+}%
+
%%%
% Smiley
%%% https://tex.stackexchange.com/questions/3695/smileys-in-latex/227226
@@ -708,12 +753,15 @@
\setsepchar[*]{,*/}\ignoreemptyitems
\readlist*\ListeMateriaux{aluminium/'/2.7,chêne/e~/0.69,bouleau/e~/0.65,sapin/e~/0.45,polystyrène/e~/1.04,porcelaine/la/2.5,acier/'/7.85,cuivre/e~/8.92,fer/e~/7.86,or/'/19.3,argent/'/10.5,bronze/e~/8.4,plomb/e~/11.35,marbre/e~/2.75,laiton/e~/7.3,titane/e~/4.5,PVC/e~/1.38}
-\setsepchar{,}
+\setsepchar{,}\reademptyitems
%Internationalisation
\def\PfCSymbolTimes{\times}%
\def\PfCSymbolDiv{\div}%
+\input{PfCTicketCaisse}
+\input{PfCRecyclage}
+\input{PfCDontCountDots}
\input{PfCConversion}
\input{PfCCritere}
\input{PfCLego}
@@ -842,7 +890,7 @@
%%%
\newcommand\Puissances[2]{%
\ensuremath{%
- \xintifboolexpr{#2==0}{1}{\xintifboolexpr{#2>0}{\xdef\TotalP{\fpeval{#2-1}}#1\multido{\i=1+1}{\TotalP}{\times#1}}{\xdef\TotalP{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\TotalP}{\times#1}}}}%
+ \xintifboolexpr{#2==0}{1}{\xintifboolexpr{#2>0}{\xdef\TotalP{\fpeval{#2-1}}#1\xintFor* ##1 in{\xintSeq{1}{\TotalP}}\do{\times#1}}{\xdef\TotalP{\fpeval{-#2-1}}\frac{1}{#1\xintFor* ##1 in{\xintSeq{1}{\TotalP}}\do{\times#1}}}}%
}%
}%