summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/ProfCollege.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-02-18 03:01:44 +0000
committerNorbert Preining <norbert@preining.info>2022-02-18 03:01:44 +0000
commit41041c6bdcedcc33698491c2caec4cd725a4fe97 (patch)
tree59aa0f9e0235ceee2474351b4b1a90a1eace6619 /macros/latex/contrib/profcollege/latex/ProfCollege.sty
parentbd0e05b5b4dba5b38512acb2e7104f180fdb97e6 (diff)
CTAN sync 202202180301
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/ProfCollege.sty')
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty360
1 files changed, 339 insertions, 21 deletions
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 411551409e..8497e8d9d3 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/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}%
+ }%
}%
}%