From 736fd624a41b983a5190e2bcfbc1fb779bdab35a Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 17 Feb 2022 21:46:26 +0000
Subject: profcollege (17feb22)

git-svn-id: svn://tug.org/texlive/trunk@62060 c570f23f-e606-0410-a88d-b1316a301751
---
 .../tex/latex/profcollege/ProfCollege.sty          | 360 +++++++++++++++++++--
 1 file changed, 339 insertions(+), 21 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty')

diff --git a/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty b/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
index 411551409ee..8497e8d9d34 100644
--- a/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
+++ b/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty
@@ -3,7 +3,7 @@
 % or later, see http://www.latex-project.org/lppl.txtf
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfCollege}[2022/02/16 v0.99-k Aide pour l'utilisation de LaTeX au collège]
+\ProvidesPackage{ProfCollege}[2022/02/17 v0.99-l Aide pour l'utilisation de LaTeX au collège]
 
 \RequirePackage{verbatim}
 
@@ -15246,7 +15246,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,O
 %%%
 % Reperage
 %%%
-\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black}
+\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black,Thermometre=false,Mercure=false}
 % ValeurOrigine permet de faire des morceaux de demi-droite gradu\'ee en passant par droite :)
 
 \def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
@@ -16748,11 +16748,10 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,O
     label.bot(TEX("\footnotesize\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
     label.bot(TEX("\footnotesize\num{"&decimal(ValeurOrigine)&"}"),A);
     if AffichageGrad>0:
-    for k=2 upto maxx:
-    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
-    endfor;
-    for k=minx upto -1:
-    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    fi;
     endfor;
     fi;
     vardef tata(text t)=%on place les points
@@ -16866,11 +16865,10 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,O
     label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ValeurUnitex)&"}"),unitex*(1,0));
     label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ValeurOrigine)&"}"),A);
     if AffichageGrad>0:
-    for k=2 upto maxx:
-    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
-    endfor;
-    for k=minx upto -1:
-    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    fi;
     endfor;
     fi;
     vardef tata(text t)=%on place les points
@@ -16922,6 +16920,318 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,O
   \fi
 }%
 
