texlive[72175] Master/texmf-dist: profmaquette (2sep24)

commits+karl at tug.org commits+karl at tug.org
Mon Sep 2 22:34:33 CEST 2024


Revision: 72175
          https://tug.org/svn/texlive?view=revision&revision=72175
Author:   karl
Date:     2024-09-02 22:34:33 +0200 (Mon, 02 Sep 2024)
Log Message:
-----------
profmaquette (2sep24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdf
    trunk/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.zip
    trunk/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty

Modified: trunk/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/profmaquette/profmaquette-doc.zip
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty	2024-09-02 20:34:24 UTC (rev 72174)
+++ trunk/Master/texmf-dist/tex/latex/profmaquette/ProfMaquette.sty	2024-09-02 20:34:33 UTC (rev 72175)
@@ -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/08/27}%
+\def\filedate{2024/09/01}%
 \let\PfMfiledate\filedate%
-\def\fileversion{0.97b}%
+\def\fileversion{0.98}%
 \let\PfMfileversion\fileversion%
 
 \ProvidesPackage{ProfMaquette}[\filedate\space v\fileversion\space Maquettage de documents]%
@@ -54,7 +54,7 @@
 \makeatother
 %définition des clés
 \RequirePackage{simplekv}%
-\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,LivreHeros=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,EntrainementColonnes=false,Epaisseur=0pt,VersSolution=false,AvecEntrainement=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false,Input=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]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,LivreHeros=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,EntrainementColonnes=false,Epaisseur=0pt,EEpaisseur=0pt,ESansSaut=false,VersSolution=false,AvecEntrainement=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false,Input=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}}%
 \defKV[Boulot]{EColonnes=\setKV[Boulot]{EntrainementColonnes}}%
 \setKVdefault[Cours]{Couleur=Crimson,Theme=Trace écrite,NomExercice=Exercice}%
@@ -73,7 +73,7 @@
 \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[CAN]{Date=\today,Niveau=6,Duree=9,CoefQ=0.4,CoefR=0.35,CoefJ=0.1}%
-\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,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false,AEntretenir=false,Fragile=false,AvecIndications=false,ACompleter=false,Aide=0}%
+\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,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,Grilles=false,Cinq=false,Huit=false,TitreSol=false,NonUtilise=false,Profile=false,AEntretenir=false,Fragile=false,AvecIndications=false,ACompleter=false,Aide=0,Score=0,EchelleSeyes=8}%
 \defKV[ClesExercices]{TitreSolution=\setKV[ClesExercices]{TitreSol}}%
 \defKV[ClesExercices]{Source=\setKV[ClesExercices]{AffichageSource}}%
 \defKV[ClesExercices]{Titre=\setKV[ClesExercices]{AffichageTitre}}%
@@ -84,6 +84,8 @@
 \defKV[ClesExercices]{Stop=\setKV[ClesExercices]{Stops}}%
 \defKV[ClesExercices]{Lignes=\setKV[ClesExercices]{Ligne}}%
 \defKV[ClesExercices]{Encart=\setKV[ClesExercices]{Cadres}}%
+\defKV[ClesExercices]{CinqCinq=\setKV[ClesExercices]{Grilles}\setKV[ClesExercices]{Cinq}}%
+\defKV[ClesExercices]{Seyes=\setKV[ClesExercices]{Grilles}\setKV[ClesExercices]{Huit}}%
 \def\PfMTexteEncart{Indique ton travail ci-dessous.}%
 \setKVdefault[SchemaParcours]{Colonnes=100,Rayon=2.5mm,Largeur=7.5mm,Couleur=gray!70}%,Csv=false}%
 \setKVdefault[SchemaContrat]{Ecart=7mm,Rayon=2.5mm}%
