summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-10-26 19:52:45 +0000
committerKarl Berry <karl@freefriends.org>2023-10-26 19:52:45 +0000
commitb6160c75117303c1a6efa16a67c8f94e198e8010 (patch)
tree2fdfc22f45ba17ed6ce1aa21e217985caa1f24ae /Master/texmf-dist
parent75882bc5f35741f99d77b5a55672d6d45a03669b (diff)
profmaquette (26oct23)
git-svn-id: svn://tug.org/texlive/trunk@68662 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdfbin177327 -> 203416 bytes
-rw-r--r--Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.tex234
-rw-r--r--Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty767
3 files changed, 929 insertions, 72 deletions
diff --git a/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdf b/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdf
index 8b8ff62f0c0..26ddb6c90ff 100644
--- a/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdf
+++ b/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.tex b/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.tex
index 8daf45b3f19..201af9c0d0f 100644
--- a/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.tex
+++ b/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.tex
@@ -120,16 +120,16 @@
texcsstyle=*\color{black},%pour colorer la contre-oblique
classoffset=5,
texcsstyle=*\color{blue},%pour colorer la contre-oblique
- moretexcs={brm,TikzDM,TikzDMCor,TikzDS,TikzDSCor,TikzIE,TikzIECor,TikzFiche,TikzFicheCor,TikzCours,Competences,TikzParcours,TikzParcoursCor,TikzPdT,TikzPdTCor,PfMCompNA,PfMCompECA,PfMCompA,AfficheParcours,CheminVrai,CheminFaux},
+ moretexcs={brm,TikzDM,TikzDMCor,TikzDS,TikzDSCor,TikzIE,TikzIECor,TikzFiche,TikzFicheCor,TikzCours,Competences,TikzParcours,TikzParcoursCor,TikzPdT,TikzPdTCor,PfMCompNA,PfMCompECA,PfMCompA,AfficheParcours,CheminVrai,CheminFaux,TikzContrat,TikzContratCor,TikzFdR,TikzFdRCor,AfficheContrat,AfficheFdR},
emph={Maquette,exercice,exercice,Solution,Reponse,Indice},%
classoffset=1,
- keywords={DM,DS,IE,Fiche,CorrigeFin,CorrigeApres,PdT,Parcours,ParcoursPerso,Cours},
+ keywords={DM,DS,IE,Fiche,CorrigeFin,CorrigeApres,PdT,Parcours,ParcoursPerso,Cours,FdR,Contrat},
keywordstyle=\color{OliveDrab},
classoffset=2,
keywords={Theme,Niveau,Classe,Date,Calculatrice,Code,Numero,Sujet,Nom,NumSujet,Fichier,Type},
keywordstyle=\color{BlueViolet},%DarkMagenta},
classoffset=3,
- keywords={Pouce,Direct,PasCorrige,BaremeDetaille,BaremeTotal,Source,Titre,Oral,Calculatrice,Competence,Trajet},
+ keywords={Pouce,Direct,PasCorrige,BaremeDetaille,BaremeTotal,Source,Titre,Oral,Calculatrice,Competence,Trajet,Confiance,Route,Stop},
keywordstyle=\color{DarkGreen},
% delim = **[s][\color{purple}]{$}{$},
% moredelim = **[s][\color{purple}]{\\[}{\\]},
@@ -269,6 +269,22 @@
\par{\tiny\useKV[PdT]{Code}}\hfill{\scriptsize\useKV[PdT]{Date}}%
\end{tcolorbox}%
}
+
+\renewcommand\TikzFdR{%
+ \begin{tcolorbox}[%spread outwards=-1cm,spread inwards=-1cm,
+ colback=gray!5]%
+ \Large\sffamily \useKV[FdR]{Theme}\hfill\useKV[FdR]{Niveau} \useKV[FdR]{Classe}%
+ \par{\tiny\useKV[FdR]{Code}}\hfill{\scriptsize\useKV[FdR]{Date}}%
+ \end{tcolorbox}%
+}
+
+\renewcommand\TikzContrat{%
+ \begin{tcolorbox}[%spread outwards=-1cm,spread inwards=-1cm,
+ colback=gray!5]%
+ \Large\sffamily \useKV[Contrat]{Theme}\hfill\useKV[Contrat]{Niveau} \useKV[Contrat]{Classe}%
+ \par{\tiny\useKV[Contrat]{Code}}\hfill{\scriptsize\useKV[Contrat]{Date}}%
+ \end{tcolorbox}%
+}
\begin{document}
\maketitle
\thispagestyle{empty}
@@ -287,7 +303,7 @@ Le c\oe ur de l'utilisation du package \lstinline!ProfMaquette! est donc une ges
\end{Codes}
C'est lui qui indique :
\begin{itemize}
-\item le type de document souhaité \metamk{TypeDocument} (Devoir Maison / Devoir Surveillé / Interrogation écrite / Fiche d'exercices / Parcours d'exercices / Parcours personnalisé / Plan de travail / Cours);
+\item le type de document souhaité \metamk{TypeDocument} (Devoir Maison / Devoir Surveillé / Interrogation écrite / Fiche d'exercices / Parcours d'exercices / Parcours personnalisé / Plan de travail / Cours / Contrat de confiance / Feuille de route);
\item et si ce travail est corrigé \metamk{TypeCorrection} (à la suite d'un exercice ou à la fin du document) ou pas;
\end{itemize}
puis il indiquera les caractéristiques \metamk{Caracteristiques} du document souhaité.
@@ -459,6 +475,46 @@ puis il indiquera les caractéristiques \metamk{Caracteristiques} du document so
On considère un triangle $ABC$\dots
\end{Maquette}
\clearpage
+\subsection*{Contrat de confiance\footnote{Basé sur une idée de Thomas {\sc Castanet}.}}
+\begin{CadreMP}
+ \begin{Description}
+\item[La clé \Cle{Contrat}]\Defaut{false}
+ \begin{itemize}
+ \item[]La clé \Cle{Theme} modifie le titre du \og cours\fg\Defaut{-}
+ \item[]La clé \Cle{Couleur} modifie la couleur donnée à l'entête\Defaut{Crimson}
+ \item[]La clé \Cle{Nomexercice} pour modifier le nom des exercices\Defaut{exercice}
+ \end{itemize}
+\end{Description}
+\end{CadreMP}
+\begin{Codes}[listing only]{0.4}{}
+\begin{Maquette}[Contrat]{}
+ On considère un triangle $ABC$\dots
+\end{Maquette}
+\end{Codes}
+\begin{Maquette}[Contrat]{}
+ On considère un triangle $ABC$\dots
+\end{Maquette}
+\clearpage
+\subsection*{Feuille de route\footnote{Basé sur une idée de Thomas {\sc Castanet}.}}
+\begin{CadreMP}
+ \begin{Description}
+\item[La clé \Cle{FdR}]\Defaut{false}
+ \begin{itemize}
+ \item[]La clé \Cle{Theme} modifie le titre du \og cours\fg\Defaut{-}
+ \item[]La clé \Cle{Couleur} modifie la couleur donnée à l'entête\Defaut{Crimson}
+ \item[]La clé \Cle{Nomexercice} pour modifier le nom des exercices\Defaut{exercice}
+ \end{itemize}
+\end{Description}
+\end{CadreMP}
+\begin{Codes}[listing only]{0.4}{}
+\begin{Maquette}[FdR]{}
+ On considère un triangle $ABC$\dots
+\end{Maquette}
+\end{Codes}
+\begin{Maquette}[FdR]{}
+ On considère un triangle $ABC$\dots
+\end{Maquette}
+\clearpage
Comme on peut le voir, chaque type de travail est associé à une présentation. Ces présentations sont créées par les commandes associées à des styles prédéfinies.\footnote{Qu'on peut donc redéfinir. Par exemple, c'est ce que j'ai fait dans ce document pour la commande \lstinline!\\TikzFiche! : elle ne commence plus une nouvelle page.} \lstinline!tcolorbox! :
\begin{itemize}[label=\textbullet]
\item \lstinline!userdm/userdmcor! pour la clé \Cle{DM};
@@ -467,7 +523,9 @@ Comme on peut le voir, chaque type de travail est associé à une présentation.
\item \lstinline!userfiche/userfichecor! pour la clé \Cle{Fiche};%*
\item \lstinline!userparcours/userparcourscor! pour la clé \Cle{Parcours};%*
\item \lstinline!userpdt/userpdtcor! pour la clé \Cle{PdT};%*
-\item et \lstinline!usercours! pour la clé \Cle{Cours}.
+\item \lstinline!usercours! pour la clé \Cle{Cours};
+\item \lstinline!usercontrat/usercontratcor! pour la clé \Cle{Contrat};%*
+\item et \lstinline!userfdr/userfdr! pour la clé \Cle{FdR};%*
\end{itemize}
Par exemple, pour une fiche, le style {\em par défaut} permet d'obtenir :
@@ -514,7 +572,9 @@ Pour modifier {\em plus finement} les entêtes des différentes maquettes, on di
\item \lstinline!\TikzFiche/\TikzFicheCor! pour la clé \Cle{Fiche};%*
\item \lstinline!\TikzParcours/\TikzParcoursCor! pour la clé \Cle{Parcours};%*
\item \lstinline!\TikzPdT/\TikzPdTCor! pour la clé \Cle{PdT};%*
-\item et \lstinline!\TikzCours! pour la clé \Cle{Cours}.
+\item \lstinline!\TikzCours! pour la clé \Cle{Cours};
+\item \lstinline!\TikzContrat/\TikzContratCor! pour la clé \Cle{PdT};%*
+\item et \lstinline!\TikzFdR/\TikzFdRCor! pour la clé \Cle{PdT}.%*
\end{itemize}
Leurs modifications seront facilitées en copiant le code fourni par le fichier \lstinline!ProfMaquette.sty!.
\clearpage
@@ -868,6 +928,166 @@ L'exemple suivant est obtenu par le code présenté à la page suivante.
\end{Maquette}
\end{Codes}
\clearpage
+\subsection*{Focus sur la maquette \lstinline!Contrat!}
+Dans le cas de cette maquette, l'environnement \lstinline!exercice! dispose de la clé \Cle{Confiance} permettant de construire automatiquement le contrat de confiance. La commande \lstinline!\AfficheContrat{}! représente un schéma associé au contrat proposé par l'enseignant : suivant la réalisation des exercices, l'élève choisit un chemin de remédiation (chemin du bas, repéré par la lettre a), soit un chemin d'approfondissement (chemin du haut, repéré par la lettre b).
+\\Ce schéma se construit seul, automatiquement, après que l'enseignant ait utilisé la clé \Cle{Confiance} dans la création de ses exercices. Il faudra néanmoins deux compilations. \`A noter que ce schéma, avec l'utilisation du package \lstinline!hyperref!, dispose de liens cliquables sur les exercices sélectionnés pour le parcours.
+\begin{Codes}[listing only,listing options={frame=,escapechar=!}]{0.4}{\small}
+\begin{Maquette}[Contrat]{Theme=Calcul mental}
+ \begin{center}
+ \AfficheContrat%
+ \end{center}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+\end{Maquette}
+\end{Codes}
+\clearpage
+\begin{Maquette}[Contrat]{Theme=Calcul mental}
+ \begin{center}
+ \AfficheContrat%
+ \end{center}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+ \begin{exercice}[Confiance={a,b}]
+
+ \end{exercice}
+\end{Maquette}
+\clearpage
+\subsection*{Focus sur la maquette \lstinline!FdR!}
+Dans le cas de cette maquette, l'environnement \lstinline!exercice! dispose des clés \Cle{Route} et \Cle{Stop} permettant de construire automatiquement une feuille de route. La commande \lstinline!\AfficheFdR{}! représente un schéma associé à la feuille de route construite par l'enseignant : l'élève réalise les exercices de la ligne du bas puis demande la validation de l'enseignant. Une fois la validation acquise, l'enseignant peut lui proposer de faire les exercices de la ligne du haut ou de poursuivre la feuille de route.
+\\Ce schéma se construit seul, automatiquement, après que l'enseignant ait utilisé les clés \Cle{Route} et \Cle{Stop} dans la création de ses exercices. Il faudra néanmoins deux compilations. \`A noter que ce schéma, avec l'utilisation du package \lstinline!hyperref!, dispose de liens cliquables sur les exercices sélectionnés pour le parcours.
+\begin{Codes}[listing only,listing options={frame=,escapechar=!}]{0.4}{\scriptsize}
+\begin{Maquette}[FdR]{Theme=Calcul mental}
+ \begin{center}
+ \AfficheFdR%
+ \end{center}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[Route,Stop]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+\end{Maquette}
+\end{Codes}
+\clearpage
+\begin{Maquette}[FdR]{Theme=Calcul mental}
+ \begin{center}
+ \AfficheFdR%
+ \end{center}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[Route,Stop]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[Route]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+ \begin{exercice}[]
+
+ \end{exercice}
+\end{Maquette}
+\clearpage
\subsection*{\og Correction\fg{} des exercices}
Un exercice avec correction pourra\footnote{Dans les faits, seul l'environnement \lstinline!exercice! est nécessaire.} avoir la forme suivante :
\begin{Codes}[listing only]{0.4}{}
@@ -1055,7 +1275,7 @@ Cela engendre, si nécessaire, la création de fichier \lstinline!*.sol! pour le
\clearpage
\section*{Historique}
\begin{description}
-\item[\PfMfiledate{}--v \PfMfileversion] Indépendance vis-à vis du module \lstinline!french! de \lstinline!babel!.
+\item[\PfMfiledate{}--v \PfMfileversion] Création des feuilles de route et contrat de confiance.
\end{description}
\end{document}
%%% Local Variables:
diff --git a/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty b/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty
index 01cd3097815..31e188b47a9 100644
--- a/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty
+++ b/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2023/09/09}%
+\def\filedate{2023/10/25}%
\let\PfMfiledate\filedate%
-\def\fileversion{0.45}%
+\def\fileversion{0.55}%
\let\PfMfileversion\fileversion%
\ProvidesPackage{ProfMaquette}[\filedate\space v\fileversion\space Maquettage de documents]%
@@ -30,34 +30,50 @@
%définition des clés
\RequirePackage{simplekv}
-\setKVdefault[Boulot]{Cours=false,Base=false,BaseHTML=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,ParcoursPerso=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé
+\setKVdefault[Boulot]{Cours=false,Base=false,BaseHTML=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé
\defKV[Boulot]{Colonnes=\setKV[Boulot]{CorrectionColonnes}}%
\setKVdefault[Cours]{Couleur=Crimson,Theme=Trace écrite,NomExercice=Exercice}%
\setKVdefault[DM]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname}%
\setKVdefault[DS]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname,Calculatrice=false,Sujet=A}%
\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
\setKVdefault[PdT]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
+\setKVdefault[FdR]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
\setKVdefault[Parcours]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,Vertical=false}%
+\setKVdefault[Contrat]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,Vertical=false}%
\setKVdefault[ParcoursPerso]{Fichier={}}%
\setKVdefault[IE]{Nom=\'Evaluation,Sujets=false,Theme={},Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname,Calculatrice=false}%
\defKV[IE]{Sujet=\setKV[IE]{Sujets}}%
\setKVdefault[RecapBrevet]{Theme=Les nombres décimaux,Date=\today,Code={},NomExercice=Exercice}%
\setKVdefault[Kholle]{Sujet=1,Numero=1,Date=15,Niveau=TSI-1,Code=\jobname,Lieu=Lycée
du Hainaut (Valenciennes),NomEleve=Albert Einstein,CR=false}%
-\setKVdefault[ClesExercices]{PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Background=white,Cadre=gray!50,Numerote}%
+\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote}%
\defKV[ClesExercices]{Source=\setKV[ClesExercices]{AffichageSource}}%
\defKV[ClesExercices]{Titre=\setKV[ClesExercices]{AffichageTitre}}%
\defKV[ClesExercices]{Competence=\setKV[ClesExercices]{AffichageCompetence}}%
\defKV[ClesExercices]{Trajet=\setKV[ClesExercices]{Parcours}}%
+\defKV[ClesExercices]{Confiance=\setKV[ClesExercices]{Contrat}}%
+\defKV[ClesExercices]{Route=\setKV[ClesExercices]{Routes}}%
+\defKV[ClesExercices]{Stop=\setKV[ClesExercices]{Stops}}%
\setKVdefault[SchemaParcours]{Colonnes=100,Rayon=2.5mm,Largeur=7.5mm,Couleur=LightSteelBlue,Csv=false}%
+\setKVdefault[SchemaContrat]{Ecart=7mm,Rayon=2.5mm}%
+\setKVdefault[SchemaFdR]{Ecart=7mm,Colonnes=100,Rayon=2.5mm,Largeur=7.5mm,Couleur=LightSteelBlue,Csv=false}%
% Definition de longueurs
-\newlength\PfMLargeurSchemaParcours
-\newlength{\PfMHauteurAppreciation}
-\setlength{\PfMHauteurAppreciation}{5cm}
-\newlength{\PfMHauteurRemarque}
-\setlength{\PfMHauteurRemarque}{5cm}
-%définition des compteurs
-\newcounter{PfMExo}%Numéro des exercices
+\newlength\PfMLargeurSchemaParcours%
+\newlength\PfMRayonSchemaParcours%
+\newlength\PfMLargeurSchemaContrat%
+\newlength\PfMRayonSchemaContrat%
+\newlength\PfMLargeurSchemaFdR%
+\newlength\PfMRayonSchemaFdR%
+\newlength{\PfMHauteurAppreciation}%
+\setlength{\PfMHauteurAppreciation}{5cm}%
+\newlength{\PfMHauteurRemarque}%
+\setlength{\PfMHauteurRemarque}{5cm}%
+% définition des compteurs
+\newcounter{PfMMaquette}%Pour compter le nombres de "travaux"
+\setcounter{PfMMaquette}{0}%
+\newcounter{PfMSection}%Pour le barème et ne pas faire obstruction à section
+\setcounter{PfMSection}{0}%
+\newcounter{PfMExo}[PfMMaquette]%Numéro des exercices
\setcounter{PfMExo}{0}%
\newcounter{PfMExoSol}%Pour repérer les valeurs aléatoires construites automatiquement dans la solution
\setcounter{PfMExoSol}{0}%
@@ -75,10 +91,6 @@
\setcounter{RetiensInd}{0}%
\newcounter{PfMNbLogo}%Pour décaler les logos sur la ligne haute de tcolorbox
\setcounter{PfMNbLogo}{0}%
-\newcounter{PfMMaquette}%Pour compter le nombres de "travaux"
-\setcounter{PfMMaquette}{0}%
-\newcounter{PfMSection}%Pour le barème et ne pas faire obstruction à section
-\setcounter{PfMSection}{0}%
\newcount\Orientation%Pour le schéma des parcours
% couleurs
\colorlet{PfMColCpt}{gray!50}
@@ -86,6 +98,8 @@
%\colorlet{PfMCadreFiche}{gray!50}
\colorlet{PfMCadreDM}{gray!85}
\colorlet{PfMCadreParcours}{gray!50}
+\colorlet{PfMCadreContrat}{gray!50}
+\colorlet{PfMCadreFdR}{gray!50}
% Définitions de commandes
\newcommand\PfMIENom{\dotfill}
\newcommand\PfMIEPrenom{\dotfill}
@@ -100,25 +114,41 @@
\newcommand\ChoixSommet[2]{%
% #1 le nombre de sommets
% #2 le nom de base des commandes qui sauvegarde les noms
+ % après chgt
+ \stepcounter{PfMAlea}%
+ % fin chgt
\xdef\CANSGFoo{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}%
\MelangeListe{\CANSGFoo}{#1}%
- \ignoreemptyitems
+ \ignoreemptyitems%
\readlist*\PfMSommet{\faa}%
- \reademptyitems
+ \reademptyitems%
\xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
- \setcounter{PfMSommetcount}{##1}
+ \setcounter{PfMSommetcount}{##1}%
\expandafter\xdef\csname p\Alph{PfMSommetcount}\endcsname{\PfMSommet[##1]}%
- \expandafter\xdef\csname #2\Alph{PfMExo}\alph{PfMSommetcount}\endcsname{\PfMSommet[##1]}%
+ % avant chgt
+ % \expandafter\xdef\csname #2\Roman{PfMExo}\alph{PfMSommetcount}\endcsname{\PfMSommet[##1]}%
+ % après chgt
+ \expandafter\xdef\csname #2\Roman{PfMExo}\roman{PfMAlea}\alph{PfMSommetcount}\endcsname{\PfMSommet[##1]}%
}%
}%
%%%
+\NewDocumentCommand\RestoreSommet{mm}{%
+ % #1 le nombre de sommets
+ % #2 le nom de base utilisé lors de la création des sommets
+ \stepcounter{PfMAlea}%
+ \xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
+ \setcounter{PfMSommetcount}{##1}%
+ \expandafter\xdef\csname p\Alph{PfMSommetcount}\endcsname{\csname #2\Roman{PfMExoSol}\roman{PfMAlea}\alph{PfMSommetcount}\endcsname}%
+ }%
+}%
+
\ifdef{\VariableAlea}{%
\RenewDocumentCommand\VariableAlea{s m m}{%
\IfBooleanTF{#1}{%
\stepcounter{PfMAlea}%
- \expandafter\xdef\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname{\fpeval{#3}}%
- \expandafter\xdef\csname #2\endcsname{\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname}%
+ \expandafter\xdef\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname{\fpeval{#3}}%
+ \expandafter\xdef\csname #2\endcsname{\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname}%
}{%
\xdef#2{\fpeval{#3}}%
}%
@@ -127,8 +157,8 @@
\NewDocumentCommand\VariableAlea{s m m}{%
\IfBooleanTF{#1}{%
\stepcounter{PfMAlea}%
- \expandafter\xdef\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname{\fpeval{#3}}%
- \expandafter\xdef\csname #2\endcsname{\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname}%
+ \expandafter\xdef\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname{\fpeval{#3}}%
+ \expandafter\xdef\csname #2\endcsname{\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname}%
}{%
\xdef#2{\fpeval{#3}}%
}%
@@ -140,11 +170,11 @@
\IfBooleanTF{#1}{%
\stepcounter{PfMAlea}%
\IfNoValueTF{#2}{%
- \expandafter\xdef\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname{\fpeval{randint(#3,#4)}}%
- \expandafter\xdef\csname #5\endcsname{\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname}%
+ \expandafter\xdef\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname{\fpeval{randint(#3,#4)}}%
+ \expandafter\xdef\csname #5\endcsname{\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname}%
}{%
- \expandafter\xdef\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname{\fpeval{round(randint(#3,#4)+rand(),#2)}}%
- \expandafter\xdef\csname #5\endcsname{\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname}%
+ \expandafter\xdef\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname{\fpeval{round(randint(#3,#4)+rand(),#2)}}%
+ \expandafter\xdef\csname #5\endcsname{\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname}%
}%
}{%
\IfNoValueTF{#2}{%
@@ -159,11 +189,11 @@
\IfBooleanTF{#1}{%
\stepcounter{PfMAlea}%
\IfNoValueTF{#2}{%
- \expandafter\xdef\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname{\fpeval{randint(#3,#4)}}%
- \expandafter\xdef\csname #5\endcsname{\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname}%
+ \expandafter\xdef\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname{\fpeval{randint(#3,#4)}}%
+ \expandafter\xdef\csname #5\endcsname{\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname}%
}{%
- \expandafter\xdef\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname{\fpeval{round(randint(#3,#4)+rand(),#2)}}%
- \expandafter\xdef\csname #5\endcsname{\csname valeur\Alph{PfMExo}\alph{PfMAlea}\endcsname}%
+ \expandafter\xdef\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname{\fpeval{round(randint(#3,#4)+rand(),#2)}}%
+ \expandafter\xdef\csname #5\endcsname{\csname valeur\Roman{PfMExo}\roman{PfMAlea}\endcsname}%
}%
}{%
\IfNoValueTF{#2}{%
@@ -175,18 +205,66 @@
}%
}%
+\NewDocumentCommand\ChoixAleaMultiMix{mmmmm}{%
+ % #1 nombre de valeurs à choisir
+ % #2 valeur minimale
+ % #3 valeur maximale
+ % #4 valeur(s) exclue(s)
+ % #5 Nom de la liste qui récupère les données.
+ \ifx\bla#4\bla%
+ \PackageWarning{ProfMaquette}{Il faut définir au moins une valeur à exclure.}
+ \else%
+ \xdef\PfMMixFoo{#2}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeValeursExclues{#4}%
+ \xintFor* ##1 in{\xintSeq{\fpeval{#2+1}}{#3}}\do{%
+ \xdef\PfMMixFoo{\PfMMixFoo,##1}%
+ }%
+ \readlist*\ListeValeursRetenues{\PfMMixFoo}%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeValeursExclueslen}}\do{%
+ \xdef\PfMMixFoo{}%
+ \xintFor* ##2 in{\xintSeq{1}{\ListeValeursRetenueslen}}\do{%
+ \xintifboolexpr{\ListeValeursRetenues[##2]==\ListeValeursExclues[##1]}{}{%
+ \xdef\PfMMixFoo{\PfMMixFoo,\ListeValeursRetenues[##2]}%
+ }%
+ }%
+ \ignoreemptyitems%
+ \readlist*\ListeValeursRetenues{\PfMMixFoo}%
+ }%
+ \MelangeListe{\PfMMixFoo}{#1}%
+ \xdef#5{\faa}%
+ \fi%
+}%
+
+\NewDocumentCommand\ChoixAleaMulti{mmmm}{%
+ % #1 nombre de valeurs à choisir
+ % #2 valeur minimale
+ % #3 valeur maximale
+ % #4 Nom de la liste qui récupère les données.
+ \xdef\PfMMixFoo{\fpeval{randint(#2,#3)}}%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{#1-1}}}\do{%
+ \xdef\PfMMixFoo{\PfMMixFoo,\fpeval{randint(#2,#3)}}%
+ }%
+ \xdef#4{\PfMMixFoo}%
+}%
+
\NewDocumentCommand\RestoreChoixAlea{m}{%
\stepcounter{PfMAlea}%
- \expandafter\xdef\csname #1\endcsname{\csname valeur\Alph{PfMExoSol}\alph{PfMAlea}\endcsname}
+ \expandafter\xdef\csname #1\endcsname{\csname valeur\Roman{PfMExoSol}\roman{PfMAlea}\endcsname}
}%
-\NewDocumentCommand\RestoreSommet{mm}{%
- % #1 le nombre de sommets
- % #2 le nom de base utilisé lors de la création des sommets
- \xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
- \setcounter{PfMSommetcount}{##1}
- \expandafter\xdef\csname p\Alph{PfMSommetcount}\endcsname{\csname #2\Alph{PfMExoSol}\alph{PfMSommetcount}\endcsname}
- }%
+\NewDocumentCommand\ExporteListe{mm}{%
+ %#1 le nom de la liste
+ %#2 le contenu de la liste.
+ \stepcounter{PfMAlea}
+ \expandafter\xdef\csname Liste\Roman{PfMExo}\roman{PfMAlea}\endcsname{#2}%
+ \expandafter\xdef\csname #1\endcsname{\csname Liste\Roman{PfMExo}\roman{PfMAlea}\endcsname}
+}%
+
+\NewDocumentCommand\RestoreListe{m}{%
+ %#1 le nom de la liste à restaurer
+ \stepcounter{PfMAlea}%
+ \expandafter\xdef\csname #1\endcsname{\csname Liste\Roman{PfMExoSol}\roman{PfMAlea}\endcsname}
}%
% Définitions pour les compétences
@@ -556,6 +634,529 @@
\endtcolorbox%
}
+%%Contrat
+
+%\makeatletter
+
+%\makeatother
+
+%\makeatletter
+\NewDocumentCommand\AfficheContrat{o}{%
+ \useKVdefault[SchemaContrat]%
+ \setKV[SchemaContrat]{#1}%
+ \setlength{\PfMLargeurSchemaContrat}{\useKV[SchemaContrat]{Ecart}}%
+ \setlength{\PfMRayonSchemaContrat}{\useKV[SchemaContrat]{Rayon}}%
+ %\colorlet{PfMCouleurSP}{\useKV[SchemaContrat]{Couleur}}%
+ \@ifundefined{Op@\Alph{PfMMaquette}-ContratTotalExo}{Recompilez pour obtenir le contrat.}%
+ {%
+ \opexport{\Alph{PfMMaquette}-ContratTotalExo}{\ContratTotalExo}%
+ % Total Exo : \ContratTotalExo
+ \setsepchar{,}\ignoreemptyitems%
+ \xdef\PfCFooListeA{\csname \Alph{PfMMaquette}Contrata\endcsname}%
+ \xdef\PfCFooListeB{\csname \Alph{PfMMaquette}Contratb\endcsname}%
+ \readlist*\ListeA{\PfCFooListeA}%
+ \readlist*\ListeB{\PfCFooListeB}%
+% Liste A : \showitems\ListeA[]\par
+% Liste B : \showitems\ListeB[]\par
+ % On écrit en supposant que la liste A est la plus longue
+ \xdef\LongueurA{\ListeAlen}%
+ \xdef\LongueurB{\ListeBlen}%
+ \xdef\Foo{}%
+ \xdef\Decalage{0}%
+ % On change la liste B en ajoutant des 0 où il manque des éléments.
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurB}}\do{%
+ \xdef\Test{0}%
+ \xintFor * ##2 in {\xintSeq{1}{\LongueurA}}\do{%
+ % ListeA vaut \ListeA[##2] et ListeB vaut \ListeB[##1]\par
+ \IfStrEq{\ListeA[##2]}{\ListeB[##1]}{\xdef\Test{\fpeval{\Test+1}}\xdef\Position{##2}}{}%
+ }%
+ \xintifboolexpr{\Test==0}{%pas présent
+ \xdef\Foo{\Foo,\ListeB[##1]}
+ }{%présent
+ \xintifboolexpr{\Position>\fpeval{##1+\Decalage}}{%
+ \xintFor* ##3 in{\xintSeq{\fpeval{##1+\Decalage}}{\fpeval{\Position-1}}}\do{%
+ \xdef\Foo{\Foo,0}%
+ }
+ \xdef\Decalage{\fpeval{\Position-##1-\Decalage}}
+ }{}
+ \xdef\Foo{\Foo,\ListeB[##1]}
+ }%
+ }%
+% La liste A est \showitems\ListeA[]\par
+ \readlist*\ListeB{\Foo}%
+% La liste B modifiée est \showitems\ListeB[]\par
+ \xdef\FooNoeuds{}%
+ \foreachitem\compteur\in\ListeA{%
+ \xdef\FooNoeuds{\FooNoeuds,\ListeA[\compteurcnt]/\ListeB[\compteurcnt]}%
+ }%
+ \BuildConfianceTikz{\FooNoeuds}%
+ }%
+}%
+%\makeatother
+
+\NewDocumentCommand\BuildConfianceTikz{m}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\Noeuds{#1}%
+ \begin{tikzpicture}
+ \coordinate (C-0) at (-\PfMLargeurSchemaContrat,0);%
+ \coordinate (A-0) at (-\PfMLargeurSchemaContrat,-\PfMLargeurSchemaContrat+\PfMRayonSchemaContrat);%
+ \coordinate (B-0) at (-\PfMLargeurSchemaContrat,\PfMLargeurSchemaContrat-\PfMRayonSchemaContrat);%
+ \xintFor*##1 in{\xintSeq{1}{\fpeval{\Noeudslen+1}}}\do{%
+ \coordinate[xshift=\PfMLargeurSchemaContrat] (C-##1) at (C-\fpeval{##1-1});%
+ \coordinate[xshift=\PfMLargeurSchemaContrat] (A-##1) at (A-\fpeval{##1-1});%
+ \coordinate[xshift=\PfMLargeurSchemaContrat] (B-##1) at (B-\fpeval{##1-1});%
+ }%
+ % On place les points
+ \xintFor* ##1 in{\xintSeq{1}{\Noeudslen}}\do{%
+ \xintifboolexpr{\Noeuds[##1,1]==\Noeuds[##1,2]}{%
+ \coordinate (A-##1) at (C-##1);%
+ \coordinate (B-##1) at (C-##1);%
+ }{}%
+ }%
+ % on trace
+ \xintifboolexpr{\Noeuds[1,1]==\Noeuds[1,2]}{\draw[line width=1pt,->] (C-0)--(C-1);%
+ }{%
+ \draw[line width=1pt,->] (A-0)--(A-1);
+ \draw[line width=1pt,->] (B-0)--(B-1);
+ }%
+ \xintFor* ##1 in{\xintSeq{2}{\Noeudslen}}\do{%
+ \draw[line width=1pt] (A-\fpeval{##1-1})--(A-##1);%
+ \draw[line width=1pt] (B-\fpeval{##1-1})--(B-##1);%
+ }%
+ \xintifboolexpr{\Noeuds[\Noeudslen,1]==\Noeuds[\Noeudslen,2]}{\draw[line width=1pt,->] (C-\Noeudslen)--(C-\fpeval{\Noeudslen+1});%
+ }{%
+ \draw[line width=1pt,->] (A-\Noeudslen)--(A-\fpeval{\Noeudslen+1});
+ \draw[line width=1pt,->] (B-\Noeudslen)--(B-\fpeval{\Noeudslen+1});
+ }%
+ % on dessine les cercles
+ \xintFor* ##1 in{\xintSeq{1}{\Noeudslen}}\do{%
+ \xintifboolexpr{\Noeuds[##1,1]==\Noeuds[##1,2]}{%
+ \draw[fill=white] (C-##1) circle (\PfMRayonSchemaContrat) node{\ref{page-\thePfMMaquette-\Noeuds[##1,1]}};%
+ }{%
+ \draw[fill=white] (A-##1) circle (\PfMRayonSchemaContrat) node{\ref{page-\thePfMMaquette-\Noeuds[##1,1]}};%
+ \xintifboolexpr{\Noeuds[##1,2]==0}{}{\draw[fill=white] (B-##1) circle (\PfMRayonSchemaContrat) node{\ref{page-\thePfMMaquette-\Noeuds[##1,2]}};}%
+ }%
+ }%
+ \end{tikzpicture}%
+}%
+
+\NewDocumentCommand\RemplisContrat{m}{%
+ \ifcsname \Alph{PfMMaquette}confiance#1\endcsname
+ \expandafter\xdef\csname \Alph{PfMMaquette}confiance#1\endcsname{\csname \Alph{PfMMaquette}confiance#1\endcsname,\thePfMExo}%
+% Yes !
+ \else
+% No !
+ \expandafter\xdef\csname \Alph{PfMMaquette}confiance#1\endcsname{\thePfMExo}%
+ \fi
+ \immediate\write\@auxout{\noexpand\expandafter\gdef\noexpand\csname \Alph{PfMMaquette}Contrat#1\endcsname{\csname \Alph{PfMMaquette}confiance#1\endcsname}}%
+}%
+
+
+\newenvironment{exerciceContrat}[1][]{%
+ \setcounter{PfMAlea}{0}%
+ \setcounter{PfMNbLogo}{1}%
+ \useKVdefault[ClesExercices]%
+ \setKV[ClesExercices]{#1}%
+ \setKV[ClesExercices]{BaremeTotal=false,BaremeDetaille=false}%
+ \refstepcounter{PfMSection}%
+ \PfMChoixCorrection%
+ \refstepcounter{PfMExo}%
+ \immediate\write\@auxout{\string\opcopy{\thePfMExo}{\Alph{PfMMaquette}-ContratTotalExo}}%
+ % Creation des parcours
+ \ifboolKV[ClesExercices]{Contrat}{%
+ % Remise à zéro de conteneurs des parcours
+ \setsepchar{,}%
+ \xdef\PfMFooListeContrat{\useKV[ClesExercices]{Confiance}}
+ \readlist*\ListeContrat{\PfMFooListeContrat}%
+ \foreachitem\compteur\in\ListeContrat{%
+ \RemplisContrat{\ListeContrat[\compteurcnt]}%
+ }%
+ }{}%
+ %
+ \tcolorbox[%
+ tikzcontrat,
+ label is label,
+ label=page-\thePfMMaquette-\thePfMExo
+ ]
+}{\endtcolorbox%
+}
+
+%%% Contrat %%%
+\tcbset{%
+ usercontrat/.style={%
+ spread upwards=-1cm,colback=gray!5%
+ }%
+}%
+
+\tcbset{%
+ usercontratcor/.style={%
+ spread upwards=-1cm,colback=gray!5%
+ }%
+}%
+
+\NewDocumentCommand\TikzContrat{}{%
+ \begin{tcolorbox}[usercontrat]%
+ \Large\sffamily \useKV[Contrat]{Theme}\hfill\useKV[Contrat]{Niveau} \useKV[Contrat]{Classe}%
+ \par{\tiny\useKV[Contrat]{Code}}\hfill{\scriptsize\useKV[Contrat]{Date}}%
+ \end{tcolorbox}%
+}
+
+\NewDocumentCommand\TikzContratCor{m}{%
+ \clearpage
+ \setKV[Contrat]{#1}%
+ \begin{tcolorbox}[usercontratcor]%
+ \Large\sffamily \useKV[Contrat]{Theme} (Correction) \hfill\useKV[Contrat]{Niveau} \useKV[Contrat]{Classe}
+ \par{\tiny\useKV[Contrat]{Code}}\hfill{\scriptsize\useKV[Contrat]{Date}}
+ \end{tcolorbox}%
+}
+
+\tcbset{%
+ tikzcontrat/.style={%
+ before skip=1em,
+ enhanced,
+ breakable,
+ colback=white,
+ colframe=PfMCadreContrat,
+ overlay unbroken and first={%
+ \node[%
+ name=A,
+ fill=white,
+ anchor=west,
+ xshift=10pt,
+ ] at (frame.north west){\bfseries\sffamily \useKV[Contrat]{NomExercice} \thePfMExo\ifboolKV[ClesExercices]{AffichageTitre}{ : \useKV[ClesExercices]{Titre}}{}};
+ %%
+ \ifboolKV[ClesExercices]{Calculatrice}{}{\node[fill=white,anchor=west,xshift=(\thePfMNbLogo*2.5+(\thePfMNbLogo-1)*20)*1pt] at (A.east) {\cancel{\faCalculator}};\stepcounter{PfMNbLogo}}
+ \ifboolKV[ClesExercices]{Oral}{\node[fill=white,anchor=west,xshift=(\thePfMNbLogo*2.5+(\thePfMNbLogo-1)*20)*1pt] at (A.east) {\faBullhorn};\stepcounter{PfMNbLogo}}{}
+ %%
+ \ifboolKV[ClesExercices]{AffichageCompetence}{%
+ \node[%
+ fill=white,
+ anchor=east,
+ xshift=-10pt,
+ text=PfMColCpt,%
+ ]
+ at (frame.north east)
+ {\itshape\scriptsize\sffamily Compétence(s) dominante(s) : \useKV[ClesExercices]{Competence}};
+ }{}%
+ %%
+ \ifboolKV[ClesExercices]{AffichageSource}{%
+ \node[%
+ fill=white,
+ anchor=east,
+ xshift=-10pt,
+ text=PfMColSrc,
+ ]
+ at (frame.south east)
+ {\scriptsize\sffamily \useKV[ClesExercices]{Source}};
+ }{}%
+ }%
+ }%
+}%
+%% Fin Contrat %%%
+
+%%FdR
+
+%\makeatletter
+\NewDocumentCommand\AfficheFdR{o}{%
+ \useKVdefault[SchemaFdR]%
+ \setKV[SchemaFdR]{#1}%
+ \setlength{\PfMLargeurSchemaFdR}{\useKV[SchemaFdR]{Ecart}}%
+ \setlength{\PfMRayonSchemaFdR}{\useKV[SchemaFdR]{Rayon}}%
+ \colorlet{PfMCouleurFdR}{\useKV[SchemaFdR]{Couleur}}%
+ \@ifundefined{Op@\Alph{PfMMaquette}-FdRTotalExo}{Recompilez pour obtenir la feuille de route.}%
+ {%
+ \opexport{\Alph{PfMMaquette}-FdRTotalExo}{\FdRTotalExo}%
+ \xdef\PfMListeExerciceFdR{\csname \Alph{PfMMaquette}FdRtrue\endcsname}%
+ \ifcsname \Alph{PfMMaquette}FdRstop\endcsname
+ \xdef\PfMListeExerciceFdRStop{\csname \Alph{PfMMaquette}FdRstop\endcsname}%
+ \else
+ \xdef\PfMListeExerciceFdRStop{}
+ \fi
+ % On ajoute un stop au dernier exercice
+ \xdef\PfMListeExerciceFdRStop{\PfMListeExerciceFdRStop,\FdRTotalExo}%
+% Liste Exos : \PfMListeExerciceFdR\\
+% Liste Stop : \PfMListeExerciceFdRStop\\
+ \BuildRouteTikz{\FdRTotalExo}{\PfMListeExerciceFdR}{\PfMListeExerciceFdRStop}%
+ }%
+}%
+%\makeatother
+
+\NewDocumentCommand\BuildRouteTikz{mmm}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeRetiensExo{#2}%
+ \readlist*\ListeRetiensStop{#3}%
+ \reademptyitems
+% Les exos retenus : \showitems\ListeRetiensExo[]\\
+% Les exos stop : \showitems\ListeRetiensStop[]\\
+ \xdef\LongueurA{\ListeRetiensExolen}%
+ \xdef\LongueurB{\fpeval{\ListeRetiensStoplen-1}}%
+ \xdef\PfMFooExoIncrustes{}
+ \xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
+ \xdef\RetiensExclus{0}%
+ \xintFor* ##2 in {\xintSeq{1}{\LongueurA}}\do{%
+ \xintifboolexpr{\ListeRetiensExo[##2]==##1}{\xdef\RetiensExclus{1}}{}%
+ }%
+ \xintifboolexpr{\RetiensExclus>0}{}{\xdef\PfMFooExoIncrustes{\PfMFooExoIncrustes,##1}}%
+ }%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeRetiensExclus{\PfMFooExoIncrustes}%
+ \xdef\LongueurC{\ListeRetiensExcluslen}%
+ % portion 1
+% Portion 1 :\\
+ \xdef\ListeRoute{}%
+ \xdef\ListeRouteExclus{}%
+ \xdef\NBExo{0}\xdef\NBExoSup{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurA}}\do{%
+ \xintifboolexpr{\ListeRetiensExo[##1]>\ListeRetiensStop[1]}{%
+ %
+ }{%
+ \xdef\NBExo{\fpeval{\NBExo+1}}\xdef\ListeRoute{\ListeRoute,\ListeRetiensExo[##1]}%
+ }%
+ }%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurC}}\do{%
+ \xintifboolexpr{\ListeRetiensExclus[##1]>\ListeRetiensStop[1]}{}{\xdef\NBExoSup{\fpeval{\NBExoSup+1}}\xdef\ListeRouteExclus{\ListeRouteExclus,\ListeRetiensExclus[##1]}}%
+ }%
+ \xintifboolexpr{\NBExoSup==\NBExo}{}{%
+ \xintifboolexpr{\NBExoSup>\NBExo}{%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\NBExoSup-\NBExo}}}\do{%
+ \xdef\ListeRoute{\ListeRoute,-1}%0 pour l'écart
+ }%
+ }{%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\NBExo-\NBExoSup}}}\do{%
+ \xdef\ListeRouteExclus{\ListeRouteExclus,-1}%0 pour l'écart
+ }%
+ }%
+ }%
+ \xdef\ListeRoute{\ListeRoute,0}%0 pour le symbole stop
+ \xdef\ListeRouteExclus{\ListeRouteExclus,0}%0 pour le symbole stop
+% Route Basse : \ListeRoute\\
+% Route Haute : \ListeRouteExclus\\
+ % portions centrales
+% Portions centrales :\\
+ \xintifboolexpr{\ListeRetiensStoplen>2}{%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\LongueurB-1}}}\do{%
+ \xdef\NBExo{0}\xdef\NBExoSup{0}
+ \xintFor* ##2 in{\xintSeq{1}{\LongueurA}}\do{%
+ \xintifboolexpr{\ListeRetiensExo[##2]<\fpeval{\ListeRetiensStop[##1]+1} || \ListeRetiensExo[##2]>\ListeRetiensStop[\fpeval{##1+1}]}{}{\xdef\NBExo{\fpeval{\NBExo+1}}\xdef\ListeRoute{\ListeRoute,\ListeRetiensExo[##2]}%
+ }%
+ }%
+ \xintFor* ##2 in{\xintSeq{1}{\LongueurC}}\do{%
+ \xintifboolexpr{\ListeRetiensExclus[##2]<\fpeval{\ListeRetiensStop[##1]+1} || \ListeRetiensExclus[##2]>\ListeRetiensStop[\fpeval{##1+1}]}{}{\xdef\NBExoSup{\fpeval{\NBExoSup+1}}\xdef\ListeRouteExclus{\ListeRouteExclus,\ListeRetiensExclus[##2]}%
+ }%%
+ }%
+ \xintifboolexpr{\NBExoSup==\NBExo}{}{%
+ \xintifboolexpr{\NBExoSup>\NBExo}{%
+ \xintFor* ##3 in{\xintSeq{1}{\fpeval{\NBExoSup-\NBExo}}}\do{%
+ \xdef\ListeRoute{\ListeRoute,-1}%0 pour l'écart
+ }%
+ }{%
+ \xintFor* ##3 in{\xintSeq{1}{\fpeval{\NBExo-\NBExoSup}}}\do{%
+ \xdef\ListeRouteExclus{\ListeRouteExclus,-1}%0 pour l'écart
+ }%
+ }%
+ }%
+ \xdef\ListeRoute{\ListeRoute,0}\xdef\ListeRouteExclus{\ListeRouteExclus,0}%
+ }%
+ }{}%
+ % portion finale
+% Portion fin \\
+ \xintifboolexpr{\ListeRetiensStoplen>1}{%
+ \xdef\NBExo{0}\xdef\NBExoSup{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurA}}\do{%
+ \xintifboolexpr{\ListeRetiensExo[##1]>\fpeval{\ListeRetiensStop[\ListeRetiensStoplen-1]}}{\xdef\NBExo{\fpeval{\NBExo+1}}\xdef\ListeRoute{\ListeRoute,\ListeRetiensExo[##1]}{}%
+ }%
+ }%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurC}}\do{%
+ \xintifboolexpr{\ListeRetiensExclus[##1]>\fpeval{\ListeRetiensStop[\ListeRetiensStoplen-1]}}{\xdef\NBExoSup{\fpeval{\NBExoSup+1}}\xdef\ListeRouteExclus{\ListeRouteExclus,\ListeRetiensExclus[##1]}{}%
+ }%
+ }%
+ \xintifboolexpr{\NBExoSup==\NBExo}{}{
+ \xintifboolexpr{\NBExoSup>\NBExo}{%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\NBExoSup-\NBExo}}}\do{%
+ \xdef\ListeRoute{\ListeRoute,-1}%0 pour l'écart
+ }%
+ }{%
+ \xintFor* ##1 in{\xintSeq{1}{\fpeval{\NBExo-\NBExoSup}}}\do{%
+ \xdef\ListeRouteExclus{\ListeRouteExclus,-1}%0 pour l'écart
+ }%
+ }%
+ }%
+ \xdef\ListeRoute{\ListeRoute,0}%0 pour le symbole stop
+ \xdef\ListeRouteExclus{\ListeRouteExclus,0}%0 pour le symbole stop
+ }{}%
+ \setsepchar{,}\ignoreemptyitems
+ \readlist*\ListeRouteBasse{\ListeRoute}%
+ \readlist*\ListeRouteHaute{\ListeRouteExclus}%
+% Liste Route : \showitems\ListeRouteBasse[]\\
+% Liste Exclus : \showitems\ListeRouteHaute[]
+ \begin{tikzpicture}
+ \coordinate (A-0) at (-\PfMLargeurSchemaFdR,0);
+ \coordinate (A-1) at (0,0);%
+ \coordinate (B-1) at (0,1);%
+ \xintFor* ##1 in{\xintSeq{2}{\ListeRouteBasselen}}\do{%
+ \coordinate[xshift=\PfMLargeurSchemaFdR] (A-##1) at (A-\fpeval{##1-1});%
+ \coordinate[xshift=\PfMLargeurSchemaFdR] (B-##1) at (B-\fpeval{##1-1});%
+ }%
+ \coordinate[xshift=\PfMLargeurSchemaFdR] (A-\fpeval{\ListeRouteBasselen+1}) at (A-\ListeRouteBasselen);%
+ %Route haute
+ \xintFor* ##1 in{\xintSeq{1}{\ListeRouteHautelen}}\do{%
+ \xintifboolexpr{\ListeRouteHaute[##1]<0}{%
+ \draw[] (B-##1) to (B-\fpeval{##1+1});
+ }{%
+ \xintifboolexpr{\ListeRouteHaute[##1]==0}{%
+ \draw (B-##1) to (A-##1);%
+ }{%
+ \draw[] (B-##1) to (B-\fpeval{##1+1});
+ \draw[fill=white](B-##1) circle (\PfMRayonSchemaFdR) node{\ref{page-\thePfMMaquette-\ListeRouteHaute[##1]}};%
+ }
+ }%
+ }%
+ % Route basse
+ \foreach\i in{1,...,\fpeval{\ListeRouteBasselen}}{%
+ \draw[line width=1pt] (A-\fpeval{\i-1}) -- (A-\i);%
+ }%
+ \draw[line width=1pt,>=latex,->] (A-\ListeRouteBasselen) to (A-\fpeval{\ListeRouteBasselen+1});%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeRouteBasselen}}\do{%
+ \xintifboolexpr{\ListeRouteBasse[##1]<0}{}{%
+ \xintifboolexpr{\ListeRouteBasse[##1]==0}{%
+ \draw[fill=white,draw=white](A-##1) circle (\PfMRayonSchemaFdR) node{\faCheck};%
+ }{%
+ \draw[fill=PfMCouleurFdR](A-##1) circle (\PfMRayonSchemaFdR) node{\ref{page-\thePfMMaquette-\ListeRouteBasse[##1]}};%
+ }%
+ }%
+ }%
+ \end{tikzpicture}%
+}%
+
+\NewDocumentCommand\RemplisFdR{m}{%
+ \ifcsname \Alph{PfMMaquette}route#1\endcsname
+ \expandafter\xdef\csname \Alph{PfMMaquette}route#1\endcsname{\csname \Alph{PfMMaquette}route#1\endcsname,\thePfMExo}%
+% Yes !
+ \else
+% No !
+ \expandafter\xdef\csname \Alph{PfMMaquette}route#1\endcsname{\thePfMExo}%
+ \fi
+ \immediate\write\@auxout{\noexpand\expandafter\gdef\noexpand\csname \Alph{PfMMaquette}FdR#1\endcsname{\csname \Alph{PfMMaquette}route#1\endcsname}}%
+}%
+
+
+\newenvironment{exerciceFdR}[1][]{%
+ \setcounter{PfMAlea}{0}%
+ \setcounter{PfMNbLogo}{1}%
+ \useKVdefault[ClesExercices]%
+ \setKV[ClesExercices]{#1}%
+ \setKV[ClesExercices]{BaremeTotal=false,BaremeDetaille=false}%
+ \stepcounter{PfMSection}%
+ \PfMChoixCorrection%
+ \refstepcounter{PfMExo}%
+ \immediate\write\@auxout{\string\opcopy{\thePfMExo}{\Alph{PfMMaquette}-FdRTotalExo}}%
+ % Creation des parcours
+ \ifboolKV[ClesExercices]{Routes}{%
+ % Remise à zéro de conteneurs des parcours
+ \setsepchar{,}%
+ % \ifboolKV[ClesExercices]{Stop}{\xdef\PfMFooListeFdR{\useKV[ClesExercices]{Route},0}}{
+ \xdef\PfMFooListeFdR{\useKV[ClesExercices]{Route}}
+ % % }%
+ \readlist*\ListeFdR{\PfMFooListeFdR}%
+ \foreachitem\compteur\in\ListeFdR{%
+ \RemplisFdR{\ListeFdR[\compteurcnt]}%
+ }%
+ }{}
+ \ifboolKV[ClesExercices]{Stops}{%
+ \setsepchar{,}%
+ % \ifboolKV[ClesExercices]{Stop}{\xdef\PfMFooListeFdR{\useKV[ClesExercices]{Route},0}}{
+ \xdef\PfMFooListeFdR{stop}%
+ % }%
+ \readlist*\ListeFdR{\PfMFooListeFdR}%
+ \foreachitem\compteur\in\ListeFdR{%
+ \RemplisFdR{\ListeFdR[\compteurcnt]}%
+ }%
+ }{}%
+ %
+ \tcolorbox[%
+ tikzFdR,
+ label is label,
+ label=page-\thePfMMaquette-\thePfMExo
+ ]
+}{\endtcolorbox%
+}
+
+%\makeatother
+
+%%% FdR %%%
+\tcbset{%
+ userfdr/.style={%
+ spread upwards=-1cm,colback=gray!5%
+ }%
+}%
+
+\tcbset{%
+ userfdrcor/.style={%
+ spread upwards=-1cm,colback=gray!5%
+ }%
+}%
+
+\NewDocumentCommand\TikzFdR{}{%
+ \begin{tcolorbox}[userfdr]%
+ \Large\sffamily \useKV[FdR]{Theme}\hfill\useKV[FdR]{Niveau} \useKV[FdR]{Classe}%
+ \par{\tiny\useKV[FdR]{Code}}\hfill{\scriptsize\useKV[FdR]{Date}}%
+ \end{tcolorbox}%
+}
+
+\NewDocumentCommand\TikzFdRCor{m}{%
+ \clearpage
+ \setKV[FdR]{#1}%
+ \begin{tcolorbox}[userfdrcor]%
+ \Large\sffamily \useKV[FdR]{Theme} (Correction) \hfill\useKV[FdR]{Niveau} \useKV[FdR]{Classe}
+ \par{\tiny\useKV[FdR]{Code}}\hfill{\scriptsize\useKV[FdR]{Date}}
+ \end{tcolorbox}%
+}
+
+\tcbset{%
+ tikzFdR/.style={%
+ before skip=1em,
+ enhanced,
+ breakable,
+ colback=white,
+ colframe=PfMCadreFdR,
+ overlay unbroken and first={%
+ \node[%
+ name=A,
+ fill=white,
+ anchor=west,
+ xshift=10pt,
+ ] at (frame.north west){\bfseries\sffamily \useKV[FdR]{NomExercice} \thePfMExo\ifboolKV[ClesExercices]{AffichageTitre}{ : \useKV[ClesExercices]{Titre}}{}};
+ %%
+ \ifboolKV[ClesExercices]{Calculatrice}{}{\node[fill=white,anchor=west,xshift=(\thePfMNbLogo*2.5+(\thePfMNbLogo-1)*20)*1pt] at (A.east) {\cancel{\faCalculator}};\stepcounter{PfMNbLogo}}
+ \ifboolKV[ClesExercices]{Oral}{\node[fill=white,anchor=west,xshift=(\thePfMNbLogo*2.5+(\thePfMNbLogo-1)*20)*1pt] at (A.east) {\faBullhorn};\stepcounter{PfMNbLogo}}{}
+ %%
+ \ifboolKV[ClesExercices]{AffichageCompetence}{%
+ \node[%
+ fill=white,
+ anchor=east,
+ xshift=-10pt,
+ text=PfMColCpt,%
+ ]
+ at (frame.north east)
+ {\itshape\scriptsize\sffamily Compétence(s) dominante(s) : \useKV[ClesExercices]{Competence}};
+ }{}%
+ %%
+ \ifboolKV[ClesExercices]{AffichageSource}{%
+ \node[%
+ fill=white,
+ anchor=east,
+ xshift=-10pt,
+ text=PfMColSrc,
+ ]
+ at (frame.south east)
+ {\scriptsize\sffamily \useKV[ClesExercices]{Source}};
+ }{}%
+ }%
+ }%
+}%
+%% Fin FdR %%%
+
+
%%Parcours
%\makeatletter
@@ -590,14 +1191,17 @@
\setsepchar{,}%
\readlist*\ListeRetiens{#2}%
\begin{tikzpicture}[remember picture,overlay]
- % On place les points
- \coordinate[xshift=-1cm,yshift=-4cm] (A-1) at (current page.north east);%
+ % On place les points%anchor=base,baseline[xshift=-1cm,yshift=-4cm]
+ \coordinate (A-1) at (0,0);%
\xintFor* ##1 in{\xintSeq{2}{#1}}\do{%
\coordinate[yshift=-1cm] (A-##1) at (A-\fpeval{##1-1});%
}%
\foreach\i in{2,...,#1}{%
- \draw[dashed] (A-\fpeval{\i-1}) -- (A-\i);%
+ \draw[line width=1pt] (A-\fpeval{\i-1}) -- (A-\i);%
}%
+ %
+ \draw[line width=1pt,>=latex,->] (A-#1)--(A-\fpeval{#1+1});
+ %
\xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
\draw[fill=white,dashed](A-##1) circle (2.5mm) node{##1};%
}%
@@ -610,11 +1214,11 @@
\NewDocumentCommand\BuildParcoursTikz{mm}{%
\setsepchar{,}%
\readlist*\ListeRetiens{#2}%
- \begin{tikzpicture}
+ \begin{tikzpicture}[anchor=center,baseline=-1.25mm]
% On place les points
\Orientation=1\relax
- \coordinate (A-1) at (0,0);%
- \xintFor* ##1 in{\xintSeq{2}{#1}}\do{%
+ \coordinate[anchor=base,baseline=-1.25mm] (A-1) at (0,0);%
+ \xintFor* ##1 in{\xintSeq{2}{\fpeval{#1+1}}}\do{%
\modulo{##1}{\useKV[SchemaParcours]{Colonnes}}%
\ifnum\remainder=0\relax%
\Orientation=\numexpr\Orientation*(-1)\relax%
@@ -624,8 +1228,11 @@
\fi%
}%
\foreach\i in{2,...,#1}{%
- \draw[dashed] (A-\fpeval{\i-1}) -- (A-\i);%
+ \draw[line width=1pt] (A-\fpeval{\i-1}) -- (A-\i);%
}%
+ %
+ \draw[line width=1pt,>=latex,->] (A-#1)--(A-\fpeval{#1+1});
+ %
\xintFor* ##1 in{\xintSeq{1}{#1}}\do{%
\draw[fill=white,dashed](A-##1) circle (2.5mm) node{##1};%
}%
@@ -1537,7 +2144,7 @@
enhanced,%
overlay unbroken and first={%
\node[yshift=1em] at (frame.south) {
- \scriptsize\sffamily-- Calculatrice \ifboolKV[DS]{Calculatrice}{autorisée}{interdite} --
+ \scriptsize\sffamily-- Calculatrice \ifboolKV[IE]{Calculatrice}{autorisée}{interdite} --
};%
}%
}%
@@ -1609,7 +2216,7 @@
\setcounter{RetiensRep}{0}%
\setcounter{RetiensInd}{0}%
% on remet à zéro le compteur des exercices
- \setcounter{PfMExo}{0}%
+ %\setcounter{PfMExo}{0}%
\setcounter{PfMSOS}{0}%
% nouvelles valeurs.
\stepcounter{PfMMaquette}%
@@ -1620,23 +2227,51 @@
\useKVdefault[Boulot]%
\setKV[Boulot]{#1}%
\IfHookExistsTF{env/exercice/after}{\RemoveFromHook{env/exercice/after}[*]\AddToHook{env/exercice/after}[ChoixExo]{\PfMChoixAffichageCorrection}}{\AddToHook{env/exercice/after}[ChoixExo]{\PfMChoixAffichageCorrection}}%
- \ifboolKV[Boulot]{Cours}{%
- \setKV[Cours]{#2}%
- \TikzCours%
- \let\exercice\exerciceFiche\let\endexercice\endexerciceFiche%
- %\let\Exercice\exerciceFiche\let\endExercice\endexerciceFiche%
+ \ifboolKV[Boulot]{FdR}{%
+ \setKV[FdR]{#2}\TikzFdR%
+ \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR%
\ifboolKV[Boulot]{CorrigeFin}{%
- \AddToHook{env/Maquette/after}[Correction]{%
- \setKV[Boulot]{#1}%
- \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
- \TikzFicheCor{#2}%
- \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
- \PfMAffichageCorrige%
- \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
- }%
- }{}%
+ \AddToHook{env/Maquette/after}[Correction]{%
+ \setKV[Boulot]{#1}%
+ \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
+ \TikzFdRCor{#2}
+ \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
+ \PfMAffichageCorrige%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
+ }%
+ }{}%
+ }{%
+ \ifboolKV[Boulot]{Contrat}{%
+ \setKV[Contrat]{#2}\TikzContrat%
+ \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat%
+ \ifboolKV[Boulot]{CorrigeFin}{%
+ \AddToHook{env/Maquette/after}[Correction]{%
+ \setKV[Boulot]{#1}%
+ \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
+ \TikzContratCor{#2}
+ \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
+ \PfMAffichageCorrige%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
+ }%
+ }{}%
+ }{%
+ \ifboolKV[Boulot]{Cours}{%
+ \setKV[Cours]{#2}%
+ \TikzCours%
+ \let\exercice\exerciceFiche\let\endexercice\endexerciceFiche%
+ % \let\Exercice\exerciceFiche\let\endExercice\endexerciceFiche%
+ \ifboolKV[Boulot]{CorrigeFin}{%
+ \AddToHook{env/Maquette/after}[Correction]{%
+ \setKV[Boulot]{#1}%
+ \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
+ \TikzFicheCor{#2}%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
+ \PfMAffichageCorrige%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
+ }%
+ }{}%
}{%
- \ifboolKV[Boulot]{RecapBrevet}{%
+ \ifboolKV[Boulot]{RecapBrevet}{%
\setKV[RecapBrevet]{#2}%
\TikzRecapBrevet%
\let\exercice\ExerciceRecapBrevet\let\endexercice\endExerciceRecapBrevet%
@@ -1775,7 +2410,7 @@
% \let\Exercice\exerciceDS\let\endExercice\endexerciceDS%On garde exerciceDS
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
- \setKV[Boulot]{#1}%
+ \setKV[Boulot]{#1}%
\setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzIECor{#2}%
\ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
@@ -1806,8 +2441,10 @@
}%
}%
}%
- }%
}%
+ }%
+}%
+}%
}{}%
%\makeatother