+\def\MPThermo#1#2{%
+  % #1 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires
+  % #2 : liste des noms des points
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    maxx:=0;
+    minx:=4000;
+    unitex:=\useKV[ClesReperage]{Unitex}*cm;
+    pasx:=\useKV[ClesReperage]{Pasx};
+    unitp:=unitex/pasx;%unit\'e de d\'eplacement
+    ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+    ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+    AffichageGrad:=\AffichageGrad;
+    AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+    AffichageNom:=\AffichageNom;
+    boolean Mercure;
+    Mercure=\useKV[ClesReperage]{Mercure};
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    % -----
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(0,maxx);
+    C=unitp*(0,minx);
+    % On trace la demi-droite
+    draw (C+unitp*(0,-0.75))--(B+unitp*(0,0.75));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+    label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurOrigine)&"}"),A);
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.lft(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+    fi;
+    endfor;
+    fi;
+
+    vardef Thermo(expr nbt)=
+    pair Tc[];
+    Tc[0]=(5mm,unitp*(minx-1));
+    path cc[];
+    cc1=cercles(Tc[0],2.5mm);
+    Tc1=pointarc(cc1,75);
+    Tc4=pointarc(cc1,105);
+    trace arccercle(Tc4,Tc1,Tc0);
+    Tc2=(xpart(Tc1),ypart(B+unitp*(0,0.75)));
+    Tc3=(xpart(Tc4),ypart(B+unitp*(0,0.75)));
+    trace Tc1--Tc2--arccercle(Tc2,Tc3,iso(Tc2,Tc3))--Tc4;
+    Tc5=(xpart(Tc1),ypart(unitp*(0,valeur[1])));
+    Tc6=(xpart(Tc4),ypart(unitp*(0,valeur[1])));
+    path temp;
+    temp=Tc1--Tc5--Tc6--Tc4--arccercle(Tc4,Tc1,Tc0)--cycle;
+    if nbt>0:
+    fill temp;
+    fi;
+    enddef;
+
+    if Mercure:Thermo(1) else : Thermo(0) fi;
+    
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label.rt(TEX(p_),unitp*(0,valeur[n]));
+    if p_<>"":
+    pointe(unitp*(0,valeur[n]));
+    fi;
+    endfor;
+    fi;
+    if AffichageCoord=3:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    drawarrow (unitp*(-1,valeur[n]))--(unitp*(-0.3,valeur[n]));
+    label.rt(btex \hbox to2em{\dotfill} etex,(unitp*(-1,valeur[n])));
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=2:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.rt(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(0,valeur[n]));
+    else:
+    label.rt(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(0,valeur[n]));
+    fi;
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=1:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    label.rt(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+    pointe(unitp*(0,valeur[n]));
+    draw (unitp*(0,valeur[n]))--(7.5mm,unitp*valeur[n]) dashed evenly;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    %%%
+    tata(#2);
+  \end{mplibcode}
+  \else
+  \begin{mpost}[mpsettings={unitex:=\useKV[ClesReperage]{Unitex}*cm;
+    pasx:=\useKV[ClesReperage]{Pasx};
+    unitp:=unitex/pasx;%unit\'e de d\'eplacement
+    ValeurUnitex:=\useKV[ClesReperage]{ValeurUnitex};
+    ValeurOrigine:=\useKV[ClesReperage]{ValeurOrigine};
+    AffichageGrad:=\AffichageGrad;
+    AffichageCoord:=\useKV[ClesReperage]{AffichageAbs};
+    AffichageNom:=\AffichageNom;
+    boolean Mercure;
+    Mercure=\useKV[ClesReperage]{Mercure};}]
+    maxx:=0;
+    minx:=4000;
+    numeric valeur[];
+    vardef titi(text t)=
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    valeur[n]=p_;
+    endfor;
+    enddef;
+    titi(#1);
+    % Détermination des abscisses maximale et minimale
+    for k=1 upto n:
+    if valeur[k]>maxx:
+    maxx:=valeur[k];
+    fi;
+    if valeur[k]<minx:
+    minx:=valeur[k];
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(pasx+1):
+    maxx:=2*pasx-1;
+    fi;
+    if minx>(-pasx-1):
+    minx:=-2*pasx-1;
+    fi;
+    % -----
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(0,maxx);
+    C=unitp*(0,minx);
+    % On trace la demi-droite
+    draw (C+unitp*(0,-0.75))--(B+unitp*(0,0.75));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurUnitex)&"}"),unitex*(0,1));
+    label.lft(TEX("\footnotesize\Temp{"&decimal(ValeurOrigine)&"}"),A);
+    if AffichageGrad>0:
+    for k=((minx+(minx mod pasx)) div pasx) upto (maxx div pasx):
+    if (k<0) or (k>1):
+    label.lft(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-ValeurOrigine)&"*"&decimal(k)&"}}"),unitex*(0,k));%%%
+    fi;
+    endfor;
+    fi;
+
+    vardef Thermo(expr nbt)=
+    pair Tc[];
+    Tc[0]=(5mm,unitp*(minx-1));
+    path cc[];
+    cc1=cercles(Tc[0],2.5mm);
+    Tc1=pointarc(cc1,75);
+    Tc4=pointarc(cc1,105);
+    trace arccercle(Tc4,Tc1,Tc0);
+    Tc2=(xpart(Tc1),ypart(B+unitp*(0,0.75)));
+    Tc3=(xpart(Tc4),ypart(B+unitp*(0,0.75)));
+    trace Tc1--Tc2--arccercle(Tc2,Tc3,iso(Tc2,Tc3))--Tc4;
+    Tc5=(xpart(Tc1),ypart(unitp*(0,valeur[1])));
+    Tc6=(xpart(Tc4),ypart(unitp*(0,valeur[1])));
+    path temp;
+    temp=Tc1--Tc5--Tc6--Tc4--arccercle(Tc4,Tc1,Tc0)--cycle;
+    if nbt>0:
+    fill temp;
+    fi;
+    enddef;
+
+    if Mercure:Thermo(1) else : Thermo(0) fi;
+    
+    vardef tata(text t)=%on place les points
+    if AffichageNom>0:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    label.rt(TEX(p_),unitp*(0,valeur[n]));
+    if p_<>"":
+    pointe(unitp*(0,valeur[n]));
+    fi;
+    endfor;
+    fi;
+    if AffichageCoord=3:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    drawarrow (unitp*(-1,valeur[n]))--(unitp*(-0.3,valeur[n]));
+    label.rt(btex \hbox to2em{\dotfill} etex,(unitp*(-1,valeur[n])));
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=2:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    if ((ValeurUnitex*valeur[n]) mod pasx)<>0:
+    label.rt(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(0,valeur[n]));
+    else:
+    label.rt(TEX("\footnotesize\num{\fpeval{"&decimal(ValeurUnitex)&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),unitp*(0,valeur[n]));
+    fi;
+    pointe(unitp*(0,valeur[n]-ValeurOrigine));
+    fi;
+    endfor;
+    elseif AffichageCoord=1:
+    n:=0;
+    for p_=t:
+    n:=n+1;
+    if p_<>"":
+    label.rt(TEX("\footnotesize\Temp{\fpeval{"&decimal(ValeurOrigine)&"+"&decimal(ValeurUnitex-(ValeurOrigine))&"*"&decimal(valeur[n])&"/"&decimal(pasx)&"}}"),(5mm,unitp*valeur[n]));
+    pointe(unitp*(0,valeur[n]));
+    draw (unitp*(0,valeur[n]))--(7.5mm,unitp*valeur[n]) dashed evenly;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    %%%
+    tata(#2);
+  \end{mpost}
+  \fi
+}
+
 % Pour construire les droite/demi-droite gradu\'ee
 \def\builddemidroitenew{%
   \toklistepointdroite{}%
@@ -16929,18 +17239,26 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,O
   \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{}
   \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}}
   \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{}