@@ -93,9 +95,9 @@
 \xdef\PfMRetiensLienDefMa{}%
 % Commande pour passer des options à travers la clé Input. Elle remplace \input :)
 \NewDocumentCommand\Input{om}{%
-  \def\Relecture{\setKV[ClesExercices]{#1}}
-  \input{#2}
-  \def\Relecture{}
+  \def\Relecture{\setKV[ClesExercices]{#1}}%
+  \input{#2}%
+  \def\Relecture{}%
 }%
 % Sucres
 \makeatletter%
@@ -858,7 +860,8 @@
   \setcounter{Melquestions}{0}%
   \setsepchar{\item}\ignoreemptyitems%
   \readlist*\ListeTest{#2}%
-%  La liste des éléments retenus est \showitems*\ListeTest[]
+  \reademptyitems
+ % La liste des éléments retenus est \showitems*\ListeTest[]\par
   \IfNoValueTF{#1}{%
     \ChoixAleaMultiMix{\ListeTestlen}{1}{\ListeTestlen}{0}{\ListeShuffleA}%
     \xdef\MelangeValeurTotale{\ListeTestlen}%
@@ -869,6 +872,8 @@
   \ExporteListe{ListeShuffle}{\ListeShuffleA}%
   \setsepchar{,}\ignoreemptyitems%
   \readlist*\ListeNumQ{\ListeShuffleA}%
+  \reademptyitems
+ % L'ordre des questions est \ListeNumQ[]
   \setcounter{Comptequestions}{1}%
   \begin{enumerate}
     \loop%
@@ -882,11 +887,15 @@
 
 \NewDocumentEnvironment{Enumelangesol}{b}{%
   \setcounter{Melquestions}{0}%
-  \setsepchar{\item}%
+  \setsepchar{\item}\ignoreemptyitems%
   \readlist*\ListeTest{#1}%
+  \reademptyitems
   \RestoreListe{ListeShuffle}%
   \setsepchar{,}\ignoreemptyitems%
   \readlist*\ListeNumQ{\ListeShuffle}%
+  \reademptyitems
+%  la liste des éléments retenus est \showitems*\ListeTest[]\par
+%  L'ordre des questions est \ListeNumQ[]\par
   \setcounter{Comptequestions}{1}%
   \begin{enumerate}
     \loop%
@@ -1038,31 +1047,27 @@
 \NewDocumentEnvironment{AideA}{+b}{%
   \ifnum\fpeval{\useKV[ClesExercices]{Aide}}>0\relax%
     \begin{PfMSeek}%
+      #1
+    \end{PfMSeek}%
   \else%
     \begin{PfMHide}%
+      #1
+    \end{PfMHide}
   \fi%
-  #1
 }{%
-  \ifnum\fpeval{\useKV[ClesExercices]{Aide}}>0\relax%
-    \end{PfMSeek}%
-  \else%
-    \end{PfMHide}%
-  \fi%
 }%
 
 \NewDocumentEnvironment{AideB}{+b}{%
   \ifnum\fpeval{\useKV[ClesExercices]{Aide}}>1\relax%
     \begin{PfMSeek}%
+      #1
+    \end{PfMSeek}
   \else%
     \begin{PfMHide}%
+      #1
+    \end{PfMHide}
   \fi%
-  #1
 }{%
-  \ifnum\fpeval{\useKV[ClesExercices]{Aide}}>1\relax%
-    \end{PfMSeek}%
-  \else%
-    \end{PfMHide}%
-  \fi%
 }%
   
 \NewDocumentEnvironment{Indications}{+b}{%
@@ -1250,16 +1255,19 @@
 \makeatother
 
 \NewDocumentCommand\PfMAffichageEntrainement{}{%
-  \ifPfMDeuxColonnes
-    \newpage
-  \else
-    \ifPfMRectoVerso
-      \cleardoublepage
+  \ifboolKV[Boulot]{ESansSaut}{\vfill}{%
+    \ifPfMDeuxColonnes
+      \newpage
     \else
-      \clearpage
+      \ifPfMRectoVerso
+        \cleardoublepage
+      \else
+        \clearpage
+      \fi
     \fi
-  \fi
+  }%
   \TikzAutomatismes
+  \setlength{\columnseprule}{\useKV[Boulot]{EEpaisseur}}%
   \ifboolKV[Boulot]{EntrainementColonnes}{\begin{multicols}{\useKV[Boulot]{EColonnes}}}{}%
   \setcounter{PfMExoEntrai}{0}%
   \xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{%
@@ -1353,14 +1361,28 @@
   \@ifundefined{Op at total#1}{recompilez}%
   {%
     \opunzero{total#1}% on ne sait jamais
-    \opset{decimalsepsymbol={,}}
+    \opset{decimalsepsymbol={,}}%
     \opprint{total#1}~%
-    \opset{decimalsepsymbol={.}}
+    \opset{decimalsepsymbol={.}}%
+    \useKV[ClesExercices]{MotPoint}%
     \opcmp{total#1}{2}%
-    \ifopge \useKV[ClesExercices]{MotPoint}s\else \useKV[ClesExercices]{MotPoint}\fi
+    \ifopge s\fi%
   }%
 }
 
+\newcommand\ScoreMaximal{%
+  \@ifundefined{Op at ScoreTotal\thePfMMaquette}{recompilez}%
+  {%
+    \opunzero{ScoreTotal\thePfMMaquette}% on ne sait jamais
+    \opset{decimalsepsymbol={,}}%
+    \opprint{ScoreTotal\thePfMMaquette}~%
+    \opset{decimalsepsymbol={.}}%
+    \useKV[ClesExercices]{MotPoint}%
+    \opcmp{ScoreTotal\thePfMMaquette}{2}%
+    \ifopge s\fi%
+  }%
+}
+
 \newcommand\NoteFinale{%
   \@ifundefined{Op at TotalExo}{Recompilez}%
   {%
@@ -2513,6 +2535,130 @@
   }%
 }%
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand\PfMScore{m}{%
+  \immediate\write\@auxout{%
+    \string\opadd*{#1}{ScoreTotal\thePfMMaquette}{ScoreTotal\thePfMMaquette}%
+  }%
+  \num{#1} pt\xintifboolexpr{#1>2 || #1==2}{s}{}%
+}%
+
+\def\PfMMPGrilleCode{%
+  PapierLargeur=floor(\mpdim{\linewidth}/(5mm));
+  color PapierCouleur;
+  PapierCouleur=0.8white;
+  %
+  vardef Papier(expr nb,score)=
+    path horizon,verticon;
+    horizon=(0,0)--(PapierLargeur*5mm,0);
+    verticon=(0,0)--(0,abs(nb)*5mm);
+    picture Papiers;
+    Papiers=image(
+      drawoptions(withcolor PapierCouleur);
+      for k=0 upto PapierLargeur:
+        draw verticon shifted((k*5mm,0));
+      endfor;
+      for k=0 upto abs(nb):
+        draw horizon shifted((0,k*5mm));
+      endfor;
+      drawoptions();
+      if nb<0:
+        path cc,cd,ce;
+        cd=(unitsquare xscaled (3*5mm) yscaled (abs(nb)*5mm)) shifted(5mm*(PapierLargeur-3,0));
+        ce=(unitsquare scaled (2*5mm)) shifted(5mm*(PapierLargeur-2.5,1));
+        cc=(unitsquare xscaled (6*5mm) yscaled (2*5mm)) shifted(5mm*(PapierLargeur-10,1));
+        fill cd withcolor PapierCouleur;
+        fill ce withcolor white;
+        fill cc withcolor white;
+        %drawoptions(withpen pencircle scaled 1);
+        draw ce;
+        draw cc;
+        draw cd;
+        draw polygone((0,0),(PapierLargeur*5mm,0),5mm*(PapierLargeur,abs(nb)),5mm*(0,abs(nb)));
+        if score>0:
+          label.bot(TEX("\PfMScore{"&decimal(score)&"}"),5mm*(PapierLargeur-1.5,1));
+        fi;
+      fi;
+    );
+    Papiers
+  enddef;
+}%
+
+\def\PfMPapierCinqCinq#1#2{%
+  \begin{center}
+  \ifluatex%
+    \mplibforcehmode%
+    \begin{mplibcode}%
+      \PfMMPGrilleCode
+      trace Papier(#1,#2);
+    \end{mplibcode}%
+  \else%
+    \begin{mpost}[mpsettings={\PfMMPGrilleCode}]
+      trace Papier(#1,#2);
+    \end{mpost}%
+  \fi%
+  \end{center}
+}%
+
+\def\PfMMPSeyesCode{%
+  u:=\useKV[ClesExercices]{EchelleSeyes}*1mm;
+  PapierLargeur=floor(\mpdim{\linewidth}/(u));
+  color PapierCouleur;
+  PapierCouleur=0.8white;%\useKV[Papiers]{Couleur};
+  vardef Seyes(expr nb,score)=
+    path horizon,verticon;
+    horizon=(0,0)--u*(PapierLargeur,0);
+    verticon=(0,0)--u*(0,abs(nb));
+    picture PapierSeyes;
+    PapierSeyes=image(
+      drawoptions(withcolor PapierCouleur);
+      for k=0 upto (PapierLargeur):
+        draw verticon shifted((k*u,0));
+      endfor;
+      for k=0 step 0.25 until abs(nb):
+        draw horizon shifted((0,k*u)) withpen pencircle scaled 0.5;
+      endfor;
+      for k=0 upto abs(nb):
+        draw horizon shifted((0,k*u)) withpen pencircle scaled 1.25;
+      endfor;
+      drawoptions();
+      if nb<0:
+        path cc,cd,ce;
+        cd=(unitsquare xscaled (2*u) yscaled (abs(nb)*u)) shifted(u*(PapierLargeur-2,0));
+        ce=(unitsquare scaled (1*u)) shifted(u*(PapierLargeur-1.5,1));
+        cc=(unitsquare xscaled (4*u) yscaled (1*u)) shifted(u*(PapierLargeur-7,1));
+        fill cd withcolor PapierCouleur;
+        fill ce withcolor white;
+        fill cc withcolor white;
+        draw cc;
+        draw cd;
+        draw ce;
+        draw polygone((0,0),(PapierLargeur*u,0),u*(PapierLargeur,abs(nb)),u*(0,abs(nb)));
+        if score>0:
+          label.bot(TEX("\PfMScore{"&decimal(score)&"}"),u*(PapierLargeur-1,1));
+        fi;
+      fi;  
+    );
+    PapierSeyes
+  enddef;
+}%
+
+\def\PfMPapierSeyes#1#2{%
+  \begin{center}
+    \ifluatex%
+      \mplibforcehmode%
+      \begin{mplibcode}%
+        \PfMMPSeyesCode
+        trace Seyes(#1,#2);
+      \end{mplibcode}%
+    \else%
+      \begin{mpost}[mpsettings={\PfMMPSeyesCode}]%
+        trace Seyes(#1,#2);
+      \end{mpost}
+    \fi%
+  \end{center}
+}%
+
 \NewDocumentCommand\PfMApresLesExercices{}{%
   \ifboolKV[ClesExercices]{Ligne}{%
     \vspace*{\PfMEspaceAvantLignes}%
@@ -2525,14 +2671,22 @@
       % 
     \end{PfMtcbEncart}%
   }{}%
+  \ifboolKV[ClesExercices]{Grilles}{%
+      \ifboolKV[ClesExercices]{Cinq}{%
+      \PfMPapierCinqCinq{\useKV[ClesExercices]{CinqCinq}}{\useKV[ClesExercices]{Score}}%
+    }{}%
+    \ifboolKV[ClesExercices]{Huit}{%
+      \PfMPapierSeyes{\useKV[ClesExercices]{Seyes}}{\useKV[ClesExercices]{Score}}%
+    }{}%
+  }{}%
   \ifboolKV[ClesExercices]{Profile}{\PfMshowitems}{}%
   \ifboolKV[ClesExercices]{ACompleter}{%
     \IfHookExistsTF{env/center/begin}{\RemoveFromHook{env/center/begin}[*]}{}%
-    \IfHookExistsTF{env/center/end}{\RemoveFromHook{env/center/after}[*]}{}%
+    \IfHookExistsTF{env/center/end}{\RemoveFromHook{env/center/end}[*]}{}%
     \IfHookExistsTF{env/itemize/begin}{\RemoveFromHook{env/itemize/begin}[*]}{}%
-    \IfHookExistsTF{env/itemize/end}{\RemoveFromHook{env/itemize/after}[*]}{}%
+    \IfHookExistsTF{env/itemize/end}{\RemoveFromHook{env/itemize/end}[*]}{}%
     \IfHookExistsTF{env/description/begin}{\RemoveFromHook{env/description/begin}[*]}{}%
-    \IfHookExistsTF{env/description/end}{\RemoveFromHook{env/description/after}[*]}{}%
+    \IfHookExistsTF{env/description/end}{\RemoveFromHook{env/description/end}[*]}{}%
   }{}%
 }%
 
@@ -3761,6 +3915,10 @@
   \setcounter{PfMSOS}{0}%
   % nouvelles valeurs.
   \stepcounter{PfMMaquette}%
+  \immediate\write\@auxout{%
+    \string\opcopy{0}{ScoreTotal\thePfMMaquette}
+  }%
+  %%\opadd*{#1}{ScoreTotal\thePfMMaquette}{ScoreTotal\thePfMMaquette}%
   \if at AssembleCorrections
   \immediate\openout\PfMfile at out \jobname-DefiMq-\thePfMMaquette.tex%
   \immediate\write\PfMfile at out{\unexpanded{\useKVdefault[Boulot]}}%



More information about the tex-live-commits mailing list.