summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex581
1 files changed, 581 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex b/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
new file mode 100644
index 0000000000..bb3305deb1
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
@@ -0,0 +1,581 @@
+
+
+
+
+%%%
+% Fonction
+%%%
+\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Epaisseur=1,Couleur=black,CouleurTrace=black,PointsCourbe=true,Codes=false,Origine={(0,0)},Vide=false}
+\defKV[ClesFonction]{Traces=\setKV[ClesFonction]{Codes}}%
+
+\newtoks\toklistePtsFn%pour la discipline
+
+\def\UpdatePtsFn#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{#1,(#2,#3),#4,}}%
+\def\UpdatePtsFN#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{(#2,#3),}}%
+
+\NewDocumentCommand\Fonction{o m}{%
+ \useKVdefault[ClesFonction]%
+ \setKV[ClesFonction]{#1}%
+ \ifboolKV[ClesFonction]{Trace}{%
+ \useKVdefault[TraceG]%
+ \setKV[TraceG]{#1}%
+ \MPTraceFonction[#1]{\useKV[ClesFonction]{Calcul}}%
+ }{%
+ \ifboolKV[ClesFonction]{Points}{%
+ \toklistePtsFn{}%
+ \setsepchar[*]{ยง*/}%\ignoreemptyitems%
+ \readlist*\ListePoints{#2}%
+ \ifboolKV[ClesFonction]{Catmull}{%
+ \xdef\PfCFooListePoints{(\ListePoints[1,2],\ListePoints[1,3]),}%
+ \foreachitem\compteur\in\ListePoints{%
+ \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
+ }%
+ \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\ListePointslen,2],\ListePoints[\ListePointslen,3]),}%
+ \MPCatmull{\PfCFooListePoints}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}%
+ }{%
+ \xdef\PfCFooListePoints{}
+ \ifboolKV[ClesFonction]{Tangentes}{%
+ \foreachitem\compteur\in\ListePoints{%
+ % \expandafter\UpdatePtsFn\compteur\nil%
+ \xdef\PfCFooListePoints{\PfCFooListePoints \ListePoints[\compteurcnt,1],(\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),\ListePoints[\compteurcnt,4],}%
+ }%
+ }{%
+ \foreachitem\compteur\in\ListePoints{%
+ % \expandafter\UpdatePtsFN\compteur\nil%
+ \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
+ }%
+ }%
+ \MPCourbeNew{\PfCFooListePoints}%\the\toklistePtsFn}%
+ }%
+ }{%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeFonction{#2}%
+ \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
+ \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
+ \StrSubstitute{\tempa}{*}{}[\tempab]%
+ \ifboolKV[ClesFonction]{Ecriture}{%
+ \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}%
+ }{}%
+ \ifboolKV[ClesFonction]{Definition}{%
+ \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}%
+ }{}%
+ \ifboolKV[ClesFonction]{Tableau}{%
+ \buildtabfonction%
+ }{}%
+ \reademptyitems%
+ }%
+ }%
+}%
+
+\def\MPCourbeNew#1{%#2#3#4#5#6{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ x.u:=\useKV[ClesFonction]{PasX};
+ y.u:=\useKV[ClesFonction]{PasY};
+ X.u:=\useKV[ClesFonction]{UniteX};
+ Y.u:=\useKV[ClesFonction]{UniteY};
+ Epaisseur:=\useKV[ClesFonction]{Epaisseur};
+
+ boolean Prolonge,Tangentes,PointsCourbe,Codes;
+ Prolonge=\useKV[ClesFonction]{Prolonge};
+ Tangentes=\useKV[ClesFonction]{Tangentes};
+ PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+ Codes=\useKV[ClesFonction]{Codes};
+
+ color CouleurTrace;
+ CouleurTrace=\useKV[ClesFonction]{CouleurTrace};
+
+ def enplace=
+ xscaled X.u yscaled Y.u
+ enddef;
+
+ vardef placepoint(expr q,r)=
+ (q,r)*cm enplace
+ enddef;
+
+ numeric dirav[],dirap[];
+ pair Fn[],Gn[];
+ n=0;
+ if Tangentes:
+ for p_=#1:
+ if (n mod 3)=0:
+ dirav[n div 3]=p_;
+ fi;
+ if (n mod 3)=1:
+ Gn[n div 3]=p_;
+ Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+ fi;
+ if (n mod 3)=2:
+ dirap[n div 3]=p_;
+ fi;
+ n:=n+1;
+ endfor;
+ N:=(n-1) div 3;
+ else:
+ for p_=#1:
+ Gn[n]=p_;
+ Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+ n:=n+1;
+ endfor;
+ N:=(n-1);
+ fi;
+ MinX=999;
+ MaxX=-999;
+ MinY=999;
+ MaxY=-999;
+ for k=0 upto N:
+ if xpart(Gn[k])<MinX:
+ MinX:=xpart(Gn[k]);
+ fi;
+ if xpart(Gn[k])>MaxX:
+ MaxX:=xpart(Gn[k]);
+ fi;
+ if ypart(Gn[k])<MinY:
+ MinY:=ypart(Gn[k]);
+ fi;
+ if ypart(Gn[k])>MaxY:
+ MaxY:=ypart(Gn[k]);
+ fi;
+ endfor;
+ if MinY<0:
+ if MinY<>ceiling(MinY):
+ MinY:=ceiling(MinY)-1;
+ fi;
+ fi;
+ if MinX<0:
+ if MinX<>ceiling(MinX):
+ MinX:=ceiling(MinX)-1;
+ fi;
+ fi;
+ if MaxY<>ceiling(MaxY):
+ MaxY:=ceiling(MaxY);
+ fi;
+ if MaxX<>ceiling(MaxX):
+ MaxX:=ceiling(MaxX);
+ fi;
+ if MaxX<1:
+ MaxX:=1;
+ fi;
+ if MaxY<1:
+ MaxY:=1;
+ fi;
+ if Prolonge:
+ for k=MinY-1 step y.u until MaxY+1:
+ draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+ endfor;
+ for k=MinX step x.u until MaxX:
+ draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+ endfor;
+ else:
+ for k=MinY-1 step y.u until MaxY+1:
+ draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+ endfor;
+ for k=MinX-1 step x.u until MaxX+1:
+ draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+ endfor;
+ fi;
+ if Prolonge:
+ drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+ drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+ else:
+ drawarrow (0,(MinY-1)*Y.u*cm)--(0*cm,(MaxY+1)*Y.u*cm);
+ drawarrow ((MinX-1)*X.u*cm,0*cm)--((MaxX+1)*X.u*cm,0*cm);
+ fi;
+ label.llft(btex O etex,(0,0));
+ dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+ dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+ draw if Tangentes:
+ Fn[0]{dir dirap[0]}
+ for k=1 upto (N-1):
+ ..{dir dirav[k]}Fn[k]{dir dirap[k]}
+ endfor
+ ..{dir dirav[N]}Fn[N]
+ else:
+ Fn[0]
+ for k=1 upto N:
+ ..Fn[k]
+ endfor fi withpen pencircle scaled Epaisseur withcolor CouleurTrace;
+ if PointsCourbe:
+ if Prolonge:
+ for k=1 upto N-1:
+ fill cercles(Fn[k],0.5mm);
+ endfor;
+ else:
+ for k=0 upto N:
+ fill cercles(Fn[k],0.5mm);
+ endfor;
+ fi;
+ fi;
+ if Codes:
+ \useKV[ClesFonction]{Traces};
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={%
+ x.u:=\useKV[ClesFonction]{PasX};y.u:=\useKV[ClesFonction]{PasY};
+ X.u:=\useKV[ClesFonction]{UniteX};Y.u:=\useKV[ClesFonction]{UniteY};
+ Epaisseur:=\useKV[ClesFonction]{Epaisseur};
+ boolean Prolonge,Tangentes,PointsCourbe,Codes;
+ Prolonge=\useKV[ClesFonction]{Prolonge};
+ Tangentes=\useKV[ClesFonction]{Tangentes};
+ PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+ Codes=\useKV[ClesFonction]{Codes};
+ color CouleurTrace;
+ CouleurTrace=\useKV[ClesFonction]{CouleurTrace};
+ }]
+ def enplace=
+ xscaled X.u yscaled Y.u
+ enddef;
+ vardef placepoint(expr q,r)=
+ (q,r)*cm enplace
+ enddef;
+ numeric dirav[],dirap[];
+ pair Fn[],Gn[];
+ n=0;
+ if Tangentes:
+ for p_=#1:
+ if (n mod 3)=0:
+ dirav[n div 3]=p_;
+ fi;
+ if (n mod 3)=1:
+ Gn[n div 3]=p_;
+ Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+ fi;
+ if (n mod 3)=2:
+ dirap[n div 3]=p_;
+ fi;
+ n:=n+1;
+ endfor;
+ N:=(n-1) div 3;
+ else:
+ for p_=#1:
+ Gn[n]=p_;
+ Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+ n:=n+1;
+ endfor;
+ N:=(n-1);
+ fi;
+ MinX=999;
+ MaxX=-999;
+ MinY=999;
+ MaxY=-999;
+ for k=0 upto N:
+ if xpart(Gn[k])<MinX:
+ MinX:=xpart(Gn[k]);
+ fi;
+ if xpart(Gn[k])>MaxX:
+ MaxX:=xpart(Gn[k]);
+ fi;
+ if ypart(Gn[k])<MinY:
+ MinY:=ypart(Gn[k]);
+ fi;
+ if ypart(Gn[k])>MaxY:
+ MaxY:=ypart(Gn[k]);
+ fi;
+ endfor;
+ if MinY<0:
+ if MinY<>ceiling(MinY):
+ MinY:=ceiling(MinY)-1;
+ fi;
+ fi;
+ if MinX<0:
+ if MinX<>ceiling(MinX):
+ MinX:=ceiling(MinX)-1;
+ fi;
+ fi;
+ if MaxY<>ceiling(MaxY):
+ MaxY:=ceiling(MaxY);
+ fi;
+ if MaxX<>ceiling(MaxX):
+ MaxX:=ceiling(MaxX);
+ fi;
+ if MaxX<1:
+ MaxX:=1;
+ fi;
+ if MaxY<1:
+ MaxY:=1;
+ fi;
+ if Prolonge:
+ for k=MinY-1 step y.u until MaxY+1:
+ draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+ endfor;
+ for k=MinX step x.u until MaxX:
+ draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+ endfor;
+ else:
+ for k=MinY-1 step y.u until MaxY+1:
+ draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+ endfor;
+ for k=MinX-1 step x.u until MaxX+1:
+ draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+ endfor;
+ fi;
+ if Prolonge:
+ drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+ drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+ else:
+ drawarrow (0,(MinY-1)*Y.u*cm)--(0*cm,(MaxY+1)*Y.u*cm);
+ drawarrow ((MinX-1)*X.u*cm,0*cm)--((MaxX+1)*X.u*cm,0*cm);
+ fi;
+ label.llft(btex O etex,(0,0));
+ dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+ dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+ draw if Tangentes:
+ Fn[0]{dir dirap[0]}
+ for k=1 upto (N-1):
+ ..{dir dirav[k]}Fn[k]{dir dirap[k]}
+ endfor
+ ..{dir dirav[N]}Fn[N]
+ else:
+ Fn[0]
+ for k=1 upto N:
+ ..Fn[k]
+ endfor fi withpen pencircle scaled Epaisseur withcolor CouleurTrace;
+ if PointsCourbe:
+ if Prolonge:
+ for k=1 upto N-1:
+ fill cercles(Fn[k],0.5mm);
+ endfor;
+ else:
+ for k=0 upto N:
+ fill cercles(Fn[k],0.5mm);
+ endfor;
+ fi;
+ fi;
+ \end{mpost}
+ \fi
+}
+
+\def\MPCatmull#1#2#3#4#5{%
+ % #1 la liste des points
+ % #2: pas en x
+ % #3: pas en y
+ % #4: unit\'e en x
+ % #5: unit\'e en y
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ boolean PointsCourbe;
+ PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
+
+ boolean Code;
+ Code=\useKV[ClesFonction]{Codes};
+
+ x.u:=#2;
+ y.u:=#3;
+ X.u:=#4;
+ Y.u:=#5;
+
+ def enplace=
+ xscaled X.u yscaled Y.u
+ enddef;
+
+ vardef placepoint(expr q,r)=
+ (q,r)*cm enplace
+ enddef;
+
+ pair Fn[],Gn[];
+ n=0;
+ for p_=#1:
+ Gn[n]=p_;
+ Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+ n:=n+1;
+ endfor;
+ N:=(n-1);
+ MinX=999;
+ MaxX=-999;
+ MinY=999;
+ MaxY=-999;
+ debutbalai=0;
+ finbalai=N;
+ if \useKV[ClesFonction]{Prolonge}:
+ debutbalai:=2;
+ finbalai:=N-2;
+ fi;
+ for k=debutbalai upto finbalai:
+ if xpart(Gn[k])<MinX:
+ MinX:=xpart(Gn[k]);
+ fi;
+ if xpart(Gn[k])>MaxX:
+ MaxX:=xpart(Gn[k]);
+ fi;
+ if ypart(Gn[k])<MinY:
+ MinY:=ypart(Gn[k]);
+ fi;
+ if ypart(Gn[k])>MaxY:
+ MaxY:=ypart(Gn[k]);
+ fi;
+ endfor;
+ if MaxY<1:
+ MaxY:=2;
+ fi;
+ if MinY>-1:
+ MinY:=-2;
+ fi;
+ if MinY<0:
+ if MinY<>ceiling(MinY):
+ MinY:=ceiling(MinY)-1;
+ fi;
+ fi;
+ if MinX<0:
+ if MinX<>ceiling(MinX):
+ MinX:=ceiling(MinX)-1;
+ fi;
+ fi;
+ if MaxY<>ceiling(MaxY):
+ MaxY:=ceiling(MaxY);
+ fi;
+ if MaxX<>ceiling(MaxX):
+ MaxX:=ceiling(MaxX);
+ fi;
+ if MaxX<1:
+ MaxX:=1;
+ fi;
+ if MaxY<1:
+ MaxY:=1;
+ fi;
+ %
+ path cadreexterieur;
+ cadreexterieur=(((MinX-1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX-1)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
+ draw Fn[1]
+ for k=2 upto N-1:
+ ..{dir angle(Fn[k+1]-Fn[k-1])}Fn[k]{dir angle(Fn[k+1]-Fn[k-1])}
+ endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur} withcolor \useKV[ClesFonction]{Couleur};
+ clip currentpicture to cadreexterieur;
+ picture RetiensCourbe;
+ RetiensCourbe=currentpicture;
+ currentpicture:=nullpicture;
+ for k=MinY-1 step y.u until MaxY+1:
+ draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+ endfor;
+ for k=MinX-1 step x.u until MaxX+1:
+ draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+ endfor;
+ if PointsCourbe:
+ for k=debutbalai upto finbalai:
+ fill cercles(Fn[k],0.5mm);
+ endfor;
+ fi;
+ drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+ drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+ %
+ draw RetiensCourbe;
+ label.llft(btex O etex,(0,0));
+ dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+ dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+ if Code:
+ \useKV[ClesFonction]{Traces};
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur}; color CouleurCourbe; CouleurCourbe=\useKV[ClesFonction]{Couleur};boolean PointsCourbe;PointsCourbe=\useKV[ClesFonction]{PointsCourbe};}]
+ x.u:=#2;
+ y.u:=#3;
+ X.u:=#4;
+ Y.u:=#5;
+
+ pair Fn[],Gn[];
+ n=0;
+ for p_=#1:
+ Gn[n]=p_;
+ Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+ n:=n+1;
+ endfor;
+ N:=(n-1);
+ MinX=999;
+ MaxX=-999;
+ MinY=999;
+ MaxY=-999;
+ debutbalai=0;
+ finbalai=N;
+ if \useKV[ClesFonction]{Prolonge}:
+ debutbalai:=2;
+ finbalai:=N-2;
+ fi;
+ for k=debutbalai upto finbalai:
+ if xpart(Gn[k])<MinX:
+ MinX:=xpart(Gn[k]);
+ fi;
+ if xpart(Gn[k])>MaxX:
+ MaxX:=xpart(Gn[k]);
+ fi;
+ if ypart(Gn[k])<MinY:
+ MinY:=ypart(Gn[k]);
+ fi;
+ if ypart(Gn[k])>MaxY:
+ MaxY:=ypart(Gn[k]);
+ fi;
+ endfor;
+ if MaxY<1:
+ MaxY:=2;
+ fi;
+ if MinY>-1:
+ MinY:=-2;
+ fi;
+ if MinY<0:
+ if MinY<>ceiling(MinY):
+ MinY:=ceiling(MinY)-1;
+ fi;
+ fi;
+ if MinX<0:
+ if MinX<>ceiling(MinX):
+ MinX:=ceiling(MinX)-1;
+ fi;
+ fi;
+ if MaxY<>ceiling(MaxY):
+ MaxY:=ceiling(MaxY);
+ fi;
+ if MaxX<>ceiling(MaxX):
+ MaxX:=ceiling(MaxX);
+ fi;
+ if MaxX<1:
+ MaxX:=1;
+ fi;
+ if MaxY<1:
+ MaxY:=1;
+ fi;
+ %
+ path cadreexterieur;
+ cadreexterieur=(((MinX-1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX-1)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
+ draw Fn[1]
+ for k=2 upto N-1:
+ ..{dir angle(Fn[k+1]-Fn[k-1])}Fn[k]{dir angle(Fn[k+1]-Fn[k-1])}
+ endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur} withcolor \useKV[ClesFonction]{Couleur};
+ clip currentpicture to cadreexterieur;
+ picture RetiensCourbe;
+ RetiensCourbe=currentpicture;
+ currentpicture:=nullpicture;
+ for k=MinY-1 step y.u until MaxY+1:
+ draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+ endfor;
+ for k=MinX-1 step x.u until MaxX+1:
+ draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+ endfor;
+ if PointsCourbe:
+ for k=debutbalai upto finbalai:
+ fill cercles(Fn[k],0.5mm);
+ endfor;
+ fi;
+ drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+ drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+ %
+ draw RetiensCourbe;
+ label.llft(btex O etex,(0,0));
+ dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+ dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+ \end{mpost}
+ \fi
+}%
+
+\def\buildtabfonction{%
+ \[%
+ \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}%
+ \hline%
+ \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\
+ \hline%
+ \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{& \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}}%
+ \\\hline
+ \end{array}%
+ \]%
+}% \ No newline at end of file