-  \ifboolKV[ClesReperage]{DemiDroite}{%
-    \xdef\Listedesvaleursaplacersurlademidroite{}%
-    \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
-    \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
-    %\Listedesvaleursaplacersurlademidroite%
-    \MPNewDEMIGraduee{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
-  }{%
+  \ifboolKV[ClesReperage]{Thermometre}{%
     \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
     \xdef\Listedesvaleursaplacersurlademidroite{}%
     \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
-    %\Listedesvaleursaplacersurlademidroite%
-    \MPNewDROITEGraduee{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+    % \Listedesvaleursaplacersurlademidroite%
+    \MPThermo{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+  }{%
+    \ifboolKV[ClesReperage]{DemiDroite}{%
+      \xdef\Listedesvaleursaplacersurlademidroite{}%
+      \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+      \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+      % \Listedesvaleursaplacersurlademidroite%
+      \MPNewDEMIGraduee{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+    }{%
+      \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdemidroite\compteur\nil}%
+      \xdef\Listedesvaleursaplacersurlademidroite{}%
+      \foreachitem\compteur\in\ListePointDroite{\xdef\Listedesvaleursaplacersurlademidroite{\Listedesvaleursaplacersurlademidroite,\ListePointDroite[\compteurcnt,1]}}%
+      % \Listedesvaleursaplacersurlademidroite%
+      \MPNewDROITEGraduee{\Listedesvaleursaplacersurlademidroite}{\the\toklistenompointdemidroite}%
+    }%
   }%
 }%
 
-- 
cgit v1.2.3

