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.