From 736fd624a41b983a5190e2bcfbc1fb779bdab35a Mon Sep 17 00:00:00 2001 From: Karl Berry 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](-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](-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